Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76dfa05d authored by Peiyong Lin's avatar Peiyong Lin Committed by Android (Google) Code Review
Browse files

Merge "Implement getGameModeInfo API."

parents c89a869c c7f625ff
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ package android {
    field public static final String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING";
    field public static final String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
    field public static final String MANAGE_FACTORY_RESET_PROTECTION = "android.permission.MANAGE_FACTORY_RESET_PROTECTION";
    field public static final String MANAGE_GAME_MODE = "android.permission.MANAGE_GAME_MODE";
    field public static final String MANAGE_HOTWORD_DETECTION = "android.permission.MANAGE_HOTWORD_DETECTION";
    field public static final String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS";
    field public static final String MANAGE_MUSIC_RECOGNITION = "android.permission.MANAGE_MUSIC_RECOGNITION";
@@ -758,7 +759,17 @@ package android.app {
  }
  public final class GameManager {
    method @RequiresPermission("android.permission.MANAGE_GAME_MODE") public void setGameMode(@NonNull String, int);
    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_GAME_MODE) public android.app.GameModeInfo getGameModeInfo(@NonNull String);
    method @RequiresPermission(android.Manifest.permission.MANAGE_GAME_MODE) public void setGameMode(@NonNull String, int);
  }
  public final class GameModeInfo implements android.os.Parcelable {
    ctor public GameModeInfo(int, @NonNull int[]);
    method public int describeContents();
    method public int getActiveGameMode();
    method @NonNull public int[] getAvailableGameModes();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.GameModeInfo> CREATOR;
  }
  public abstract class InstantAppResolverService extends android.app.Service {
+25 −0
Original line number Diff line number Diff line
@@ -118,6 +118,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>
+22 −0
Original line number Diff line number Diff line
/*
 * 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
+101 −0
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -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);
    GameModeInfo getGameModeInfo(String packageName, int userId);
}
Loading