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

Commit fc93c074 authored by Ahmed Hassan's avatar Ahmed Hassan Committed by Automerger Merge Worker
Browse files

Merge "Add ADB commands to control ambient display" am: df2c30b4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12848102

Change-Id: I8f7027a082adad394292bc03786d3ece54939f3d
parents 06082590 df2c30b4
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -29,7 +29,9 @@ import android.util.Slog;
import com.android.internal.statusbar.IStatusBarService;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
@@ -72,6 +74,24 @@ public class AmbientDisplaySuppressionController {
        }
    }

    /**
     * Returns the tokens used to suppress ambient display through
     * {@link #suppress(String, int, boolean)}.
     *
     * @param callingUid The uid of the calling application.
     */
    List<String> getSuppressionTokens(int callingUid) {
        List<String> result = new ArrayList<>();
        synchronized (mSuppressionTokens) {
            for (Pair<String, Integer> token : mSuppressionTokens) {
                if (token.second == callingUid) {
                    result.add(token.first);
                }
            }
        }
        return result;
    }

    /**
     * Returns whether ambient display is suppressed for the given token.
     *
+16 −0
Original line number Diff line number Diff line
@@ -5500,6 +5500,22 @@ public final class PowerManagerService extends SystemService
                Binder.restoreCallingIdentity(ident);
            }
        }

        /**
         * Returns the tokens used to suppress ambient display by the calling app.
         *
         * <p>The calling app suppressed ambient display by calling
         * {@link #suppressAmbientDisplay(String, boolean)}.
         */
        public List<String> getAmbientDisplaySuppressionTokens() {
            final int uid = Binder.getCallingUid();
            final long ident = Binder.clearCallingIdentity();
            try {
                return mAmbientDisplaySuppressionController.getSuppressionTokens(uid);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }

    @VisibleForTesting
+42 −7
Original line number Diff line number Diff line
@@ -17,20 +17,20 @@
package com.android.server.power;

import android.content.Intent;
import android.os.IPowerManager;
import android.os.PowerManagerInternal;
import android.os.RemoteException;
import android.os.ShellCommand;

import java.io.PrintWriter;
import java.util.List;

class PowerManagerShellCommand extends ShellCommand {
    private static final int LOW_POWER_MODE_ON = 1;

    final IPowerManager mInterface;
    final PowerManagerService.BinderService mService;

    PowerManagerShellCommand(IPowerManager service) {
        mInterface = service;
    PowerManagerShellCommand(PowerManagerService.BinderService service) {
        mService = service;
    }

    @Override
@@ -48,6 +48,10 @@ class PowerManagerShellCommand extends ShellCommand {
                    return runSetMode();
                case "set-fixed-performance-mode-enabled":
                    return runSetFixedPerformanceModeEnabled();
                case "suppress-ambient-display":
                    return runSuppressAmbientDisplay();
                case "list-ambient-display-suppression-tokens":
                    return runListAmbientDisplaySuppressionTokens();
                default:
                    return handleDefaultCommands(cmd);
            }
@@ -58,7 +62,7 @@ class PowerManagerShellCommand extends ShellCommand {
    }

    private int runSetAdaptiveEnabled() throws RemoteException {
        mInterface.setAdaptivePowerSaveEnabled(Boolean.parseBoolean(getNextArgRequired()));
        mService.setAdaptivePowerSaveEnabled(Boolean.parseBoolean(getNextArgRequired()));
        return 0;
    }

@@ -71,12 +75,12 @@ class PowerManagerShellCommand extends ShellCommand {
            pw.println("Error: " + ex.toString());
            return -1;
        }
        mInterface.setPowerSaveModeEnabled(mode == LOW_POWER_MODE_ON);
        mService.setPowerSaveModeEnabled(mode == LOW_POWER_MODE_ON);
        return 0;
    }

    private int runSetFixedPerformanceModeEnabled() throws RemoteException {
        boolean success = mInterface.setPowerModeChecked(
        boolean success = mService.setPowerModeChecked(
                PowerManagerInternal.MODE_FIXED_PERFORMANCE,
                Boolean.parseBoolean(getNextArgRequired()));
        if (!success) {
@@ -87,6 +91,32 @@ class PowerManagerShellCommand extends ShellCommand {
        return success ? 0 : -1;
    }

    private int runSuppressAmbientDisplay() throws RemoteException {
        final PrintWriter pw = getOutPrintWriter();

        try {
            String token = getNextArgRequired();
            boolean enabled = Boolean.parseBoolean(getNextArgRequired());
            mService.suppressAmbientDisplay(token, enabled);
        } catch (RuntimeException ex) {
            pw.println("Error: " + ex.toString());
            return -1;
        }

        return 0;
    }

    private int runListAmbientDisplaySuppressionTokens() throws RemoteException {
        final PrintWriter pw = getOutPrintWriter();
        List<String> tokens = mService.getAmbientDisplaySuppressionTokens();
        if (tokens.isEmpty()) {
            pw.println("none");
        } else {
            pw.println(String.format("[%s]", String.join(", ", tokens)));
        }

        return 0;
    }
    @Override
    public void onHelp() {
        final PrintWriter pw = getOutPrintWriter();
@@ -103,6 +133,11 @@ class PowerManagerShellCommand extends ShellCommand {
        pw.println("    enables or disables fixed performance mode");
        pw.println("    note: this will affect system performance and should only be used");
        pw.println("          during development");
        pw.println("  suppress-ambient-display <token> [true|false]");
        pw.println("    suppresses the current ambient display configuration and disables");
        pw.println("    ambient display");
        pw.println("  list-ambient-display-suppression-tokens");
        pw.println("    prints the tokens used to suppress ambient display");
        pw.println();
        Intent.printIntentArgsHelp(pw , "");
    }
+29 −0
Original line number Diff line number Diff line
@@ -1052,6 +1052,35 @@ public class PowerManagerServiceTest {
            .isFalse();
    }

    @Test
    public void testGetAmbientDisplaySuppressionTokens_default() {
        createService();
        BinderService service = mService.getBinderServiceInstance();

        assertThat(service.getAmbientDisplaySuppressionTokens()).isEmpty();
    }

    @Test
    public void testGetAmbientDisplaySuppressionTokens_singleToken() {
        createService();
        BinderService service = mService.getBinderServiceInstance();
        service.suppressAmbientDisplay("test1", true);
        service.suppressAmbientDisplay("test2", false);

        assertThat(service.getAmbientDisplaySuppressionTokens()).containsExactly("test1");
    }

    @Test
    public void testGetAmbientDisplaySuppressionTokens_multipleTokens() {
        createService();
        BinderService service = mService.getBinderServiceInstance();
        service.suppressAmbientDisplay("test1", true);
        service.suppressAmbientDisplay("test2", true);

        assertThat(service.getAmbientDisplaySuppressionTokens())
                .containsExactly("test1", "test2");
    }

    @Test
    public void testSetPowerBoost_redirectsCallToNativeWrapper() {
        createService();