Snap for 5101359 from 76da1123e4 to qt-release
Change-Id: Ic7caae7d6a1cc5ccc4cadbcb5e3c86b412389118
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -85,7 +85,6 @@ public class DisplaySettings extends DashboardFragment {
|
||||
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;
|
||||
|
||||
@@ -190,7 +190,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
||||
|
||||
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 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -177,7 +177,8 @@ public class AppDataUsageV2 extends DataUsageBaseFragment implements OnPreferenc
|
||||
|
||||
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 @@ public class AppDataUsageV2 extends DataUsageBaseFragment implements OnPreferenc
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -27,34 +27,30 @@ import android.util.Log;
|
||||
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 @@ public class WallpaperPreferenceController extends AbstractPreferenceController
|
||||
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
|
||||
|
||||
@@ -33,8 +33,6 @@ import androidx.annotation.VisibleForTesting;
|
||||
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;
|
||||
@@ -93,15 +91,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
||||
final String packageName = mContext.getPackageName();
|
||||
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)
|
||||
@@ -111,15 +100,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
||||
.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;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,10 +21,6 @@ import static android.provider.SettingsSlicesContract.KEY_WIFI;
|
||||
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 @@ public class SettingsContextualCardProvider extends ContextualCardProvider {
|
||||
.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 @@ public class SettingsContextualCardProvider extends ContextualCardProvider {
|
||||
.build();
|
||||
final ContextualCardList cards = ContextualCardList.newBuilder()
|
||||
.addCard(wifiCard)
|
||||
.addCard(dataUsageCard)
|
||||
.addCard(deviceInfoCard)
|
||||
.addCard(storageInfoCard)
|
||||
.addCard(emergencyInfoCard)
|
||||
.addCard(batteryInfoCard)
|
||||
.addCard(connectedDeviceCard)
|
||||
.build();
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.content.Intent;
|
||||
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 @@ public class MobileNetworkFragment extends RestrictedDashboardFragment {
|
||||
@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);
|
||||
|
||||
@@ -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,68 +35,83 @@ import androidx.fragment.app.Fragment;
|
||||
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);
|
||||
}
|
||||
|
||||
updateSubscriptions(savedInstanceState);
|
||||
}
|
||||
|
||||
@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);
|
||||
@@ -100,24 +120,42 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
|
||||
|
||||
@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 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
|
||||
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 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
|
||||
|
||||
@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 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
|
||||
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 */);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import android.os.Bundle;
|
||||
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 @@ public class NetworkSelectSettings extends DashboardFragment {
|
||||
|
||||
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);
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.settings.network.telephony.gsm;
|
||||
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 @@ public class AutoSelectPreferenceController extends TogglePreferenceController {
|
||||
== 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)
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.settings.network.telephony.gsm;
|
||||
|
||||
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 class OpenNetworkSelectPagePreferenceController extends BasePreferenceCon
|
||||
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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -45,6 +45,7 @@ public class WallpaperPreferenceControllerTest {
|
||||
|
||||
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 @@ public class WallpaperPreferenceControllerTest {
|
||||
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 @@ public class WallpaperPreferenceControllerTest {
|
||||
.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 @@ public class WallpaperPreferenceControllerTest {
|
||||
}
|
||||
|
||||
@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 @@ public class WallpaperPreferenceControllerTest {
|
||||
.thenReturn(resolveInfos);
|
||||
|
||||
assertThat(mController.isAvailable()).isFalse();
|
||||
// should not crash
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,8 +22,6 @@ import android.content.Context;
|
||||
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;
|
||||
|
||||
@@ -53,19 +51,10 @@ public class ContextualCardLoaderTest {
|
||||
mProvider);
|
||||
}
|
||||
|
||||
@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 @@ public class ContextualCardLoaderTest {
|
||||
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 @@ public class ContextualCardLoaderTest {
|
||||
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) {
|
||||
|
||||
@@ -20,7 +20,6 @@ package com.android.settings.homepage.contextualcards;
|
||||
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 @@ import org.robolectric.RuntimeEnvironment;
|
||||
@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)
|
||||
|
||||
@@ -23,9 +23,12 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
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 @@ public class MobileSettingsActivityTest {
|
||||
@Mock
|
||||
private SubscriptionInfo mSubscriptionInfo;
|
||||
@Mock
|
||||
private SubscriptionInfo mSubscriptionInfo2;
|
||||
@Mock
|
||||
private FragmentManager mFragmentManager;
|
||||
@Mock
|
||||
private FragmentTransaction mFragmentTransaction;
|
||||
@@ -85,6 +90,9 @@ public class MobileSettingsActivityTest {
|
||||
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 @@ public class MobileSettingsActivityTest {
|
||||
}
|
||||
|
||||
@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 @@ public class MobileSettingsActivityTest {
|
||||
|
||||
mMobileSettingsActivity.saveInstanceState(bundle);
|
||||
|
||||
assertThat(bundle.getInt(MobileSettingsActivity.KEY_CUR_SUBSCRIPTION_ID)).isEqualTo(
|
||||
assertThat(bundle.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(
|
||||
PREV_SUB_ID);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user