diff options
author | Xiangyu/Malcolm Chen <refuhoo@google.com> | 2018-03-03 02:42:51 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-03-03 02:42:51 +0000 |
commit | 68628c2eddbce5cd22d58bc46419c75ff9e152a2 (patch) | |
tree | a1fc7abe41c9fbc7f8d2356585a35274273c93a2 | |
parent | 94e256743a206861365d3b3b09dbb9b64e51763b (diff) | |
parent | 0bedf3569e3401428bd074d91d3156781f662819 (diff) | |
download | packages_apps_Settings-68628c2eddbce5cd22d58bc46419c75ff9e152a2.tar.gz packages_apps_Settings-68628c2eddbce5cd22d58bc46419c75ff9e152a2.tar.bz2 packages_apps_Settings-68628c2eddbce5cd22d58bc46419c75ff9e152a2.zip |
Merge "Disable "Mobile data" in "Data usage" if no SIM."
-rw-r--r-- | src/com/android/settings/datausage/CellDataPreference.java | 39 | ||||
-rw-r--r-- | tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java | 83 |
2 files changed, 118 insertions, 4 deletions
diff --git a/src/com/android/settings/datausage/CellDataPreference.java b/src/com/android/settings/datausage/CellDataPreference.java index d24c092bf5..b93fe669ce 100644 --- a/src/com/android/settings/datausage/CellDataPreference.java +++ b/src/com/android/settings/datausage/CellDataPreference.java @@ -25,6 +25,7 @@ import android.os.Looper; import android.os.Parcel; import android.os.Parcelable; import android.provider.Settings.Global; +import android.support.annotation.VisibleForTesting; import android.support.v4.content.res.TypedArrayUtils; import android.support.v7.preference.PreferenceViewHolder; import android.telephony.SubscriptionInfo; @@ -51,7 +52,8 @@ public class CellDataPreference extends CustomDialogPreference implements Templa public boolean mChecked; public boolean mMultiSimDialog; private TelephonyManager mTelephonyManager; - private SubscriptionManager mSubscriptionManager; + @VisibleForTesting + SubscriptionManager mSubscriptionManager; public CellDataPreference(Context context, AttributeSet attrs) { super(context, attrs, TypedArrayUtils.getAttr(context, @@ -85,12 +87,19 @@ public class CellDataPreference extends CustomDialogPreference implements Templa @Override public void onAttached() { super.onAttached(); - mListener.setListener(true, mSubId, getContext()); + mDataStateListener.setListener(true, mSubId, getContext()); + if (mSubscriptionManager!= null) { + mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); + } } @Override public void onDetached() { - mListener.setListener(false, mSubId, getContext()); + mDataStateListener.setListener(false, mSubId, getContext()); + if (mSubscriptionManager!= null) { + mSubscriptionManager.removeOnSubscriptionsChangedListener( + mOnSubscriptionsChangeListener); + } super.onDetached(); } @@ -101,10 +110,14 @@ public class CellDataPreference extends CustomDialogPreference implements Templa } mSubscriptionManager = SubscriptionManager.from(getContext()); mTelephonyManager = TelephonyManager.from(getContext()); + + mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); + if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mSubId = subId; setKey(getKey() + subId); } + updateEnabled(); updateChecked(); } @@ -112,6 +125,12 @@ public class CellDataPreference extends CustomDialogPreference implements Templa setChecked(mTelephonyManager.getDataEnabled(mSubId)); } + private void updateEnabled() { + // If this subscription is not active, for example, SIM card is taken out, we disable + // the button. + setEnabled(mSubscriptionManager.getActiveSubscriptionInfo(mSubId) != null); + } + @Override protected void performClick(View view) { final Context context = getContext(); @@ -237,7 +256,19 @@ public class CellDataPreference extends CustomDialogPreference implements Templa } } - private final DataStateListener mListener = new DataStateListener() { + @VisibleForTesting + final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener + = new SubscriptionManager.OnSubscriptionsChangedListener() { + @Override + public void onSubscriptionsChanged() { + if (DataUsageSummary.LOGD) { + Log.d(TAG, "onSubscriptionsChanged"); + } + updateEnabled(); + } + }; + + private final DataStateListener mDataStateListener = new DataStateListener() { @Override public void onChange(boolean selfChange) { updateChecked(); diff --git a/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java new file mode 100644 index 0000000000..e520a7bc9a --- /dev/null +++ b/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +package com.android.settings.datausage; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.support.v7.preference.PreferenceViewHolder; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.LinearLayout; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class CellDataPreferenceTest { + + @Mock + private SubscriptionManager mSubscriptionManager; + @Mock + private SubscriptionInfo mSubInfo; + + private Context mContext; + private PreferenceViewHolder mHolder; + private CellDataPreference mPreference; + private SubscriptionManager.OnSubscriptionsChangedListener mListener; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; + mPreference = new CellDataPreference(mContext, null); + mListener = mPreference.mOnSubscriptionsChangeListener; + + LayoutInflater inflater = LayoutInflater.from(mContext); + final View view = inflater.inflate(mPreference.getLayoutResource(), + new LinearLayout(mContext), false); + + mHolder = PreferenceViewHolder.createInstanceForTests(view); + } + + @Test + public void noActiveSub_shouldDisable() { + mPreference.mSubscriptionManager = mSubscriptionManager; + mListener.onSubscriptionsChanged(); + assertThat(mPreference.isEnabled()).isFalse(); + + when(mSubscriptionManager.getActiveSubscriptionInfo(anyInt())) + .thenReturn(mSubInfo); + mListener.onSubscriptionsChanged(); + assertThat(mPreference.isEnabled()).isTrue(); + } + +} |