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.DialogFragment;
import android.app.Fragment;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -86,6 +87,7 @@ public class InstalledAppDetails extends Fragment
private PackageManager mPm;
private IUsbManager mUsbManager;
private DevicePolicyManager mDpm;
private ApplicationsState mState;
private ApplicationsState.AppEntry mAppEntry;
private PackageInfo mPackageInfo;
@@ -206,7 +208,8 @@ public class InstalledAppDetails extends Fragment
private void initDataButtons() {
if ((mAppEntry.info.flags&(ApplicationInfo.FLAG_SYSTEM
| 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.setEnabled(false);
mCanClearData = false;
@@ -304,6 +307,11 @@ public class InstalledAppDetails extends Fragment
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);
if (enabled) {
// Register listener
@@ -320,6 +328,7 @@ public class InstalledAppDetails extends Fragment
mPm = getActivity().getPackageManager();
IBinder b = ServiceManager.getService(Context.USB_SERVICE);
mUsbManager = IUsbManager.Stub.asInterface(b);
mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
mCanBeOnSdCardChecker = new CanBeOnSdCardChecker();
}
@@ -809,15 +818,18 @@ public class InstalledAppDetails extends Fragment
}
private void checkForceStop() {
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);
if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
// User can't force stop device admin.
updateForceStopButton(false);
} else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
// If the app isn't explicitly stopped, then always show the
// force stop button.
updateForceStopButton(true);
} 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,
Activity.RESULT_CANCELED, null, null);
}

View File

@@ -20,6 +20,7 @@ import android.app.Activity;
import android.app.ActivityManager;
import android.app.ApplicationErrorReport;
import android.app.Fragment;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
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_ICON_ID = "iconId"; // Int
private static final boolean DEBUG = true;
private PackageManager mPm;
private DevicePolicyManager mDpm;
private String mTitle;
private int mUsageSince;
private int[] mTypes;
@@ -131,6 +133,8 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mPm = getActivity().getPackageManager();
mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
}
@Override
@@ -429,6 +433,22 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
mForceStopButton.setEnabled(false);
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,
Uri.fromParts("package", mPackages[0], null));
intent.putExtra(Intent.EXTRA_PACKAGES, mPackages);