diff options
| author | Chris Li <lihongyu@google.com> | 2021-06-24 16:56:31 -0700 |
|---|---|---|
| committer | Chris Li <lihongyu@google.com> | 2021-07-01 22:06:22 -0700 |
| commit | ccff5a6a8b402e1069ac76c89b8467c46f098ae8 (patch) | |
| tree | 54f0450ead50bc1206c4cffd6474afd78eb9eed0 /core/java/android/window/TaskFragmentOrganizer.java | |
| parent | da14b09d4ba4a8f12b16ac972eacd0ad11cd0c5d (diff) | |
Add onErrorCallback for TaskFragmentOrganizer
When app wants to create activity through sidecar (for example,
startActivityToSide), we need a callback in case it failed to finish the
request.
Allow the caller to set a token for the WCT, which will be passed back
if there is any error, so that the caller can identify the error
callback.
Bug: 190433129
Test: N/A
Change-Id: Icffb7255e75465b90ed822559296f147a7e3418a
Diffstat (limited to 'core/java/android/window/TaskFragmentOrganizer.java')
| -rw-r--r-- | core/java/android/window/TaskFragmentOrganizer.java | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/core/java/android/window/TaskFragmentOrganizer.java b/core/java/android/window/TaskFragmentOrganizer.java index 51722cccb44d..78c55a223eaf 100644 --- a/core/java/android/window/TaskFragmentOrganizer.java +++ b/core/java/android/window/TaskFragmentOrganizer.java @@ -19,6 +19,7 @@ package android.window; import android.annotation.CallSuper; import android.annotation.NonNull; import android.content.res.Configuration; +import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; @@ -31,6 +32,21 @@ import java.util.concurrent.Executor; public class TaskFragmentOrganizer extends WindowOrganizer { /** + * Key to the exception in {@link Bundle} in {@link ITaskFragmentOrganizer#onTaskFragmentError}. + */ + private static final String KEY_ERROR_CALLBACK_EXCEPTION = "fragment_exception"; + + /** + * Creates a {@link Bundle} with an exception that can be passed to + * {@link ITaskFragmentOrganizer#onTaskFragmentError}. + */ + public static Bundle putExceptionInBundle(@NonNull Throwable exception) { + final Bundle exceptionBundle = new Bundle(); + exceptionBundle.putSerializable(KEY_ERROR_CALLBACK_EXCEPTION, exception); + return exceptionBundle; + } + + /** * Callbacks from WM Core are posted on this executor. */ private final Executor mExecutor; @@ -93,6 +109,17 @@ public class TaskFragmentOrganizer extends WindowOrganizer { public void onTaskFragmentParentInfoChanged( @NonNull IBinder fragmentToken, @NonNull Configuration parentConfig) {} + /** + * Called when the {@link WindowContainerTransaction} created with + * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} failed on the server side. + * + * @param errorCallbackToken token set in + * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} + * @param exception exception from the server side. + */ + public void onTaskFragmentError( + @NonNull IBinder errorCallbackToken, @NonNull Throwable exception) {} + private final ITaskFragmentOrganizer mInterface = new ITaskFragmentOrganizer.Stub() { @Override public void onTaskFragmentAppeared(@NonNull TaskFragmentAppearedInfo taskFragmentInfo) { @@ -119,6 +146,14 @@ public class TaskFragmentOrganizer extends WindowOrganizer { () -> TaskFragmentOrganizer.this.onTaskFragmentParentInfoChanged( fragmentToken, parentConfig)); } + + @Override + public void onTaskFragmentError( + @NonNull IBinder errorCallbackToken, @NonNull Bundle exceptionBundle) { + mExecutor.execute(() -> TaskFragmentOrganizer.this.onTaskFragmentError( + errorCallbackToken, + (Throwable) exceptionBundle.getSerializable(KEY_ERROR_CALLBACK_EXCEPTION))); + } }; private ITaskFragmentOrganizerController getController() { |
