diff --git a/res/layout/preference_single_target.xml b/res/layout/preference_single_target.xml new file mode 100644 index 00000000000..b4a9de01636 --- /dev/null +++ b/res/layout/preference_single_target.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 84100dd7660..f808dfc84e6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2390,8 +2390,6 @@ AndroidAP WPA2 PSK hotspot AndroidHotspot - - Unavailable because airplane mode is turned on @@ -5242,8 +5240,8 @@ Tablet used more than usual Device used more than usual - - Battery may run out soon + + Battery may run out earlier than usual Your phone has been used more than usual. Your battery may run out sooner than expected.\n\nTop %1$d apps you used since full charge: @@ -10686,6 +10684,9 @@ Volume + + Unavailable during airplane mode + Force desktop mode @@ -10736,8 +10737,8 @@ - 1 service has full access to your device - %1$d services have full access to your device + 1 app has full access to your device + %1$d apps have full access to your device diff --git a/res/xml/firmware_version.xml b/res/xml/firmware_version.xml index 2914ef1acf3..75336ce86b0 100644 --- a/res/xml/firmware_version.xml +++ b/res/xml/firmware_version.xml @@ -68,6 +68,7 @@ android:title="@string/build_number" android:summary="@string/summary_placeholder" settings:enableCopying="true" + settings:allowDynamicSummaryInSlice="true" settings:controller="com.android.settings.deviceinfo.firmwareversion.SimpleBuildNumberPreferenceController"/> \ No newline at end of file diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml index 83bf5c45d08..bc498d2205f 100644 --- a/res/xml/my_device_info.xml +++ b/res/xml/my_device_info.xml @@ -115,6 +115,7 @@ android:title="@string/status_imei" settings:keywords="@string/keywords_imei_info" android:summary="@string/summary_placeholder" + settings:allowDynamicSummaryInSlice="true" settings:controller="com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController"/> diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 541ca3a66ad..001e65be8be 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -50,6 +50,8 @@ import androidx.preference.PreferenceManager; import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.applications.manageapplications.ManageApplications; +import com.android.settings.backup.BackupSettingsHelper; +import com.android.settings.backup.UserBackupSettingsActivity; import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.core.SubSettingLauncher; @@ -630,6 +632,12 @@ public class SettingsActivity extends SettingsBaseActivity showDev, isAdmin) || somethingChanged; + // Enable/disable backup settings depending on whether backup is activated for the user. + boolean isBackupActive = new BackupSettingsHelper(this).isBackupServiceActive(); + somethingChanged = setTileEnabled(changedList, new ComponentName(packageName, + UserBackupSettingsActivity.class.getName()), isBackupActive, isAdmin) + || somethingChanged; + somethingChanged = setTileEnabled(changedList, new ComponentName(packageName, Settings.WifiDisplaySettingsActivity.class.getName()), WifiDisplaySettings.isAvailable(this), isAdmin) diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java index fa77154081c..b836e55a9cf 100644 --- a/src/com/android/settings/backup/BackupSettingsHelper.java +++ b/src/com/android/settings/backup/BackupSettingsHelper.java @@ -209,7 +209,7 @@ public class BackupSettingsHelper { } /** Checks if backup service is enabled for this user. */ - private boolean isBackupServiceActive() { + public boolean isBackupServiceActive() { boolean backupOkay; try { backupOkay = mBackupManager.isBackupServiceActive(UserHandle.myUserId()); diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java index f13af9466cd..855a988a178 100644 --- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java @@ -16,12 +16,8 @@ package com.android.settings.deviceinfo; -import static android.content.Context.CLIPBOARD_SERVICE; - import android.app.Activity; import android.app.settings.SettingsEnums; -import android.content.ClipData; -import android.content.ClipboardManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -79,11 +75,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im @Override public CharSequence getSummary() { - try { - return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY); - } catch (Exception e) { - return mContext.getText(R.string.device_info_default); - } + return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY); } @Override @@ -99,29 +91,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im @Override public int getAvailabilityStatus() { - return AVAILABLE; - } - - @Override - public boolean isSliceable() { - return true; - } - - @Override - public boolean isCopyableSlice() { - return true; - } - - @Override - public void copy() { - final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService( - CLIPBOARD_SERVICE); - final ClipData clip = ClipData.newPlainText("text", getSummary()); - clipboard.setPrimaryClip(clip); - - final String toast = mContext.getString(R.string.copyable_slice_toast, - mContext.getText(R.string.build_number)); - Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); + return AVAILABLE_UNSEARCHABLE; } @Override diff --git a/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java index c7d4459aa24..36f1a43f220 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java @@ -16,10 +16,16 @@ package com.android.settings.deviceinfo.firmwareversion; +import static android.content.Context.CLIPBOARD_SERVICE; + +import android.content.ClipData; +import android.content.ClipboardManager; import android.content.Context; import android.os.Build; import android.text.BidiFormatter; +import android.widget.Toast; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; public class SimpleBuildNumberPreferenceController extends BasePreferenceController { @@ -38,4 +44,26 @@ public class SimpleBuildNumberPreferenceController extends BasePreferenceControl public CharSequence getSummary() { return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY); } + + @Override + public boolean isSliceable() { + return true; + } + + @Override + public boolean isCopyableSlice() { + return true; + } + + @Override + public void copy() { + final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService( + CLIPBOARD_SERVICE); + final ClipData clip = ClipData.newPlainText("text", getSummary()); + clipboard.setPrimaryClip(clip); + + final String toast = mContext.getString(R.string.copyable_slice_toast, + mContext.getText(R.string.build_number)); + Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); + } } diff --git a/src/com/android/settings/homepage/contextualcards/deviceinfo/BatteryInfoSlice.java b/src/com/android/settings/homepage/contextualcards/deviceinfo/BatteryInfoSlice.java deleted file mode 100644 index 6c7f930a5e2..00000000000 --- a/src/com/android/settings/homepage/contextualcards/deviceinfo/BatteryInfoSlice.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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.homepage.contextualcards.deviceinfo; - -import android.app.PendingIntent; -import android.app.settings.SettingsEnums; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.Uri; -import android.os.PowerManager; - -import androidx.annotation.VisibleForTesting; -import androidx.core.graphics.drawable.IconCompat; -import androidx.slice.Slice; -import androidx.slice.builders.ListBuilder; -import androidx.slice.builders.SliceAction; - -import com.android.settings.R; -import com.android.settings.SubSettings; -import com.android.settings.Utils; -import com.android.settings.fuelgauge.BatteryInfo; -import com.android.settings.fuelgauge.PowerUsageSummary; -import com.android.settings.slices.CustomSliceRegistry; -import com.android.settings.slices.CustomSliceable; -import com.android.settings.slices.SliceBuilderUtils; - -/** - * Utility class to build a Battery Slice, and handle all associated actions. - */ -public class BatteryInfoSlice implements CustomSliceable { - private static final String TAG = "BatteryInfoSlice"; - - private final Context mContext; - - private BatteryInfo mBatteryInfo; - private boolean mIsBatteryInfoLoading; - - public BatteryInfoSlice(Context context) { - mContext = context; - } - - @Override - public Slice getSlice() { - if (mBatteryInfo == null) { - mIsBatteryInfoLoading = true; - loadBatteryInfo(); - } - final IconCompat icon = IconCompat.createWithResource(mContext, - R.drawable.ic_settings_battery); - final CharSequence title = mContext.getText(R.string.power_usage_summary_title); - final SliceAction primarySliceAction = SliceAction.createDeeplink(getPrimaryAction(), icon, - ListBuilder.ICON_IMAGE, title); - final Slice slice = new ListBuilder(mContext, CustomSliceRegistry.BATTERY_INFO_SLICE_URI, - ListBuilder.INFINITY) - .setAccentColor(Utils.getColorAccentDefaultColor(mContext)) - .setHeader(new ListBuilder.HeaderBuilder().setTitle(title)) - .addRow(new ListBuilder.RowBuilder() - .setTitle(getBatteryPercentString(), mIsBatteryInfoLoading) - .setSubtitle(getSummary(), mIsBatteryInfoLoading) - .setPrimaryAction(primarySliceAction)) - .build(); - mBatteryInfo = null; - mIsBatteryInfoLoading = false; - return slice; - } - - @Override - public Uri getUri() { - return CustomSliceRegistry.BATTERY_INFO_SLICE_URI; - } - - @Override - public void onNotifyChange(Intent intent) { - - } - - @Override - public Intent getIntent() { - final String screenTitle = mContext.getText(R.string.power_usage_summary_title).toString(); - return SliceBuilderUtils.buildSearchResultPageIntent(mContext, - PowerUsageSummary.class.getName(), "" /* key */, screenTitle, - SettingsEnums.SLICE) - .setClassName(mContext.getPackageName(), SubSettings.class.getName()) - .setData(CustomSliceRegistry.BATTERY_INFO_SLICE_URI); - } - - @Override - public IntentFilter getIntentFilter() { - final IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED); - intentFilter.addAction(Intent.ACTION_POWER_CONNECTED); - intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED); - intentFilter.addAction(Intent.ACTION_BATTERY_LEVEL_CHANGED); - return intentFilter; - } - - @VisibleForTesting - void loadBatteryInfo() { - BatteryInfo.getBatteryInfo(mContext, info -> { - mBatteryInfo = info; - mContext.getContentResolver().notifyChange(getUri(), null); - }, true); - } - - @VisibleForTesting - CharSequence getBatteryPercentString() { - return mBatteryInfo == null ? null : mBatteryInfo.batteryPercentString; - } - - @VisibleForTesting - CharSequence getSummary() { - if (mBatteryInfo == null) { - return null; - } - return mBatteryInfo.remainingLabel == null ? mBatteryInfo.statusLabel - : mBatteryInfo.remainingLabel; - } - - private PendingIntent getPrimaryAction() { - final Intent intent = getIntent(); - return PendingIntent.getActivity(mContext, 0 /* requestCode */, - intent, 0 /* flags */); - } -} \ No newline at end of file diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java index 6efd8c3aed6..5a5d6a2467b 100644 --- a/src/com/android/settings/network/telephony/MobileDataSlice.java +++ b/src/com/android/settings/network/telephony/MobileDataSlice.java @@ -74,8 +74,27 @@ public class MobileDataSlice implements CustomSliceable { final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.ic_network_cell); final String title = mContext.getText(R.string.mobile_data_settings_title).toString(); - final CharSequence summary = getSummary(); @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext); + + // Return a Slice without the mobile data toggle when airplane mode is on. + if (isAirplaneModeEnabled()) { + final CharSequence summary = mContext.getText(R.string.mobile_data_ap_mode_disabled); + // Intent does nothing, but we have to pass an intent to the Row. + final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */, + new Intent(), 0 /* flags */); + final SliceAction deadAction = + SliceAction.create(intent, icon, ListBuilder.ICON_IMAGE, title); + final ListBuilder listBuilder = new ListBuilder(mContext, getUri(), + ListBuilder.INFINITY) + .setAccentColor(color) + .addRow(new ListBuilder.RowBuilder() + .setTitle(title) + .setSubtitle(summary) + .setPrimaryAction(deadAction)); + return listBuilder.build(); + } + + final CharSequence summary = getSummary(); final PendingIntent toggleAction = getBroadcastIntent(mContext); final PendingIntent primaryAction = getPrimaryAction(); final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon, @@ -101,11 +120,6 @@ public class MobileDataSlice implements CustomSliceable { @Override public void onNotifyChange(Intent intent) { - // Don't make a change if we are in Airplane Mode. - if (isAirplaneModeEnabled()) { - return; - } - final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, isMobileDataEnabled()); diff --git a/src/com/android/settings/slices/CustomSliceManager.java b/src/com/android/settings/slices/CustomSliceManager.java index c9e473a9c20..91f55ae9832 100644 --- a/src/com/android/settings/slices/CustomSliceManager.java +++ b/src/com/android/settings/slices/CustomSliceManager.java @@ -18,25 +18,6 @@ package com.android.settings.slices; import android.content.Context; import android.net.Uri; -import android.util.ArrayMap; - -import androidx.annotation.VisibleForTesting; - -import com.android.settings.flashlight.FlashlightSlice; -import com.android.settings.homepage.contextualcards.deviceinfo.BatteryInfoSlice; -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.BatteryFixSlice; -import com.android.settings.homepage.contextualcards.slices.BluetoothDevicesSlice; -import com.android.settings.homepage.contextualcards.slices.LowStorageSlice; -import com.android.settings.homepage.contextualcards.slices.NotificationChannelSlice; -import com.android.settings.location.LocationSlice; -import com.android.settings.media.MediaOutputSlice; -import com.android.settings.network.telephony.MobileDataSlice; -import com.android.settings.wifi.slice.ContextualWifiSlice; -import com.android.settings.wifi.slice.WifiSlice; import java.util.Map; import java.util.WeakHashMap; @@ -47,17 +28,12 @@ import java.util.WeakHashMap; */ public class CustomSliceManager { - @VisibleForTesting - final Map> mUriMap; - private final Context mContext; private final Map mSliceableCache; public CustomSliceManager(Context context) { mContext = context.getApplicationContext(); - mUriMap = new ArrayMap<>(); mSliceableCache = new WeakHashMap<>(); - addSlices(); } /** @@ -67,12 +43,12 @@ public class CustomSliceManager { * the only thing that should be needed to create the object. */ public CustomSliceable getSliceableFromUri(Uri uri) { - final Uri newUri = removeParameterFromUri(uri); + final Uri newUri = CustomSliceRegistry.removeParameterFromUri(uri); if (mSliceableCache.containsKey(newUri)) { return mSliceableCache.get(newUri); } - final Class clazz = mUriMap.get(newUri); + final Class clazz = CustomSliceRegistry.getSliceClassByUri(newUri); if (clazz == null) { throw new IllegalArgumentException("No Slice found for uri: " + uri); } @@ -82,9 +58,6 @@ public class CustomSliceManager { return sliceable; } - private Uri removeParameterFromUri(Uri uri) { - return uri != null ? uri.buildUpon().clearQuery().build() : null; - } /** * Return a {@link CustomSliceable} associated to the Action. @@ -95,39 +68,4 @@ public class CustomSliceManager { public CustomSliceable getSliceableFromIntentAction(String action) { return getSliceableFromUri(Uri.parse(action)); } - - /** - * Returns {@code true} if {@param uri} is a valid Slice Uri handled by - * {@link CustomSliceManager}. - */ - public boolean isValidUri(Uri uri) { - return mUriMap.containsKey(removeParameterFromUri(uri)); - } - - /** - * Returns {@code true} if {@param action} is a valid intent action handled by - * {@link CustomSliceManager}. - */ - public boolean isValidAction(String action) { - return isValidUri(Uri.parse(action)); - } - - private void addSlices() { - mUriMap.put(CustomSliceRegistry.BATTERY_FIX_SLICE_URI, BatteryFixSlice.class); - mUriMap.put(CustomSliceRegistry.BATTERY_INFO_SLICE_URI, BatteryInfoSlice.class); - mUriMap.put(CustomSliceRegistry.BLUETOOTH_DEVICES_SLICE_URI, BluetoothDevicesSlice.class); - mUriMap.put(CustomSliceRegistry.CONTEXTUAL_WIFI_SLICE_URI, ContextualWifiSlice.class); - mUriMap.put(CustomSliceRegistry.DATA_USAGE_SLICE_URI, DataUsageSlice.class); - mUriMap.put(CustomSliceRegistry.DEVICE_INFO_SLICE_URI, DeviceInfoSlice.class); - mUriMap.put(CustomSliceRegistry.EMERGENCY_INFO_SLICE_URI, EmergencyInfoSlice.class); - mUriMap.put(CustomSliceRegistry.FLASHLIGHT_SLICE_URI, FlashlightSlice.class); - mUriMap.put(CustomSliceRegistry.LOCATION_SLICE_URI, LocationSlice.class); - mUriMap.put(CustomSliceRegistry.LOW_STORAGE_SLICE_URI, LowStorageSlice.class); - mUriMap.put(CustomSliceRegistry.MOBILE_DATA_SLICE_URI, MobileDataSlice.class); - mUriMap.put(CustomSliceRegistry.NOTIFICATION_CHANNEL_SLICE_URI, - NotificationChannelSlice.class); - mUriMap.put(CustomSliceRegistry.STORAGE_SLICE_URI, StorageSlice.class); - mUriMap.put(CustomSliceRegistry.WIFI_SLICE_URI, WifiSlice.class); - mUriMap.put(CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI, MediaOutputSlice.class); - } } diff --git a/src/com/android/settings/slices/CustomSliceRegistry.java b/src/com/android/settings/slices/CustomSliceRegistry.java index 3a1db69c00a..12e7b48ffb2 100644 --- a/src/com/android/settings/slices/CustomSliceRegistry.java +++ b/src/com/android/settings/slices/CustomSliceRegistry.java @@ -24,11 +24,30 @@ import static com.android.settings.notification.ZenModePreferenceController.ZEN_ import android.content.ContentResolver; import android.net.Uri; import android.provider.SettingsSlicesContract; +import android.util.ArrayMap; +import androidx.annotation.VisibleForTesting; + +import com.android.settings.flashlight.FlashlightSlice; import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController; +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.BatteryFixSlice; +import com.android.settings.homepage.contextualcards.slices.BluetoothDevicesSlice; +import com.android.settings.homepage.contextualcards.slices.LowStorageSlice; +import com.android.settings.homepage.contextualcards.slices.NotificationChannelSlice; +import com.android.settings.location.LocationSlice; +import com.android.settings.media.MediaOutputSlice; +import com.android.settings.network.telephony.MobileDataSlice; import com.android.settings.wifi.calling.WifiCallingSliceHelper; +import com.android.settings.wifi.slice.ContextualWifiSlice; +import com.android.settings.wifi.slice.WifiSlice; import com.android.settingslib.media.MediaOutputSliceConstants; +import java.util.Map; + /** * A registry of custom slice Uris. */ @@ -53,15 +72,7 @@ public class CustomSliceRegistry { .appendEncodedPath(SettingsSlicesContract.PATH_SETTING_INTENT) .appendPath(BatteryTipPreferenceController.PREF_NAME) .build(); - /** - * Backing Uri for the Battery info Slice. - */ - public static final Uri BATTERY_INFO_SLICE_URI = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .appendEncodedPath(SettingsSlicesContract.PATH_SETTING_INTENT) - .appendPath("battery_card") - .build(); + /** * Backing Uri for the Bluetooth Slice. */ @@ -287,4 +298,51 @@ public class CustomSliceRegistry { .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION) .appendPath(MediaOutputSliceConstants.KEY_MEDIA_OUTPUT) .build(); + + @VisibleForTesting + static final Map> sUriToSlice; + + static { + sUriToSlice = new ArrayMap<>(); + + sUriToSlice.put(BATTERY_FIX_SLICE_URI, BatteryFixSlice.class); + sUriToSlice.put(BLUETOOTH_DEVICES_SLICE_URI, BluetoothDevicesSlice.class); + sUriToSlice.put(CONTEXTUAL_WIFI_SLICE_URI, ContextualWifiSlice.class); + sUriToSlice.put(DATA_USAGE_SLICE_URI, DataUsageSlice.class); + sUriToSlice.put(DEVICE_INFO_SLICE_URI, DeviceInfoSlice.class); + sUriToSlice.put(EMERGENCY_INFO_SLICE_URI, EmergencyInfoSlice.class); + sUriToSlice.put(FLASHLIGHT_SLICE_URI, FlashlightSlice.class); + sUriToSlice.put(LOCATION_SLICE_URI, LocationSlice.class); + sUriToSlice.put(LOW_STORAGE_SLICE_URI, LowStorageSlice.class); + sUriToSlice.put(MOBILE_DATA_SLICE_URI, MobileDataSlice.class); + sUriToSlice.put(NOTIFICATION_CHANNEL_SLICE_URI, NotificationChannelSlice.class); + sUriToSlice.put(STORAGE_SLICE_URI, StorageSlice.class); + sUriToSlice.put(WIFI_SLICE_URI, WifiSlice.class); + sUriToSlice.put(MEDIA_OUTPUT_SLICE_URI, MediaOutputSlice.class); + } + + public static Class getSliceClassByUri(Uri uri) { + return sUriToSlice.get(uri); + } + + public static Uri removeParameterFromUri(Uri uri) { + return uri != null ? uri.buildUpon().clearQuery().build() : null; + } + + /** + * Returns {@code true} if {@param uri} is a valid Slice Uri handled by + * {@link CustomSliceManager}. + */ + public static boolean isValidUri(Uri uri) { + return sUriToSlice.containsKey(removeParameterFromUri(uri)); + } + + /** + * Returns {@code true} if {@param action} is a valid intent action handled by + * {@link CustomSliceManager}. + */ + public static boolean isValidAction(String action) { + return isValidUri(Uri.parse(action)); + } + } diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java index 397b2fc631c..d019368fd62 100644 --- a/src/com/android/settings/slices/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -147,7 +147,7 @@ public class SettingsSliceProvider extends SliceProvider { @Override public void onSlicePinned(Uri sliceUri) { - if (mCustomSliceManager.isValidUri(sliceUri)) { + if (CustomSliceRegistry.isValidUri(sliceUri)) { final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(sliceUri); final IntentFilter filter = sliceable.getIntentFilter(); if (filter != null) { @@ -194,7 +194,7 @@ public class SettingsSliceProvider extends SliceProvider { // Before adding a slice to {@link CustomSliceManager}, please get approval // from the Settings team. - if (mCustomSliceManager.isValidUri(sliceUri)) { + if (CustomSliceRegistry.isValidUri(sliceUri)) { final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri( sliceUri); return sliceable.getSlice(); diff --git a/src/com/android/settings/slices/SliceBroadcastReceiver.java b/src/com/android/settings/slices/SliceBroadcastReceiver.java index b2ea5830fe2..8b6fc9801be 100644 --- a/src/com/android/settings/slices/SliceBroadcastReceiver.java +++ b/src/com/android/settings/slices/SliceBroadcastReceiver.java @@ -63,7 +63,7 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { final CustomSliceManager mCustomSliceManager = FeatureFactory.getFactory( context).getSlicesFeatureProvider().getCustomSliceManager(context); - if (mCustomSliceManager.isValidAction(action)) { + if (CustomSliceRegistry.isValidAction(action)) { final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromIntentAction(action); sliceable.onNotifyChange(intent); diff --git a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java index f4afa16d7af..d2179d20ebc 100644 --- a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java +++ b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java @@ -47,7 +47,7 @@ public class SliceDeepLinkSpringBoard extends Activity { // TODO (b/80263568) Avoid duplicating this list of Slice Uris. final CustomSliceManager customSliceManager = FeatureFactory.getFactory(this) .getSlicesFeatureProvider().getCustomSliceManager(this); - if (customSliceManager.isValidUri(sliceUri)) { + if (CustomSliceRegistry.isValidUri(sliceUri)) { final CustomSliceable sliceable = customSliceManager.getSliceableFromUri(sliceUri); launchIntent = sliceable.getIntent(); diff --git a/src/com/android/settings/widget/SingleTargetGearPreference.java b/src/com/android/settings/widget/SingleTargetGearPreference.java index 48876fa81d9..f6496ed4d88 100644 --- a/src/com/android/settings/widget/SingleTargetGearPreference.java +++ b/src/com/android/settings/widget/SingleTargetGearPreference.java @@ -18,9 +18,10 @@ package com.android.settings.widget; import android.content.Context; import android.util.AttributeSet; +import android.view.View; -import androidx.core.content.res.TypedArrayUtils; import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; import com.android.settings.R; @@ -28,23 +29,38 @@ import com.android.settings.R; * A preference with single target and a gear icon on the side. */ public class SingleTargetGearPreference extends Preference { - - public SingleTargetGearPreference(Context context, AttributeSet attrs, - int defStyleAttr, int defStyleRes) { + public SingleTargetGearPreference(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - setWidgetLayoutResource(R.layout.preference_widget_gear_no_bg); + init(); } public SingleTargetGearPreference(Context context, AttributeSet attrs, int defStyleAttr) { - this(context, attrs, defStyleAttr, 0 /* defStyleRes */); + super(context, attrs, defStyleAttr); + init(); } public SingleTargetGearPreference(Context context, AttributeSet attrs) { - this(context, attrs, TypedArrayUtils.getAttr(context, R.attr.preferenceStyle, - android.R.attr.preferenceStyle)); + super(context, attrs); + init(); } public SingleTargetGearPreference(Context context) { - this(context, null /* attrs */); + super(context); + init(); } -} \ No newline at end of file + + private void init() { + setLayoutResource(R.layout.preference_single_target); + setWidgetLayoutResource(R.layout.preference_widget_gear_optional_background); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + final View divider = holder.findViewById(com.android.settingslib.R.id.two_target_divider); + if (divider != null) { + divider.setVisibility(View.INVISIBLE); + } + } +} diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java index 4255f3c964c..625de38f082 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java @@ -40,7 +40,6 @@ import android.widget.Switch; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; -import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; @@ -141,20 +140,17 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } }; + /* + * Launch carrier emergency address managemnent activity + */ private final OnPreferenceClickListener mUpdateAddressListener = - new OnPreferenceClickListener() { - /* - * Launch carrier emergency address managemnent activity - */ - @Override - public boolean onPreferenceClick(Preference preference) { - Intent carrierAppIntent = getCarrierActivityIntent(); - if (carrierAppIntent != null) { - carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_UPDATE); - startActivity(carrierAppIntent); - } - return true; + preference -> { + Intent carrierAppIntent = getCarrierActivityIntent(); + if (carrierAppIntent != null) { + carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_UPDATE); + startActivity(carrierAppIntent); } + return true; }; private final ProvisioningManager.Callback mProvisioningCallback = @@ -174,8 +170,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - final SettingsActivity activity = (SettingsActivity) getActivity(); - mEmptyView = getView().findViewById(android.R.id.empty); setEmptyView(mEmptyView); final Resources res = SubscriptionManager.getResourcesForSubId(getContext(), mSubId); @@ -265,14 +259,13 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)) .createForSubscriptionId(mSubId); - mButtonWfcMode = (ListWithEntrySummaryPreference) findPreference(BUTTON_WFC_MODE); + mButtonWfcMode = findPreference(BUTTON_WFC_MODE); mButtonWfcMode.setOnPreferenceChangeListener(this); - mButtonWfcRoamingMode = (ListWithEntrySummaryPreference) findPreference( - BUTTON_WFC_ROAMING_MODE); + mButtonWfcRoamingMode = findPreference(BUTTON_WFC_ROAMING_MODE); mButtonWfcRoamingMode.setOnPreferenceChangeListener(this); - mUpdateAddress = (Preference) findPreference(PREFERENCE_EMERGENCY_ADDRESS); + mUpdateAddress = findPreference(PREFERENCE_EMERGENCY_ADDRESS); mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener); mIntentFilter = new IntentFilter(); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java index 8fae45c584c..18ddd8a6884 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java @@ -16,18 +16,14 @@ package com.android.settings.deviceinfo; -import static android.content.Context.CLIPBOARD_SERVICE; - import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Answers.RETURNS_DEEP_STUBS; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import android.app.Activity; -import android.content.ClipboardManager; import android.content.Context; import android.os.Process; import android.os.UserManager; @@ -35,7 +31,6 @@ import android.provider.Settings; import androidx.lifecycle.LifecycleOwner; import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.core.InstrumentedPreferenceFragment; @@ -62,13 +57,8 @@ import org.robolectric.shadows.ShadowUserManager; public class BuildNumberPreferenceControllerTest { private static final String KEY_BUILD_NUMBER = "build_number"; - - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private Activity mActivity; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private InstrumentedPreferenceFragment mFragment; - @Mock(answer = RETURNS_DEEP_STUBS) - private PreferenceScreen mScreen; private ShadowUserManager mShadowUserManager; @@ -200,14 +190,4 @@ public class BuildNumberPreferenceControllerTest { assertThat(activityResultHandled).isTrue(); assertThat(DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(mContext)).isTrue(); } - - @Test - public void copy_shouldCopyBuildNumberToClipboard() { - mController.copy(); - - final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService( - CLIPBOARD_SERVICE); - final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText(); - assertThat(data.toString()).isEqualTo(mController.getSummary()); - } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceControllerTest.java new file mode 100644 index 00000000000..3784f086da9 --- /dev/null +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceControllerTest.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2019 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.deviceinfo.firmwareversion; + +import static android.content.Context.CLIPBOARD_SERVICE; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.ClipboardManager; +import android.content.Context; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class SimpleBuildNumberPreferenceControllerTest { + + private SimpleBuildNumberPreferenceController mController; + private Context mContext; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + + mController = new SimpleBuildNumberPreferenceController(mContext, "test"); + } + + @Test + public void copy_shouldCopyBuildNumberToClipboard() { + mController.copy(); + + final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService( + CLIPBOARD_SERVICE); + final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText(); + assertThat(data.toString()).isEqualTo(mController.getSummary()); + } +} 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 e66774eca74..40e69391b4d 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java @@ -229,11 +229,6 @@ public class ContextualCardLoaderTest { .setSliceUri(Uri.parse( "content://com.android.settings.test.slices/action/gesture_pick_up")) .build()); - cards.add(new ContextualCard.Builder() - .setName("test_battery") - .setCardType(ContextualCard.CardType.SLICE) - .setSliceUri(CustomSliceRegistry.BATTERY_INFO_SLICE_URI) - .build()); return cards; } @@ -262,11 +257,6 @@ public class ContextualCardLoaderTest { .setSliceUri(Uri.parse( "content://com.android.settings.test.slices/action/gesture_pick_up")) .build()); - cards.add(new ContextualCard.Builder() - .setName("test_battery") - .setCardType(ContextualCard.CardType.SLICE) - .setSliceUri(CustomSliceRegistry.BATTERY_INFO_SLICE_URI) - .build()); return cards; } } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java index eb9a4614c80..8087716c9e1 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java @@ -460,7 +460,7 @@ public class ContextualCardManagerTest { cards.add(new ContextualCard.Builder() .setName("test_battery") .setCardType(ContextualCard.CardType.SLICE) - .setSliceUri(CustomSliceRegistry.BATTERY_INFO_SLICE_URI) + .setSliceUri(CustomSliceRegistry.BATTERY_FIX_SLICE_URI) .setViewType(VIEW_TYPE_FULL_WIDTH) .build()); return cards; diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/deviceinfo/BatteryInfoSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/deviceinfo/BatteryInfoSliceTest.java deleted file mode 100644 index ff276d64d54..00000000000 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/deviceinfo/BatteryInfoSliceTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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.homepage.contextualcards.deviceinfo; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; - -import android.content.Context; - -import androidx.core.graphics.drawable.IconCompat; -import androidx.slice.Slice; -import androidx.slice.SliceMetadata; -import androidx.slice.SliceProvider; -import androidx.slice.core.SliceAction; -import androidx.slice.widget.SliceLiveData; - -import com.android.settings.R; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -@RunWith(RobolectricTestRunner.class) -public class BatteryInfoSliceTest { - - private Context mContext; - private BatteryInfoSlice mBatteryInfoSlice; - - @Before - public void setUp() { - mContext = RuntimeEnvironment.application; - - // Set-up specs for SliceMetadata. - SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); - - mBatteryInfoSlice = spy(new BatteryInfoSlice(mContext)); - } - - @Test - public void getSlice_shouldBeCorrectSliceContent() { - doNothing().when(mBatteryInfoSlice).loadBatteryInfo(); - doReturn("10%").when(mBatteryInfoSlice).getBatteryPercentString(); - doReturn("test").when(mBatteryInfoSlice).getSummary(); - - final Slice slice = mBatteryInfoSlice.getSlice(); - - final SliceMetadata metadata = SliceMetadata.from(mContext, slice); - assertThat(metadata.getTitle()).isEqualTo( - mContext.getString(R.string.power_usage_summary_title)); - - final SliceAction primaryAction = metadata.getPrimaryAction(); - final IconCompat expectedIcon = IconCompat.createWithResource(mContext, - R.drawable.ic_settings_battery); - assertThat(primaryAction.getIcon().toString()).isEqualTo(expectedIcon.toString()); - } -} diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java index c497cf82665..e488d0c7fb2 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.provider.Settings; @@ -162,4 +163,27 @@ public class MobileDataSliceTest { assertThat(isMobileDataEnabled).isEqualTo(seed); } + + @Test + public void airplaneModeEnabled_slicePrimaryActionIsEmpty() { + doReturn(true).when(mMobileDataSlice).isAirplaneModeEnabled(); + doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID); + final Slice mobileData = mMobileDataSlice.getSlice(); + + final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData); + assertThat(metadata.getTitle()) + .isEqualTo(mContext.getString(R.string.mobile_data_settings_title)); + + assertThat(metadata.getSubtitle()) + .isEqualTo(mContext.getString(R.string.mobile_data_ap_mode_disabled)); + + final List toggles = metadata.getToggles(); + assertThat(toggles).hasSize(0); + + final SliceAction primaryAction = metadata.getPrimaryAction(); + final PendingIntent pendingIntent = primaryAction.getAction(); + final Intent actionIntent = pendingIntent.getIntent(); + + assertThat(actionIntent).isNull(); + } } diff --git a/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java b/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java index 82726dff70d..53922844a0c 100644 --- a/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java +++ b/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java @@ -47,8 +47,8 @@ public class SpecialCaseSliceManagerTest { public void setUp() { mContext = RuntimeEnvironment.application; mCustomSliceManager = spy(new CustomSliceManager(mContext)); - mCustomSliceManager.mUriMap.clear(); - mCustomSliceManager.mUriMap.put(FakeSliceable.URI, FakeSliceable.class); + CustomSliceRegistry.sUriToSlice.clear(); + CustomSliceRegistry.sUriToSlice.put(FakeSliceable.URI, FakeSliceable.class); } @Test @@ -69,14 +69,14 @@ public class SpecialCaseSliceManagerTest { @Test public void isValidUri_validUri_returnsTrue() { - final boolean isValidUri = mCustomSliceManager.isValidUri(FakeSliceable.URI); + final boolean isValidUri = CustomSliceRegistry.isValidUri(FakeSliceable.URI); assertThat(isValidUri).isTrue(); } @Test public void isValidUri_invalidUri_returnsFalse() { - final boolean isValidUri = mCustomSliceManager.isValidUri(null); + final boolean isValidUri = CustomSliceRegistry.isValidUri(null); assertThat(isValidUri).isFalse(); } @@ -84,14 +84,14 @@ public class SpecialCaseSliceManagerTest { @Test public void isValidAction_validActions_returnsTrue() { final boolean isValidAction = - mCustomSliceManager.isValidAction(FakeSliceable.URI.toString()); + CustomSliceRegistry.isValidAction(FakeSliceable.URI.toString()); assertThat(isValidAction).isTrue(); } @Test public void isValidAction_invalidAction_returnsFalse() { - final boolean isValidAction = mCustomSliceManager.isValidAction("action"); + final boolean isValidAction = CustomSliceRegistry.isValidAction("action"); assertThat(isValidAction).isFalse(); } diff --git a/tests/robotests/src/com/android/settings/wifi/calling/ListWithEntrySummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/calling/ListWithEntrySummaryPreferenceTest.java index cc2622f4b35..307c0ac202d 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/ListWithEntrySummaryPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/ListWithEntrySummaryPreferenceTest.java @@ -33,8 +33,6 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import java.io.IOException; - @RunWith(RobolectricTestRunner.class) public class ListWithEntrySummaryPreferenceTest { @@ -54,6 +52,7 @@ public class ListWithEntrySummaryPreferenceTest { @Before public void setUp() { mContext = RuntimeEnvironment.application; + mContext.setTheme(R.style.Theme_Settings_Home); mPreference = new ListWithEntrySummaryPreference(mContext, null); mPreference.setEntries(mDefaultEntries); mPreference.setEntryValues(mDefaultEntryValues); diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java index 39de254b846..70f1916781e 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java @@ -41,11 +41,9 @@ import android.telephony.ims.ProvisioningManager; import android.view.View; import android.widget.TextView; -import androidx.preference.ListPreference; import androidx.preference.PreferenceScreen; import com.android.ims.ImsConfig; -import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.settings.R; import com.android.settings.SettingsActivity; @@ -80,11 +78,11 @@ public class WifiCallingSettingsForSubTest { @Mock private ToggleSwitch mToggleSwitch; @Mock private View mView; @Mock private ImsConfig mImsConfig; - @Mock private ListPreference mButtonWfcMode; - @Mock private ListPreference mButtonWfcRoamingMode; + @Mock private ListWithEntrySummaryPreference mButtonWfcMode; + @Mock private ListWithEntrySummaryPreference mButtonWfcRoamingMode; @Before - public void setUp() throws NoSuchFieldException, ImsException { + public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; @@ -100,7 +98,7 @@ public class WifiCallingSettingsForSubTest { final Bundle bundle = new Bundle(); when(mFragment.getArguments()).thenReturn(bundle); doNothing().when(mFragment).addPreferencesFromResource(anyInt()); - doReturn(mock(ListPreference.class)).when(mFragment).findPreference(any()); + doReturn(mock(ListWithEntrySummaryPreference.class)).when(mFragment).findPreference(any()); doReturn(mButtonWfcMode).when(mFragment).findPreference(BUTTON_WFC_MODE); doReturn(mButtonWfcRoamingMode).when(mFragment).findPreference(BUTTON_WFC_ROAMING_MODE); doNothing().when(mFragment).finish(); @@ -141,7 +139,7 @@ public class WifiCallingSettingsForSubTest { } @Test - public void onResume_provisioningAllowed_shouldNotFinish() throws ImsException { + public void onResume_provisioningAllowed_shouldNotFinish() { // Call onResume while provisioning is allowed. mFragment.onResume(); @@ -160,7 +158,7 @@ public class WifiCallingSettingsForSubTest { } @Test - public void onResumeOnPause_provisioningCallbackRegistration() throws ImsException { + public void onResumeOnPause_provisioningCallbackRegistration() throws Exception { // Verify that provisioning callback is registered after call to onResume(). mFragment.onResume(); verify(mImsConfig).addConfigCallback(any(ProvisioningManager.Callback.class));