Merge "[Panlingual] Unit test for onLocaleSelected" into tm-dev
diff --git a/res/layout/icon_discrete_slider.xml b/res/layout/icon_discrete_slider.xml
index 47be5ef..1319987 100644
--- a/res/layout/icon_discrete_slider.xml
+++ b/res/layout/icon_discrete_slider.xml
@@ -20,14 +20,13 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
- android:background="?android:colorBackground"
android:gravity="center_vertical">
<FrameLayout
android:id="@+id/icon_start_frame"
android:layout_width="48dp"
android:layout_height="48dp"
- android:background="?android:attr/selectableItemBackgroundBorderless"
+ android:clipChildren="false"
android:focusable="true"
android:visibility="gone">
@@ -36,6 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
+ android:background="?android:attr/selectableItemBackgroundBorderless"
android:adjustViewBounds="true"
android:focusable="false"
android:tint="?android:attr/textColorPrimary"
@@ -56,7 +56,7 @@
android:id="@+id/icon_end_frame"
android:layout_width="48dp"
android:layout_height="48dp"
- android:background="?android:attr/selectableItemBackgroundBorderless"
+ android:clipChildren="false"
android:focusable="true"
android:visibility="gone">
@@ -65,6 +65,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
+ android:background="?android:attr/selectableItemBackgroundBorderless"
android:adjustViewBounds="true"
android:focusable="false"
android:tint="?android:attr/textColorPrimary"
diff --git a/res/layout/le_audio_bt_entity_header.xml b/res/layout/le_audio_bt_entity_header.xml
index 6e2a1e8..a05d707 100644
--- a/res/layout/le_audio_bt_entity_header.xml
+++ b/res/layout/le_audio_bt_entity_header.xml
@@ -61,75 +61,91 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_vertical"
- android:orientation="horizontal">
+ android:orientation="vertical">
<LinearLayout
- android:layout_width="wrap_content"
+ android:id="@+id/bt_battery_case"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/le_bluetooth_battery_start_margin"
- android:orientation="vertical">
+ android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ android:focusable="true">
<TextView
- android:id="@+id/bt_battery_case_title"
style="@style/TextAppearance.EntityHeaderTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:layout_weight="1"
android:gravity="start|center_vertical"
android:ellipsize="end"
android:textDirection="locale"
android:text="@string/bluetooth_middle_name"
- android:textSize="@dimen/advanced_bluetooth_header_title_text_size"
- android:visibility="gone"/>
+ android:textSize="@dimen/advanced_bluetooth_header_title_text_size"/>
<TextView
- android:id="@+id/bt_battery_left_title"
+ android:id="@+id/bt_battery_case_summary"
+ style="@style/TextAppearance.EntityHeaderSummary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
+ android:minWidth="@dimen/le_bluetooth_summary_min_width"
+ android:padding="@dimen/le_bluetooth_summary_padding"
+ android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/bt_battery_left"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/le_bluetooth_battery_start_margin"
+ android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ android:focusable="true">
+ <TextView
style="@style/TextAppearance.EntityHeaderTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:layout_weight="1"
android:gravity="start|center_vertical"
android:ellipsize="end"
android:textDirection="locale"
android:text="@string/bluetooth_left_name"
android:textSize="@dimen/advanced_bluetooth_header_title_text_size"/>
<TextView
- android:id="@+id/bt_battery_right_title"
+ android:id="@+id/bt_battery_left_summary"
+ style="@style/TextAppearance.EntityHeaderSummary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
+ android:minWidth="@dimen/le_bluetooth_summary_min_width"
+ android:padding="@dimen/le_bluetooth_summary_padding"
+ android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/bt_battery_right"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/le_bluetooth_battery_start_margin"
+ android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ android:focusable="true">
+ <TextView
style="@style/TextAppearance.EntityHeaderTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:layout_weight="1"
android:gravity="start|center_vertical"
android:ellipsize="end"
android:textDirection="locale"
android:text="@string/bluetooth_right_name"
android:textSize="@dimen/advanced_bluetooth_header_title_text_size"/>
- </LinearLayout>
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
- android:orientation="vertical">
- <TextView
- android:id="@+id/bt_battery_case_summary"
- style="@style/TextAppearance.EntityHeaderSummary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
- android:padding="@dimen/le_bluetooth_summary_padding"
- android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"
- android:visibility="gone"/>
- <TextView
- android:id="@+id/bt_battery_left_summary"
- style="@style/TextAppearance.EntityHeaderSummary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
- android:padding="@dimen/le_bluetooth_summary_padding"
- android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
<TextView
android:id="@+id/bt_battery_right_summary"
style="@style/TextAppearance.EntityHeaderSummary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/le_bluetooth_battery_top_margin"
+ android:layout_marginStart="@dimen/le_bluetooth_summary_start_margin"
+ android:minWidth="@dimen/le_bluetooth_summary_min_width"
android:padding="@dimen/le_bluetooth_summary_padding"
android:drawablePadding="@dimen/le_bluetooth_summary_drawable_padding"/>
</LinearLayout>
diff --git a/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
index 081efb3..74c8226 100644
--- a/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
+++ b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
@@ -38,6 +38,8 @@
android:background="@drawable/sim_confirm_dialog_rounded_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/sims_select_margin_top"
+ android:layout_marginBottom="@dimen/sims_select_margin_bottom"
android:visibility="gone"/>
<LinearLayout
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 867fecb..0632f72 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1646,4 +1646,8 @@
<item>1875000</item> <!-- 15Mbps == 1875000/s -->
</string-array>
+ <!-- An allowlist which packages won't show summary in battery usage screen.
+ [CHAR LIMIT=NONE] -->
+ <string-array name="allowlist_hide_summary_in_battery_usage" translatable="false">
+ </string-array>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f11cee5..1582d21 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -415,6 +415,7 @@
<dimen name="le_bluetooth_summary_drawable_padding">6dp</dimen>
<dimen name="le_bluetooth_summary_start_margin">20dp</dimen>
<dimen name="le_bluetooth_summary_padding">1.5dp</dimen>
+ <dimen name="le_bluetooth_summary_min_width">64dp</dimen>
<!-- Header layout of bluetooth find broadcast page -->
<dimen name="bluetooth_find_broadcast_button_one_size">220dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2d4a544..63db309 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3347,8 +3347,6 @@
<string name="security_patch">Android security update</string>
<!-- About phone screen, status item label [CHAR LIMIT=40] -->
<string name="model_info">Model</string>
- <!-- About phone screen, dialog title for showing hardware information such as model, serial number, etc.[CHAR LIMIT=60] -->
- <string name="hardware_info">Model & hardware</string>
<!-- Label for device's hardware revision value [CHAR LIMIT=40] -->
<string name="hardware_revision">Hardware version</string>
<!-- About phone screen, fcc equipment id label [CHAR LIMIT=40] -->
diff --git a/res/xml/hardware_info.xml b/res/xml/hardware_info.xml
index 10de299..641f707 100644
--- a/res/xml/hardware_info.xml
+++ b/res/xml/hardware_info.xml
@@ -18,7 +18,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/hardware_info"
+ android:title="@string/model_info"
settings:keywords="@string/keywords_model_and_hardware">
<!-- Model -->
diff --git a/src/com/android/settings/MainClear.java b/src/com/android/settings/MainClear.java
index 62462b3..2b0f010 100644
--- a/src/com/android/settings/MainClear.java
+++ b/src/com/android/settings/MainClear.java
@@ -494,6 +494,8 @@
if (profilesSize > 1) {
View titleView = Utils.inflateCategoryHeader(inflater, contents);
+ titleView.setPadding(0 /* left */, titleView.getPaddingTop(),
+ 0 /* right */, titleView.getPaddingBottom());
final TextView titleText = (TextView) titleView.findViewById(android.R.id.title);
DevicePolicyManager devicePolicyManager =
diff --git a/src/com/android/settings/PointerSpeedPreference.java b/src/com/android/settings/PointerSpeedPreference.java
index 6a93477..fa56635 100644
--- a/src/com/android/settings/PointerSpeedPreference.java
+++ b/src/com/android/settings/PointerSpeedPreference.java
@@ -18,6 +18,8 @@
import static android.view.HapticFeedbackConstants.CLOCK_TICK;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
+
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
@@ -30,9 +32,12 @@
import android.view.View;
import android.widget.SeekBar;
+import com.android.internal.jank.InteractionJankMonitor;
+
public class PointerSpeedPreference extends SeekBarDialogPreference implements
SeekBar.OnSeekBarChangeListener {
private final InputManager mIm;
+ private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
private SeekBar mSeekBar;
private int mOldSpeed;
@@ -88,11 +93,15 @@
public void onStartTrackingTouch(SeekBar seekBar) {
mTouchInProgress = true;
+ mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+ .withView(CUJ_SETTINGS_SLIDER, seekBar)
+ .setTag(getKey()));
}
public void onStopTrackingTouch(SeekBar seekBar) {
mTouchInProgress = false;
mIm.tryPointerSpeed(seekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
+ mJankMonitor.end(CUJ_SETTINGS_SLIDER);
}
private void onSpeedChanged() {
diff --git a/src/com/android/settings/accessibility/MagnificationModePreferenceController.java b/src/com/android/settings/accessibility/MagnificationModePreferenceController.java
index 91eb2e9..df49a22 100644
--- a/src/com/android/settings/accessibility/MagnificationModePreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationModePreferenceController.java
@@ -268,6 +268,7 @@
final TextView messageView = contentView.findViewById(R.id.message);
// TODO(b/225682559): Need to remove performClick() after refactoring accessibility dialog.
final View.OnClickListener linkListener = view -> {
+ updateCapabilitiesAndSummary(mModeCache);
mLinkPreference.performClick();
dialog.dismiss();
};
diff --git a/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
index 7b74f77..188770b 100644
--- a/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/LeAudioBluetoothDetailsHeaderController.java
@@ -198,38 +198,25 @@
return drawable;
}
- private int getBatteryTitleResource(int deviceId) {
- if (deviceId == LEFT_DEVICE_ID) {
- return R.id.bt_battery_left_title;
- }
- if (deviceId == RIGHT_DEVICE_ID) {
- return R.id.bt_battery_right_title;
- }
- Log.d(TAG, "No resource id. The deviceId is " + deviceId);
- return INVALID_RESOURCE_ID;
- }
-
- private int getBatterySummaryResource(int deviceId) {
- if (deviceId == LEFT_DEVICE_ID) {
+ private int getBatterySummaryResource(int containerId) {
+ if (containerId == R.id.bt_battery_case) {
+ return R.id.bt_battery_case_summary;
+ } else if (containerId == R.id.bt_battery_left) {
return R.id.bt_battery_left_summary;
- }
- if (deviceId == RIGHT_DEVICE_ID) {
+ } else if (containerId == R.id.bt_battery_right) {
return R.id.bt_battery_right_summary;
}
- Log.d(TAG, "No resource id. The deviceId is " + deviceId);
+ Log.d(TAG, "No summary resource id. The containerId is " + containerId);
return INVALID_RESOURCE_ID;
}
private void hideAllOfBatteryLayouts() {
// hide the case
- updateBatteryLayout(R.id.bt_battery_case_title, R.id.bt_battery_case_summary,
- BluetoothUtils.META_INT_ERROR);
+ updateBatteryLayout(R.id.bt_battery_case, BluetoothUtils.META_INT_ERROR);
// hide the left
- updateBatteryLayout(R.id.bt_battery_left_title, R.id.bt_battery_left_summary,
- BluetoothUtils.META_INT_ERROR);
+ updateBatteryLayout(R.id.bt_battery_left, BluetoothUtils.META_INT_ERROR);
// hide the right
- updateBatteryLayout(R.id.bt_battery_right_title, R.id.bt_battery_right_summary,
- BluetoothUtils.META_INT_ERROR);
+ updateBatteryLayout(R.id.bt_battery_right, BluetoothUtils.META_INT_ERROR);
}
private List<CachedBluetoothDevice> getAllOfLeAudioDevices() {
@@ -285,36 +272,36 @@
summary.setText(mCachedDevice.getConnectionSummary());
}
} else if (isLeft) {
- updateBatteryLayout(getBatteryTitleResource(LEFT_DEVICE_ID),
- getBatterySummaryResource(LEFT_DEVICE_ID), cachedDevice.getBatteryLevel());
+ updateBatteryLayout(R.id.bt_battery_left, cachedDevice.getBatteryLevel());
} else if (isRight) {
- updateBatteryLayout(getBatteryTitleResource(RIGHT_DEVICE_ID),
- getBatterySummaryResource(RIGHT_DEVICE_ID), cachedDevice.getBatteryLevel());
+ updateBatteryLayout(R.id.bt_battery_right, cachedDevice.getBatteryLevel());
} else {
Log.d(TAG, "The device id is other Audio Location. Do nothing.");
}
}
}
- private void updateBatteryLayout(int titleResId, int summaryResId, int batteryLevel) {
- final TextView batteryTitleView = mLayoutPreference.findViewById(titleResId);
- final TextView batterySummaryView = mLayoutPreference.findViewById(summaryResId);
- if (batteryTitleView == null || batterySummaryView == null) {
- Log.e(TAG, "updateBatteryLayout: No TextView");
+ private void updateBatteryLayout(int resId, int batteryLevel) {
+ final View batteryView = mLayoutPreference.findViewById(resId);
+ if (batteryView == null) {
+ Log.e(TAG, "updateBatteryLayout: No View");
return;
}
if (batteryLevel != BluetoothUtils.META_INT_ERROR) {
- batteryTitleView.setVisibility(View.VISIBLE);
- batterySummaryView.setVisibility(View.VISIBLE);
- batterySummaryView.setText(
- com.android.settings.Utils.formatPercentage(batteryLevel));
+ batteryView.setVisibility(View.VISIBLE);
+ final TextView batterySummaryView =
+ batteryView.requireViewById(getBatterySummaryResource(resId));
+ final String batteryLevelPercentageString =
+ com.android.settings.Utils.formatPercentage(batteryLevel);
+ batterySummaryView.setText(batteryLevelPercentageString);
+ batterySummaryView.setContentDescription(mContext.getString(
+ R.string.bluetooth_battery_level, batteryLevelPercentageString));
batterySummaryView.setCompoundDrawablesRelativeWithIntrinsicBounds(
createBtBatteryIcon(mContext, batteryLevel), /* top */ null,
/* end */ null, /* bottom */ null);
} else {
Log.d(TAG, "updateBatteryLayout: Hide it if it doesn't have battery information.");
- batteryTitleView.setVisibility(View.GONE);
- batterySummaryView.setVisibility(View.GONE);
+ batteryView.setVisibility(View.GONE);
}
}
diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
index dc73ee0..54d0392 100644
--- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
+++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
@@ -55,7 +55,7 @@
@VisibleForTesting
UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
- (connected, functions, powerRole, dataRole) -> {
+ (connected, functions, powerRole, dataRole, isUsbConfigured) -> {
if (connected) {
mUsbPreference.setSummary(getSummary(dataRole == DATA_ROLE_DEVICE
? functions : UsbManager.FUNCTION_NONE, powerRole));
diff --git a/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java b/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java
index c73c957..1a1f8ba 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiver.java
@@ -61,6 +61,8 @@
if (DEBUG) {
Log.d(TAG, "onReceive() action : " + intent.getAction());
}
+ boolean isUsbConfigured = intent.getExtras() != null
+ ? intent.getExtras().getBoolean(UsbManager.USB_CONFIGURED) : false;
if (UsbManager.ACTION_USB_STATE.equals(intent.getAction())) {
mConnected = intent.getExtras().getBoolean(UsbManager.USB_CONNECTED)
|| intent.getExtras().getBoolean(UsbManager.USB_HOST_CONNECTED);
@@ -98,7 +100,7 @@
}
if (mUsbConnectionListener != null) {
mUsbConnectionListener.onUsbConnectionChanged(mConnected, mFunctions, mPowerRole,
- mDataRole);
+ mDataRole, isUsbConfigured);
}
}
@@ -142,6 +144,7 @@
* Interface definition for a callback to be invoked when usb connection is changed.
*/
interface UsbConnectionListener {
- void onUsbConnectionChanged(boolean connected, long functions, int powerRole, int dataRole);
+ void onUsbConnectionChanged(boolean connected, long functions, int powerRole, int dataRole,
+ boolean isUsbConfigured);
}
}
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
index d58e97b..b5a9e5a 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
@@ -69,22 +69,23 @@
@VisibleForTesting
UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
- (connected, functions, powerRole, dataRole) -> {
+ (connected, functions, powerRole, dataRole, isUsbConfigured) -> {
final long defaultFunctions = mUsbBackend.getDefaultUsbFunctions();
Log.d(TAG, "UsbConnectionListener() connected : " + connected + ", functions : "
+ functions + ", defaultFunctions : " + defaultFunctions
- + ", mIsStartTethering : " + mIsStartTethering);
- if (connected && !mIsConnected && (defaultFunctions == UsbManager.FUNCTION_RNDIS
+ + ", mIsStartTethering : " + mIsStartTethering
+ + ", isUsbConfigured : " + isUsbConfigured);
+ if (connected && !mIsConnected && ((defaultFunctions == UsbManager.FUNCTION_RNDIS
|| defaultFunctions == UsbManager.FUNCTION_NCM)
+ && defaultFunctions == functions)
&& !mIsStartTethering) {
mCurrentFunctions = defaultFunctions;
startTethering();
}
- if (mIsStartTethering && connected) {
+ if ((mIsStartTethering || isUsbConfigured) && connected) {
mCurrentFunctions = functions;
refresh(functions);
- mUsbBackend.setDefaultUsbFunctions(functions);
mIsStartTethering = false;
}
mIsConnected = connected;
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
index 8850acd..0c94d19 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
@@ -50,7 +50,7 @@
UsbConnectionBroadcastReceiver mUsbReceiver;
private UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
- (connected, functions, powerRole, dataRole) -> {
+ (connected, functions, powerRole, dataRole, isUsbFigured) -> {
for (UsbDetailsController controller : mControllers) {
controller.refresh(connected, functions, powerRole, dataRole);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index db4cc53..1ecde44 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -59,6 +59,7 @@
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
+import java.util.Set;
/**
* Controller that update the battery header view
@@ -72,7 +73,6 @@
private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10;
private static final String MEDIASERVER_PACKAGE_NAME = "mediaserver";
- private final String mPreferenceKey;
@VisibleForTesting
PreferenceGroup mAppListGroup;
private BatteryUsageStats mBatteryUsageStats;
@@ -83,6 +83,9 @@
private final PackageManager mPackageManager;
private final SettingsActivity mActivity;
private final InstrumentedPreferenceFragment mFragment;
+ private final Set<CharSequence> mNotAllowShowSummaryPackages;
+ private final String mPreferenceKey;
+
private Context mPrefContext;
/**
@@ -159,6 +162,10 @@
mPackageManager = context.getPackageManager();
mActivity = activity;
mFragment = fragment;
+ mNotAllowShowSummaryPackages = Set.of(
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .getHideApplicationSummary(context));
}
@Override
@@ -425,7 +432,13 @@
@VisibleForTesting
void setUsageSummary(Preference preference, BatteryEntry entry) {
if (entry.getUid() == Process.SYSTEM_UID) {
- return;
+ return;
+ }
+ String packageName = entry.getDefaultPackageName();
+ if (packageName != null
+ && mNotAllowShowSummaryPackages != null
+ && mNotAllowShowSummaryPackages.contains(packageName)) {
+ return;
}
// Only show summary when usage time is longer than one minute
final long usageTimeMs = entry.getTimeInForegroundMs();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 45b4886..bc25381 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -25,6 +25,7 @@
import android.util.SparseIntArray;
import com.android.internal.util.ArrayUtils;
+import com.android.settings.R;
import com.android.settingslib.fuelgauge.Estimate;
import java.util.Map;
@@ -179,6 +180,7 @@
@Override
public CharSequence[] getHideApplicationSummary(Context context) {
- return new CharSequence[0];
+ return context.getResources().getTextArray(
+ R.array.allowlist_hide_summary_in_battery_usage);
}
}
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index ae030f4..de4d127 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -49,6 +49,7 @@
import android.view.View;
import android.widget.Toast;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@@ -87,6 +88,7 @@
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
import com.android.settingslib.wifi.WifiSavedConfigUtils;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiEntry.ConnectCallback;
@@ -127,6 +129,8 @@
private static final String PREF_KEY_AIRPLANE_MODE_MSG = "airplane_mode_message";
private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list";
+ @VisibleForTesting
+ static final String PREF_KEY_WIFI_TOGGLE = "main_toggle_wifi";
// TODO(b/70983952): Rename these to use WifiEntry instead of AccessPoint.
@VisibleForTesting
static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point";
@@ -1236,26 +1240,54 @@
}
};
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.network_provider_settings) {
+ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new SearchIndexProvider(R.xml.network_provider_settings);
- @Override
- public List<String> getNonIndexableKeys(Context context) {
- final List<String> keys = super.getNonIndexableKeys(context);
+ @VisibleForTesting
+ static class SearchIndexProvider extends BaseSearchIndexProvider {
- final WifiManager wifiManager = context.getSystemService(WifiManager.class);
- if (wifiManager == null) return keys;
+ private final WifiRestriction mWifiRestriction;
- if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
- keys.add(PREF_KEY_SAVED_NETWORKS);
- }
+ SearchIndexProvider(int xmlRes) {
+ super(xmlRes);
+ mWifiRestriction = new WifiRestriction();
+ }
- if (!DataUsageUtils.hasWifiRadio(context)) {
- keys.add(PREF_KEY_DATA_USAGE);
- }
- return keys;
- }
- };
+ @VisibleForTesting
+ SearchIndexProvider(int xmlRes, WifiRestriction wifiRestriction) {
+ super(xmlRes);
+ mWifiRestriction = wifiRestriction;
+ }
+
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ final List<String> keys = super.getNonIndexableKeys(context);
+
+ if (!mWifiRestriction.isChangeWifiStateAllowed(context)) {
+ keys.add(PREF_KEY_WIFI_TOGGLE);
+ }
+
+ final WifiManager wifiManager = context.getSystemService(WifiManager.class);
+ if (wifiManager == null) return keys;
+
+ if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
+ keys.add(PREF_KEY_SAVED_NETWORKS);
+ }
+
+ if (!DataUsageUtils.hasWifiRadio(context)) {
+ keys.add(PREF_KEY_DATA_USAGE);
+ }
+ return keys;
+ }
+ }
+
+ @VisibleForTesting
+ static class WifiRestriction {
+ public boolean isChangeWifiStateAllowed(@Nullable Context context) {
+ if (context == null) return true;
+ return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
+ }
+ }
private class WifiEntryConnectCallback implements ConnectCallback {
final WifiEntry mConnectWifiEntry;
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java
index 36a4d8a..14955c4 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreference.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java
@@ -16,6 +16,8 @@
package com.android.settings.notification;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
+
import android.content.ContentResolver;
import android.content.Context;
import android.media.AudioManager;
@@ -31,6 +33,7 @@
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceViewHolder;
+import com.android.internal.jank.InteractionJankMonitor;
import com.android.settings.R;
import com.android.settings.widget.SeekBarPreference;
@@ -40,6 +43,8 @@
public class VolumeSeekBarPreference extends SeekBarPreference {
private static final String TAG = "VolumeSeekBarPreference";
+ private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
+
protected SeekBar mSeekBar;
private int mStream;
private SeekBarVolumizer mVolumizer;
@@ -143,6 +148,13 @@
if (mCallback != null) {
mCallback.onStartTrackingTouch(sbv);
}
+ mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+ .withView(CUJ_SETTINGS_SLIDER, mSeekBar)
+ .setTag(getKey()));
+ }
+ @Override
+ public void onStopTrackingTouch(SeekBarVolumizer sbv) {
+ mJankMonitor.end(CUJ_SETTINGS_SLIDER);
}
};
final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
diff --git a/src/com/android/settings/sim/SimListDialogFragment.java b/src/com/android/settings/sim/SimListDialogFragment.java
index 166d00a..06b116c 100644
--- a/src/com/android/settings/sim/SimListDialogFragment.java
+++ b/src/com/android/settings/sim/SimListDialogFragment.java
@@ -216,16 +216,6 @@
final TextView title = convertView.findViewById(R.id.title);
final TextView summary = convertView.findViewById(R.id.summary);
- ViewGroup.MarginLayoutParams lp =
- (ViewGroup.MarginLayoutParams) parent.getLayoutParams();
- if (lp != null) {
- lp.setMargins(0, mContext.getResources().getDimensionPixelSize(
- R.dimen.sims_select_margin_top), 0,
- mContext.getResources().getDimensionPixelSize(
- R.dimen.sims_select_margin_bottom));
- convertView.setLayoutParams(lp);
- }
-
if (sub == null) {
if (position == 0) {
title.setText(R.string.sim_calls_ask_first_prefs_title);
diff --git a/src/com/android/settings/widget/SeekBarPreference.java b/src/com/android/settings/widget/SeekBarPreference.java
index 62a19b9..9f9bc9f 100644
--- a/src/com/android/settings/widget/SeekBarPreference.java
+++ b/src/com/android/settings/widget/SeekBarPreference.java
@@ -18,6 +18,8 @@
import static android.view.HapticFeedbackConstants.CLOCK_TICK;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
+
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Parcel;
@@ -33,6 +35,7 @@
import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.PreferenceViewHolder;
+import com.android.internal.jank.InteractionJankMonitor;
import com.android.settingslib.RestrictedPreference;
/**
@@ -45,6 +48,7 @@
public static final int HAPTIC_FEEDBACK_MODE_ON_TICKS = 1;
public static final int HAPTIC_FEEDBACK_MODE_ON_ENDS = 2;
+ private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
private int mProgress;
private int mMax;
private int mMin;
@@ -312,6 +316,9 @@
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mTrackingTouch = true;
+ mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+ .withView(CUJ_SETTINGS_SLIDER, seekBar)
+ .setTag(getKey()));
}
@Override
@@ -320,6 +327,7 @@
if (seekBar.getProgress() != mProgress) {
syncProgress(seekBar);
}
+ mJankMonitor.end(CUJ_SETTINGS_SLIDER);
}
/**
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index f59dc60..7b2eae9 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -37,6 +37,7 @@
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
@@ -56,6 +57,7 @@
import com.android.settings.wifi.WifiDialogActivity;
import com.android.settings.wifi.WifiUtils;
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils;
import com.android.wifitrackerlib.WifiEntry;
import java.util.Arrays;
@@ -74,10 +76,17 @@
protected final Context mContext;
protected final WifiManager mWifiManager;
+ protected final WifiRestriction mWifiRestriction;
public WifiSlice(Context context) {
+ this(context, new WifiRestriction());
+ }
+
+ @VisibleForTesting
+ WifiSlice(Context context, WifiRestriction wifiRestriction) {
mContext = context;
mWifiManager = mContext.getSystemService(WifiManager.class);
+ mWifiRestriction = wifiRestriction;
}
@Override
@@ -167,20 +176,26 @@
final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon,
ListBuilder.ICON_IMAGE, title);
- return new ListBuilder.RowBuilder()
+ final ListBuilder.RowBuilder builder = new ListBuilder.RowBuilder()
.setTitle(title)
.setPrimaryAction(primarySliceAction);
+
+ if (!mWifiRestriction.isChangeWifiStateAllowed(mContext)) {
+ builder.setSubtitle(mContext.getString(R.string.not_allowed_by_ent));
+ }
+ return builder;
}
private ListBuilder getListBuilder(boolean isWifiEnabled, WifiSliceItem wifiSliceItem) {
- final PendingIntent toggleAction = getBroadcastIntent(mContext);
- final SliceAction toggleSliceAction = SliceAction.createToggle(toggleAction,
- null /* actionTitle */, isWifiEnabled);
final ListBuilder builder = new ListBuilder(mContext, getUri(), ListBuilder.INFINITY)
.setAccentColor(COLOR_NOT_TINTED)
.setKeywords(getKeywords())
- .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem))
- .addAction(toggleSliceAction);
+ .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem));
+
+ if (mWifiRestriction.isChangeWifiStateAllowed(mContext)) {
+ builder.addAction(SliceAction.createToggle(
+ getBroadcastIntent(mContext), null /* actionTitle */, isWifiEnabled));
+ }
return builder;
}
@@ -349,4 +364,12 @@
public Class getBackgroundWorkerClass() {
return WifiScanWorker.class;
}
+
+ @VisibleForTesting
+ static class WifiRestriction {
+ public boolean isChangeWifiStateAllowed(@Nullable Context context) {
+ if (context == null) return true;
+ return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java b/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java
index 0925344..ea05f4a 100644
--- a/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/PointerSpeedPreferenceTest.java
@@ -27,13 +27,17 @@
import android.util.AttributeSet;
import android.widget.SeekBar;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class PointerSpeedPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java
index 44d2e86..4a791e3 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AlarmVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -40,8 +41,10 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class AlarmVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java
index ba7bd2c..251698c 100644
--- a/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/BalanceSeekBarPreferenceTest.java
@@ -26,13 +26,17 @@
import androidx.preference.PreferenceViewHolder;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class BalanceSeekBarPreferenceTest {
private static final int BALANCE_CENTER_VALUE = 100;
private static final int BALANCE_MAX_VALUE = 200;
diff --git a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
index eceb185..343d56a 100644
--- a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
@@ -38,6 +38,7 @@
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import org.junit.Before;
@@ -49,9 +50,11 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
/** Tests for {@link FloatingMenuTransparencyPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class FloatingMenuTransparencyPreferenceControllerTest {
@Rule
diff --git a/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java
index 344a25f..8c2be52 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HapticFeedbackIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -41,8 +42,10 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class HapticFeedbackIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java
index 3a4b43a..e0eff0e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MediaVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -40,9 +41,11 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
/** Test for {@link MediaVibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class MediaVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java
index 9533c53..0638af9 100644
--- a/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/NotificationVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -41,8 +42,10 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class NotificationVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java
index d33d80e..fae61d6 100644
--- a/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/PreviewSizeSeekBarControllerTest.java
@@ -28,6 +28,7 @@
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.LabeledSeekBarPreference;
import org.junit.Before;
@@ -36,11 +37,13 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
/**
* Tests for {@link PreviewSizeSeekBarController}.
*/
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class PreviewSizeSeekBarControllerTest {
private static final String FONT_SIZE_KEY = "font_size";
private final Context mContext = ApplicationProvider.getApplicationContext();
diff --git a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
index fa3f3bf..2ff5d71 100644
--- a/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/RingVibrationIntensityPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -41,9 +42,11 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
/** Tests for {@link RingVibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class RingVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key";
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
index b630509..f768e42 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreviewControllerTest.java
@@ -27,6 +27,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.display.PreviewPagerAdapter;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.LabeledSeekBarPreference;
import org.junit.Before;
@@ -45,7 +46,7 @@
* Tests for {@link TextReadingPreviewController}.
*/
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowChoreographer.class)
+@Config(shadows = {ShadowChoreographer.class, ShadowInteractionJankMonitor.class})
public class TextReadingPreviewControllerTest {
private static final String PREVIEW_KEY = "preview";
private static final String FONT_SIZE_KEY = "font_size";
diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java
index 048bce4..2508345 100644
--- a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityPreferenceControllerTest.java
@@ -28,6 +28,7 @@
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -37,9 +38,11 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
/** Tests for {@link VibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class VibrationIntensityPreferenceControllerTest {
private static final String SETTING_KEY = Settings.System.NOTIFICATION_VIBRATION_INTENSITY;
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
index 5c66db7..1b2ef9a 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
@@ -97,7 +97,8 @@
public void initUsbPreference_usbConnected_preferenceAdded() {
mDeviceUpdater.initUsbPreference(mContext);
mDeviceUpdater.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
verify(mDevicePreferenceCallback).onDeviceAdded(mDeviceUpdater.mUsbPreference);
}
@@ -106,7 +107,8 @@
public void initUsbPreference_usbDisconnected_preferenceRemoved() {
mDeviceUpdater.initUsbPreference(mContext);
mDeviceUpdater.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
- UsbManager.FUNCTION_NONE, POWER_ROLE_NONE, DATA_ROLE_NONE);
+ UsbManager.FUNCTION_NONE, POWER_ROLE_NONE, DATA_ROLE_NONE,
+ /* isUsbConfigured= */ true);
verify(mDevicePreferenceCallback).onDeviceRemoved(mDeviceUpdater.mUsbPreference);
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java
index 21ec48e..7cd7dcc 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbConnectionBroadcastReceiverTest.java
@@ -65,11 +65,12 @@
final Intent intent = new Intent();
intent.setAction(UsbManager.ACTION_USB_STATE);
intent.putExtra(UsbManager.USB_CONNECTED, true);
+ intent.putExtra(UsbManager.USB_CONFIGURED, true);
mReceiver.onReceive(mContext, intent);
verify(mListener).onUsbConnectionChanged(true /* connected */, UsbManager.FUNCTION_NONE,
- POWER_ROLE_NONE, DATA_ROLE_NONE);
+ POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
}
@Test
@@ -77,11 +78,12 @@
final Intent intent = new Intent();
intent.setAction(UsbManager.ACTION_USB_STATE);
intent.putExtra(UsbManager.USB_CONNECTED, false);
+ intent.putExtra(UsbManager.USB_CONFIGURED, true);
mReceiver.onReceive(mContext, intent);
verify(mListener).onUsbConnectionChanged(false /* connected */, UsbManager.FUNCTION_NONE,
- POWER_ROLE_NONE, DATA_ROLE_NONE);
+ POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
}
@Test
@@ -91,11 +93,12 @@
intent.putExtra(UsbManager.USB_CONNECTED, true);
intent.putExtra(UsbManager.USB_FUNCTION_MTP, true);
intent.putExtra(UsbManager.USB_DATA_UNLOCKED, true);
+ intent.putExtra(UsbManager.USB_CONFIGURED, true);
mReceiver.onReceive(mContext, intent);
verify(mListener).onUsbConnectionChanged(true /* connected */, UsbManager.FUNCTION_MTP,
- POWER_ROLE_NONE, DATA_ROLE_NONE);
+ POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
}
@Test
@@ -105,26 +108,41 @@
intent.putExtra(UsbManager.USB_CONNECTED, true);
intent.putExtra(UsbManager.USB_FUNCTION_NCM, true);
intent.putExtra(UsbManager.USB_DATA_UNLOCKED, true);
+ intent.putExtra(UsbManager.USB_CONFIGURED, true);
mReceiver.onReceive(mContext, intent);
verify(mListener).onUsbConnectionChanged(/* connected */ true, UsbManager.FUNCTION_NCM,
- POWER_ROLE_NONE, DATA_ROLE_NONE);
+ POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ true);
}
@Test
- public void onReceive_usbPortStatus_invokeCallback() {
+ public void onReceive_usbPortStatus_invokesCallback() {
final Intent intent = new Intent();
intent.setAction(UsbManager.ACTION_USB_PORT_CHANGED);
final UsbPortStatus status = new UsbPortStatus(0, POWER_ROLE_SINK,
DATA_ROLE_DEVICE, 0, CONTAMINANT_PROTECTION_NONE,
CONTAMINANT_DETECTION_NOT_SUPPORTED);
intent.putExtra(UsbManager.EXTRA_PORT_STATUS, status);
+ intent.putExtra(UsbManager.USB_CONFIGURED, true);
mReceiver.onReceive(mContext, intent);
verify(mListener).onUsbConnectionChanged(false /* connected */, UsbManager.FUNCTION_NONE,
- POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ POWER_ROLE_SINK, DATA_ROLE_DEVICE, /* isUsbConfigured= */ true);
+ }
+
+ @Test
+ public void onReceive_usbConfiguredIsFalse_invokesCallback() {
+ final Intent intent = new Intent();
+ intent.setAction(UsbManager.ACTION_USB_STATE);
+ intent.putExtra(UsbManager.USB_CONNECTED, true);
+ intent.putExtra(UsbManager.USB_CONFIGURED, false);
+
+ mReceiver.onReceive(mContext, intent);
+
+ verify(mListener).onUsbConnectionChanged(true /* connected */, UsbManager.FUNCTION_NONE,
+ POWER_ROLE_NONE, DATA_ROLE_NONE, /* isUsbConfigured= */ false);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
index 9afc677..71bbff2 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbDefaultFragmentTest.java
@@ -27,7 +27,6 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -204,12 +203,13 @@
public void onPause_receivedRndis_shouldSetRndis() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
mFragment.onPause();
- verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
+ verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_RNDIS);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_RNDIS);
}
@@ -217,11 +217,12 @@
public void onPause_receivedNone_shouldSetNone() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_NONE, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
mFragment.onPause();
- verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
+ verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NONE);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
}
@@ -229,12 +230,13 @@
public void onPause_receivedMtp_shouldSetMtp() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_MTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_MTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_MTP);
mFragment.onPause();
- verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
+ verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MTP);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MTP);
}
@@ -242,12 +244,13 @@
public void onPause_receivedPtp_shouldSetPtp() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_PTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_PTP, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_PTP);
mFragment.onPause();
- verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
+ verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_PTP);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_PTP);
}
@@ -255,12 +258,13 @@
public void onPause_receivedMidi_shouldSetMidi() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_MIDI, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_MIDI, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_MIDI);
mFragment.onPause();
- verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
+ verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_MIDI);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_MIDI);
}
@@ -268,12 +272,13 @@
public void onPause_receivedNcm_setsNcm() {
mFragment.mIsStartTethering = true;
mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ true,
- UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
when(mUsbBackend.getCurrentFunctions()).thenReturn(UsbManager.FUNCTION_NCM);
mFragment.onPause();
- verify(mUsbBackend, times(2)).setDefaultUsbFunctions(UsbManager.FUNCTION_NCM);
+ verify(mUsbBackend).setDefaultUsbFunctions(UsbManager.FUNCTION_NCM);
assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NCM);
}
@@ -282,9 +287,11 @@
when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
- UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB),
any(),
@@ -296,9 +303,11 @@
when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_NCM);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ false,
- UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected */ true,
- UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
verify(mTetheringManager).startTethering(eq(TetheringManager.TETHERING_USB),
any(),
@@ -310,7 +319,8 @@
when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
- UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
verify(mTetheringManager, never()).startTethering(eq(TetheringManager.TETHERING_USB),
any(),
@@ -323,15 +333,36 @@
when(mUsbBackend.getDefaultUsbFunctions()).thenReturn(UsbManager.FUNCTION_RNDIS);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(false /* connected */,
- UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
mFragment.mUsbConnectionListener.onUsbConnectionChanged(true /* connected */,
- UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE);
+ UsbManager.FUNCTION_RNDIS, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
verify(mTetheringManager, never()).startTethering(eq(TetheringManager.TETHERING_USB),
any(),
eq(mFragment.mOnStartTetheringCallback));
}
+ @Test
+ public void onUsbConnectionChanged_usbConfiguredIsTrue_updatesCurrentFunctions() {
+ mFragment.mCurrentFunctions = UsbManager.FUNCTION_NONE;
+ mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected= */ true,
+ UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ true);
+ assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NCM);
+ }
+
+ @Test
+ public void onUsbConnectionChanged_usbConfiguredIsFalse_doesNotUpdateCurrentFunctions() {
+ mFragment.mCurrentFunctions = UsbManager.FUNCTION_NONE;
+ mFragment.mUsbConnectionListener.onUsbConnectionChanged(/* connected= */ true,
+ UsbManager.FUNCTION_NCM, POWER_ROLE_SINK, DATA_ROLE_DEVICE,
+ /* isUsbConfigured= */ false);
+ assertThat(mFragment.mCurrentFunctions).isEqualTo(UsbManager.FUNCTION_NONE);
+ }
+
+
public static class TestFragment extends UsbDefaultFragment {
public final PreferenceScreen mScreen;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
index 9b57593..b05d06d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
@@ -15,6 +15,8 @@
import androidx.preference.PreferenceScreen;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -22,8 +24,10 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class BatterySaverScheduleSeekBarControllerTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
index bb36c8a..78e19c3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
@@ -10,6 +10,7 @@
import android.provider.Settings;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before;
@@ -17,8 +18,10 @@
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public final class BatterySaverScheduleSettingsTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java
index d00e905..6302f80 100644
--- a/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/LabeledSeekBarPreferenceTest.java
@@ -37,6 +37,7 @@
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.widget.LabeledSeekBarPreference;
@@ -56,7 +57,8 @@
*/
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
- ShadowUserManager.class
+ ShadowUserManager.class,
+ ShadowInteractionJankMonitor.class,
})
public class LabeledSeekBarPreferenceTest {
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
index 5ee9676..1424d0e 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
@@ -60,6 +60,7 @@
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.core.app.ApplicationProvider;
import com.android.settings.AirplaneModeEnabler;
import com.android.settings.R;
@@ -77,24 +78,33 @@
import com.android.wifitrackerlib.WifiPickerTracker;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.shadows.ShadowToast;
+import java.util.List;
+
@RunWith(RobolectricTestRunner.class)
public class NetworkProviderSettingsTest {
+ private static final int XML_RES = R.xml.wifi_tether_settings;
private static final int NUM_NETWORKS = 4;
private static final String FAKE_URI_STRING = "fakeuri";
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
@Mock
private PowerManager mPowerManager;
@Mock
@@ -107,7 +117,6 @@
private AirplaneModeEnabler mAirplaneModeEnabler;
@Mock
private DataUsagePreference mDataUsagePreference;
- private Context mContext;
private NetworkProviderSettings mNetworkProviderSettings;
@Mock
private WifiPickerTracker mMockWifiPickerTracker;
@@ -131,12 +140,11 @@
PreferenceCategory mConnectedWifiEntryPreferenceCategory;
@Mock
PreferenceCategory mFirstWifiEntryPreferenceCategory;
+ @Mock
+ NetworkProviderSettings.WifiRestriction mWifiRestriction;
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application);
-
mNetworkProviderSettings = spy(new NetworkProviderSettings());
doReturn(mContext).when(mNetworkProviderSettings).getContext();
doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager();
@@ -721,6 +729,28 @@
verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt());
}
+ @Test
+ public void getNonIndexableKeys_allowedChangeWifiState_keyNotReturned() {
+ when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true);
+ NetworkProviderSettings.SearchIndexProvider searchIndexProvider =
+ new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction);
+
+ final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext);
+
+ assertThat(keys).doesNotContain(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE);
+ }
+
+ @Test
+ public void getNonIndexableKeys_disallowedChangeWifiState_keyReturned() {
+ when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false);
+ NetworkProviderSettings.SearchIndexProvider searchIndexProvider =
+ new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction);
+
+ final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext);
+
+ assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE);
+ }
+
@Implements(PreferenceFragmentCompat.class)
public static class ShadowPreferenceFragmentCompat {
diff --git a/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java b/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java
index 8b46374..e713963 100644
--- a/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/RemoteVolumeGroupControllerTest.java
@@ -43,6 +43,7 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.media.LocalMediaManager;
@@ -61,7 +62,7 @@
import java.util.List;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothAdapter.class})
+@Config(shadows = {ShadowBluetoothAdapter.class, ShadowInteractionJankMonitor.class})
public class RemoteVolumeGroupControllerTest {
private static final String KEY_REMOTE_VOLUME_GROUP = "remote_media_group";
diff --git a/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
index 451b84b..770559d 100644
--- a/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
@@ -34,6 +34,7 @@
import androidx.preference.PreferenceFragmentCompat;
+import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import org.junit.Before;
@@ -46,7 +47,7 @@
import org.robolectric.shadows.androidx.fragment.FragmentController;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowRestrictedLockUtilsInternal.class)
+@Config(shadows = {ShadowRestrictedLockUtilsInternal.class, ShadowInteractionJankMonitor.class})
public class SeekBarPreferenceTest {
private static final int MAX = 75;
diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
index 5b7a7d6..d8151d0 100644
--- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
@@ -25,7 +25,6 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.ContentResolver;
@@ -37,9 +36,12 @@
import androidx.slice.Slice;
import androidx.slice.SliceItem;
+import androidx.slice.SliceMetadata;
import androidx.slice.SliceProvider;
import androidx.slice.core.SliceQuery;
+import androidx.slice.widget.ListContent;
import androidx.slice.widget.SliceLiveData;
+import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.slices.SliceBackgroundWorker;
@@ -49,12 +51,14 @@
import com.android.wifitrackerlib.WifiEntry.ConnectedState;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@@ -74,26 +78,29 @@
private static final String AP3_NAME = "ap3";
private static final int USER_ID = 1;
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
@Mock
private WifiManager mWifiManager;
@Mock
private PackageManager mPackageManager;
-
-
- private Context mContext;
+ @Mock
private ContentResolver mResolver;
+ @Mock
+ private WifiSlice.WifiRestriction mWifiRestriction;
+
private WifiSlice mWifiSlice;
private String mSIPackageName;
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application);
- mResolver = mock(ContentResolver.class);
doReturn(mResolver).when(mContext).getContentResolver();
doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class);
doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true);
// Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -102,7 +109,7 @@
ShadowBinder.setCallingUid(USER_ID);
when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});
ShadowWifiSlice.setWifiPermissible(true);
- mWifiSlice = new WifiSlice(mContext);
+ mWifiSlice = new WifiSlice(mContext, mWifiRestriction);
}
@Test
@@ -242,6 +249,30 @@
}
@Test
+ public void getWifiSlice_disallowedChangeWifiState_addSubtitleAndNoToggle() {
+ when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false);
+
+ final Slice slice = mWifiSlice.getSlice();
+
+ final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent();
+ assertThat(slice).isNotNull();
+ assertThat(listContent.getHeader().getSubtitleItem()).isNotNull();
+ assertThat(listContent.getSliceActions()).isNull();
+ }
+
+ @Test
+ public void getWifiSlice_allowedChangeWifiState_noSubtitleAndAddToggle() {
+ when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true);
+
+ final Slice slice = mWifiSlice.getSlice();
+
+ final ListContent listContent = SliceMetadata.from(mContext, slice).getListContent();
+ assertThat(slice).isNotNull();
+ assertThat(listContent.getHeader().getSubtitleItem()).isNull();
+ assertThat(listContent.getSliceActions()).isNotNull();
+ }
+
+ @Test
public void handleUriChange_updatesWifi() {
final Intent intent = mWifiSlice.getIntent();
intent.putExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE, true);