Add MANAGE_APP_HIBERNATION permission
Add permission for app hibernation state manipulation. Bug: 183058954 Test: run hibernation job and confirm the API works for PermissionController Change-Id: Id57ee57f49710d0b8a49a4ec561800db43089f87
This commit is contained in:
@@ -126,6 +126,7 @@ package android {
|
|||||||
field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
|
field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
|
||||||
field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
|
field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
|
||||||
field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
|
field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
|
||||||
|
field public static final String MANAGE_APP_HIBERNATION = "android.permission.MANAGE_APP_HIBERNATION";
|
||||||
field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
|
field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
|
||||||
field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS";
|
field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS";
|
||||||
field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
|
field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
|
||||||
@@ -1831,10 +1832,10 @@ package android.app.usage {
|
|||||||
package android.apphibernation {
|
package android.apphibernation {
|
||||||
|
|
||||||
public final class AppHibernationManager {
|
public final class AppHibernationManager {
|
||||||
method public boolean isHibernatingForUser(@NonNull String);
|
method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String);
|
||||||
method public boolean isHibernatingGlobally(@NonNull String);
|
method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String);
|
||||||
method public void setHibernatingForUser(@NonNull String, boolean);
|
method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String, boolean);
|
||||||
method public void setHibernatingGlobally(@NonNull String, boolean);
|
method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingGlobally(@NonNull String, boolean);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package android.apphibernation;
|
package android.apphibernation;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.RequiresPermission;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
import android.annotation.SystemService;
|
import android.annotation.SystemService;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -54,6 +55,7 @@ public final class AppHibernationManager {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@SystemApi
|
@SystemApi
|
||||||
|
@RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION)
|
||||||
public boolean isHibernatingForUser(@NonNull String packageName) {
|
public boolean isHibernatingForUser(@NonNull String packageName) {
|
||||||
try {
|
try {
|
||||||
return mIAppHibernationService.isHibernatingForUser(packageName, mContext.getUserId());
|
return mIAppHibernationService.isHibernatingForUser(packageName, mContext.getUserId());
|
||||||
@@ -68,6 +70,7 @@ public final class AppHibernationManager {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@SystemApi
|
@SystemApi
|
||||||
|
@RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION)
|
||||||
public void setHibernatingForUser(@NonNull String packageName, boolean isHibernating) {
|
public void setHibernatingForUser(@NonNull String packageName, boolean isHibernating) {
|
||||||
try {
|
try {
|
||||||
mIAppHibernationService.setHibernatingForUser(packageName, mContext.getUserId(),
|
mIAppHibernationService.setHibernatingForUser(packageName, mContext.getUserId(),
|
||||||
@@ -83,6 +86,7 @@ public final class AppHibernationManager {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@SystemApi
|
@SystemApi
|
||||||
|
@RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION)
|
||||||
public boolean isHibernatingGlobally(@NonNull String packageName) {
|
public boolean isHibernatingGlobally(@NonNull String packageName) {
|
||||||
try {
|
try {
|
||||||
return mIAppHibernationService.isHibernatingGlobally(packageName);
|
return mIAppHibernationService.isHibernatingGlobally(packageName);
|
||||||
@@ -99,6 +103,7 @@ public final class AppHibernationManager {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@SystemApi
|
@SystemApi
|
||||||
|
@RequiresPermission(value = android.Manifest.permission.MANAGE_APP_HIBERNATION)
|
||||||
public void setHibernatingGlobally(@NonNull String packageName, boolean isHibernating) {
|
public void setHibernatingGlobally(@NonNull String packageName, boolean isHibernating) {
|
||||||
try {
|
try {
|
||||||
mIAppHibernationService.setHibernatingGlobally(packageName, isHibernating);
|
mIAppHibernationService.setHibernatingGlobally(packageName, isHibernating);
|
||||||
|
|||||||
@@ -5546,6 +5546,10 @@
|
|||||||
<permission android:name="android.permission.ACCESS_LOCUS_ID_USAGE_STATS"
|
<permission android:name="android.permission.ACCESS_LOCUS_ID_USAGE_STATS"
|
||||||
android:protectionLevel="signature|appPredictor" />
|
android:protectionLevel="signature|appPredictor" />
|
||||||
|
|
||||||
|
<!-- @hide @SystemApi Allows an application to manage app hibernation state. -->
|
||||||
|
<permission android:name="android.permission.MANAGE_APP_HIBERNATION"
|
||||||
|
android:protectionLevel="signature|installer" />
|
||||||
|
|
||||||
<!-- @hide @TestApi Allows apps to reset the state of {@link com.android.server.am.AppErrors}.
|
<!-- @hide @TestApi Allows apps to reset the state of {@link com.android.server.am.AppErrors}.
|
||||||
<p>CTS tests will use UiAutomation.adoptShellPermissionIdentity() to gain access. -->
|
<p>CTS tests will use UiAutomation.adoptShellPermissionIdentity() to gain access. -->
|
||||||
<permission android:name="android.permission.RESET_APP_ERRORS"
|
<permission android:name="android.permission.RESET_APP_ERRORS"
|
||||||
|
|||||||
@@ -492,6 +492,7 @@ applications that come with the platform
|
|||||||
<permission name="android.permission.UPDATE_FONTS" />
|
<permission name="android.permission.UPDATE_FONTS" />
|
||||||
<!-- Permission required for hotword detection service CTS tests -->
|
<!-- Permission required for hotword detection service CTS tests -->
|
||||||
<permission name="android.permission.MANAGE_HOTWORD_DETECTION" />
|
<permission name="android.permission.MANAGE_HOTWORD_DETECTION" />
|
||||||
|
<permission name="android.permission.MANAGE_APP_HIBERNATION"/>
|
||||||
</privapp-permissions>
|
</privapp-permissions>
|
||||||
|
|
||||||
<privapp-permissions package="com.android.statementservice">
|
<privapp-permissions package="com.android.statementservice">
|
||||||
|
|||||||
@@ -433,6 +433,8 @@
|
|||||||
<!-- Permission required for hotword detection service CTS tests -->
|
<!-- Permission required for hotword detection service CTS tests -->
|
||||||
<uses-permission android:name="android.permission.MANAGE_HOTWORD_DETECTION" />
|
<uses-permission android:name="android.permission.MANAGE_HOTWORD_DETECTION" />
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.MANAGE_APP_HIBERNATION"/>
|
||||||
|
|
||||||
<application android:label="@string/app_label"
|
<application android:label="@string/app_label"
|
||||||
android:theme="@android:style/Theme.DeviceDefault.DayNight"
|
android:theme="@android:style/Theme.DeviceDefault.DayNight"
|
||||||
android:defaultToDeviceProtectedStorage="true"
|
android:defaultToDeviceProtectedStorage="true"
|
||||||
|
|||||||
@@ -173,7 +173,9 @@ public final class AppHibernationService extends SystemService {
|
|||||||
if (!checkHibernationEnabled("isHibernatingForUser")) {
|
if (!checkHibernationEnabled("isHibernatingForUser")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
getContext().enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.MANAGE_APP_HIBERNATION,
|
||||||
|
"Caller does not have MANAGE_APP_HIBERNATION permission.");
|
||||||
userId = handleIncomingUser(userId, "isHibernating");
|
userId = handleIncomingUser(userId, "isHibernating");
|
||||||
if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
|
if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
|
||||||
Slog.e(TAG, "Attempt to get hibernation state of stopped or nonexistent user "
|
Slog.e(TAG, "Attempt to get hibernation state of stopped or nonexistent user "
|
||||||
@@ -202,6 +204,9 @@ public final class AppHibernationService extends SystemService {
|
|||||||
if (!checkHibernationEnabled("isHibernatingGlobally")) {
|
if (!checkHibernationEnabled("isHibernatingGlobally")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
getContext().enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.MANAGE_APP_HIBERNATION,
|
||||||
|
"Caller does not have MANAGE_APP_HIBERNATION permission.");
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
GlobalLevelState state = mGlobalHibernationStates.get(packageName);
|
GlobalLevelState state = mGlobalHibernationStates.get(packageName);
|
||||||
if (state == null) {
|
if (state == null) {
|
||||||
@@ -223,6 +228,9 @@ public final class AppHibernationService extends SystemService {
|
|||||||
if (!checkHibernationEnabled("setHibernatingForUser")) {
|
if (!checkHibernationEnabled("setHibernatingForUser")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
getContext().enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.MANAGE_APP_HIBERNATION,
|
||||||
|
"Caller does not have MANAGE_APP_HIBERNATION permission.");
|
||||||
userId = handleIncomingUser(userId, "setHibernating");
|
userId = handleIncomingUser(userId, "setHibernating");
|
||||||
if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
|
if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
|
||||||
Slog.w(TAG, "Attempt to set hibernation state for a stopped or nonexistent user "
|
Slog.w(TAG, "Attempt to set hibernation state for a stopped or nonexistent user "
|
||||||
@@ -263,6 +271,9 @@ public final class AppHibernationService extends SystemService {
|
|||||||
if (!checkHibernationEnabled("setHibernatingGlobally")) {
|
if (!checkHibernationEnabled("setHibernatingGlobally")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
getContext().enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.MANAGE_APP_HIBERNATION,
|
||||||
|
"Caller does not have MANAGE_APP_HIBERNATION permission.");
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
GlobalLevelState state = mGlobalHibernationStates.get(packageName);
|
GlobalLevelState state = mGlobalHibernationStates.get(packageName);
|
||||||
if (state == null) {
|
if (state == null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user