|
34 | 34 | import android.app.Fragment;
|
35 | 35 | import android.app.FragmentManager;
|
36 | 36 | import android.app.admin.DevicePolicyManager;
|
37 |
| -import android.app.admin.DevicePolicyManager.InstallUpdateCallback; |
| 37 | +import android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback; |
38 | 38 | import android.app.admin.SystemUpdateInfo;
|
39 | 39 | import android.content.ComponentName;
|
40 | 40 | import android.content.ContentResolver;
|
41 | 41 | import android.content.Context;
|
42 | 42 | import android.content.DialogInterface;
|
43 | 43 | import android.content.Intent;
|
| 44 | +import android.content.SharedPreferences; |
44 | 45 | import android.content.pm.ApplicationInfo;
|
45 | 46 | import android.content.pm.PackageManager;
|
46 | 47 | import android.content.pm.ResolveInfo;
|
|
49 | 50 | import android.os.AsyncTask;
|
50 | 51 | import android.os.BatteryManager;
|
51 | 52 | import android.os.Build;
|
| 53 | +import android.os.Build.VERSION_CODES; |
52 | 54 | import android.os.Bundle;
|
53 | 55 | import android.os.UserHandle;
|
54 | 56 | import android.os.UserManager;
|
|
65 | 67 | import android.support.v7.preference.EditTextPreference;
|
66 | 68 | import android.support.v7.preference.ListPreference;
|
67 | 69 | import android.support.v7.preference.Preference;
|
| 70 | +import android.support.v7.preference.PreferenceManager; |
68 | 71 | import android.telephony.TelephonyManager;
|
69 | 72 | import android.text.InputType;
|
70 | 73 | import android.text.TextUtils;
|
@@ -269,6 +272,7 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
|
269 | 272 | private static final String DISABLE_SCREEN_CAPTURE_KEY = "disable_screen_capture";
|
270 | 273 | private static final String DISABLE_STATUS_BAR = "disable_status_bar";
|
271 | 274 | private static final String ENABLE_BACKUP_SERVICE = "enable_backup_service";
|
| 275 | + private static final String APP_FEEDBACK_NOTIFICATIONS = "app_feedback_notifications"; |
272 | 276 | private static final String ENABLE_SECURITY_LOGGING = "enable_security_logging";
|
273 | 277 | private static final String ENABLE_NETWORK_LOGGING = "enable_network_logging";
|
274 | 278 | private static final String ENABLE_SYSTEM_APPS_BY_INTENT_KEY = "enable_system_apps_by_intent";
|
@@ -457,6 +461,8 @@ public class PolicyManagementFragment extends BaseSearchablePolicyPreferenceFrag
|
457 | 461 |
|
458 | 462 | private DpcSwitchPreference mAutoBrightnessPreference;
|
459 | 463 |
|
| 464 | + private DpcSwitchPreference mEnableAppFeedbackNotificationsPreference; |
| 465 | + |
460 | 466 | private GetAccessibilityServicesTask mGetAccessibilityServicesTask = null;
|
461 | 467 | private GetInputMethodsTask mGetInputMethodsTask = null;
|
462 | 468 | private GetNotificationListenersTask mGetNotificationListenersTask = null;
|
@@ -545,15 +551,19 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
545 | 551 | mDisableStatusBarPreference = (DpcPreference) findPreference(DISABLE_STATUS_BAR);
|
546 | 552 | mDisableStatusBarPreference.setOnPreferenceClickListener(this);
|
547 | 553 | mDisableStatusBarPreference.setCustomConstraint(this::validateAffiliatedUserAfterP);
|
| 554 | + mDisableStatusBarPreference.addCustomConstraint(this::validateDeviceOwnerBeforeP); |
548 | 555 | mReenableStatusBarPreference = (DpcPreference) findPreference(REENABLE_STATUS_BAR);
|
549 | 556 | mReenableStatusBarPreference.setOnPreferenceClickListener(this);
|
550 | 557 | mReenableStatusBarPreference.setCustomConstraint(this::validateAffiliatedUserAfterP);
|
| 558 | + mReenableStatusBarPreference.addCustomConstraint(this::validateDeviceOwnerBeforeP); |
551 | 559 | mDisableKeyguardPreference = (DpcPreference) findPreference(DISABLE_KEYGUARD);
|
552 | 560 | mDisableKeyguardPreference.setOnPreferenceClickListener(this);
|
553 | 561 | mDisableKeyguardPreference.setCustomConstraint(this::validateAffiliatedUserAfterP);
|
| 562 | + mDisableKeyguardPreference.addCustomConstraint(this::validateDeviceOwnerBeforeP); |
554 | 563 | mReenableKeyguardPreference = (DpcPreference) findPreference(REENABLE_KEYGUARD);
|
555 | 564 | mReenableKeyguardPreference.setOnPreferenceClickListener(this);
|
556 | 565 | mReenableKeyguardPreference.setCustomConstraint(this::validateAffiliatedUserAfterP);
|
| 566 | + mReenableKeyguardPreference.addCustomConstraint(this::validateDeviceOwnerBeforeP); |
557 | 567 | findPreference(START_KIOSK_MODE).setOnPreferenceClickListener(this);
|
558 | 568 | mStayOnWhilePluggedInSwitchPreference = (SwitchPreference) findPreference(
|
559 | 569 | STAY_ON_WHILE_PLUGGED_IN);
|
@@ -595,6 +605,9 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
595 | 605 | findPreference(REMOVE_ACCOUNT_KEY).setOnPreferenceClickListener(this);
|
596 | 606 | findPreference(BLOCK_UNINSTALLATION_BY_PKG_KEY).setOnPreferenceClickListener(this);
|
597 | 607 | findPreference(BLOCK_UNINSTALLATION_LIST_KEY).setOnPreferenceClickListener(this);
|
| 608 | + findPreference(APP_FEEDBACK_NOTIFICATIONS).setOnPreferenceChangeListener(this); |
| 609 | + mEnableAppFeedbackNotificationsPreference = |
| 610 | + (DpcSwitchPreference) findPreference(APP_FEEDBACK_NOTIFICATIONS); |
598 | 611 | findPreference(ENABLE_SYSTEM_APPS_KEY).setOnPreferenceClickListener(this);
|
599 | 612 | findPreference(ENABLE_SYSTEM_APPS_BY_PACKAGE_NAME_KEY).setOnPreferenceClickListener(this);
|
600 | 613 | findPreference(ENABLE_SYSTEM_APPS_BY_INTENT_KEY).setOnPreferenceClickListener(this);
|
@@ -682,6 +695,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
682 | 695 | constrainSpecialCasePreferences();
|
683 | 696 |
|
684 | 697 | maybeDisableLockTaskPreferences();
|
| 698 | + loadAppFeedbackNotifications(); |
685 | 699 | loadAppStatus();
|
686 | 700 | loadSecurityPatch();
|
687 | 701 | loadIsEphemeralUserUi();
|
@@ -1151,7 +1165,7 @@ private void installUpdate() {
|
1151 | 1165 | mAdminComponentName,
|
1152 | 1166 | uri,
|
1153 | 1167 | new MainThreadExecutor(),
|
1154 |
| - new InstallUpdateCallback() { |
| 1168 | + new InstallSystemUpdateCallback() { |
1155 | 1169 | @Override
|
1156 | 1170 | public void onInstallUpdateError(int errorCode, String errorMessage) {
|
1157 | 1171 | showToast("Error code: " + errorCode);
|
@@ -1326,6 +1340,14 @@ public boolean onPreferenceChange(Preference preference, Object newValue) {
|
1326 | 1340 | Integer.parseInt((String) newValue));
|
1327 | 1341 | startActivity(intent);
|
1328 | 1342 | return true;
|
| 1343 | + case APP_FEEDBACK_NOTIFICATIONS: |
| 1344 | + SharedPreferences.Editor editor = |
| 1345 | + PreferenceManager.getDefaultSharedPreferences(getContext()).edit(); |
| 1346 | + editor.putBoolean( |
| 1347 | + getString( |
| 1348 | + R.string.app_feedback_notifications), newValue.equals(true)); |
| 1349 | + editor.commit(); |
| 1350 | + return true; |
1329 | 1351 | }
|
1330 | 1352 | return false;
|
1331 | 1353 | }
|
@@ -2080,6 +2102,13 @@ public void onClick(DialogInterface dialogInterface, int i) {
|
2080 | 2102 | .show();
|
2081 | 2103 | }
|
2082 | 2104 |
|
| 2105 | + @TargetApi(Build.VERSION_CODES.M) |
| 2106 | + private void loadAppFeedbackNotifications() { |
| 2107 | + mEnableAppFeedbackNotificationsPreference.setChecked( |
| 2108 | + PreferenceManager.getDefaultSharedPreferences(getContext()) |
| 2109 | + .getBoolean(getString(R.string.app_feedback_notifications), false)); |
| 2110 | + } |
| 2111 | + |
2083 | 2112 | private void loadAppStatus() {
|
2084 | 2113 | final @StringRes int appStatusStringId;
|
2085 | 2114 | if (mDevicePolicyManager.isProfileOwnerApp(mPackageName)) {
|
@@ -3575,19 +3604,21 @@ private void removeAccount(Account account) {
|
3575 | 3604 |
|
3576 | 3605 | @TargetApi(28)
|
3577 | 3606 | private int validateAffiliatedUserAfterP() {
|
3578 |
| - if (BuildCompat.isAtLeastP()) { |
3579 |
| - if (mDevicePolicyManager.isAffiliatedUser()) { |
3580 |
| - return NO_CUSTOM_CONSTRIANT; |
3581 |
| - } else { |
| 3607 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { |
| 3608 | + if (!mDevicePolicyManager.isAffiliatedUser()) { |
3582 | 3609 | return R.string.require_affiliated_user;
|
3583 | 3610 | }
|
3584 |
| - } else { |
3585 |
| - if (mDevicePolicyManager.isDeviceOwnerApp(mPackageName)) { |
3586 |
| - return NO_CUSTOM_CONSTRIANT; |
3587 |
| - } else { |
| 3611 | + } |
| 3612 | + return NO_CUSTOM_CONSTRIANT; |
| 3613 | + } |
| 3614 | + |
| 3615 | + private int validateDeviceOwnerBeforeP() { |
| 3616 | + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { |
| 3617 | + if (!mDevicePolicyManager.isDeviceOwnerApp(mPackageName)) { |
3588 | 3618 | return R.string.requires_device_owner;
|
3589 | 3619 | }
|
3590 | 3620 | }
|
| 3621 | + return NO_CUSTOM_CONSTRIANT; |
3591 | 3622 | }
|
3592 | 3623 |
|
3593 | 3624 | abstract class ManageLockTaskListCallback {
|
|
0 commit comments