Loading packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -165,6 +165,7 @@ public class DeviceChooserActivity extends Activity { protected void onStop() { super.onStop(); if (!isFinishing() && !isChangingConfigurations()) { Log.i(LOG_TAG, "onStop() - cancelling"); cancel(); } } Loading Loading @@ -195,7 +196,6 @@ public class DeviceChooserActivity extends Activity { titleView.setText(title); } //TODO put in resources xmls private ProgressBar getProgressBar() { final ProgressBar progressBar = new ProgressBar(this); progressBar.setForegroundGravity(Gravity.CENTER_HORIZONTAL); Loading packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java +1 −1 Original line number Diff line number Diff line Loading @@ -309,7 +309,7 @@ public class DeviceDiscoveryService extends Service { } private void onDeviceLost(@Nullable DeviceFilterPair device) { if (DEBUG) Log.i(LOG_TAG, "Lost device " + device.getDisplayName()); Log.i(LOG_TAG, "Lost device " + device.getDisplayName()); Handler.getMain().sendMessage(obtainMessage( DeviceDiscoveryService::onDeviceLostMainThread, this, device)); } Loading services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +57 −40 Original line number Diff line number Diff line Loading @@ -257,6 +257,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind new PackageMonitor() { @Override public void onPackageRemoved(String packageName, int uid) { Slog.d(LOG_TAG, "onPackageRemoved(packageName = " + packageName + ", uid = " + uid + ")"); int userId = getChangingUserId(); updateAssociations( as -> CollectionUtils.filter(as, Loading @@ -268,6 +270,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void onPackageModified(String packageName) { Slog.d(LOG_TAG, "onPackageModified(packageName = " + packageName + ")"); int userId = getChangingUserId(); forEach(getAllAssociations(userId, packageName), association -> { updateSpecialAccessPermissionForAssociatedPackage(association); Loading Loading @@ -304,7 +307,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind mBleStateBroadcastReceiver, mBleStateBroadcastReceiver.mIntentFilter); initBleScanning(); } else { Log.w(LOG_TAG, "No BluetoothAdapter available"); Slog.w(LOG_TAG, "No BluetoothAdapter available"); } } } Loading @@ -324,6 +327,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void maybeGrantAutoRevokeExemptions() { Slog.d(LOG_TAG, "maybeGrantAutoRevokeExemptions()"); PackageManager pm = getContext().getPackageManager(); for (int userId : LocalServices.getService(UserManagerInternal.class).getUserIds()) { SharedPreferences pref = getContext().getSharedPreferences( Loading @@ -343,7 +347,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind int uid = pm.getPackageUidAsUser(a.getPackageName(), userId); exemptFromAutoRevoke(a.getPackageName(), uid); } catch (PackageManager.NameNotFoundException e) { Log.w(LOG_TAG, "Unknown companion package: " + a.getPackageName(), e); Slog.w(LOG_TAG, "Unknown companion package: " + a.getPackageName(), e); } } } finally { Loading @@ -354,10 +358,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void binderDied() { Slog.w(LOG_TAG, "binderDied()"); mMainHandler.post(this::cleanup); } private void cleanup() { Slog.d(LOG_TAG, "cleanup(); discovery = " + mOngoingDeviceDiscovery + ", request = " + mRequest); synchronized (mLock) { AndroidFuture<Association> ongoingDeviceDiscovery = mOngoingDeviceDiscovery; if (ongoingDeviceDiscovery != null && !ongoingDeviceDiscovery.isDone()) { Loading Loading @@ -400,10 +407,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind AssociationRequest request, IFindDeviceCallback callback, String callingPackage) throws RemoteException { if (DEBUG) { Slog.i(LOG_TAG, "associate(request = " + request + ", callback = " + callback + ", callingPackage = " + callingPackage + ")"); } checkNotNull(request, "Request cannot be null"); checkNotNull(callback, "Callback cannot be null"); checkCallerIsSystemOr(callingPackage); Loading @@ -423,9 +428,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind request.getDeviceProfile()); mOngoingDeviceDiscovery = fetchProfileDescription.thenComposeAsync(description -> { Slog.d(LOG_TAG, "fetchProfileDescription done: " + description); request.setDeviceProfilePrivilegesDescription(description); return mServiceConnectors.forUser(userId).postAsync(service -> { Slog.d(LOG_TAG, "Connected to CDM service; starting discovery for " + request); AndroidFuture<Association> future = new AndroidFuture<>(); service.startDiscovery(request, callingPackage, callback, future); return future; Loading @@ -438,7 +447,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (err == null) { addAssociation(association); } else { Log.e(LOG_TAG, "Failed to discover device(s)", err); Slog.e(LOG_TAG, "Failed to discover device(s)", err); callback.onFailure("No devices found: " + err.getMessage()); } cleanup(); Loading @@ -452,6 +461,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind public void stopScan(AssociationRequest request, IFindDeviceCallback callback, String callingPackage) { Slog.d(LOG_TAG, "stopScan(request = " + request + ")"); if (Objects.equals(request, mRequest) && Objects.equals(callback, mFindDeviceCallback) && Objects.equals(callingPackage, mCallingPackage)) { Loading Loading @@ -712,7 +722,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind getAllAssociations(association.getUserId()), a -> !a.equals(association) && deviceProfile.equals(a.getDeviceProfile())); if (otherAssociationWithDeviceProfile != null) { Log.i(LOG_TAG, "Not revoking " + deviceProfile Slog.i(LOG_TAG, "Not revoking " + deviceProfile + " for " + association + " - profile still present in " + otherAssociationWithDeviceProfile); } else { Loading @@ -726,7 +736,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind getContext().getMainExecutor(), success -> { if (!success) { Log.e(LOG_TAG, "Failed to revoke device profile role " Slog.e(LOG_TAG, "Failed to revoke device profile role " + association.getDeviceProfile() + " to " + association.getPackageName() + " for user " + association.getUserId()); Loading Loading @@ -794,7 +804,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind packageName, AppOpsManager.MODE_IGNORED); } catch (RemoteException e) { Log.w(LOG_TAG, Slog.w(LOG_TAG, "Error while granting auto revoke exemption for " + packageName, e); } } Loading @@ -819,9 +829,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void recordAssociation(Association association) { if (DEBUG) { Log.i(LOG_TAG, "recordAssociation(" + association + ")"); } Slog.i(LOG_TAG, "recordAssociation(" + association + ")"); updateAssociations(associations -> CollectionUtils.add(associations, association)); } Loading @@ -835,9 +843,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind final Set<Association> old = getAllAssociations(userId); Set<Association> associations = new ArraySet<>(old); associations = update.apply(associations); if (DEBUG) { Slog.i(LOG_TAG, "Updating associations: " + old + " --> " + associations); } mCachedAssociations.put(userId, Collections.unmodifiableSet(associations)); BackgroundThread.getHandler().sendMessage(PooledLambda.obtainMessage( CompanionDeviceManagerService::persistAssociations, Loading Loading @@ -866,9 +872,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void persistAssociations(Set<Association> associations, int userId) { if (DEBUG) { Slog.i(LOG_TAG, "Writing associations to disk: " + associations); } final AtomicFile file = getStorageFileForUser(userId); synchronized (file) { file.write(out -> { Loading Loading @@ -919,10 +923,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (mCachedAssociations.get(userId) == null) { mCachedAssociations.put(userId, Collections.unmodifiableSet( emptyIfNull(readAllAssociations(userId)))); if (DEBUG) { Slog.i(LOG_TAG, "Read associations from disk: " + mCachedAssociations); } } return mCachedAssociations.get(userId); } } Loading Loading @@ -1002,13 +1004,15 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void onDeviceConnected(String address) { Slog.d(LOG_TAG, "onDeviceConnected(address = " + address + ")"); mCurrentlyConnectedDevices.add(address); for (UserInfo user : getAllUsers()) { for (Association association : getAllAssociations(user.id)) { if (Objects.equals(address, association.getDeviceMacAddress())) { if (association.getDeviceProfile() != null) { Log.i(LOG_TAG, "Granting role " + association.getDeviceProfile() Slog.i(LOG_TAG, "Granting role " + association.getDeviceProfile() + " to " + association.getPackageName() + " due to device connected: " + association.getDeviceMacAddress()); grantDeviceProfile(association); Loading @@ -1021,6 +1025,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void grantDeviceProfile(Association association) { Slog.i(LOG_TAG, "grantDeviceProfile(association = " + association + ")"); if (association.getDeviceProfile() != null) { mRoleManager.addRoleHolderAsUser( association.getDeviceProfile(), Loading @@ -1030,7 +1036,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind getContext().getMainExecutor(), success -> { if (!success) { Log.e(LOG_TAG, "Failed to grant device profile role " Slog.e(LOG_TAG, "Failed to grant device profile role " + association.getDeviceProfile() + " to " + association.getPackageName() + " for user " + association.getUserId()); Loading @@ -1040,6 +1046,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void onDeviceDisconnected(String address) { Slog.d(LOG_TAG, "onDeviceConnected(address = " + address + ")"); mCurrentlyConnectedDevices.remove(address); onDeviceDisappeared(address); Loading @@ -1059,13 +1067,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind List<ResolveInfo> packageResolveInfos = filter(resolveInfos, info -> Objects.equals(info.serviceInfo.packageName, a.getPackageName())); if (packageResolveInfos.size() != 1) { Log.w(LOG_TAG, "Device presence listener package must have exactly one " Slog.w(LOG_TAG, "Device presence listener package must have exactly one " + "CompanionDeviceService, but " + a.getPackageName() + " has " + packageResolveInfos.size()); return new ServiceConnector.NoOp<>(); } ComponentName componentName = packageResolveInfos.get(0).serviceInfo.getComponentName(); Log.i(LOG_TAG, "Initializing CompanionDeviceService binding for " + componentName); Slog.i(LOG_TAG, "Initializing CompanionDeviceService binding for " + componentName); return new ServiceConnector.Impl<>(getContext(), new Intent(CompanionDeviceService.SERVICE_INTERFACE).setComponent(componentName), BIND_IMPORTANT, Loading @@ -1077,7 +1085,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void onScanResult(int callbackType, ScanResult result) { if (DEBUG) { Log.i(LOG_TAG, "onScanResult(callbackType = " Slog.i(LOG_TAG, "onScanResult(callbackType = " + callbackType + ", result = " + result + ")"); } Loading @@ -1096,9 +1104,9 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (errorCode == SCAN_FAILED_ALREADY_STARTED) { // ignore - this might happen if BT tries to auto-restore scans for us in the // future Log.i(LOG_TAG, "Ignoring BLE scan error: SCAN_FAILED_ALREADY_STARTED"); Slog.i(LOG_TAG, "Ignoring BLE scan error: SCAN_FAILED_ALREADY_STARTED"); } else { Log.w(LOG_TAG, "Failed to start BLE scan: error " + errorCode); Slog.w(LOG_TAG, "Failed to start BLE scan: error " + errorCode); } } } Loading @@ -1112,7 +1120,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind public void onReceive(Context context, Intent intent) { int previousState = intent.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, -1); int newState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); Log.i(LOG_TAG, "Received BT state transition broadcast: " Slog.d(LOG_TAG, "Received BT state transition broadcast: " + BluetoothAdapter.nameForState(previousState) + " -> " + BluetoothAdapter.nameForState(newState)); Loading @@ -1122,7 +1130,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (mBluetoothAdapter.getBluetoothLeScanner() != null) { startBleScan(); } else { Log.wtf(LOG_TAG, "BLE on, but BluetoothLeScanner == null"); Slog.wtf(LOG_TAG, "BLE on, but BluetoothLeScanner == null"); } } } Loading @@ -1136,6 +1144,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void run() { Slog.i(LOG_TAG, "UnbindDeviceListenersRunnable.run(); devicesNearby = " + mDevicesLastNearby); int size = mDevicesLastNearby.size(); for (int i = 0; i < size; i++) { String address = mDevicesLastNearby.keyAt(i); Loading @@ -1162,12 +1172,15 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } public void schedule() { Slog.d(LOG_TAG, "TriggerDeviceDisappearedRunnable.schedule(address = " + mAddress + ")"); mMainHandler.removeCallbacks(this); mMainHandler.postDelayed(this, this, DEVICE_DISAPPEARED_TIMEOUT_MS); } @Override public void run() { Slog.d(LOG_TAG, "TriggerDeviceDisappearedRunnable.run(address = " + mAddress + ")"); onDeviceDisappeared(mAddress); } } Loading @@ -1187,6 +1200,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void onDeviceNearby(String address) { Slog.i(LOG_TAG, "onDeviceNearby(address = " + address + ")"); Date timestamp = new Date(); Date oldTimestamp = mDevicesLastNearby.put(address, timestamp); Loading @@ -1203,7 +1218,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind for (Association association : getAllAssociations(address)) { if (association.isNotifyOnDeviceNearby()) { if (DEBUG) { Log.i(LOG_TAG, "Device " + address Slog.i(LOG_TAG, "Device " + address + " managed by " + association.getPackageName() + " is nearby on " + timestamp); } Loading @@ -1215,11 +1230,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void onDeviceDisappeared(String address) { Slog.i(LOG_TAG, "onDeviceDisappeared(address = " + address + ")"); boolean hasDeviceListeners = false; for (Association association : getAllAssociations(address)) { if (association.isNotifyOnDeviceNearby()) { if (DEBUG) { Log.i(LOG_TAG, "Device " + address Slog.i(LOG_TAG, "Device " + address + " managed by " + association.getPackageName() + " disappeared; last seen on " + mDevicesLastNearby.get(address)); } Loading @@ -1245,19 +1262,19 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void initBleScanning() { Log.i(LOG_TAG, "initBleScanning()"); Slog.i(LOG_TAG, "initBleScanning()"); boolean bluetoothReady = mBluetoothAdapter.registerServiceLifecycleCallback( new BluetoothAdapter.ServiceLifecycleCallback() { @Override public void onBluetoothServiceUp() { Log.i(LOG_TAG, "Bluetooth stack is up"); Slog.i(LOG_TAG, "Bluetooth stack is up"); startBleScan(); } @Override public void onBluetoothServiceDown() { Log.w(LOG_TAG, "Bluetooth stack is down"); Slog.w(LOG_TAG, "Bluetooth stack is down"); } }); if (bluetoothReady) { Loading @@ -1266,7 +1283,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void startBleScan() { Log.i(LOG_TAG, "startBleScan()"); Slog.i(LOG_TAG, "startBleScan()"); List<ScanFilter> filters = getBleScanFilters(); if (filters.isEmpty()) { Loading @@ -1274,7 +1291,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner(); if (scanner == null) { Log.w(LOG_TAG, "scanner == null (likely BLE isn't ON yet)"); Slog.w(LOG_TAG, "scanner == null (likely BLE isn't ON yet)"); } else { scanner.startScan( filters, Loading Loading @@ -1321,7 +1338,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind try { return Long.parseLong(str); } catch (NumberFormatException e) { Log.w(LOG_TAG, "Failed to parse", e); Slog.w(LOG_TAG, "Failed to parse", e); return def; } } Loading Loading @@ -1380,7 +1397,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } return 0; } catch (Throwable t) { Log.e(LOG_TAG, "Error running a command: $ " + cmd, t); Slog.e(LOG_TAG, "Error running a command: $ " + cmd, t); getErrPrintWriter().println(Log.getStackTraceString(t)); return 1; } Loading Loading
packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceChooserActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -165,6 +165,7 @@ public class DeviceChooserActivity extends Activity { protected void onStop() { super.onStop(); if (!isFinishing() && !isChangingConfigurations()) { Log.i(LOG_TAG, "onStop() - cancelling"); cancel(); } } Loading Loading @@ -195,7 +196,6 @@ public class DeviceChooserActivity extends Activity { titleView.setText(title); } //TODO put in resources xmls private ProgressBar getProgressBar() { final ProgressBar progressBar = new ProgressBar(this); progressBar.setForegroundGravity(Gravity.CENTER_HORIZONTAL); Loading
packages/CompanionDeviceManager/src/com/android/companiondevicemanager/DeviceDiscoveryService.java +1 −1 Original line number Diff line number Diff line Loading @@ -309,7 +309,7 @@ public class DeviceDiscoveryService extends Service { } private void onDeviceLost(@Nullable DeviceFilterPair device) { if (DEBUG) Log.i(LOG_TAG, "Lost device " + device.getDisplayName()); Log.i(LOG_TAG, "Lost device " + device.getDisplayName()); Handler.getMain().sendMessage(obtainMessage( DeviceDiscoveryService::onDeviceLostMainThread, this, device)); } Loading
services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +57 −40 Original line number Diff line number Diff line Loading @@ -257,6 +257,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind new PackageMonitor() { @Override public void onPackageRemoved(String packageName, int uid) { Slog.d(LOG_TAG, "onPackageRemoved(packageName = " + packageName + ", uid = " + uid + ")"); int userId = getChangingUserId(); updateAssociations( as -> CollectionUtils.filter(as, Loading @@ -268,6 +270,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void onPackageModified(String packageName) { Slog.d(LOG_TAG, "onPackageModified(packageName = " + packageName + ")"); int userId = getChangingUserId(); forEach(getAllAssociations(userId, packageName), association -> { updateSpecialAccessPermissionForAssociatedPackage(association); Loading Loading @@ -304,7 +307,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind mBleStateBroadcastReceiver, mBleStateBroadcastReceiver.mIntentFilter); initBleScanning(); } else { Log.w(LOG_TAG, "No BluetoothAdapter available"); Slog.w(LOG_TAG, "No BluetoothAdapter available"); } } } Loading @@ -324,6 +327,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void maybeGrantAutoRevokeExemptions() { Slog.d(LOG_TAG, "maybeGrantAutoRevokeExemptions()"); PackageManager pm = getContext().getPackageManager(); for (int userId : LocalServices.getService(UserManagerInternal.class).getUserIds()) { SharedPreferences pref = getContext().getSharedPreferences( Loading @@ -343,7 +347,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind int uid = pm.getPackageUidAsUser(a.getPackageName(), userId); exemptFromAutoRevoke(a.getPackageName(), uid); } catch (PackageManager.NameNotFoundException e) { Log.w(LOG_TAG, "Unknown companion package: " + a.getPackageName(), e); Slog.w(LOG_TAG, "Unknown companion package: " + a.getPackageName(), e); } } } finally { Loading @@ -354,10 +358,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void binderDied() { Slog.w(LOG_TAG, "binderDied()"); mMainHandler.post(this::cleanup); } private void cleanup() { Slog.d(LOG_TAG, "cleanup(); discovery = " + mOngoingDeviceDiscovery + ", request = " + mRequest); synchronized (mLock) { AndroidFuture<Association> ongoingDeviceDiscovery = mOngoingDeviceDiscovery; if (ongoingDeviceDiscovery != null && !ongoingDeviceDiscovery.isDone()) { Loading Loading @@ -400,10 +407,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind AssociationRequest request, IFindDeviceCallback callback, String callingPackage) throws RemoteException { if (DEBUG) { Slog.i(LOG_TAG, "associate(request = " + request + ", callback = " + callback + ", callingPackage = " + callingPackage + ")"); } checkNotNull(request, "Request cannot be null"); checkNotNull(callback, "Callback cannot be null"); checkCallerIsSystemOr(callingPackage); Loading @@ -423,9 +428,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind request.getDeviceProfile()); mOngoingDeviceDiscovery = fetchProfileDescription.thenComposeAsync(description -> { Slog.d(LOG_TAG, "fetchProfileDescription done: " + description); request.setDeviceProfilePrivilegesDescription(description); return mServiceConnectors.forUser(userId).postAsync(service -> { Slog.d(LOG_TAG, "Connected to CDM service; starting discovery for " + request); AndroidFuture<Association> future = new AndroidFuture<>(); service.startDiscovery(request, callingPackage, callback, future); return future; Loading @@ -438,7 +447,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (err == null) { addAssociation(association); } else { Log.e(LOG_TAG, "Failed to discover device(s)", err); Slog.e(LOG_TAG, "Failed to discover device(s)", err); callback.onFailure("No devices found: " + err.getMessage()); } cleanup(); Loading @@ -452,6 +461,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind public void stopScan(AssociationRequest request, IFindDeviceCallback callback, String callingPackage) { Slog.d(LOG_TAG, "stopScan(request = " + request + ")"); if (Objects.equals(request, mRequest) && Objects.equals(callback, mFindDeviceCallback) && Objects.equals(callingPackage, mCallingPackage)) { Loading Loading @@ -712,7 +722,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind getAllAssociations(association.getUserId()), a -> !a.equals(association) && deviceProfile.equals(a.getDeviceProfile())); if (otherAssociationWithDeviceProfile != null) { Log.i(LOG_TAG, "Not revoking " + deviceProfile Slog.i(LOG_TAG, "Not revoking " + deviceProfile + " for " + association + " - profile still present in " + otherAssociationWithDeviceProfile); } else { Loading @@ -726,7 +736,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind getContext().getMainExecutor(), success -> { if (!success) { Log.e(LOG_TAG, "Failed to revoke device profile role " Slog.e(LOG_TAG, "Failed to revoke device profile role " + association.getDeviceProfile() + " to " + association.getPackageName() + " for user " + association.getUserId()); Loading Loading @@ -794,7 +804,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind packageName, AppOpsManager.MODE_IGNORED); } catch (RemoteException e) { Log.w(LOG_TAG, Slog.w(LOG_TAG, "Error while granting auto revoke exemption for " + packageName, e); } } Loading @@ -819,9 +829,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void recordAssociation(Association association) { if (DEBUG) { Log.i(LOG_TAG, "recordAssociation(" + association + ")"); } Slog.i(LOG_TAG, "recordAssociation(" + association + ")"); updateAssociations(associations -> CollectionUtils.add(associations, association)); } Loading @@ -835,9 +843,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind final Set<Association> old = getAllAssociations(userId); Set<Association> associations = new ArraySet<>(old); associations = update.apply(associations); if (DEBUG) { Slog.i(LOG_TAG, "Updating associations: " + old + " --> " + associations); } mCachedAssociations.put(userId, Collections.unmodifiableSet(associations)); BackgroundThread.getHandler().sendMessage(PooledLambda.obtainMessage( CompanionDeviceManagerService::persistAssociations, Loading Loading @@ -866,9 +872,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void persistAssociations(Set<Association> associations, int userId) { if (DEBUG) { Slog.i(LOG_TAG, "Writing associations to disk: " + associations); } final AtomicFile file = getStorageFileForUser(userId); synchronized (file) { file.write(out -> { Loading Loading @@ -919,10 +923,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (mCachedAssociations.get(userId) == null) { mCachedAssociations.put(userId, Collections.unmodifiableSet( emptyIfNull(readAllAssociations(userId)))); if (DEBUG) { Slog.i(LOG_TAG, "Read associations from disk: " + mCachedAssociations); } } return mCachedAssociations.get(userId); } } Loading Loading @@ -1002,13 +1004,15 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void onDeviceConnected(String address) { Slog.d(LOG_TAG, "onDeviceConnected(address = " + address + ")"); mCurrentlyConnectedDevices.add(address); for (UserInfo user : getAllUsers()) { for (Association association : getAllAssociations(user.id)) { if (Objects.equals(address, association.getDeviceMacAddress())) { if (association.getDeviceProfile() != null) { Log.i(LOG_TAG, "Granting role " + association.getDeviceProfile() Slog.i(LOG_TAG, "Granting role " + association.getDeviceProfile() + " to " + association.getPackageName() + " due to device connected: " + association.getDeviceMacAddress()); grantDeviceProfile(association); Loading @@ -1021,6 +1025,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void grantDeviceProfile(Association association) { Slog.i(LOG_TAG, "grantDeviceProfile(association = " + association + ")"); if (association.getDeviceProfile() != null) { mRoleManager.addRoleHolderAsUser( association.getDeviceProfile(), Loading @@ -1030,7 +1036,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind getContext().getMainExecutor(), success -> { if (!success) { Log.e(LOG_TAG, "Failed to grant device profile role " Slog.e(LOG_TAG, "Failed to grant device profile role " + association.getDeviceProfile() + " to " + association.getPackageName() + " for user " + association.getUserId()); Loading @@ -1040,6 +1046,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void onDeviceDisconnected(String address) { Slog.d(LOG_TAG, "onDeviceConnected(address = " + address + ")"); mCurrentlyConnectedDevices.remove(address); onDeviceDisappeared(address); Loading @@ -1059,13 +1067,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind List<ResolveInfo> packageResolveInfos = filter(resolveInfos, info -> Objects.equals(info.serviceInfo.packageName, a.getPackageName())); if (packageResolveInfos.size() != 1) { Log.w(LOG_TAG, "Device presence listener package must have exactly one " Slog.w(LOG_TAG, "Device presence listener package must have exactly one " + "CompanionDeviceService, but " + a.getPackageName() + " has " + packageResolveInfos.size()); return new ServiceConnector.NoOp<>(); } ComponentName componentName = packageResolveInfos.get(0).serviceInfo.getComponentName(); Log.i(LOG_TAG, "Initializing CompanionDeviceService binding for " + componentName); Slog.i(LOG_TAG, "Initializing CompanionDeviceService binding for " + componentName); return new ServiceConnector.Impl<>(getContext(), new Intent(CompanionDeviceService.SERVICE_INTERFACE).setComponent(componentName), BIND_IMPORTANT, Loading @@ -1077,7 +1085,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void onScanResult(int callbackType, ScanResult result) { if (DEBUG) { Log.i(LOG_TAG, "onScanResult(callbackType = " Slog.i(LOG_TAG, "onScanResult(callbackType = " + callbackType + ", result = " + result + ")"); } Loading @@ -1096,9 +1104,9 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (errorCode == SCAN_FAILED_ALREADY_STARTED) { // ignore - this might happen if BT tries to auto-restore scans for us in the // future Log.i(LOG_TAG, "Ignoring BLE scan error: SCAN_FAILED_ALREADY_STARTED"); Slog.i(LOG_TAG, "Ignoring BLE scan error: SCAN_FAILED_ALREADY_STARTED"); } else { Log.w(LOG_TAG, "Failed to start BLE scan: error " + errorCode); Slog.w(LOG_TAG, "Failed to start BLE scan: error " + errorCode); } } } Loading @@ -1112,7 +1120,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind public void onReceive(Context context, Intent intent) { int previousState = intent.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, -1); int newState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); Log.i(LOG_TAG, "Received BT state transition broadcast: " Slog.d(LOG_TAG, "Received BT state transition broadcast: " + BluetoothAdapter.nameForState(previousState) + " -> " + BluetoothAdapter.nameForState(newState)); Loading @@ -1122,7 +1130,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind if (mBluetoothAdapter.getBluetoothLeScanner() != null) { startBleScan(); } else { Log.wtf(LOG_TAG, "BLE on, but BluetoothLeScanner == null"); Slog.wtf(LOG_TAG, "BLE on, but BluetoothLeScanner == null"); } } } Loading @@ -1136,6 +1144,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind @Override public void run() { Slog.i(LOG_TAG, "UnbindDeviceListenersRunnable.run(); devicesNearby = " + mDevicesLastNearby); int size = mDevicesLastNearby.size(); for (int i = 0; i < size; i++) { String address = mDevicesLastNearby.keyAt(i); Loading @@ -1162,12 +1172,15 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } public void schedule() { Slog.d(LOG_TAG, "TriggerDeviceDisappearedRunnable.schedule(address = " + mAddress + ")"); mMainHandler.removeCallbacks(this); mMainHandler.postDelayed(this, this, DEVICE_DISAPPEARED_TIMEOUT_MS); } @Override public void run() { Slog.d(LOG_TAG, "TriggerDeviceDisappearedRunnable.run(address = " + mAddress + ")"); onDeviceDisappeared(mAddress); } } Loading @@ -1187,6 +1200,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void onDeviceNearby(String address) { Slog.i(LOG_TAG, "onDeviceNearby(address = " + address + ")"); Date timestamp = new Date(); Date oldTimestamp = mDevicesLastNearby.put(address, timestamp); Loading @@ -1203,7 +1218,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind for (Association association : getAllAssociations(address)) { if (association.isNotifyOnDeviceNearby()) { if (DEBUG) { Log.i(LOG_TAG, "Device " + address Slog.i(LOG_TAG, "Device " + address + " managed by " + association.getPackageName() + " is nearby on " + timestamp); } Loading @@ -1215,11 +1230,13 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void onDeviceDisappeared(String address) { Slog.i(LOG_TAG, "onDeviceDisappeared(address = " + address + ")"); boolean hasDeviceListeners = false; for (Association association : getAllAssociations(address)) { if (association.isNotifyOnDeviceNearby()) { if (DEBUG) { Log.i(LOG_TAG, "Device " + address Slog.i(LOG_TAG, "Device " + address + " managed by " + association.getPackageName() + " disappeared; last seen on " + mDevicesLastNearby.get(address)); } Loading @@ -1245,19 +1262,19 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } private void initBleScanning() { Log.i(LOG_TAG, "initBleScanning()"); Slog.i(LOG_TAG, "initBleScanning()"); boolean bluetoothReady = mBluetoothAdapter.registerServiceLifecycleCallback( new BluetoothAdapter.ServiceLifecycleCallback() { @Override public void onBluetoothServiceUp() { Log.i(LOG_TAG, "Bluetooth stack is up"); Slog.i(LOG_TAG, "Bluetooth stack is up"); startBleScan(); } @Override public void onBluetoothServiceDown() { Log.w(LOG_TAG, "Bluetooth stack is down"); Slog.w(LOG_TAG, "Bluetooth stack is down"); } }); if (bluetoothReady) { Loading @@ -1266,7 +1283,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } void startBleScan() { Log.i(LOG_TAG, "startBleScan()"); Slog.i(LOG_TAG, "startBleScan()"); List<ScanFilter> filters = getBleScanFilters(); if (filters.isEmpty()) { Loading @@ -1274,7 +1291,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner(); if (scanner == null) { Log.w(LOG_TAG, "scanner == null (likely BLE isn't ON yet)"); Slog.w(LOG_TAG, "scanner == null (likely BLE isn't ON yet)"); } else { scanner.startScan( filters, Loading Loading @@ -1321,7 +1338,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind try { return Long.parseLong(str); } catch (NumberFormatException e) { Log.w(LOG_TAG, "Failed to parse", e); Slog.w(LOG_TAG, "Failed to parse", e); return def; } } Loading Loading @@ -1380,7 +1397,7 @@ public class CompanionDeviceManagerService extends SystemService implements Bind } return 0; } catch (Throwable t) { Log.e(LOG_TAG, "Error running a command: $ " + cmd, t); Slog.e(LOG_TAG, "Error running a command: $ " + cmd, t); getErrPrintWriter().println(Log.getStackTraceString(t)); return 1; } Loading