am 6967c04f: Merge "Fix issue #5320747: Disabling an app that is an active device administrator..."

* commit '6967c04fd77023368514329c1213fba60f5a9b5a':
  Fix issue #5320747: Disabling an app that is an active device administrator...
This commit is contained in:
Dianne Hackborn
2011-09-16 13:54:11 -07:00
committed by Android Git Automerger
2 changed files with 39 additions and 7 deletions

View File

@@ -25,6 +25,7 @@ import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.DialogFragment; import android.app.DialogFragment;
import android.app.Fragment; import android.app.Fragment;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
@@ -86,6 +87,7 @@ public class InstalledAppDetails extends Fragment
private PackageManager mPm; private PackageManager mPm;
private IUsbManager mUsbManager; private IUsbManager mUsbManager;
private DevicePolicyManager mDpm;
private ApplicationsState mState; private ApplicationsState mState;
private ApplicationsState.AppEntry mAppEntry; private ApplicationsState.AppEntry mAppEntry;
private PackageInfo mPackageInfo; private PackageInfo mPackageInfo;
@@ -206,7 +208,8 @@ public class InstalledAppDetails extends Fragment
private void initDataButtons() { private void initDataButtons() {
if ((mAppEntry.info.flags&(ApplicationInfo.FLAG_SYSTEM if ((mAppEntry.info.flags&(ApplicationInfo.FLAG_SYSTEM
| ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA)) | ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA))
== ApplicationInfo.FLAG_SYSTEM) { == ApplicationInfo.FLAG_SYSTEM
|| mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
mClearDataButton.setText(R.string.clear_user_data_text); mClearDataButton.setText(R.string.clear_user_data_text);
mClearDataButton.setEnabled(false); mClearDataButton.setEnabled(false);
mCanClearData = false; mCanClearData = false;
@@ -304,6 +307,11 @@ public class InstalledAppDetails extends Fragment
mUninstallButton.setText(R.string.uninstall_text); mUninstallButton.setText(R.string.uninstall_text);
} }
} }
// If this is a device admin, it can't be uninstall or disabled.
// We do this here so the text of the button is still set correctly.
if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
enabled = false;
}
mUninstallButton.setEnabled(enabled); mUninstallButton.setEnabled(enabled);
if (enabled) { if (enabled) {
// Register listener // Register listener
@@ -320,6 +328,7 @@ public class InstalledAppDetails extends Fragment
mPm = getActivity().getPackageManager(); mPm = getActivity().getPackageManager();
IBinder b = ServiceManager.getService(Context.USB_SERVICE); IBinder b = ServiceManager.getService(Context.USB_SERVICE);
mUsbManager = IUsbManager.Stub.asInterface(b); mUsbManager = IUsbManager.Stub.asInterface(b);
mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
mCanBeOnSdCardChecker = new CanBeOnSdCardChecker(); mCanBeOnSdCardChecker = new CanBeOnSdCardChecker();
} }
@@ -809,15 +818,18 @@ public class InstalledAppDetails extends Fragment
} }
private void checkForceStop() { private void checkForceStop() {
Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
Uri.fromParts("package", mAppEntry.info.packageName, null)); // User can't force stop device admin.
intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName }); updateForceStopButton(false);
intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid); } else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
// If the app isn't explicitly stopped, then always show the // If the app isn't explicitly stopped, then always show the
// force stop button. // force stop button.
updateForceStopButton(true); updateForceStopButton(true);
} else { } else {
Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
Uri.fromParts("package", mAppEntry.info.packageName, null));
intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null, getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
Activity.RESULT_CANCELED, null, null); Activity.RESULT_CANCELED, null, null);
} }

View File

@@ -20,6 +20,7 @@ import android.app.Activity;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.ApplicationErrorReport; import android.app.ApplicationErrorReport;
import android.app.Fragment; import android.app.Fragment;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
@@ -102,7 +103,8 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
public static final String EXTRA_NO_COVERAGE = "noCoverage"; public static final String EXTRA_NO_COVERAGE = "noCoverage";
public static final String EXTRA_ICON_ID = "iconId"; // Int public static final String EXTRA_ICON_ID = "iconId"; // Int
private static final boolean DEBUG = true; private PackageManager mPm;
private DevicePolicyManager mDpm;
private String mTitle; private String mTitle;
private int mUsageSince; private int mUsageSince;
private int[] mTypes; private int[] mTypes;
@@ -131,6 +133,8 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
mPm = getActivity().getPackageManager();
mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
} }
@Override @Override
@@ -429,6 +433,22 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
mForceStopButton.setEnabled(false); mForceStopButton.setEnabled(false);
return; return;
} }
for (int i = 0; i < mPackages.length; i++) {
if (mDpm.packageHasActiveAdmins(mPackages[i])) {
mForceStopButton.setEnabled(false);
return;
}
}
for (int i = 0; i < mPackages.length; i++) {
try {
ApplicationInfo info = mPm.getApplicationInfo(mPackages[i], 0);
if ((info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
mForceStopButton.setEnabled(true);
break;
}
} catch (PackageManager.NameNotFoundException e) {
}
}
Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
Uri.fromParts("package", mPackages[0], null)); Uri.fromParts("package", mPackages[0], null));
intent.putExtra(Intent.EXTRA_PACKAGES, mPackages); intent.putExtra(Intent.EXTRA_PACKAGES, mPackages);