ソースを参照

Add ActivityExtensions for checking dialog fragments readiness

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 11 ヶ月 前
コミット
5b41d847c2

+ 15 - 0
app/src/main/java/com/nextcloud/utils/extensions/ActivityExtensions.kt

@@ -0,0 +1,15 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Your Name <your@email.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.utils.extensions
+
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+
+fun AppCompatActivity.isDialogFragmentReady(fragment: Fragment): Boolean = isActive() && !fragment.isStateSaved()
+
+fun AppCompatActivity.isActive(): Boolean = !isFinishing && !isDestroyed

+ 2 - 1
app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -61,6 +61,7 @@ import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.utils.IntentUtil;
 import com.nextcloud.model.WorkerState;
 import com.nextcloud.model.WorkerStateLiveData;
+import com.nextcloud.utils.extensions.ActivityExtensionsKt;
 import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.nextcloud.utils.view.FastScrollUtils;
@@ -598,7 +599,7 @@ public class FileDisplayActivity extends FileActivity
         showSortListGroup(showSortListGroup);
 
         FragmentManager fragmentManager = getSupportFragmentManager();
-        if (!isFinishing() && !fragmentManager.isDestroyed()) {
+        if (ActivityExtensionsKt.isActive(this) && !fragmentManager.isDestroyed()) {
             FragmentTransaction transaction = fragmentManager.beginTransaction();
             transaction.addToBackStack(null);
             transaction.replace(R.id.left_fragment_container, fragment, TAG_LIST_OF_FILES);

+ 8 - 10
app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt

@@ -33,6 +33,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker
 import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.SubFolderRule
 import com.nextcloud.utils.extensions.getParcelableArgument
+import com.nextcloud.utils.extensions.isDialogFragmentReady
 import com.owncloud.android.BuildConfig
 import com.owncloud.android.MainApp
 import com.owncloud.android.R
@@ -577,11 +578,6 @@ class SyncedFoldersActivity :
     }
 
     override fun onSyncFolderSettingsClick(section: Int, syncedFolderDisplayItem: SyncedFolderDisplayItem) {
-        if (isFinishing || isDestroyed) {
-            Log_OC.d(TAG, "Activity destroyed or finished")
-            return
-        }
-
         val fragmentTransaction = supportFragmentManager.beginTransaction().apply {
             addToBackStack(null)
         }
@@ -591,12 +587,14 @@ class SyncedFoldersActivity :
             section
         )
 
-        if (dialogFragment?.isStateSaved == true) {
-            Log_OC.d(TAG, "SyncedFolderPreferencesDialogFragment state is saved cannot be shown")
-            return
-        }
+        dialogFragment?.let {
+            if (isDialogFragmentReady(it)) {
+                Log_OC.d(TAG, "SyncedFolderPreferencesDialogFragment not ready")
+                return
+            }
 
-        dialogFragment?.show(fragmentTransaction, SYNCED_FOLDER_PREFERENCES_DIALOG_TAG)
+            it.show(fragmentTransaction, SYNCED_FOLDER_PREFERENCES_DIALOG_TAG)
+        }
     }
 
     override fun onVisibilityToggleClick(section: Int, syncedFolder: SyncedFolderDisplayItem) {

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -32,6 +32,7 @@ import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.jobs.upload.FileUploadWorker;
 import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.utils.extensions.ActivityExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.UploadFilesLayoutBinding;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -479,7 +480,7 @@ public class UploadFilesActivity extends DrawerActivity implements LocalFileList
      */
     @Override
     public void onCheckAvailableSpaceFinish(boolean hasEnoughSpaceAvailable, String... filesToUpload) {
-        if (mCurrentDialog != null) {
+        if (mCurrentDialog != null && ActivityExtensionsKt.isDialogFragmentReady(this, mCurrentDialog)) {
             mCurrentDialog.dismiss();
             mCurrentDialog = null;
         }
@@ -524,7 +525,7 @@ public class UploadFilesActivity extends DrawerActivity implements LocalFileList
         } else {
             // show a dialog to query the user if wants to move the selected files
             // to the ownCloud folder instead of copying
-            String[] args = {getString(R.string.app_name)};
+            String[] args = { getString(R.string.app_name) };
             ConfirmationDialogFragment dialog = ConfirmationDialogFragment.newInstance(
                 R.string.upload_query_move_foreign_files, args, 0, R.string.common_yes,  R.string.common_no, -1);
             dialog.setOnConfirmationListener(this);