Use explicit APIs to get device owner information

Bug 24676413

Change-Id: Id346c2f01658173c9671edcfd34bc33f1b25faa4
This commit is contained in:
Makoto Onuki
2015-11-19 13:47:55 -08:00
parent 03e1bee786
commit 4cfe39f539
5 changed files with 18 additions and 12 deletions

View File

@@ -108,10 +108,10 @@ public class DeviceAdminSettings extends ListFragment {
filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED); filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
getActivity().registerReceiverAsUser( getActivity().registerReceiverAsUser(
mBroadcastReceiver, UserHandle.ALL, filter, null, null); mBroadcastReceiver, UserHandle.ALL, filter, null, null);
mDeviceOwnerPkg = mDPM.getDeviceOwner();
if (mDeviceOwnerPkg != null && !mDPM.isDeviceOwner(mDeviceOwnerPkg)) { final ComponentName deviceOwnerComponent = mDPM.getDeviceOwnerComponentOnAnyUser();
mDeviceOwnerPkg = null; mDeviceOwnerPkg =
} deviceOwnerComponent != null ? deviceOwnerComponent.getPackageName() : null;
mProfileOwnerComponents.clear(); mProfileOwnerComponents.clear();
final List<UserHandle> profiles = mUm.getUserProfiles(); final List<UserHandle> profiles = mUm.getUserProfiles();
final int profilesSize = profiles.size(); final int profilesSize = profiles.size();

View File

@@ -47,12 +47,13 @@ public class MonitoringCertInfoActivity extends Activity implements OnClickListe
final AlertDialog.Builder builder = new AlertDialog.Builder(this); final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.ssl_ca_cert_dialog_title); builder.setTitle(R.string.ssl_ca_cert_dialog_title);
builder.setCancelable(true); builder.setCancelable(true);
hasDeviceOwner = dpm.getDeviceOwner() != null; // TODO See b/25772443
hasDeviceOwner = dpm.getDeviceOwnerComponentOnCallingUser() != null;
int buttonLabel; int buttonLabel;
if (hasDeviceOwner) { if (hasDeviceOwner) {
// Institutional case. Show informational message. // Institutional case. Show informational message.
String message = this.getResources().getString(R.string.ssl_ca_cert_info_message, String message = this.getResources().getString(R.string.ssl_ca_cert_info_message,
dpm.getDeviceOwnerName()); dpm.getDeviceOwnerNameOnAnyUser());
builder.setMessage(message); builder.setMessage(message);
buttonLabel = R.string.done_button; buttonLabel = R.string.done_button;
} else { } else {

View File

@@ -206,6 +206,9 @@ public class InstalledAppDetails extends AppInfoBase
enabled = false; enabled = false;
} }
// We don't allow uninstalling DO/PO on *any* users, because if it's a system app,
// "uninstall" is actually "downgrade to the system version + disable", and "downgrade"
// will clear data on all users.
if (isProfileOrDeviceOwner(mPackageInfo.packageName)) { if (isProfileOrDeviceOwner(mPackageInfo.packageName)) {
enabled = false; enabled = false;
} }
@@ -250,7 +253,7 @@ public class InstalledAppDetails extends AppInfoBase
List<UserInfo> userInfos = mUserManager.getUsers(); List<UserInfo> userInfos = mUserManager.getUsers();
DevicePolicyManager dpm = (DevicePolicyManager) DevicePolicyManager dpm = (DevicePolicyManager)
getContext().getSystemService(Context.DEVICE_POLICY_SERVICE); getContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
if (packageName.equals(dpm.getDeviceOwner())) { if (dpm.isDeviceOwnerAppOnAnyUser(packageName)) {
return true; return true;
} }
for (UserInfo userInfo : userInfos) { for (UserInfo userInfo : userInfos) {

View File

@@ -1030,7 +1030,7 @@ public class UserSettings extends SettingsPreferenceFragment
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService( DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE); Context.DEVICE_POLICY_SERVICE);
// No restricted profiles for tablets with a device owner, or phones. // No restricted profiles for tablets with a device owner, or phones.
if (dpm.getDeviceOwner() != null || Utils.isVoiceCapable(context)) { if (dpm.isDeviceManaged() || Utils.isVoiceCapable(context)) {
caps.mCanAddRestrictedProfile = false; caps.mCanAddRestrictedProfile = false;
} }

View File

@@ -22,6 +22,7 @@ import android.app.AppGlobals;
import android.app.Dialog; import android.app.Dialog;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -985,11 +986,12 @@ public class WifiSettings extends RestrictedSettingsFragment
boolean isConfigEligibleForLockdown = false; boolean isConfigEligibleForLockdown = false;
if (dpm != null) { if (dpm != null) {
final String deviceOwnerPackageName = dpm.getDeviceOwner(); final ComponentName deviceOwner = dpm.getDeviceOwnerComponentOnAnyUser();
if (deviceOwnerPackageName != null) { if (deviceOwner != null) {
final int deviceOwnerUserId = dpm.getDeviceOwnerUserId();
try { try {
final int deviceOwnerUid = pm.getPackageUid(deviceOwnerPackageName, final int deviceOwnerUid = pm.getPackageUid(deviceOwner.getPackageName(),
UserHandle.USER_SYSTEM); deviceOwnerUserId);
isConfigEligibleForLockdown = deviceOwnerUid == config.creatorUid; isConfigEligibleForLockdown = deviceOwnerUid == config.creatorUid;
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
// don't care // don't care