Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0d43947 authored by Jonathan Scott's avatar Jonathan Scott
Browse files

Allow Device Management Role Holder to update Settings strings.

Test: manual
Bug: 188414370
Change-Id: I6e1a06619799a9e99382d791e72e2e4518f93cac
parent 47d115c3
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -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);
            }

+24 −6
Original line number Diff line number Diff line
@@ -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) {
            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setTitle(R.string.share_remote_bugreport_dialog_title)
                    .setMessage(notificationType

            int defaultMessageId =  notificationType
                    == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
                    ? R.string.share_remote_bugreport_dialog_message
                            : R.string.share_remote_bugreport_dialog_message_finished)
                    : R.string.share_remote_bugreport_dialog_message_finished;
            String overrideMessageId = notificationType
                    == DevicePolicyManager.NOTIFICATION_BUGREPORT_STARTED
                    ? SHARE_REMOTE_BUGREPORT_NOT_FINISHED_REQUEST_CONSENT
                    : SHARE_REMOTE_BUGREPORT_FINISHED_REQUEST_CONSENT;

            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setTitle(devicePolicyManager.getString(SHARE_REMOTE_BUGREPORT_DIALOG_TITLE,
                            () -> getString(R.string.share_remote_bugreport_dialog_title)))
                    .setMessage(devicePolicyManager.getString(overrideMessageId,
                            () -> getString(defaultMessageId)))
                    .setOnDismissListener(new DialogInterface.OnDismissListener() {
                        @Override
                        public void onDismiss(DialogInterface dialog) {
+9 −2
Original line number Diff line number Diff line
@@ -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);

+39 −11
Original line number Diff line number Diff line
@@ -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) {
+17 −3
Original line number Diff line number Diff line
@@ -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));
    }

Loading