diff --git a/res/values/strings.xml b/res/values/strings.xml index f2661bda11b..56dbc6b8e97 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8920,6 +8920,10 @@ Sleep after %1$s of inactivity Wallpaper, sleep, font size + + + Sleep, font size + Sleep after 10 minutes of inactivity diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index db4e7d87838..b0e362c41a6 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"> diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml index dbb106ec03d..889761bb134 100644 --- a/res/xml/top_level_settings.xml +++ b/res/xml/top_level_settings.xml @@ -59,10 +59,11 @@ + android:fragment="com.android.settings.DisplaySettings" + settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/> 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(); } diff --git a/src/com/android/settings/datausage/AppDataUsageV2.java b/src/com/android/settings/datausage/AppDataUsageV2.java index 7515c51d5c5..6a31726ea06 100644 --- a/src/com/android/settings/datausage/AppDataUsageV2.java +++ b/src/com/android/settings/datausage/AppDataUsageV2.java @@ -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(); } diff --git a/src/com/android/settings/display/TopLevelDisplayPreferenceController.java b/src/com/android/settings/display/TopLevelDisplayPreferenceController.java new file mode 100644 index 00000000000..88b87e0ba0b --- /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 ff3be128ba5..0b091241aec 100644 --- a/src/com/android/settings/display/WallpaperPreferenceController.java +++ b/src/com/android/settings/display/WallpaperPreferenceController.java @@ -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 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 bc1d0fa2fd4..f3fbf06310d 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.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 final String packageName = mContext.getPackageName(); final double rankingScore = 0.0; final List 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 .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 36c0a118023..e394c03a03b 100644 --- a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java +++ b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java @@ -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(); diff --git a/src/com/android/settings/network/telephony/MobileNetworkFragment.java b/src/com/android/settings/network/telephony/MobileNetworkFragment.java index df6c7ab24af..e6db51cc5a1 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.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); diff --git a/src/com/android/settings/network/telephony/MobileSettingsActivity.java b/src/com/android/settings/network/telephony/MobileSettingsActivity.java index d712515d688..b2bceb9a69b 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,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 mSubscriptionInfos; + int mCurSubscriptionId; + @VisibleForTesting + List 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 */); + } + } + } } \ 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 3e42c70198c..dbab674f855 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.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); diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java index 72f69cd7310..d5c704ac02e 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 @@ 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) diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java index 9ea977ca36b..df5e151c5da 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 @@ 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) 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 00000000000..fe4fcc8e225 --- /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 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 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 8a24241d4f4..b4305b6e9d6 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 @@ 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 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 } } 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 6aeb5c00f86..e98e36f56f4 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.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 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 expectedUris = Arrays.asList(dataUsage, deviceInfo, batteryInfo); + final List expectedUris = Arrays.asList(batteryInfo); final List 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) { 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 2c42379f86e..1932ab95e08 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 @@ 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) 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 c5ca4276f0f..ea184fde789 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 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); } }