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
This commit is contained in:
Fyodor Kupolov
2015-02-24 09:26:53 -08:00
parent a081f01ee8
commit 7dc56bd2cf

View File

@@ -88,13 +88,11 @@ public class DeviceAdminAdd extends Activity {
Button mActionButton; Button mActionButton;
Button mCancelButton; Button mCancelButton;
final ArrayList<View> mAddingPolicies = new ArrayList<View>();
final ArrayList<View> mActivePolicies = new ArrayList<View>();
boolean mAdding; boolean mAdding;
boolean mRefreshing; boolean mRefreshing;
boolean mWaitingForRemoveMsg; boolean mWaitingForRemoveMsg;
boolean mAddingProfileOwner; boolean mAddingProfileOwner;
boolean mAdminPoliciesInitialized;
int mCurSysAppOpMode; int mCurSysAppOpMode;
int mCurToastAppOpMode; int mCurToastAppOpMode;
@@ -386,8 +384,7 @@ public class DeviceAdminAdd extends Activity {
switch (id) { switch (id) {
case DIALOG_WARNING: { case DIALOG_WARNING: {
CharSequence msg = args.getCharSequence(DeviceAdminReceiver.EXTRA_DISABLE_WARNING); CharSequence msg = args.getCharSequence(DeviceAdminReceiver.EXTRA_DISABLE_WARNING);
AlertDialog.Builder builder = new AlertDialog.Builder( AlertDialog.Builder builder = new AlertDialog.Builder(this);
DeviceAdminAdd.this);
builder.setMessage(msg); builder.setMessage(msg);
builder.setPositiveButton(R.string.dlg_ok, builder.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
@@ -409,13 +406,6 @@ public class DeviceAdminAdd extends Activity {
} }
} }
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() { void updateInterface() {
mAdminIcon.setImageDrawable(mDeviceAdmin.loadIcon(getPackageManager())); mAdminIcon.setImageDrawable(mDeviceAdmin.loadIcon(getPackageManager()));
mAdminName.setText(mDeviceAdmin.loadLabel(getPackageManager())); mAdminName.setText(mDeviceAdmin.loadLabel(getPackageManager()));
@@ -438,36 +428,14 @@ public class DeviceAdminAdd extends Activity {
} }
if (!mRefreshing && !mAddingProfileOwner if (!mRefreshing && !mAddingProfileOwner
&& mDPM.isAdminActive(mDeviceAdmin.getComponent())) { && mDPM.isAdminActive(mDeviceAdmin.getComponent())) {
if (mActivePolicies.size() == 0) { addDeviceAdminPolicies(false /* showDescription */);
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);
mAdminWarning.setText(getString(R.string.device_admin_status, mAdminWarning.setText(getString(R.string.device_admin_status,
mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager()))); mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
setTitle(getText(R.string.active_device_admin_msg)); setTitle(getText(R.string.active_device_admin_msg));
mActionButton.setText(getText(R.string.remove_device_admin)); mActionButton.setText(getText(R.string.remove_device_admin));
mAdding = false; mAdding = false;
} else { } else {
if (mAddingPolicies.size() == 0) { addDeviceAdminPolicies(true /* showDescription */);
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);
mAdminWarning.setText(getString(R.string.device_admin_warning, mAdminWarning.setText(getString(R.string.device_admin_warning,
mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager()))); mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
if (mAddingProfileOwner) { if (mAddingProfileOwner) {
@@ -480,6 +448,19 @@ public class DeviceAdminAdd extends Activity {
} }
} }
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) { void toggleMessageEllipsis(View v) {
TextView tv = (TextView) v; TextView tv = (TextView) v;