From 45f0701380d1e0a62e531cfe1e1f7cecf6498f03 Mon Sep 17 00:00:00 2001 From: Antony Sargent Date: Wed, 19 Jun 2019 11:30:33 -0700 Subject: [PATCH] Add a listener for subscription changes to SimDialogFragment For some kinds of telephony changes that might happen while we're already showing one of these dialogs, we already get sent a new intent for the dialog which we internally convert into a refresh of the dialog contents instead of stacking a new copy on top of the old one. But it turns out there are some other cases where the telephony stack doesn't send a new intent for the dialog but *does* send a change event through the SubscriptionManager, and we want to respond to those as well. This CL adds a listener for those events. Fixes: 135276696 Test: make RunSettingsRoboTests Change-Id: Ifb93ae95f45fda5831e112306dd9361ccaa5119c (cherry picked from commit 6a1d7e60ac3593ce46c12dab0066a10149ca4aac) --- .../settings/sim/SimDialogFragment.java | 34 ++++++++++++++++++- .../sim/SimListDialogFragmentTest.java | 17 ++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/sim/SimDialogFragment.java b/src/com/android/settings/sim/SimDialogFragment.java index de991ec14f8..362fccc75ab 100644 --- a/src/com/android/settings/sim/SimDialogFragment.java +++ b/src/com/android/settings/sim/SimDialogFragment.java @@ -16,20 +16,25 @@ package com.android.settings.sim; +import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.NonNull; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.network.SubscriptionsChangeListener; /** Common functionality for showing a dialog in SimDialogActivity. */ -public abstract class SimDialogFragment extends InstrumentedDialogFragment { +public abstract class SimDialogFragment extends InstrumentedDialogFragment implements + SubscriptionsChangeListener.SubscriptionsChangeListenerClient { private static final String TAG = "SimDialogFragment"; private static final String KEY_TITLE_ID = "title_id"; private static final String KEY_DIALOG_TYPE = "dialog_type"; + private SubscriptionsChangeListener mChangeListener; + protected static Bundle initArguments(int dialogType, int titleResId) { final Bundle args = new Bundle(); args.putInt(KEY_DIALOG_TYPE, dialogType); @@ -45,6 +50,24 @@ public abstract class SimDialogFragment extends InstrumentedDialogFragment { return getArguments().getInt(KEY_TITLE_ID); } + @Override + public void onAttach(Context context) { + super.onAttach(context); + mChangeListener = new SubscriptionsChangeListener(context, this); + } + + @Override + public void onPause() { + super.onPause(); + mChangeListener.stop(); + } + + @Override + public void onResume() { + super.onResume(); + mChangeListener.start(); + } + @Override public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); @@ -55,4 +78,13 @@ public abstract class SimDialogFragment extends InstrumentedDialogFragment { } public abstract void updateDialog(); + + @Override + public void onAirplaneModeChanged(boolean airplaneModeEnabled) { + } + + @Override + public void onSubscriptionsChanged() { + updateDialog(); + } } diff --git a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java index 2b33ebe6c20..6a9590be3e0 100644 --- a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java +++ b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java @@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.telephony.SubscriptionManager; @@ -77,6 +78,22 @@ public class SimListDialogFragmentTest extends SimDialogFragmentTestBase