diff options
12 files changed, 168 insertions, 57 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 169346b973eb..fa286c27b2f9 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -38,6 +38,7 @@ package android { field public static final String RESET_APP_ERRORS = "android.permission.RESET_APP_ERRORS"; field public static final String REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL = "android.permission.REVOKE_POST_NOTIFICATIONS_WITHOUT_KILL"; field public static final String SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS = "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS"; + field public static final String SET_GAME_SERVICE = "android.permission.SET_GAME_SERVICE"; field public static final String SET_KEYBOARD_LAYOUT = "android.permission.SET_KEYBOARD_LAYOUT"; field public static final String START_TASKS_FROM_RECENTS = "android.permission.START_TASKS_FROM_RECENTS"; field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS"; @@ -274,6 +275,10 @@ package android.app { method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void stopDream(); } + public final class GameManager { + method public void setGameServiceProvider(@Nullable String); + } + public abstract class HomeVisibilityListener { ctor public HomeVisibilityListener(); method public abstract void onHomeVisibilityChanged(boolean); diff --git a/core/java/android/app/GameManager.java b/core/java/android/app/GameManager.java index 76471d30eaf9..289b3486b7fe 100644 --- a/core/java/android/app/GameManager.java +++ b/core/java/android/app/GameManager.java @@ -23,6 +23,7 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; +import android.annotation.TestApi; import android.annotation.UserHandleAware; import android.content.Context; import android.os.Handler; @@ -204,4 +205,20 @@ public final class GameManager { throw e.rethrowFromSystemServer(); } } + + + /** + * Sets the game service provider to the given package name for test only. + * + * <p>Passing in {@code null} will clear a previously set value. + * @hide + */ + @TestApi + public void setGameServiceProvider(@Nullable String packageName) { + try { + mService.setGameServiceProvider(packageName); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } } diff --git a/core/java/android/app/IGameManagerService.aidl b/core/java/android/app/IGameManagerService.aidl index 57de8c70e742..3ea0767661bb 100644 --- a/core/java/android/app/IGameManagerService.aidl +++ b/core/java/android/app/IGameManagerService.aidl @@ -29,4 +29,5 @@ interface IGameManagerService { boolean getAngleEnabled(String packageName, int userId); void setGameState(String packageName, in GameState gameState, int userId); GameModeInfo getGameModeInfo(String packageName, int userId); + void setGameServiceProvider(String packageName); } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index c62d964cd518..01f0f3906054 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -6131,6 +6131,11 @@ <permission android:name="android.permission.MANAGE_GAME_MODE" android:protectionLevel="signature|privileged" /> + <!-- @TestApi Allows setting the game service provider, meant for tests only. + @hide --> + <permission android:name="android.permission.SET_GAME_SERVICE" + android:protectionLevel="signature" /> + <!-- @SystemApi Allows accessing the frame rate per second of a given application @hide --> <permission android:name="android.permission.ACCESS_FPS_COUNTER" diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index c6fbfd8780b8..c7429ff957f1 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -557,6 +557,9 @@ <!-- Permission required for CTS test - CtsGameManagerTestCases --> <uses-permission android:name="android.permission.MANAGE_GAME_MODE" /> + <!-- Permission required for CTS test - CtsGameServiceTestCases --> + <uses-permission android:name="android.permission.SET_GAME_SERVICE" /> + <!-- Permission required for CTS test - ClipboardManagerTest --> <uses-permission android:name="android.permission.SET_CLIP_SOURCE" /> diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java index 417ebcdbcef2..f1429a567564 100644 --- a/services/core/java/com/android/server/app/GameManagerService.java +++ b/services/core/java/com/android/server/app/GameManagerService.java @@ -83,7 +83,6 @@ import com.android.server.LocalServices; import com.android.server.ServiceThread; import com.android.server.SystemService; import com.android.server.SystemService.TargetUser; -import com.android.server.app.GameManagerService.GamePackageConfiguration.GameModeConfiguration; import java.io.FileDescriptor; import java.util.List; @@ -128,6 +127,8 @@ public final class GameManagerService extends IGameManagerService.Stub { private final ArrayMap<String, GamePackageConfiguration> mConfigs = new ArrayMap<>(); @GuardedBy("mOverrideConfigLock") private final ArrayMap<String, GamePackageConfiguration> mOverrideConfigs = new ArrayMap<>(); + @Nullable + private final GameServiceController mGameServiceController; public GameManagerService(Context context) { this(context, createServiceThread().getLooper()); @@ -140,6 +141,16 @@ public final class GameManagerService extends IGameManagerService.Stub { mPlatformCompat = IPlatformCompat.Stub.asInterface( ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE)); mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class); + if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_GAME_SERVICE)) { + mGameServiceController = new GameServiceController( + BackgroundThread.getExecutor(), + new GameServiceProviderSelectorImpl( + context.getResources(), + context.getPackageManager()), + new GameServiceProviderInstanceFactoryImpl(context)); + } else { + mGameServiceController = null; + } } @Override @@ -610,8 +621,6 @@ public final class GameManagerService extends IGameManagerService.Stub { */ public static class Lifecycle extends SystemService { private GameManagerService mService; - @Nullable - private GameServiceController mGameServiceController; public Lifecycle(Context context) { super(context); @@ -624,57 +633,33 @@ public final class GameManagerService extends IGameManagerService.Stub { publishBinderService(Context.GAME_SERVICE, mService); mService.registerDeviceConfigListener(); mService.registerPackageReceiver(); - - if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_GAME_SERVICE)) { - mGameServiceController = new GameServiceController( - BackgroundThread.getExecutor(), - new GameServiceProviderSelectorImpl( - getContext().getResources(), - getContext().getPackageManager()), - new GameServiceProviderInstanceFactoryImpl(getContext())); - } } @Override public void onBootPhase(int phase) { if (phase == PHASE_BOOT_COMPLETED) { mService.onBootCompleted(); - if (mGameServiceController != null) { - mGameServiceController.onBootComplete(); - } } } @Override public void onUserStarting(@NonNull TargetUser user) { - mService.onUserStarting(user.getUserIdentifier()); - if (mGameServiceController != null) { - mGameServiceController.notifyUserStarted(user); - } + mService.onUserStarting(user); } @Override public void onUserUnlocking(@NonNull TargetUser user) { - super.onUserUnlocking(user); - if (mGameServiceController != null) { - mGameServiceController.notifyUserUnlocking(user); - } + mService.onUserUnlocking(user); } @Override public void onUserStopping(@NonNull TargetUser user) { - mService.onUserStopping(user.getUserIdentifier()); - if (mGameServiceController != null) { - mGameServiceController.notifyUserStopped(user); - } + mService.onUserStopping(user); } @Override public void onUserSwitching(@Nullable TargetUser from, @NonNull TargetUser to) { - mService.onUserSwitching(from, to.getUserIdentifier()); - if (mGameServiceController != null) { - mGameServiceController.notifyNewForegroundUser(to); - } + mService.onUserSwitching(from, to); } } @@ -868,14 +853,38 @@ public final class GameManagerService extends IGameManagerService.Stub { } /** + * Sets the game service provider to a given package, meant for testing. + * + * <p>This setting persists until the next call or until the next reboot. + * + * <p>Checks that the caller has {@link android.Manifest.permission#SET_GAME_SERVICE}. + */ + @Override + @RequiresPermission(Manifest.permission.SET_GAME_SERVICE) + public void setGameServiceProvider(@Nullable String packageName) throws SecurityException { + checkPermission(Manifest.permission.SET_GAME_SERVICE); + + if (mGameServiceController == null) { + return; + } + + mGameServiceController.setGameServiceProvider(packageName); + } + + /** * Notified when boot is completed. */ @VisibleForTesting void onBootCompleted() { Slog.d(TAG, "onBootCompleted"); + if (mGameServiceController != null) { + mGameServiceController.onBootComplete(); + } } - void onUserStarting(int userId) { + void onUserStarting(@NonNull TargetUser user) { + final int userId = user.getUserIdentifier(); + synchronized (mLock) { if (!mSettings.containsKey(userId)) { GameManagerSettings userSettings = @@ -887,9 +896,21 @@ public final class GameManagerService extends IGameManagerService.Stub { final Message msg = mHandler.obtainMessage(POPULATE_GAME_MODE_SETTINGS); msg.obj = userId; mHandler.sendMessage(msg); + + if (mGameServiceController != null) { + mGameServiceController.notifyUserStarted(user); + } } - void onUserStopping(int userId) { + void onUserUnlocking(@NonNull TargetUser user) { + if (mGameServiceController != null) { + mGameServiceController.notifyUserUnlocking(user); + } + } + + void onUserStopping(TargetUser user) { + final int userId = user.getUserIdentifier(); + synchronized (mLock) { if (!mSettings.containsKey(userId)) { return; @@ -898,9 +919,14 @@ public final class GameManagerService extends IGameManagerService.Stub { msg.obj = userId; mHandler.sendMessage(msg); } + + if (mGameServiceController != null) { + mGameServiceController.notifyUserStopped(user); + } } - void onUserSwitching(TargetUser from, int toUserId) { + void onUserSwitching(TargetUser from, TargetUser to) { + final int toUserId = to.getUserIdentifier(); if (from != null) { synchronized (mLock) { final int fromUserId = from.getUserIdentifier(); @@ -914,6 +940,10 @@ public final class GameManagerService extends IGameManagerService.Stub { final Message msg = mHandler.obtainMessage(POPULATE_GAME_MODE_SETTINGS); msg.obj = toUserId; mHandler.sendMessage(msg); + + if (mGameServiceController != null) { + mGameServiceController.notifyNewForegroundUser(to); + } } /** diff --git a/services/core/java/com/android/server/app/GameServiceController.java b/services/core/java/com/android/server/app/GameServiceController.java index ac720b9c2971..397439a356f8 100644 --- a/services/core/java/com/android/server/app/GameServiceController.java +++ b/services/core/java/com/android/server/app/GameServiceController.java @@ -44,6 +44,8 @@ final class GameServiceController { private volatile boolean mHasBootCompleted; @Nullable + private volatile String mGameServiceProviderOverride; + @Nullable private volatile SystemService.TargetUser mCurrentForegroundUser; @GuardedBy("mLock") @Nullable @@ -108,6 +110,16 @@ final class GameServiceController { setCurrentForegroundUserAndEvaluateProvider(null); } + void setGameServiceProvider(@Nullable String packageName) { + boolean hasPackageChanged = !Objects.equals(mGameServiceProviderOverride, packageName); + if (!hasPackageChanged) { + return; + } + mGameServiceProviderOverride = packageName; + + mBackgroundExecutor.execute(this::evaluateActiveGameServiceProvider); + } + private void setCurrentForegroundUserAndEvaluateProvider( @Nullable SystemService.TargetUser user) { boolean hasUserChanged = @@ -128,7 +140,8 @@ final class GameServiceController { synchronized (mLock) { GameServiceProviderConfiguration selectedGameServiceProviderConfiguration = - mGameServiceProviderSelector.get(mCurrentForegroundUser); + mGameServiceProviderSelector.get(mCurrentForegroundUser, + mGameServiceProviderOverride); boolean didActiveGameServiceProviderChanged = !Objects.equals(selectedGameServiceProviderConfiguration, diff --git a/services/core/java/com/android/server/app/GameServiceProviderSelector.java b/services/core/java/com/android/server/app/GameServiceProviderSelector.java index 51d35157b332..0f55b9ff31f4 100644 --- a/services/core/java/com/android/server/app/GameServiceProviderSelector.java +++ b/services/core/java/com/android/server/app/GameServiceProviderSelector.java @@ -30,5 +30,6 @@ interface GameServiceProviderSelector { * Service provider for the given user or {@code null} if none should be used. */ @Nullable - GameServiceProviderConfiguration get(@Nullable SystemService.TargetUser user); + GameServiceProviderConfiguration get(@Nullable SystemService.TargetUser user, + @Nullable String packageNameOverride); } diff --git a/services/core/java/com/android/server/app/GameServiceProviderSelectorImpl.java b/services/core/java/com/android/server/app/GameServiceProviderSelectorImpl.java index 54ef70715b86..c1ad6685fbbb 100644 --- a/services/core/java/com/android/server/app/GameServiceProviderSelectorImpl.java +++ b/services/core/java/com/android/server/app/GameServiceProviderSelectorImpl.java @@ -57,7 +57,8 @@ final class GameServiceProviderSelectorImpl implements GameServiceProviderSelect @Override @Nullable - public GameServiceProviderConfiguration get(@Nullable SystemService.TargetUser user) { + public GameServiceProviderConfiguration get(@Nullable SystemService.TargetUser user, + @Nullable String packageNameOverride) { if (user == null) { return null; } @@ -68,9 +69,16 @@ final class GameServiceProviderSelectorImpl implements GameServiceProviderSelect return null; } - String gameServicePackage = - mResources.getString( - com.android.internal.R.string.config_systemGameService); + int resolveInfoQueryFlags; + String gameServicePackage; + if (!TextUtils.isEmpty(packageNameOverride)) { + resolveInfoQueryFlags = 0; + gameServicePackage = packageNameOverride; + } else { + resolveInfoQueryFlags = PackageManager.MATCH_SYSTEM_ONLY; + gameServicePackage = mResources.getString( + com.android.internal.R.string.config_systemGameService); + } if (TextUtils.isEmpty(gameServicePackage)) { Slog.w(TAG, "No game service package defined"); @@ -81,7 +89,7 @@ final class GameServiceProviderSelectorImpl implements GameServiceProviderSelect List<ResolveInfo> gameServiceResolveInfos = mPackageManager.queryIntentServicesAsUser( new Intent(GameService.ACTION_GAME_SERVICE).setPackage(gameServicePackage), - PackageManager.GET_META_DATA | PackageManager.MATCH_SYSTEM_ONLY, + PackageManager.GET_META_DATA | resolveInfoQueryFlags, userId); if (DEBUG) { Slog.i(TAG, "Querying package: " + gameServicePackage + " and user id: " + userId); diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java index 0198253e2586..eed2d4251cd7 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java @@ -35,6 +35,7 @@ import android.content.ContextWrapper; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.UserInfo; import android.os.Bundle; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -45,6 +46,8 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.server.SystemService; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -167,7 +170,8 @@ public class GameManagerServiceTests { } private void startUser(GameManagerService gameManagerService, int userId) { - gameManagerService.onUserStarting(userId); + UserInfo userInfo = new UserInfo(userId, "name", 0); + gameManagerService.onUserStarting(new SystemService.TargetUser(userInfo)); mTestLooper.dispatchAll(); } @@ -861,7 +865,7 @@ public class GameManagerServiceTests { public void testInterventionAllowAngleFalse() throws Exception { GameManagerService gameManagerService = new GameManagerService(mMockContext, mTestLooper.getLooper()); - gameManagerService.onUserStarting(USER_ID_1); + startUser(gameManagerService, USER_ID_1); mockDeviceConfigPerformanceEnableAngle(); mockInterventionAllowAngleFalse(); mockModifyGameModeGranted(); diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameServiceControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/app/GameServiceControllerTest.java index 0545fde3e921..1c480eef96a1 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameServiceControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameServiceControllerTest.java @@ -207,12 +207,12 @@ public final class GameServiceControllerTest { } private void seedNoConfigurationForUser(SystemService.TargetUser user) { - when(mMockGameServiceProviderSelector.get(user)).thenReturn(null); + when(mMockGameServiceProviderSelector.get(user, "")).thenReturn(null); } private FakeGameServiceProviderInstance seedConfigurationForUser(SystemService.TargetUser user, GameServiceProviderConfiguration configuration) { - when(mMockGameServiceProviderSelector.get(user)).thenReturn(configuration); + when(mMockGameServiceProviderSelector.get(user, "")).thenReturn(configuration); FakeGameServiceProviderInstance instanceForConfiguration = spy(new FakeGameServiceProviderInstance()); when(mMockGameServiceProviderInstanceFactory.create(configuration)) diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderSelectorImplTest.java b/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderSelectorImplTest.java index 59d0970f5934..23a6a49856f7 100644 --- a/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderSelectorImplTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderSelectorImplTest.java @@ -16,6 +16,7 @@ package com.android.server.app; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; import static com.google.common.truth.Truth.assertThat; @@ -25,7 +26,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -138,7 +138,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(null); + mGameServiceProviderSelector.get(null, null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -155,7 +155,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(managedTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(managedTargetUser(USER_HANDLE_10), null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -171,7 +171,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -187,7 +187,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -201,7 +201,7 @@ public final class GameServiceProviderSelectorImplTest { seedServiceServiceInfo(GAME_SESSION_SERVICE_COMPONENT); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -218,7 +218,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -234,7 +234,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_wrong_first_tag.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); assertThat(gameServiceProviderConfiguration).isNull(); } @@ -251,7 +251,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); GameServiceProviderConfiguration expectedGameServiceProviderConfiguration = new GameServiceProviderConfiguration(USER_HANDLE_10, @@ -277,7 +277,7 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); GameServiceProviderConfiguration expectedGameServiceProviderConfiguration = new GameServiceProviderConfiguration(USER_HANDLE_10, @@ -300,7 +300,31 @@ public final class GameServiceProviderSelectorImplTest { "res/xml/game_service_metadata_valid.xml"); GameServiceProviderConfiguration gameServiceProviderConfiguration = - mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10)); + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), null); + + GameServiceProviderConfiguration expectedGameServiceProviderConfiguration = + new GameServiceProviderConfiguration(USER_HANDLE_10, + GAME_SERVICE_COMPONENT, + GAME_SESSION_SERVICE_COMPONENT); + assertThat(gameServiceProviderConfiguration).isEqualTo( + expectedGameServiceProviderConfiguration); + } + + @Test + public void get_overridePresent_returnsDeviceConfigGameServiceProvider() + throws Exception { + seedSystemGameServicePackageName("other.package"); + + seedGameServiceResolveInfos(GAME_SERVICE_PACKAGE_NAME, USER_HANDLE_10, + resolveInfo(GAME_SERVICE_B_SERVICE_INFO), resolveInfo(GAME_SERVICE_SERVICE_INFO)); + seedServiceServiceInfo(GAME_SESSION_SERVICE_COMPONENT); + seedGameServiceMetaDataFromFile(GAME_SERVICE_PACKAGE_NAME, + GAME_SERVICE_META_DATA_RES_ID, + "res/xml/game_service_metadata_valid.xml"); + + GameServiceProviderConfiguration gameServiceProviderConfiguration = + mGameServiceProviderSelector.get(eligibleTargetUser(USER_HANDLE_10), + GAME_SERVICE_PACKAGE_NAME); GameServiceProviderConfiguration expectedGameServiceProviderConfiguration = new GameServiceProviderConfiguration(USER_HANDLE_10, @@ -324,7 +348,7 @@ public final class GameServiceProviderSelectorImplTest { argThat(intent -> intent != null && intent.getAction().equals( - GameService.ACTION_GAME_SERVICE) + GameService.ACTION_GAME_SERVICE) && intent.getPackage().equals(gameServicePackageName) ), anyInt(), |