Avoid triggering device admin settings in non-current user.

Bug: 28953755
Change-Id: Ic9f6f57b1ef4cc1de2d1ea227b17faf4334ffec8
This commit is contained in:
Sudheer Shanka
2016-06-02 12:40:22 -07:00
parent d5f7c20a26
commit 8b72e563ec
2 changed files with 40 additions and 61 deletions

View File

@@ -47,8 +47,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
* {@link RestrictionsManager.hasRestrictionsProvider()} returns true, pass in * {@link RestrictionsManager.hasRestrictionsProvider()} returns true, pass in
* {@link RESTRICT_IF_OVERRIDABLE} to the constructor instead of a restrictions key. * {@link RESTRICT_IF_OVERRIDABLE} to the constructor instead of a restrictions key.
*/ */
public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragment public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragment {
implements View.OnClickListener {
protected static final String RESTRICT_IF_OVERRIDABLE = "restrict_if_overridable"; protected static final String RESTRICT_IF_OVERRIDABLE = "restrict_if_overridable";
@@ -212,22 +211,6 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
return emptyView; return emptyView;
} }
private void updateAdminSupportDetailsView() {
final EnforcedAdmin admin = getRestrictionEnforcedAdmin();
if (admin != null) {
final Activity activity = getActivity();
DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
Context.DEVICE_POLICY_SERVICE);
CharSequence supportMessage = dpm.getShortSupportMessageForUser(
admin.component, admin.userId);
if (supportMessage != null) {
TextView textView = (TextView) activity.findViewById(R.id.admin_support_msg);
textView.setText(supportMessage);
}
activity.findViewById(R.id.admins_policies_list).setOnClickListener(this);
}
}
public EnforcedAdmin getRestrictionEnforcedAdmin() { public EnforcedAdmin getRestrictionEnforcedAdmin() {
mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(), mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
mRestrictionKey, UserHandle.myUserId()); mRestrictionKey, UserHandle.myUserId());
@@ -237,24 +220,6 @@ public abstract class RestrictedSettingsFragment extends SettingsPreferenceFragm
return mEnforcedAdmin; return mEnforcedAdmin;
} }
@Override
public void onClick(View view) {
Intent intent = new Intent();
if (view.getId() == R.id.admins_policies_list && mEnforcedAdmin != null) {
if (mEnforcedAdmin.component != null) {
intent.setClass(getActivity(), DeviceAdminAdd.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mEnforcedAdmin.component);
// DeviceAdminAdd class may need to run as managed profile.
getActivity().startActivityAsUser(intent, UserHandle.of(mEnforcedAdmin.userId));
} else {
intent.setClass(getActivity(), Settings.DeviceAdminSettingsActivity.class);
// Activity merges both managed profile and parent users
// admins so show as same user as this activity.
getActivity().startActivity(intent);
}
}
}
public TextView getEmptyTextView() { public TextView getEmptyTextView() {
return mEmptyTextView; return mEmptyTextView;
} }

View File

@@ -39,7 +39,8 @@ import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
public class ShowAdminSupportDetailsDialog extends Activity public class ShowAdminSupportDetailsDialog extends Activity
implements DialogInterface.OnDismissListener { implements DialogInterface.OnDismissListener {
@@ -104,11 +105,16 @@ public class ShowAdminSupportDetailsDialog extends Activity
return false; return false;
} }
private void initializeDialogViews(View root, final ComponentName admin, int userId) { private void initializeDialogViews(View root, ComponentName admin, int userId) {
if (admin != null) { if (admin != null) {
if (!RestrictedLockUtils.isAdminInCurrentUserOrProfile(this, admin)
|| !RestrictedLockUtils.isCurrentUserOrProfile(this, userId)) {
admin = null;
} else {
ActivityInfo ai = null; ActivityInfo ai = null;
try { try {
ai = AppGlobals.getPackageManager().getReceiverInfo(admin, 0 /* flags */, userId); ai = AppGlobals.getPackageManager().getReceiverInfo(admin, 0 /* flags */,
userId);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.w(TAG, "Missing reciever info", e); Log.w(TAG, "Missing reciever info", e);
} }
@@ -120,6 +126,7 @@ public class ShowAdminSupportDetailsDialog extends Activity
badgedIcon); badgedIcon);
} }
} }
}
setAdminSupportDetails(this, root, new EnforcedAdmin(admin, userId), true); setAdminSupportDetails(this, root, new EnforcedAdmin(admin, userId), true);
} }
@@ -129,9 +136,15 @@ public class ShowAdminSupportDetailsDialog extends Activity
if (enforcedAdmin == null) { if (enforcedAdmin == null) {
return; return;
} }
if (enforcedAdmin.component != null) { if (enforcedAdmin.component != null) {
DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService( DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
Context.DEVICE_POLICY_SERVICE); Context.DEVICE_POLICY_SERVICE);
if (!RestrictedLockUtils.isAdminInCurrentUserOrProfile(activity,
enforcedAdmin.component) || !RestrictedLockUtils.isCurrentUserOrProfile(
activity, enforcedAdmin.userId)) {
enforcedAdmin.component = null;
} else {
if (enforcedAdmin.userId == UserHandle.USER_NULL) { if (enforcedAdmin.userId == UserHandle.USER_NULL) {
enforcedAdmin.userId = UserHandle.myUserId(); enforcedAdmin.userId = UserHandle.myUserId();
} }
@@ -145,6 +158,7 @@ public class ShowAdminSupportDetailsDialog extends Activity
textView.setText(supportMessage); textView.setText(supportMessage);
} }
} }
}
root.findViewById(R.id.admins_policies_list).setOnClickListener( root.findViewById(R.id.admins_policies_list).setOnClickListener(
new View.OnClickListener() { new View.OnClickListener() {