Allow Device Management Role Holder to update Settings strings.
Test: manual Bug: 188414370 Change-Id: I6e1a06619799a9e99382d791e72e2e4518f93cac
This commit is contained in:
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
|
||||||
|
|
||||||
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
@@ -23,6 +26,7 @@ import android.accounts.AccountManager;
|
|||||||
import android.accounts.AuthenticatorDescription;
|
import android.accounts.AuthenticatorDescription;
|
||||||
import android.app.ActionBar;
|
import android.app.ActionBar;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
@@ -491,8 +495,17 @@ public class MainClear extends InstrumentedFragment implements OnGlobalLayoutLis
|
|||||||
if (profilesSize > 1) {
|
if (profilesSize > 1) {
|
||||||
View titleView = Utils.inflateCategoryHeader(inflater, contents);
|
View titleView = Utils.inflateCategoryHeader(inflater, contents);
|
||||||
final TextView titleText = (TextView) titleView.findViewById(android.R.id.title);
|
final TextView titleText = (TextView) titleView.findViewById(android.R.id.title);
|
||||||
titleText.setText(userInfo.isManagedProfile() ? R.string.category_work
|
|
||||||
: R.string.category_personal);
|
DevicePolicyManager devicePolicyManager =
|
||||||
|
context.getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
|
if (userInfo.isManagedProfile()) {
|
||||||
|
titleText.setText(devicePolicyManager.getString(
|
||||||
|
WORK_CATEGORY_HEADER, () -> getString(R.string.category_work)));
|
||||||
|
} else {
|
||||||
|
titleText.setText(devicePolicyManager.getString(
|
||||||
|
PERSONAL_CATEGORY_HEADER, () -> getString(R.string.category_personal)));
|
||||||
|
}
|
||||||
contents.addView(titleView);
|
contents.addView(titleView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,6 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARE_REMOTE_BUGREPORT_DIALOG_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARE_REMOTE_BUGREPORT_FINISHED_REQUEST_CONSENT;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARE_REMOTE_BUGREPORT_NOT_FINISHED_REQUEST_CONSENT;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SHARING_REMOTE_BUGREPORT_MESSAGE;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -42,12 +47,16 @@ public class RemoteBugreportActivity extends Activity {
|
|||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
final int notificationType = getIntent().getIntExtra(
|
final int notificationType = getIntent().getIntExtra(
|
||||||
DevicePolicyManager.EXTRA_BUGREPORT_NOTIFICATION_TYPE, -1);
|
DevicePolicyManager.EXTRA_BUGREPORT_NOTIFICATION_TYPE, -1);
|
||||||
|
|
||||||
if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) {
|
if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) {
|
||||||
AlertDialog dialog = new AlertDialog.Builder(this)
|
AlertDialog dialog = new AlertDialog.Builder(this)
|
||||||
.setMessage(R.string.sharing_remote_bugreport_dialog_message)
|
.setMessage(devicePolicyManager.getString(
|
||||||
|
SHARING_REMOTE_BUGREPORT_MESSAGE,
|
||||||
|
() -> getString(R.string.sharing_remote_bugreport_dialog_message)))
|
||||||
.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onDismiss(DialogInterface dialog) {
|
public void onDismiss(DialogInterface dialog) {
|
||||||
@@ -65,12 +74,21 @@ public class RemoteBugreportActivity extends Activity {
|
|||||||
} else if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
} else if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
||||||
|| notificationType
|
|| notificationType
|
||||||
== DevicePolicyManager.NOTIFICATION_BUGREPORT_FINISHED_NOT_ACCEPTED) {
|
== DevicePolicyManager.NOTIFICATION_BUGREPORT_FINISHED_NOT_ACCEPTED) {
|
||||||
AlertDialog dialog = new AlertDialog.Builder(this)
|
|
||||||
.setTitle(R.string.share_remote_bugreport_dialog_title)
|
int defaultMessageId = notificationType
|
||||||
.setMessage(notificationType
|
|
||||||
== DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
== DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
||||||
? R.string.share_remote_bugreport_dialog_message
|
? R.string.share_remote_bugreport_dialog_message
|
||||||
: R.string.share_remote_bugreport_dialog_message_finished)
|
: R.string.share_remote_bugreport_dialog_message_finished;
|
||||||
|
String overrideMessageId = notificationType
|
||||||
|
== DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
||||||
|
? SHARE_REMOTE_BUGREPORT_NOT_FINISHED_REQUEST_CONSENT
|
||||||
|
: SHARE_REMOTE_BUGREPORT_FINISHED_REQUEST_CONSENT;
|
||||||
|
|
||||||
|
AlertDialog dialog = new AlertDialog.Builder(this)
|
||||||
|
.setTitle(devicePolicyManager.getString(SHARE_REMOTE_BUGREPORT_DIALOG_TITLE,
|
||||||
|
() -> getString(R.string.share_remote_bugreport_dialog_title)))
|
||||||
|
.setMessage(devicePolicyManager.getString(overrideMessageId,
|
||||||
|
() -> getString(defaultMessageId)))
|
||||||
.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onDismiss(DialogInterface dialog) {
|
public void onDismiss(DialogInterface dialog) {
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
|
||||||
import static android.widget.LinearLayout.LayoutParams.MATCH_PARENT;
|
import static android.widget.LinearLayout.LayoutParams.MATCH_PARENT;
|
||||||
import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT;
|
import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT;
|
||||||
|
|
||||||
@@ -82,6 +84,7 @@ public class TrustedCredentialsSettings extends InstrumentedFragment
|
|||||||
|
|
||||||
private static final String TAG = "TrustedCredentialsSettings";
|
private static final String TAG = "TrustedCredentialsSettings";
|
||||||
|
|
||||||
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
private KeyguardManager mKeyguardManager;
|
private KeyguardManager mKeyguardManager;
|
||||||
private int mTrustAllCaUserId;
|
private int mTrustAllCaUserId;
|
||||||
@@ -179,6 +182,7 @@ public class TrustedCredentialsSettings extends InstrumentedFragment
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
final Activity activity = getActivity();
|
final Activity activity = getActivity();
|
||||||
|
mDevicePolicyManager = activity.getSystemService(DevicePolicyManager.class);
|
||||||
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
|
||||||
mKeyguardManager = (KeyguardManager) activity
|
mKeyguardManager = (KeyguardManager) activity
|
||||||
.getSystemService(Context.KEYGUARD_SERVICE);
|
.getSystemService(Context.KEYGUARD_SERVICE);
|
||||||
@@ -385,9 +389,12 @@ public class TrustedCredentialsSettings extends InstrumentedFragment
|
|||||||
|
|
||||||
final TextView title = (TextView) convertView.findViewById(android.R.id.title);
|
final TextView title = (TextView) convertView.findViewById(android.R.id.title);
|
||||||
if (getUserInfoByGroup(groupPosition).isManagedProfile()) {
|
if (getUserInfoByGroup(groupPosition).isManagedProfile()) {
|
||||||
title.setText(R.string.category_work);
|
title.setText(mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
|
||||||
|
() -> getString(R.string.category_work)));
|
||||||
} else {
|
} else {
|
||||||
title.setText(R.string.category_personal);
|
title.setText(mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
|
||||||
|
() -> getString(R.string.category_personal)));
|
||||||
|
|
||||||
}
|
}
|
||||||
title.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
|
title.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
|
||||||
|
|
||||||
|
@@ -16,6 +16,14 @@
|
|||||||
|
|
||||||
package com.android.settings.accounts;
|
package com.android.settings.accounts;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_CATEGORY_PERSONAL;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_CATEGORY_WORK;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_BY;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_PROFILE_SETTINGS_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_WORK_PROFILE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOT_AVAILABLE;
|
||||||
import static android.content.Intent.EXTRA_USER;
|
import static android.content.Intent.EXTRA_USER;
|
||||||
import static android.os.UserManager.DISALLOW_MODIFY_ACCOUNTS;
|
import static android.os.UserManager.DISALLOW_MODIFY_ACCOUNTS;
|
||||||
import static android.os.UserManager.DISALLOW_REMOVE_MANAGED_PROFILE;
|
import static android.os.UserManager.DISALLOW_REMOVE_MANAGED_PROFILE;
|
||||||
@@ -24,6 +32,7 @@ import static android.provider.Settings.EXTRA_AUTHORITIES;
|
|||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -85,6 +94,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
private static final String PREF_KEY_WORK_PROFILE_SETTING = "work_profile_setting";
|
private static final String PREF_KEY_WORK_PROFILE_SETTING = "work_profile_setting";
|
||||||
|
|
||||||
private UserManager mUm;
|
private UserManager mUm;
|
||||||
|
private DevicePolicyManager mDpm;
|
||||||
private SparseArray<ProfileData> mProfiles = new SparseArray<ProfileData>();
|
private SparseArray<ProfileData> mProfiles = new SparseArray<ProfileData>();
|
||||||
private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver =
|
private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver =
|
||||||
new ManagedProfileBroadcastReceiver();
|
new ManagedProfileBroadcastReceiver();
|
||||||
@@ -146,6 +156,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
@ProfileSelectFragment.ProfileType int type) {
|
@ProfileSelectFragment.ProfileType int type) {
|
||||||
super(context);
|
super(context);
|
||||||
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
|
mDpm = context.getSystemService(DevicePolicyManager.class);
|
||||||
mAuthorities = authorities;
|
mAuthorities = authorities;
|
||||||
mFragment = parent;
|
mFragment = parent;
|
||||||
if (mAuthorities != null) {
|
if (mAuthorities != null) {
|
||||||
@@ -188,13 +199,16 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
UserHandle.myUserId())) {
|
UserHandle.myUserId())) {
|
||||||
final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
||||||
data.key = PREF_KEY_REMOVE_PROFILE;
|
data.key = PREF_KEY_REMOVE_PROFILE;
|
||||||
data.title = res.getString(R.string.remove_managed_profile_label);
|
data.title = mDpm.getString(
|
||||||
|
REMOVE_WORK_PROFILE,
|
||||||
|
() -> res.getString(R.string.remove_managed_profile_label));
|
||||||
data.screenTitle = screenTitle;
|
data.screenTitle = screenTitle;
|
||||||
rawData.add(data);
|
rawData.add(data);
|
||||||
}
|
}
|
||||||
final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
||||||
data.key = PREF_KEY_WORK_PROFILE_SETTING;
|
data.key = PREF_KEY_WORK_PROFILE_SETTING;
|
||||||
data.title = res.getString(R.string.managed_profile_settings_title);
|
data.title = mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
|
||||||
|
() -> res.getString(R.string.managed_profile_settings_title));
|
||||||
data.screenTitle = screenTitle;
|
data.screenTitle = screenTitle;
|
||||||
rawData.add(data);
|
rawData.add(data);
|
||||||
}
|
}
|
||||||
@@ -253,7 +267,8 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
new SubSettingLauncher(mContext)
|
new SubSettingLauncher(mContext)
|
||||||
.setSourceMetricsCategory(metricsCategory)
|
.setSourceMetricsCategory(metricsCategory)
|
||||||
.setDestination(ManagedProfileSettings.class.getName())
|
.setDestination(ManagedProfileSettings.class.getName())
|
||||||
.setTitleRes(R.string.managed_profile_settings_title)
|
.setTitleText(mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
|
||||||
|
() -> mContext.getString(R.string.managed_profile_settings_title)))
|
||||||
.setArguments(arguments)
|
.setArguments(arguments)
|
||||||
.launch();
|
.launch();
|
||||||
|
|
||||||
@@ -331,11 +346,15 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
preferenceGroup.setContentDescription(title);
|
preferenceGroup.setContentDescription(title);
|
||||||
} else if (userInfo.isManagedProfile()) {
|
} else if (userInfo.isManagedProfile()) {
|
||||||
if (mType == ProfileSelectFragment.ProfileType.ALL) {
|
if (mType == ProfileSelectFragment.ProfileType.ALL) {
|
||||||
preferenceGroup.setTitle(R.string.category_work);
|
preferenceGroup.setTitle(
|
||||||
|
mDpm.getString(WORK_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_work)));
|
||||||
final String workGroupSummary = getWorkGroupSummary(context, userInfo);
|
final String workGroupSummary = getWorkGroupSummary(context, userInfo);
|
||||||
preferenceGroup.setSummary(workGroupSummary);
|
preferenceGroup.setSummary(workGroupSummary);
|
||||||
preferenceGroup.setContentDescription(
|
preferenceGroup.setContentDescription(
|
||||||
mContext.getString(R.string.accessibility_category_work, workGroupSummary));
|
mDpm.getString(ACCESSIBILITY_CATEGORY_WORK, () ->
|
||||||
|
mContext.getString(
|
||||||
|
R.string.accessibility_category_work, workGroupSummary)));
|
||||||
}
|
}
|
||||||
profileData.removeWorkProfilePreference = newRemoveWorkProfilePreference();
|
profileData.removeWorkProfilePreference = newRemoveWorkProfilePreference();
|
||||||
mHelper.enforceRestrictionOnPreference(profileData.removeWorkProfilePreference,
|
mHelper.enforceRestrictionOnPreference(profileData.removeWorkProfilePreference,
|
||||||
@@ -343,9 +362,12 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
profileData.managedProfilePreference = newManagedProfileSettings();
|
profileData.managedProfilePreference = newManagedProfileSettings();
|
||||||
} else {
|
} else {
|
||||||
if (mType == ProfileSelectFragment.ProfileType.ALL) {
|
if (mType == ProfileSelectFragment.ProfileType.ALL) {
|
||||||
preferenceGroup.setTitle(R.string.category_personal);
|
preferenceGroup.setTitle(
|
||||||
|
mDpm.getString(PERSONAL_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_personal)));
|
||||||
preferenceGroup.setContentDescription(
|
preferenceGroup.setContentDescription(
|
||||||
mContext.getString(R.string.accessibility_category_personal));
|
mDpm.getString(ACCESSIBILITY_CATEGORY_PERSONAL, () ->
|
||||||
|
mContext.getString(R.string.accessibility_category_personal)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final PreferenceScreen screen = mFragment.getPreferenceScreen();
|
final PreferenceScreen screen = mFragment.getPreferenceScreen();
|
||||||
@@ -378,7 +400,9 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
RestrictedPreference preference = new RestrictedPreference(
|
RestrictedPreference preference = new RestrictedPreference(
|
||||||
mFragment.getPreferenceManager().getContext());
|
mFragment.getPreferenceManager().getContext());
|
||||||
preference.setKey(PREF_KEY_REMOVE_PROFILE);
|
preference.setKey(PREF_KEY_REMOVE_PROFILE);
|
||||||
preference.setTitle(R.string.remove_managed_profile_label);
|
preference.setTitle(
|
||||||
|
mDpm.getString(REMOVE_WORK_PROFILE,
|
||||||
|
() -> mContext.getString(R.string.remove_managed_profile_label)));
|
||||||
preference.setIcon(R.drawable.ic_delete);
|
preference.setIcon(R.drawable.ic_delete);
|
||||||
preference.setOnPreferenceClickListener(this);
|
preference.setOnPreferenceClickListener(this);
|
||||||
preference.setOrder(ORDER_LAST);
|
preference.setOrder(ORDER_LAST);
|
||||||
@@ -389,7 +413,8 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
private Preference newManagedProfileSettings() {
|
private Preference newManagedProfileSettings() {
|
||||||
Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
|
Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
|
||||||
preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);
|
preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);
|
||||||
preference.setTitle(R.string.managed_profile_settings_title);
|
preference.setTitle(mDpm.getString(MANAGED_PROFILE_SETTINGS_TITLE,
|
||||||
|
() -> mContext.getString(R.string.managed_profile_settings_title)));
|
||||||
preference.setIcon(R.drawable.ic_settings_24dp);
|
preference.setIcon(R.drawable.ic_settings_24dp);
|
||||||
preference.setOnPreferenceClickListener(this);
|
preference.setOnPreferenceClickListener(this);
|
||||||
preference.setOrder(ORDER_NEXT_TO_LAST);
|
preference.setOrder(ORDER_NEXT_TO_LAST);
|
||||||
@@ -403,7 +428,8 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
CharSequence appLabel = packageManager.getApplicationLabel(adminApplicationInfo);
|
CharSequence appLabel = packageManager.getApplicationLabel(adminApplicationInfo);
|
||||||
return mContext.getString(R.string.managing_admin, appLabel);
|
return mDpm.getString(MANAGED_BY,
|
||||||
|
() -> mContext.getString(R.string.managing_admin, appLabel), appLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cleanUpPreferences() {
|
void cleanUpPreferences() {
|
||||||
@@ -482,7 +508,9 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
|||||||
mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon);
|
mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon);
|
||||||
mProfileNotAvailablePreference.setTitle(null);
|
mProfileNotAvailablePreference.setTitle(null);
|
||||||
mProfileNotAvailablePreference.setSummary(
|
mProfileNotAvailablePreference.setSummary(
|
||||||
R.string.managed_profile_not_available_label);
|
mDpm.getString(
|
||||||
|
WORK_PROFILE_NOT_AVAILABLE, () -> mContext.getString(
|
||||||
|
R.string.managed_profile_not_available_label)));
|
||||||
profileData.preferenceGroup.addPreference(mProfileNotAvailablePreference);
|
profileData.preferenceGroup.addPreference(mProfileNotAvailablePreference);
|
||||||
}
|
}
|
||||||
if (profileData.removeWorkProfilePreference != null) {
|
if (profileData.removeWorkProfilePreference != null) {
|
||||||
|
@@ -16,10 +16,14 @@
|
|||||||
|
|
||||||
package com.android.settings.accounts;
|
package com.android.settings.accounts;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_PERSONAL_ACCOUNT_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACCESSIBILITY_WORK_ACCOUNT_TITLE;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -154,10 +158,20 @@ public class AccountSyncSettings extends AccountPreferenceBase {
|
|||||||
UserInfo user = um.getUserInfo(mUserHandle.getIdentifier());
|
UserInfo user = um.getUserInfo(mUserHandle.getIdentifier());
|
||||||
boolean isWorkProfile = user != null ? user.isManagedProfile() : false;
|
boolean isWorkProfile = user != null ? user.isManagedProfile() : false;
|
||||||
CharSequence currentTitle = getActivity().getTitle();
|
CharSequence currentTitle = getActivity().getTitle();
|
||||||
|
|
||||||
|
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
String accessibilityTitle =
|
String accessibilityTitle =
|
||||||
getString(isWorkProfile
|
isWorkProfile
|
||||||
? R.string.accessibility_work_account_title
|
? devicePolicyManager.getString(ACCESSIBILITY_WORK_ACCOUNT_TITLE,
|
||||||
: R.string.accessibility_personal_account_title, currentTitle);
|
() -> getString(R.string.accessibility_work_account_title,
|
||||||
|
currentTitle), currentTitle)
|
||||||
|
: devicePolicyManager.getString(
|
||||||
|
ACCESSIBILITY_PERSONAL_ACCOUNT_TITLE,
|
||||||
|
() -> getString(
|
||||||
|
R.string.accessibility_personal_account_title,
|
||||||
|
currentTitle), currentTitle);
|
||||||
|
|
||||||
getActivity().setTitle(Utils.createAccessibleSequence(currentTitle, accessibilityTitle));
|
getActivity().setTitle(Utils.createAccessibleSequence(currentTitle, accessibilityTitle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,12 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.accounts;
|
package com.android.settings.accounts;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_ACCOUNT_FAILED_ADMIN_RESTRICTION;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.accounts.AuthenticatorException;
|
import android.accounts.AuthenticatorException;
|
||||||
import android.accounts.OperationCanceledException;
|
import android.accounts.OperationCanceledException;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
@@ -213,7 +216,9 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl
|
|||||||
|
|
||||||
return new AlertDialog.Builder(context)
|
return new AlertDialog.Builder(context)
|
||||||
.setTitle(R.string.remove_account_label)
|
.setTitle(R.string.remove_account_label)
|
||||||
.setMessage(R.string.remove_account_failed)
|
.setMessage(getContext().getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(REMOVE_ACCOUNT_FAILED_ADMIN_RESTRICTION,
|
||||||
|
() -> getString(R.string.remove_account_failed)))
|
||||||
.setPositiveButton(android.R.string.ok, null)
|
.setPositiveButton(android.R.string.ok, null)
|
||||||
.create();
|
.create();
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.accounts;
|
package com.android.settings.accounts;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SETTING_OFF_SUMMARY;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SETTING_ON_SUMMARY;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -40,6 +44,7 @@ public class WorkModePreferenceController extends BasePreferenceController imple
|
|||||||
|
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
private UserHandle mManagedUser;
|
private UserHandle mManagedUser;
|
||||||
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private IntentFilter mIntentFilter;
|
private IntentFilter mIntentFilter;
|
||||||
@@ -47,6 +52,7 @@ public class WorkModePreferenceController extends BasePreferenceController imple
|
|||||||
public WorkModePreferenceController(Context context, String key) {
|
public WorkModePreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
|
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||||
mIntentFilter = new IntentFilter();
|
mIntentFilter = new IntentFilter();
|
||||||
mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
|
mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
|
||||||
mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
|
mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
|
||||||
@@ -80,9 +86,15 @@ public class WorkModePreferenceController extends BasePreferenceController imple
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CharSequence getSummary() {
|
public CharSequence getSummary() {
|
||||||
return mContext.getText(isChecked()
|
if (isChecked()) {
|
||||||
? R.string.work_mode_on_summary
|
return mDevicePolicyManager
|
||||||
: R.string.work_mode_off_summary);
|
.getString(WORK_PROFILE_SETTING_ON_SUMMARY,
|
||||||
|
() -> mContext.getString(R.string.work_mode_on_summary));
|
||||||
|
}
|
||||||
|
|
||||||
|
return mDevicePolicyManager
|
||||||
|
.getString(WORK_PROFILE_SETTING_OFF_SUMMARY,
|
||||||
|
() -> mContext.getString(R.string.work_mode_off_summary));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isChecked() {
|
private boolean isChecked() {
|
||||||
|
@@ -219,7 +219,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void startAppInfoFragment(Class<?> fragment, int titleRes,
|
public static void startAppInfoFragment(Class<?> fragment, String title,
|
||||||
String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
|
String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
|
||||||
final Bundle args = new Bundle();
|
final Bundle args = new Bundle();
|
||||||
args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
|
args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
|
||||||
@@ -228,7 +228,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
|
|||||||
new SubSettingLauncher(source.getContext())
|
new SubSettingLauncher(source.getContext())
|
||||||
.setDestination(fragment.getName())
|
.setDestination(fragment.getName())
|
||||||
.setSourceMetricsCategory(sourceMetricsCategory)
|
.setSourceMetricsCategory(sourceMetricsCategory)
|
||||||
.setTitleRes(titleRes)
|
.setTitleText(title)
|
||||||
.setArguments(args)
|
.setArguments(args)
|
||||||
.setUserHandle(new UserHandle(UserHandle.getUserId(uid)))
|
.setUserHandle(new UserHandle(UserHandle.getUserId(uid)))
|
||||||
.setResultListener(source, request)
|
.setResultListener(source, request)
|
||||||
|
@@ -211,7 +211,8 @@ public class AppsPreferenceController extends BasePreferenceController implement
|
|||||||
pref.setOrder(showAppsCount++);
|
pref.setOrder(showAppsCount++);
|
||||||
pref.setOnPreferenceClickListener(preference -> {
|
pref.setOnPreferenceClickListener(preference -> {
|
||||||
AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
|
AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
|
||||||
R.string.application_info_label, pkgName, appEntry.info.uid,
|
mContext.getString(R.string.application_info_label),
|
||||||
|
pkgName, appEntry.info.uid,
|
||||||
mHost, 1001 /*RequestCode*/, getMetricsCategory());
|
mHost, 1001 /*RequestCode*/, getMetricsCategory());
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
@@ -17,6 +17,7 @@ package com.android.settings.applications;
|
|||||||
|
|
||||||
import static android.app.AppOpsManager.OP_GET_USAGE_STATS;
|
import static android.app.AppOpsManager.OP_GET_USAGE_STATS;
|
||||||
import static android.app.AppOpsManager.OP_LOADER_USAGE_STATS;
|
import static android.app.AppOpsManager.OP_LOADER_USAGE_STATS;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
@@ -96,7 +97,8 @@ public class UsageAccessDetails extends AppInfoWithHeader implements OnPreferenc
|
|||||||
new AlertDialog.Builder(getContext())
|
new AlertDialog.Builder(getContext())
|
||||||
.setIcon(com.android.internal.R.drawable.ic_dialog_alert_material)
|
.setIcon(com.android.internal.R.drawable.ic_dialog_alert_material)
|
||||||
.setTitle(android.R.string.dialog_alert_title)
|
.setTitle(android.R.string.dialog_alert_title)
|
||||||
.setMessage(R.string.work_profile_usage_access_warning)
|
.setMessage(mDpm.getString(WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING,
|
||||||
|
() -> getString(R.string.work_profile_usage_access_warning)))
|
||||||
.setPositiveButton(R.string.okay, null)
|
.setPositiveButton(R.string.okay, null)
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
@@ -645,8 +645,8 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void startAppInfoFragment(Class<?> fragment, int titleRes) {
|
private void startAppInfoFragment(Class<?> fragment, int titleRes) {
|
||||||
AppInfoBase.startAppInfoFragment(fragment, titleRes, mCurrentPkgName, mCurrentUid, this,
|
AppInfoBase.startAppInfoFragment(fragment, getString(titleRes), mCurrentPkgName,
|
||||||
INSTALLED_APP_DETAILS, getMetricsCategory());
|
mCurrentUid, this, INSTALLED_APP_DETAILS, getMetricsCategory());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -70,7 +70,8 @@ public class DomainAppPreferenceController extends BasePreferenceController impl
|
|||||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
public boolean handlePreferenceTreeClick(Preference preference) {
|
||||||
if (preference instanceof DomainAppPreference) {
|
if (preference instanceof DomainAppPreference) {
|
||||||
ApplicationsState.AppEntry entry = ((DomainAppPreference) preference).getEntry();
|
ApplicationsState.AppEntry entry = ((DomainAppPreference) preference).getEntry();
|
||||||
AppInfoBase.startAppInfoFragment(AppLaunchSettings.class, R.string.auto_launch_label,
|
AppInfoBase.startAppInfoFragment(AppLaunchSettings.class,
|
||||||
|
mContext.getString(R.string.auto_launch_label),
|
||||||
entry.info.packageName, entry.info.uid, mFragment,
|
entry.info.packageName, entry.info.uid, mFragment,
|
||||||
INSTALLED_APP_DETAILS, mMetricsCategory);
|
INSTALLED_APP_DETAILS, mMetricsCategory);
|
||||||
return true;
|
return true;
|
||||||
|
@@ -17,6 +17,18 @@
|
|||||||
package com.android.settings.applications.specialaccess.deviceadmin;
|
package com.android.settings.applications.specialaccess.deviceadmin;
|
||||||
|
|
||||||
import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
|
import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACTIVATE_DEVICE_ADMIN_APP;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACTIVATE_THIS_DEVICE_ADMIN_APP;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ACTIVE_DEVICE_ADMIN_WARNING;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.DEVICE_ADMIN_POLICIES_WARNING;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.NEW_DEVICE_ADMIN_WARNING;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_AND_UNINSTALL_DEVICE_ADMIN;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_DEVICE_ADMIN;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REMOVE_WORK_PROFILE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_PROFILE_OWNER_DIALOG_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.USER_ADMIN_POLICIES_WARNING;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_ADMIN_POLICIES_WARNING;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
@@ -318,7 +330,8 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
|||||||
|
|
||||||
// Build and show the simplified dialog
|
// Build and show the simplified dialog
|
||||||
final Dialog dialog = new AlertDialog.Builder(this)
|
final Dialog dialog = new AlertDialog.Builder(this)
|
||||||
.setTitle(getText(R.string.profile_owner_add_title_simplified))
|
.setTitle(mDPM.getString(SET_PROFILE_OWNER_DIALOG_TITLE,
|
||||||
|
() -> getString(R.string.profile_owner_add_title_simplified)))
|
||||||
.setView(R.layout.profile_owner_add)
|
.setView(R.layout.profile_owner_add)
|
||||||
.setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
|
.setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
@@ -339,8 +352,10 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
|||||||
mAddMsg = dialog.findViewById(R.id.add_msg_simplified);
|
mAddMsg = dialog.findViewById(R.id.add_msg_simplified);
|
||||||
mAddMsg.setText(mAddMsgText);
|
mAddMsg.setText(mAddMsgText);
|
||||||
mAdminWarning = dialog.findViewById(R.id.admin_warning_simplified);
|
mAdminWarning = dialog.findViewById(R.id.admin_warning_simplified);
|
||||||
mAdminWarning.setText(getString(R.string.device_admin_warning_simplified,
|
mAdminWarning.setText(
|
||||||
mProfileOwnerName));
|
mDPM.getString(NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED, () ->
|
||||||
|
getString(R.string.device_admin_warning_simplified,
|
||||||
|
mProfileOwnerName), mProfileOwnerName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setContentView(R.layout.device_admin_add);
|
setContentView(R.layout.device_admin_add);
|
||||||
@@ -655,8 +670,10 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
|||||||
final boolean isManagedProfile = isManagedProfile(mDeviceAdmin);
|
final boolean isManagedProfile = isManagedProfile(mDeviceAdmin);
|
||||||
if (isProfileOwner && isManagedProfile) {
|
if (isProfileOwner && isManagedProfile) {
|
||||||
// Profile owner in a managed profile, user can remove profile to disable admin.
|
// Profile owner in a managed profile, user can remove profile to disable admin.
|
||||||
mAdminWarning.setText(R.string.admin_profile_owner_message);
|
mAdminWarning.setText(mDPM.getString(WORK_PROFILE_ADMIN_POLICIES_WARNING,
|
||||||
mActionButton.setText(R.string.remove_managed_profile_label);
|
() -> getString(R.string.admin_profile_owner_message)));
|
||||||
|
mActionButton.setText(mDPM.getString(REMOVE_WORK_PROFILE,
|
||||||
|
() -> getString(R.string.remove_managed_profile_label)));
|
||||||
|
|
||||||
final EnforcedAdmin admin = getAdminEnforcingCantRemoveProfile();
|
final EnforcedAdmin admin = getAdminEnforcingCantRemoveProfile();
|
||||||
final boolean hasBaseRestriction = hasBaseCantRemoveProfileRestriction();
|
final boolean hasBaseRestriction = hasBaseCantRemoveProfileRestriction();
|
||||||
@@ -670,27 +687,33 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
|||||||
// Profile owner in a user or device owner, user can't disable admin.
|
// Profile owner in a user or device owner, user can't disable admin.
|
||||||
if (isProfileOwner) {
|
if (isProfileOwner) {
|
||||||
// Show profile owner in a user description.
|
// Show profile owner in a user description.
|
||||||
mAdminWarning.setText(R.string.admin_profile_owner_user_message);
|
mAdminWarning.setText(mDPM.getString(USER_ADMIN_POLICIES_WARNING,
|
||||||
|
() -> getString(R.string.admin_profile_owner_user_message)));
|
||||||
} else {
|
} else {
|
||||||
// Show device owner description.
|
// Show device owner description.
|
||||||
if (isFinancedDevice()) {
|
if (isFinancedDevice()) {
|
||||||
mAdminWarning.setText(R.string.admin_financed_message);
|
mAdminWarning.setText(R.string.admin_financed_message);
|
||||||
} else {
|
} else {
|
||||||
mAdminWarning.setText(R.string.admin_device_owner_message);
|
mAdminWarning.setText(mDPM.getString(DEVICE_ADMIN_POLICIES_WARNING,
|
||||||
|
() -> getString(R.string.admin_device_owner_message)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mActionButton.setText(R.string.remove_device_admin);
|
mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
|
||||||
|
() -> getString(R.string.remove_device_admin)));
|
||||||
mActionButton.setEnabled(false);
|
mActionButton.setEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
addDeviceAdminPolicies(false /* showDescription */);
|
addDeviceAdminPolicies(false /* showDescription */);
|
||||||
mAdminWarning.setText(getString(R.string.device_admin_status,
|
CharSequence label = mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
|
||||||
mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
|
getPackageManager());
|
||||||
getPackageManager())));
|
mAdminWarning.setText(mDPM.getString(ACTIVE_DEVICE_ADMIN_WARNING,
|
||||||
|
() -> getString(R.string.device_admin_status, label), label));
|
||||||
setTitle(R.string.active_device_admin_msg);
|
setTitle(R.string.active_device_admin_msg);
|
||||||
if (mUninstalling) {
|
if (mUninstalling) {
|
||||||
mActionButton.setText(R.string.remove_and_uninstall_device_admin);
|
mActionButton.setText(mDPM.getString(REMOVE_AND_UNINSTALL_DEVICE_ADMIN,
|
||||||
|
() -> getString(R.string.remove_and_uninstall_device_admin)));
|
||||||
} else {
|
} else {
|
||||||
mActionButton.setText(R.string.remove_device_admin);
|
mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
|
||||||
|
() -> getString(R.string.remove_device_admin)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CharSequence supportMessage = mDPM.getLongSupportMessageForUser(
|
CharSequence supportMessage = mDPM.getLongSupportMessageForUser(
|
||||||
@@ -703,10 +726,16 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
addDeviceAdminPolicies(true /* showDescription */);
|
addDeviceAdminPolicies(true /* showDescription */);
|
||||||
mAdminWarning.setText(getString(R.string.device_admin_warning,
|
CharSequence label = mDeviceAdmin.getActivityInfo()
|
||||||
mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
|
.applicationInfo.loadLabel(getPackageManager());
|
||||||
setTitle(getText(R.string.add_device_admin_msg));
|
mAdminWarning.setText(
|
||||||
mActionButton.setText(getText(R.string.add_device_admin));
|
mDPM.getString(NEW_DEVICE_ADMIN_WARNING, () ->
|
||||||
|
getString(R.string.device_admin_warning, label
|
||||||
|
), label));
|
||||||
|
setTitle(mDPM.getString(ACTIVATE_DEVICE_ADMIN_APP,
|
||||||
|
() -> getString(R.string.add_device_admin_msg)));
|
||||||
|
mActionButton.setText(mDPM.getString(ACTIVATE_THIS_DEVICE_ADMIN_APP,
|
||||||
|
() -> getString(R.string.add_device_admin)));
|
||||||
if (isAdminUninstallable()) {
|
if (isAdminUninstallable()) {
|
||||||
mUninstallButton.setVisibility(View.VISIBLE);
|
mUninstallButton.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
@@ -15,6 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.applications.specialaccess.interactacrossprofiles;
|
package com.android.settings.applications.specialaccess.interactacrossprofiles;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.APP_CAN_ACCESS_PERSONAL_DATA;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.APP_CAN_ACCESS_PERSONAL_PERMISSIONS;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECT_APPS_DIALOG_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT;
|
||||||
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
|
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
|
||||||
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
|
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
|
||||||
import static android.provider.Settings.ACTION_MANAGE_CROSS_PROFILE_ACCESS;
|
import static android.provider.Settings.ACTION_MANAGE_CROSS_PROFILE_ACCESS;
|
||||||
@@ -258,16 +263,22 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
|||||||
|
|
||||||
final TextView dialogTitle = dialogView.findViewById(
|
final TextView dialogTitle = dialogView.findViewById(
|
||||||
R.id.interact_across_profiles_consent_dialog_title);
|
R.id.interact_across_profiles_consent_dialog_title);
|
||||||
dialogTitle.setText(
|
dialogTitle.setText(mDpm.getString(CONNECT_APPS_DIALOG_TITLE, () ->
|
||||||
getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel));
|
getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel)));
|
||||||
|
|
||||||
final TextView appDataSummary = dialogView.findViewById(R.id.app_data_summary);
|
final TextView appDataSummary = dialogView.findViewById(R.id.app_data_summary);
|
||||||
appDataSummary.setText(getString(
|
appDataSummary.setText(
|
||||||
R.string.interact_across_profiles_consent_dialog_app_data_summary, mAppLabel));
|
mDpm.getString(APP_CAN_ACCESS_PERSONAL_DATA,
|
||||||
|
() -> getString(
|
||||||
|
R.string.interact_across_profiles_consent_dialog_app_data_summary,
|
||||||
|
mAppLabel), mAppLabel));
|
||||||
|
|
||||||
final TextView permissionsSummary = dialogView.findViewById(R.id.permissions_summary);
|
final TextView permissionsSummary = dialogView.findViewById(R.id.permissions_summary);
|
||||||
permissionsSummary.setText(getString(
|
permissionsSummary.setText(mDpm.getString(APP_CAN_ACCESS_PERSONAL_PERMISSIONS,
|
||||||
R.string.interact_across_profiles_consent_dialog_permissions_summary, mAppLabel));
|
() -> getString(
|
||||||
|
R.string.interact_across_profiles_consent_dialog_permissions_summary,
|
||||||
|
mAppLabel),
|
||||||
|
mAppLabel));
|
||||||
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
builder.setView(dialogView)
|
builder.setView(dialogView)
|
||||||
@@ -393,8 +404,11 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!mInstalledInPersonal) {
|
if (!mInstalledInPersonal) {
|
||||||
mInstallBanner.setTitle(getString(
|
mInstallBanner.setTitle(
|
||||||
|
mDpm.getString(INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT,
|
||||||
|
() -> getString(
|
||||||
R.string.interact_across_profiles_install_personal_app_title,
|
R.string.interact_across_profiles_install_personal_app_title,
|
||||||
|
mAppLabel),
|
||||||
mAppLabel));
|
mAppLabel));
|
||||||
if (mInstallAppIntent != null) {
|
if (mInstallAppIntent != null) {
|
||||||
mInstallBanner.setSummary(
|
mInstallBanner.setSummary(
|
||||||
@@ -404,8 +418,11 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!mInstalledInWork) {
|
if (!mInstalledInWork) {
|
||||||
mInstallBanner.setTitle(getString(
|
mInstallBanner.setTitle(
|
||||||
|
mDpm.getString(INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT,
|
||||||
|
() -> getString(
|
||||||
R.string.interact_across_profiles_install_work_app_title,
|
R.string.interact_across_profiles_install_work_app_title,
|
||||||
|
mAppLabel),
|
||||||
mAppLabel));
|
mAppLabel));
|
||||||
if (mInstallAppIntent != null) {
|
if (mInstallAppIntent != null) {
|
||||||
mInstallBanner.setSummary(
|
mInstallBanner.setSummary(
|
||||||
|
@@ -15,9 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.applications.specialaccess.interactacrossprofiles;
|
package com.android.settings.applications.specialaccess.interactacrossprofiles;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONNECTED_WORK_AND_PERSONAL_APPS_TITLE;
|
||||||
import static android.content.pm.PackageManager.GET_ACTIVITIES;
|
import static android.content.pm.PackageManager.GET_ACTIVITIES;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
@@ -51,6 +53,7 @@ public class InteractAcrossProfilesSettings extends EmptyTextSettings {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PackageManager mPackageManager;
|
private PackageManager mPackageManager;
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
private CrossProfileApps mCrossProfileApps;
|
private CrossProfileApps mCrossProfileApps;
|
||||||
private IconDrawableFactory mIconDrawableFactory;
|
private IconDrawableFactory mIconDrawableFactory;
|
||||||
|
|
||||||
@@ -63,6 +66,7 @@ public class InteractAcrossProfilesSettings extends EmptyTextSettings {
|
|||||||
mUserManager = mContext.getSystemService(UserManager.class);
|
mUserManager = mContext.getSystemService(UserManager.class);
|
||||||
mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
|
mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
|
||||||
mCrossProfileApps = mContext.getSystemService(CrossProfileApps.class);
|
mCrossProfileApps = mContext.getSystemService(CrossProfileApps.class);
|
||||||
|
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -91,7 +95,8 @@ public class InteractAcrossProfilesSettings extends EmptyTextSettings {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
AppInfoBase.startAppInfoFragment(InteractAcrossProfilesDetails.class,
|
AppInfoBase.startAppInfoFragment(InteractAcrossProfilesDetails.class,
|
||||||
R.string.interact_across_profiles_title,
|
mDevicePolicyManager.getString(CONNECTED_WORK_AND_PERSONAL_APPS_TITLE,
|
||||||
|
() -> getString(R.string.interact_across_profiles_title)),
|
||||||
packageName,
|
packageName,
|
||||||
appInfo.uid,
|
appInfo.uid,
|
||||||
InteractAcrossProfilesSettings.this/* source */,
|
InteractAcrossProfilesSettings.this/* source */,
|
||||||
|
@@ -168,7 +168,8 @@ public class PictureInPictureSettings extends EmptyTextSettings {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
AppInfoBase.startAppInfoFragment(PictureInPictureDetails.class,
|
AppInfoBase.startAppInfoFragment(PictureInPictureDetails.class,
|
||||||
R.string.picture_in_picture_app_detail_title, packageName, appInfo.uid,
|
getString(R.string.picture_in_picture_app_detail_title),
|
||||||
|
packageName, appInfo.uid,
|
||||||
PictureInPictureSettings.this, -1, getMetricsCategory());
|
PictureInPictureSettings.this, -1, getMetricsCategory());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -88,9 +88,9 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
protected abstract int getHeaderResDefault();
|
protected abstract int getHeaderResDefault();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the description resource for if the biometric has been disabled by a device admin
|
* @return the description for if the biometric has been disabled by a device admin
|
||||||
*/
|
*/
|
||||||
protected abstract int getDescriptionResDisabledByAdmin();
|
protected abstract String getDescriptionDisabledByAdmin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the cancel button
|
* @return the cancel button
|
||||||
@@ -414,7 +414,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
|||||||
super.initViews();
|
super.initViews();
|
||||||
|
|
||||||
if (mBiometricUnlockDisabledByAdmin && !mParentalConsentRequired) {
|
if (mBiometricUnlockDisabledByAdmin && !mParentalConsentRequired) {
|
||||||
setDescriptionText(getDescriptionResDisabledByAdmin());
|
setDescriptionText(getDescriptionDisabledByAdmin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.face;
|
package com.android.settings.biometrics.face;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.FACE_UNLOCK_DISABLED;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -221,8 +223,11 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getDescriptionResDisabledByAdmin() {
|
protected String getDescriptionDisabledByAdmin() {
|
||||||
return R.string.security_settings_face_enroll_introduction_message_unlock_disabled;
|
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||||
|
return devicePolicyManager.getString(
|
||||||
|
FACE_UNLOCK_DISABLED,
|
||||||
|
() -> getString(R.string.security_settings_face_enroll_introduction_message_unlock_disabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.face;
|
package com.android.settings.biometrics.face;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.FACE_SETTINGS_FOR_WORK_TITLE;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
|
||||||
@@ -27,21 +30,26 @@ import com.android.settings.R;
|
|||||||
public class FaceProfileStatusPreferenceController extends FaceStatusPreferenceController {
|
public class FaceProfileStatusPreferenceController extends FaceStatusPreferenceController {
|
||||||
|
|
||||||
private static final String KEY_FACE_SETTINGS = "face_settings_profile";
|
private static final String KEY_FACE_SETTINGS = "face_settings_profile";
|
||||||
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public FaceProfileStatusPreferenceController(Context context) {
|
public FaceProfileStatusPreferenceController(Context context) {
|
||||||
super(context, KEY_FACE_SETTINGS);
|
super(context, KEY_FACE_SETTINGS);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FaceProfileStatusPreferenceController(Context context, String key) {
|
public FaceProfileStatusPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FaceProfileStatusPreferenceController(Context context, Lifecycle lifecycle) {
|
public FaceProfileStatusPreferenceController(Context context, Lifecycle lifecycle) {
|
||||||
super(context, KEY_FACE_SETTINGS, lifecycle);
|
super(context, KEY_FACE_SETTINGS, lifecycle);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FaceProfileStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
|
public FaceProfileStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
|
||||||
super(context, key, lifecycle);
|
super(context, key, lifecycle);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -70,7 +78,10 @@ public class FaceProfileStatusPreferenceController extends FaceStatusPreferenceC
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
preference.setTitle(mContext.getResources().getString(
|
|
||||||
R.string.security_settings_face_profile_preference_title));
|
preference.setTitle(
|
||||||
|
mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
|
||||||
|
mContext.getResources().getString(
|
||||||
|
R.string.security_settings_face_profile_preference_title)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,12 +17,14 @@
|
|||||||
package com.android.settings.biometrics.face;
|
package com.android.settings.biometrics.face;
|
||||||
|
|
||||||
import static android.app.Activity.RESULT_OK;
|
import static android.app.Activity.RESULT_OK;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.FACE_SETTINGS_FOR_WORK_TITLE;
|
||||||
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.CONFIRM_REQUEST;
|
import static com.android.settings.biometrics.BiometricEnrollBase.CONFIRM_REQUEST;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.ENROLL_REQUEST;
|
import static com.android.settings.biometrics.BiometricEnrollBase.ENROLL_REQUEST;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -66,6 +68,7 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
|
|
||||||
private UserManager mUserManager;
|
private UserManager mUserManager;
|
||||||
private FaceManager mFaceManager;
|
private FaceManager mFaceManager;
|
||||||
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
private int mUserId;
|
private int mUserId;
|
||||||
private int mSensorId;
|
private int mSensorId;
|
||||||
private long mChallenge;
|
private long mChallenge;
|
||||||
@@ -148,6 +151,7 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
|
|
||||||
mUserManager = context.getSystemService(UserManager.class);
|
mUserManager = context.getSystemService(UserManager.class);
|
||||||
mFaceManager = context.getSystemService(FaceManager.class);
|
mFaceManager = context.getSystemService(FaceManager.class);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
mToken = getIntent().getByteArrayExtra(KEY_TOKEN);
|
mToken = getIntent().getByteArrayExtra(KEY_TOKEN);
|
||||||
mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1);
|
mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1);
|
||||||
mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L);
|
mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L);
|
||||||
@@ -157,8 +161,10 @@ public class FaceSettings extends DashboardFragment {
|
|||||||
mFaceFeatureProvider = FeatureFactory.getFactory(getContext()).getFaceFeatureProvider();
|
mFaceFeatureProvider = FeatureFactory.getFactory(getContext()).getFaceFeatureProvider();
|
||||||
|
|
||||||
if (mUserManager.getUserInfo(mUserId).isManagedProfile()) {
|
if (mUserManager.getUserInfo(mUserId).isManagedProfile()) {
|
||||||
getActivity().setTitle(getActivity().getResources().getString(
|
getActivity().setTitle(
|
||||||
R.string.security_settings_face_profile_preference_title));
|
mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
|
||||||
|
getActivity().getResources().getString(
|
||||||
|
R.string.security_settings_face_profile_preference_title)));
|
||||||
}
|
}
|
||||||
|
|
||||||
mLockscreenController = Utils.isMultipleBiometricsSupported(context)
|
mLockscreenController = Utils.isMultipleBiometricsSupported(context)
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics.fingerprint;
|
package com.android.settings.biometrics.fingerprint;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_UNLOCK_DISABLED;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
@@ -57,6 +59,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
@Nullable private FooterButton mPrimaryFooterButton;
|
@Nullable private FooterButton mPrimaryFooterButton;
|
||||||
@Nullable private FooterButton mSecondaryFooterButton;
|
@Nullable private FooterButton mSecondaryFooterButton;
|
||||||
|
|
||||||
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
|
mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
|
||||||
@@ -68,6 +72,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
mDevicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
final ImageView iconFingerprint = findViewById(R.id.icon_fingerprint);
|
final ImageView iconFingerprint = findViewById(R.id.icon_fingerprint);
|
||||||
final ImageView iconDeviceLocked = findViewById(R.id.icon_device_locked);
|
final ImageView iconDeviceLocked = findViewById(R.id.icon_device_locked);
|
||||||
final ImageView iconTrashCan = findViewById(R.id.icon_trash_can);
|
final ImageView iconTrashCan = findViewById(R.id.icon_trash_can);
|
||||||
@@ -177,8 +183,10 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getDescriptionResDisabledByAdmin() {
|
protected String getDescriptionDisabledByAdmin() {
|
||||||
return R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled;
|
return mDevicePolicyManager.getString(
|
||||||
|
FINGERPRINT_UNLOCK_DISABLED,
|
||||||
|
() -> getString(R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -17,6 +17,10 @@
|
|||||||
package com.android.settings.biometrics.fingerprint;
|
package com.android.settings.biometrics.fingerprint;
|
||||||
|
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_UNLOCK_DISABLED_EXPLANATION;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE;
|
||||||
|
|
||||||
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -356,13 +360,24 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
activity, getString(getHelpResource()), activity.getClass().getName());
|
activity, getString(getHelpResource()), activity.getClass().getName());
|
||||||
final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
|
final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
|
||||||
activity, ANNOTATION_URL, helpIntent);
|
activity, ANNOTATION_URL, helpIntent);
|
||||||
mFooterTitle = AnnotationSpan.linkify(getText(admin != null
|
|
||||||
? R.string
|
if (admin != null) {
|
||||||
.security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled
|
DevicePolicyManager devicePolicyManager =
|
||||||
: R.string.security_settings_fingerprint_v2_home_screen),
|
getSystemService(DevicePolicyManager.class);
|
||||||
|
String footerText = devicePolicyManager.getString(
|
||||||
|
FINGERPRINT_UNLOCK_DISABLED_EXPLANATION,
|
||||||
|
() -> getString(R.string.security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled));
|
||||||
|
|
||||||
|
mFooterTitle = AnnotationSpan.linkify(footerText, linkInfo, adminLinkInfo);
|
||||||
|
} else {
|
||||||
|
mFooterTitle = AnnotationSpan.linkify(
|
||||||
|
getText(R.string.security_settings_fingerprint_v2_home_screen),
|
||||||
linkInfo, adminLinkInfo);
|
linkInfo, adminLinkInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isUdfps() {
|
private boolean isUdfps() {
|
||||||
for (FingerprintSensorPropertiesInternal prop : mSensorProperties) {
|
for (FingerprintSensorPropertiesInternal prop : mSensorProperties) {
|
||||||
if (prop.isAnyUdfpsType()) {
|
if (prop.isAnyUdfpsType()) {
|
||||||
@@ -917,11 +932,20 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
mFp = getArguments().getParcelable("fingerprint");
|
mFp = getArguments().getParcelable("fingerprint");
|
||||||
final boolean isProfileChallengeUser =
|
final boolean isProfileChallengeUser =
|
||||||
getArguments().getBoolean("isProfileChallengeUser");
|
getArguments().getBoolean("isProfileChallengeUser");
|
||||||
|
|
||||||
|
DevicePolicyManager devicePolicyManager =
|
||||||
|
getContext().getSystemService(DevicePolicyManager.class);
|
||||||
|
String messageId =
|
||||||
|
isProfileChallengeUser ? WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE
|
||||||
|
: UNDEFINED;
|
||||||
|
int defaultMessageId = isProfileChallengeUser
|
||||||
|
? R.string.fingerprint_last_delete_message_profile_challenge
|
||||||
|
: R.string.fingerprint_last_delete_message;
|
||||||
|
|
||||||
final AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
|
final AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.fingerprint_last_delete_title)
|
.setTitle(R.string.fingerprint_last_delete_title)
|
||||||
.setMessage((isProfileChallengeUser)
|
.setMessage(devicePolicyManager.getString(
|
||||||
? R.string.fingerprint_last_delete_message_profile_challenge
|
messageId, () -> getContext().getString(defaultMessageId)))
|
||||||
: R.string.fingerprint_last_delete_message)
|
|
||||||
.setPositiveButton(R.string.fingerprint_last_delete_confirm,
|
.setPositiveButton(R.string.fingerprint_last_delete_confirm,
|
||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@@ -16,9 +16,12 @@
|
|||||||
|
|
||||||
package com.android.settings.bugreporthandler;
|
package com.android.settings.bugreporthandler;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_PROFILE_APP_SUBTEXT;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_APP_SUBTEXT;
|
||||||
import static android.provider.Settings.ACTION_BUGREPORT_HANDLER_SETTINGS;
|
import static android.provider.Settings.ACTION_BUGREPORT_HANDLER_SETTINGS;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -189,10 +192,15 @@ public class BugReportHandlerPicker extends DefaultAppPickerFragment {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
final UserInfo userInfo = mUserManager.getUserInfo(handlerUser);
|
final UserInfo userInfo = mUserManager.getUserInfo(handlerUser);
|
||||||
|
DevicePolicyManager devicePolicyManager =
|
||||||
|
context.getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
if (userInfo != null && userInfo.isManagedProfile()) {
|
if (userInfo != null && userInfo.isManagedProfile()) {
|
||||||
return context.getString(R.string.work_profile_app_subtext);
|
return devicePolicyManager.getString(WORK_PROFILE_APP_SUBTEXT,
|
||||||
|
() -> context.getString(R.string.work_profile_app_subtext));
|
||||||
}
|
}
|
||||||
return context.getString(R.string.personal_profile_app_subtext);
|
return devicePolicyManager.getString(PERSONAL_PROFILE_APP_SUBTEXT,
|
||||||
|
() -> context.getString(R.string.personal_profile_app_subtext));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class BugreportHandlerAppInfo extends DefaultAppInfo {
|
private static class BugreportHandlerAppInfo extends DefaultAppInfo {
|
||||||
|
@@ -16,10 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.dashboard.profileselector;
|
package com.android.settings.dashboard.profileselector;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
|
||||||
import static android.content.Intent.EXTRA_USER_ID;
|
import static android.content.Intent.EXTRA_USER_ID;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -96,9 +99,6 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
|
|||||||
* Used in fragment argument with Extra key {@link SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB}
|
* Used in fragment argument with Extra key {@link SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB}
|
||||||
*/
|
*/
|
||||||
public static final int WORK_TAB = 1;
|
public static final int WORK_TAB = 1;
|
||||||
private static final int[] LABEL = {
|
|
||||||
R.string.category_personal, R.string.category_work
|
|
||||||
};
|
|
||||||
|
|
||||||
private ViewGroup mContentView;
|
private ViewGroup mContentView;
|
||||||
|
|
||||||
@@ -233,14 +233,23 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CharSequence getPageTitle(int position) {
|
public CharSequence getPageTitle(int position) {
|
||||||
return mContext.getString(LABEL[convertPosition(position)]);
|
DevicePolicyManager devicePolicyManager =
|
||||||
|
mContext.getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
|
if (convertPosition(position) == WORK_TAB) {
|
||||||
|
return devicePolicyManager.getString(WORK_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_work));
|
||||||
|
}
|
||||||
|
|
||||||
|
return devicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_personal));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int convertPosition(int index) {
|
private static int convertPosition(int index) {
|
||||||
if (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())
|
if (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())
|
||||||
== View.LAYOUT_DIRECTION_RTL) {
|
== View.LAYOUT_DIRECTION_RTL) {
|
||||||
return LABEL.length - 1 - index;
|
return 1 - index;
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
@@ -16,7 +16,12 @@
|
|||||||
|
|
||||||
package com.android.settings.dashboard.profileselector;
|
package com.android.settings.dashboard.profileselector;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_USER_LABEL;
|
||||||
|
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.database.DataSetObserver;
|
import android.database.DataSetObserver;
|
||||||
@@ -54,7 +59,9 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
|
|||||||
UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier());
|
UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier());
|
||||||
Drawable icon;
|
Drawable icon;
|
||||||
if (userInfo.isManagedProfile()) {
|
if (userInfo.isManagedProfile()) {
|
||||||
mName = context.getString(R.string.managed_user_title);
|
mName = context.getSystemService(DevicePolicyManager.class).getString(
|
||||||
|
WORK_PROFILE_USER_LABEL,
|
||||||
|
() -> context.getString(R.string.managed_user_title));
|
||||||
icon = context.getPackageManager().getUserBadgeForDensityNoBackground(
|
icon = context.getPackageManager().getUserBadgeForDensityNoBackground(
|
||||||
userHandle, /* density= */ 0);
|
userHandle, /* density= */ 0);
|
||||||
} else {
|
} else {
|
||||||
@@ -77,14 +84,18 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ArrayList<UserDetails> data;
|
private ArrayList<UserDetails> data;
|
||||||
|
private final Context mContext;
|
||||||
private final LayoutInflater mInflater;
|
private final LayoutInflater mInflater;
|
||||||
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public UserAdapter(Context context, ArrayList<UserDetails> users) {
|
public UserAdapter(Context context, ArrayList<UserDetails> users) {
|
||||||
if (users == null) {
|
if (users == null) {
|
||||||
throw new IllegalArgumentException("A list of user details must be provided");
|
throw new IllegalArgumentException("A list of user details must be provided");
|
||||||
}
|
}
|
||||||
|
mContext = context;
|
||||||
this.data = users;
|
this.data = users;
|
||||||
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserHandle getUserHandle(int position) {
|
public UserHandle getUserHandle(int position) {
|
||||||
@@ -104,13 +115,15 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
|
|||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTitle(UserDetails user) {
|
private String getTitle(UserDetails user) {
|
||||||
int userHandle = user.mUserHandle.getIdentifier();
|
int userHandle = user.mUserHandle.getIdentifier();
|
||||||
if (userHandle == UserHandle.USER_CURRENT
|
if (userHandle == UserHandle.USER_CURRENT
|
||||||
|| userHandle == ActivityManager.getCurrentUser()) {
|
|| userHandle == ActivityManager.getCurrentUser()) {
|
||||||
return R.string.category_personal;
|
return mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_personal));
|
||||||
} else {
|
} else {
|
||||||
return R.string.category_work;
|
return mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_work));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,9 +16,11 @@
|
|||||||
|
|
||||||
package com.android.settings.deviceinfo;
|
package com.android.settings.deviceinfo;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ERROR_MOVE_DEVICE_ADMIN;
|
||||||
import static android.content.Intent.EXTRA_TITLE;
|
import static android.content.Intent.EXTRA_TITLE;
|
||||||
import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
|
import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.MoveCallback;
|
import android.content.pm.PackageManager.MoveCallback;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -87,7 +89,9 @@ public class StorageWizardMoveProgress extends StorageWizardBase {
|
|||||||
case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
|
case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
|
||||||
return getString(R.string.insufficient_storage);
|
return getString(R.string.insufficient_storage);
|
||||||
case PackageManager.MOVE_FAILED_DEVICE_ADMIN:
|
case PackageManager.MOVE_FAILED_DEVICE_ADMIN:
|
||||||
return getString(R.string.move_error_device_admin);
|
return getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(ERROR_MOVE_DEVICE_ADMIN,
|
||||||
|
() -> getString(R.string.move_error_device_admin));
|
||||||
case PackageManager.MOVE_FAILED_DOESNT_EXIST:
|
case PackageManager.MOVE_FAILED_DOESNT_EXIST:
|
||||||
return getString(R.string.does_not_exist);
|
return getString(R.string.does_not_exist);
|
||||||
case PackageManager.MOVE_FAILED_INVALID_LOCATION:
|
case PackageManager.MOVE_FAILED_INVALID_LOCATION:
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.display;
|
package com.android.settings.display;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
|
||||||
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
||||||
|
|
||||||
import static com.android.settings.display.ScreenTimeoutSettings.FALLBACK_SCREEN_TIMEOUT_VALUE;
|
import static com.android.settings.display.ScreenTimeoutSettings.FALLBACK_SCREEN_TIMEOUT_VALUE;
|
||||||
@@ -60,7 +61,9 @@ public class ScreenTimeoutPreferenceController extends BasePreferenceController
|
|||||||
final RestrictedLockUtils.EnforcedAdmin admin = getPreferenceDisablingAdmin(maxTimeout);
|
final RestrictedLockUtils.EnforcedAdmin admin = getPreferenceDisablingAdmin(maxTimeout);
|
||||||
if (admin != null) {
|
if (admin != null) {
|
||||||
preference.setEnabled(false);
|
preference.setEnabled(false);
|
||||||
preference.setSummary(mContext.getText(R.string.disabled_by_policy_title));
|
preference.setSummary(mContext.getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(DISABLED_BY_IT_ADMIN_TITLE,
|
||||||
|
() -> mContext.getString(R.string.disabled_by_policy_title)));
|
||||||
((RestrictedPreference) preference).setDisabledByAdmin(admin);
|
((RestrictedPreference) preference).setDisabledByAdmin(admin);
|
||||||
} else {
|
} else {
|
||||||
preference.setSummary(getTimeoutSummary(maxTimeout));
|
preference.setSummary(getTimeoutSummary(maxTimeout));
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.display;
|
package com.android.settings.display;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.OTHER_OPTIONS_DISABLED_BY_ADMIN;
|
||||||
import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
|
import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
|
||||||
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
||||||
|
|
||||||
@@ -85,6 +86,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
Context mContext;
|
Context mContext;
|
||||||
|
|
||||||
@@ -116,6 +119,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||||
mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries);
|
mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries);
|
||||||
mInitialValues = getResources().getStringArray(R.array.screen_timeout_values);
|
mInitialValues = getResources().getStringArray(R.array.screen_timeout_values);
|
||||||
mAdaptiveSleepController = new AdaptiveSleepPreferenceController(context);
|
mAdaptiveSleepController = new AdaptiveSleepPreferenceController(context);
|
||||||
@@ -219,8 +223,9 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void setupDisabledFooterPreference() {
|
void setupDisabledFooterPreference() {
|
||||||
final String textDisabledByAdmin = getResources().getString(
|
final String textDisabledByAdmin = mDevicePolicyManager.getString(
|
||||||
R.string.admin_disabled_other_options);
|
OTHER_OPTIONS_DISABLED_BY_ADMIN, () -> getResources().getString(
|
||||||
|
R.string.admin_disabled_other_options));
|
||||||
final String textMoreDetails = getResources().getString(R.string.admin_more_details);
|
final String textMoreDetails = getResources().getString(R.string.admin_more_details);
|
||||||
|
|
||||||
final SpannableString spannableString = new SpannableString(
|
final SpannableString spannableString = new SpannableString(
|
||||||
|
@@ -14,6 +14,9 @@
|
|||||||
|
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ADMIN_ACTION_NONE;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
|
||||||
@@ -43,11 +46,17 @@ public abstract class AdminActionPreferenceControllerBase extends
|
|||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
final Date timestamp = getAdminActionTimestamp();
|
final Date timestamp = getAdminActionTimestamp();
|
||||||
preference.setSummary(timestamp == null ?
|
preference.setSummary(timestamp == null ?
|
||||||
mContext.getString(R.string.enterprise_privacy_none) :
|
getEnterprisePrivacyNone() :
|
||||||
DateUtils.formatDateTime(mContext, timestamp.getTime(),
|
DateUtils.formatDateTime(mContext, timestamp.getTime(),
|
||||||
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE));
|
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getEnterprisePrivacyNone() {
|
||||||
|
return mContext.getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(ADMIN_ACTION_NONE,
|
||||||
|
() -> mContext.getString(R.string.enterprise_privacy_none));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public boolean isAvailable() {
|
||||||
return true;
|
return true;
|
||||||
|
@@ -13,6 +13,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ALWAYS_ON_VPN_DEVICE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ALWAYS_ON_VPN_PERSONAL_PROFILE;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -27,18 +31,29 @@ public class AlwaysOnVpnCurrentUserPreferenceController
|
|||||||
|
|
||||||
private static final String KEY_ALWAYS_ON_VPN_PRIMARY_USER = "always_on_vpn_primary_user";
|
private static final String KEY_ALWAYS_ON_VPN_PRIMARY_USER = "always_on_vpn_primary_user";
|
||||||
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
||||||
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public AlwaysOnVpnCurrentUserPreferenceController(Context context) {
|
public AlwaysOnVpnCurrentUserPreferenceController(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
mFeatureProvider = FeatureFactory.getFactory(context)
|
mFeatureProvider = FeatureFactory.getFactory(context)
|
||||||
.getEnterprisePrivacyFeatureProvider(context);
|
.getEnterprisePrivacyFeatureProvider(context);
|
||||||
|
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
preference.setTitle(mFeatureProvider.isInCompMode()
|
if (mFeatureProvider.isInCompMode()) {
|
||||||
? R.string.enterprise_privacy_always_on_vpn_personal
|
preference.setTitle(
|
||||||
: R.string.enterprise_privacy_always_on_vpn_device);
|
mDevicePolicyManager.getString(
|
||||||
|
ALWAYS_ON_VPN_PERSONAL_PROFILE,
|
||||||
|
() -> mContext.getString(
|
||||||
|
R.string.enterprise_privacy_always_on_vpn_personal)));
|
||||||
|
} else {
|
||||||
|
preference.setTitle(
|
||||||
|
mDevicePolicyManager.getString(ALWAYS_ON_VPN_DEVICE,
|
||||||
|
() -> mContext.getString(
|
||||||
|
R.string.enterprise_privacy_always_on_vpn_device)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -14,6 +14,10 @@
|
|||||||
|
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CA_CERTS_DEVICE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CA_CERTS_PERSONAL_PROFILE;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
@@ -26,8 +30,11 @@ public class CaCertsCurrentUserPreferenceController extends CaCertsPreferenceCon
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String CA_CERTS_CURRENT_USER = "ca_certs_current_user";
|
static final String CA_CERTS_CURRENT_USER = "ca_certs_current_user";
|
||||||
|
|
||||||
|
DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public CaCertsCurrentUserPreferenceController(Context context) {
|
public CaCertsCurrentUserPreferenceController(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -38,9 +45,16 @@ public class CaCertsCurrentUserPreferenceController extends CaCertsPreferenceCon
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
preference.setTitle(mFeatureProvider.isInCompMode()
|
|
||||||
? R.string.enterprise_privacy_ca_certs_personal
|
if (mFeatureProvider.isInCompMode()) {
|
||||||
: R.string.enterprise_privacy_ca_certs_device);
|
preference.setTitle(mDevicePolicyManager.getString(
|
||||||
|
CA_CERTS_PERSONAL_PROFILE,
|
||||||
|
() -> mContext.getString(R.string.enterprise_privacy_ca_certs_personal)));
|
||||||
|
} else {
|
||||||
|
preference.setTitle(mDevicePolicyManager.getString(
|
||||||
|
CA_CERTS_DEVICE,
|
||||||
|
() -> mContext.getString(R.string.enterprise_privacy_ca_certs_device)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -16,8 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONTACT_YOUR_IT_ADMIN;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.IT_ADMIN_POLICY_DISABLING_INFO_URL;
|
||||||
|
|
||||||
import static java.util.Objects.requireNonNull;
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -25,14 +30,17 @@ import com.android.settingslib.enterprise.DeviceAdminStringProvider;
|
|||||||
|
|
||||||
class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider {
|
class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider {
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
DeviceAdminStringProviderImpl(Context context) {
|
DeviceAdminStringProviderImpl(Context context) {
|
||||||
mContext = requireNonNull(context);
|
mContext = requireNonNull(context);
|
||||||
|
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDefaultDisabledByPolicyTitle() {
|
public String getDefaultDisabledByPolicyTitle() {
|
||||||
return mContext.getString(R.string.disabled_by_policy_title);
|
return mDevicePolicyManager.getString(DISABLED_BY_IT_ADMIN_TITLE,
|
||||||
|
() -> mContext.getString(R.string.disabled_by_policy_title));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -67,12 +75,14 @@ class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDefaultDisabledByPolicyContent() {
|
public String getDefaultDisabledByPolicyContent() {
|
||||||
return mContext.getString(R.string.default_admin_support_msg);
|
return mDevicePolicyManager.getString(CONTACT_YOUR_IT_ADMIN,
|
||||||
|
() -> mContext.getString(R.string.default_admin_support_msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getLearnMoreHelpPageUrl() {
|
public String getLearnMoreHelpPageUrl() {
|
||||||
return mContext.getString(R.string.help_url_action_disabled_by_it_admin);
|
return mDevicePolicyManager.getString(IT_ADMIN_POLICY_DISABLING_INFO_URL,
|
||||||
|
() -> mContext.getString(R.string.help_url_action_disabled_by_it_admin));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.DEVICE_MANAGED_WITHOUT_NAME;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.DEVICE_MANAGED_WITH_NAME;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -95,10 +98,12 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
|
|||||||
final SpannableStringBuilder disclosure = new SpannableStringBuilder();
|
final SpannableStringBuilder disclosure = new SpannableStringBuilder();
|
||||||
final CharSequence organizationName = mDpm.getDeviceOwnerOrganizationName();
|
final CharSequence organizationName = mDpm.getDeviceOwnerOrganizationName();
|
||||||
if (organizationName != null) {
|
if (organizationName != null) {
|
||||||
disclosure.append(mResources.getString(R.string.do_disclosure_with_name,
|
disclosure.append(mDpm.getString(DEVICE_MANAGED_WITH_NAME,
|
||||||
organizationName));
|
() -> mResources.getString(R.string.do_disclosure_with_name,
|
||||||
|
organizationName), organizationName));
|
||||||
} else {
|
} else {
|
||||||
disclosure.append(mResources.getString(R.string.do_disclosure_generic));
|
disclosure.append(mDpm.getString(DEVICE_MANAGED_WITHOUT_NAME,
|
||||||
|
() -> mResources.getString(R.string.do_disclosure_generic)));
|
||||||
}
|
}
|
||||||
return disclosure;
|
return disclosure;
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -123,14 +127,20 @@ public class EnterpriseSetDefaultAppsListPreferenceController extends
|
|||||||
if (!mEnterprisePrivacyFeatureProvider.isInCompMode() && mUsers.size() == 1) {
|
if (!mEnterprisePrivacyFeatureProvider.isInCompMode() && mUsers.size() == 1) {
|
||||||
createPreferences(prefContext, screen, mApps.get(0));
|
createPreferences(prefContext, screen, mApps.get(0));
|
||||||
} else {
|
} else {
|
||||||
|
DevicePolicyManager devicePolicyManager =
|
||||||
|
mContext.getSystemService(DevicePolicyManager.class);
|
||||||
for (int i = 0; i < mUsers.size(); i++) {
|
for (int i = 0; i < mUsers.size(); i++) {
|
||||||
final UserInfo userInfo = mUsers.get(i);
|
final UserInfo userInfo = mUsers.get(i);
|
||||||
final PreferenceCategory category = new PreferenceCategory(prefContext);
|
final PreferenceCategory category = new PreferenceCategory(prefContext);
|
||||||
screen.addPreference(category);
|
screen.addPreference(category);
|
||||||
if (userInfo.isManagedProfile()) {
|
if (userInfo.isManagedProfile()) {
|
||||||
category.setTitle(R.string.category_work);
|
category.setTitle(devicePolicyManager.getString(
|
||||||
|
WORK_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_work)));
|
||||||
} else {
|
} else {
|
||||||
category.setTitle(R.string.category_personal);
|
category.setTitle(devicePolicyManager.getString(
|
||||||
|
PERSONAL_CATEGORY_HEADER,
|
||||||
|
() -> mContext.getString(R.string.category_personal)));
|
||||||
}
|
}
|
||||||
category.setOrder(i);
|
category.setOrder(i);
|
||||||
createPreferences(prefContext, category, mApps.get(i));
|
createPreferences(prefContext, category, mApps.get(i));
|
||||||
|
@@ -14,6 +14,9 @@
|
|||||||
|
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ADMIN_ACTION_SET_INPUT_METHOD_NAME;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -37,8 +40,12 @@ public class ImePreferenceController extends AbstractPreferenceController implem
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
preference.setSummary(mContext.getResources().getString(
|
preference.setSummary(
|
||||||
|
mContext.getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(ADMIN_ACTION_SET_INPUT_METHOD_NAME, () ->
|
||||||
|
mContext.getResources().getString(
|
||||||
R.string.enterprise_privacy_input_method_name,
|
R.string.enterprise_privacy_input_method_name,
|
||||||
|
mFeatureProvider.getImeLabelIfOwnerSet()),
|
||||||
mFeatureProvider.getImeLabelIfOwnerSet()));
|
mFeatureProvider.getImeLabelIfOwnerSet()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,6 +13,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.NUMBER_OF_DEVICE_ADMINS_NONE;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -23,20 +26,28 @@ import com.android.settings.overlay.FeatureFactory;
|
|||||||
public class ManageDeviceAdminPreferenceController extends BasePreferenceController {
|
public class ManageDeviceAdminPreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
||||||
|
private final DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
public ManageDeviceAdminPreferenceController(Context context, String key) {
|
public ManageDeviceAdminPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mFeatureProvider = FeatureFactory.getFactory(context)
|
mFeatureProvider = FeatureFactory.getFactory(context)
|
||||||
.getEnterprisePrivacyFeatureProvider(context);
|
.getEnterprisePrivacyFeatureProvider(context);
|
||||||
|
mDevicePolicyManager =
|
||||||
|
mContext.getSystemService(DevicePolicyManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CharSequence getSummary() {
|
public CharSequence getSummary() {
|
||||||
final int activeAdmins
|
final int activeAdmins
|
||||||
= mFeatureProvider.getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
|
= mFeatureProvider.getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
|
||||||
return activeAdmins == 0
|
|
||||||
? mContext.getResources().getString(R.string.number_of_device_admins_none)
|
if (activeAdmins == 0) {
|
||||||
: mContext.getResources().getQuantityString(R.plurals.number_of_device_admins,
|
return mDevicePolicyManager.getString(NUMBER_OF_DEVICE_ADMINS_NONE,
|
||||||
|
() -> mContext.getResources().getString(R.string.number_of_device_admins_none));
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: override
|
||||||
|
return mContext.getResources().getQuantityString(R.plurals.number_of_device_admins,
|
||||||
activeAdmins, activeAdmins);
|
activeAdmins, activeAdmins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
package com.android.settings.enterprise;
|
package com.android.settings.enterprise;
|
||||||
|
|
||||||
import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
|
import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_DEVICE_INFO_SUMMARY;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_DEVICE_INFO_SUMMARY_WITH_NAME;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -50,10 +52,16 @@ class PrivacyPreferenceControllerHelper {
|
|||||||
|
|
||||||
final String organizationName = mFeatureProvider.getDeviceOwnerOrganizationName();
|
final String organizationName = mFeatureProvider.getDeviceOwnerOrganizationName();
|
||||||
if (organizationName == null) {
|
if (organizationName == null) {
|
||||||
preference.setSummary(R.string.enterprise_privacy_settings_summary_generic);
|
preference.setSummary(mDevicePolicyManager.getString(
|
||||||
|
MANAGED_DEVICE_INFO_SUMMARY,
|
||||||
|
() -> mContext.getString(
|
||||||
|
R.string.enterprise_privacy_settings_summary_generic)));
|
||||||
} else {
|
} else {
|
||||||
preference.setSummary(mContext.getResources().getString(
|
preference.setSummary(mDevicePolicyManager
|
||||||
R.string.enterprise_privacy_settings_summary_with_name, organizationName));
|
.getString(MANAGED_DEVICE_INFO_SUMMARY_WITH_NAME,
|
||||||
|
() -> mContext.getResources().getString(
|
||||||
|
R.string.enterprise_privacy_settings_summary_with_name,
|
||||||
|
organizationName), organizationName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.homepage.contextualcards.conditional;
|
package com.android.settings.homepage.contextualcards.conditional;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_OFF_CONDITION_TITLE;
|
||||||
|
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -46,6 +49,7 @@ public class WorkModeConditionController implements ConditionalCardController {
|
|||||||
|
|
||||||
private final Context mAppContext;
|
private final Context mAppContext;
|
||||||
private final UserManager mUm;
|
private final UserManager mUm;
|
||||||
|
private final DevicePolicyManager mDpm;
|
||||||
private final ConditionManager mConditionManager;
|
private final ConditionManager mConditionManager;
|
||||||
private final Receiver mReceiver;
|
private final Receiver mReceiver;
|
||||||
|
|
||||||
@@ -54,6 +58,7 @@ public class WorkModeConditionController implements ConditionalCardController {
|
|||||||
public WorkModeConditionController(Context appContext, ConditionManager manager) {
|
public WorkModeConditionController(Context appContext, ConditionManager manager) {
|
||||||
mAppContext = appContext;
|
mAppContext = appContext;
|
||||||
mUm = mAppContext.getSystemService(UserManager.class);
|
mUm = mAppContext.getSystemService(UserManager.class);
|
||||||
|
mDpm = mAppContext.getSystemService(DevicePolicyManager.class);
|
||||||
mConditionManager = manager;
|
mConditionManager = manager;
|
||||||
mReceiver = new Receiver();
|
mReceiver = new Receiver();
|
||||||
}
|
}
|
||||||
@@ -84,13 +89,15 @@ public class WorkModeConditionController implements ConditionalCardController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ContextualCard buildContextualCard() {
|
public ContextualCard buildContextualCard() {
|
||||||
|
String conditionWorkTitle = mDpm.getString(WORK_PROFILE_OFF_CONDITION_TITLE,
|
||||||
|
() -> mAppContext.getString(R.string.condition_work_title));
|
||||||
return new ConditionalContextualCard.Builder()
|
return new ConditionalContextualCard.Builder()
|
||||||
.setConditionId(ID)
|
.setConditionId(ID)
|
||||||
.setMetricsConstant(SettingsEnums.SETTINGS_CONDITION_WORK_MODE)
|
.setMetricsConstant(SettingsEnums.SETTINGS_CONDITION_WORK_MODE)
|
||||||
.setActionText(mAppContext.getText(R.string.condition_turn_on))
|
.setActionText(mAppContext.getText(R.string.condition_turn_on))
|
||||||
.setName(mAppContext.getPackageName() + "/"
|
.setName(mAppContext.getPackageName() + "/"
|
||||||
+ mAppContext.getText(R.string.condition_work_title))
|
+ conditionWorkTitle)
|
||||||
.setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
|
.setTitleText(conditionWorkTitle)
|
||||||
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
||||||
.setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH)
|
.setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH)
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.notification;
|
package com.android.settings.notification;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_APPS_CANNOT_ACCESS_NOTIFICATION_SETTINGS;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -103,7 +106,9 @@ public class NotificationAccessSettings extends EmptyTextSettings {
|
|||||||
|
|
||||||
if (UserManager.get(mContext).isManagedProfile()) {
|
if (UserManager.get(mContext).isManagedProfile()) {
|
||||||
// Apps in the work profile do not support notification listeners.
|
// Apps in the work profile do not support notification listeners.
|
||||||
Toast.makeText(mContext, R.string.notification_settings_work_profile,
|
Toast.makeText(mContext,
|
||||||
|
mDpm.getString(WORK_APPS_CANNOT_ACCESS_NOTIFICATION_SETTINGS,
|
||||||
|
() -> mContext.getString(R.string.notification_settings_work_profile)),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
@@ -163,7 +168,9 @@ public class NotificationAccessSettings extends EmptyTextSettings {
|
|||||||
if (managedProfileId != UserHandle.USER_NULL
|
if (managedProfileId != UserHandle.USER_NULL
|
||||||
&& !mDpm.isNotificationListenerServicePermitted(
|
&& !mDpm.isNotificationListenerServicePermitted(
|
||||||
service.packageName, managedProfileId)) {
|
service.packageName, managedProfileId)) {
|
||||||
pref.setSummary(R.string.work_profile_notification_access_blocked_summary);
|
pref.setSummary(mDpm.getString(WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
|
||||||
|
() -> getString(
|
||||||
|
R.string.work_profile_notification_access_blocked_summary)));
|
||||||
}
|
}
|
||||||
pref.setOnPreferenceClickListener(preference -> {
|
pref.setOnPreferenceClickListener(preference -> {
|
||||||
final Bundle args = new Bundle();
|
final Bundle args = new Bundle();
|
||||||
|
@@ -16,8 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.notification;
|
package com.android.settings.notification;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_MESSAGE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_TITLE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_ACTIVE_SUMMARY;
|
||||||
|
|
||||||
import android.annotation.UserIdInt;
|
import android.annotation.UserIdInt;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -252,11 +257,16 @@ public class SoundWorkSettingsController extends AbstractPreferenceController
|
|||||||
private void enableWorkSyncSettings() {
|
private void enableWorkSyncSettings() {
|
||||||
mWorkUsePersonalSounds.setChecked(true);
|
mWorkUsePersonalSounds.setChecked(true);
|
||||||
|
|
||||||
|
String summary = mContext.getSystemService(DevicePolicyManager.class).getString(
|
||||||
|
WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_ACTIVE_SUMMARY,
|
||||||
|
() -> mContext.getString(R.string.work_sound_same_as_personal)
|
||||||
|
);
|
||||||
|
|
||||||
if (mWorkPhoneRingtonePreference != null) {
|
if (mWorkPhoneRingtonePreference != null) {
|
||||||
mWorkPhoneRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
|
mWorkPhoneRingtonePreference.setSummary(summary);
|
||||||
}
|
}
|
||||||
mWorkNotificationRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
|
mWorkNotificationRingtonePreference.setSummary(summary);
|
||||||
mWorkAlarmRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
|
mWorkAlarmRingtonePreference.setSummary(summary);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableWorkSync() {
|
private void disableWorkSync() {
|
||||||
@@ -339,9 +349,18 @@ public class SoundWorkSettingsController extends AbstractPreferenceController
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
Context context = getActivity().getApplicationContext();
|
||||||
|
DevicePolicyManager devicePolicyManager =
|
||||||
|
context.getSystemService(DevicePolicyManager.class);
|
||||||
|
|
||||||
return new AlertDialog.Builder(getActivity())
|
return new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.work_sync_dialog_title)
|
.setTitle(devicePolicyManager.getString(
|
||||||
.setMessage(R.string.work_sync_dialog_message)
|
ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_TITLE,
|
||||||
|
() -> context.getString(R.string.work_sync_dialog_title)))
|
||||||
|
.setMessage(devicePolicyManager.getString(
|
||||||
|
ENABLE_WORK_PROFILE_SYNC_WITH_PERSONAL_SOUNDS_DIALOG_MESSAGE,
|
||||||
|
() -> context.getString(R.string.work_sync_dialog_message)))
|
||||||
.setPositiveButton(R.string.work_sync_dialog_yes,
|
.setPositiveButton(R.string.work_sync_dialog_yes,
|
||||||
SoundWorkSettingsController.UnifyWorkDialogFragment.this)
|
SoundWorkSettingsController.UnifyWorkDialogFragment.this)
|
||||||
.setNegativeButton(android.R.string.no, /* listener= */ null)
|
.setNegativeButton(android.R.string.no, /* listener= */ null)
|
||||||
|
@@ -17,7 +17,6 @@
|
|||||||
package com.android.settings.notification.zen;
|
package com.android.settings.notification.zen;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -28,8 +27,8 @@ import android.os.Bundle;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.view.View;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
@@ -138,7 +137,7 @@ public class ZenAccessSettings extends EmptyTextSettings implements
|
|||||||
pref.setOnPreferenceClickListener(preference -> {
|
pref.setOnPreferenceClickListener(preference -> {
|
||||||
AppInfoBase.startAppInfoFragment(
|
AppInfoBase.startAppInfoFragment(
|
||||||
ZenAccessDetails.class /* fragment */,
|
ZenAccessDetails.class /* fragment */,
|
||||||
R.string.manage_zen_access_title /* titleRes */,
|
getString(R.string.manage_zen_access_title) /* titleRes */,
|
||||||
pkg,
|
pkg,
|
||||||
app.uid,
|
app.uid,
|
||||||
this /* source */,
|
this /* source */,
|
||||||
|
@@ -22,6 +22,8 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_HIGH;
|
|||||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
|
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
|
||||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM;
|
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_MEDIUM;
|
||||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE;
|
||||||
|
|
||||||
import static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED;
|
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_CALLER_APP_NAME;
|
||||||
@@ -29,7 +31,6 @@ import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_D
|
|||||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
|
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.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
|
||||||
|
|
||||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -394,13 +395,16 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (mIsManagedProfile) {
|
if (mIsManagedProfile) {
|
||||||
textView.setText(R.string.lock_settings_picker_profile_message);
|
textView.setText(mDpm.getString(WORK_PROFILE_SCREEN_LOCK_SETUP_MESSAGE,
|
||||||
|
() -> getString(R.string.lock_settings_picker_profile_message)));
|
||||||
} else {
|
} else {
|
||||||
int profileUserId = Utils.getManagedProfileId(mUserManager, mUserId);
|
int profileUserId = Utils.getManagedProfileId(mUserManager, mUserId);
|
||||||
if (mController.isScreenLockRestrictedByAdmin()
|
if (mController.isScreenLockRestrictedByAdmin()
|
||||||
&& profileUserId != UserHandle.USER_NULL) {
|
&& profileUserId != UserHandle.USER_NULL) {
|
||||||
final StringBuilder description = new StringBuilder(getText(
|
final StringBuilder description = new StringBuilder(
|
||||||
R.string.lock_settings_picker_admin_restricted_personal_message));
|
mDpm.getString(WORK_PROFILE_IT_ADMIN_CANT_RESET_SCREEN_LOCK, () ->
|
||||||
|
getString(
|
||||||
|
R.string.lock_settings_picker_admin_restricted_personal_message)));
|
||||||
final LinkifyUtils.OnClickListener clickListener = () -> {
|
final LinkifyUtils.OnClickListener clickListener = () -> {
|
||||||
final Bundle extras = new Bundle();
|
final Bundle extras = new Bundle();
|
||||||
extras.putInt(Intent.EXTRA_USER_ID, profileUserId);
|
extras.putInt(Intent.EXTRA_USER_ID, profileUserId);
|
||||||
|
@@ -18,6 +18,13 @@ package com.android.settings.password;
|
|||||||
|
|
||||||
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_NONE;
|
||||||
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
|
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PASSWORD_RECENTLY_USED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PIN_RECENTLY_USED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PASSWORD_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.REENTER_WORK_PROFILE_PIN_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PASSWORD_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PIN_HEADER;
|
||||||
|
|
||||||
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
|
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
|
||||||
import static com.android.internal.widget.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
|
import static com.android.internal.widget.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
|
||||||
@@ -259,11 +266,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
Introduction(
|
Introduction(
|
||||||
R.string.lockpassword_choose_your_password_header, // password
|
R.string.lockpassword_choose_your_password_header, // password
|
||||||
|
SET_WORK_PROFILE_PASSWORD_HEADER,
|
||||||
R.string.lockpassword_choose_your_profile_password_header,
|
R.string.lockpassword_choose_your_profile_password_header,
|
||||||
R.string.lockpassword_choose_your_password_header_for_fingerprint,
|
R.string.lockpassword_choose_your_password_header_for_fingerprint,
|
||||||
R.string.lockpassword_choose_your_password_header_for_face,
|
R.string.lockpassword_choose_your_password_header_for_face,
|
||||||
R.string.lockpassword_choose_your_password_header_for_biometrics,
|
R.string.lockpassword_choose_your_password_header_for_biometrics,
|
||||||
R.string.lockpassword_choose_your_pin_header, // pin
|
R.string.lockpassword_choose_your_pin_header, // pin
|
||||||
|
SET_WORK_PROFILE_PIN_HEADER,
|
||||||
R.string.lockpassword_choose_your_profile_pin_header,
|
R.string.lockpassword_choose_your_profile_pin_header,
|
||||||
R.string.lockpassword_choose_your_pin_header_for_fingerprint,
|
R.string.lockpassword_choose_your_pin_header_for_fingerprint,
|
||||||
R.string.lockpassword_choose_your_pin_header_for_face,
|
R.string.lockpassword_choose_your_pin_header_for_face,
|
||||||
@@ -274,11 +283,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
NeedToConfirm(
|
NeedToConfirm(
|
||||||
R.string.lockpassword_confirm_your_password_header,
|
R.string.lockpassword_confirm_your_password_header,
|
||||||
|
REENTER_WORK_PROFILE_PASSWORD_HEADER,
|
||||||
R.string.lockpassword_reenter_your_profile_password_header,
|
R.string.lockpassword_reenter_your_profile_password_header,
|
||||||
R.string.lockpassword_confirm_your_password_header,
|
R.string.lockpassword_confirm_your_password_header,
|
||||||
R.string.lockpassword_confirm_your_password_header,
|
R.string.lockpassword_confirm_your_password_header,
|
||||||
R.string.lockpassword_confirm_your_password_header,
|
R.string.lockpassword_confirm_your_password_header,
|
||||||
R.string.lockpassword_confirm_your_pin_header,
|
R.string.lockpassword_confirm_your_pin_header,
|
||||||
|
REENTER_WORK_PROFILE_PIN_HEADER,
|
||||||
R.string.lockpassword_reenter_your_profile_pin_header,
|
R.string.lockpassword_reenter_your_profile_pin_header,
|
||||||
R.string.lockpassword_confirm_your_pin_header,
|
R.string.lockpassword_confirm_your_pin_header,
|
||||||
R.string.lockpassword_confirm_your_pin_header,
|
R.string.lockpassword_confirm_your_pin_header,
|
||||||
@@ -289,11 +300,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
ConfirmWrong(
|
ConfirmWrong(
|
||||||
R.string.lockpassword_confirm_passwords_dont_match,
|
R.string.lockpassword_confirm_passwords_dont_match,
|
||||||
|
UNDEFINED,
|
||||||
R.string.lockpassword_confirm_passwords_dont_match,
|
R.string.lockpassword_confirm_passwords_dont_match,
|
||||||
R.string.lockpassword_confirm_passwords_dont_match,
|
R.string.lockpassword_confirm_passwords_dont_match,
|
||||||
R.string.lockpassword_confirm_passwords_dont_match,
|
R.string.lockpassword_confirm_passwords_dont_match,
|
||||||
R.string.lockpassword_confirm_passwords_dont_match,
|
R.string.lockpassword_confirm_passwords_dont_match,
|
||||||
R.string.lockpassword_confirm_pins_dont_match,
|
R.string.lockpassword_confirm_pins_dont_match,
|
||||||
|
UNDEFINED,
|
||||||
R.string.lockpassword_confirm_pins_dont_match,
|
R.string.lockpassword_confirm_pins_dont_match,
|
||||||
R.string.lockpassword_confirm_pins_dont_match,
|
R.string.lockpassword_confirm_pins_dont_match,
|
||||||
R.string.lockpassword_confirm_pins_dont_match,
|
R.string.lockpassword_confirm_pins_dont_match,
|
||||||
@@ -303,11 +316,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
R.string.lockpassword_confirm_label);
|
R.string.lockpassword_confirm_label);
|
||||||
|
|
||||||
Stage(int hintInAlpha,
|
Stage(int hintInAlpha,
|
||||||
|
String hintOverrideInAlphaForProfile,
|
||||||
int hintInAlphaForProfile,
|
int hintInAlphaForProfile,
|
||||||
int hintInAlphaForFingerprint,
|
int hintInAlphaForFingerprint,
|
||||||
int hintInAlphaForFace,
|
int hintInAlphaForFace,
|
||||||
int hintInAlphaForBiometrics,
|
int hintInAlphaForBiometrics,
|
||||||
int hintInNumeric,
|
int hintInNumeric,
|
||||||
|
String hintOverrideInNumericForProfile,
|
||||||
int hintInNumericForProfile,
|
int hintInNumericForProfile,
|
||||||
int hintInNumericForFingerprint,
|
int hintInNumericForFingerprint,
|
||||||
int hintInNumericForFace,
|
int hintInNumericForFace,
|
||||||
@@ -317,12 +332,14 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
int nextButtonText) {
|
int nextButtonText) {
|
||||||
|
|
||||||
this.alphaHint = hintInAlpha;
|
this.alphaHint = hintInAlpha;
|
||||||
|
this.alphaHintOverrideForProfile = hintOverrideInAlphaForProfile;
|
||||||
this.alphaHintForProfile = hintInAlphaForProfile;
|
this.alphaHintForProfile = hintInAlphaForProfile;
|
||||||
this.alphaHintForFingerprint = hintInAlphaForFingerprint;
|
this.alphaHintForFingerprint = hintInAlphaForFingerprint;
|
||||||
this.alphaHintForFace = hintInAlphaForFace;
|
this.alphaHintForFace = hintInAlphaForFace;
|
||||||
this.alphaHintForBiometrics = hintInAlphaForBiometrics;
|
this.alphaHintForBiometrics = hintInAlphaForBiometrics;
|
||||||
|
|
||||||
this.numericHint = hintInNumeric;
|
this.numericHint = hintInNumeric;
|
||||||
|
this.numericHintOverrideForProfile = hintOverrideInNumericForProfile;
|
||||||
this.numericHintForProfile = hintInNumericForProfile;
|
this.numericHintForProfile = hintInNumericForProfile;
|
||||||
this.numericHintForFingerprint = hintInNumericForFingerprint;
|
this.numericHintForFingerprint = hintInNumericForFingerprint;
|
||||||
this.numericHintForFace = hintInNumericForFace;
|
this.numericHintForFace = hintInNumericForFace;
|
||||||
@@ -341,6 +358,7 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
// Password header
|
// Password header
|
||||||
public final int alphaHint;
|
public final int alphaHint;
|
||||||
|
public final String alphaHintOverrideForProfile;
|
||||||
public final int alphaHintForProfile;
|
public final int alphaHintForProfile;
|
||||||
public final int alphaHintForFingerprint;
|
public final int alphaHintForFingerprint;
|
||||||
public final int alphaHintForFace;
|
public final int alphaHintForFace;
|
||||||
@@ -348,6 +366,7 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
// PIN header
|
// PIN header
|
||||||
public final int numericHint;
|
public final int numericHint;
|
||||||
|
public final String numericHintOverrideForProfile;
|
||||||
public final int numericHintForProfile;
|
public final int numericHintForProfile;
|
||||||
public final int numericHintForFingerprint;
|
public final int numericHintForFingerprint;
|
||||||
public final int numericHintForFace;
|
public final int numericHintForFace;
|
||||||
@@ -361,26 +380,34 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
public final int buttonText;
|
public final int buttonText;
|
||||||
|
|
||||||
public @StringRes int getHint(boolean isAlpha, int type, boolean isProfile) {
|
public String getHint(Context context, boolean isAlpha, int type, boolean isProfile) {
|
||||||
if (isAlpha) {
|
if (isAlpha) {
|
||||||
if (type == TYPE_FINGERPRINT) {
|
if (type == TYPE_FINGERPRINT) {
|
||||||
return alphaHintForFingerprint;
|
return context.getString(alphaHintForFingerprint);
|
||||||
} else if (type == TYPE_FACE) {
|
} else if (type == TYPE_FACE) {
|
||||||
return alphaHintForFace;
|
return context.getString(alphaHintForFace);
|
||||||
} else if (type == TYPE_BIOMETRIC) {
|
} else if (type == TYPE_BIOMETRIC) {
|
||||||
return alphaHintForBiometrics;
|
return context.getString(alphaHintForBiometrics);
|
||||||
|
} else if (isProfile) {
|
||||||
|
return context.getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(alphaHintOverrideForProfile,
|
||||||
|
() -> context.getString(alphaHintForProfile));
|
||||||
} else {
|
} else {
|
||||||
return isProfile ? alphaHintForProfile : alphaHint;
|
return context.getString(alphaHint);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (type == TYPE_FINGERPRINT) {
|
if (type == TYPE_FINGERPRINT) {
|
||||||
return numericHintForFingerprint;
|
return context.getString(numericHintForFingerprint);
|
||||||
} else if (type == TYPE_FACE) {
|
} else if (type == TYPE_FACE) {
|
||||||
return numericHintForFace;
|
return context.getString(numericHintForFace);
|
||||||
} else if (type == TYPE_BIOMETRIC) {
|
} else if (type == TYPE_BIOMETRIC) {
|
||||||
return numericHintForBiometrics;
|
return context.getString(numericHintForBiometrics);
|
||||||
|
} else if (isProfile) {
|
||||||
|
return context.getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(numericHintOverrideForProfile,
|
||||||
|
() -> context.getString(numericHintForProfile));
|
||||||
} else {
|
} else {
|
||||||
return isProfile ? numericHintForProfile : numericHint;
|
return context.getString(numericHint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -556,8 +583,8 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
if (activity instanceof SettingsActivity) {
|
if (activity instanceof SettingsActivity) {
|
||||||
final SettingsActivity sa = (SettingsActivity) activity;
|
final SettingsActivity sa = (SettingsActivity) activity;
|
||||||
int title = Stage.Introduction.getHint(mIsAlphaMode, getStageType(),
|
String title = Stage.Introduction.getHint(
|
||||||
mIsManagedProfile);
|
getContext(), mIsAlphaMode, getStageType(), mIsManagedProfile);
|
||||||
sa.setTitle(title);
|
sa.setTitle(title);
|
||||||
mLayout.setHeaderText(title);
|
mLayout.setHeaderText(title);
|
||||||
}
|
}
|
||||||
@@ -818,9 +845,17 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
messages.add(getString(R.string.lockpassword_pin_no_sequential_digits));
|
messages.add(getString(R.string.lockpassword_pin_no_sequential_digits));
|
||||||
break;
|
break;
|
||||||
case RECENTLY_USED:
|
case RECENTLY_USED:
|
||||||
messages.add(getString(mIsAlphaMode
|
DevicePolicyManager devicePolicyManager =
|
||||||
? R.string.lockpassword_password_recently_used
|
getContext().getSystemService(DevicePolicyManager.class);
|
||||||
: R.string.lockpassword_pin_recently_used));
|
if (mIsAlphaMode) {
|
||||||
|
messages.add(devicePolicyManager.getString(
|
||||||
|
PASSWORD_RECENTLY_USED,
|
||||||
|
() -> getString(R.string.lockpassword_password_recently_used)));
|
||||||
|
} else {
|
||||||
|
messages.add(devicePolicyManager.getString(
|
||||||
|
PIN_RECENTLY_USED,
|
||||||
|
() -> getString(R.string.lockpassword_pin_recently_used)));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Log.wtf(TAG, "unknown error validating password: " + error);
|
Log.wtf(TAG, "unknown error validating password: " + error);
|
||||||
@@ -851,8 +886,8 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
} else {
|
} else {
|
||||||
// Hide password requirement view when we are just asking user to confirm the pw.
|
// Hide password requirement view when we are just asking user to confirm the pw.
|
||||||
mPasswordRestrictionView.setVisibility(View.GONE);
|
mPasswordRestrictionView.setVisibility(View.GONE);
|
||||||
setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType(),
|
setHeaderText(mUiStage.getHint(getContext(), mIsAlphaMode, getStageType(),
|
||||||
mIsManagedProfile)));
|
mIsManagedProfile));
|
||||||
setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
|
setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
|
||||||
mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
|
mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.password;
|
package com.android.settings.password;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SET_WORK_PROFILE_PATTERN_HEADER;
|
||||||
import static android.view.View.ACCESSIBILITY_LIVE_REGION_POLITE;
|
import static android.view.View.ACCESSIBILITY_LIVE_REGION_POLITE;
|
||||||
|
|
||||||
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL;
|
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL;
|
||||||
@@ -23,6 +24,7 @@ import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_U
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -474,15 +476,18 @@ public class ChooseLockPattern extends SettingsActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateActivityTitle() {
|
private void updateActivityTitle() {
|
||||||
final int msg;
|
final String msg;
|
||||||
if (mForFingerprint) {
|
if (mForFingerprint) {
|
||||||
msg = R.string.lockpassword_choose_your_pattern_header_for_fingerprint;
|
msg = getString(R.string.lockpassword_choose_your_pattern_header_for_fingerprint);
|
||||||
} else if (mForFace) {
|
} else if (mForFace) {
|
||||||
msg = R.string.lockpassword_choose_your_pattern_header_for_face;
|
msg = getString(R.string.lockpassword_choose_your_pattern_header_for_face);
|
||||||
|
} else if (mIsManagedProfile) {
|
||||||
|
msg = getContext().getSystemService(DevicePolicyManager.class)
|
||||||
|
.getString(SET_WORK_PROFILE_PATTERN_HEADER,
|
||||||
|
() -> getString(
|
||||||
|
R.string.lockpassword_choose_your_profile_pattern_header));
|
||||||
} else {
|
} else {
|
||||||
msg = mIsManagedProfile
|
msg = getString(R.string.lockpassword_choose_your_pattern_header);
|
||||||
? R.string.lockpassword_choose_your_profile_pattern_header
|
|
||||||
: R.string.lockpassword_choose_your_pattern_header;
|
|
||||||
}
|
}
|
||||||
getActivity().setTitle(msg);
|
getActivity().setTitle(msg);
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,13 @@
|
|||||||
|
|
||||||
package com.android.settings.password;
|
package com.android.settings.password;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
|
||||||
|
|
||||||
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -259,19 +266,36 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
|
|||||||
|
|
||||||
private String getTitleFromCredentialType(@LockPatternUtils.CredentialType int credentialType,
|
private String getTitleFromCredentialType(@LockPatternUtils.CredentialType int credentialType,
|
||||||
boolean isEffectiveUserManagedProfile) {
|
boolean isEffectiveUserManagedProfile) {
|
||||||
|
int overrideStringId;
|
||||||
|
int defaultStringId;
|
||||||
switch (credentialType) {
|
switch (credentialType) {
|
||||||
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
|
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
|
||||||
return isEffectiveUserManagedProfile
|
|
||||||
? getString(R.string.lockpassword_confirm_your_work_pin_header)
|
if (isEffectiveUserManagedProfile) {
|
||||||
: getString(R.string.lockpassword_confirm_your_pin_header);
|
return mDevicePolicyManager.getString(
|
||||||
|
CONFIRM_WORK_PROFILE_PIN_HEADER,
|
||||||
|
() -> getString(R.string.lockpassword_confirm_your_work_pin_header));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_pin_header);
|
||||||
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
|
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
|
||||||
return isEffectiveUserManagedProfile
|
if (isEffectiveUserManagedProfile) {
|
||||||
? getString(R.string.lockpassword_confirm_your_work_pattern_header)
|
return mDevicePolicyManager.getString(
|
||||||
: getString(R.string.lockpassword_confirm_your_pattern_header);
|
CONFIRM_WORK_PROFILE_PATTERN_HEADER,
|
||||||
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_work_pattern_header));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_pattern_header);
|
||||||
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
|
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
|
||||||
return isEffectiveUserManagedProfile
|
if (isEffectiveUserManagedProfile) {
|
||||||
? getString(R.string.lockpassword_confirm_your_work_password_header)
|
return mDevicePolicyManager.getString(
|
||||||
: getString(R.string.lockpassword_confirm_your_password_header);
|
CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
|
||||||
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_work_password_header));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_password_header);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -280,17 +304,29 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
|
|||||||
boolean isEffectiveUserManagedProfile) {
|
boolean isEffectiveUserManagedProfile) {
|
||||||
switch (credentialType) {
|
switch (credentialType) {
|
||||||
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
|
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
|
||||||
return isEffectiveUserManagedProfile
|
if (isEffectiveUserManagedProfile) {
|
||||||
? getString(R.string.lockpassword_confirm_your_pin_generic_profile)
|
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PIN,
|
||||||
: getString(R.string.lockpassword_confirm_your_pin_generic);
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_pin_generic_profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_pin_generic);
|
||||||
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
|
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
|
||||||
return isEffectiveUserManagedProfile
|
if (isEffectiveUserManagedProfile) {
|
||||||
? getString(R.string.lockpassword_confirm_your_pattern_generic_profile)
|
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
|
||||||
: getString(R.string.lockpassword_confirm_your_pattern_generic);
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_pattern_generic_profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_pattern_generic);
|
||||||
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
|
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
|
||||||
return isEffectiveUserManagedProfile
|
if (isEffectiveUserManagedProfile) {
|
||||||
? getString(R.string.lockpassword_confirm_your_password_generic_profile)
|
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PASSWORD,
|
||||||
: getString(R.string.lockpassword_confirm_your_password_generic);
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_password_generic_profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_password_generic);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
// TODO (b/35202196): move this class out of the root of the package.
|
// TODO (b/35202196): move this class out of the root of the package.
|
||||||
package com.android.settings.password;
|
package com.android.settings.password;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LOCK_ATTEMPTS_FAILED;
|
||||||
|
|
||||||
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
@@ -243,13 +245,16 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
// Last try
|
// Last try
|
||||||
final String title = getActivity().getString(
|
final String title = getActivity().getString(
|
||||||
R.string.lock_last_attempt_before_wipe_warning_title);
|
R.string.lock_last_attempt_before_wipe_warning_title);
|
||||||
final int messageId = getLastTryErrorMessage(userType);
|
final String overrideMessageId = getLastTryOverrideErrorMessageId(userType);
|
||||||
LastTryDialog.show(fragmentManager, title, messageId,
|
final int defaultMessageId = getLastTryDefaultErrorMessage(userType);
|
||||||
|
final String message = mDevicePolicyManager.getString(
|
||||||
|
overrideMessageId, () -> getString(defaultMessageId));
|
||||||
|
LastTryDialog.show(fragmentManager, title, message,
|
||||||
android.R.string.ok, false /* dismiss */);
|
android.R.string.ok, false /* dismiss */);
|
||||||
} else {
|
} else {
|
||||||
// Device, profile, or secondary user is wiped
|
// Device, profile, or secondary user is wiped
|
||||||
final int messageId = getWipeMessage(userType);
|
final String message = getWipeMessage(userType);
|
||||||
LastTryDialog.show(fragmentManager, null /* title */, messageId,
|
LastTryDialog.show(fragmentManager, null /* title */, message,
|
||||||
R.string.lock_failed_attempts_now_wiping_dialog_dismiss, true /* dismiss */);
|
R.string.lock_failed_attempts_now_wiping_dialog_dismiss, true /* dismiss */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -266,16 +271,18 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract int getLastTryErrorMessage(int userType);
|
protected abstract String getLastTryOverrideErrorMessageId(int userType);
|
||||||
|
protected abstract int getLastTryDefaultErrorMessage(int userType);
|
||||||
|
|
||||||
private int getWipeMessage(int userType) {
|
private String getWipeMessage(int userType) {
|
||||||
switch (userType) {
|
switch (userType) {
|
||||||
case USER_TYPE_PRIMARY:
|
case USER_TYPE_PRIMARY:
|
||||||
return R.string.lock_failed_attempts_now_wiping_device;
|
return getString(R.string.lock_failed_attempts_now_wiping_device);
|
||||||
case USER_TYPE_MANAGED_PROFILE:
|
case USER_TYPE_MANAGED_PROFILE:
|
||||||
return R.string.lock_failed_attempts_now_wiping_profile;
|
return mDevicePolicyManager.getString(WORK_PROFILE_LOCK_ATTEMPTS_FAILED,
|
||||||
|
() -> getString(R.string.lock_failed_attempts_now_wiping_profile));
|
||||||
case USER_TYPE_SECONDARY:
|
case USER_TYPE_SECONDARY:
|
||||||
return R.string.lock_failed_attempts_now_wiping_user;
|
return getString(R.string.lock_failed_attempts_now_wiping_user);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unrecognized user type:" + userType);
|
throw new IllegalArgumentException("Unrecognized user type:" + userType);
|
||||||
}
|
}
|
||||||
@@ -311,7 +318,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
private static final String ARG_BUTTON = "button";
|
private static final String ARG_BUTTON = "button";
|
||||||
private static final String ARG_DISMISS = "dismiss";
|
private static final String ARG_DISMISS = "dismiss";
|
||||||
|
|
||||||
static boolean show(FragmentManager from, String title, int message, int button,
|
static boolean show(FragmentManager from, String title, String message, int button,
|
||||||
boolean dismiss) {
|
boolean dismiss) {
|
||||||
LastTryDialog existent = (LastTryDialog) from.findFragmentByTag(TAG);
|
LastTryDialog existent = (LastTryDialog) from.findFragmentByTag(TAG);
|
||||||
if (existent != null && !existent.isRemoving()) {
|
if (existent != null && !existent.isRemoving()) {
|
||||||
@@ -319,7 +326,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
}
|
}
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString(ARG_TITLE, title);
|
args.putString(ARG_TITLE, title);
|
||||||
args.putInt(ARG_MESSAGE, message);
|
args.putString(ARG_MESSAGE, message);
|
||||||
args.putInt(ARG_BUTTON, button);
|
args.putInt(ARG_BUTTON, button);
|
||||||
args.putBoolean(ARG_DISMISS, dismiss);
|
args.putBoolean(ARG_DISMISS, dismiss);
|
||||||
|
|
||||||
@@ -349,7 +356,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
|||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
Dialog dialog = new AlertDialog.Builder(getActivity())
|
Dialog dialog = new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(getArguments().getString(ARG_TITLE))
|
.setTitle(getArguments().getString(ARG_TITLE))
|
||||||
.setMessage(getArguments().getInt(ARG_MESSAGE))
|
.setMessage(getArguments().getString(ARG_MESSAGE))
|
||||||
.setPositiveButton(getArguments().getInt(ARG_BUTTON), null)
|
.setPositiveButton(getArguments().getInt(ARG_BUTTON), null)
|
||||||
.create();
|
.create();
|
||||||
dialog.setCanceledOnTouchOutside(false);
|
dialog.setCanceledOnTouchOutside(false);
|
||||||
|
@@ -16,6 +16,16 @@
|
|||||||
|
|
||||||
package com.android.settings.password;
|
package com.android.settings.password;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PASSWORD_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PIN_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PASSWORD_ATTEMPT_BEFORE_WIPE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PASSWORD_REQUIRED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PIN_REQUIRED;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
@@ -73,6 +83,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
R.string.lockpassword_strong_auth_required_work_password
|
R.string.lockpassword_strong_auth_required_work_password
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final String[] DETAIL_TEXT_OVERRIDES = new String[] {
|
||||||
|
UNDEFINED,
|
||||||
|
UNDEFINED,
|
||||||
|
WORK_PROFILE_CONFIRM_PIN,
|
||||||
|
WORK_PROFILE_CONFIRM_PASSWORD,
|
||||||
|
UNDEFINED,
|
||||||
|
UNDEFINED,
|
||||||
|
WORK_PROFILE_PIN_REQUIRED,
|
||||||
|
WORK_PROFILE_PASSWORD_REQUIRED
|
||||||
|
};
|
||||||
|
|
||||||
public static class InternalActivity extends ConfirmLockPassword {
|
public static class InternalActivity extends ConfirmLockPassword {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,10 +181,10 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
headerMessage = mDevicePolicyManager.getOrganizationNameForUser(mUserId);
|
headerMessage = mDevicePolicyManager.getOrganizationNameForUser(mUserId);
|
||||||
}
|
}
|
||||||
if (TextUtils.isEmpty(headerMessage)) {
|
if (TextUtils.isEmpty(headerMessage)) {
|
||||||
headerMessage = getString(getDefaultHeader());
|
headerMessage = getDefaultHeader();
|
||||||
}
|
}
|
||||||
if (TextUtils.isEmpty(detailsMessage)) {
|
if (TextUtils.isEmpty(detailsMessage)) {
|
||||||
detailsMessage = getString(getDefaultDetails());
|
detailsMessage = getDefaultDetails();
|
||||||
}
|
}
|
||||||
mGlifLayout.setHeaderText(headerMessage);
|
mGlifLayout.setHeaderText(headerMessage);
|
||||||
mGlifLayout.setDescriptionText(detailsMessage);
|
mGlifLayout.setDescriptionText(detailsMessage);
|
||||||
@@ -228,29 +249,37 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getDefaultHeader() {
|
private String getDefaultHeader() {
|
||||||
if (mFrp) {
|
if (mFrp) {
|
||||||
return mIsAlpha ? R.string.lockpassword_confirm_your_password_header_frp
|
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header_frp)
|
||||||
: R.string.lockpassword_confirm_your_pin_header_frp;
|
: getString(R.string.lockpassword_confirm_your_pin_header_frp);
|
||||||
}
|
}
|
||||||
if (mIsManagedProfile) {
|
if (mIsManagedProfile) {
|
||||||
return mIsAlpha ? R.string.lockpassword_confirm_your_work_password_header
|
if (mIsAlpha) {
|
||||||
: R.string.lockpassword_confirm_your_work_pin_header;
|
return mDevicePolicyManager.getString(
|
||||||
|
CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
|
||||||
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_work_password_header));
|
||||||
}
|
}
|
||||||
return mIsAlpha ? R.string.lockpassword_confirm_your_password_header
|
return mDevicePolicyManager.getString(
|
||||||
: R.string.lockpassword_confirm_your_pin_header;
|
CONFIRM_WORK_PROFILE_PIN_HEADER,
|
||||||
|
() -> getString(R.string.lockpassword_confirm_your_work_pin_header));
|
||||||
|
}
|
||||||
|
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header)
|
||||||
|
: getString(R.string.lockpassword_confirm_your_pin_header);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getDefaultDetails() {
|
private String getDefaultDetails() {
|
||||||
if (mFrp) {
|
if (mFrp) {
|
||||||
return mIsAlpha ? R.string.lockpassword_confirm_your_password_details_frp
|
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_details_frp)
|
||||||
: R.string.lockpassword_confirm_your_pin_details_frp;
|
: getString(R.string.lockpassword_confirm_your_pin_details_frp);
|
||||||
}
|
}
|
||||||
boolean isStrongAuthRequired = isStrongAuthRequired();
|
boolean isStrongAuthRequired = isStrongAuthRequired();
|
||||||
// Map boolean flags to an index by isStrongAuth << 2 + isManagedProfile << 1 + isAlpha.
|
// Map boolean flags to an index by isStrongAuth << 2 + isManagedProfile << 1 + isAlpha.
|
||||||
int index = ((isStrongAuthRequired ? 1 : 0) << 2) + ((mIsManagedProfile ? 1 : 0) << 1)
|
int index = ((isStrongAuthRequired ? 1 : 0) << 2) + ((mIsManagedProfile ? 1 : 0) << 1)
|
||||||
+ (mIsAlpha ? 1 : 0);
|
+ (mIsAlpha ? 1 : 0);
|
||||||
return DETAIL_TEXTS[index];
|
return mDevicePolicyManager.getString(
|
||||||
|
DETAIL_TEXT_OVERRIDES[index], () -> getString(DETAIL_TEXTS[index]));
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getErrorMessage() {
|
private int getErrorMessage() {
|
||||||
@@ -259,7 +288,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getLastTryErrorMessage(int userType) {
|
protected String getLastTryOverrideErrorMessageId(int userType) {
|
||||||
|
if (userType == USER_TYPE_MANAGED_PROFILE) {
|
||||||
|
return mIsAlpha ? WORK_PROFILE_LAST_PASSWORD_ATTEMPT_BEFORE_WIPE
|
||||||
|
: WORK_PROFILE_LAST_PIN_ATTEMPT_BEFORE_WIPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLastTryDefaultErrorMessage(int userType) {
|
||||||
switch (userType) {
|
switch (userType) {
|
||||||
case USER_TYPE_PRIMARY:
|
case USER_TYPE_PRIMARY:
|
||||||
return mIsAlpha ? R.string.lock_last_password_attempt_before_wipe_device
|
return mIsAlpha ? R.string.lock_last_password_attempt_before_wipe_device
|
||||||
|
@@ -16,6 +16,12 @@
|
|||||||
|
|
||||||
package com.android.settings.password;
|
package com.android.settings.password;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.UNDEFINED;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.CONFIRM_WORK_PROFILE_PATTERN_HEADER;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_PATTERN_REQUIRED;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -258,19 +264,25 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
mGlifLayout.getDescriptionTextView().setAlpha(0f);
|
mGlifLayout.getDescriptionTextView().setAlpha(0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getDefaultDetails() {
|
private String getDefaultDetails() {
|
||||||
if (mFrp) {
|
if (mFrp) {
|
||||||
return R.string.lockpassword_confirm_your_pattern_details_frp;
|
return getString(R.string.lockpassword_confirm_your_pattern_details_frp);
|
||||||
}
|
}
|
||||||
final boolean isStrongAuthRequired = isStrongAuthRequired();
|
final boolean isStrongAuthRequired = isStrongAuthRequired();
|
||||||
if (mIsManagedProfile) {
|
if (mIsManagedProfile) {
|
||||||
return isStrongAuthRequired
|
if (isStrongAuthRequired) {
|
||||||
? R.string.lockpassword_strong_auth_required_work_pattern
|
return mDevicePolicyManager.getString(WORK_PROFILE_PATTERN_REQUIRED,
|
||||||
: R.string.lockpassword_confirm_your_pattern_generic_profile;
|
() -> getString(
|
||||||
|
R.string.lockpassword_strong_auth_required_work_pattern));
|
||||||
|
} else {
|
||||||
|
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
|
||||||
|
() -> getString(
|
||||||
|
R.string.lockpassword_confirm_your_pattern_generic_profile));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return isStrongAuthRequired
|
return isStrongAuthRequired
|
||||||
? R.string.lockpassword_strong_auth_required_device_pattern
|
? getString(R.string.lockpassword_strong_auth_required_device_pattern)
|
||||||
: R.string.lockpassword_confirm_your_pattern_generic;
|
: getString(R.string.lockpassword_confirm_your_pattern_generic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,11 +364,16 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
mGlifLayout.getHeaderTextView().announceForAccessibility(mGlifLayout.getHeaderText());
|
mGlifLayout.getHeaderTextView().announceForAccessibility(mGlifLayout.getHeaderText());
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getDefaultHeader() {
|
private String getDefaultHeader() {
|
||||||
if (mFrp) return R.string.lockpassword_confirm_your_pattern_header_frp;
|
if (mFrp) return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
|
||||||
return mIsManagedProfile
|
|
||||||
? R.string.lockpassword_confirm_your_work_pattern_header
|
if (mIsManagedProfile) {
|
||||||
: R.string.lockpassword_confirm_your_pattern_header;
|
return mDevicePolicyManager.getString(
|
||||||
|
CONFIRM_WORK_PROFILE_PATTERN_HEADER,
|
||||||
|
() -> getString(R.string.lockpassword_confirm_your_work_pattern_header));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getString(R.string.lockpassword_confirm_your_pattern_header);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Runnable mClearPatternRunnable = new Runnable() {
|
private Runnable mClearPatternRunnable = new Runnable() {
|
||||||
@@ -550,7 +567,16 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getLastTryErrorMessage(int userType) {
|
protected String getLastTryOverrideErrorMessageId(int userType) {
|
||||||
|
if (userType == USER_TYPE_MANAGED_PROFILE) {
|
||||||
|
return WORK_PROFILE_LAST_PATTERN_ATTEMPT_BEFORE_WIPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLastTryDefaultErrorMessage(int userType) {
|
||||||
switch (userType) {
|
switch (userType) {
|
||||||
case USER_TYPE_PRIMARY:
|
case USER_TYPE_PRIMARY:
|
||||||
return R.string.lock_last_pattern_attempt_before_wipe_device;
|
return R.string.lock_last_pattern_attempt_before_wipe_device;
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.security;
|
package com.android.settings.security;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE;
|
||||||
|
|
||||||
import static com.android.settings.security.SecuritySettings.UNIFY_LOCK_CONFIRM_PROFILE_REQUEST;
|
import static com.android.settings.security.SecuritySettings.UNIFY_LOCK_CONFIRM_PROFILE_REQUEST;
|
||||||
import static com.android.settings.security.SecuritySettings.UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST;
|
import static com.android.settings.security.SecuritySettings.UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST;
|
||||||
|
|
||||||
@@ -190,8 +192,8 @@ public class LockUnificationPreferenceController extends AbstractPreferenceContr
|
|||||||
*/
|
*/
|
||||||
public void startUnification() {
|
public void startUnification() {
|
||||||
// Confirm profile lock
|
// Confirm profile lock
|
||||||
final String title = mContext.getString(
|
final String title = mDpm.getString(WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
|
||||||
R.string.unlock_set_unlock_launch_picker_title_profile);
|
() -> mContext.getString(R.string.unlock_set_unlock_launch_picker_title_profile));
|
||||||
final ChooseLockSettingsHelper.Builder builder =
|
final ChooseLockSettingsHelper.Builder builder =
|
||||||
new ChooseLockSettingsHelper.Builder(mHost.getActivity(), mHost);
|
new ChooseLockSettingsHelper.Builder(mHost.getActivity(), mHost);
|
||||||
final boolean launched = builder.setRequestCode(UNIFY_LOCK_CONFIRM_PROFILE_REQUEST)
|
final boolean launched = builder.setRequestCode(UNIFY_LOCK_CONFIRM_PROFILE_REQUEST)
|
||||||
|
@@ -16,7 +16,11 @@
|
|||||||
|
|
||||||
package com.android.settings.security;
|
package com.android.settings.security;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_UNIFY_LOCKS_DETAIL;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_UNIFY_LOCKS_NONCOMPLIANT;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -53,10 +57,16 @@ public class UnificationConfirmationDialog extends InstrumentedDialogFragment {
|
|||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
final SecuritySettings parentFragment = ((SecuritySettings) getParentFragment());
|
final SecuritySettings parentFragment = ((SecuritySettings) getParentFragment());
|
||||||
final boolean compliant = getArguments().getBoolean(EXTRA_COMPLIANT);
|
final boolean compliant = getArguments().getBoolean(EXTRA_COMPLIANT);
|
||||||
|
|
||||||
|
String overrideMessageId = compliant ? WORK_PROFILE_UNIFY_LOCKS_DETAIL
|
||||||
|
: WORK_PROFILE_UNIFY_LOCKS_NONCOMPLIANT;
|
||||||
|
int defaultMessageId = compliant ? R.string.lock_settings_profile_unification_dialog_body
|
||||||
|
: R.string.lock_settings_profile_unification_dialog_uncompliant_body;
|
||||||
|
|
||||||
return new AlertDialog.Builder(getActivity())
|
return new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.lock_settings_profile_unification_dialog_title)
|
.setTitle(R.string.lock_settings_profile_unification_dialog_title)
|
||||||
.setMessage(compliant ? R.string.lock_settings_profile_unification_dialog_body
|
.setMessage(getContext().getSystemService(DevicePolicyManager.class)
|
||||||
: R.string.lock_settings_profile_unification_dialog_uncompliant_body)
|
.getString(overrideMessageId, () -> getString(defaultMessageId)))
|
||||||
.setPositiveButton(
|
.setPositiveButton(
|
||||||
compliant ? R.string.lock_settings_profile_unification_dialog_confirm
|
compliant ? R.string.lock_settings_profile_unification_dialog_confirm
|
||||||
: R.string
|
: R.string
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.security.screenlock;
|
package com.android.settings.security.screenlock;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.DISABLED_BY_IT_ADMIN_TITLE;
|
||||||
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -123,7 +124,8 @@ public class LockAfterTimeoutPreferenceController extends AbstractPreferenceCont
|
|||||||
private void updateLockAfterPreferenceSummary(TimeoutListPreference preference) {
|
private void updateLockAfterPreferenceSummary(TimeoutListPreference preference) {
|
||||||
final CharSequence summary;
|
final CharSequence summary;
|
||||||
if (preference.isDisabledByAdmin()) {
|
if (preference.isDisabledByAdmin()) {
|
||||||
summary = mContext.getText(R.string.disabled_by_policy_title);
|
summary = mDPM.getString(DISABLED_BY_IT_ADMIN_TITLE,
|
||||||
|
() -> mContext.getString(R.string.disabled_by_policy_title));
|
||||||
} else {
|
} else {
|
||||||
// Update summary message with current value
|
// Update summary message with current value
|
||||||
long currentTimeout = Settings.Secure.getLong(mContext.getContentResolver(),
|
long currentTimeout = Settings.Secure.getLong(mContext.getContentResolver(),
|
||||||
|
@@ -16,7 +16,11 @@
|
|||||||
|
|
||||||
package com.android.settings.users;
|
package com.android.settings.users;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_REMOVE_MESSAGE;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_REMOVE_TITLE;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
@@ -52,17 +56,20 @@ public final class UserDialogs {
|
|||||||
public static Dialog createRemoveDialog(Context context, int removingUserId,
|
public static Dialog createRemoveDialog(Context context, int removingUserId,
|
||||||
DialogInterface.OnClickListener onConfirmListener) {
|
DialogInterface.OnClickListener onConfirmListener) {
|
||||||
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||||
|
DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
|
||||||
UserInfo userInfo = um.getUserInfo(removingUserId);
|
UserInfo userInfo = um.getUserInfo(removingUserId);
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(context)
|
AlertDialog.Builder builder = new AlertDialog.Builder(context)
|
||||||
.setPositiveButton(R.string.user_delete_button, onConfirmListener)
|
.setPositiveButton(R.string.user_delete_button, onConfirmListener)
|
||||||
.setNegativeButton(android.R.string.cancel, null);
|
.setNegativeButton(android.R.string.cancel, null);
|
||||||
if (userInfo.isManagedProfile()) {
|
if (userInfo.isManagedProfile()) {
|
||||||
builder.setTitle(R.string.work_profile_confirm_remove_title);
|
builder.setTitle(dpm.getString(WORK_PROFILE_CONFIRM_REMOVE_TITLE,
|
||||||
|
() -> context.getString(R.string.work_profile_confirm_remove_title)));
|
||||||
View view = createRemoveManagedUserDialogView(context, removingUserId);
|
View view = createRemoveManagedUserDialogView(context, removingUserId);
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
builder.setView(view);
|
builder.setView(view);
|
||||||
} else {
|
} else {
|
||||||
builder.setMessage(R.string.work_profile_confirm_remove_message);
|
builder.setMessage(dpm.getString(WORK_PROFILE_CONFIRM_REMOVE_MESSAGE,
|
||||||
|
() -> context.getString(R.string.work_profile_confirm_remove_message)));
|
||||||
}
|
}
|
||||||
} else if (UserHandle.myUserId() == removingUserId) {
|
} else if (UserHandle.myUserId() == removingUserId) {
|
||||||
builder.setTitle(R.string.user_confirm_remove_self_title);
|
builder.setTitle(R.string.user_confirm_remove_self_title);
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.utils;
|
package com.android.settings.utils;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -134,7 +136,9 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings {
|
|||||||
if (managedProfileId != UserHandle.USER_NULL
|
if (managedProfileId != UserHandle.USER_NULL
|
||||||
&& !mDpm.isNotificationListenerServicePermitted(
|
&& !mDpm.isNotificationListenerServicePermitted(
|
||||||
service.packageName, managedProfileId)) {
|
service.packageName, managedProfileId)) {
|
||||||
pref.setSummary(R.string.work_profile_notification_access_blocked_summary);
|
pref.setSummary(mDpm.getString(WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED,
|
||||||
|
() -> getString(
|
||||||
|
R.string.work_profile_notification_access_blocked_summary)));
|
||||||
}
|
}
|
||||||
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
final boolean enable = (boolean) newValue;
|
final boolean enable = (boolean) newValue;
|
||||||
|
@@ -289,7 +289,8 @@ public class EntityHeaderController {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
AppInfoBase.startAppInfoFragment(
|
AppInfoBase.startAppInfoFragment(
|
||||||
AppInfoDashboardFragment.class, R.string.application_info_label,
|
AppInfoDashboardFragment.class,
|
||||||
|
mActivity.getString(R.string.application_info_label),
|
||||||
mPackageName, mUid, mFragment, 0 /* request */,
|
mPackageName, mUid, mFragment, 0 /* request */,
|
||||||
mMetricsCategory);
|
mMetricsCategory);
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,8 @@ package com.android.settings.password;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
@@ -27,9 +29,13 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.robolectric.Robolectric;
|
import org.robolectric.Robolectric;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class ConfirmCredentialTest {
|
public class ConfirmCredentialTest {
|
||||||
|
|
||||||
|
private Context mContext = RuntimeEnvironment.application;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLastTryDialogShownExactlyOnce() {
|
public void testLastTryDialogShownExactlyOnce() {
|
||||||
FragmentManager fm = Robolectric.buildActivity(FragmentActivity.class).
|
FragmentManager fm = Robolectric.buildActivity(FragmentActivity.class).
|
||||||
@@ -37,13 +43,16 @@ public class ConfirmCredentialTest {
|
|||||||
|
|
||||||
// Launch only one instance at a time.
|
// Launch only one instance at a time.
|
||||||
assertThat(LastTryDialog.show(
|
assertThat(LastTryDialog.show(
|
||||||
fm, "title", android.R.string.yes, android.R.string.ok, false)).isTrue();
|
fm, "title", mContext.getString(android.R.string.yes),
|
||||||
|
android.R.string.ok, false)).isTrue();
|
||||||
assertThat(LastTryDialog.show(
|
assertThat(LastTryDialog.show(
|
||||||
fm, "title", android.R.string.yes, android.R.string.ok, false)).isFalse();
|
fm, "title", mContext.getString(android.R.string.yes),
|
||||||
|
android.R.string.ok, false)).isFalse();
|
||||||
|
|
||||||
// After cancelling, the dialog should be re-shown when asked for.
|
// After cancelling, the dialog should be re-shown when asked for.
|
||||||
LastTryDialog.hide(fm);
|
LastTryDialog.hide(fm);
|
||||||
assertThat(LastTryDialog.show(
|
assertThat(LastTryDialog.show(
|
||||||
fm, "title", android.R.string.yes, android.R.string.ok, false)).isTrue();
|
fm, "title", mContext.getString(android.R.string.yes),
|
||||||
|
android.R.string.ok, false)).isTrue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user