diff options
2 files changed, 32 insertions, 8 deletions
diff --git a/services/companion/java/com/android/server/companion/CompanionApplicationController.java b/services/companion/java/com/android/server/companion/CompanionApplicationController.java index 586aa8aaae98..af0777c74605 100644 --- a/services/companion/java/com/android/server/companion/CompanionApplicationController.java +++ b/services/companion/java/com/android/server/companion/CompanionApplicationController.java @@ -16,6 +16,8 @@ package com.android.server.companion; +import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION; + import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; @@ -25,8 +27,10 @@ import android.companion.CompanionDeviceService; import android.companion.DevicePresenceEvent; import android.content.ComponentName; import android.content.Context; +import android.hardware.power.Mode; import android.os.Handler; import android.os.ParcelUuid; +import android.os.PowerManagerInternal; import android.util.Log; import android.util.Slog; import android.util.SparseArray; @@ -79,6 +83,8 @@ public class CompanionApplicationController { private final @NonNull CompanionDevicePresenceMonitor mDevicePresenceMonitor; private final @NonNull CompanionServicesRegister mCompanionServicesRegister; + private final PowerManagerInternal mPowerManagerInternal; + @GuardedBy("mBoundCompanionApplications") private final @NonNull AndroidPackageMap<List<CompanionDeviceServiceConnector>> mBoundCompanionApplications; @@ -87,11 +93,13 @@ public class CompanionApplicationController { CompanionApplicationController(Context context, AssociationStore associationStore, ObservableUuidStore observableUuidStore, - CompanionDevicePresenceMonitor companionDevicePresenceMonitor) { + CompanionDevicePresenceMonitor companionDevicePresenceMonitor, + PowerManagerInternal powerManagerInternal) { mContext = context; mAssociationStore = associationStore; mObservableUuidStore = observableUuidStore; mDevicePresenceMonitor = companionDevicePresenceMonitor; + mPowerManagerInternal = powerManagerInternal; mCompanionServicesRegister = new CompanionServicesRegister(); mBoundCompanionApplications = new AndroidPackageMap<>(); mScheduledForRebindingCompanionApplications = new AndroidPackageMap<>(); @@ -364,9 +372,21 @@ public class CompanionApplicationController { boolean isPrimary = serviceConnector.isPrimary(); Slog.i(TAG, "onBinderDied() u" + userId + "/" + packageName + " isPrimary: " + isPrimary); - // First: Only mark not BOUND for primary service. - synchronized (mBoundCompanionApplications) { - if (serviceConnector.isPrimary()) { + // First, disable hint mode for Auto profile and mark not BOUND for primary service ONLY. + if (isPrimary) { + final List<AssociationInfo> associations = + mAssociationStore.getAssociationsForPackage(userId, packageName); + + for (AssociationInfo association : associations) { + final String deviceProfile = association.getDeviceProfile(); + if (DEVICE_PROFILE_AUTOMOTIVE_PROJECTION.equals(deviceProfile)) { + Slog.i(TAG, "Disable hint mode for device profile: " + deviceProfile); + mPowerManagerInternal.setPowerMode(Mode.AUTOMOTIVE_PROJECTION, false); + break; + } + } + + synchronized (mBoundCompanionApplications) { mBoundCompanionApplications.removePackage(userId, packageName); } } diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index 5019428c5323..0054bc87af77 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -20,7 +20,6 @@ package com.android.server.companion; import static android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES; import static android.Manifest.permission.DELIVER_COMPANION_MESSAGES; import static android.Manifest.permission.MANAGE_COMPANION_DEVICES; -import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION; import static android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE; import static android.Manifest.permission.USE_COMPANION_TRANSPORTS; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE; @@ -270,7 +269,8 @@ public class CompanionDeviceManagerService extends SystemService { mAssociationStore, mObservableUuidStore, mDevicePresenceCallback); mCompanionAppController = new CompanionApplicationController( - context, mAssociationStore, mObservableUuidStore, mDevicePresenceMonitor); + context, mAssociationStore, mObservableUuidStore, mDevicePresenceMonitor, + mPowerManagerInternal); mTransportManager = new CompanionTransportManager(context, mAssociationStore); mSystemDataTransferProcessor = new SystemDataTransferProcessor(this, mPackageManagerInternal, mAssociationStore, @@ -1128,7 +1128,9 @@ public class CompanionDeviceManagerService extends SystemService { mDevicePresenceMonitor.onSelfManagedDeviceConnected(associationId); - if (association.getDeviceProfile() == REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION) { + final String deviceProfile = association.getDeviceProfile(); + if (DEVICE_PROFILE_AUTOMOTIVE_PROJECTION.equals(deviceProfile)) { + Slog.i(TAG, "Enable hint mode for device device profile: " + deviceProfile); mPowerManagerInternal.setPowerMode(Mode.AUTOMOTIVE_PROJECTION, true); } } @@ -1146,7 +1148,9 @@ public class CompanionDeviceManagerService extends SystemService { mDevicePresenceMonitor.onSelfManagedDeviceDisconnected(associationId); - if (association.getDeviceProfile() == REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION) { + final String deviceProfile = association.getDeviceProfile(); + if (DEVICE_PROFILE_AUTOMOTIVE_PROJECTION.equals(deviceProfile)) { + Slog.i(TAG, "Disable hint mode for device profile: " + deviceProfile); mPowerManagerInternal.setPowerMode(Mode.AUTOMOTIVE_PROJECTION, false); } } |