Merge "Add ACL state listener for bt devices"
diff --git a/res/layout/fingerprint_rename_dialog.xml b/res/layout/fingerprint_rename_dialog.xml
index 99cfa71..2da84ca 100644
--- a/res/layout/fingerprint_rename_dialog.xml
+++ b/res/layout/fingerprint_rename_dialog.xml
@@ -35,7 +35,7 @@
android:clipChildren="false"
android:clipToPadding="false" />
- <EditText
+ <com.android.settings.widget.ImeAwareEditText
android:id="@+id/fingerprint_rename_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f2661bd..56dbc6b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8920,6 +8920,10 @@
<string name="display_summary">Sleep after <xliff:g id="timeout_description" example="10 minutes">%1$s</xliff:g> of inactivity</string>
<!-- Summary for Display settings, explaining a few important settings under it [CHAR LIMIT=NONE]-->
<string name="display_dashboard_summary">Wallpaper, sleep, font size</string>
+
+ <!-- Summary for Display settings, explaining a few important settings under it [CHAR LIMIT=NONE]-->
+ <string name="display_dashboard_nowallpaper_summary">Sleep, font size</string>
+
<!-- Example summary of display used in Setup Wizard preview screen [CHAR LIMIT=NONE] -->
<string name="display_summary_example">Sleep after 10 minutes of inactivity</string>
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index db4e7d8..b0e362c 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -52,7 +52,7 @@
android:title="@string/wallpaper_settings_title"
settings:keywords="@string/keywords_display_wallpaper"
settings:useAdminDisabledSummary="true"
- settings:searchable="false">
+ settings:controller="com.android.settings.display.WallpaperPreferenceController">
<intent
android:targetPackage="@string/config_wallpaper_picker_package"
android:targetClass="@string/config_wallpaper_picker_class" />
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
index dbb106e..889761b 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -59,10 +59,11 @@
<Preference
android:key="top_level_display"
android:title="@string/display_settings"
- android:summary="@string/display_dashboard_summary"
+ android:summary="@string/summary_placeholder"
android:icon="@drawable/ic_homepage_display"
android:order="-70"
- android:fragment="com.android.settings.DisplaySettings"/>
+ android:fragment="com.android.settings.DisplaySettings"
+ settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/>
<Preference
android:key="top_level_sound"
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 75f13aa..6557aee 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -85,7 +85,6 @@
controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
controllers.add(new VrDisplayPreferenceController(context));
controllers.add(new ShowOperatorNamePreferenceController(context));
- controllers.add(new WallpaperPreferenceController(context));
controllers.add(new ThemePreferenceController(context));
controllers.add(new BrightnessLevelPreferenceController(context, lifecycle));
return controllers;
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index c3bd043..2e67ec3 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -55,6 +55,7 @@
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.utils.AnnotationSpan;
+import com.android.settings.widget.ImeAwareEditText;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -708,11 +709,7 @@
public static class RenameDialog extends InstrumentedDialogFragment {
private Fingerprint mFp;
- private EditText mDialogTextField;
- private String mFingerName;
- private Boolean mTextHadFocus;
- private int mTextSelectionStart;
- private int mTextSelectionEnd;
+ private ImeAwareEditText mDialogTextField;
private AlertDialog mAlertDialog;
private boolean mDeleteInProgress;
@@ -723,11 +720,17 @@
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mFp = getArguments().getParcelable("fingerprint");
+ final String fingerName;
+ final int textSelectionStart;
+ final int textSelectionEnd;
if (savedInstanceState != null) {
- mFingerName = savedInstanceState.getString("fingerName");
- mTextHadFocus = savedInstanceState.getBoolean("textHadFocus");
- mTextSelectionStart = savedInstanceState.getInt("startSelection");
- mTextSelectionEnd = savedInstanceState.getInt("endSelection");
+ fingerName = savedInstanceState.getString("fingerName");
+ textSelectionStart = savedInstanceState.getInt("startSelection", -1);
+ textSelectionEnd = savedInstanceState.getInt("endSelection", -1);
+ } else {
+ fingerName = null;
+ textSelectionStart = -1;
+ textSelectionEnd = -1;
}
mAlertDialog = new AlertDialog.Builder(getActivity())
.setView(R.layout.fingerprint_rename_dialog)
@@ -756,26 +759,21 @@
mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
- mDialogTextField = (EditText) mAlertDialog.findViewById(
- R.id.fingerprint_rename_field);
- CharSequence name = mFingerName == null ? mFp.getName() : mFingerName;
+ mDialogTextField = mAlertDialog.findViewById(R.id.fingerprint_rename_field);
+ CharSequence name = fingerName == null ? mFp.getName() : fingerName;
mDialogTextField.setText(name);
- if (mTextHadFocus == null) {
- mDialogTextField.selectAll();
+ if (textSelectionStart != -1 && textSelectionEnd != -1) {
+ mDialogTextField.setSelection(textSelectionStart, textSelectionEnd);
} else {
- mDialogTextField.setSelection(mTextSelectionStart, mTextSelectionEnd);
+ mDialogTextField.selectAll();
}
if (mDeleteInProgress) {
mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
}
mDialogTextField.requestFocus();
+ mDialogTextField.scheduleShowSoftInput();
}
});
- if (mTextHadFocus == null || mTextHadFocus) {
- // Request the IME
- mAlertDialog.getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
- }
return mAlertDialog;
}
@@ -791,7 +789,6 @@
super.onSaveInstanceState(outState);
if (mDialogTextField != null) {
outState.putString("fingerName", mDialogTextField.getText().toString());
- outState.putBoolean("textHadFocus", mDialogTextField.hasFocus());
outState.putInt("startSelection", mDialogTextField.getSelectionStart());
outState.putInt("endSelection", mDialogTextField.getSelectionEnd());
}
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index 4dddeab..78aa6c2 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -190,7 +190,8 @@
if (mPackages.size() > 1) {
mAppList = (PreferenceCategory) findPreference(KEY_APP_LIST);
- getLoaderManager().initLoader(LOADER_APP_PREF, Bundle.EMPTY, mAppPrefCallbacks);
+ LoaderManager.getInstance(this).restartLoader(LOADER_APP_PREF, Bundle.EMPTY,
+ mAppPrefCallbacks);
} else {
removePreference(KEY_APP_LIST);
}
@@ -221,7 +222,7 @@
mDataSaverBackend.addListener(this);
}
mPolicy = services.mPolicyEditor.getPolicy(mTemplate);
- getLoaderManager().restartLoader(LOADER_CHART_DATA,
+ LoaderManager.getInstance(this).restartLoader(LOADER_CHART_DATA,
ChartDataLoaderCompat.buildArgs(mTemplate, mAppItem), mChartDataCallbacks);
updatePrefs();
}
diff --git a/src/com/android/settings/datausage/AppDataUsageV2.java b/src/com/android/settings/datausage/AppDataUsageV2.java
index 7515c51..6a31726 100644
--- a/src/com/android/settings/datausage/AppDataUsageV2.java
+++ b/src/com/android/settings/datausage/AppDataUsageV2.java
@@ -177,7 +177,8 @@
if (mPackages.size() > 1) {
mAppList = (PreferenceCategory) findPreference(KEY_APP_LIST);
- getLoaderManager().initLoader(LOADER_APP_PREF, Bundle.EMPTY, mAppPrefCallbacks);
+ LoaderManager.getInstance(this).restartLoader(LOADER_APP_PREF, Bundle.EMPTY,
+ mAppPrefCallbacks);
} else {
removePreference(KEY_APP_LIST);
}
@@ -201,7 +202,8 @@
if (mDataSaverBackend != null) {
mDataSaverBackend.addListener(this);
}
- getLoaderManager().restartLoader(LOADER_APP_USAGE_DATA, null /* args */, mUidDataCallbacks);
+ LoaderManager.getInstance(this).restartLoader(LOADER_APP_USAGE_DATA, null /* args */,
+ mUidDataCallbacks);
updatePrefs();
}
diff --git a/src/com/android/settings/display/TopLevelDisplayPreferenceController.java b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
new file mode 100644
index 0000000..88b87e0
--- /dev/null
+++ b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java
@@ -0,0 +1,44 @@
+/*
+ * 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.display;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+public class TopLevelDisplayPreferenceController extends BasePreferenceController {
+
+ public TopLevelDisplayPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ if (new WallpaperPreferenceController(mContext, "dummy_key").isAvailable()) {
+ return mContext.getText(R.string.display_dashboard_summary);
+ } else {
+ return mContext.getText(R.string.display_dashboard_nowallpaper_summary);
+ }
+ }
+
+}
diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java
index ff3be12..0b09124 100644
--- a/src/com/android/settings/display/WallpaperPreferenceController.java
+++ b/src/com/android/settings/display/WallpaperPreferenceController.java
@@ -27,34 +27,30 @@
import androidx.preference.Preference;
import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
import java.util.List;
-public class WallpaperPreferenceController extends AbstractPreferenceController implements
- PreferenceControllerMixin {
+public class WallpaperPreferenceController extends BasePreferenceController {
private static final String TAG = "WallpaperPrefController";
- public static final String KEY_WALLPAPER = "wallpaper";
-
private final String mWallpaperPackage;
private final String mWallpaperClass;
- public WallpaperPreferenceController(Context context) {
- super(context);
+ public WallpaperPreferenceController(Context context, String key) {
+ super(context, key);
mWallpaperPackage = mContext.getString(R.string.config_wallpaper_picker_package);
mWallpaperClass = mContext.getString(R.string.config_wallpaper_picker_class);
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (TextUtils.isEmpty(mWallpaperPackage) || TextUtils.isEmpty(mWallpaperClass)) {
Log.e(TAG, "No Wallpaper picker specified!");
- return false;
+ return UNSUPPORTED_ON_DEVICE;
}
final ComponentName componentName =
new ComponentName(mWallpaperPackage, mWallpaperClass);
@@ -63,12 +59,8 @@
intent.setComponent(componentName);
final List<ResolveInfo> resolveInfos =
pm.queryIntentActivities(intent, 0 /* flags */);
- return resolveInfos != null && resolveInfos.size() != 0;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_WALLPAPER;
+ return resolveInfos != null && !resolveInfos.isEmpty()
+ ? AVAILABLE_UNSEARCHABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index bc1d0fa..f3fbf06 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -33,8 +33,6 @@
import androidx.slice.Slice;
import com.android.settings.homepage.contextualcards.deviceinfo.BatterySlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
import com.android.settingslib.utils.AsyncLoaderCompat;
import java.util.ArrayList;
@@ -94,15 +92,6 @@
final double rankingScore = 0.0;
final List<ContextualCard> result = new ArrayList();
result.add(new ContextualCard.Builder()
- .setSliceUri(DataUsageSlice.DATA_USAGE_CARD_URI)
- .setName(DataUsageSlice.PATH_DATA_USAGE)
- .setPackageName(packageName)
- .setRankingScore(rankingScore)
- .setAppVersion(appVersionCode)
- .setCardType(ContextualCard.CardType.SLICE)
- .setIsHalfWidth(false)
- .build());
- result.add(new ContextualCard.Builder()
.setSliceUri(BatterySlice.BATTERY_CARD_URI)
.setName(BatterySlice.PATH_BATTERY_INFO)
.setPackageName(packageName)
@@ -111,15 +100,6 @@
.setCardType(ContextualCard.CardType.SLICE)
.setIsHalfWidth(false)
.build());
- result.add(new ContextualCard.Builder()
- .setSliceUri(DeviceInfoSlice.DEVICE_INFO_CARD_URI)
- .setName(DeviceInfoSlice.PATH_DEVICE_INFO)
- .setPackageName(packageName)
- .setRankingScore(rankingScore)
- .setAppVersion(appVersionCode)
- .setCardType(ContextualCard.CardType.SLICE)
- .setIsHalfWidth(false)
- .build());
return result;
}
diff --git a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
index 36c0a11..e394c03 100644
--- a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
+++ b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
@@ -21,10 +21,6 @@
import android.annotation.Nullable;
import com.android.settings.homepage.contextualcards.deviceinfo.BatterySlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.EmergencyInfoSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.StorageSlice;
import com.android.settings.homepage.contextualcards.slices.ConnectedDeviceSlice;
import com.android.settings.intelligence.ContextualCardProto.ContextualCard;
import com.android.settings.intelligence.ContextualCardProto.ContextualCardList;
@@ -45,26 +41,6 @@
.setSliceUri(WifiSlice.WIFI_URI.toString())
.setCardName(KEY_WIFI)
.build();
- final ContextualCard dataUsageCard =
- ContextualCard.newBuilder()
- .setSliceUri(DataUsageSlice.DATA_USAGE_CARD_URI.toString())
- .setCardName(DataUsageSlice.PATH_DATA_USAGE)
- .build();
- final ContextualCard deviceInfoCard =
- ContextualCard.newBuilder()
- .setSliceUri(DeviceInfoSlice.DEVICE_INFO_CARD_URI.toString())
- .setCardName(DeviceInfoSlice.PATH_DEVICE_INFO)
- .build();
- final ContextualCard storageInfoCard =
- ContextualCard.newBuilder()
- .setSliceUri(StorageSlice.STORAGE_CARD_URI.toString())
- .setCardName(StorageSlice.PATH_STORAGE_INFO)
- .build();
- final ContextualCard emergencyInfoCard =
- ContextualCard.newBuilder()
- .setSliceUri(EmergencyInfoSlice.EMERGENCY_INFO_CARD_URI.toString())
- .setCardName(EmergencyInfoSlice.PATH_EMERGENCY_INFO_CARD)
- .build();
final ContextualCard batteryInfoCard =
ContextualCard.newBuilder()
.setSliceUri(BatterySlice.BATTERY_CARD_URI.toSafeString())
@@ -77,10 +53,6 @@
.build();
final ContextualCardList cards = ContextualCardList.newBuilder()
.addCard(wifiCard)
- .addCard(dataUsageCard)
- .addCard(deviceInfoCard)
- .addCard(storageInfoCard)
- .addCard(emergencyInfoCard)
.addCard(batteryInfoCard)
.addCard(connectedDeviceCard)
.build();
diff --git a/src/com/android/settings/network/telephony/MobileNetworkFragment.java b/src/com/android/settings/network/telephony/MobileNetworkFragment.java
index df6c7ab..e6db51c 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkFragment.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkFragment.java
@@ -22,6 +22,7 @@
import android.os.Bundle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
+import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -106,7 +107,7 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- mSubId = getArguments().getInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID,
+ mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
use(MobileDataPreferenceController.class).init(getFragmentManager(), mSubId);
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index b43cd3a..f397382 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -30,7 +30,6 @@
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
-import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -213,11 +212,6 @@
|| (!esimIgnoredDevice && enabledEsimUiByDefault && inEsimSupportedCountries));
}
- public static PersistableBundle getCarrierConfigBySubId(int mSubId) {
- //TODO(b/114749736): get carrier config from subId
- return new PersistableBundle();
- }
-
/**
* Set whether to enable data for {@code subId}, also whether to disable data for other
* subscription
@@ -253,9 +247,17 @@
}
final TelephonyManager telephonyManager = TelephonyManager.from(context)
.createForSubscriptionId(subId);
+ final PersistableBundle carrierConfig = context.getSystemService(
+ CarrierConfigManager.class).getConfigForSubId(subId);
+
if (telephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
return true;
+ } else if (carrierConfig != null
+ && !carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
+ && carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
+ return true;
}
if (isWorldMode(context, subId)) {
@@ -312,7 +314,10 @@
if (telephonyManager.getPhoneType() == PhoneConstants.PHONE_TYPE_GSM) {
return true;
- } else if (carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
+ } else if (carrierConfig != null
+ && !carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)
+ && carrierConfig.getBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL)) {
return true;
}
diff --git a/src/com/android/settings/network/telephony/MobileSettingsActivity.java b/src/com/android/settings/network/telephony/MobileSettingsActivity.java
index d712515..b2bceb9 100644
--- a/src/com/android/settings/network/telephony/MobileSettingsActivity.java
+++ b/src/com/android/settings/network/telephony/MobileSettingsActivity.java
@@ -17,10 +17,15 @@
package com.android.settings.network.telephony;
import android.app.ActionBar;
+import android.content.BroadcastReceiver;
+import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.os.Bundle;
+import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.util.Log;
import android.view.Menu;
import android.view.View;
@@ -30,62 +35,61 @@
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
+import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.CollectionUtils;
import com.android.settings.R;
import com.android.settings.core.SettingsBaseActivity;
import com.google.android.material.bottomnavigation.BottomNavigationView;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
+import java.util.Objects;
public class MobileSettingsActivity extends SettingsBaseActivity {
+ private static final String TAG = "MobileSettingsActivity";
@VisibleForTesting
static final String MOBILE_SETTINGS_TAG = "mobile_settings:";
- public static final String KEY_SUBSCRIPTION_ID = "key_subscription_id";
- public static final String KEY_CUR_SUBSCRIPTION_ID = "key_cur_subscription_id";
+ @VisibleForTesting
+ static final int SUB_ID_NULL = Integer.MIN_VALUE;
- private SubscriptionManager mSubscriptionManager;
@VisibleForTesting
- Integer mCurSubscriptionId;
+ SubscriptionManager mSubscriptionManager;
@VisibleForTesting
- List<SubscriptionInfo> mSubscriptionInfos;
+ int mCurSubscriptionId;
+ @VisibleForTesting
+ List<SubscriptionInfo> mSubscriptionInfos = new ArrayList<>();
+ private PhoneChangeReceiver mPhoneChangeReceiver;
private final SubscriptionManager.OnSubscriptionsChangedListener
mOnSubscriptionsChangeListener
= new SubscriptionManager.OnSubscriptionsChangedListener() {
@Override
public void onSubscriptionsChanged() {
- updateSubscriptions(null);
+ if (!Objects.equals(mSubscriptionInfos,
+ mSubscriptionManager.getActiveSubscriptionInfoList())) {
+ updateSubscriptions(null);
+ }
}
};
@Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- //TODO(b/114749736): update fragment by new intent, or at least make sure this page shows
- // current tab for sim card
- }
-
- @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- //TODO(b/114749736): add phone change receiver here: ACTION_RADIO_TECHNOLOGY_CHANGED
-
setContentView(R.layout.mobile_settings_container);
setActionBar(findViewById(R.id.mobile_action_bar));
+ mPhoneChangeReceiver = new PhoneChangeReceiver();
mSubscriptionManager = getSystemService(SubscriptionManager.class);
mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
mCurSubscriptionId = savedInstanceState != null
- ? savedInstanceState.getInt(KEY_CUR_SUBSCRIPTION_ID)
- : null;
-
- mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
+ ? savedInstanceState.getInt(Settings.EXTRA_SUB_ID, SUB_ID_NULL)
+ : SUB_ID_NULL;
final ActionBar actionBar = getActionBar();
if (actionBar != null) {
- // android.R.id.home will be triggered in onOptionsItemSelected()
actionBar.setDisplayHomeAsUpEnabled(true);
}
@@ -93,6 +97,22 @@
}
@Override
+ protected void onStart() {
+ super.onStart();
+ final IntentFilter intentFilter = new IntentFilter(
+ TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
+ registerReceiver(mPhoneChangeReceiver, intentFilter);
+ mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ unregisterReceiver(mPhoneChangeReceiver);
+ mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
+ }
+
+ @Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
saveInstanceState(outState);
@@ -100,24 +120,42 @@
@VisibleForTesting
void saveInstanceState(@NonNull Bundle outState) {
- outState.putInt(KEY_CUR_SUBSCRIPTION_ID, mCurSubscriptionId);
+ outState.putInt(Settings.EXTRA_SUB_ID, mCurSubscriptionId);
}
@VisibleForTesting
void updateSubscriptions(Bundle savedInstanceState) {
- //TODO(b/114749736): Sort it by phoneId
mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
- final int subId = CollectionUtils.isEmpty(mSubscriptionInfos)
- ? SubscriptionManager.INVALID_SUBSCRIPTION_ID
- : mSubscriptionInfos.get(0).getSubscriptionId();
updateBottomNavigationView();
if (savedInstanceState == null) {
- switchFragment(new MobileNetworkFragment(), subId);
+ switchFragment(new MobileNetworkFragment(), getSubscriptionId());
}
}
+ /**
+ * Get the current subId to display. First check whether intent has {@link
+ * Settings#EXTRA_SUB_ID}. If not, just display first one in list
+ * since it is already sorted by sim slot.
+ */
+ @VisibleForTesting
+ int getSubscriptionId() {
+ final Intent intent = getIntent();
+ if (intent != null) {
+ final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
+ if (subId != SUB_ID_NULL && mSubscriptionManager.isActiveSubscriptionId(subId)) {
+ return subId;
+ }
+ }
+
+ if (CollectionUtils.isEmpty(mSubscriptionInfos)) {
+ return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ }
+
+ return mSubscriptionInfos.get(0).getSubscriptionId();
+ }
+
@VisibleForTesting
void updateBottomNavigationView() {
final BottomNavigationView navigation = findViewById(R.id.bottom_nav);
@@ -130,7 +168,8 @@
for (int i = 0, size = mSubscriptionInfos.size(); i < size; i++) {
final SubscriptionInfo subscriptionInfo = mSubscriptionInfos.get(i);
menu.add(0, subscriptionInfo.getSubscriptionId(), i,
- subscriptionInfo.getDisplayName());
+ subscriptionInfo.getDisplayName())
+ .setIcon(R.drawable.ic_settings_sim);
}
navigation.setOnNavigationItemSelectedListener(item -> {
switchFragment(new MobileNetworkFragment(), item.getItemId());
@@ -141,30 +180,23 @@
@VisibleForTesting
void switchFragment(Fragment fragment, int subscriptionId) {
- if (mCurSubscriptionId != null && subscriptionId == mCurSubscriptionId) {
+ switchFragment(fragment, subscriptionId, false /* forceUpdate */);
+ }
+
+ @VisibleForTesting
+ void switchFragment(Fragment fragment, int subscriptionId, boolean forceUpdate) {
+ if (mCurSubscriptionId != SUB_ID_NULL && subscriptionId == mCurSubscriptionId
+ && !forceUpdate) {
return;
}
final FragmentManager fragmentManager = getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
final Bundle bundle = new Bundle();
- bundle.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
+ bundle.putInt(Settings.EXTRA_SUB_ID, subscriptionId);
- if (mCurSubscriptionId != null) {
- final Fragment hideFragment = fragmentManager.findFragmentByTag(
- buildFragmentTag(mCurSubscriptionId));
- if (hideFragment != null) {
- fragmentTransaction.hide(hideFragment);
- }
- }
-
- Fragment showFragment = fragmentManager.findFragmentByTag(buildFragmentTag(subscriptionId));
- if (showFragment == null) {
- fragment.setArguments(bundle);
- fragmentTransaction.add(R.id.main_content, fragment, buildFragmentTag(subscriptionId));
- } else {
- showFragment.setArguments(bundle);
- fragmentTransaction.show(showFragment);
- }
+ fragment.setArguments(bundle);
+ fragmentTransaction.replace(R.id.main_content, fragment,
+ buildFragmentTag(subscriptionId));
fragmentTransaction.commit();
mCurSubscriptionId = subscriptionId;
}
@@ -172,4 +204,16 @@
private String buildFragmentTag(int subscriptionId) {
return MOBILE_SETTINGS_TAG + subscriptionId;
}
+
+ private class PhoneChangeReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // When the radio changes (ex: CDMA->GSM), refresh the fragment.
+ // This is very rare to happen.
+ if (mCurSubscriptionId != SUB_ID_NULL) {
+ switchFragment(new MobileNetworkFragment(), mCurSubscriptionId,
+ true /* forceUpdate */);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 3e42c70..dbab674 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -23,6 +23,7 @@
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
+import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentity;
@@ -93,7 +94,7 @@
mUseNewApi = getContext().getResources().getBoolean(
com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
- mSubId = getArguments().getInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID);
+ mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
mConnectedPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
index 4119c64..5f259f8 100644
--- a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
@@ -23,6 +23,8 @@
import androidx.preference.ListPreference;
import androidx.preference.Preference;
+import com.android.internal.telephony.Phone;
+
/**
* Preference controller for "System Select"
*/
@@ -47,6 +49,12 @@
resetCdmaRoamingModeToDefault();
}
}
+ final int settingsNetworkMode = Settings.Global.getInt(
+ mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
+ Phone.PREFERRED_NT_MODE);
+ listPreference.setEnabled(
+ settingsNetworkMode != TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
}
@Override
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 72f69cd..d5c704a 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.os.Bundle;
import android.os.PersistableBundle;
+import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -96,7 +97,7 @@
== TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
} else {
final Bundle bundle = new Bundle();
- bundle.putInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID, mSubId);
+ bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
new SubSettingLauncher(mContext)
.setDestination(NetworkSelectSettings.class.getName())
.setSourceMetricsCategory(MetricsProto.MetricsEvent.MOBILE_NETWORK_SELECT)
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index 9ea977c..df5e151 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.os.Bundle;
+import android.provider.Settings;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -84,7 +85,7 @@
public boolean handlePreferenceTreeClick(Preference preference) {
if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
final Bundle bundle = new Bundle();
- bundle.putInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID, mSubId);
+ bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
new SubSettingLauncher(mContext)
.setDestination(NetworkSelectSettings.class.getName())
.setSourceMetricsCategory(MetricsProto.MetricsEvent.MOBILE_NETWORK_SELECT)
diff --git a/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
new file mode 100644
index 0000000..fe4fcc8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/TopLevelDisplayPreferenceControllerTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.display;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import com.android.settings.R;
+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 java.util.ArrayList;
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class TopLevelDisplayPreferenceControllerTest {
+ @Mock
+ private Context mContext;
+ @Mock
+ private PackageManager mPackageManager;
+
+ private TopLevelDisplayPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mContext.getString(R.string.config_wallpaper_picker_package))
+ .thenReturn("pkg");
+ when(mContext.getString(R.string.config_wallpaper_picker_class))
+ .thenReturn("cls");
+
+ mController = new TopLevelDisplayPreferenceController(mContext, "test_key");
+ }
+
+ @Test
+ public void getAvailability_alwaysAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_hasWallpaper_shouldReturnWallpaperSummary() {
+ final List<ResolveInfo> resolveInfos = new ArrayList<>();
+ resolveInfos.add(mock(ResolveInfo.class));
+ when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
+ .thenReturn(resolveInfos);
+
+ assertThat(mController.getSummary())
+ .isEqualTo(mContext.getText(R.string.display_dashboard_summary));
+ }
+
+ @Test
+ public void getSummary_hasWallpaper_shouldReturnNoWallpaperSummary() {
+ final List<ResolveInfo> resolveInfos = new ArrayList<>();
+ when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
+ .thenReturn(resolveInfos);
+
+ assertThat(mController.getSummary())
+ .isEqualTo(mContext.getText(R.string.display_dashboard_nowallpaper_summary));
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
index 8a24241..b4305b6 100644
--- a/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/WallpaperPreferenceControllerTest.java
@@ -45,6 +45,7 @@
private static final String WALLPAPER_PACKAGE = "TestPkg";
private static final String WALLPAPER_CLASS = "TestCls";
+ private static final String TEST_KEY = "test_key";
@Mock
private Context mContext;
@@ -54,7 +55,7 @@
private WallpaperPreferenceController mController;
@Before
- public void setUp() throws PackageManager.NameNotFoundException {
+ public void setUp() {
MockitoAnnotations.initMocks(this);
when(mContext.getString(R.string.config_wallpaper_picker_package))
.thenReturn(WALLPAPER_PACKAGE);
@@ -62,11 +63,11 @@
.thenReturn(WALLPAPER_CLASS);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
- mController = new WallpaperPreferenceController(mContext);
+ mController = new WallpaperPreferenceController(mContext, TEST_KEY);
}
@Test
- public void isAvailable_wallpaerPickerEnabled_shouldReturnTrue() {
+ public void isAvailable_wallpaperPickerEnabled_shouldReturnTrue() {
final List<ResolveInfo> resolveInfos = new ArrayList<>();
resolveInfos.add(mock(ResolveInfo.class));
when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt()))
@@ -76,7 +77,7 @@
}
@Test
- public void isAvailable_wallpaerPickerDisbled_shouldReturnFalseAndNoCrash() {
+ public void isAvailable_wallpaperPickerDisabled_shouldReturnFalse() {
when(mPackageManager.queryIntentActivities(any(Intent.class), anyInt())).thenReturn(null);
assertThat(mController.isAvailable()).isFalse();
@@ -86,6 +87,5 @@
.thenReturn(resolveInfos);
assertThat(mController.isAvailable()).isFalse();
- // should not crash
}
}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index 6aeb5c0..e98e36f 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -22,8 +22,6 @@
import android.net.Uri;
import com.android.settings.homepage.contextualcards.deviceinfo.BatterySlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -54,18 +52,9 @@
}
@Test
- public void createStaticCards_shouldReturnFourCards() {
- final List<ContextualCard> defaultData = mContextualCardLoader.createStaticCards();
-
- assertThat(defaultData).hasSize(3);
- }
-
- @Test
public void createStaticCards_shouldContainCorrectCards() {
- final Uri dataUsage = DataUsageSlice.DATA_USAGE_CARD_URI;
- final Uri deviceInfo = DeviceInfoSlice.DEVICE_INFO_CARD_URI;
final Uri batteryInfo = BatterySlice.BATTERY_CARD_URI;
- final List<Uri> expectedUris = Arrays.asList(dataUsage, deviceInfo, batteryInfo);
+ final List<Uri> expectedUris = Arrays.asList(batteryInfo);
final List<Uri> actualCardUris = mContextualCardLoader.createStaticCards().stream().map(
ContextualCard::getSliceUri).collect(Collectors.toList());
@@ -90,7 +79,8 @@
final String sliceUri = "contet://com.android.settings.slices/action/flashlight";
assertThat(
- mContextualCardLoader.isCardEligibleToDisplay(getContextualCard(sliceUri))).isFalse();
+ mContextualCardLoader.isCardEligibleToDisplay(
+ getContextualCard(sliceUri))).isFalse();
}
@Test
@@ -98,7 +88,8 @@
final String sliceUri = "content://com.android.settings.test.slices/action/flashlight";
assertThat(
- mContextualCardLoader.isCardEligibleToDisplay(getContextualCard(sliceUri))).isFalse();
+ mContextualCardLoader.isCardEligibleToDisplay(
+ getContextualCard(sliceUri))).isFalse();
}
private ContextualCard getContextualCard(String sliceUri) {
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
index 2c42379..1932ab9 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
@@ -20,7 +20,6 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.ContentResolver;
-import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
@@ -38,15 +37,13 @@
@RunWith(SettingsRobolectricTestRunner.class)
public class SettingsContextualCardProviderTest {
- private Context mContext;
private ContentResolver mResolver;
private Uri mUri;
private SettingsContextualCardProvider mProvider;
@Before
public void setUp() {
- mContext = RuntimeEnvironment.application;
- mResolver = mContext.getContentResolver();
+ mResolver = RuntimeEnvironment.application.getContentResolver();
mUri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsContextualCardProvider.CARD_AUTHORITY)
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
index c03fb71..676c9f4 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java
@@ -21,18 +21,20 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.os.PersistableBundle;
import android.provider.Settings;
import android.telecom.PhoneAccountHandle;
+import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -75,27 +77,35 @@
private ComponentName mComponentName;
@Mock
private ResolveInfo mResolveInfo;
+ @Mock
+ private CarrierConfigManager mCarrierConfigManager;
private Context mContext;
+ private PersistableBundle mCarrierConfig;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
- doReturn(mSubscriptionManager).when(mContext).getSystemService(SubscriptionManager.class);
- doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
- doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID_1);
- doReturn(mTelephonyManager2).when(mTelephonyManager).createForSubscriptionId(SUB_ID_2);
- doReturn(mPackageManager).when(mContext).getPackageManager();
- doReturn(mComponentName).when(mPhoneAccountHandle).getComponentName();
- doReturn(PACKAGE_NAME).when(mComponentName).getPackageName();
+ when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
+ when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+ when(mTelephonyManager.createForSubscriptionId(SUB_ID_1)).thenReturn(mTelephonyManager);
+ when(mTelephonyManager.createForSubscriptionId(SUB_ID_2)).thenReturn(mTelephonyManager2);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPhoneAccountHandle.getComponentName()).thenReturn(mComponentName);
+ when(mComponentName.getPackageName()).thenReturn(PACKAGE_NAME);
+ when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn(
+ mCarrierConfigManager);
- doReturn(SUB_ID_1).when(mSubscriptionInfo1).getSubscriptionId();
- doReturn(SUB_ID_2).when(mSubscriptionInfo2).getSubscriptionId();
+ mCarrierConfig = new PersistableBundle();
+ when(mCarrierConfigManager.getConfigForSubId(SUB_ID_1)).thenReturn(mCarrierConfig);
- doReturn(Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2)).when(
- mSubscriptionManager).getActiveSubscriptionInfoList();
+ when(mSubscriptionInfo1.getSubscriptionId()).thenReturn(SUB_ID_1);
+ when(mSubscriptionInfo2.getSubscriptionId()).thenReturn(SUB_ID_2);
+
+ when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(
+ Arrays.asList(mSubscriptionInfo1, mSubscriptionInfo2));
}
@Test
@@ -129,8 +139,8 @@
@Test
public void buildConfigureIntent_noActivityHandleIntent_returnNull() {
- doReturn(new ArrayList<ResolveInfo>()).when(mPackageManager).queryIntentActivities(
- nullable(Intent.class), anyInt());
+ when(mPackageManager.queryIntentActivities(nullable(Intent.class), anyInt()))
+ .thenReturn(new ArrayList<>());
assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
mPhoneAccountHandle)).isNull();
@@ -138,8 +148,8 @@
@Test
public void buildConfigureIntent_hasActivityHandleIntent_returnIntent() {
- doReturn(Arrays.asList(mResolveInfo)).when(mPackageManager).queryIntentActivities(
- nullable(Intent.class), anyInt());
+ when(mPackageManager.queryIntentActivities(nullable(Intent.class), anyInt()))
+ .thenReturn(Arrays.asList(mResolveInfo));
assertThat(MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
mPhoneAccountHandle)).isNotNull();
@@ -147,19 +157,29 @@
@Test
public void isCdmaOptions_phoneTypeCdma_returnTrue() {
- doReturn(PhoneConstants.PHONE_TYPE_CDMA).when(mTelephonyManager).getPhoneType();
+ when(mTelephonyManager.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_CDMA);
assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
}
@Test
public void isCdmaOptions_worldModeWithGsmWcdma_returnTrue() {
- doReturn(PhoneConstants.PHONE_TYPE_GSM).when(mTelephonyManager).getPhoneType();
- doReturn("true").when(mContext).getString(R.string.config_world_mode);
+ when(mTelephonyManager.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
+ when(mContext.getString(R.string.config_world_mode)).thenReturn("true");
Settings.Global.putInt(mContext.getContentResolver(),
android.provider.Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID_1,
TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
}
+
+ @Test
+ public void isCdmaOptions_carrierWorldModeWithoutHideCarrier_returnTrue() {
+ when(mTelephonyManager.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL,
+ false);
+ mCarrierConfig.putBoolean(CarrierConfigManager.KEY_WORLD_PHONE_BOOL, true);
+
+ assertThat(MobileNetworkUtils.isCdmaOptions(mContext, SUB_ID_1)).isTrue();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java
index c5ca427..ea184fd 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java
@@ -23,9 +23,12 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
+import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.view.Menu;
@@ -69,6 +72,8 @@
@Mock
private SubscriptionInfo mSubscriptionInfo;
@Mock
+ private SubscriptionInfo mSubscriptionInfo2;
+ @Mock
private FragmentManager mFragmentManager;
@Mock
private FragmentTransaction mFragmentTransaction;
@@ -85,6 +90,9 @@
mShowFragment = new Fragment();
mHideFragment = new Fragment();
mMobileSettingsActivity.mSubscriptionInfos = mSubscriptionInfos;
+ mMobileSettingsActivity.mSubscriptionManager = mSubscriptionManager;
+ when(mSubscriptionInfo.getSubscriptionId()).thenReturn(PREV_SUB_ID);
+ when(mSubscriptionInfo2.getSubscriptionId()).thenReturn(CURRENT_SUB_ID);
doReturn(mSubscriptionManager).when(mMobileSettingsActivity).getSystemService(
SubscriptionManager.class);
@@ -121,23 +129,32 @@
}
@Test
- public void switchFragment_hidePreviousFragment() {
+ public void switchFragment_newFragment_replaceIt() {
mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID;
mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID);
- verify(mFragmentTransaction).hide(mHideFragment);
+ verify(mFragmentTransaction).replace(R.id.main_content, mShowFragment,
+ MOBILE_SETTINGS_TAG + CURRENT_SUB_ID);
}
@Test
- public void switchFragment_fragmentExist_showItWithArguments() {
- mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID;
+ public void getSubscriptionId_hasIntent_getIdFromIntent() {
+ final Intent intent = new Intent();
+ intent.putExtra(Settings.EXTRA_SUB_ID, CURRENT_SUB_ID);
+ doReturn(intent).when(mMobileSettingsActivity).getIntent();
+ doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
- mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID);
+ assertThat(mMobileSettingsActivity.getSubscriptionId()).isEqualTo(CURRENT_SUB_ID);
+ }
- assertThat(mShowFragment.getArguments().getInt(
- MobileSettingsActivity.KEY_SUBSCRIPTION_ID)).isEqualTo(CURRENT_SUB_ID);
- verify(mFragmentTransaction).show(mShowFragment);
+ @Test
+ public void getSubscriptionId_noIntent_firstIdInList() {
+ doReturn(null).when(mMobileSettingsActivity).getIntent();
+ mSubscriptionInfos.add(mSubscriptionInfo);
+ mSubscriptionInfos.add(mSubscriptionInfo2);
+
+ assertThat(mMobileSettingsActivity.getSubscriptionId()).isEqualTo(PREV_SUB_ID);
}
@Test
@@ -149,7 +166,7 @@
mMobileSettingsActivity.saveInstanceState(bundle);
- assertThat(bundle.getInt(MobileSettingsActivity.KEY_CUR_SUBSCRIPTION_ID)).isEqualTo(
+ assertThat(bundle.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(
PREV_SUB_ID);
}
}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java
index c938948..4044b6c 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSubscriptionPreferenceControllerTest.java
@@ -21,10 +21,13 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.os.PersistableBundle;
import android.os.SystemProperties;
import android.provider.Settings;
+import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -53,9 +56,12 @@
private TelephonyManager mInvalidTelephonyManager;
@Mock
private SubscriptionManager mSubscriptionManager;
+ @Mock
+ private CarrierConfigManager mCarrierConfigManager;
private CdmaSubscriptionPreferenceController mController;
private ListPreference mPreference;
+ private PersistableBundle mCarrierConfig;
private Context mContext;
@Before
@@ -68,6 +74,10 @@
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
doReturn(mInvalidTelephonyManager).when(mTelephonyManager).createForSubscriptionId(
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ doReturn(mCarrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class);
+
+ mCarrierConfig = new PersistableBundle();
+ when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
mPreference = new ListPreference(mContext);
mController = new CdmaSubscriptionPreferenceController(mContext, "mobile_data");
diff --git a/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
index 2046237..f00afc9 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceControllerTest.java
@@ -21,9 +21,12 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
+import android.os.PersistableBundle;
import android.provider.Settings;
+import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -51,9 +54,12 @@
private TelephonyManager mInvalidTelephonyManager;
@Mock
private SubscriptionManager mSubscriptionManager;
+ @Mock
+ private CarrierConfigManager mCarrierConfigManager;
private CdmaSystemSelectPreferenceController mController;
private ListPreference mPreference;
+ private PersistableBundle mCarrierConfig;
private Context mContext;
@Before
@@ -67,6 +73,12 @@
doReturn(mInvalidTelephonyManager).when(mTelephonyManager).createForSubscriptionId(
SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ doReturn(mCarrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class);
+
+ mCarrierConfig = new PersistableBundle();
+ when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
+
+
mPreference = new ListPreference(mContext);
mController = new CdmaSystemSelectPreferenceController(mContext, "mobile_data");
mController.init(mPreferenceManager, SUB_ID);
@@ -102,6 +114,20 @@
}
@Test
+ public void updateState_LteGSMWcdma_disabled() {
+ doReturn(TelephonyManager.CDMA_ROAMING_MODE_HOME).when(
+ mTelephonyManager).getCdmaRoamingMode();
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PREFERRED_NETWORK_MODE + SUB_ID,
+ TelephonyManager.NETWORK_MODE_LTE_GSM_WCDMA);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isEnabled()).isFalse();
+ }
+
+
+ @Test
public void updateState_stateOther_resetToDefault() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.CDMA_ROAMING_MODE,