summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-02-04 17:56:39 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-02-04 17:56:39 +0000
commit1bfa4a82450a59dbaae546ef29f44934622e294a (patch)
tree1550f8f7f8e0badc168f9a1019e224a97f1b25d1
parente337835c19bbde00fc9b87738c0c90bb49a2bf92 (diff)
parent106e52e02134d227dc18eceb3477f2b6d3361b30 (diff)
downloadpackages_apps_Settings-1bfa4a82450a59dbaae546ef29f44934622e294a.tar.gz
packages_apps_Settings-1bfa4a82450a59dbaae546ef29f44934622e294a.tar.bz2
packages_apps_Settings-1bfa4a82450a59dbaae546ef29f44934622e294a.zip
Merge "Revert "Revert "[Settings] Remove dependency of TelephonyIntents"""
-rw-r--r--src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java79
-rw-r--r--tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java23
-rw-r--r--tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java27
3 files changed, 109 insertions, 20 deletions
diff --git a/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java
index 93b937b59a..4c0ddc9aa9 100644
--- a/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java
+++ b/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java
@@ -17,17 +17,18 @@
package com.android.settings.homepage.contextualcards.conditional;
import android.app.settings.SettingsEnums;
-import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
import android.net.ConnectivityManager;
+import android.telephony.PhoneStateListener;
+import android.telephony.PreciseDataConnectionState;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.homepage.contextualcards.ContextualCard;
+import com.android.settings.network.GlobalSettingsChangeListener;
import java.util.Objects;
@@ -35,22 +36,35 @@ public class CellularDataConditionController implements ConditionalCardControlle
static final int ID = Objects.hash("CellularDataConditionController");
- private static final IntentFilter DATA_CONNECTION_FILTER =
- new IntentFilter(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
-
private final Context mAppContext;
private final ConditionManager mConditionManager;
- private final Receiver mReceiver;
- private final TelephonyManager mTelephonyManager;
+ private final GlobalSettingsChangeListener mDefaultDataSubscriptionIdListener;
private final ConnectivityManager mConnectivityManager;
+ private int mSubId;
+ private TelephonyManager mTelephonyManager;
+ private boolean mIsListeningConnectionChange;
+
public CellularDataConditionController(Context appContext, ConditionManager conditionManager) {
mAppContext = appContext;
mConditionManager = conditionManager;
- mReceiver = new Receiver();
+ mSubId = getDefaultDataSubscriptionId(appContext);
+ mTelephonyManager = getTelephonyManager(appContext, mSubId);
+ mDefaultDataSubscriptionIdListener = new GlobalSettingsChangeListener(appContext,
+ android.provider.Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION) {
+ public void onChanged(String field) {
+ final int subId = getDefaultDataSubscriptionId(mAppContext);
+ if (subId == mSubId) {
+ return;
+ }
+ mSubId = subId;
+ if (mIsListeningConnectionChange) {
+ restartPhoneStateListener(mAppContext, subId);
+ }
+ }
+ };
mConnectivityManager = appContext.getSystemService(
ConnectivityManager.class);
- mTelephonyManager = appContext.getSystemService(TelephonyManager.class);
}
@Override
@@ -95,21 +109,50 @@ public class CellularDataConditionController implements ConditionalCardControlle
@Override
public void startMonitoringStateChange() {
- mAppContext.registerReceiver(mReceiver, DATA_CONNECTION_FILTER);
+ restartPhoneStateListener(mAppContext, mSubId);
}
@Override
public void stopMonitoringStateChange() {
- mAppContext.unregisterReceiver(mReceiver);
+ stopPhoneStateListener();
+ }
+
+ private int getDefaultDataSubscriptionId(Context context) {
+ final SubscriptionManager subscriptionManager =
+ context.getSystemService(SubscriptionManager.class);
+ return subscriptionManager.getDefaultDataSubscriptionId();
+ }
+
+ private TelephonyManager getTelephonyManager(Context context, int subId) {
+ final TelephonyManager telephonyManager =
+ context.getSystemService(TelephonyManager.class);
+ return telephonyManager.createForSubscriptionId(subId);
}
- public class Receiver extends BroadcastReceiver {
+ private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@Override
- public void onReceive(Context context, Intent intent) {
- if (TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED.equals(
- intent.getAction())) {
- mConditionManager.onConditionChanged();
- }
+ public void onPreciseDataConnectionStateChanged(
+ PreciseDataConnectionState dataConnectionState) {
+ mConditionManager.onConditionChanged();
}
+ };
+
+ private void stopPhoneStateListener() {
+ mIsListeningConnectionChange = false;
+ mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+ }
+
+ // restart monitoring when subscription has been changed
+ private void restartPhoneStateListener(Context context, int subId) {
+ stopPhoneStateListener();
+ mIsListeningConnectionChange = true;
+
+ // switch mTelephonyManager only when subscription been updated to valid ones
+ if (SubscriptionManager.isValidSubscriptionId(subId)) {
+ mTelephonyManager = getTelephonyManager(context, subId);
+ }
+
+ mTelephonyManager.listen(mPhoneStateListener,
+ PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE);
}
}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java
index be3c6855a2..d179cae023 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java
@@ -33,14 +33,19 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.robolectric.Shadows.shadowOf;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.util.FeatureFlagUtils;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import com.android.settings.core.FeatureFlags;
import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardController;
import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard;
@@ -58,8 +63,9 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowSubscriptionManager;
+import org.robolectric.shadows.ShadowTelephonyManager;
import java.util.ArrayList;
import java.util.Arrays;
@@ -67,8 +73,9 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-@RunWith(RobolectricTestRunner.class)
+@RunWith(AndroidJUnit4.class)
public class ContextualCardManagerTest {
+ private static final int SUB_ID = 2;
private static final String TEST_SLICE_URI = "context://test/test";
private static final String TEST_SLICE_NAME = "test_name";
@@ -79,6 +86,8 @@ public class ContextualCardManagerTest {
Lifecycle mLifecycle;
private Context mContext;
+ private ShadowSubscriptionManager mShadowSubscriptionManager;
+ private ShadowTelephonyManager mShadowTelephonyManager;
private ContextualCardManager mManager;
@Before
@@ -86,6 +95,16 @@ public class ContextualCardManagerTest {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONDITIONAL_CARDS, true);
+
+ mShadowSubscriptionManager = shadowOf(
+ mContext.getSystemService(SubscriptionManager.class));
+ mShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID);
+
+ final TelephonyManager telephonyManager =
+ mContext.getSystemService(TelephonyManager.class);
+ mShadowTelephonyManager = shadowOf(telephonyManager);
+ mShadowTelephonyManager.setTelephonyManagerForSubscriptionId(SUB_ID, telephonyManager);
+
mManager = new ContextualCardManager(mContext, mLifecycle, null /* bundle */);
}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java
index 0cb0598906..ad2dd2adc8 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java
@@ -18,7 +18,13 @@ package com.android.settings.homepage.contextualcards;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
import android.content.Context;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import androidx.lifecycle.LifecycleOwner;
@@ -27,11 +33,17 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowSubscriptionManager;
+import org.robolectric.shadows.ShadowTelephonyManager;
@RunWith(RobolectricTestRunner.class)
public class ControllerRendererPoolTest {
+ private static final int SUB_ID = 1;
private static final int UNSUPPORTED_CARD_TYPE = -99999;
private static final int UNSUPPORTED_VIEW_TYPE = -99999;
@@ -41,12 +53,27 @@ public class ControllerRendererPoolTest {
private Lifecycle mLifecycle;
private LifecycleOwner mLifecycleOwner;
+ @Mock
+ private TelephonyManager mTelephonyMgr;
+
@Before
public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
mContext = RuntimeEnvironment.application;
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
+ // SubscriptionManager and TelephonyManager for CellularDataConditionController
+ ShadowSubscriptionManager shadowSubscriptionMgr = shadowOf(
+ mContext.getSystemService(SubscriptionManager.class));
+ shadowSubscriptionMgr.setDefaultDataSubscriptionId(SUB_ID);
+
+ ShadowTelephonyManager shadowTelephonyMgr = Shadow.extract(
+ mContext.getSystemService(TelephonyManager.class));
+ shadowTelephonyMgr.setTelephonyManagerForSubscriptionId(SUB_ID, mTelephonyMgr);
+ when(mTelephonyMgr.createForSubscriptionId(anyInt())).thenReturn(mTelephonyMgr);
+
mPool = new ControllerRendererPool();
}