Loading core/java/android/service/games/GameSession.java +5 −9 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.app.ActivityTaskManager; import android.app.Instrumentation; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; Loading Loading @@ -511,14 +510,11 @@ public abstract class GameSession { callback.onActivityResult(result.getResultCode(), result.getData()); }, executor); final Intent trampolineIntent = new Intent(); trampolineIntent.setComponent( new ComponentName( "android", "android.service.games.GameSessionTrampolineActivity")); trampolineIntent.putExtra(GameSessionTrampolineActivity.INTENT_KEY, intent); trampolineIntent.putExtra(GameSessionTrampolineActivity.OPTIONS_KEY, options); trampolineIntent.putExtra( GameSessionTrampolineActivity.FUTURE_KEY, future); final Intent trampolineIntent = GameSessionTrampolineActivity.createIntent( intent, options, future); try { int result = ActivityTaskManager.getService().startActivityFromGameSession( Loading core/java/android/service/games/GameSessionActivityResult.java +8 −4 Original line number Diff line number Diff line Loading @@ -22,8 +22,12 @@ import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; import com.android.internal.annotations.VisibleForTesting; final class GameSessionActivityResult implements Parcelable { /** @hide */ @VisibleForTesting public final class GameSessionActivityResult implements Parcelable { public static final Creator<GameSessionActivityResult> CREATOR = new Creator<GameSessionActivityResult>() { Loading @@ -44,17 +48,17 @@ final class GameSessionActivityResult implements Parcelable { @Nullable private final Intent mData; GameSessionActivityResult(int resultCode, @Nullable Intent data) { public GameSessionActivityResult(int resultCode, @Nullable Intent data) { mResultCode = resultCode; mData = data; } int getResultCode() { public int getResultCode() { return mResultCode; } @Nullable Intent getData() { public Intent getData() { return mData; } Loading core/java/android/service/games/GameSessionTrampolineActivity.java +51 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,15 @@ package android.service.games; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.infra.AndroidFuture; import java.util.concurrent.Executor; Loading @@ -35,6 +38,7 @@ import java.util.concurrent.Executor; * * @hide */ @VisibleForTesting public final class GameSessionTrampolineActivity extends Activity { private static final String TAG = "GameSessionTrampoline"; private static final int REQUEST_CODE = 1; Loading @@ -42,11 +46,52 @@ public final class GameSessionTrampolineActivity extends Activity { static final String FUTURE_KEY = "GameSessionTrampolineActivity.future"; static final String INTENT_KEY = "GameSessionTrampolineActivity.intent"; static final String OPTIONS_KEY = "GameSessionTrampolineActivity.options"; private static final String HAS_LAUNCHED_INTENT_KEY = "GameSessionTrampolineActivity.hasLaunchedIntent"; private boolean mHasLaunchedIntent = false; /** * Create an {@link Intent} for the {@link GameSessionTrampolineActivity} with the given * parameters. * * @param targetIntent the forwarded {@link Intent} that is associated with the Activity that * will be launched by the {@link GameSessionTrampolineActivity}. * @param options Activity options. See {@link #startActivity(Intent, Bundle)}. * @param resultFuture the {@link AndroidFuture} that will complete with the activity results of * {@code targetIntent} launched. * @return the Intent that will launch the {@link GameSessionTrampolineActivity} with the given * parameters. * @hide */ @VisibleForTesting public static Intent createIntent( @NonNull Intent targetIntent, @Nullable Bundle options, @NonNull AndroidFuture<GameSessionActivityResult> resultFuture) { final Intent trampolineIntent = new Intent(); trampolineIntent.setComponent( new ComponentName( "android", "android.service.games.GameSessionTrampolineActivity")); trampolineIntent.putExtra(INTENT_KEY, targetIntent); trampolineIntent.putExtra(OPTIONS_KEY, options); trampolineIntent.putExtra(FUTURE_KEY, resultFuture); return trampolineIntent; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mHasLaunchedIntent = savedInstanceState.getBoolean(HAS_LAUNCHED_INTENT_KEY); } if (mHasLaunchedIntent) { return; } mHasLaunchedIntent = true; try { startActivityAsCaller( getIntent().getParcelableExtra(INTENT_KEY), Loading @@ -63,6 +108,12 @@ public final class GameSessionTrampolineActivity extends Activity { } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(HAS_LAUNCHED_INTENT_KEY, mHasLaunchedIntent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode != REQUEST_CODE) { Loading services/tests/mockingservicestests/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ android_test { static_libs: [ "androidx.test.core", "androidx.test.runner", "androidx.test.espresso.core", "androidx.test.espresso.contrib", "androidx.test.ext.truth", "frameworks-base-testutils", "hamcrest-library", Loading services/tests/mockingservicestests/AndroidManifest.xml +4 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ <uses-permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/> <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> <uses-permission android:name="android.permission.MANAGE_GAME_ACTIVITY" /> <uses-permission android:name="android.permission.SET_ALWAYS_FINISH" /> <!-- needed by MasterClearReceiverTest to display a system dialog --> <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/> Loading @@ -39,6 +41,8 @@ <application android:testOnly="true" android:debuggable="true"> <uses-library android:name="android.test.runner" /> <activity android:name="android.service.games.GameSessionTrampolineActivityTest$TestActivity" /> </application> <instrumentation Loading Loading
core/java/android/service/games/GameSession.java +5 −9 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.app.ActivityTaskManager; import android.app.Instrumentation; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; Loading Loading @@ -511,14 +510,11 @@ public abstract class GameSession { callback.onActivityResult(result.getResultCode(), result.getData()); }, executor); final Intent trampolineIntent = new Intent(); trampolineIntent.setComponent( new ComponentName( "android", "android.service.games.GameSessionTrampolineActivity")); trampolineIntent.putExtra(GameSessionTrampolineActivity.INTENT_KEY, intent); trampolineIntent.putExtra(GameSessionTrampolineActivity.OPTIONS_KEY, options); trampolineIntent.putExtra( GameSessionTrampolineActivity.FUTURE_KEY, future); final Intent trampolineIntent = GameSessionTrampolineActivity.createIntent( intent, options, future); try { int result = ActivityTaskManager.getService().startActivityFromGameSession( Loading
core/java/android/service/games/GameSessionActivityResult.java +8 −4 Original line number Diff line number Diff line Loading @@ -22,8 +22,12 @@ import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; import com.android.internal.annotations.VisibleForTesting; final class GameSessionActivityResult implements Parcelable { /** @hide */ @VisibleForTesting public final class GameSessionActivityResult implements Parcelable { public static final Creator<GameSessionActivityResult> CREATOR = new Creator<GameSessionActivityResult>() { Loading @@ -44,17 +48,17 @@ final class GameSessionActivityResult implements Parcelable { @Nullable private final Intent mData; GameSessionActivityResult(int resultCode, @Nullable Intent data) { public GameSessionActivityResult(int resultCode, @Nullable Intent data) { mResultCode = resultCode; mData = data; } int getResultCode() { public int getResultCode() { return mResultCode; } @Nullable Intent getData() { public Intent getData() { return mData; } Loading
core/java/android/service/games/GameSessionTrampolineActivity.java +51 −0 Original line number Diff line number Diff line Loading @@ -16,12 +16,15 @@ package android.service.games; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.infra.AndroidFuture; import java.util.concurrent.Executor; Loading @@ -35,6 +38,7 @@ import java.util.concurrent.Executor; * * @hide */ @VisibleForTesting public final class GameSessionTrampolineActivity extends Activity { private static final String TAG = "GameSessionTrampoline"; private static final int REQUEST_CODE = 1; Loading @@ -42,11 +46,52 @@ public final class GameSessionTrampolineActivity extends Activity { static final String FUTURE_KEY = "GameSessionTrampolineActivity.future"; static final String INTENT_KEY = "GameSessionTrampolineActivity.intent"; static final String OPTIONS_KEY = "GameSessionTrampolineActivity.options"; private static final String HAS_LAUNCHED_INTENT_KEY = "GameSessionTrampolineActivity.hasLaunchedIntent"; private boolean mHasLaunchedIntent = false; /** * Create an {@link Intent} for the {@link GameSessionTrampolineActivity} with the given * parameters. * * @param targetIntent the forwarded {@link Intent} that is associated with the Activity that * will be launched by the {@link GameSessionTrampolineActivity}. * @param options Activity options. See {@link #startActivity(Intent, Bundle)}. * @param resultFuture the {@link AndroidFuture} that will complete with the activity results of * {@code targetIntent} launched. * @return the Intent that will launch the {@link GameSessionTrampolineActivity} with the given * parameters. * @hide */ @VisibleForTesting public static Intent createIntent( @NonNull Intent targetIntent, @Nullable Bundle options, @NonNull AndroidFuture<GameSessionActivityResult> resultFuture) { final Intent trampolineIntent = new Intent(); trampolineIntent.setComponent( new ComponentName( "android", "android.service.games.GameSessionTrampolineActivity")); trampolineIntent.putExtra(INTENT_KEY, targetIntent); trampolineIntent.putExtra(OPTIONS_KEY, options); trampolineIntent.putExtra(FUTURE_KEY, resultFuture); return trampolineIntent; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mHasLaunchedIntent = savedInstanceState.getBoolean(HAS_LAUNCHED_INTENT_KEY); } if (mHasLaunchedIntent) { return; } mHasLaunchedIntent = true; try { startActivityAsCaller( getIntent().getParcelableExtra(INTENT_KEY), Loading @@ -63,6 +108,12 @@ public final class GameSessionTrampolineActivity extends Activity { } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(HAS_LAUNCHED_INTENT_KEY, mHasLaunchedIntent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode != REQUEST_CODE) { Loading
services/tests/mockingservicestests/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ android_test { static_libs: [ "androidx.test.core", "androidx.test.runner", "androidx.test.espresso.core", "androidx.test.espresso.contrib", "androidx.test.ext.truth", "frameworks-base-testutils", "hamcrest-library", Loading
services/tests/mockingservicestests/AndroidManifest.xml +4 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ <uses-permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/> <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" /> <uses-permission android:name="android.permission.MANAGE_GAME_ACTIVITY" /> <uses-permission android:name="android.permission.SET_ALWAYS_FINISH" /> <!-- needed by MasterClearReceiverTest to display a system dialog --> <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/> Loading @@ -39,6 +41,8 @@ <application android:testOnly="true" android:debuggable="true"> <uses-library android:name="android.test.runner" /> <activity android:name="android.service.games.GameSessionTrampolineActivityTest$TestActivity" /> </application> <instrumentation Loading