From 57355a0743c9122cfea6b3f71c7187f8c54749bb Mon Sep 17 00:00:00 2001 From: Yiyi Shen Date: Wed, 25 Sep 2024 14:15:13 +0800 Subject: [PATCH] [Audiosharing] Show dialogs when lifecycle isAtLeast STARTED Test: atest Flag: com.android.settingslib.flags.enable_le_audio_sharing Bug: 305620450 Change-Id: I34f4f46b9377f1e3ec1a4cd27687c14d674f6da4 --- .../audiosharing/AudioSharingDialogFragment.java | 6 ++++++ .../audiosharing/AudioSharingDisconnectDialogFragment.java | 6 ++++++ .../audiosharing/AudioSharingErrorDialogFragment.java | 6 ++++++ .../AudioSharingIncompatibleDialogFragment.java | 6 ++++++ .../audiosharing/AudioSharingJoinDialogFragment.java | 6 ++++++ .../audiosharing/AudioSharingProgressDialogFragment.java | 6 ++++++ .../audiosharing/AudioSharingStopDialogFragment.java | 6 ++++++ .../audiosharing/AudioSharingSwitchBarController.java | 2 +- 8 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java index 1b68eaccbfe..54a758c82d3 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogFragment.java @@ -31,6 +31,7 @@ import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.R; import com.android.settings.bluetooth.BluetoothPairingDetail; @@ -95,6 +96,11 @@ public class AudioSharingDialogFragment extends InstrumentedDialogFragment { Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } sHost = host; sListener = listener; sEventData = eventData; diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDisconnectDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDisconnectDialogFragment.java index 7d9164449aa..fbd2e635f82 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDisconnectDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDisconnectDialogFragment.java @@ -28,6 +28,7 @@ import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; @@ -92,6 +93,11 @@ public class AudioSharingDisconnectDialogFragment extends InstrumentedDialogFrag Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { int newGroupId = BluetoothUtils.getGroupId(newDevice); diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingErrorDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingErrorDialogFragment.java index 95b9bc36b92..b20ce6ad2fc 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingErrorDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingErrorDialogFragment.java @@ -25,6 +25,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settingslib.bluetooth.BluetoothUtils; @@ -52,6 +53,11 @@ public class AudioSharingErrorDialogFragment extends InstrumentedDialogFragment Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { Log.d(TAG, "Dialog is showing, return."); diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingIncompatibleDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingIncompatibleDialogFragment.java index aceeb94420e..af4e3064bf8 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingIncompatibleDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingIncompatibleDialogFragment.java @@ -26,6 +26,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settingslib.bluetooth.BluetoothUtils; @@ -68,6 +69,11 @@ public class AudioSharingIncompatibleDialogFragment extends InstrumentedDialogFr Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } sListener = listener; AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinDialogFragment.java index ef461ebf1a0..a952c488156 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingJoinDialogFragment.java @@ -28,6 +28,7 @@ import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.R; import com.android.settings.bluetooth.Utils; @@ -89,6 +90,11 @@ public class AudioSharingJoinDialogFragment extends InstrumentedDialogFragment { Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } sListener = listener; sNewDevice = newDevice; sEventData = eventData; diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingProgressDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingProgressDialogFragment.java index 53bfcf8f17c..9c8ddc7e21a 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingProgressDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingProgressDialogFragment.java @@ -31,6 +31,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; @@ -72,6 +73,11 @@ public class AudioSharingProgressDialogFragment extends InstrumentedDialogFragme Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { if (!sMessage.equals(message)) { diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingStopDialogFragment.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingStopDialogFragment.java index 5b71f5163e9..2bd79c942bb 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingStopDialogFragment.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingStopDialogFragment.java @@ -28,6 +28,7 @@ import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; @@ -89,6 +90,11 @@ public class AudioSharingStopDialogFragment extends InstrumentedDialogFragment { Log.d(TAG, "Fail to show dialog: " + e.getMessage()); return; } + Lifecycle.State currentState = host.getLifecycle().getCurrentState(); + if (!currentState.isAtLeast(Lifecycle.State.STARTED)) { + Log.d(TAG, "Fail to show dialog with state: " + currentState); + return; + } AlertDialog dialog = AudioSharingDialogHelper.getDialogIfShowing(manager, TAG); if (dialog != null) { int newGroupId = BluetoothUtils.getGroupId(newDevice); diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java index ebc8cecadbf..49839492e43 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java @@ -767,7 +767,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController && !(fragment instanceof AudioSharingErrorDialogFragment) && ((DialogFragment) fragment).getDialog() != null) { Log.d(TAG, "Remove stale dialog = " + fragment.getTag()); - ((DialogFragment) fragment).dismiss(); + ((DialogFragment) fragment).dismissAllowingStateLoss(); } } }