Skip to content

Commit

Permalink
Merge pull request #13075 from nextcloud/bugfix/check-dialog-fragment…
Browse files Browse the repository at this point in the history
…s-before-take-an-action

Bugfix Add ActivityExtensions for Checking Dialog Fragments
  • Loading branch information
alperozturk96 authored Jun 6, 2024
2 parents 0580f93 + 86bb629 commit 6423b89
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2024 Alper Ozturk <[email protected]>
* 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
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.nextcloud.client.jobs.upload.FileUploadHelper;
import com.nextcloud.client.network.ConnectivityService;
import com.nextcloud.utils.EditorUtils;
import com.nextcloud.utils.extensions.ActivityExtensionsKt;
import com.nextcloud.utils.extensions.BundleExtensionsKt;
import com.nextcloud.utils.extensions.IntentExtensionsKt;
import com.owncloud.android.MainApp;
Expand Down Expand Up @@ -525,11 +526,12 @@ public void showLoadingDialog(String message) {
Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
if (frag == null) {
Log_OC.d(TAG, "show loading dialog");
LoadingDialog loading = LoadingDialog.newInstance(message);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(loading, DIALOG_WAIT_TAG);
ft.commitAllowingStateLoss();
LoadingDialog loadingDialogFragment = LoadingDialog.newInstance(message);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
boolean isDialogFragmentReady = ActivityExtensionsKt.isDialogFragmentReady(this, loadingDialogFragment);
if (isDialogFragmentReady) {
loadingDialogFragment.show(fragmentTransaction, DIALOG_WAIT_TAG);
}
}
}

Expand All @@ -540,8 +542,11 @@ public void dismissLoadingDialog() {
Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
if (frag != null) {
Log_OC.d(TAG, "dismiss loading dialog");
LoadingDialog loading = (LoadingDialog) frag;
loading.dismissAllowingStateLoss();
LoadingDialog loadingDialogFragment = (LoadingDialog) frag;
boolean isDialogFragmentReady = ActivityExtensionsKt.isDialogFragmentReady(this, loadingDialogFragment);
if (isDialogFragmentReady) {
loadingDialogFragment.dismiss();
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
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;
Expand Down Expand Up @@ -598,7 +599,7 @@ private void setLeftFragment(Fragment fragment, boolean showSortListGroup) {
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
Expand All @@ -591,12 +587,13 @@ class SyncedFoldersActivity :
section
)

if (dialogFragment?.isStateSaved == true) {
Log_OC.d(TAG, "SyncedFolderPreferencesDialogFragment state is saved cannot be shown")
return
dialogFragment?.let {
if (isDialogFragmentReady(it)) {
it.show(fragmentTransaction, SYNCED_FOLDER_PREFERENCES_DIALOG_TAG)
} else {
Log_OC.d(TAG, "SyncedFolderPreferencesDialogFragment not ready")
}
}

dialogFragment?.show(fragmentTransaction, SYNCED_FOLDER_PREFERENCES_DIALOG_TAG)
}

override fun onVisibilityToggleClick(section: Int, syncedFolder: SyncedFolderDisplayItem) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
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;
Expand Down Expand Up @@ -479,7 +480,7 @@ public void onCheckAvailableSpaceStart() {
*/
@Override
public void onCheckAvailableSpaceFinish(boolean hasEnoughSpaceAvailable, String... filesToUpload) {
if (mCurrentDialog != null) {
if (mCurrentDialog != null && ActivityExtensionsKt.isDialogFragmentReady(this, mCurrentDialog)) {
mCurrentDialog.dismiss();
mCurrentDialog = null;
}
Expand Down Expand Up @@ -524,7 +525,7 @@ public void onCheckAvailableSpaceFinish(boolean hasEnoughSpaceAvailable, String.
} 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);
Expand Down

0 comments on commit 6423b89

Please sign in to comment.