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

Commit 3c4b8d97 authored by Tim Van Patten's avatar Tim Van Patten Committed by Android (Google) Code Review
Browse files

Merge "GameManager: Add Public API" into sc-dev

parents 6a616607 7f2f873b
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -5312,6 +5312,14 @@ package android.app {
    field @Deprecated public static final int TRANSIT_UNSET = -1; // 0xffffffff
  }
  public final class GameManager {
    method public int getGameMode();
    field public static final int GAME_MODE_BATTERY = 3; // 0x3
    field public static final int GAME_MODE_PERFORMANCE = 2; // 0x2
    field public static final int GAME_MODE_STANDARD = 1; // 0x1
    field public static final int GAME_MODE_UNSUPPORTED = 0; // 0x0
  }
  public class Instrumentation {
    ctor public Instrumentation();
    method public android.os.TestLooperManager acquireLooperManager(android.os.Looper);
@@ -10487,6 +10495,7 @@ package android.content {
    field public static final String EUICC_SERVICE = "euicc";
    field public static final String FILE_INTEGRITY_SERVICE = "file_integrity";
    field public static final String FINGERPRINT_SERVICE = "fingerprint";
    field public static final String GAME_SERVICE = "game";
    field public static final String HARDWARE_PROPERTIES_SERVICE = "hardware_properties";
    field public static final String INPUT_METHOD_SERVICE = "input_method";
    field public static final String INPUT_SERVICE = "input";
+4 −0
Original line number Diff line number Diff line
@@ -259,6 +259,10 @@ package android.app {
    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void stopDream();
  }

  public final class GameManager {
    method @RequiresPermission("android.permission.MANAGE_GAME_MODE") public void setGameMode(@NonNull String, int);
  }

  public abstract class HomeVisibilityListener {
    ctor public HomeVisibilityListener();
    method public abstract void onHomeVisibilityChanged(boolean);
+54 −16
Original line number Diff line number Diff line
@@ -18,8 +18,11 @@ package android.app;

import android.Manifest;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.annotation.UserHandleAware;
import android.content.Context;
import android.os.Handler;
@@ -27,25 +30,21 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;

import com.android.internal.annotations.VisibleForTesting;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * The GameManager allows system apps to modify and query the game mode of apps.
 *
 * @hide
 */
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
@SystemService(Context.GAME_SERVICE)
public final class GameManager {

    private static final String TAG = "GameManager";

    private final Context mContext;
    private final @Nullable Context mContext;
    private final IGameManagerService mService;

    /** @hide */
    @IntDef(flag = false, prefix = {"GAME_MODE_"}, value = {
            GAME_MODE_UNSUPPORTED, // 0
            GAME_MODE_STANDARD, // 1
@@ -53,31 +52,65 @@ public final class GameManager {
            GAME_MODE_BATTERY, // 3
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface GameMode {}
    public @interface GameMode {
    }

    /**
     * Game mode is not supported for this application.
     */
    public static final int GAME_MODE_UNSUPPORTED = 0;

    /**
     * Standard game mode means the platform will use the game's default
     * performance characteristics.
     */
    public static final int GAME_MODE_STANDARD = 1;

    /**
     * Performance game mode maximizes the game's performance.
     * <p>
     * This game mode is highly likely to increase battery consumption.
     */
    public static final int GAME_MODE_PERFORMANCE = 2;

    /**
     * Battery game mode will save battery and give longer game play time.
     */
    public static final int GAME_MODE_BATTERY = 3;

    public GameManager(Context context, Handler handler) throws ServiceNotFoundException {
    GameManager(Context context, Handler handler) throws ServiceNotFoundException {
        mContext = context;
        mService = IGameManagerService.Stub.asInterface(
                ServiceManager.getServiceOrThrow(Context.GAME_SERVICE));
    }

    @VisibleForTesting
    public GameManager(Context context, IGameManagerService gameManagerService) {
        mContext = context;
        mService = gameManagerService;
    /**
     * Return the user selected game mode for this application.
     * <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 an
     * application is not a game, always return {@link #GAME_MODE_UNSUPPORTED}.
     * <p>
     * Developers should call this API every time the application is resumed.
     */
    public @GameMode int getGameMode() {
        try {
            return mService.getGameMode(mContext.getPackageName(), mContext.getUserId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Returns the game mode for the given package.
     * Gets the game mode for the given package.
     * <p>
     * The caller must have {@link android.Manifest.permission#MANAGE_GAME_MODE}.
     *
     * @hide
     */
    @UserHandleAware
    @RequiresPermission(Manifest.permission.MANAGE_GAME_MODE)
    public @GameMode int getGameMode(String packageName) {
    public @GameMode int getGameMode(@NonNull String packageName) {
        try {
            return mService.getGameMode(packageName, mContext.getUserId());
        } catch (RemoteException e) {
@@ -87,10 +120,15 @@ public final class GameManager {

    /**
     * Sets the game mode for the given package.
     * <p>
     * The caller must have {@link android.Manifest.permission#MANAGE_GAME_MODE}.
     *
     * @hide
     */
    @TestApi
    @UserHandleAware
    @RequiresPermission(Manifest.permission.MANAGE_GAME_MODE)
    public void setGameMode(String packageName, @GameMode int gameMode) {
    public void setGameMode(@NonNull String packageName, @GameMode int gameMode) {
        try {
            mService.setGameMode(packageName, gameMode, mContext.getUserId());
        } catch (RemoteException e) {
+28 −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;

/**
 * Interface used to control Game Manager modes.
 * @hide
 */
interface IGameManager {
    /**
     * Return the current Game Mode for the calling package.
     */
    int getGameMode();
}
+0 −2
Original line number Diff line number Diff line
@@ -5523,8 +5523,6 @@ public abstract class Context {
     * {@link GameManager}.
     *
     * @see #getSystemService(String)
     *
     * @hide
     */
    public static final String GAME_SERVICE = "game";

Loading