diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/GameManager.java | 25 | ||||
| -rw-r--r-- | core/java/android/app/GameModeInfo.aidl | 22 | ||||
| -rw-r--r-- | core/java/android/app/GameModeInfo.java | 101 | ||||
| -rw-r--r-- | core/java/android/app/IGameManagerService.aidl | 4 |
4 files changed, 151 insertions, 1 deletions
diff --git a/core/java/android/app/GameManager.java b/core/java/android/app/GameManager.java index 29e1b70097f2..76471d30eaf9 100644 --- a/core/java/android/app/GameManager.java +++ b/core/java/android/app/GameManager.java @@ -119,6 +119,31 @@ public final class GameManager { } /** + * Returns the {@link GameModeInfo} associated with the game associated with + * the given {@code packageName}. If the given package is not a game, {@code null} is + * always returned. + * <p> + * An application can use <code>android:isGame="true"</code> or + * <code>android:appCategory="game"</code> to indicate that the application is a game. + * If the manifest doesn't define a category, the category can also be + * provided by the installer via + * {@link android.content.pm.PackageManager#setApplicationCategoryHint(String, int)}. + * <p> + * + * @hide + */ + @SystemApi + @UserHandleAware + @RequiresPermission(Manifest.permission.MANAGE_GAME_MODE) + public @Nullable GameModeInfo getGameModeInfo(@NonNull String packageName) { + try { + return mService.getGameModeInfo(packageName, mContext.getUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Sets the game mode for the given package. * <p> * The caller must have {@link android.Manifest.permission#MANAGE_GAME_MODE}. diff --git a/core/java/android/app/GameModeInfo.aidl b/core/java/android/app/GameModeInfo.aidl new file mode 100644 index 000000000000..3b13201c5d1b --- /dev/null +++ b/core/java/android/app/GameModeInfo.aidl @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +/** + * @hide + */ +parcelable GameModeInfo;
\ No newline at end of file diff --git a/core/java/android/app/GameModeInfo.java b/core/java/android/app/GameModeInfo.java new file mode 100644 index 000000000000..fe0ac352404d --- /dev/null +++ b/core/java/android/app/GameModeInfo.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app; + +import android.annotation.NonNull; +import android.annotation.SystemApi; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * GameModeInfo returned from {@link GameManager#getGameModeInfo(String)}. + * @hide + */ +@SystemApi +public final class GameModeInfo implements Parcelable { + + public static final @NonNull Creator<GameModeInfo> CREATOR = new Creator<GameModeInfo>() { + @Override + public GameModeInfo createFromParcel(Parcel in) { + return new GameModeInfo(in); + } + + @Override + public GameModeInfo[] newArray(int size) { + return new GameModeInfo[size]; + } + }; + + public GameModeInfo(@GameManager.GameMode int activeGameMode, + @NonNull @GameManager.GameMode int[] availableGameModes) { + mActiveGameMode = activeGameMode; + mAvailableGameModes = availableGameModes; + } + + GameModeInfo(Parcel in) { + mActiveGameMode = in.readInt(); + final int availableGameModesCount = in.readInt(); + mAvailableGameModes = new int[availableGameModesCount]; + in.readIntArray(mAvailableGameModes); + } + + /** + * Returns the {@link GameManager.GameMode} the application is currently using. + * Developers can enable game modes by adding + * <code> + * <meta-data android:name="android.game_mode_intervention" + * android:resource="@xml/GAME_MODE_CONFIG_FILE" /> + * </code> + * to the {@link <application> tag}, where the GAME_MODE_CONFIG_FILE is an XML file that + * specifies the game mode enablement and configuration: + * <code> + * <game-mode-config xmlns:android="http://schemas.android.com/apk/res/android" + * android:gameModePerformance="true" + * android:gameModeBattery="false" + * /> + * </code> + */ + public @GameManager.GameMode int getActiveGameMode() { + return mActiveGameMode; + } + + /** + * The collection of {@link GameManager.GameMode GameModes} that can be applied to the game. + */ + @NonNull + public @GameManager.GameMode int[] getAvailableGameModes() { + return mAvailableGameModes; + } + + // Ideally there should be callback that the caller can register to know when the available + // GameMode and/or the active GameMode is changed, however, there's no concrete use case + // at the moment so there's no callback mechanism introduced . + private final @GameManager.GameMode int[] mAvailableGameModes; + private final @GameManager.GameMode int mActiveGameMode; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeInt(mActiveGameMode); + dest.writeInt(mAvailableGameModes.length); + dest.writeIntArray(mAvailableGameModes); + } +} diff --git a/core/java/android/app/IGameManagerService.aidl b/core/java/android/app/IGameManagerService.aidl index d9aa586c6bbb..57de8c70e742 100644 --- a/core/java/android/app/IGameManagerService.aidl +++ b/core/java/android/app/IGameManagerService.aidl @@ -16,6 +16,7 @@ package android.app; +import android.app.GameModeInfo; import android.app.GameState; /** @@ -27,4 +28,5 @@ interface IGameManagerService { int[] getAvailableGameModes(String packageName); boolean getAngleEnabled(String packageName, int userId); void setGameState(String packageName, in GameState gameState, int userId); -}
\ No newline at end of file + GameModeInfo getGameModeInfo(String packageName, int userId); +} |
