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;
|
||||
|
||||
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 android.accounts.Account;
|
||||
@@ -23,6 +26,7 @@ import android.accounts.AccountManager;
|
||||
import android.accounts.AuthenticatorDescription;
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ComponentName;
|
||||
import android.content.ContentResolver;
|
||||
@@ -491,8 +495,17 @@ public class MainClear extends InstrumentedFragment implements OnGlobalLayoutLis
|
||||
if (profilesSize > 1) {
|
||||
View titleView = Utils.inflateCategoryHeader(inflater, contents);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -15,6 +15,11 @@
|
||||
*/
|
||||
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.app.Activity;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
@@ -42,12 +47,16 @@ public class RemoteBugreportActivity extends Activity {
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||
|
||||
final int notificationType = getIntent().getIntExtra(
|
||||
DevicePolicyManager.EXTRA_BUGREPORT_NOTIFICATION_TYPE, -1);
|
||||
|
||||
if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_ACCEPTED_NOT_FINISHED) {
|
||||
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() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
@@ -65,12 +74,21 @@ public class RemoteBugreportActivity extends Activity {
|
||||
} else if (notificationType == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
||||
|| notificationType
|
||||
== DevicePolicyManager.NOTIFICATION_BUGREPORT_FINISHED_NOT_ACCEPTED) {
|
||||
|
||||
int defaultMessageId = notificationType
|
||||
== DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
||||
? R.string.share_remote_bugreport_dialog_message
|
||||
: 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(R.string.share_remote_bugreport_dialog_title)
|
||||
.setMessage(notificationType
|
||||
== DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
|
||||
? R.string.share_remote_bugreport_dialog_message
|
||||
: R.string.share_remote_bugreport_dialog_message_finished)
|
||||
.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() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
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.WRAP_CONTENT;
|
||||
|
||||
@@ -82,6 +84,7 @@ public class TrustedCredentialsSettings extends InstrumentedFragment
|
||||
|
||||
private static final String TAG = "TrustedCredentialsSettings";
|
||||
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
private UserManager mUserManager;
|
||||
private KeyguardManager mKeyguardManager;
|
||||
private int mTrustAllCaUserId;
|
||||
@@ -179,6 +182,7 @@ public class TrustedCredentialsSettings extends InstrumentedFragment
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
final Activity activity = getActivity();
|
||||
mDevicePolicyManager = activity.getSystemService(DevicePolicyManager.class);
|
||||
mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
|
||||
mKeyguardManager = (KeyguardManager) activity
|
||||
.getSystemService(Context.KEYGUARD_SERVICE);
|
||||
@@ -385,9 +389,12 @@ public class TrustedCredentialsSettings extends InstrumentedFragment
|
||||
|
||||
final TextView title = (TextView) convertView.findViewById(android.R.id.title);
|
||||
if (getUserInfoByGroup(groupPosition).isManagedProfile()) {
|
||||
title.setText(R.string.category_work);
|
||||
title.setText(mDevicePolicyManager.getString(WORK_CATEGORY_HEADER,
|
||||
() -> getString(R.string.category_work)));
|
||||
} 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);
|
||||
|
||||
|
@@ -16,6 +16,14 @@
|
||||
|
||||
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.os.UserManager.DISALLOW_MODIFY_ACCOUNTS;
|
||||
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.AccountManager;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
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 UserManager mUm;
|
||||
private DevicePolicyManager mDpm;
|
||||
private SparseArray<ProfileData> mProfiles = new SparseArray<ProfileData>();
|
||||
private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver =
|
||||
new ManagedProfileBroadcastReceiver();
|
||||
@@ -146,6 +156,7 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
@ProfileSelectFragment.ProfileType int type) {
|
||||
super(context);
|
||||
mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
mDpm = context.getSystemService(DevicePolicyManager.class);
|
||||
mAuthorities = authorities;
|
||||
mFragment = parent;
|
||||
if (mAuthorities != null) {
|
||||
@@ -188,13 +199,16 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
UserHandle.myUserId())) {
|
||||
final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
||||
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;
|
||||
rawData.add(data);
|
||||
}
|
||||
final SearchIndexableRaw data = new SearchIndexableRaw(mContext);
|
||||
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;
|
||||
rawData.add(data);
|
||||
}
|
||||
@@ -253,7 +267,8 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
new SubSettingLauncher(mContext)
|
||||
.setSourceMetricsCategory(metricsCategory)
|
||||
.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)
|
||||
.launch();
|
||||
|
||||
@@ -331,11 +346,15 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
preferenceGroup.setContentDescription(title);
|
||||
} else if (userInfo.isManagedProfile()) {
|
||||
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);
|
||||
preferenceGroup.setSummary(workGroupSummary);
|
||||
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();
|
||||
mHelper.enforceRestrictionOnPreference(profileData.removeWorkProfilePreference,
|
||||
@@ -343,9 +362,12 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
profileData.managedProfilePreference = newManagedProfileSettings();
|
||||
} else {
|
||||
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(
|
||||
mContext.getString(R.string.accessibility_category_personal));
|
||||
mDpm.getString(ACCESSIBILITY_CATEGORY_PERSONAL, () ->
|
||||
mContext.getString(R.string.accessibility_category_personal)));
|
||||
}
|
||||
}
|
||||
final PreferenceScreen screen = mFragment.getPreferenceScreen();
|
||||
@@ -378,7 +400,9 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
RestrictedPreference preference = new RestrictedPreference(
|
||||
mFragment.getPreferenceManager().getContext());
|
||||
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.setOnPreferenceClickListener(this);
|
||||
preference.setOrder(ORDER_LAST);
|
||||
@@ -389,7 +413,8 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
private Preference newManagedProfileSettings() {
|
||||
Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
|
||||
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.setOnPreferenceClickListener(this);
|
||||
preference.setOrder(ORDER_NEXT_TO_LAST);
|
||||
@@ -403,7 +428,8 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
return null;
|
||||
}
|
||||
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() {
|
||||
@@ -482,7 +508,9 @@ public class AccountPreferenceController extends AbstractPreferenceController
|
||||
mProfileNotAvailablePreference.setIcon(R.drawable.empty_icon);
|
||||
mProfileNotAvailablePreference.setTitle(null);
|
||||
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);
|
||||
}
|
||||
if (profileData.removeWorkProfilePreference != null) {
|
||||
|
@@ -16,10 +16,14 @@
|
||||
|
||||
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.AccountManager;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -154,10 +158,20 @@ public class AccountSyncSettings extends AccountPreferenceBase {
|
||||
UserInfo user = um.getUserInfo(mUserHandle.getIdentifier());
|
||||
boolean isWorkProfile = user != null ? user.isManagedProfile() : false;
|
||||
CharSequence currentTitle = getActivity().getTitle();
|
||||
|
||||
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||
|
||||
String accessibilityTitle =
|
||||
getString(isWorkProfile
|
||||
? R.string.accessibility_work_account_title
|
||||
: R.string.accessibility_personal_account_title, currentTitle);
|
||||
isWorkProfile
|
||||
? devicePolicyManager.getString(ACCESSIBILITY_WORK_ACCOUNT_TITLE,
|
||||
() -> 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));
|
||||
}
|
||||
|
||||
|
@@ -15,12 +15,15 @@
|
||||
*/
|
||||
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.AccountManager;
|
||||
import android.accounts.AuthenticatorException;
|
||||
import android.accounts.OperationCanceledException;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@@ -213,7 +216,9 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl
|
||||
|
||||
return new AlertDialog.Builder(context)
|
||||
.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)
|
||||
.create();
|
||||
}
|
||||
|
@@ -13,6 +13,10 @@
|
||||
*/
|
||||
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.Context;
|
||||
import android.content.Intent;
|
||||
@@ -40,6 +44,7 @@ public class WorkModePreferenceController extends BasePreferenceController imple
|
||||
|
||||
private UserManager mUserManager;
|
||||
private UserHandle mManagedUser;
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
private Preference mPreference;
|
||||
private IntentFilter mIntentFilter;
|
||||
@@ -47,6 +52,7 @@ public class WorkModePreferenceController extends BasePreferenceController imple
|
||||
public WorkModePreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||
mIntentFilter = new IntentFilter();
|
||||
mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
|
||||
mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
|
||||
@@ -80,9 +86,15 @@ public class WorkModePreferenceController extends BasePreferenceController imple
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
return mContext.getText(isChecked()
|
||||
? R.string.work_mode_on_summary
|
||||
: R.string.work_mode_off_summary);
|
||||
if (isChecked()) {
|
||||
return mDevicePolicyManager
|
||||
.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() {
|
||||
|
@@ -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) {
|
||||
final Bundle args = new Bundle();
|
||||
args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
|
||||
@@ -228,7 +228,7 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
|
||||
new SubSettingLauncher(source.getContext())
|
||||
.setDestination(fragment.getName())
|
||||
.setSourceMetricsCategory(sourceMetricsCategory)
|
||||
.setTitleRes(titleRes)
|
||||
.setTitleText(title)
|
||||
.setArguments(args)
|
||||
.setUserHandle(new UserHandle(UserHandle.getUserId(uid)))
|
||||
.setResultListener(source, request)
|
||||
|
@@ -211,7 +211,8 @@ public class AppsPreferenceController extends BasePreferenceController implement
|
||||
pref.setOrder(showAppsCount++);
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
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());
|
||||
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_LOADER_USAGE_STATS;
|
||||
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_DISABLE_USAGE_ACCESS_WARNING;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.AppOpsManager;
|
||||
@@ -96,7 +97,8 @@ public class UsageAccessDetails extends AppInfoWithHeader implements OnPreferenc
|
||||
new AlertDialog.Builder(getContext())
|
||||
.setIcon(com.android.internal.R.drawable.ic_dialog_alert_material)
|
||||
.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)
|
||||
.show();
|
||||
}
|
||||
|
@@ -645,8 +645,8 @@ public class ManageApplications extends InstrumentedFragment
|
||||
}
|
||||
|
||||
private void startAppInfoFragment(Class<?> fragment, int titleRes) {
|
||||
AppInfoBase.startAppInfoFragment(fragment, titleRes, mCurrentPkgName, mCurrentUid, this,
|
||||
INSTALLED_APP_DETAILS, getMetricsCategory());
|
||||
AppInfoBase.startAppInfoFragment(fragment, getString(titleRes), mCurrentPkgName,
|
||||
mCurrentUid, this, INSTALLED_APP_DETAILS, getMetricsCategory());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -70,7 +70,8 @@ public class DomainAppPreferenceController extends BasePreferenceController impl
|
||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
||||
if (preference instanceof DomainAppPreference) {
|
||||
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,
|
||||
INSTALLED_APP_DETAILS, mMetricsCategory);
|
||||
return true;
|
||||
|
@@ -17,6 +17,18 @@
|
||||
package com.android.settings.applications.specialaccess.deviceadmin;
|
||||
|
||||
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.ActivityManager;
|
||||
@@ -318,7 +330,8 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
||||
|
||||
// Build and show the simplified dialog
|
||||
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)
|
||||
.setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
|
||||
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.setText(mAddMsgText);
|
||||
mAdminWarning = dialog.findViewById(R.id.admin_warning_simplified);
|
||||
mAdminWarning.setText(getString(R.string.device_admin_warning_simplified,
|
||||
mProfileOwnerName));
|
||||
mAdminWarning.setText(
|
||||
mDPM.getString(NEW_DEVICE_ADMIN_WARNING_SIMPLIFIED, () ->
|
||||
getString(R.string.device_admin_warning_simplified,
|
||||
mProfileOwnerName), mProfileOwnerName));
|
||||
return;
|
||||
}
|
||||
setContentView(R.layout.device_admin_add);
|
||||
@@ -655,8 +670,10 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
||||
final boolean isManagedProfile = isManagedProfile(mDeviceAdmin);
|
||||
if (isProfileOwner && isManagedProfile) {
|
||||
// Profile owner in a managed profile, user can remove profile to disable admin.
|
||||
mAdminWarning.setText(R.string.admin_profile_owner_message);
|
||||
mActionButton.setText(R.string.remove_managed_profile_label);
|
||||
mAdminWarning.setText(mDPM.getString(WORK_PROFILE_ADMIN_POLICIES_WARNING,
|
||||
() -> 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 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.
|
||||
if (isProfileOwner) {
|
||||
// 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 {
|
||||
// Show device owner description.
|
||||
if (isFinancedDevice()) {
|
||||
mAdminWarning.setText(R.string.admin_financed_message);
|
||||
} 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);
|
||||
} else {
|
||||
addDeviceAdminPolicies(false /* showDescription */);
|
||||
mAdminWarning.setText(getString(R.string.device_admin_status,
|
||||
mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
|
||||
getPackageManager())));
|
||||
CharSequence label = mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(
|
||||
getPackageManager());
|
||||
mAdminWarning.setText(mDPM.getString(ACTIVE_DEVICE_ADMIN_WARNING,
|
||||
() -> getString(R.string.device_admin_status, label), label));
|
||||
setTitle(R.string.active_device_admin_msg);
|
||||
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 {
|
||||
mActionButton.setText(R.string.remove_device_admin);
|
||||
mActionButton.setText(mDPM.getString(REMOVE_DEVICE_ADMIN,
|
||||
() -> getString(R.string.remove_device_admin)));
|
||||
}
|
||||
}
|
||||
CharSequence supportMessage = mDPM.getLongSupportMessageForUser(
|
||||
@@ -703,10 +726,16 @@ public class DeviceAdminAdd extends CollapsingToolbarBaseActivity {
|
||||
}
|
||||
} else {
|
||||
addDeviceAdminPolicies(true /* showDescription */);
|
||||
mAdminWarning.setText(getString(R.string.device_admin_warning,
|
||||
mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
|
||||
setTitle(getText(R.string.add_device_admin_msg));
|
||||
mActionButton.setText(getText(R.string.add_device_admin));
|
||||
CharSequence label = mDeviceAdmin.getActivityInfo()
|
||||
.applicationInfo.loadLabel(getPackageManager());
|
||||
mAdminWarning.setText(
|
||||
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()) {
|
||||
mUninstallButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
@@ -15,6 +15,11 @@
|
||||
*/
|
||||
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_UNAWARE;
|
||||
import static android.provider.Settings.ACTION_MANAGE_CROSS_PROFILE_ACCESS;
|
||||
@@ -258,16 +263,22 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
||||
|
||||
final TextView dialogTitle = dialogView.findViewById(
|
||||
R.id.interact_across_profiles_consent_dialog_title);
|
||||
dialogTitle.setText(
|
||||
getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel));
|
||||
dialogTitle.setText(mDpm.getString(CONNECT_APPS_DIALOG_TITLE, () ->
|
||||
getString(R.string.interact_across_profiles_consent_dialog_title, mAppLabel)));
|
||||
|
||||
final TextView appDataSummary = dialogView.findViewById(R.id.app_data_summary);
|
||||
appDataSummary.setText(getString(
|
||||
R.string.interact_across_profiles_consent_dialog_app_data_summary, mAppLabel));
|
||||
appDataSummary.setText(
|
||||
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);
|
||||
permissionsSummary.setText(getString(
|
||||
R.string.interact_across_profiles_consent_dialog_permissions_summary, mAppLabel));
|
||||
permissionsSummary.setText(mDpm.getString(APP_CAN_ACCESS_PERSONAL_PERMISSIONS,
|
||||
() -> getString(
|
||||
R.string.interact_across_profiles_consent_dialog_permissions_summary,
|
||||
mAppLabel),
|
||||
mAppLabel));
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setView(dialogView)
|
||||
@@ -393,9 +404,12 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
||||
return false;
|
||||
}
|
||||
if (!mInstalledInPersonal) {
|
||||
mInstallBanner.setTitle(getString(
|
||||
R.string.interact_across_profiles_install_personal_app_title,
|
||||
mAppLabel));
|
||||
mInstallBanner.setTitle(
|
||||
mDpm.getString(INSTALL_IN_PERSONAL_PROFILE_TO_CONNECT_PROMPT,
|
||||
() -> getString(
|
||||
R.string.interact_across_profiles_install_personal_app_title,
|
||||
mAppLabel),
|
||||
mAppLabel));
|
||||
if (mInstallAppIntent != null) {
|
||||
mInstallBanner.setSummary(
|
||||
R.string.interact_across_profiles_install_app_summary);
|
||||
@@ -404,9 +418,12 @@ public class InteractAcrossProfilesDetails extends AppInfoBase
|
||||
return true;
|
||||
}
|
||||
if (!mInstalledInWork) {
|
||||
mInstallBanner.setTitle(getString(
|
||||
R.string.interact_across_profiles_install_work_app_title,
|
||||
mAppLabel));
|
||||
mInstallBanner.setTitle(
|
||||
mDpm.getString(INSTALL_IN_WORK_PROFILE_TO_CONNECT_PROMPT,
|
||||
() -> getString(
|
||||
R.string.interact_across_profiles_install_work_app_title,
|
||||
mAppLabel),
|
||||
mAppLabel));
|
||||
if (mInstallAppIntent != null) {
|
||||
mInstallBanner.setSummary(
|
||||
R.string.interact_across_profiles_install_app_summary);
|
||||
|
@@ -15,9 +15,11 @@
|
||||
*/
|
||||
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 android.annotation.Nullable;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
@@ -51,6 +53,7 @@ public class InteractAcrossProfilesSettings extends EmptyTextSettings {
|
||||
private Context mContext;
|
||||
private PackageManager mPackageManager;
|
||||
private UserManager mUserManager;
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
private CrossProfileApps mCrossProfileApps;
|
||||
private IconDrawableFactory mIconDrawableFactory;
|
||||
|
||||
@@ -63,6 +66,7 @@ public class InteractAcrossProfilesSettings extends EmptyTextSettings {
|
||||
mUserManager = mContext.getSystemService(UserManager.class);
|
||||
mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
|
||||
mCrossProfileApps = mContext.getSystemService(CrossProfileApps.class);
|
||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -91,7 +95,8 @@ public class InteractAcrossProfilesSettings extends EmptyTextSettings {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
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,
|
||||
appInfo.uid,
|
||||
InteractAcrossProfilesSettings.this/* source */,
|
||||
|
@@ -168,7 +168,8 @@ public class PictureInPictureSettings extends EmptyTextSettings {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
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());
|
||||
return true;
|
||||
}
|
||||
|
@@ -88,9 +88,9 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
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
|
||||
@@ -414,7 +414,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
|
||||
super.initViews();
|
||||
|
||||
if (mBiometricUnlockDisabledByAdmin && !mParentalConsentRequired) {
|
||||
setDescriptionText(getDescriptionResDisabledByAdmin());
|
||||
setDescriptionText(getDescriptionDisabledByAdmin());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
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.settings.SettingsEnums;
|
||||
import android.content.Intent;
|
||||
@@ -221,8 +223,11 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDescriptionResDisabledByAdmin() {
|
||||
return R.string.security_settings_face_enroll_introduction_message_unlock_disabled;
|
||||
protected String getDescriptionDisabledByAdmin() {
|
||||
DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||
return devicePolicyManager.getString(
|
||||
FACE_UNLOCK_DISABLED,
|
||||
() -> getString(R.string.security_settings_face_enroll_introduction_message_unlock_disabled));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -16,6 +16,9 @@
|
||||
|
||||
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.os.UserHandle;
|
||||
|
||||
@@ -27,21 +30,26 @@ import com.android.settings.R;
|
||||
public class FaceProfileStatusPreferenceController extends FaceStatusPreferenceController {
|
||||
|
||||
private static final String KEY_FACE_SETTINGS = "face_settings_profile";
|
||||
private final DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
public FaceProfileStatusPreferenceController(Context context) {
|
||||
super(context, KEY_FACE_SETTINGS);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
public FaceProfileStatusPreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
public FaceProfileStatusPreferenceController(Context context, Lifecycle lifecycle) {
|
||||
super(context, KEY_FACE_SETTINGS, lifecycle);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
public FaceProfileStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
|
||||
super(context, key, lifecycle);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,7 +78,10 @@ public class FaceProfileStatusPreferenceController extends FaceStatusPreferenceC
|
||||
@Override
|
||||
public void updateState(Preference 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;
|
||||
|
||||
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.ENROLL_REQUEST;
|
||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -66,6 +68,7 @@ public class FaceSettings extends DashboardFragment {
|
||||
|
||||
private UserManager mUserManager;
|
||||
private FaceManager mFaceManager;
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
private int mUserId;
|
||||
private int mSensorId;
|
||||
private long mChallenge;
|
||||
@@ -148,6 +151,7 @@ public class FaceSettings extends DashboardFragment {
|
||||
|
||||
mUserManager = context.getSystemService(UserManager.class);
|
||||
mFaceManager = context.getSystemService(FaceManager.class);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
mToken = getIntent().getByteArrayExtra(KEY_TOKEN);
|
||||
mSensorId = getIntent().getIntExtra(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, -1);
|
||||
mChallenge = getIntent().getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, 0L);
|
||||
@@ -157,8 +161,10 @@ public class FaceSettings extends DashboardFragment {
|
||||
mFaceFeatureProvider = FeatureFactory.getFactory(getContext()).getFaceFeatureProvider();
|
||||
|
||||
if (mUserManager.getUserInfo(mUserId).isManagedProfile()) {
|
||||
getActivity().setTitle(getActivity().getResources().getString(
|
||||
R.string.security_settings_face_profile_preference_title));
|
||||
getActivity().setTitle(
|
||||
mDevicePolicyManager.getString(FACE_SETTINGS_FOR_WORK_TITLE, () ->
|
||||
getActivity().getResources().getString(
|
||||
R.string.security_settings_face_profile_preference_title)));
|
||||
}
|
||||
|
||||
mLockscreenController = Utils.isMultipleBiometricsSupported(context)
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
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.settings.SettingsEnums;
|
||||
import android.content.ActivityNotFoundException;
|
||||
@@ -57,6 +59,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
@Nullable private FooterButton mPrimaryFooterButton;
|
||||
@Nullable private FooterButton mSecondaryFooterButton;
|
||||
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
|
||||
@@ -68,6 +72,8 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mDevicePolicyManager = getSystemService(DevicePolicyManager.class);
|
||||
|
||||
final ImageView iconFingerprint = findViewById(R.id.icon_fingerprint);
|
||||
final ImageView iconDeviceLocked = findViewById(R.id.icon_device_locked);
|
||||
final ImageView iconTrashCan = findViewById(R.id.icon_trash_can);
|
||||
@@ -177,8 +183,10 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getDescriptionResDisabledByAdmin() {
|
||||
return R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled;
|
||||
protected String getDescriptionDisabledByAdmin() {
|
||||
return mDevicePolicyManager.getString(
|
||||
FINGERPRINT_UNLOCK_DISABLED,
|
||||
() -> getString(R.string.security_settings_fingerprint_enroll_introduction_message_unlock_disabled));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -17,6 +17,10 @@
|
||||
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 android.app.Activity;
|
||||
@@ -356,11 +360,22 @@ public class FingerprintSettings extends SubSettings {
|
||||
activity, getString(getHelpResource()), activity.getClass().getName());
|
||||
final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
|
||||
activity, ANNOTATION_URL, helpIntent);
|
||||
mFooterTitle = AnnotationSpan.linkify(getText(admin != null
|
||||
? R.string
|
||||
.security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled
|
||||
: R.string.security_settings_fingerprint_v2_home_screen),
|
||||
linkInfo, adminLinkInfo);
|
||||
|
||||
if (admin != null) {
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private boolean isUdfps() {
|
||||
@@ -917,11 +932,20 @@ public class FingerprintSettings extends SubSettings {
|
||||
mFp = getArguments().getParcelable("fingerprint");
|
||||
final boolean 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())
|
||||
.setTitle(R.string.fingerprint_last_delete_title)
|
||||
.setMessage((isProfileChallengeUser)
|
||||
? R.string.fingerprint_last_delete_message_profile_challenge
|
||||
: R.string.fingerprint_last_delete_message)
|
||||
.setMessage(devicePolicyManager.getString(
|
||||
messageId, () -> getContext().getString(defaultMessageId)))
|
||||
.setPositiveButton(R.string.fingerprint_last_delete_confirm,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
|
@@ -16,9 +16,12 @@
|
||||
|
||||
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 android.app.Activity;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -189,10 +192,15 @@ public class BugReportHandlerPicker extends DefaultAppPickerFragment {
|
||||
return "";
|
||||
}
|
||||
final UserInfo userInfo = mUserManager.getUserInfo(handlerUser);
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
context.getSystemService(DevicePolicyManager.class);
|
||||
|
||||
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 {
|
||||
|
@@ -16,10 +16,13 @@
|
||||
|
||||
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 android.annotation.IntDef;
|
||||
import android.app.Activity;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
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}
|
||||
*/
|
||||
public static final int WORK_TAB = 1;
|
||||
private static final int[] LABEL = {
|
||||
R.string.category_personal, R.string.category_work
|
||||
};
|
||||
|
||||
private ViewGroup mContentView;
|
||||
|
||||
@@ -233,14 +233,23 @@ public abstract class ProfileSelectFragment extends DashboardFragment {
|
||||
|
||||
@Override
|
||||
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) {
|
||||
if (TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())
|
||||
== View.LAYOUT_DIRECTION_RTL) {
|
||||
return LABEL.length - 1 - index;
|
||||
return 1 - index;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
@@ -16,7 +16,12 @@
|
||||
|
||||
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.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.database.DataSetObserver;
|
||||
@@ -54,7 +59,9 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
|
||||
UserInfo userInfo = um.getUserInfo(mUserHandle.getIdentifier());
|
||||
Drawable icon;
|
||||
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(
|
||||
userHandle, /* density= */ 0);
|
||||
} else {
|
||||
@@ -77,14 +84,18 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
|
||||
}
|
||||
|
||||
private ArrayList<UserDetails> data;
|
||||
private final Context mContext;
|
||||
private final LayoutInflater mInflater;
|
||||
private final DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
public UserAdapter(Context context, ArrayList<UserDetails> users) {
|
||||
if (users == null) {
|
||||
throw new IllegalArgumentException("A list of user details must be provided");
|
||||
}
|
||||
mContext = context;
|
||||
this.data = users;
|
||||
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
public UserHandle getUserHandle(int position) {
|
||||
@@ -104,13 +115,15 @@ public class UserAdapter implements SpinnerAdapter, ListAdapter {
|
||||
return row;
|
||||
}
|
||||
|
||||
private int getTitle(UserDetails user) {
|
||||
private String getTitle(UserDetails user) {
|
||||
int userHandle = user.mUserHandle.getIdentifier();
|
||||
if (userHandle == UserHandle.USER_CURRENT
|
||||
|| userHandle == ActivityManager.getCurrentUser()) {
|
||||
return R.string.category_personal;
|
||||
return mDevicePolicyManager.getString(PERSONAL_CATEGORY_HEADER,
|
||||
() -> mContext.getString(R.string.category_personal));
|
||||
} 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;
|
||||
|
||||
import static android.app.admin.DevicePolicyResources.Strings.Settings.ERROR_MOVE_DEVICE_ADMIN;
|
||||
import static android.content.Intent.EXTRA_TITLE;
|
||||
import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.MoveCallback;
|
||||
import android.os.Bundle;
|
||||
@@ -87,7 +89,9 @@ public class StorageWizardMoveProgress extends StorageWizardBase {
|
||||
case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
|
||||
return getString(R.string.insufficient_storage);
|
||||
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:
|
||||
return getString(R.string.does_not_exist);
|
||||
case PackageManager.MOVE_FAILED_INVALID_LOCATION:
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
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 com.android.settings.display.ScreenTimeoutSettings.FALLBACK_SCREEN_TIMEOUT_VALUE;
|
||||
@@ -60,7 +61,9 @@ public class ScreenTimeoutPreferenceController extends BasePreferenceController
|
||||
final RestrictedLockUtils.EnforcedAdmin admin = getPreferenceDisablingAdmin(maxTimeout);
|
||||
if (admin != null) {
|
||||
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);
|
||||
} else {
|
||||
preference.setSummary(getTimeoutSummary(maxTimeout));
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
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.provider.Settings.System.SCREEN_OFF_TIMEOUT;
|
||||
|
||||
@@ -85,6 +86,8 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
||||
}
|
||||
};
|
||||
|
||||
private DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
@VisibleForTesting
|
||||
Context mContext;
|
||||
|
||||
@@ -116,6 +119,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
mContext = context;
|
||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||
mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries);
|
||||
mInitialValues = getResources().getStringArray(R.array.screen_timeout_values);
|
||||
mAdaptiveSleepController = new AdaptiveSleepPreferenceController(context);
|
||||
@@ -219,8 +223,9 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
|
||||
|
||||
@VisibleForTesting
|
||||
void setupDisabledFooterPreference() {
|
||||
final String textDisabledByAdmin = getResources().getString(
|
||||
R.string.admin_disabled_other_options);
|
||||
final String textDisabledByAdmin = mDevicePolicyManager.getString(
|
||||
OTHER_OPTIONS_DISABLED_BY_ADMIN, () -> getResources().getString(
|
||||
R.string.admin_disabled_other_options));
|
||||
final String textMoreDetails = getResources().getString(R.string.admin_more_details);
|
||||
|
||||
final SpannableString spannableString = new SpannableString(
|
||||
|
@@ -14,6 +14,9 @@
|
||||
|
||||
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.text.format.DateUtils;
|
||||
|
||||
@@ -43,11 +46,17 @@ public abstract class AdminActionPreferenceControllerBase extends
|
||||
public void updateState(Preference preference) {
|
||||
final Date timestamp = getAdminActionTimestamp();
|
||||
preference.setSummary(timestamp == null ?
|
||||
mContext.getString(R.string.enterprise_privacy_none) :
|
||||
getEnterprisePrivacyNone() :
|
||||
DateUtils.formatDateTime(mContext, timestamp.getTime(),
|
||||
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
|
||||
public boolean isAvailable() {
|
||||
return true;
|
||||
|
@@ -13,6 +13,10 @@
|
||||
*/
|
||||
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 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 final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
||||
private final DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
public AlwaysOnVpnCurrentUserPreferenceController(Context context) {
|
||||
super(context);
|
||||
mFeatureProvider = FeatureFactory.getFactory(context)
|
||||
.getEnterprisePrivacyFeatureProvider(context);
|
||||
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
preference.setTitle(mFeatureProvider.isInCompMode()
|
||||
? R.string.enterprise_privacy_always_on_vpn_personal
|
||||
: R.string.enterprise_privacy_always_on_vpn_device);
|
||||
if (mFeatureProvider.isInCompMode()) {
|
||||
preference.setTitle(
|
||||
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
|
||||
|
@@ -14,6 +14,10 @@
|
||||
|
||||
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 androidx.annotation.VisibleForTesting;
|
||||
@@ -26,8 +30,11 @@ public class CaCertsCurrentUserPreferenceController extends CaCertsPreferenceCon
|
||||
@VisibleForTesting
|
||||
static final String CA_CERTS_CURRENT_USER = "ca_certs_current_user";
|
||||
|
||||
DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
public CaCertsCurrentUserPreferenceController(Context context) {
|
||||
super(context);
|
||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,9 +45,16 @@ public class CaCertsCurrentUserPreferenceController extends CaCertsPreferenceCon
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
super.updateState(preference);
|
||||
preference.setTitle(mFeatureProvider.isInCompMode()
|
||||
? R.string.enterprise_privacy_ca_certs_personal
|
||||
: R.string.enterprise_privacy_ca_certs_device);
|
||||
|
||||
if (mFeatureProvider.isInCompMode()) {
|
||||
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
|
||||
|
@@ -16,8 +16,13 @@
|
||||
|
||||
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 android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -25,14 +30,17 @@ import com.android.settingslib.enterprise.DeviceAdminStringProvider;
|
||||
|
||||
class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider {
|
||||
private final Context mContext;
|
||||
private final DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
DeviceAdminStringProviderImpl(Context context) {
|
||||
mContext = requireNonNull(context);
|
||||
mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
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
|
||||
@@ -67,12 +75,14 @@ class DeviceAdminStringProviderImpl implements DeviceAdminStringProvider {
|
||||
|
||||
@Override
|
||||
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
|
||||
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
|
||||
|
@@ -16,6 +16,9 @@
|
||||
|
||||
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.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@@ -95,10 +98,12 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe
|
||||
final SpannableStringBuilder disclosure = new SpannableStringBuilder();
|
||||
final CharSequence organizationName = mDpm.getDeviceOwnerOrganizationName();
|
||||
if (organizationName != null) {
|
||||
disclosure.append(mResources.getString(R.string.do_disclosure_with_name,
|
||||
organizationName));
|
||||
disclosure.append(mDpm.getString(DEVICE_MANAGED_WITH_NAME,
|
||||
() -> mResources.getString(R.string.do_disclosure_with_name,
|
||||
organizationName), organizationName));
|
||||
} 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;
|
||||
}
|
||||
|
@@ -16,6 +16,10 @@
|
||||
|
||||
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.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -123,14 +127,20 @@ public class EnterpriseSetDefaultAppsListPreferenceController extends
|
||||
if (!mEnterprisePrivacyFeatureProvider.isInCompMode() && mUsers.size() == 1) {
|
||||
createPreferences(prefContext, screen, mApps.get(0));
|
||||
} else {
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
mContext.getSystemService(DevicePolicyManager.class);
|
||||
for (int i = 0; i < mUsers.size(); i++) {
|
||||
final UserInfo userInfo = mUsers.get(i);
|
||||
final PreferenceCategory category = new PreferenceCategory(prefContext);
|
||||
screen.addPreference(category);
|
||||
if (userInfo.isManagedProfile()) {
|
||||
category.setTitle(R.string.category_work);
|
||||
category.setTitle(devicePolicyManager.getString(
|
||||
WORK_CATEGORY_HEADER,
|
||||
() -> mContext.getString(R.string.category_work)));
|
||||
} else {
|
||||
category.setTitle(R.string.category_personal);
|
||||
category.setTitle(devicePolicyManager.getString(
|
||||
PERSONAL_CATEGORY_HEADER,
|
||||
() -> mContext.getString(R.string.category_personal)));
|
||||
}
|
||||
category.setOrder(i);
|
||||
createPreferences(prefContext, category, mApps.get(i));
|
||||
|
@@ -14,6 +14,9 @@
|
||||
|
||||
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 androidx.preference.Preference;
|
||||
@@ -37,9 +40,13 @@ public class ImePreferenceController extends AbstractPreferenceController implem
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
preference.setSummary(mContext.getResources().getString(
|
||||
R.string.enterprise_privacy_input_method_name,
|
||||
mFeatureProvider.getImeLabelIfOwnerSet()));
|
||||
preference.setSummary(
|
||||
mContext.getSystemService(DevicePolicyManager.class)
|
||||
.getString(ADMIN_ACTION_SET_INPUT_METHOD_NAME, () ->
|
||||
mContext.getResources().getString(
|
||||
R.string.enterprise_privacy_input_method_name,
|
||||
mFeatureProvider.getImeLabelIfOwnerSet()),
|
||||
mFeatureProvider.getImeLabelIfOwnerSet()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -13,6 +13,9 @@
|
||||
*/
|
||||
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 com.android.settings.R;
|
||||
@@ -23,20 +26,28 @@ import com.android.settings.overlay.FeatureFactory;
|
||||
public class ManageDeviceAdminPreferenceController extends BasePreferenceController {
|
||||
|
||||
private final EnterprisePrivacyFeatureProvider mFeatureProvider;
|
||||
private final DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
public ManageDeviceAdminPreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
mFeatureProvider = FeatureFactory.getFactory(context)
|
||||
.getEnterprisePrivacyFeatureProvider(context);
|
||||
mDevicePolicyManager =
|
||||
mContext.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
final int activeAdmins
|
||||
= mFeatureProvider.getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile();
|
||||
return activeAdmins == 0
|
||||
? mContext.getResources().getString(R.string.number_of_device_admins_none)
|
||||
: mContext.getResources().getQuantityString(R.plurals.number_of_device_admins,
|
||||
|
||||
if (activeAdmins == 0) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@@ -17,6 +17,8 @@
|
||||
package com.android.settings.enterprise;
|
||||
|
||||
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.content.Context;
|
||||
@@ -50,10 +52,16 @@ class PrivacyPreferenceControllerHelper {
|
||||
|
||||
final String organizationName = mFeatureProvider.getDeviceOwnerOrganizationName();
|
||||
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 {
|
||||
preference.setSummary(mContext.getResources().getString(
|
||||
R.string.enterprise_privacy_settings_summary_with_name, organizationName));
|
||||
preference.setSummary(mDevicePolicyManager
|
||||
.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;
|
||||
|
||||
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.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -46,6 +49,7 @@ public class WorkModeConditionController implements ConditionalCardController {
|
||||
|
||||
private final Context mAppContext;
|
||||
private final UserManager mUm;
|
||||
private final DevicePolicyManager mDpm;
|
||||
private final ConditionManager mConditionManager;
|
||||
private final Receiver mReceiver;
|
||||
|
||||
@@ -54,6 +58,7 @@ public class WorkModeConditionController implements ConditionalCardController {
|
||||
public WorkModeConditionController(Context appContext, ConditionManager manager) {
|
||||
mAppContext = appContext;
|
||||
mUm = mAppContext.getSystemService(UserManager.class);
|
||||
mDpm = mAppContext.getSystemService(DevicePolicyManager.class);
|
||||
mConditionManager = manager;
|
||||
mReceiver = new Receiver();
|
||||
}
|
||||
@@ -84,13 +89,15 @@ public class WorkModeConditionController implements ConditionalCardController {
|
||||
|
||||
@Override
|
||||
public ContextualCard buildContextualCard() {
|
||||
String conditionWorkTitle = mDpm.getString(WORK_PROFILE_OFF_CONDITION_TITLE,
|
||||
() -> mAppContext.getString(R.string.condition_work_title));
|
||||
return new ConditionalContextualCard.Builder()
|
||||
.setConditionId(ID)
|
||||
.setMetricsConstant(SettingsEnums.SETTINGS_CONDITION_WORK_MODE)
|
||||
.setActionText(mAppContext.getText(R.string.condition_turn_on))
|
||||
.setName(mAppContext.getPackageName() + "/"
|
||||
+ mAppContext.getText(R.string.condition_work_title))
|
||||
.setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
|
||||
+ conditionWorkTitle)
|
||||
.setTitleText(conditionWorkTitle)
|
||||
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
||||
.setViewType(ConditionContextualCardRenderer.VIEW_TYPE_HALF_WIDTH)
|
||||
|
@@ -16,6 +16,9 @@
|
||||
|
||||
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.app.NotificationManager;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
@@ -103,7 +106,9 @@ public class NotificationAccessSettings extends EmptyTextSettings {
|
||||
|
||||
if (UserManager.get(mContext).isManagedProfile()) {
|
||||
// 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();
|
||||
finish();
|
||||
}
|
||||
@@ -163,7 +168,9 @@ public class NotificationAccessSettings extends EmptyTextSettings {
|
||||
if (managedProfileId != UserHandle.USER_NULL
|
||||
&& !mDpm.isNotificationListenerServicePermitted(
|
||||
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 -> {
|
||||
final Bundle args = new Bundle();
|
||||
|
@@ -16,8 +16,13 @@
|
||||
|
||||
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.app.Dialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -252,11 +257,16 @@ public class SoundWorkSettingsController extends AbstractPreferenceController
|
||||
private void enableWorkSyncSettings() {
|
||||
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) {
|
||||
mWorkPhoneRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
|
||||
mWorkPhoneRingtonePreference.setSummary(summary);
|
||||
}
|
||||
mWorkNotificationRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
|
||||
mWorkAlarmRingtonePreference.setSummary(R.string.work_sound_same_as_personal);
|
||||
mWorkNotificationRingtonePreference.setSummary(summary);
|
||||
mWorkAlarmRingtonePreference.setSummary(summary);
|
||||
}
|
||||
|
||||
private void disableWorkSync() {
|
||||
@@ -339,9 +349,18 @@ public class SoundWorkSettingsController extends AbstractPreferenceController
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
Context context = getActivity().getApplicationContext();
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
context.getSystemService(DevicePolicyManager.class);
|
||||
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.work_sync_dialog_title)
|
||||
.setMessage(R.string.work_sync_dialog_message)
|
||||
.setTitle(devicePolicyManager.getString(
|
||||
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,
|
||||
SoundWorkSettingsController.UnifyWorkDialogFragment.this)
|
||||
.setNegativeButton(android.R.string.no, /* listener= */ null)
|
||||
|
@@ -17,7 +17,6 @@
|
||||
package com.android.settings.notification.zen;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
@@ -28,8 +27,8 @@ import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.util.ArraySet;
|
||||
import android.view.View;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
@@ -138,7 +137,7 @@ public class ZenAccessSettings extends EmptyTextSettings implements
|
||||
pref.setOnPreferenceClickListener(preference -> {
|
||||
AppInfoBase.startAppInfoFragment(
|
||||
ZenAccessDetails.class /* fragment */,
|
||||
R.string.manage_zen_access_title /* titleRes */,
|
||||
getString(R.string.manage_zen_access_title) /* titleRes */,
|
||||
pkg,
|
||||
app.uid,
|
||||
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_MEDIUM;
|
||||
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.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_REQUESTED_MIN_COMPLEXITY;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
@@ -394,13 +395,16 @@ public class ChooseLockGeneric extends SettingsActivity {
|
||||
}
|
||||
} else {
|
||||
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 {
|
||||
int profileUserId = Utils.getManagedProfileId(mUserManager, mUserId);
|
||||
if (mController.isScreenLockRestrictedByAdmin()
|
||||
&& profileUserId != UserHandle.USER_NULL) {
|
||||
final StringBuilder description = new StringBuilder(getText(
|
||||
R.string.lock_settings_picker_admin_restricted_personal_message));
|
||||
final StringBuilder description = new StringBuilder(
|
||||
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 Bundle extras = new Bundle();
|
||||
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_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.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
|
||||
@@ -259,11 +266,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
Introduction(
|
||||
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_password_header_for_fingerprint,
|
||||
R.string.lockpassword_choose_your_password_header_for_face,
|
||||
R.string.lockpassword_choose_your_password_header_for_biometrics,
|
||||
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_pin_header_for_fingerprint,
|
||||
R.string.lockpassword_choose_your_pin_header_for_face,
|
||||
@@ -274,11 +283,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
NeedToConfirm(
|
||||
R.string.lockpassword_confirm_your_password_header,
|
||||
REENTER_WORK_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_pin_header,
|
||||
REENTER_WORK_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,
|
||||
@@ -289,11 +300,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
ConfirmWrong(
|
||||
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_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,
|
||||
@@ -303,11 +316,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
R.string.lockpassword_confirm_label);
|
||||
|
||||
Stage(int hintInAlpha,
|
||||
String hintOverrideInAlphaForProfile,
|
||||
int hintInAlphaForProfile,
|
||||
int hintInAlphaForFingerprint,
|
||||
int hintInAlphaForFace,
|
||||
int hintInAlphaForBiometrics,
|
||||
int hintInNumeric,
|
||||
String hintOverrideInNumericForProfile,
|
||||
int hintInNumericForProfile,
|
||||
int hintInNumericForFingerprint,
|
||||
int hintInNumericForFace,
|
||||
@@ -317,12 +332,14 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
int nextButtonText) {
|
||||
|
||||
this.alphaHint = hintInAlpha;
|
||||
this.alphaHintOverrideForProfile = hintOverrideInAlphaForProfile;
|
||||
this.alphaHintForProfile = hintInAlphaForProfile;
|
||||
this.alphaHintForFingerprint = hintInAlphaForFingerprint;
|
||||
this.alphaHintForFace = hintInAlphaForFace;
|
||||
this.alphaHintForBiometrics = hintInAlphaForBiometrics;
|
||||
|
||||
this.numericHint = hintInNumeric;
|
||||
this.numericHintOverrideForProfile = hintOverrideInNumericForProfile;
|
||||
this.numericHintForProfile = hintInNumericForProfile;
|
||||
this.numericHintForFingerprint = hintInNumericForFingerprint;
|
||||
this.numericHintForFace = hintInNumericForFace;
|
||||
@@ -341,6 +358,7 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
// Password header
|
||||
public final int alphaHint;
|
||||
public final String alphaHintOverrideForProfile;
|
||||
public final int alphaHintForProfile;
|
||||
public final int alphaHintForFingerprint;
|
||||
public final int alphaHintForFace;
|
||||
@@ -348,6 +366,7 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
// PIN header
|
||||
public final int numericHint;
|
||||
public final String numericHintOverrideForProfile;
|
||||
public final int numericHintForProfile;
|
||||
public final int numericHintForFingerprint;
|
||||
public final int numericHintForFace;
|
||||
@@ -361,26 +380,34 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
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 (type == TYPE_FINGERPRINT) {
|
||||
return alphaHintForFingerprint;
|
||||
return context.getString(alphaHintForFingerprint);
|
||||
} else if (type == TYPE_FACE) {
|
||||
return alphaHintForFace;
|
||||
return context.getString(alphaHintForFace);
|
||||
} 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 {
|
||||
return isProfile ? alphaHintForProfile : alphaHint;
|
||||
return context.getString(alphaHint);
|
||||
}
|
||||
} else {
|
||||
if (type == TYPE_FINGERPRINT) {
|
||||
return numericHintForFingerprint;
|
||||
return context.getString(numericHintForFingerprint);
|
||||
} else if (type == TYPE_FACE) {
|
||||
return numericHintForFace;
|
||||
return context.getString(numericHintForFace);
|
||||
} 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 {
|
||||
return isProfile ? numericHintForProfile : numericHint;
|
||||
return context.getString(numericHint);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -556,8 +583,8 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
|
||||
if (activity instanceof SettingsActivity) {
|
||||
final SettingsActivity sa = (SettingsActivity) activity;
|
||||
int title = Stage.Introduction.getHint(mIsAlphaMode, getStageType(),
|
||||
mIsManagedProfile);
|
||||
String title = Stage.Introduction.getHint(
|
||||
getContext(), mIsAlphaMode, getStageType(), mIsManagedProfile);
|
||||
sa.setTitle(title);
|
||||
mLayout.setHeaderText(title);
|
||||
}
|
||||
@@ -818,9 +845,17 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
messages.add(getString(R.string.lockpassword_pin_no_sequential_digits));
|
||||
break;
|
||||
case RECENTLY_USED:
|
||||
messages.add(getString(mIsAlphaMode
|
||||
? R.string.lockpassword_password_recently_used
|
||||
: R.string.lockpassword_pin_recently_used));
|
||||
DevicePolicyManager devicePolicyManager =
|
||||
getContext().getSystemService(DevicePolicyManager.class);
|
||||
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;
|
||||
default:
|
||||
Log.wtf(TAG, "unknown error validating password: " + error);
|
||||
@@ -851,8 +886,8 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
} else {
|
||||
// Hide password requirement view when we are just asking user to confirm the pw.
|
||||
mPasswordRestrictionView.setVisibility(View.GONE);
|
||||
setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType(),
|
||||
mIsManagedProfile)));
|
||||
setHeaderText(mUiStage.getHint(getContext(), mIsAlphaMode, getStageType(),
|
||||
mIsManagedProfile));
|
||||
setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
|
||||
mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
|
||||
}
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
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 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.app.Activity;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -474,15 +476,18 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
}
|
||||
|
||||
private void updateActivityTitle() {
|
||||
final int msg;
|
||||
final String msg;
|
||||
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) {
|
||||
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 {
|
||||
msg = mIsManagedProfile
|
||||
? R.string.lockpassword_choose_your_profile_pattern_header
|
||||
: R.string.lockpassword_choose_your_pattern_header;
|
||||
msg = getString(R.string.lockpassword_choose_your_pattern_header);
|
||||
}
|
||||
getActivity().setTitle(msg);
|
||||
}
|
||||
|
@@ -17,6 +17,13 @@
|
||||
|
||||
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 android.app.Activity;
|
||||
@@ -259,19 +266,36 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
|
||||
|
||||
private String getTitleFromCredentialType(@LockPatternUtils.CredentialType int credentialType,
|
||||
boolean isEffectiveUserManagedProfile) {
|
||||
int overrideStringId;
|
||||
int defaultStringId;
|
||||
switch (credentialType) {
|
||||
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
|
||||
return isEffectiveUserManagedProfile
|
||||
? getString(R.string.lockpassword_confirm_your_work_pin_header)
|
||||
: getString(R.string.lockpassword_confirm_your_pin_header);
|
||||
|
||||
if (isEffectiveUserManagedProfile) {
|
||||
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:
|
||||
return isEffectiveUserManagedProfile
|
||||
? getString(R.string.lockpassword_confirm_your_work_pattern_header)
|
||||
: getString(R.string.lockpassword_confirm_your_pattern_header);
|
||||
if (isEffectiveUserManagedProfile) {
|
||||
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);
|
||||
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
|
||||
return isEffectiveUserManagedProfile
|
||||
? getString(R.string.lockpassword_confirm_your_work_password_header)
|
||||
: getString(R.string.lockpassword_confirm_your_password_header);
|
||||
if (isEffectiveUserManagedProfile) {
|
||||
return mDevicePolicyManager.getString(
|
||||
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;
|
||||
}
|
||||
@@ -280,17 +304,29 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
|
||||
boolean isEffectiveUserManagedProfile) {
|
||||
switch (credentialType) {
|
||||
case LockPatternUtils.CREDENTIAL_TYPE_PIN:
|
||||
return isEffectiveUserManagedProfile
|
||||
? getString(R.string.lockpassword_confirm_your_pin_generic_profile)
|
||||
: getString(R.string.lockpassword_confirm_your_pin_generic);
|
||||
if (isEffectiveUserManagedProfile) {
|
||||
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PIN,
|
||||
() -> getString(
|
||||
R.string.lockpassword_confirm_your_pin_generic_profile));
|
||||
}
|
||||
|
||||
return getString(R.string.lockpassword_confirm_your_pin_generic);
|
||||
case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:
|
||||
return isEffectiveUserManagedProfile
|
||||
? getString(R.string.lockpassword_confirm_your_pattern_generic_profile)
|
||||
: getString(R.string.lockpassword_confirm_your_pattern_generic);
|
||||
if (isEffectiveUserManagedProfile) {
|
||||
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PATTERN,
|
||||
() -> getString(
|
||||
R.string.lockpassword_confirm_your_pattern_generic_profile));
|
||||
}
|
||||
|
||||
return getString(R.string.lockpassword_confirm_your_pattern_generic);
|
||||
case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:
|
||||
return isEffectiveUserManagedProfile
|
||||
? getString(R.string.lockpassword_confirm_your_password_generic_profile)
|
||||
: getString(R.string.lockpassword_confirm_your_password_generic);
|
||||
if (isEffectiveUserManagedProfile) {
|
||||
return mDevicePolicyManager.getString(WORK_PROFILE_CONFIRM_PASSWORD,
|
||||
() -> getString(
|
||||
R.string.lockpassword_confirm_your_password_generic_profile));
|
||||
}
|
||||
|
||||
return getString(R.string.lockpassword_confirm_your_password_generic);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@@ -17,6 +17,8 @@
|
||||
// TODO (b/35202196): move this class out of the root of the package.
|
||||
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 android.annotation.Nullable;
|
||||
@@ -243,13 +245,16 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
||||
// Last try
|
||||
final String title = getActivity().getString(
|
||||
R.string.lock_last_attempt_before_wipe_warning_title);
|
||||
final int messageId = getLastTryErrorMessage(userType);
|
||||
LastTryDialog.show(fragmentManager, title, messageId,
|
||||
final String overrideMessageId = getLastTryOverrideErrorMessageId(userType);
|
||||
final int defaultMessageId = getLastTryDefaultErrorMessage(userType);
|
||||
final String message = mDevicePolicyManager.getString(
|
||||
overrideMessageId, () -> getString(defaultMessageId));
|
||||
LastTryDialog.show(fragmentManager, title, message,
|
||||
android.R.string.ok, false /* dismiss */);
|
||||
} else {
|
||||
// Device, profile, or secondary user is wiped
|
||||
final int messageId = getWipeMessage(userType);
|
||||
LastTryDialog.show(fragmentManager, null /* title */, messageId,
|
||||
final String message = getWipeMessage(userType);
|
||||
LastTryDialog.show(fragmentManager, null /* title */, message,
|
||||
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) {
|
||||
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:
|
||||
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:
|
||||
return R.string.lock_failed_attempts_now_wiping_user;
|
||||
return getString(R.string.lock_failed_attempts_now_wiping_user);
|
||||
default:
|
||||
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_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) {
|
||||
LastTryDialog existent = (LastTryDialog) from.findFragmentByTag(TAG);
|
||||
if (existent != null && !existent.isRemoving()) {
|
||||
@@ -319,7 +326,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
||||
}
|
||||
Bundle args = new Bundle();
|
||||
args.putString(ARG_TITLE, title);
|
||||
args.putInt(ARG_MESSAGE, message);
|
||||
args.putString(ARG_MESSAGE, message);
|
||||
args.putInt(ARG_BUTTON, button);
|
||||
args.putBoolean(ARG_DISMISS, dismiss);
|
||||
|
||||
@@ -349,7 +356,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
Dialog dialog = new AlertDialog.Builder(getActivity())
|
||||
.setTitle(getArguments().getString(ARG_TITLE))
|
||||
.setMessage(getArguments().getInt(ARG_MESSAGE))
|
||||
.setMessage(getArguments().getString(ARG_MESSAGE))
|
||||
.setPositiveButton(getArguments().getInt(ARG_BUTTON), null)
|
||||
.create();
|
||||
dialog.setCanceledOnTouchOutside(false);
|
||||
|
@@ -16,6 +16,16 @@
|
||||
|
||||
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.app.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
@@ -73,6 +83,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
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 {
|
||||
}
|
||||
|
||||
@@ -160,10 +181,10 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
headerMessage = mDevicePolicyManager.getOrganizationNameForUser(mUserId);
|
||||
}
|
||||
if (TextUtils.isEmpty(headerMessage)) {
|
||||
headerMessage = getString(getDefaultHeader());
|
||||
headerMessage = getDefaultHeader();
|
||||
}
|
||||
if (TextUtils.isEmpty(detailsMessage)) {
|
||||
detailsMessage = getString(getDefaultDetails());
|
||||
detailsMessage = getDefaultDetails();
|
||||
}
|
||||
mGlifLayout.setHeaderText(headerMessage);
|
||||
mGlifLayout.setDescriptionText(detailsMessage);
|
||||
@@ -228,29 +249,37 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
private int getDefaultHeader() {
|
||||
private String getDefaultHeader() {
|
||||
if (mFrp) {
|
||||
return mIsAlpha ? R.string.lockpassword_confirm_your_password_header_frp
|
||||
: R.string.lockpassword_confirm_your_pin_header_frp;
|
||||
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header_frp)
|
||||
: getString(R.string.lockpassword_confirm_your_pin_header_frp);
|
||||
}
|
||||
if (mIsManagedProfile) {
|
||||
return mIsAlpha ? R.string.lockpassword_confirm_your_work_password_header
|
||||
: R.string.lockpassword_confirm_your_work_pin_header;
|
||||
if (mIsAlpha) {
|
||||
return mDevicePolicyManager.getString(
|
||||
CONFIRM_WORK_PROFILE_PASSWORD_HEADER,
|
||||
() -> getString(
|
||||
R.string.lockpassword_confirm_your_work_password_header));
|
||||
}
|
||||
return mDevicePolicyManager.getString(
|
||||
CONFIRM_WORK_PROFILE_PIN_HEADER,
|
||||
() -> getString(R.string.lockpassword_confirm_your_work_pin_header));
|
||||
}
|
||||
return mIsAlpha ? R.string.lockpassword_confirm_your_password_header
|
||||
: R.string.lockpassword_confirm_your_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) {
|
||||
return mIsAlpha ? R.string.lockpassword_confirm_your_password_details_frp
|
||||
: R.string.lockpassword_confirm_your_pin_details_frp;
|
||||
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_details_frp)
|
||||
: getString(R.string.lockpassword_confirm_your_pin_details_frp);
|
||||
}
|
||||
boolean isStrongAuthRequired = isStrongAuthRequired();
|
||||
// Map boolean flags to an index by isStrongAuth << 2 + isManagedProfile << 1 + isAlpha.
|
||||
int index = ((isStrongAuthRequired ? 1 : 0) << 2) + ((mIsManagedProfile ? 1 : 0) << 1)
|
||||
+ (mIsAlpha ? 1 : 0);
|
||||
return DETAIL_TEXTS[index];
|
||||
return mDevicePolicyManager.getString(
|
||||
DETAIL_TEXT_OVERRIDES[index], () -> getString(DETAIL_TEXTS[index]));
|
||||
}
|
||||
|
||||
private int getErrorMessage() {
|
||||
@@ -259,7 +288,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
}
|
||||
|
||||
@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) {
|
||||
case USER_TYPE_PRIMARY:
|
||||
return mIsAlpha ? R.string.lock_last_password_attempt_before_wipe_device
|
||||
|
@@ -16,6 +16,12 @@
|
||||
|
||||
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.SuppressLint;
|
||||
import android.app.Activity;
|
||||
@@ -258,19 +264,25 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
mGlifLayout.getDescriptionTextView().setAlpha(0f);
|
||||
}
|
||||
|
||||
private int getDefaultDetails() {
|
||||
private String getDefaultDetails() {
|
||||
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();
|
||||
if (mIsManagedProfile) {
|
||||
return isStrongAuthRequired
|
||||
? R.string.lockpassword_strong_auth_required_work_pattern
|
||||
: R.string.lockpassword_confirm_your_pattern_generic_profile;
|
||||
if (isStrongAuthRequired) {
|
||||
return mDevicePolicyManager.getString(WORK_PROFILE_PATTERN_REQUIRED,
|
||||
() -> 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 {
|
||||
return isStrongAuthRequired
|
||||
? R.string.lockpassword_strong_auth_required_device_pattern
|
||||
: R.string.lockpassword_confirm_your_pattern_generic;
|
||||
? getString(R.string.lockpassword_strong_auth_required_device_pattern)
|
||||
: getString(R.string.lockpassword_confirm_your_pattern_generic);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,11 +364,16 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
mGlifLayout.getHeaderTextView().announceForAccessibility(mGlifLayout.getHeaderText());
|
||||
}
|
||||
|
||||
private int getDefaultHeader() {
|
||||
if (mFrp) return R.string.lockpassword_confirm_your_pattern_header_frp;
|
||||
return mIsManagedProfile
|
||||
? R.string.lockpassword_confirm_your_work_pattern_header
|
||||
: R.string.lockpassword_confirm_your_pattern_header;
|
||||
private String getDefaultHeader() {
|
||||
if (mFrp) return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
|
||||
|
||||
if (mIsManagedProfile) {
|
||||
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() {
|
||||
@@ -550,7 +567,16 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
}
|
||||
|
||||
@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) {
|
||||
case USER_TYPE_PRIMARY:
|
||||
return R.string.lock_last_pattern_attempt_before_wipe_device;
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
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.UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST;
|
||||
|
||||
@@ -190,8 +192,8 @@ public class LockUnificationPreferenceController extends AbstractPreferenceContr
|
||||
*/
|
||||
public void startUnification() {
|
||||
// Confirm profile lock
|
||||
final String title = mContext.getString(
|
||||
R.string.unlock_set_unlock_launch_picker_title_profile);
|
||||
final String title = mDpm.getString(WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
|
||||
() -> mContext.getString(R.string.unlock_set_unlock_launch_picker_title_profile));
|
||||
final ChooseLockSettingsHelper.Builder builder =
|
||||
new ChooseLockSettingsHelper.Builder(mHost.getActivity(), mHost);
|
||||
final boolean launched = builder.setRequestCode(UNIFY_LOCK_CONFIRM_PROFILE_REQUEST)
|
||||
|
@@ -16,7 +16,11 @@
|
||||
|
||||
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.admin.DevicePolicyManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
@@ -53,10 +57,16 @@ public class UnificationConfirmationDialog extends InstrumentedDialogFragment {
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
final SecuritySettings parentFragment = ((SecuritySettings) getParentFragment());
|
||||
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())
|
||||
.setTitle(R.string.lock_settings_profile_unification_dialog_title)
|
||||
.setMessage(compliant ? R.string.lock_settings_profile_unification_dialog_body
|
||||
: R.string.lock_settings_profile_unification_dialog_uncompliant_body)
|
||||
.setMessage(getContext().getSystemService(DevicePolicyManager.class)
|
||||
.getString(overrideMessageId, () -> getString(defaultMessageId)))
|
||||
.setPositiveButton(
|
||||
compliant ? R.string.lock_settings_profile_unification_dialog_confirm
|
||||
: R.string
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
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 android.app.admin.DevicePolicyManager;
|
||||
@@ -123,7 +124,8 @@ public class LockAfterTimeoutPreferenceController extends AbstractPreferenceCont
|
||||
private void updateLockAfterPreferenceSummary(TimeoutListPreference preference) {
|
||||
final CharSequence summary;
|
||||
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 {
|
||||
// Update summary message with current value
|
||||
long currentTimeout = Settings.Secure.getLong(mContext.getContentResolver(),
|
||||
|
@@ -16,7 +16,11 @@
|
||||
|
||||
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.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
@@ -52,17 +56,20 @@ public final class UserDialogs {
|
||||
public static Dialog createRemoveDialog(Context context, int removingUserId,
|
||||
DialogInterface.OnClickListener onConfirmListener) {
|
||||
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
||||
DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
|
||||
UserInfo userInfo = um.getUserInfo(removingUserId);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context)
|
||||
.setPositiveButton(R.string.user_delete_button, onConfirmListener)
|
||||
.setNegativeButton(android.R.string.cancel, null);
|
||||
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);
|
||||
if (view != null) {
|
||||
builder.setView(view);
|
||||
} 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) {
|
||||
builder.setTitle(R.string.user_confirm_remove_self_title);
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.utils;
|
||||
|
||||
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_NOTIFICATION_LISTENER_BLOCKED;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.Dialog;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
@@ -134,7 +136,9 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings {
|
||||
if (managedProfileId != UserHandle.USER_NULL
|
||||
&& !mDpm.isNotificationListenerServicePermitted(
|
||||
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) -> {
|
||||
final boolean enable = (boolean) newValue;
|
||||
|
@@ -289,7 +289,8 @@ public class EntityHeaderController {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
AppInfoBase.startAppInfoFragment(
|
||||
AppInfoDashboardFragment.class, R.string.application_info_label,
|
||||
AppInfoDashboardFragment.class,
|
||||
mActivity.getString(R.string.application_info_label),
|
||||
mPackageName, mUid, mFragment, 0 /* request */,
|
||||
mMetricsCategory);
|
||||
}
|
||||
|
@@ -18,6 +18,8 @@ package com.android.settings.password;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
@@ -27,9 +29,13 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class ConfirmCredentialTest {
|
||||
|
||||
private Context mContext = RuntimeEnvironment.application;
|
||||
|
||||
@Test
|
||||
public void testLastTryDialogShownExactlyOnce() {
|
||||
FragmentManager fm = Robolectric.buildActivity(FragmentActivity.class).
|
||||
@@ -37,13 +43,16 @@ public class ConfirmCredentialTest {
|
||||
|
||||
// Launch only one instance at a time.
|
||||
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(
|
||||
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.
|
||||
LastTryDialog.hide(fm);
|
||||
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