Snap for 5591509 from bab0f4c098 to qt-release
Change-Id: I501c151de67614129102ebfd0917c016e65517a8
This commit is contained in:
@@ -2403,16 +2403,6 @@
|
||||
android:excludeFromRecents="true">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".SmsDefaultDialog"
|
||||
android:label="@string/sms_application_title"
|
||||
android:excludeFromRecents="true"
|
||||
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert">
|
||||
<intent-filter android:priority="1">
|
||||
<action android:name="android.provider.Telephony.ACTION_CHANGE_DEFAULT" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="Settings$NotificationAccessSettingsActivity"
|
||||
android:label="@string/manage_notification_access_title"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
-->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<solid android:color="@android:color/white"/>
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/circle_outline_color"/>
|
||||
|
||||
@@ -14,11 +14,14 @@ Copyright (C) 2019 The Android Open Source Project
|
||||
limitations under the License.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="20.0"
|
||||
android:viewportHeight="22.0">
|
||||
<path
|
||||
android:fillColor="#FF1E8E3E"
|
||||
android:pathData="M15,17L5,17L5,14.33l1.59,1.58L8,14.5l-3,-3 -1,-1 -4,4 1.41,1.42L3,14.33L3,20a2.006,2.006 0,0 0,2 2L15,22a2.006,2.006 0,0 0,2 -2L17,13L15,13ZM15,20L5,20L5,19L15,19ZM5,5L15,5L15,7.67L13.41,6.09 12,7.5l4,4 4,-4L18.59,6.08 17,7.67L17,2a1.997,1.997 0,0 0,-2 -1.99L5,0A2.006,2.006 0,0 0,3 2v7L5,9ZM5,2L15,2L15,3L5,3Z"/>
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF1E8E3E"
|
||||
android:pathData="M17,18H7v-2.67l1.59,1.58L10,15.5l-3,-3l-1,-1l-4,4l1.41,1.42L5,15.33v4.17V20v1c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-7h-2V18zM17,21H7v-1h10V21z"/>
|
||||
<path
|
||||
android:fillColor="#FF1E8E3E"
|
||||
android:pathData="M7,6h10v2.67l-1.59,-1.58L14,8.5l4,4l4,-4l-1.41,-1.42L19,8.67V4.5V4V3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1C5.9,1 5,1.9 5,3v7h2V6zM7,3h10v1H7V3z"/>
|
||||
</vector>
|
||||
|
||||
@@ -14,11 +14,14 @@ Copyright (C) 2019 The Android Open Source Project
|
||||
limitations under the License.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="20.0"
|
||||
android:viewportHeight="22.0">
|
||||
<path
|
||||
android:fillColor="#FFD93025"
|
||||
android:pathData="M15,17L5,17L5,14.33l1.59,1.58L8,14.5l-3,-3 -1,-1 -4,4 1.41,1.42L3,14.33L3,20a2.006,2.006 0,0 0,2 2L15,22a2.006,2.006 0,0 0,2 -2L17,13L15,13ZM15,20L5,20L5,19L15,19ZM5,5L15,5L15,7.67L13.41,6.09 12,7.5l4,4 4,-4L18.59,6.08 17,7.67L17,2a1.997,1.997 0,0 0,-2 -1.99L5,0A2.006,2.006 0,0 0,3 2v7L5,9ZM5,2L15,2L15,3L5,3Z"/>
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FFD93025"
|
||||
android:pathData="M17,18H7v-2.67l1.59,1.58L10,15.5l-3,-3l-1,-1l-4,4l1.41,1.42L5,15.33v4.17V20v1c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-7h-2V18zM17,21H7v-1h10V21z"/>
|
||||
<path
|
||||
android:fillColor="#FFD93025"
|
||||
android:pathData="M7,6h10v2.67l-1.59,-1.58L14,8.5l4,4l4,-4l-1.41,-1.42L19,8.67V4.5V4V3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1C5.9,1 5,1.9 5,3v7h2V6zM7,3h10v1H7V3z"/>
|
||||
</vector>
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/gestures_setting_background_color"
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="true"
|
||||
android:gravity="center"
|
||||
android:minHeight="?android:attr/listPreferredItemHeightSmall"
|
||||
android:orientation="horizontal"
|
||||
|
||||
@@ -1,289 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Telephony.Sms.Intents;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.internal.app.AlertActivity;
|
||||
import com.android.internal.app.AlertController;
|
||||
import com.android.internal.telephony.SmsApplication;
|
||||
import com.android.internal.telephony.SmsApplication.SmsApplicationData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public final class SmsDefaultDialog extends AlertActivity implements
|
||||
DialogInterface.OnClickListener {
|
||||
private SmsApplicationData mNewSmsApplicationData;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Intent intent = getIntent();
|
||||
String packageName = intent.getStringExtra(Intents.EXTRA_PACKAGE_NAME);
|
||||
|
||||
setResult(RESULT_CANCELED);
|
||||
if (!buildDialog(packageName)) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
|
||||
android.util.EventLog.writeEvent(0x534e4554, "120484087", -1, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
final Window window = getWindow();
|
||||
final WindowManager.LayoutParams attrs = window.getAttributes();
|
||||
attrs.privateFlags &= ~SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
||||
window.setAttributes(attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
switch (which) {
|
||||
case BUTTON_POSITIVE:
|
||||
SmsApplication.setDefaultApplication(mNewSmsApplicationData.mPackageName, this);
|
||||
setResult(RESULT_OK);
|
||||
break;
|
||||
case BUTTON_NEGATIVE:
|
||||
break;
|
||||
default:
|
||||
if (which >= 0) {
|
||||
AppListAdapter adapter = (AppListAdapter) mAlertParams.mAdapter;
|
||||
if (!adapter.isSelected(which)) {
|
||||
String packageName = adapter.getPackageName(which);
|
||||
if (!TextUtils.isEmpty(packageName)) {
|
||||
SmsApplication.setDefaultApplication(packageName, this);
|
||||
setResult(RESULT_OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean buildDialog(String packageName) {
|
||||
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
||||
if (!tm.isSmsCapable()) {
|
||||
// No phone, no SMS
|
||||
return false;
|
||||
}
|
||||
final AlertController.AlertParams p = mAlertParams;
|
||||
p.mTitle = getString(R.string.sms_change_default_dialog_title);
|
||||
mNewSmsApplicationData = SmsApplication.getSmsApplicationData(packageName, this);
|
||||
if (mNewSmsApplicationData != null) {
|
||||
// New default SMS app specified, change to that directly after the confirmation
|
||||
// dialog.
|
||||
SmsApplicationData oldSmsApplicationData = null;
|
||||
ComponentName oldSmsComponent = SmsApplication.getDefaultSmsApplication(this, true);
|
||||
if (oldSmsComponent != null) {
|
||||
oldSmsApplicationData = SmsApplication.getSmsApplicationData(
|
||||
oldSmsComponent.getPackageName(), this);
|
||||
if (oldSmsApplicationData.mPackageName.equals(
|
||||
mNewSmsApplicationData.mPackageName)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Compose dialog; get
|
||||
if (oldSmsApplicationData != null) {
|
||||
p.mMessage = getString(R.string.sms_change_default_dialog_text,
|
||||
mNewSmsApplicationData.getApplicationName(this),
|
||||
oldSmsApplicationData.getApplicationName(this));
|
||||
} else {
|
||||
p.mMessage = getString(R.string.sms_change_default_no_previous_dialog_text,
|
||||
mNewSmsApplicationData.getApplicationName(this));
|
||||
}
|
||||
p.mPositiveButtonText = getString(R.string.yes);
|
||||
p.mNegativeButtonText = getString(R.string.no);
|
||||
p.mPositiveButtonListener = this;
|
||||
p.mNegativeButtonListener = this;
|
||||
} else {
|
||||
// No new default SMS app specified, show a list of all SMS apps and let user to pick
|
||||
p.mAdapter = new AppListAdapter();
|
||||
p.mOnClickListener = this;
|
||||
p.mNegativeButtonText = getString(R.string.cancel);
|
||||
p.mNegativeButtonListener = this;
|
||||
if (p.mAdapter.isEmpty()) {
|
||||
// If there is nothing to choose from, don't build the dialog.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
setupAlert();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* The list of SMS apps with label, icon. Current default SMS app is marked as "default".
|
||||
*/
|
||||
private class AppListAdapter extends BaseAdapter {
|
||||
/**
|
||||
* SMS app item in the list
|
||||
*/
|
||||
private class Item {
|
||||
final String label; // app label
|
||||
final Drawable icon; // app icon
|
||||
final String packgeName; // full app package name
|
||||
|
||||
public Item(String label, Drawable icon, String packageName) {
|
||||
this.label = label;
|
||||
this.icon = icon;
|
||||
this.packgeName = packageName;
|
||||
}
|
||||
}
|
||||
|
||||
// The list
|
||||
private final List<Item> mItems;
|
||||
// The index of selected
|
||||
private final int mSelectedIndex;
|
||||
|
||||
public AppListAdapter() {
|
||||
mItems = getItems();
|
||||
int selected = getSelectedIndex();
|
||||
// Move selected up to the top so it is easy to find
|
||||
if (selected > 0) {
|
||||
Item item = mItems.remove(selected);
|
||||
mItems.add(0, item);
|
||||
selected = 0;
|
||||
}
|
||||
mSelectedIndex = selected;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mItems != null ? mItems.size() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return mItems != null && position < mItems.size() ? mItems.get(position) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
Item item = ((Item) getItem(position));
|
||||
LayoutInflater inflater = getLayoutInflater();
|
||||
View view = inflater.inflate(R.layout.app_preference_item, parent, false);
|
||||
TextView textView = (TextView) view.findViewById(android.R.id.title);
|
||||
textView.setText(item.label);
|
||||
if (position == mSelectedIndex) {
|
||||
view.findViewById(R.id.default_label).setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
view.findViewById(R.id.default_label).setVisibility(View.GONE);
|
||||
}
|
||||
ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
|
||||
imageView.setImageDrawable(item.icon);
|
||||
return view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the selected package name by
|
||||
*
|
||||
* @param position the index of the item in the list
|
||||
* @return the package name of selected item
|
||||
*/
|
||||
public String getPackageName(int position) {
|
||||
Item item = (Item) getItem(position);
|
||||
if (item != null) {
|
||||
return item.packgeName;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an item at a position is already selected
|
||||
*
|
||||
* @param position the index of the item in the list
|
||||
* @return true if the item at the position is already selected, false otherwise
|
||||
*/
|
||||
public boolean isSelected(int position) {
|
||||
return position == mSelectedIndex;
|
||||
}
|
||||
|
||||
// Get the list items by looking for SMS apps
|
||||
private List<Item> getItems() {
|
||||
PackageManager pm = getPackageManager();
|
||||
List<Item> items = new ArrayList<>();
|
||||
for (SmsApplication.SmsApplicationData app :
|
||||
SmsApplication.getApplicationCollection(SmsDefaultDialog.this)) {
|
||||
try {
|
||||
String packageName = app.mPackageName;
|
||||
ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0/*flags*/);
|
||||
if (appInfo != null) {
|
||||
items.add(new Item(
|
||||
appInfo.loadLabel(pm).toString(),
|
||||
appInfo.loadIcon(pm),
|
||||
packageName));
|
||||
}
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
// Ignore package can't be found
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
// Get the selected item index by looking for the current default SMS app
|
||||
private int getSelectedIndex() {
|
||||
ComponentName appName = SmsApplication.getDefaultSmsApplication(
|
||||
SmsDefaultDialog.this, true);
|
||||
if (appName != null) {
|
||||
String defaultSmsAppPackageName = appName.getPackageName();
|
||||
if (!TextUtils.isEmpty(defaultSmsAppPackageName)) {
|
||||
for (int i = 0; i < mItems.size(); i++) {
|
||||
if (TextUtils.equals(mItems.get(i).packgeName, defaultSmsAppPackageName)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -198,8 +198,8 @@ public class OverlayCategoryPreferenceController extends DeveloperOptionsPrefere
|
||||
@Override
|
||||
protected void onDeveloperOptionsSwitchDisabled() {
|
||||
super.onDeveloperOptionsSwitchDisabled();
|
||||
// STOPSHIP b/122308197: reset the overlays to the set in
|
||||
// Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES
|
||||
// TODO b/133222035: remove these developer settings when the
|
||||
// Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES setting is used
|
||||
setOverlay(PACKAGE_DEVICE_DEFAULT);
|
||||
updateState(mPreference);
|
||||
}
|
||||
|
||||
@@ -297,6 +297,9 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O
|
||||
}
|
||||
|
||||
private void updateSignalStrength(SignalStrength signalStrength) {
|
||||
if (signalStrength == null) {
|
||||
return;
|
||||
}
|
||||
final int subscriptionId = mSubscriptionInfo.getSubscriptionId();
|
||||
final PersistableBundle carrierConfig =
|
||||
mCarrierConfigManager.getConfigForSubId(subscriptionId);
|
||||
@@ -430,13 +433,11 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O
|
||||
mSubscriptionInfo.getSubscriptionId());
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
int getDbm(SignalStrength signalStrength) {
|
||||
private int getDbm(SignalStrength signalStrength) {
|
||||
return signalStrength.getDbm();
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
int getAsuLevel(SignalStrength signalStrength) {
|
||||
private int getAsuLevel(SignalStrength signalStrength) {
|
||||
return signalStrength.getAsuLevel();
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.settings.display;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.app.UiModeManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
@@ -39,9 +40,7 @@ public class DarkUIInfoDialogFragment extends InstrumentedDialogFragment
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
// TODO(b/130251804): Add metrics constant in followup change to avoid merge conflict in
|
||||
// beta cherrypick
|
||||
return 0;
|
||||
return SettingsEnums.DIALOG_DARK_UI_INFO;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.view.Gravity;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settingslib.graph.SignalDrawable;
|
||||
|
||||
import java.util.List;
|
||||
@@ -144,6 +145,7 @@ public class NetworkOperatorPreference extends Preference {
|
||||
// Set the signal strength icon at the bottom right
|
||||
icons.setLayerGravity(1 /* index of SignalDrawable */, Gravity.BOTTOM | Gravity.RIGHT);
|
||||
icons.setLayerSize(1 /* index of SignalDrawable */, iconSize, iconSize);
|
||||
icons.setTintList(Utils.getColorAttr(context, android.R.attr.colorControlNormal));
|
||||
setIcon(icons);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,9 @@ public abstract class NotificationPreferenceController extends AbstractPreferenc
|
||||
return false;
|
||||
}
|
||||
if (mChannelGroup != null) {
|
||||
return !mChannelGroup.isBlocked();
|
||||
if (mChannelGroup.isBlocked()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (mChannel != null) {
|
||||
return mChannel.getImportance() != IMPORTANCE_NONE;
|
||||
|
||||
@@ -25,6 +25,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||
|
||||
import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
@@ -169,6 +170,12 @@ public class ChooseLockGeneric extends SettingsActivity {
|
||||
/** From intent extra {@link ChooseLockSettingsHelper#EXTRA_KEY_CALLER_APP_NAME}. */
|
||||
private String mCallerAppName = null;
|
||||
|
||||
/**
|
||||
* The value from the intent extra {@link
|
||||
* ChooseLockSettingsHelper#EXTRA_KEY_IS_CALLING_APP_ADMIN}.
|
||||
*/
|
||||
private boolean mIsCallingAppAdmin;
|
||||
|
||||
protected boolean mForFingerprint = false;
|
||||
protected boolean mForFace = false;
|
||||
|
||||
@@ -217,6 +224,8 @@ public class ChooseLockGeneric extends SettingsActivity {
|
||||
.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE);
|
||||
mCallerAppName =
|
||||
getActivity().getIntent().getStringExtra(EXTRA_KEY_CALLER_APP_NAME);
|
||||
mIsCallingAppAdmin = getActivity().getIntent()
|
||||
.getBooleanExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN, /* defValue= */ false);
|
||||
mForChangeCredRequiredForBoot = getArguments() != null && getArguments().getBoolean(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT);
|
||||
mUserManager = UserManager.get(getActivity());
|
||||
@@ -490,7 +499,7 @@ public class ChooseLockGeneric extends SettingsActivity {
|
||||
protected void addPreferences() {
|
||||
addPreferencesFromResource(R.xml.security_settings_picker);
|
||||
|
||||
if (!TextUtils.isEmpty(mCallerAppName)) {
|
||||
if (!TextUtils.isEmpty(mCallerAppName) && !mIsCallingAppAdmin) {
|
||||
FooterPreferenceMixinCompat footerMixin =
|
||||
new FooterPreferenceMixinCompat(this, getSettingsLifecycle());
|
||||
FooterPreference footer = footerMixin.createFooterPreference();
|
||||
|
||||
@@ -60,6 +60,12 @@ public final class ChooseLockSettingsHelper {
|
||||
*/
|
||||
public static final String EXTRA_KEY_CALLER_APP_NAME = "caller_app_name";
|
||||
|
||||
/**
|
||||
* Intent extra indicating that the calling app is an admin, such as a Device Adimn, Device
|
||||
* Owner, or Profile Owner.
|
||||
*/
|
||||
public static final String EXTRA_KEY_IS_CALLING_APP_ADMIN = "is_calling_app_admin";
|
||||
|
||||
/**
|
||||
* When invoked via {@link ConfirmLockPassword.InternalActivity}, this flag
|
||||
* controls if we relax the enforcement of
|
||||
|
||||
@@ -23,6 +23,7 @@ import static android.app.admin.DevicePolicyManager.EXTRA_PASSWORD_COMPLEXITY;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
import android.app.Activity;
|
||||
@@ -30,6 +31,8 @@ import android.app.admin.DevicePolicyManager;
|
||||
import android.app.admin.DevicePolicyManager.PasswordComplexity;
|
||||
import android.app.admin.PasswordMetrics;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
@@ -39,6 +42,8 @@ import com.android.settings.Utils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Trampolines {@link DevicePolicyManager#ACTION_SET_NEW_PASSWORD} and
|
||||
* {@link DevicePolicyManager#ACTION_SET_NEW_PARENT_PROFILE_PASSWORD} intent to the appropriate UI
|
||||
@@ -116,10 +121,28 @@ public class SetNewPasswordActivity extends Activity implements SetNewPasswordCo
|
||||
if (mRequestedMinComplexity != PASSWORD_COMPLEXITY_NONE) {
|
||||
intent.putExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, mRequestedMinComplexity);
|
||||
}
|
||||
if (isCallingAppAdmin()) {
|
||||
intent.putExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN, true);
|
||||
}
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
|
||||
private boolean isCallingAppAdmin() {
|
||||
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||
String callingAppPackageName = PasswordUtils.getCallingAppPackageName(getActivityToken());
|
||||
List<ComponentName> admins = devicePolicyManager.getActiveAdmins();
|
||||
if (admins == null) {
|
||||
return false;
|
||||
}
|
||||
for (ComponentName componentName : admins) {
|
||||
if (componentName.getPackageName().equals(callingAppPackageName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void logSetNewPasswordIntent() {
|
||||
final String callingAppPackageName =
|
||||
PasswordUtils.getCallingAppPackageName(getActivityToken());
|
||||
|
||||
@@ -69,6 +69,13 @@ public class SeekBarPreference extends RestrictedPreference
|
||||
com.android.internal.R.layout.preference_widget_seekbar);
|
||||
a.recycle();
|
||||
|
||||
a = context.obtainStyledAttributes(
|
||||
attrs, com.android.internal.R.styleable.Preference, defStyleAttr, defStyleRes);
|
||||
final boolean isSelectable = a.getBoolean(
|
||||
com.android.settings.R.styleable.Preference_android_selectable, false);
|
||||
setSelectable(isSelectable);
|
||||
a.recycle();
|
||||
|
||||
setLayoutResource(layoutResId);
|
||||
}
|
||||
|
||||
@@ -93,7 +100,11 @@ public class SeekBarPreference extends RestrictedPreference
|
||||
|
||||
@Override
|
||||
public boolean isSelectable() {
|
||||
return isDisabledByAdmin();
|
||||
if(isDisabledByAdmin()) {
|
||||
return true;
|
||||
} else {
|
||||
return super.isSelectable();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
23
tests/robotests/res/xml-mcc998/seekbar_preference.xml
Normal file
23
tests/robotests/res/xml-mcc998/seekbar_preference.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?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.
|
||||
-->
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<com.android.settings.widget.SeekBarPreference
|
||||
android:key="seek_bar"
|
||||
android:title="seek_bar_title"/>
|
||||
</PreferenceScreen >
|
||||
24
tests/robotests/res/xml-mcc999/seekbar_preference.xml
Normal file
24
tests/robotests/res/xml-mcc999/seekbar_preference.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?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.
|
||||
-->
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<com.android.settings.widget.SeekBarPreference
|
||||
android:key="seek_bar"
|
||||
android:selectable="true"
|
||||
android:title="seek_bar_title"/>
|
||||
</PreferenceScreen >
|
||||
@@ -121,8 +121,8 @@ public class SimStatusDialogControllerTest {
|
||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
||||
mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
|
||||
doReturn(mServiceState).when(mController).getCurrentServiceState();
|
||||
doReturn(0).when(mController).getDbm(any());
|
||||
doReturn(0).when(mController).getAsuLevel(any());
|
||||
doReturn(0).when(mSignalStrength).getDbm();
|
||||
doReturn(0).when(mSignalStrength).getAsuLevel();
|
||||
doReturn(mPhoneStateListener).when(mController).getPhoneStateListener();
|
||||
doReturn("").when(mController).getPhoneNumber();
|
||||
doReturn(mSignalStrength).when(mController).getSignalStrength();
|
||||
@@ -136,6 +136,9 @@ public class SimStatusDialogControllerTest {
|
||||
ReflectionHelpers.setField(mController, "mEuiccManager", mEuiccManager);
|
||||
ReflectionHelpers.setField(mController, "mSubscriptionManager", mSubscriptionManager);
|
||||
when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mPersistableBundle);
|
||||
when(mPersistableBundle.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL))
|
||||
.thenReturn(true);
|
||||
|
||||
final ShadowPackageManager shadowPackageManager =
|
||||
Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager());
|
||||
@@ -228,8 +231,8 @@ public class SimStatusDialogControllerTest {
|
||||
public void initialize_updateSignalStrengthWith50_shouldUpdateSignalStrengthTo50() {
|
||||
final int signalDbm = 50;
|
||||
final int signalAsu = 50;
|
||||
doReturn(signalDbm).when(mController).getDbm(mSignalStrength);
|
||||
doReturn(signalAsu).when(mController).getAsuLevel(mSignalStrength);
|
||||
doReturn(signalDbm).when(mSignalStrength).getDbm();
|
||||
doReturn(signalAsu).when(mSignalStrength).getAsuLevel();
|
||||
when(mPersistableBundle.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true);
|
||||
|
||||
@@ -249,8 +252,8 @@ public class SimStatusDialogControllerTest {
|
||||
|
||||
final int signalDbm = 50;
|
||||
final int signalAsu = 50;
|
||||
doReturn(signalDbm).when(mController).getDbm(mSignalStrength);
|
||||
doReturn(signalAsu).when(mController).getAsuLevel(mSignalStrength);
|
||||
doReturn(signalDbm).when(mSignalStrength).getDbm();
|
||||
doReturn(signalAsu).when(mSignalStrength).getAsuLevel();
|
||||
when(mPersistableBundle.getBoolean(
|
||||
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)).thenReturn(true);
|
||||
|
||||
@@ -415,4 +418,11 @@ public class SimStatusDialogControllerTest {
|
||||
verify(mDialog).removeSettingFromScreen(IMS_REGISTRATION_STATE_LABEL_ID);
|
||||
verify(mDialog).removeSettingFromScreen(IMS_REGISTRATION_STATE_VALUE_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void initialize_nullSignalStrength_noCrash() {
|
||||
doReturn(null).when(mController).getSignalStrength();
|
||||
// we should not crash when running the following line
|
||||
mController.initialize();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,10 +105,12 @@ public class NotificationPreferenceControllerTest {
|
||||
@Test
|
||||
public void isAvailable_notIfChannelBlocked() {
|
||||
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
|
||||
NotificationChannelGroup group = mock(NotificationChannelGroup.class);
|
||||
when(group.isBlocked()).thenReturn(false);
|
||||
NotificationChannel channel = mock(NotificationChannel.class);
|
||||
when(channel.getImportance()).thenReturn(IMPORTANCE_NONE);
|
||||
|
||||
mController.onResume(appRow, channel, null, null);
|
||||
mController.onResume(appRow, channel, group, null);
|
||||
assertFalse(mController.isAvailable());
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -182,12 +183,22 @@ public class ChooseLockGenericTest {
|
||||
CharSequence expectedTitle =
|
||||
mActivity.getString(R.string.unlock_footer_none_complexity_requested, "app name");
|
||||
|
||||
mFragment.updatePreferencesOrFinish(false /* isRecreatingActivity */);
|
||||
mFragment.updatePreferencesOrFinish(/* isRecreatingActivity= */ false);
|
||||
FooterPreference footer = mFragment.findPreference(FooterPreference.KEY_FOOTER);
|
||||
|
||||
assertThat(footer.getTitle()).isEqualTo(expectedTitle);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updatePreferencesOrFinish_callingAppIsAdmin_noFooter() {
|
||||
initActivity(new Intent().putExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN, true));
|
||||
|
||||
mFragment.updatePreferencesOrFinish(/* isRecreatingActivity= */ false);
|
||||
|
||||
FooterPreference footer = mFragment.findPreference(FooterPreference.KEY_FOOTER);
|
||||
assertThat(footer).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onActivityResult_requestcode0_shouldNotFinish() {
|
||||
initActivity(null);
|
||||
|
||||
@@ -24,6 +24,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_HIGH;
|
||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_CALLER_APP_NAME;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
|
||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -32,8 +33,10 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
@@ -54,6 +57,8 @@ import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.Shadows;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.ShadowActivity;
|
||||
import org.robolectric.shadows.ShadowDevicePolicyManager;
|
||||
import org.robolectric.shadows.ShadowLog;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class SetNewPasswordActivityTest {
|
||||
@@ -91,7 +96,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class).get();
|
||||
activity.launchChooseLock(new Bundle());
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent intent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent intent = getLaunchChooseLockIntent(shadowActivity);
|
||||
|
||||
assertThat(intent.getComponent())
|
||||
.isEqualTo(new ComponentName(activity, ChooseLockGeneric.class));
|
||||
@@ -105,7 +110,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class).get();
|
||||
activity.launchChooseLock(new Bundle());
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent intent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent intent = getLaunchChooseLockIntent(shadowActivity);
|
||||
|
||||
assertThat(intent.getComponent())
|
||||
.isEqualTo(new ComponentName(activity, SetupChooseLockGeneric.class));
|
||||
@@ -149,7 +154,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isTrue();
|
||||
assertThat(actualIntent.getIntExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY, PASSWORD_COMPLEXITY_NONE))
|
||||
@@ -179,7 +184,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
@@ -207,7 +212,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
@@ -234,7 +239,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
@@ -262,7 +267,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PARENT_PROFILE_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
@@ -289,7 +294,7 @@ public class SetNewPasswordActivityTest {
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class, intent).create().get();
|
||||
|
||||
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
|
||||
Intent actualIntent = shadowActivity.getNextStartedActivityForResult().intent;
|
||||
Intent actualIntent = getLaunchChooseLockIntent(shadowActivity);
|
||||
assertThat(actualIntent.getAction()).isEqualTo(ACTION_SET_NEW_PARENT_PROFILE_PASSWORD);
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_REQUESTED_MIN_COMPLEXITY)).isFalse();
|
||||
assertThat(actualIntent.hasExtra(EXTRA_KEY_CALLER_APP_NAME)).isTrue();
|
||||
@@ -301,4 +306,45 @@ public class SetNewPasswordActivityTest {
|
||||
PKG_NAME,
|
||||
Integer.MIN_VALUE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
public void launchChooseLock_callingAppIsAdmin_setsAdminExtra() {
|
||||
SetNewPasswordActivity activity =
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class).get();
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
(DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
Shadows.shadowOf(devicePolicyManager).setActiveAdmin(buildTestComponentName(PKG_NAME));
|
||||
ShadowPasswordUtils.setCallingAppPackageName(PKG_NAME);
|
||||
|
||||
activity.launchChooseLock(new Bundle());
|
||||
|
||||
Intent intent = getLaunchChooseLockIntent(Shadows.shadowOf(activity));
|
||||
assertThat(intent.hasExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
public void launchChooseLock_callingAppIsNotAdmin_doesNotSetAdminExtra() {
|
||||
SetNewPasswordActivity activity =
|
||||
Robolectric.buildActivity(SetNewPasswordActivity.class).get();
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
(DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
Shadows.shadowOf(devicePolicyManager)
|
||||
.setActiveAdmin(buildTestComponentName("other_pkg_name"));
|
||||
ShadowPasswordUtils.setCallingAppPackageName(PKG_NAME);
|
||||
|
||||
activity.launchChooseLock(new Bundle());
|
||||
|
||||
Intent intent = getLaunchChooseLockIntent(Shadows.shadowOf(activity));
|
||||
assertThat(intent.hasExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN)).isFalse();
|
||||
}
|
||||
|
||||
private ComponentName buildTestComponentName(String packageName) {
|
||||
return new ComponentName(packageName, "clazz");
|
||||
}
|
||||
|
||||
private Intent getLaunchChooseLockIntent(ShadowActivity shadowActivity) {
|
||||
return shadowActivity.getNextStartedActivityForResult().intent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,16 +22,24 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
|
||||
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
|
||||
|
||||
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;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.androidx.fragment.FragmentController;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = ShadowRestrictedLockUtilsInternal.class)
|
||||
public class SeekBarPreferenceTest {
|
||||
|
||||
private static final int MAX = 75;
|
||||
@@ -73,9 +81,39 @@ public class SeekBarPreferenceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isSelectable_notDisabledByAdmin_returnFalse() {
|
||||
when(mSeekBarPreference.isDisabledByAdmin()).thenReturn(false);
|
||||
@Config(qualifiers = "mcc998")
|
||||
public void isSelectable_default_returnFalse() {
|
||||
final PreferenceFragmentCompat fragment = FragmentController.of(new TestFragment(),
|
||||
new Bundle())
|
||||
.create()
|
||||
.start()
|
||||
.resume()
|
||||
.get();
|
||||
|
||||
assertThat(mSeekBarPreference.isSelectable()).isFalse();
|
||||
final SeekBarPreference seekBarPreference = fragment.findPreference("seek_bar");
|
||||
|
||||
assertThat(seekBarPreference.isSelectable()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc999")
|
||||
public void isSelectable_selectableInXml_returnTrue() {
|
||||
final PreferenceFragmentCompat fragment = FragmentController.of(new TestFragment(),
|
||||
new Bundle())
|
||||
.create()
|
||||
.start()
|
||||
.resume()
|
||||
.get();
|
||||
|
||||
final SeekBarPreference seekBarPreference = fragment.findPreference("seek_bar");
|
||||
|
||||
assertThat(seekBarPreference.isSelectable()).isTrue();
|
||||
}
|
||||
|
||||
public static class TestFragment extends PreferenceFragmentCompat {
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
addPreferencesFromResource(com.android.settings.R.xml.seekbar_preference);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user