Snap for 5374457 from 93697136b7 to qt-release
Change-Id: Ia5370565cf09ab7e411a4e59b4b08d5eeb7e00ad
This commit is contained in:
96
res/layout/preference_single_target.xml
Normal file
96
res/layout/preference_single_target.xml
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Based off preference_two_target.xml with Material ripple moved to parent for full ripple. -->
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:clipToPadding="false">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start|center_vertical"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
|
||||||
|
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/icon_frame"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="start|center_vertical"
|
||||||
|
android:minWidth="56dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:paddingTop="4dp"
|
||||||
|
android:paddingBottom="4dp">
|
||||||
|
<androidx.preference.internal.PreferenceImageView
|
||||||
|
android:id="@android:id/icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
settings:maxWidth="48dp"
|
||||||
|
settings:maxHeight="48dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingBottom="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@android:id/title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceListItem"
|
||||||
|
android:ellipsize="marquee" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@android:id/summary"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@android:id/title"
|
||||||
|
android:layout_alignStart="@android:id/title"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:maxLines="10" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<include layout="@layout/preference_two_target_divider" />
|
||||||
|
|
||||||
|
<!-- Preference should place its actual preference widget here. -->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@android:id/widget_frame"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:minWidth="64dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
@@ -2390,8 +2390,6 @@
|
|||||||
<string name="wifi_hotspot_configure_ap_text_summary">AndroidAP WPA2 PSK hotspot</string>
|
<string name="wifi_hotspot_configure_ap_text_summary">AndroidAP WPA2 PSK hotspot</string>
|
||||||
<!-- Default access point SSID used for tethering -->
|
<!-- Default access point SSID used for tethering -->
|
||||||
<string name="wifi_tether_configure_ssid_default">AndroidHotspot</string>
|
<string name="wifi_tether_configure_ssid_default">AndroidHotspot</string>
|
||||||
<!-- Summary text when hotspot is disabled because airplane mode is on [CHAR LIMIT=80]-->
|
|
||||||
<string name="wifi_tether_disabled_by_airplane">Unavailable because airplane mode is turned on</string>
|
|
||||||
|
|
||||||
<!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
|
<!-- Do not translate. Used for diagnostic screens, precise translation is not necessary
|
||||||
Wi-Fi Testing on the diagnostic screen-->
|
Wi-Fi Testing on the diagnostic screen-->
|
||||||
@@ -5242,8 +5240,8 @@
|
|||||||
<string name="battery_tip_high_usage_title" product="tablet">Tablet used more than usual</string>
|
<string name="battery_tip_high_usage_title" product="tablet">Tablet used more than usual</string>
|
||||||
<!-- Title for the battery high usage tip [CHAR LIMIT=NONE] -->
|
<!-- Title for the battery high usage tip [CHAR LIMIT=NONE] -->
|
||||||
<string name="battery_tip_high_usage_title" product="device">Device used more than usual</string>
|
<string name="battery_tip_high_usage_title" product="device">Device used more than usual</string>
|
||||||
<!-- Summary for the battery high usage tip, which presents battery may run out soon [CHAR LIMIT=NONE] -->
|
<!-- Summary for the battery high usage tip, which presents battery may run out earlier [CHAR LIMIT=NONE] -->
|
||||||
<string name="battery_tip_high_usage_summary">Battery may run out soon</string>
|
<string name="battery_tip_high_usage_summary">Battery may run out earlier than usual</string>
|
||||||
<!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
|
<!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
|
||||||
<string name="battery_tip_dialog_message" product="default">Your phone has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps you used since full charge:</string>
|
<string name="battery_tip_dialog_message" product="default">Your phone has been used more than usual. Your battery may run out sooner than expected.\n\nTop <xliff:g id="number">%1$d</xliff:g> apps you used since full charge:</string>
|
||||||
<!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
|
<!-- Message for battery tip dialog to show the status about the battery [CHAR LIMIT=NONE] -->
|
||||||
@@ -10686,6 +10684,9 @@
|
|||||||
<!-- Title for the Volume dialog (settings panel) with all volume streams[CHAR LIMIT=50] -->
|
<!-- Title for the Volume dialog (settings panel) with all volume streams[CHAR LIMIT=50] -->
|
||||||
<string name="volume_connectivity_panel_title">Volume</string>
|
<string name="volume_connectivity_panel_title">Volume</string>
|
||||||
|
|
||||||
|
<!-- Subtitle explaining that mobile data cannot be used while airplane mode is on [CHAR LIMIT=50] -->
|
||||||
|
<string name="mobile_data_ap_mode_disabled">Unavailable during airplane mode</string>
|
||||||
|
|
||||||
<!-- UI debug setting: force desktop mode [CHAR LIMIT=50] -->
|
<!-- UI debug setting: force desktop mode [CHAR LIMIT=50] -->
|
||||||
<string name="force_desktop_mode">Force desktop mode</string>
|
<string name="force_desktop_mode">Force desktop mode</string>
|
||||||
<!-- UI debug setting: force desktop mode summary [CHAR LIMIT=NONE] -->
|
<!-- UI debug setting: force desktop mode summary [CHAR LIMIT=NONE] -->
|
||||||
@@ -10736,8 +10737,8 @@
|
|||||||
|
|
||||||
<!-- Summary for the accessibility usage preference in the Privacy page. [CHAR LIMIT=NONE] -->
|
<!-- Summary for the accessibility usage preference in the Privacy page. [CHAR LIMIT=NONE] -->
|
||||||
<plurals name="accessibility_usage_summary">
|
<plurals name="accessibility_usage_summary">
|
||||||
<item quantity="one">1 service has full access to your device</item>
|
<item quantity="one">1 app has full access to your device</item>
|
||||||
<item quantity="other"><xliff:g id="service_count">%1$d</xliff:g> services have full access to your device</item>
|
<item quantity="other"><xliff:g id="service_count">%1$d</xliff:g> apps have full access to your device</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<!-- Title for notification channel slice. [CHAR LIMIT=NONE] -->
|
<!-- Title for notification channel slice. [CHAR LIMIT=NONE] -->
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
android:title="@string/build_number"
|
android:title="@string/build_number"
|
||||||
android:summary="@string/summary_placeholder"
|
android:summary="@string/summary_placeholder"
|
||||||
settings:enableCopying="true"
|
settings:enableCopying="true"
|
||||||
|
settings:allowDynamicSummaryInSlice="true"
|
||||||
settings:controller="com.android.settings.deviceinfo.firmwareversion.SimpleBuildNumberPreferenceController"/>
|
settings:controller="com.android.settings.deviceinfo.firmwareversion.SimpleBuildNumberPreferenceController"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
@@ -115,6 +115,7 @@
|
|||||||
android:title="@string/status_imei"
|
android:title="@string/status_imei"
|
||||||
settings:keywords="@string/keywords_imei_info"
|
settings:keywords="@string/keywords_imei_info"
|
||||||
android:summary="@string/summary_placeholder"
|
android:summary="@string/summary_placeholder"
|
||||||
|
settings:allowDynamicSummaryInSlice="true"
|
||||||
settings:controller="com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController"/>
|
settings:controller="com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController"/>
|
||||||
|
|
||||||
<!-- Android version -->
|
<!-- Android version -->
|
||||||
|
|||||||
@@ -50,6 +50,8 @@ import androidx.preference.PreferenceManager;
|
|||||||
import com.android.internal.util.ArrayUtils;
|
import com.android.internal.util.ArrayUtils;
|
||||||
import com.android.settings.Settings.WifiSettingsActivity;
|
import com.android.settings.Settings.WifiSettingsActivity;
|
||||||
import com.android.settings.applications.manageapplications.ManageApplications;
|
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.OnActivityResultListener;
|
||||||
import com.android.settings.core.SettingsBaseActivity;
|
import com.android.settings.core.SettingsBaseActivity;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
import com.android.settings.core.SubSettingLauncher;
|
||||||
@@ -630,6 +632,12 @@ public class SettingsActivity extends SettingsBaseActivity
|
|||||||
showDev, isAdmin)
|
showDev, isAdmin)
|
||||||
|| somethingChanged;
|
|| 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,
|
somethingChanged = setTileEnabled(changedList, new ComponentName(packageName,
|
||||||
Settings.WifiDisplaySettingsActivity.class.getName()),
|
Settings.WifiDisplaySettingsActivity.class.getName()),
|
||||||
WifiDisplaySettings.isAvailable(this), isAdmin)
|
WifiDisplaySettings.isAvailable(this), isAdmin)
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ public class BackupSettingsHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Checks if backup service is enabled for this user. */
|
/** Checks if backup service is enabled for this user. */
|
||||||
private boolean isBackupServiceActive() {
|
public boolean isBackupServiceActive() {
|
||||||
boolean backupOkay;
|
boolean backupOkay;
|
||||||
try {
|
try {
|
||||||
backupOkay = mBackupManager.isBackupServiceActive(UserHandle.myUserId());
|
backupOkay = mBackupManager.isBackupServiceActive(UserHandle.myUserId());
|
||||||
|
|||||||
@@ -16,12 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.deviceinfo;
|
package com.android.settings.deviceinfo;
|
||||||
|
|
||||||
import static android.content.Context.CLIPBOARD_SERVICE;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.ClipData;
|
|
||||||
import android.content.ClipboardManager;
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -79,11 +75,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CharSequence getSummary() {
|
public CharSequence getSummary() {
|
||||||
try {
|
return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY);
|
||||||
return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return mContext.getText(R.string.device_info_default);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -99,29 +91,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return AVAILABLE;
|
return AVAILABLE_UNSEARCHABLE;
|
||||||
}
|
|
||||||
|
|
||||||
@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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -16,10 +16,16 @@
|
|||||||
|
|
||||||
package com.android.settings.deviceinfo.firmwareversion;
|
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.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.BidiFormatter;
|
import android.text.BidiFormatter;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
public class SimpleBuildNumberPreferenceController extends BasePreferenceController {
|
public class SimpleBuildNumberPreferenceController extends BasePreferenceController {
|
||||||
@@ -38,4 +44,26 @@ public class SimpleBuildNumberPreferenceController extends BasePreferenceControl
|
|||||||
public CharSequence getSummary() {
|
public CharSequence getSummary() {
|
||||||
return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY);
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 */);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -74,8 +74,27 @@ public class MobileDataSlice implements CustomSliceable {
|
|||||||
final IconCompat icon = IconCompat.createWithResource(mContext,
|
final IconCompat icon = IconCompat.createWithResource(mContext,
|
||||||
R.drawable.ic_network_cell);
|
R.drawable.ic_network_cell);
|
||||||
final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
|
final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
|
||||||
final CharSequence summary = getSummary();
|
|
||||||
@ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
|
@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 toggleAction = getBroadcastIntent(mContext);
|
||||||
final PendingIntent primaryAction = getPrimaryAction();
|
final PendingIntent primaryAction = getPrimaryAction();
|
||||||
final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon,
|
final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon,
|
||||||
@@ -101,11 +120,6 @@ public class MobileDataSlice implements CustomSliceable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNotifyChange(Intent intent) {
|
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,
|
final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
|
||||||
isMobileDataEnabled());
|
isMobileDataEnabled());
|
||||||
|
|
||||||
|
|||||||
@@ -18,25 +18,6 @@ package com.android.settings.slices;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
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.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
@@ -47,17 +28,12 @@ import java.util.WeakHashMap;
|
|||||||
*/
|
*/
|
||||||
public class CustomSliceManager {
|
public class CustomSliceManager {
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
final Map<Uri, Class<? extends CustomSliceable>> mUriMap;
|
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Map<Uri, CustomSliceable> mSliceableCache;
|
private final Map<Uri, CustomSliceable> mSliceableCache;
|
||||||
|
|
||||||
public CustomSliceManager(Context context) {
|
public CustomSliceManager(Context context) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mUriMap = new ArrayMap<>();
|
|
||||||
mSliceableCache = new WeakHashMap<>();
|
mSliceableCache = new WeakHashMap<>();
|
||||||
addSlices();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,12 +43,12 @@ public class CustomSliceManager {
|
|||||||
* the only thing that should be needed to create the object.
|
* the only thing that should be needed to create the object.
|
||||||
*/
|
*/
|
||||||
public CustomSliceable getSliceableFromUri(Uri uri) {
|
public CustomSliceable getSliceableFromUri(Uri uri) {
|
||||||
final Uri newUri = removeParameterFromUri(uri);
|
final Uri newUri = CustomSliceRegistry.removeParameterFromUri(uri);
|
||||||
if (mSliceableCache.containsKey(newUri)) {
|
if (mSliceableCache.containsKey(newUri)) {
|
||||||
return mSliceableCache.get(newUri);
|
return mSliceableCache.get(newUri);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Class clazz = mUriMap.get(newUri);
|
final Class clazz = CustomSliceRegistry.getSliceClassByUri(newUri);
|
||||||
if (clazz == null) {
|
if (clazz == null) {
|
||||||
throw new IllegalArgumentException("No Slice found for uri: " + uri);
|
throw new IllegalArgumentException("No Slice found for uri: " + uri);
|
||||||
}
|
}
|
||||||
@@ -82,9 +58,6 @@ public class CustomSliceManager {
|
|||||||
return sliceable;
|
return sliceable;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Uri removeParameterFromUri(Uri uri) {
|
|
||||||
return uri != null ? uri.buildUpon().clearQuery().build() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a {@link CustomSliceable} associated to the Action.
|
* Return a {@link CustomSliceable} associated to the Action.
|
||||||
@@ -95,39 +68,4 @@ public class CustomSliceManager {
|
|||||||
public CustomSliceable getSliceableFromIntentAction(String action) {
|
public CustomSliceable getSliceableFromIntentAction(String action) {
|
||||||
return getSliceableFromUri(Uri.parse(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,11 +24,30 @@ import static com.android.settings.notification.ZenModePreferenceController.ZEN_
|
|||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.SettingsSlicesContract;
|
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.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.calling.WifiCallingSliceHelper;
|
||||||
|
import com.android.settings.wifi.slice.ContextualWifiSlice;
|
||||||
|
import com.android.settings.wifi.slice.WifiSlice;
|
||||||
import com.android.settingslib.media.MediaOutputSliceConstants;
|
import com.android.settingslib.media.MediaOutputSliceConstants;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A registry of custom slice Uris.
|
* A registry of custom slice Uris.
|
||||||
*/
|
*/
|
||||||
@@ -53,15 +72,7 @@ public class CustomSliceRegistry {
|
|||||||
.appendEncodedPath(SettingsSlicesContract.PATH_SETTING_INTENT)
|
.appendEncodedPath(SettingsSlicesContract.PATH_SETTING_INTENT)
|
||||||
.appendPath(BatteryTipPreferenceController.PREF_NAME)
|
.appendPath(BatteryTipPreferenceController.PREF_NAME)
|
||||||
.build();
|
.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.
|
* Backing Uri for the Bluetooth Slice.
|
||||||
*/
|
*/
|
||||||
@@ -287,4 +298,51 @@ public class CustomSliceRegistry {
|
|||||||
.appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
|
.appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
|
||||||
.appendPath(MediaOutputSliceConstants.KEY_MEDIA_OUTPUT)
|
.appendPath(MediaOutputSliceConstants.KEY_MEDIA_OUTPUT)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
static final Map<Uri, Class<? extends CustomSliceable>> 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<? extends CustomSliceable> 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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ public class SettingsSliceProvider extends SliceProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSlicePinned(Uri sliceUri) {
|
public void onSlicePinned(Uri sliceUri) {
|
||||||
if (mCustomSliceManager.isValidUri(sliceUri)) {
|
if (CustomSliceRegistry.isValidUri(sliceUri)) {
|
||||||
final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(sliceUri);
|
final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(sliceUri);
|
||||||
final IntentFilter filter = sliceable.getIntentFilter();
|
final IntentFilter filter = sliceable.getIntentFilter();
|
||||||
if (filter != null) {
|
if (filter != null) {
|
||||||
@@ -194,7 +194,7 @@ public class SettingsSliceProvider extends SliceProvider {
|
|||||||
|
|
||||||
// Before adding a slice to {@link CustomSliceManager}, please get approval
|
// Before adding a slice to {@link CustomSliceManager}, please get approval
|
||||||
// from the Settings team.
|
// from the Settings team.
|
||||||
if (mCustomSliceManager.isValidUri(sliceUri)) {
|
if (CustomSliceRegistry.isValidUri(sliceUri)) {
|
||||||
final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(
|
final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(
|
||||||
sliceUri);
|
sliceUri);
|
||||||
return sliceable.getSlice();
|
return sliceable.getSlice();
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
final CustomSliceManager mCustomSliceManager = FeatureFactory.getFactory(
|
final CustomSliceManager mCustomSliceManager = FeatureFactory.getFactory(
|
||||||
context).getSlicesFeatureProvider().getCustomSliceManager(context);
|
context).getSlicesFeatureProvider().getCustomSliceManager(context);
|
||||||
if (mCustomSliceManager.isValidAction(action)) {
|
if (CustomSliceRegistry.isValidAction(action)) {
|
||||||
final CustomSliceable sliceable =
|
final CustomSliceable sliceable =
|
||||||
mCustomSliceManager.getSliceableFromIntentAction(action);
|
mCustomSliceManager.getSliceableFromIntentAction(action);
|
||||||
sliceable.onNotifyChange(intent);
|
sliceable.onNotifyChange(intent);
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class SliceDeepLinkSpringBoard extends Activity {
|
|||||||
// TODO (b/80263568) Avoid duplicating this list of Slice Uris.
|
// TODO (b/80263568) Avoid duplicating this list of Slice Uris.
|
||||||
final CustomSliceManager customSliceManager = FeatureFactory.getFactory(this)
|
final CustomSliceManager customSliceManager = FeatureFactory.getFactory(this)
|
||||||
.getSlicesFeatureProvider().getCustomSliceManager(this);
|
.getSlicesFeatureProvider().getCustomSliceManager(this);
|
||||||
if (customSliceManager.isValidUri(sliceUri)) {
|
if (CustomSliceRegistry.isValidUri(sliceUri)) {
|
||||||
final CustomSliceable sliceable =
|
final CustomSliceable sliceable =
|
||||||
customSliceManager.getSliceableFromUri(sliceUri);
|
customSliceManager.getSliceableFromUri(sliceUri);
|
||||||
launchIntent = sliceable.getIntent();
|
launchIntent = sliceable.getIntent();
|
||||||
|
|||||||
@@ -18,9 +18,10 @@ package com.android.settings.widget;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.core.content.res.TypedArrayUtils;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceViewHolder;
|
||||||
|
|
||||||
import com.android.settings.R;
|
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.
|
* A preference with single target and a gear icon on the side.
|
||||||
*/
|
*/
|
||||||
public class SingleTargetGearPreference extends Preference {
|
public class SingleTargetGearPreference extends Preference {
|
||||||
|
public SingleTargetGearPreference(Context context, AttributeSet attrs, int defStyleAttr,
|
||||||
public SingleTargetGearPreference(Context context, AttributeSet attrs,
|
int defStyleRes) {
|
||||||
int defStyleAttr, int defStyleRes) {
|
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
setWidgetLayoutResource(R.layout.preference_widget_gear_no_bg);
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SingleTargetGearPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
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) {
|
public SingleTargetGearPreference(Context context, AttributeSet attrs) {
|
||||||
this(context, attrs, TypedArrayUtils.getAttr(context, R.attr.preferenceStyle,
|
super(context, attrs);
|
||||||
android.R.attr.preferenceStyle));
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SingleTargetGearPreference(Context context) {
|
public SingleTargetGearPreference(Context context) {
|
||||||
this(context, null /* attrs */);
|
super(context);
|
||||||
|
init();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ import android.widget.Switch;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.preference.ListPreference;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.Preference.OnPreferenceClickListener;
|
import androidx.preference.Preference.OnPreferenceClickListener;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
@@ -141,20 +140,17 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Launch carrier emergency address managemnent activity
|
||||||
|
*/
|
||||||
private final OnPreferenceClickListener mUpdateAddressListener =
|
private final OnPreferenceClickListener mUpdateAddressListener =
|
||||||
new OnPreferenceClickListener() {
|
preference -> {
|
||||||
/*
|
Intent carrierAppIntent = getCarrierActivityIntent();
|
||||||
* Launch carrier emergency address managemnent activity
|
if (carrierAppIntent != null) {
|
||||||
*/
|
carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_UPDATE);
|
||||||
@Override
|
startActivity(carrierAppIntent);
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
Intent carrierAppIntent = getCarrierActivityIntent();
|
|
||||||
if (carrierAppIntent != null) {
|
|
||||||
carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_UPDATE);
|
|
||||||
startActivity(carrierAppIntent);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
private final ProvisioningManager.Callback mProvisioningCallback =
|
private final ProvisioningManager.Callback mProvisioningCallback =
|
||||||
@@ -174,8 +170,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
|||||||
public void onActivityCreated(Bundle savedInstanceState) {
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
super.onActivityCreated(savedInstanceState);
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
|
||||||
final SettingsActivity activity = (SettingsActivity) getActivity();
|
|
||||||
|
|
||||||
mEmptyView = getView().findViewById(android.R.id.empty);
|
mEmptyView = getView().findViewById(android.R.id.empty);
|
||||||
setEmptyView(mEmptyView);
|
setEmptyView(mEmptyView);
|
||||||
final Resources res = SubscriptionManager.getResourcesForSubId(getContext(), mSubId);
|
final Resources res = SubscriptionManager.getResourcesForSubId(getContext(), mSubId);
|
||||||
@@ -265,14 +259,13 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
|
|||||||
mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE))
|
mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE))
|
||||||
.createForSubscriptionId(mSubId);
|
.createForSubscriptionId(mSubId);
|
||||||
|
|
||||||
mButtonWfcMode = (ListWithEntrySummaryPreference) findPreference(BUTTON_WFC_MODE);
|
mButtonWfcMode = findPreference(BUTTON_WFC_MODE);
|
||||||
mButtonWfcMode.setOnPreferenceChangeListener(this);
|
mButtonWfcMode.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
mButtonWfcRoamingMode = (ListWithEntrySummaryPreference) findPreference(
|
mButtonWfcRoamingMode = findPreference(BUTTON_WFC_ROAMING_MODE);
|
||||||
BUTTON_WFC_ROAMING_MODE);
|
|
||||||
mButtonWfcRoamingMode.setOnPreferenceChangeListener(this);
|
mButtonWfcRoamingMode.setOnPreferenceChangeListener(this);
|
||||||
|
|
||||||
mUpdateAddress = (Preference) findPreference(PREFERENCE_EMERGENCY_ADDRESS);
|
mUpdateAddress = findPreference(PREFERENCE_EMERGENCY_ADDRESS);
|
||||||
mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener);
|
mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener);
|
||||||
|
|
||||||
mIntentFilter = new IntentFilter();
|
mIntentFilter = new IntentFilter();
|
||||||
|
|||||||
@@ -16,18 +16,14 @@
|
|||||||
|
|
||||||
package com.android.settings.deviceinfo;
|
package com.android.settings.deviceinfo;
|
||||||
|
|
||||||
import static android.content.Context.CLIPBOARD_SERVICE;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ClipboardManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
@@ -35,7 +31,6 @@ import android.provider.Settings;
|
|||||||
|
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||||
@@ -62,13 +57,8 @@ import org.robolectric.shadows.ShadowUserManager;
|
|||||||
public class BuildNumberPreferenceControllerTest {
|
public class BuildNumberPreferenceControllerTest {
|
||||||
|
|
||||||
private static final String KEY_BUILD_NUMBER = "build_number";
|
private static final String KEY_BUILD_NUMBER = "build_number";
|
||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
|
||||||
private Activity mActivity;
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
private InstrumentedPreferenceFragment mFragment;
|
||||||
@Mock(answer = RETURNS_DEEP_STUBS)
|
|
||||||
private PreferenceScreen mScreen;
|
|
||||||
|
|
||||||
private ShadowUserManager mShadowUserManager;
|
private ShadowUserManager mShadowUserManager;
|
||||||
|
|
||||||
@@ -200,14 +190,4 @@ public class BuildNumberPreferenceControllerTest {
|
|||||||
assertThat(activityResultHandled).isTrue();
|
assertThat(activityResultHandled).isTrue();
|
||||||
assertThat(DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(mContext)).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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -229,11 +229,6 @@ public class ContextualCardLoaderTest {
|
|||||||
.setSliceUri(Uri.parse(
|
.setSliceUri(Uri.parse(
|
||||||
"content://com.android.settings.test.slices/action/gesture_pick_up"))
|
"content://com.android.settings.test.slices/action/gesture_pick_up"))
|
||||||
.build());
|
.build());
|
||||||
cards.add(new ContextualCard.Builder()
|
|
||||||
.setName("test_battery")
|
|
||||||
.setCardType(ContextualCard.CardType.SLICE)
|
|
||||||
.setSliceUri(CustomSliceRegistry.BATTERY_INFO_SLICE_URI)
|
|
||||||
.build());
|
|
||||||
return cards;
|
return cards;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,11 +257,6 @@ public class ContextualCardLoaderTest {
|
|||||||
.setSliceUri(Uri.parse(
|
.setSliceUri(Uri.parse(
|
||||||
"content://com.android.settings.test.slices/action/gesture_pick_up"))
|
"content://com.android.settings.test.slices/action/gesture_pick_up"))
|
||||||
.build());
|
.build());
|
||||||
cards.add(new ContextualCard.Builder()
|
|
||||||
.setName("test_battery")
|
|
||||||
.setCardType(ContextualCard.CardType.SLICE)
|
|
||||||
.setSliceUri(CustomSliceRegistry.BATTERY_INFO_SLICE_URI)
|
|
||||||
.build());
|
|
||||||
return cards;
|
return cards;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -460,7 +460,7 @@ public class ContextualCardManagerTest {
|
|||||||
cards.add(new ContextualCard.Builder()
|
cards.add(new ContextualCard.Builder()
|
||||||
.setName("test_battery")
|
.setName("test_battery")
|
||||||
.setCardType(ContextualCard.CardType.SLICE)
|
.setCardType(ContextualCard.CardType.SLICE)
|
||||||
.setSliceUri(CustomSliceRegistry.BATTERY_INFO_SLICE_URI)
|
.setSliceUri(CustomSliceRegistry.BATTERY_FIX_SLICE_URI)
|
||||||
.setViewType(VIEW_TYPE_FULL_WIDTH)
|
.setViewType(VIEW_TYPE_FULL_WIDTH)
|
||||||
.build());
|
.build());
|
||||||
return cards;
|
return cards;
|
||||||
|
|||||||
@@ -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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.spy;
|
|||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -162,4 +163,27 @@ public class MobileDataSliceTest {
|
|||||||
|
|
||||||
assertThat(isMobileDataEnabled).isEqualTo(seed);
|
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<SliceAction> 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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ public class SpecialCaseSliceManagerTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mCustomSliceManager = spy(new CustomSliceManager(mContext));
|
mCustomSliceManager = spy(new CustomSliceManager(mContext));
|
||||||
mCustomSliceManager.mUriMap.clear();
|
CustomSliceRegistry.sUriToSlice.clear();
|
||||||
mCustomSliceManager.mUriMap.put(FakeSliceable.URI, FakeSliceable.class);
|
CustomSliceRegistry.sUriToSlice.put(FakeSliceable.URI, FakeSliceable.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -69,14 +69,14 @@ public class SpecialCaseSliceManagerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isValidUri_validUri_returnsTrue() {
|
public void isValidUri_validUri_returnsTrue() {
|
||||||
final boolean isValidUri = mCustomSliceManager.isValidUri(FakeSliceable.URI);
|
final boolean isValidUri = CustomSliceRegistry.isValidUri(FakeSliceable.URI);
|
||||||
|
|
||||||
assertThat(isValidUri).isTrue();
|
assertThat(isValidUri).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isValidUri_invalidUri_returnsFalse() {
|
public void isValidUri_invalidUri_returnsFalse() {
|
||||||
final boolean isValidUri = mCustomSliceManager.isValidUri(null);
|
final boolean isValidUri = CustomSliceRegistry.isValidUri(null);
|
||||||
|
|
||||||
assertThat(isValidUri).isFalse();
|
assertThat(isValidUri).isFalse();
|
||||||
}
|
}
|
||||||
@@ -84,14 +84,14 @@ public class SpecialCaseSliceManagerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void isValidAction_validActions_returnsTrue() {
|
public void isValidAction_validActions_returnsTrue() {
|
||||||
final boolean isValidAction =
|
final boolean isValidAction =
|
||||||
mCustomSliceManager.isValidAction(FakeSliceable.URI.toString());
|
CustomSliceRegistry.isValidAction(FakeSliceable.URI.toString());
|
||||||
|
|
||||||
assertThat(isValidAction).isTrue();
|
assertThat(isValidAction).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isValidAction_invalidAction_returnsFalse() {
|
public void isValidAction_invalidAction_returnsFalse() {
|
||||||
final boolean isValidAction = mCustomSliceManager.isValidAction("action");
|
final boolean isValidAction = CustomSliceRegistry.isValidAction("action");
|
||||||
|
|
||||||
assertThat(isValidAction).isFalse();
|
assertThat(isValidAction).isFalse();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ import org.junit.runner.RunWith;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class ListWithEntrySummaryPreferenceTest {
|
public class ListWithEntrySummaryPreferenceTest {
|
||||||
|
|
||||||
@@ -54,6 +52,7 @@ public class ListWithEntrySummaryPreferenceTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
|
mContext.setTheme(R.style.Theme_Settings_Home);
|
||||||
mPreference = new ListWithEntrySummaryPreference(mContext, null);
|
mPreference = new ListWithEntrySummaryPreference(mContext, null);
|
||||||
mPreference.setEntries(mDefaultEntries);
|
mPreference.setEntries(mDefaultEntries);
|
||||||
mPreference.setEntryValues(mDefaultEntryValues);
|
mPreference.setEntryValues(mDefaultEntryValues);
|
||||||
|
|||||||
@@ -41,11 +41,9 @@ import android.telephony.ims.ProvisioningManager;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.preference.ListPreference;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.ims.ImsConfig;
|
import com.android.ims.ImsConfig;
|
||||||
import com.android.ims.ImsException;
|
|
||||||
import com.android.ims.ImsManager;
|
import com.android.ims.ImsManager;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
@@ -80,11 +78,11 @@ public class WifiCallingSettingsForSubTest {
|
|||||||
@Mock private ToggleSwitch mToggleSwitch;
|
@Mock private ToggleSwitch mToggleSwitch;
|
||||||
@Mock private View mView;
|
@Mock private View mView;
|
||||||
@Mock private ImsConfig mImsConfig;
|
@Mock private ImsConfig mImsConfig;
|
||||||
@Mock private ListPreference mButtonWfcMode;
|
@Mock private ListWithEntrySummaryPreference mButtonWfcMode;
|
||||||
@Mock private ListPreference mButtonWfcRoamingMode;
|
@Mock private ListWithEntrySummaryPreference mButtonWfcRoamingMode;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws NoSuchFieldException, ImsException {
|
public void setUp() throws Exception {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
@@ -100,7 +98,7 @@ public class WifiCallingSettingsForSubTest {
|
|||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
when(mFragment.getArguments()).thenReturn(bundle);
|
when(mFragment.getArguments()).thenReturn(bundle);
|
||||||
doNothing().when(mFragment).addPreferencesFromResource(anyInt());
|
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(mButtonWfcMode).when(mFragment).findPreference(BUTTON_WFC_MODE);
|
||||||
doReturn(mButtonWfcRoamingMode).when(mFragment).findPreference(BUTTON_WFC_ROAMING_MODE);
|
doReturn(mButtonWfcRoamingMode).when(mFragment).findPreference(BUTTON_WFC_ROAMING_MODE);
|
||||||
doNothing().when(mFragment).finish();
|
doNothing().when(mFragment).finish();
|
||||||
@@ -141,7 +139,7 @@ public class WifiCallingSettingsForSubTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onResume_provisioningAllowed_shouldNotFinish() throws ImsException {
|
public void onResume_provisioningAllowed_shouldNotFinish() {
|
||||||
// Call onResume while provisioning is allowed.
|
// Call onResume while provisioning is allowed.
|
||||||
mFragment.onResume();
|
mFragment.onResume();
|
||||||
|
|
||||||
@@ -160,7 +158,7 @@ public class WifiCallingSettingsForSubTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onResumeOnPause_provisioningCallbackRegistration() throws ImsException {
|
public void onResumeOnPause_provisioningCallbackRegistration() throws Exception {
|
||||||
// Verify that provisioning callback is registered after call to onResume().
|
// Verify that provisioning callback is registered after call to onResume().
|
||||||
mFragment.onResume();
|
mFragment.onResume();
|
||||||
verify(mImsConfig).addConfigCallback(any(ProvisioningManager.Callback.class));
|
verify(mImsConfig).addConfigCallback(any(ProvisioningManager.Callback.class));
|
||||||
|
|||||||
Reference in New Issue
Block a user