diff options
Diffstat (limited to 'Settings/src/com/android/tv/settings/device/apps/ForceStopPreference.java')
-rw-r--r-- | Settings/src/com/android/tv/settings/device/apps/ForceStopPreference.java | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/Settings/src/com/android/tv/settings/device/apps/ForceStopPreference.java b/Settings/src/com/android/tv/settings/device/apps/ForceStopPreference.java index 6c8b3edc6..6c863c898 100644 --- a/Settings/src/com/android/tv/settings/device/apps/ForceStopPreference.java +++ b/Settings/src/com/android/tv/settings/device/apps/ForceStopPreference.java @@ -22,6 +22,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.admin.DevicePolicyManager; import android.app.tvsettings.TvSettingsEnums; +import android.apphibernation.AppHibernationManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -63,9 +64,15 @@ public class ForceStopPreference extends AppActionPreference { setTitle(R.string.device_apps_app_management_force_stop); DevicePolicyManager dpm = (DevicePolicyManager) getContext().getSystemService( Context.DEVICE_POLICY_SERVICE); + AppHibernationManager ahm = getContext().getSystemService( + AppHibernationManager.class); + boolean isPackageHibernated = ahm.isHibernatingForUser(mEntry.info.packageName); if (dpm.packageHasActiveAdmins(mEntry.info.packageName)) { // User can't force stop device admin. setVisible(false); + } else if (isPackageHibernated) { + // Hibernated apps are always stopped. + setVisible(false); } else if ((mEntry.info.flags & ApplicationInfo.FLAG_STOPPED) == 0) { // If the app isn't explicitly stopped, then always show the // force stop action. @@ -77,12 +84,14 @@ public class ForceStopPreference extends AppActionPreference { mEntry.info.packageName }); intent.putExtra(Intent.EXTRA_UID, mEntry.info.uid); intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mEntry.info.uid)); - getContext().sendOrderedBroadcast(intent, null, new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - setVisible(getResultCode() != Activity.RESULT_CANCELED); - } - }, null, Activity.RESULT_CANCELED, null, null); + getContext().sendOrderedBroadcast(intent, + android.Manifest.permission.HANDLE_QUERY_PACKAGE_RESTART, + new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + setVisible(getResultCode() != Activity.RESULT_CANCELED); + } + }, null, Activity.RESULT_CANCELED, null, null); } this.setOnPreferenceClickListener( preference -> { |