diff options
author | yueg <yueg@google.com> | 2017-09-05 11:31:47 -0700 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-09-11 10:56:28 -0700 |
commit | 6a80c8282d5dcb3749573baa2f3769204859307a (patch) | |
tree | a07d7f64ac43aa49c79dbf504a4ae51e4df35451 | |
parent | 9effa5c8840b462f58a1844693776a3b7bfccb1b (diff) |
Fix bubble crash when dismiss audio route selector dialog.
When AudioRouteSelectorDialogFragment tries to call
onAudioRouteSelectorDismiss() on its parent AudioRouteSelectorActivity, the parent might already finish,
which causes NPE. We should make sure the fragment is dismissed and removed before the activity finished. We do it when activity onPause because we don't expect it to resume.
Test: AudioRouteSelectorDialogFragmentTest
PiperOrigin-RevId: 167607068
Change-Id: Ifd2efcc92eb45262da2c6441bfac8119799d78f2
-rw-r--r-- | java/com/android/incallui/AudioRouteSelectorActivity.java | 18 | ||||
-rw-r--r-- | java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java | 1 |
2 files changed, 18 insertions, 1 deletions
diff --git a/java/com/android/incallui/AudioRouteSelectorActivity.java b/java/com/android/incallui/AudioRouteSelectorActivity.java index dfd4d1abf..f0ae79bc2 100644 --- a/java/com/android/incallui/AudioRouteSelectorActivity.java +++ b/java/com/android/incallui/AudioRouteSelectorActivity.java @@ -32,7 +32,7 @@ public class AudioRouteSelectorActivity extends FragmentActivity protected void onCreate(@Nullable Bundle bundle) { super.onCreate(bundle); AudioRouteSelectorDialogFragment.newInstance(AudioModeProvider.getInstance().getAudioState()) - .show(getSupportFragmentManager(), null); + .show(getSupportFragmentManager(), AudioRouteSelectorDialogFragment.TAG); } @Override @@ -44,4 +44,20 @@ public class AudioRouteSelectorActivity extends FragmentActivity public void onAudioRouteSelectorDismiss() { finish(); } + + @Override + protected void onPause() { + super.onPause(); + AudioRouteSelectorDialogFragment audioRouteSelectorDialogFragment = + (AudioRouteSelectorDialogFragment) + getSupportFragmentManager().findFragmentByTag(AudioRouteSelectorDialogFragment.TAG); + // If Android back button is pressed, the fragment is dismissed and removed. If home button is + // pressed, we have to manually dismiss the fragment here. The fragment is also removed when + // dismissed. + if (audioRouteSelectorDialogFragment != null) { + audioRouteSelectorDialogFragment.dismiss(); + } + // We don't expect the activity to resume + finish(); + } } diff --git a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java index c7a9d6332..860d2d282 100644 --- a/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java +++ b/java/com/android/incallui/audioroute/AudioRouteSelectorDialogFragment.java @@ -37,6 +37,7 @@ import com.android.dialer.common.LogUtil; /** Shows picker for audio routes */ public class AudioRouteSelectorDialogFragment extends BottomSheetDialogFragment { + public static final String TAG = "AudioRouteSelectorDialogFragment"; private static final String ARG_AUDIO_STATE = "audio_state"; /** Called when an audio route is picked */ |