Update the failure while start activity in TaskFragment

Report the failure to the organizer with a more suitable error to
prevent misleading.

Bug: 197224830
Test: atest TaskFragmentOrganizerTest
            TaskFragmentOrganizerPolicyTest

Change-Id: Ifcd5e563f6b85f760ec3c7d4776465f027ea27b5
This commit is contained in:
Jeff Chang
2021-08-25 15:17:02 +08:00
parent 5cbb831c10
commit 505ff7a384

View File

@@ -56,6 +56,7 @@ import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Slog;
@@ -698,10 +699,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
.startActivityInTaskFragment(tf, activityIntent, activityOptions,
hop.getCallingActivity());
if (!isStartResultSuccessful(result)) {
final Throwable exception =
new ActivityNotFoundException("start activity in taskFragment failed");
sendTaskFragmentOperationFailure(tf.getTaskFragmentOrganizer(),
errorCallbackToken, exception);
errorCallbackToken,
convertStartFailureToThrowable(result, activityIntent));
}
break;
case HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT:
@@ -1223,4 +1223,21 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
mService.mTaskFragmentOrganizerController
.onTaskFragmentError(organizer, errorCallbackToken, exception);
}
private Throwable convertStartFailureToThrowable(int result, Intent intent) {
switch (result) {
case ActivityManager.START_INTENT_NOT_RESOLVED:
case ActivityManager.START_CLASS_NOT_FOUND:
return new ActivityNotFoundException("No Activity found to handle " + intent);
case ActivityManager.START_PERMISSION_DENIED:
return new SecurityException("Permission denied and not allowed to start activity "
+ intent);
case ActivityManager.START_CANCELED:
return new AndroidRuntimeException("Activity could not be started for " + intent
+ " with error code : " + result);
default:
return new AndroidRuntimeException("Start activity failed with error code : "
+ result + " when starting " + intent);
}
}
}