summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/GameManager.java25
-rw-r--r--core/java/android/app/GameModeInfo.aidl22
-rw-r--r--core/java/android/app/GameModeInfo.java101
-rw-r--r--core/java/android/app/IGameManagerService.aidl4
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);
+}