Merge "[CDM] Update binding flag for self-managed apps" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-05-25 01:38:30 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 10 deletions

View File

@@ -104,10 +104,10 @@ class CompanionApplicationController {
} }
void bindCompanionApplication(@UserIdInt int userId, @NonNull String packageName, void bindCompanionApplication(@UserIdInt int userId, @NonNull String packageName,
boolean bindImportant) { boolean isSelfManaged) {
if (DEBUG) { if (DEBUG) {
Log.i(TAG, "bind() u" + userId + "/" + packageName Log.i(TAG, "bind() u" + userId + "/" + packageName
+ " important=" + bindImportant); + " isSelfManaged=" + isSelfManaged);
} }
final List<ComponentName> companionServices = final List<ComponentName> companionServices =
@@ -130,7 +130,7 @@ class CompanionApplicationController {
serviceConnectors = CollectionUtils.map(companionServices, componentName -> serviceConnectors = CollectionUtils.map(companionServices, componentName ->
CompanionDeviceServiceConnector.newInstance(mContext, userId, CompanionDeviceServiceConnector.newInstance(mContext, userId,
componentName, bindImportant)); componentName, isSelfManaged));
mBoundCompanionApplications.setValueForPackage(userId, packageName, serviceConnectors); mBoundCompanionApplications.setValueForPackage(userId, packageName, serviceConnectors);
} }

View File

@@ -17,7 +17,7 @@
package com.android.server.companion; package com.android.server.companion;
import static android.content.Context.BIND_ALMOST_PERCEPTIBLE; import static android.content.Context.BIND_ALMOST_PERCEPTIBLE;
import static android.content.Context.BIND_IMPORTANT; import static android.content.Context.BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE;
import static android.os.Process.THREAD_PRIORITY_DEFAULT; import static android.os.Process.THREAD_PRIORITY_DEFAULT;
import android.annotation.NonNull; import android.annotation.NonNull;
@@ -61,21 +61,22 @@ class CompanionDeviceServiceConnector extends ServiceConnector.Impl<ICompanionDe
/** /**
* Create a CompanionDeviceServiceConnector instance. * Create a CompanionDeviceServiceConnector instance.
* *
* When bindImportant is false, the binding flag will be BIND_ALMOST_PERCEPTIBLE * For self-managed apps, the binding flag will be BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE
* (oom_score_adj = VISIBLE_APP_ADJ = 100).
*
* For non self-managed apps, the binding flag will be BIND_ALMOST_PERCEPTIBLE
* (oom_score_adj = PERCEPTIBLE_MEDIUM_APP = 225). The target service will be treated * (oom_score_adj = PERCEPTIBLE_MEDIUM_APP = 225). The target service will be treated
* as important as a perceptible app (IMPORTANCE_VISIBLE = 200), and will be unbound when * as important as a perceptible app (IMPORTANCE_VISIBLE = 200), and will be unbound when
* the app is removed from task manager. * the app is removed from task manager.
* When bindImportant is true, the binding flag will be BIND_IMPORTANT
* (oom_score_adj = PERCEPTIBLE_MEDIUM_APP = -700). The target service will
* have the highest priority to avoid being killed (IMPORTANCE_FOREGROUND = 100).
* *
* One time permission's importance level to keep session alive is * One time permission's importance level to keep session alive is
* IMPORTANCE_FOREGROUND_SERVICE = 125. In order to kill the one time permission session, the * IMPORTANCE_FOREGROUND_SERVICE = 125. In order to kill the one time permission session, the
* service importance level should be higher than 125. * service importance level should be higher than 125.
*/ */
static CompanionDeviceServiceConnector newInstance(@NonNull Context context, static CompanionDeviceServiceConnector newInstance(@NonNull Context context,
@UserIdInt int userId, @NonNull ComponentName componentName, boolean bindImportant) { @UserIdInt int userId, @NonNull ComponentName componentName, boolean isSelfManaged) {
final int bindingFlags = bindImportant ? BIND_IMPORTANT : BIND_ALMOST_PERCEPTIBLE; final int bindingFlags = isSelfManaged ? BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE
: BIND_ALMOST_PERCEPTIBLE;
return new CompanionDeviceServiceConnector(context, userId, componentName, bindingFlags); return new CompanionDeviceServiceConnector(context, userId, componentName, bindingFlags);
} }