Loading core/api/current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -9085,6 +9085,11 @@ package android.companion { method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void stopObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException; field public static final String EXTRA_ASSOCIATION = "android.companion.extra.ASSOCIATION"; field @Deprecated public static final String EXTRA_DEVICE = "android.companion.extra.DEVICE"; field public static final int RESULT_CANCELED = 0; // 0x0 field public static final int RESULT_DISCOVERY_TIMEOUT = 2; // 0x2 field public static final int RESULT_INTERNAL_ERROR = 3; // 0x3 field public static final int RESULT_OK = -1; // 0xffffffff field public static final int RESULT_USER_REJECTED = 1; // 0x1 } public abstract static class CompanionDeviceManager.Callback { core/java/android/companion/CompanionDeviceManager.java +47 −17 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_P import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER; import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; Loading Loading @@ -56,6 +57,8 @@ import libcore.io.IoUtils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; Loading Loading @@ -84,33 +87,52 @@ public final class CompanionDeviceManager { private static final boolean DEBUG = false; private static final String LOG_TAG = "CDM_CompanionDeviceManager"; /** @hide */ @IntDef(prefix = {"RESULT_"}, value = { RESULT_OK, RESULT_CANCELED, RESULT_USER_REJECTED, RESULT_DISCOVERY_TIMEOUT, RESULT_INTERNAL_ERROR }) @Retention(RetentionPolicy.SOURCE) public @interface ResultCode {} /** * The result code to propagate back to the originating activity, indicates the association * dialog is explicitly declined by the users. * * @hide * The result code to propagate back to the user activity, indicates the association * is created successfully. */ public static final int RESULT_OK = -1; /** * The result code to propagate back to the user activity, indicates if the association dialog * is implicitly cancelled. * E.g. phone is locked, switch to another app or press outside the dialog. */ public static final int RESULT_CANCELED = 0; /** * The result code to propagate back to the user activity, indicates the association dialog * is explicitly declined by the users. */ public static final int RESULT_USER_REJECTED = 1; /** * The result code to propagate back to the originating activity, indicates the association * The result code to propagate back to the user activity, indicates the association * dialog is dismissed if there's no device found after 20 seconds. * * @hide */ public static final int RESULT_DISCOVERY_TIMEOUT = 2; /** * The result code to propagate back to the originating activity, indicates the internal error * The result code to propagate back to the user activity, indicates the internal error * in CompanionDeviceManager. * * @hide */ public static final int RESULT_INTERNAL_ERROR = 3; /** * Requesting applications will receive the String in {@link Callback#onFailure} if the * association dialog is explicitly declined by the users. e.g. press the Don't allow button. * association dialog is explicitly declined by the users. E.g. press the Don't allow * button. * * @hide */ Loading @@ -118,15 +140,23 @@ public final class CompanionDeviceManager { /** * Requesting applications will receive the String in {@link Callback#onFailure} if there's * no device found after 20 seconds. * no devices found after 20 seconds. * * @hide */ public static final String REASON_DISCOVERY_TIMEOUT = "discovery_timeout"; /** * Requesting applications will receive the String in {@link Callback#onFailure} if there's * an internal error. * * @hide */ public static final String REASON_INTERNAL_ERROR = "internal_error"; /** * Requesting applications will receive the String in {@link Callback#onFailure} if the * association dialog is in-explicitly declined by the users. e.g. phone is locked, switch to * association dialog is implicitly cancelled. E.g. phone is locked, switch to * another app or press outside the dialog. * * @hide Loading packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java +20 −10 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.companion.AssociationRequest.DEVICE_PROFILE_COMPUTER; import static android.companion.AssociationRequest.DEVICE_PROFILE_WATCH; import static android.companion.CompanionDeviceManager.REASON_CANCELED; import static android.companion.CompanionDeviceManager.REASON_DISCOVERY_TIMEOUT; import static android.companion.CompanionDeviceManager.REASON_INTERNAL_ERROR; import static android.companion.CompanionDeviceManager.REASON_USER_REJECTED; import static android.companion.CompanionDeviceManager.RESULT_DISCOVERY_TIMEOUT; import static android.companion.CompanionDeviceManager.RESULT_INTERNAL_ERROR; Loading Loading @@ -214,7 +215,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements Log.i(TAG, "Cancelling the user confirmation"); cancel(false, false); cancel(/* discoveryTimeOut */ false, /* userRejected */ false, /* internalError */ false); return; } Loading @@ -241,7 +243,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements // TODO: handle config changes without cancelling. if (!isDone()) { cancel(/* discoveryTimeOut */ false, /* userRejected */ false); // will finish() cancel(/* discoveryTimeOut */ false, /* userRejected */ false, /* internalError */ false); // will finish() } } Loading Loading @@ -326,7 +329,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements private void onDiscoveryStateChanged(DiscoveryState newState) { if (newState == FINISHED_TIMEOUT && CompanionDeviceDiscoveryService.getScanResult().getValue().isEmpty()) { cancel(/* discoveryTimeOut */ true, /* userRejected */ false); cancel(/* discoveryTimeOut */ true, /* userRejected */ false, /* internalError */ false); } } Loading Loading @@ -364,12 +368,14 @@ public class CompanionDeviceActivity extends FragmentActivity implements mCdmServiceReceiver.send(RESULT_CODE_ASSOCIATION_APPROVED, data); } private void cancel(boolean discoveryTimeout, boolean userRejected) { private void cancel(boolean discoveryTimeout, boolean userRejected, boolean internalError) { if (DEBUG) { Log.i(TAG, "cancel(), discoveryTimeout=" + discoveryTimeout + ", userRejected=" + userRejected, new Exception("Stack Trace Dump")); + userRejected + ", internalError=" + internalError, new Exception("Stack Trace Dump")); } if (isDone()) { Loading @@ -391,9 +397,12 @@ public class CompanionDeviceActivity extends FragmentActivity implements } else if (discoveryTimeout) { cancelReason = REASON_DISCOVERY_TIMEOUT; resultCode = RESULT_DISCOVERY_TIMEOUT; } else if (internalError) { cancelReason = REASON_INTERNAL_ERROR; resultCode = RESULT_INTERNAL_ERROR; } else { cancelReason = REASON_CANCELED; resultCode = RESULT_CANCELED; resultCode = CompanionDeviceManager.RESULT_CANCELED; } // First send callback to the app directly... Loading Loading @@ -449,7 +458,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements } } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Package u" + userId + "/" + packageName + " not found."); setResultAndFinish(null, RESULT_INTERNAL_ERROR); cancel(/* discoveryTimeout */ false, /* userRejected */ false, /* internalError */ true); return; } Loading Loading @@ -627,7 +637,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements // Disable the button, to prevent more clicks. v.setEnabled(false); cancel(/* discoveryTimeout */ false, /* userRejected */ true); cancel(/* discoveryTimeout */ false, /* userRejected */ true, /* internalError */ false); } private void onShowHelperDialog(View view) { Loading @@ -652,7 +662,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements final AssociationInfo association = data.getParcelable( EXTRA_ASSOCIATION, AssociationInfo.class); requireNonNull(association); setResultAndFinish(association, RESULT_OK); setResultAndFinish(association, CompanionDeviceManager.RESULT_OK); } else { setResultAndFinish(null, resultCode); } Loading @@ -661,7 +671,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements @Override public void onShowHelperDialogFailed() { setResultAndFinish(null, RESULT_INTERNAL_ERROR); cancel(/* discoveryTimeout */ false, /* userRejected */ false, /* internalError */ true); } @Override Loading services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +4 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; import static android.app.PendingIntent.FLAG_IMMUTABLE; import static android.app.PendingIntent.FLAG_ONE_SHOT; import static android.companion.CompanionDeviceManager.COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME; import static android.companion.CompanionDeviceManager.REASON_INTERNAL_ERROR; import static android.companion.CompanionDeviceManager.RESULT_INTERNAL_ERROR; import static android.content.ComponentName.createRelative; import static com.android.server.companion.CompanionDeviceManagerService.DEBUG; Loading @@ -40,7 +42,6 @@ import android.app.PendingIntent; import android.companion.AssociatedDevice; import android.companion.AssociationInfo; import android.companion.AssociationRequest; import android.companion.CompanionDeviceManager; import android.companion.IAssociationRequestCallback; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -348,8 +349,7 @@ class AssociationRequestsProcessor { // Send the association back via the app's callback if (callback != null) { try { // TODO: update to INTERNAL_ERROR once it's added. callback.onFailure(CompanionDeviceManager.REASON_CANCELED); callback.onFailure(REASON_INTERNAL_ERROR); } catch (RemoteException ignore) { } } Loading @@ -358,7 +358,7 @@ class AssociationRequestsProcessor { // back to the app via Activity.setResult(). if (resultReceiver != null) { final Bundle data = new Bundle(); resultReceiver.send(CompanionDeviceManager.RESULT_INTERNAL_ERROR, data); resultReceiver.send(RESULT_INTERNAL_ERROR, data); } } } Loading Loading
core/api/current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -9085,6 +9085,11 @@ package android.companion { method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void stopObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException; field public static final String EXTRA_ASSOCIATION = "android.companion.extra.ASSOCIATION"; field @Deprecated public static final String EXTRA_DEVICE = "android.companion.extra.DEVICE"; field public static final int RESULT_CANCELED = 0; // 0x0 field public static final int RESULT_DISCOVERY_TIMEOUT = 2; // 0x2 field public static final int RESULT_INTERNAL_ERROR = 3; // 0x3 field public static final int RESULT_OK = -1; // 0xffffffff field public static final int RESULT_USER_REJECTED = 1; // 0x1 } public abstract static class CompanionDeviceManager.Callback {
core/java/android/companion/CompanionDeviceManager.java +47 −17 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_P import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER; import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; Loading Loading @@ -56,6 +57,8 @@ import libcore.io.IoUtils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; Loading Loading @@ -84,33 +87,52 @@ public final class CompanionDeviceManager { private static final boolean DEBUG = false; private static final String LOG_TAG = "CDM_CompanionDeviceManager"; /** @hide */ @IntDef(prefix = {"RESULT_"}, value = { RESULT_OK, RESULT_CANCELED, RESULT_USER_REJECTED, RESULT_DISCOVERY_TIMEOUT, RESULT_INTERNAL_ERROR }) @Retention(RetentionPolicy.SOURCE) public @interface ResultCode {} /** * The result code to propagate back to the originating activity, indicates the association * dialog is explicitly declined by the users. * * @hide * The result code to propagate back to the user activity, indicates the association * is created successfully. */ public static final int RESULT_OK = -1; /** * The result code to propagate back to the user activity, indicates if the association dialog * is implicitly cancelled. * E.g. phone is locked, switch to another app or press outside the dialog. */ public static final int RESULT_CANCELED = 0; /** * The result code to propagate back to the user activity, indicates the association dialog * is explicitly declined by the users. */ public static final int RESULT_USER_REJECTED = 1; /** * The result code to propagate back to the originating activity, indicates the association * The result code to propagate back to the user activity, indicates the association * dialog is dismissed if there's no device found after 20 seconds. * * @hide */ public static final int RESULT_DISCOVERY_TIMEOUT = 2; /** * The result code to propagate back to the originating activity, indicates the internal error * The result code to propagate back to the user activity, indicates the internal error * in CompanionDeviceManager. * * @hide */ public static final int RESULT_INTERNAL_ERROR = 3; /** * Requesting applications will receive the String in {@link Callback#onFailure} if the * association dialog is explicitly declined by the users. e.g. press the Don't allow button. * association dialog is explicitly declined by the users. E.g. press the Don't allow * button. * * @hide */ Loading @@ -118,15 +140,23 @@ public final class CompanionDeviceManager { /** * Requesting applications will receive the String in {@link Callback#onFailure} if there's * no device found after 20 seconds. * no devices found after 20 seconds. * * @hide */ public static final String REASON_DISCOVERY_TIMEOUT = "discovery_timeout"; /** * Requesting applications will receive the String in {@link Callback#onFailure} if there's * an internal error. * * @hide */ public static final String REASON_INTERNAL_ERROR = "internal_error"; /** * Requesting applications will receive the String in {@link Callback#onFailure} if the * association dialog is in-explicitly declined by the users. e.g. phone is locked, switch to * association dialog is implicitly cancelled. E.g. phone is locked, switch to * another app or press outside the dialog. * * @hide Loading
packages/CompanionDeviceManager/src/com/android/companiondevicemanager/CompanionDeviceActivity.java +20 −10 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.companion.AssociationRequest.DEVICE_PROFILE_COMPUTER; import static android.companion.AssociationRequest.DEVICE_PROFILE_WATCH; import static android.companion.CompanionDeviceManager.REASON_CANCELED; import static android.companion.CompanionDeviceManager.REASON_DISCOVERY_TIMEOUT; import static android.companion.CompanionDeviceManager.REASON_INTERNAL_ERROR; import static android.companion.CompanionDeviceManager.REASON_USER_REJECTED; import static android.companion.CompanionDeviceManager.RESULT_DISCOVERY_TIMEOUT; import static android.companion.CompanionDeviceManager.RESULT_INTERNAL_ERROR; Loading Loading @@ -214,7 +215,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements Log.i(TAG, "Cancelling the user confirmation"); cancel(false, false); cancel(/* discoveryTimeOut */ false, /* userRejected */ false, /* internalError */ false); return; } Loading @@ -241,7 +243,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements // TODO: handle config changes without cancelling. if (!isDone()) { cancel(/* discoveryTimeOut */ false, /* userRejected */ false); // will finish() cancel(/* discoveryTimeOut */ false, /* userRejected */ false, /* internalError */ false); // will finish() } } Loading Loading @@ -326,7 +329,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements private void onDiscoveryStateChanged(DiscoveryState newState) { if (newState == FINISHED_TIMEOUT && CompanionDeviceDiscoveryService.getScanResult().getValue().isEmpty()) { cancel(/* discoveryTimeOut */ true, /* userRejected */ false); cancel(/* discoveryTimeOut */ true, /* userRejected */ false, /* internalError */ false); } } Loading Loading @@ -364,12 +368,14 @@ public class CompanionDeviceActivity extends FragmentActivity implements mCdmServiceReceiver.send(RESULT_CODE_ASSOCIATION_APPROVED, data); } private void cancel(boolean discoveryTimeout, boolean userRejected) { private void cancel(boolean discoveryTimeout, boolean userRejected, boolean internalError) { if (DEBUG) { Log.i(TAG, "cancel(), discoveryTimeout=" + discoveryTimeout + ", userRejected=" + userRejected, new Exception("Stack Trace Dump")); + userRejected + ", internalError=" + internalError, new Exception("Stack Trace Dump")); } if (isDone()) { Loading @@ -391,9 +397,12 @@ public class CompanionDeviceActivity extends FragmentActivity implements } else if (discoveryTimeout) { cancelReason = REASON_DISCOVERY_TIMEOUT; resultCode = RESULT_DISCOVERY_TIMEOUT; } else if (internalError) { cancelReason = REASON_INTERNAL_ERROR; resultCode = RESULT_INTERNAL_ERROR; } else { cancelReason = REASON_CANCELED; resultCode = RESULT_CANCELED; resultCode = CompanionDeviceManager.RESULT_CANCELED; } // First send callback to the app directly... Loading Loading @@ -449,7 +458,8 @@ public class CompanionDeviceActivity extends FragmentActivity implements } } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Package u" + userId + "/" + packageName + " not found."); setResultAndFinish(null, RESULT_INTERNAL_ERROR); cancel(/* discoveryTimeout */ false, /* userRejected */ false, /* internalError */ true); return; } Loading Loading @@ -627,7 +637,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements // Disable the button, to prevent more clicks. v.setEnabled(false); cancel(/* discoveryTimeout */ false, /* userRejected */ true); cancel(/* discoveryTimeout */ false, /* userRejected */ true, /* internalError */ false); } private void onShowHelperDialog(View view) { Loading @@ -652,7 +662,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements final AssociationInfo association = data.getParcelable( EXTRA_ASSOCIATION, AssociationInfo.class); requireNonNull(association); setResultAndFinish(association, RESULT_OK); setResultAndFinish(association, CompanionDeviceManager.RESULT_OK); } else { setResultAndFinish(null, resultCode); } Loading @@ -661,7 +671,7 @@ public class CompanionDeviceActivity extends FragmentActivity implements @Override public void onShowHelperDialogFailed() { setResultAndFinish(null, RESULT_INTERNAL_ERROR); cancel(/* discoveryTimeout */ false, /* userRejected */ false, /* internalError */ true); } @Override Loading
services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +4 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static android.app.PendingIntent.FLAG_CANCEL_CURRENT; import static android.app.PendingIntent.FLAG_IMMUTABLE; import static android.app.PendingIntent.FLAG_ONE_SHOT; import static android.companion.CompanionDeviceManager.COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME; import static android.companion.CompanionDeviceManager.REASON_INTERNAL_ERROR; import static android.companion.CompanionDeviceManager.RESULT_INTERNAL_ERROR; import static android.content.ComponentName.createRelative; import static com.android.server.companion.CompanionDeviceManagerService.DEBUG; Loading @@ -40,7 +42,6 @@ import android.app.PendingIntent; import android.companion.AssociatedDevice; import android.companion.AssociationInfo; import android.companion.AssociationRequest; import android.companion.CompanionDeviceManager; import android.companion.IAssociationRequestCallback; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -348,8 +349,7 @@ class AssociationRequestsProcessor { // Send the association back via the app's callback if (callback != null) { try { // TODO: update to INTERNAL_ERROR once it's added. callback.onFailure(CompanionDeviceManager.REASON_CANCELED); callback.onFailure(REASON_INTERNAL_ERROR); } catch (RemoteException ignore) { } } Loading @@ -358,7 +358,7 @@ class AssociationRequestsProcessor { // back to the app via Activity.setResult(). if (resultReceiver != null) { final Bundle data = new Bundle(); resultReceiver.send(CompanionDeviceManager.RESULT_INTERNAL_ERROR, data); resultReceiver.send(RESULT_INTERNAL_ERROR, data); } } } Loading