Allow alternative policy description for secondary users

For policies like wipe-data, device admin policy description should be
customizable for secondary users.

Bug: 19194766
Change-Id: I0907ffb973eae247707380af1be9894ca403010f
diff --git a/src/com/android/settings/DeviceAdminAdd.java b/src/com/android/settings/DeviceAdminAdd.java
index c9f876b..83b222b 100644
--- a/src/com/android/settings/DeviceAdminAdd.java
+++ b/src/com/android/settings/DeviceAdminAdd.java
@@ -88,13 +88,11 @@
     Button mActionButton;
     Button mCancelButton;
 
-    final ArrayList<View> mAddingPolicies = new ArrayList<View>();
-    final ArrayList<View> mActivePolicies = new ArrayList<View>();
-
     boolean mAdding;
     boolean mRefreshing;
     boolean mWaitingForRemoveMsg;
     boolean mAddingProfileOwner;
+    boolean mAdminPoliciesInitialized;
     int mCurSysAppOpMode;
     int mCurToastAppOpMode;
 
@@ -386,8 +384,7 @@
         switch (id) {
             case DIALOG_WARNING: {
                 CharSequence msg = args.getCharSequence(DeviceAdminReceiver.EXTRA_DISABLE_WARNING);
-                AlertDialog.Builder builder = new AlertDialog.Builder(
-                        DeviceAdminAdd.this);
+                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                 builder.setMessage(msg);
                 builder.setPositiveButton(R.string.dlg_ok,
                         new DialogInterface.OnClickListener() {
@@ -409,13 +406,6 @@
         }
     }
 
-    static void setViewVisibility(ArrayList<View> views, int visibility) {
-        final int N = views.size();
-        for (int i=0; i<N; i++) {
-            views.get(i).setVisibility(visibility);
-        }
-    }
-
     void updateInterface() {
         mAdminIcon.setImageDrawable(mDeviceAdmin.loadIcon(getPackageManager()));
         mAdminName.setText(mDeviceAdmin.loadLabel(getPackageManager()));
@@ -438,36 +428,14 @@
         }
         if (!mRefreshing && !mAddingProfileOwner
                 && mDPM.isAdminActive(mDeviceAdmin.getComponent())) {
-            if (mActivePolicies.size() == 0) {
-                ArrayList<DeviceAdminInfo.PolicyInfo> policies = mDeviceAdmin.getUsedPolicies();
-                for (int i=0; i<policies.size(); i++) {
-                    DeviceAdminInfo.PolicyInfo pi = policies.get(i);
-                    View view = AppSecurityPermissions.getPermissionItemView(
-                            this, getText(pi.label), "", true);
-                    mActivePolicies.add(view);
-                    mAdminPolicies.addView(view);
-                }
-            }
-            setViewVisibility(mActivePolicies, View.VISIBLE);
-            setViewVisibility(mAddingPolicies, View.GONE);
+            addDeviceAdminPolicies(false /* showDescription */);
             mAdminWarning.setText(getString(R.string.device_admin_status,
                     mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
             setTitle(getText(R.string.active_device_admin_msg));
             mActionButton.setText(getText(R.string.remove_device_admin));
             mAdding = false;
         } else {
-            if (mAddingPolicies.size() == 0) {
-                ArrayList<DeviceAdminInfo.PolicyInfo> policies = mDeviceAdmin.getUsedPolicies();
-                for (int i=0; i<policies.size(); i++) {
-                    DeviceAdminInfo.PolicyInfo pi = policies.get(i);
-                    View view = AppSecurityPermissions.getPermissionItemView(
-                            this, getText(pi.label), getText(pi.description), true);
-                    mAddingPolicies.add(view);
-                    mAdminPolicies.addView(view);
-                }
-            }
-            setViewVisibility(mAddingPolicies, View.VISIBLE);
-            setViewVisibility(mActivePolicies, View.GONE);
+            addDeviceAdminPolicies(true /* showDescription */);
             mAdminWarning.setText(getString(R.string.device_admin_warning,
                     mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
             if (mAddingProfileOwner) {
@@ -480,6 +448,19 @@
         }
     }
 
+    private void addDeviceAdminPolicies(boolean showDescription) {
+        if (!mAdminPoliciesInitialized) {
+            boolean isOwner = UserHandle.getCallingUserHandle().isOwner();
+            for (DeviceAdminInfo.PolicyInfo pi : mDeviceAdmin.getUsedPolicies()) {
+                int descriptionId = isOwner ? pi.description : pi.descriptionForSecondaryUsers;
+                int labelId = isOwner ? pi.label : pi.labelForSecondaryUsers;
+                View view = AppSecurityPermissions.getPermissionItemView(this, getText(labelId),
+                        showDescription ? getText(descriptionId) : "", true);
+                mAdminPolicies.addView(view);
+            }
+            mAdminPoliciesInitialized = true;
+        }
+    }
 
     void toggleMessageEllipsis(View v) {
         TextView tv = (TextView) v;