Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -9015,6 +9015,7 @@ package android.companion { public final class CompanionDeviceManager { method @RequiresPermission(anyOf={android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH, android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER, android.Manifest.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING, android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION}, conditional=true) public void associate(@NonNull android.companion.AssociationRequest, @NonNull android.companion.CompanionDeviceManager.Callback, @Nullable android.os.Handler); method @RequiresPermission(anyOf={android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH, android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER, android.Manifest.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING, android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION}, conditional=true) public void associate(@NonNull android.companion.AssociationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.companion.CompanionDeviceManager.Callback); method @Nullable public android.content.IntentSender buildAssociationCancellationIntent(); method @Nullable public android.content.IntentSender buildPermissionTransferUserConsentIntent(int) throws android.companion.DeviceNotAssociatedException; method @Deprecated public void disassociate(@NonNull String); method public void disassociate(int); core/java/android/companion/CompanionDeviceManager.java +28 −0 Original line number Diff line number Diff line Loading @@ -402,6 +402,34 @@ public final class CompanionDeviceManager { } } /** * Cancel the current association activity. * * <p>The app should launch the returned {@code intentSender} by calling * {@link Activity#startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} to * cancel the current association activity</p> * * <p>Calling this API requires a uses-feature * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p> * * @return An {@link IntentSender} that the app should use to launch in order to cancel the * current association activity */ @UserHandleAware @Nullable public IntentSender buildAssociationCancellationIntent() { if (!checkFeaturePresent()) return null; try { PendingIntent pendingIntent = mService.buildAssociationCancellationIntent( mContext.getOpPackageName(), mContext.getUserId()); return pendingIntent.getIntentSender(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * <p>Calling this API requires a uses-feature * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p> Loading core/java/android/companion/ICompanionDeviceManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -82,4 +82,6 @@ interface ICompanionDeviceManager { void detachSystemDataTransport(String packageName, int userId, int associationId); boolean isCompanionApplicationBound(String packageName, int userId); PendingIntent buildAssociationCancellationIntent(in String callingPackage, int userId); } packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java +22 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import static java.util.Objects.requireNonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.companion.AssociationInfo; import android.companion.AssociationRequest; import android.companion.CompanionDeviceManager; Loading Loading @@ -81,6 +82,7 @@ import java.util.List; * A CompanionDevice activity response for showing the available * nearby devices to be associated with. */ @SuppressLint("LongLogTag") public class CompanionDeviceActivity extends FragmentActivity implements CompanionVendorHelperDialogFragment.CompanionVendorHelperDialogListener { private static final boolean DEBUG = false; Loading @@ -94,6 +96,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements private static final String EXTRA_APPLICATION_CALLBACK = "application_callback"; private static final String EXTRA_ASSOCIATION_REQUEST = "association_request"; private static final String EXTRA_RESULT_RECEIVER = "result_receiver"; private static final String EXTRA_FORCE_CANCEL_CONFIRMATION = "cancel_confirmation"; private static final String FRAGMENT_DIALOG_TAG = "fragment_dialog"; Loading Loading @@ -162,6 +165,12 @@ public class CompanionDeviceActivity extends FragmentActivity implements @Override public void onCreate(Bundle savedInstanceState) { if (DEBUG) Log.d(TAG, "onCreate()"); boolean forceCancelDialog = getIntent().getBooleanExtra("cancel_confirmation", false); // Must handle the force cancel request in onNewIntent. if (forceCancelDialog) { Log.i(TAG, "The confirmation does not exist, skipping the cancel request"); finish(); } super.onCreate(savedInstanceState); getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); Loading Loading @@ -195,10 +204,23 @@ public class CompanionDeviceActivity extends FragmentActivity implements @Override protected void onNewIntent(Intent intent) { // Force cancels the CDM dialog if this activity receives another intent with // EXTRA_FORCE_CANCEL_CONFIRMATION. boolean forCancelDialog = intent.getBooleanExtra(EXTRA_FORCE_CANCEL_CONFIRMATION, false); if (forCancelDialog) { Log.i(TAG, "Cancelling the user confirmation"); cancel(false, false); return; } // Handle another incoming request (while we are not done with the original - mRequest - // yet). final AssociationRequest request = requireNonNull( intent.getParcelableExtra(EXTRA_ASSOCIATION_REQUEST)); if (DEBUG) Log.d(TAG, "onNewIntent(), request=" + request); // We can only "process" one request at a time. Loading packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java +2 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static java.util.Objects.requireNonNull; import android.annotation.MainThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.app.Service; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; Loading Loading @@ -68,6 +69,7 @@ import java.util.Objects; /** * A CompanionDevice service response for scanning nearby devices */ @SuppressLint("LongLogTag") public class CompanionDeviceDiscoveryService extends Service { private static final boolean DEBUG = false; private static final String TAG = "CDM_CompanionDeviceDiscoveryService"; Loading Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -9015,6 +9015,7 @@ package android.companion { public final class CompanionDeviceManager { method @RequiresPermission(anyOf={android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH, android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER, android.Manifest.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING, android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION}, conditional=true) public void associate(@NonNull android.companion.AssociationRequest, @NonNull android.companion.CompanionDeviceManager.Callback, @Nullable android.os.Handler); method @RequiresPermission(anyOf={android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH, android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER, android.Manifest.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING, android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION}, conditional=true) public void associate(@NonNull android.companion.AssociationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.companion.CompanionDeviceManager.Callback); method @Nullable public android.content.IntentSender buildAssociationCancellationIntent(); method @Nullable public android.content.IntentSender buildPermissionTransferUserConsentIntent(int) throws android.companion.DeviceNotAssociatedException; method @Deprecated public void disassociate(@NonNull String); method public void disassociate(int);
core/java/android/companion/CompanionDeviceManager.java +28 −0 Original line number Diff line number Diff line Loading @@ -402,6 +402,34 @@ public final class CompanionDeviceManager { } } /** * Cancel the current association activity. * * <p>The app should launch the returned {@code intentSender} by calling * {@link Activity#startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} to * cancel the current association activity</p> * * <p>Calling this API requires a uses-feature * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p> * * @return An {@link IntentSender} that the app should use to launch in order to cancel the * current association activity */ @UserHandleAware @Nullable public IntentSender buildAssociationCancellationIntent() { if (!checkFeaturePresent()) return null; try { PendingIntent pendingIntent = mService.buildAssociationCancellationIntent( mContext.getOpPackageName(), mContext.getUserId()); return pendingIntent.getIntentSender(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * <p>Calling this API requires a uses-feature * {@link PackageManager#FEATURE_COMPANION_DEVICE_SETUP} declaration in the manifest</p> Loading
core/java/android/companion/ICompanionDeviceManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -82,4 +82,6 @@ interface ICompanionDeviceManager { void detachSystemDataTransport(String packageName, int userId, int associationId); boolean isCompanionApplicationBound(String packageName, int userId); PendingIntent buildAssociationCancellationIntent(in String callingPackage, int userId); }
packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java +22 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import static java.util.Objects.requireNonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.companion.AssociationInfo; import android.companion.AssociationRequest; import android.companion.CompanionDeviceManager; Loading Loading @@ -81,6 +82,7 @@ import java.util.List; * A CompanionDevice activity response for showing the available * nearby devices to be associated with. */ @SuppressLint("LongLogTag") public class CompanionDeviceActivity extends FragmentActivity implements CompanionVendorHelperDialogFragment.CompanionVendorHelperDialogListener { private static final boolean DEBUG = false; Loading @@ -94,6 +96,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements private static final String EXTRA_APPLICATION_CALLBACK = "application_callback"; private static final String EXTRA_ASSOCIATION_REQUEST = "association_request"; private static final String EXTRA_RESULT_RECEIVER = "result_receiver"; private static final String EXTRA_FORCE_CANCEL_CONFIRMATION = "cancel_confirmation"; private static final String FRAGMENT_DIALOG_TAG = "fragment_dialog"; Loading Loading @@ -162,6 +165,12 @@ public class CompanionDeviceActivity extends FragmentActivity implements @Override public void onCreate(Bundle savedInstanceState) { if (DEBUG) Log.d(TAG, "onCreate()"); boolean forceCancelDialog = getIntent().getBooleanExtra("cancel_confirmation", false); // Must handle the force cancel request in onNewIntent. if (forceCancelDialog) { Log.i(TAG, "The confirmation does not exist, skipping the cancel request"); finish(); } super.onCreate(savedInstanceState); getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); Loading Loading @@ -195,10 +204,23 @@ public class CompanionDeviceActivity extends FragmentActivity implements @Override protected void onNewIntent(Intent intent) { // Force cancels the CDM dialog if this activity receives another intent with // EXTRA_FORCE_CANCEL_CONFIRMATION. boolean forCancelDialog = intent.getBooleanExtra(EXTRA_FORCE_CANCEL_CONFIRMATION, false); if (forCancelDialog) { Log.i(TAG, "Cancelling the user confirmation"); cancel(false, false); return; } // Handle another incoming request (while we are not done with the original - mRequest - // yet). final AssociationRequest request = requireNonNull( intent.getParcelableExtra(EXTRA_ASSOCIATION_REQUEST)); if (DEBUG) Log.d(TAG, "onNewIntent(), request=" + request); // We can only "process" one request at a time. Loading
packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceDiscoveryService.java +2 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static java.util.Objects.requireNonNull; import android.annotation.MainThread; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.app.Service; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; Loading Loading @@ -68,6 +69,7 @@ import java.util.Objects; /** * A CompanionDevice service response for scanning nearby devices */ @SuppressLint("LongLogTag") public class CompanionDeviceDiscoveryService extends Service { private static final boolean DEBUG = false; private static final String TAG = "CDM_CompanionDeviceDiscoveryService"; Loading