Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/build.gradle
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/build.gradle	(revision 8457)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/build.gradle	(working copy)
@@ -14,7 +14,7 @@
         minSdk 24
         //noinspection EditedTargetSdkVersion
         targetSdk 33
-        versionCode 83
+        versionCode 84
         versionName "v3.1.4"
         setProperty("archivesBaseName", "MotionProGlobal-" + versionName + "-" + (new Date().format('yyyyMMddHH')))
         /**
Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/AndroidManifest.xml
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/AndroidManifest.xml	(revision 8457)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/AndroidManifest.xml	(working copy)
@@ -27,7 +27,16 @@
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.REORDER_TASKS" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- dangerous -->
+    <!--
+     Author: Yunting
+     Date: 231215
+     Modify: fix Bug 243, when click download complete notification, open device download folder
+     -->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
+        android:maxSdkVersion="32" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
+        android:maxSdkVersion="32"
+        tools:ignore="ScopedStorage" /> <!-- dangerous -->
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <!-- uses-permission android:name="android.permission.READ_LOGS" / -->
Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadManager.java
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadManager.java	(revision 8457)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadManager.java	(working copy)
@@ -514,13 +514,13 @@
 //        }
         
         public Request setDestinationInExternalPublicDir(Context context, String subPath) {
-            File file = context.getExternalFilesDir(Constants.DOWNLOAD_DIR);
             /**
              * Author: Yunting
-             * Date: 231214
-             * Modify: TODO: Changing the path to local downloads is causing an issue with the failure of duplicate file downloads
+             * Date: 231215
+             * Modify: fix Bug 243, change download path to device download folder
              * */
-            //File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+            File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+            //File file = context.getExternalFilesDir(Constants.DOWNLOAD_DIR);
             if (file != null && file.exists()) {
                 if (!file.isDirectory()) {
                     throw new IllegalStateException(file.getAbsolutePath() +
Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadProvider.java
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadProvider.java	(revision 8457)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadProvider.java	(working copy)
@@ -707,13 +707,13 @@
         }
         try {
             final String canonicalPath = new File(path).getCanonicalPath();
-            final String externalPath = Environment.getExternalStorageDirectory().getAbsolutePath();
             /**
              * Author: Yunting
-             * Date: 231214
-             * Modify: TODO: Changing the path to local downloads is causing an issue with the failure of duplicate file downloads
+             * Date: 231215
+             * Modify: fix Bug 243, change download path to device download folder
              * */
-            //final String externalPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
+            final String externalPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
+            //final String externalPath = Environment.getExternalStorageDirectory().getAbsolutePath();
             if (!canonicalPath.startsWith(externalPath)) {
                 throw new SecurityException("Destination must be on external storage: " + uri);
             }
Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadReceiver.java
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadReceiver.java	(revision 8454)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/downloader/provider/DownloadReceiver.java	(working copy)
@@ -29,7 +29,13 @@
 import android.net.NetworkInfo;
 import android.net.Uri;
 import android.os.Build;
+import android.os.Environment;
+import android.provider.DocumentsContract;
+import android.provider.MediaStore;
 import android.util.Log;
+import android.widget.Toast;
+
+import androidx.annotation.RequiresApi;
 
 /**
  * Receives system broadcasts (boot, network connectivity)
@@ -138,10 +144,19 @@
      * has been clicked.
      */
     private void openDownload(Context context, Cursor cursor) {
-    	int columnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID);
+        /**
+         * Author: Yunting
+         * Date: 231215
+         * Modify: fix Bug 243, when click download complete notification, open device download folder
+         * */
+        Intent intent=new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        context.startActivity(intent);
+
+    	/*int columnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID);
     	final long id = cursor.getInt(columnId);
         String mimetype =
-            cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE));
+                cursor.getString(cursor.getColumnIndexOrThrow(Downloads.Impl.COLUMN_MIME_TYPE));
         Uri path = ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, id);
         Intent activityIntent = new Intent(Intent.ACTION_VIEW);
         activityIntent.setDataAndType(path, mimetype);
@@ -150,7 +165,7 @@
             context.startActivity(activityIntent);
         } catch (ActivityNotFoundException ex) {
             Log.d(Constants.TAG, "no activity for " + mimetype, ex);
-        }
+        }*/
     }
 
     /**
Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/portal/WebAuthActivity.java
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/portal/WebAuthActivity.java	(revision 8454)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/portal/WebAuthActivity.java	(working copy)
@@ -36,7 +36,6 @@
     private ActivityWebAuthBinding binding;
 
     private final String tag = "WebAuthActivity";
-    private final String ytTag = "YTLog";
 
     private String webAuthUrl = "";
 
Index: /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/portal/resource/WebApps.java
===================================================================
--- /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/portal/resource/WebApps.java	(revision 8457)
+++ /branches/ag_client_motionpro_android_3.1.4/motionpro_android/app/src/main/java/net/arraynetworks/mobilenow/portal/resource/WebApps.java	(working copy)
@@ -265,19 +265,11 @@
 	}
 
 	public static void startBrowser(Activity activity, String url) {
-		/*Intent intentBrowser = new Intent(Intent.ACTION_VIEW,
+		Intent intentBrowser = new Intent(Intent.ACTION_VIEW,
 				Uri.parse(url), activity, BrowserActivity.class);
 		intentBrowser.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
 		intentBrowser.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
 		intentBrowser.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
-		activity.startActivity(intentBrowser);*/
-
-		/**
-		 * Author: Yunting
-		 * Date: 231214
-		 * Modify: fix Bug 423, WebApp is now set to open in an external browser.
-		 * */
-		Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
-		activity.startActivity(intent);
+		activity.startActivity(intentBrowser);
 	}
 }
