Merge "Add a listener for subscription changes to SimDialogFragment" into qt-dev
am: 87fadeeb4a
Change-Id: I59e0e265a5e91bed12d7e786d4fdd3043c068fed
diff --git a/src/com/android/settings/sim/SimDialogFragment.java b/src/com/android/settings/sim/SimDialogFragment.java
index de991ec..362fccc 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);
@@ -46,6 +51,24 @@
}
@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);
final SimDialogActivity activity = (SimDialogActivity) getActivity();
@@ -55,4 +78,13 @@
}
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 2b33ebe..6a9590b 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.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;
@@ -78,6 +79,22 @@
}
@Test
+ public void onSubscriptionsChanged_dialogUpdates() {
+ final int dialogType = DATA_PICK;
+ setDialogType(dialogType);
+ mFragment = spy(SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
+ false /* includeAskEveryTime */));
+ doReturn(Arrays.asList(mSim1, mSim2)).when(mFragment).getCurrentSubscriptions();
+ // Avoid problems robolectric has with our real adapter.
+ doNothing().when(mFragment).setAdapter(any());
+ startDialog();
+ verify(mFragment).updateDialog();
+
+ mFragment.onSubscriptionsChanged();
+ verify(mFragment, times(2)).updateDialog();
+ }
+
+ @Test
public void onCreateDialog_twoSubscriptionsAskEveryTime_threeSubsForDisplay() {
final int dialogType = SMS_PICK;
setDialogType(dialogType);