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

Commit 29aa30e5 authored by Kenny Guy's avatar Kenny Guy
Browse files

Limit access to package names in brightness slider data.

Only allow access to package names if the calling package
has PACKAGE_USAGE_STATS.

Bug: 69405990
Test: runtest -c com.android.server.display.BrightnessTrackerTest frameworks-services
Change-Id: I1c924d408a7c74620b9aa9d672c99a6424bb85ca
parent 05013b37
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.os.Parcelable;

/**
 * Data about a brightness settings change.
 *
 * {@see DisplayManager.getBrightnessEvents()}
 * TODO make this SystemAPI
 * @hide
 */
@@ -31,7 +33,9 @@ public final class BrightnessChangeEvent implements Parcelable {
    /** Timestamp of the change {@see System.currentTimeMillis()} */
    public long timeStamp;

    /** Package name of focused activity when brightness was changed. */
    /** Package name of focused activity when brightness was changed.
     *  This will be null if the caller of {@see DisplayManager.getBrightnessEvents()}
     *  does not have access to usage stats {@see UsageStatsManager} */
    public String packageName;

    /** User id of of the user running when brightness was changed.
@@ -59,6 +63,20 @@ public final class BrightnessChangeEvent implements Parcelable {
    public BrightnessChangeEvent() {
    }

    /** @hide */
    public BrightnessChangeEvent(BrightnessChangeEvent other) {
        this.brightness = other.brightness;
        this.timeStamp = other.timeStamp;
        this.packageName = other.packageName;
        this.userId = other.userId;
        this.luxValues = other.luxValues;
        this.luxTimestamps = other.luxTimestamps;
        this.batteryLevel = other.batteryLevel;
        this.nightMode = other.nightMode;
        this.colorTemperature = other.colorTemperature;
        this.lastBrightness = other.lastBrightness;
    }

    private BrightnessChangeEvent(Parcel source) {
        brightness = source.readInt();
        timeStamp = source.readLong();
+4 −1
Original line number Diff line number Diff line
@@ -16,8 +16,10 @@

package android.hardware.display;

import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.app.KeyguardManager;
@@ -619,8 +621,9 @@ public final class DisplayManager {
     * Fetch {@link BrightnessChangeEvent}s.
     * @hide until we make it a system api.
     */
    @RequiresPermission(Manifest.permission.BRIGHTNESS_SLIDER_USAGE)
    public List<BrightnessChangeEvent> getBrightnessEvents() {
        return mGlobal.getBrightnessEvents();
        return mGlobal.getBrightnessEvents(mContext.getOpPackageName());
    }

    /**
+3 −2
Original line number Diff line number Diff line
@@ -462,9 +462,10 @@ public final class DisplayManagerGlobal {
    /**
     * Retrieves brightness change events.
     */
    public List<BrightnessChangeEvent> getBrightnessEvents() {
    public List<BrightnessChangeEvent> getBrightnessEvents(String callingPackage) {
        try {
            ParceledListSlice<BrightnessChangeEvent> events = mDm.getBrightnessEvents();
            ParceledListSlice<BrightnessChangeEvent> events =
                    mDm.getBrightnessEvents(callingPackage);
            if (events == null) {
                return Collections.emptyList();
            }
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ interface IDisplayManager {
    Point getStableDisplaySize();

    // Requires BRIGHTNESS_SLIDER_USAGE permission.
    ParceledListSlice getBrightnessEvents();
    ParceledListSlice getBrightnessEvents(String callingPackage);

    // STOPSHIP remove when adaptive brightness code is updated to accept curves.
    // Requires BRIGHTNESS_SLIDER_USAGE permission.
+9 −2
Original line number Diff line number Diff line
@@ -196,9 +196,10 @@ public class BrightnessTracker {

    /**
     * @param userId userId to fetch data for.
     * @param includePackage if false we will null out BrightnessChangeEvent.packageName
     * @return List of recent {@link BrightnessChangeEvent}s
     */
    public ParceledListSlice<BrightnessChangeEvent> getEvents(int userId) {
    public ParceledListSlice<BrightnessChangeEvent> getEvents(int userId, boolean includePackage) {
        // TODO include apps from any managed profiles in the brightness information.
        BrightnessChangeEvent[] events;
        synchronized (mEventsLock) {
@@ -207,7 +208,13 @@ public class BrightnessTracker {
        ArrayList<BrightnessChangeEvent> out = new ArrayList<>(events.length);
        for (int i = 0; i < events.length; ++i) {
            if (events[i].userId == userId) {
                if (includePackage) {
                    out.add(events[i]);
                } else {
                    BrightnessChangeEvent event = new BrightnessChangeEvent((events[i]));
                    event.packageName = null;
                    out.add(event);
                }
            }
        }
        return new ParceledListSlice<>(out);
Loading