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

Commit 1fd2ed58 authored by Michael Wright's avatar Michael Wright Committed by Android (Google) Code Review
Browse files

Merge "Add brightness dialog to SystemUI"

parents 7a60c43d 0087a14d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -2544,6 +2544,14 @@ public class Intent implements Parcelable, Cloneable {
    public static final String ACTION_QUICK_CLOCK =
            "android.intent.action.QUICK_CLOCK";

    /**
     * Broadcast Action: This is broadcast when a user action should request the
     * brightness setting dialog.
     * @hide
     */
    public static final String ACTION_SHOW_BRIGHTNESS_DIALOG =
            "android.intent.action.SHOW_BRIGHTNESS_DIALOG";

    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // Standard intent categories (see addCategory()).
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@
        android:paddingRight="10dp"
        android:src="@drawable/ic_qs_brightness_auto_off"
        />
    <com.android.systemui.statusbar.policy.ToggleSlider
    <com.android.systemui.settings.ToggleSlider
        android:id="@+id/brightness_slider"
        android:layout_width="0dp"
        android:layout_height="40dp"
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@
                style="@style/SystemBarPanelSettingsIcon"
                android:src="@drawable/ic_sysbar_brightness"
                />
        <com.android.systemui.statusbar.policy.ToggleSlider
        <com.android.systemui.settings.ToggleSlider
                android:id="@+id/brightness"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ public class SystemUIService extends Service {
            0, // system bar or status bar, filled in below.
            com.android.systemui.power.PowerUI.class,
            com.android.systemui.media.RingtonePlayer.class,
            com.android.systemui.settings.SettingsUI.class,
        };

    /**
+123 −35
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 The Android Open Source Project
 * Copyright (C) 2013 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.
@@ -14,15 +14,20 @@
 * limitations under the License.
 */

package com.android.systemui.statusbar.policy;
package com.android.systemui.settings;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.IPowerManager;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Slog;
@@ -30,8 +35,6 @@ import android.view.IWindowManager;
import android.widget.CompoundButton;
import android.widget.ImageView;

import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;

import java.util.ArrayList;

public class BrightnessController implements ToggleSlider.Listener {
@@ -46,6 +49,8 @@ public class BrightnessController implements ToggleSlider.Listener {
    private final boolean mAutomaticAvailable;
    private final IPowerManager mPower;
    private final CurrentUserTracker mUserTracker;
    private final Handler mHandler;
    private final BrightnessObserver mBrightnessObserver;

    private ArrayList<BrightnessStateChangeCallback> mChangeCallbacks =
            new ArrayList<BrightnessStateChangeCallback>();
@@ -54,11 +59,71 @@ public class BrightnessController implements ToggleSlider.Listener {
        public void onBrightnessLevelChanged();
    }

    /** ContentObserver to watch brightness **/
    private class BrightnessObserver extends ContentObserver {

        private final Uri BRIGHTNESS_MODE_URI =
                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
        private final Uri BRIGHTNESS_URI =
                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);

        public BrightnessObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {
            onChange(selfChange, null);
        }

        @Override
        public void onChange(boolean selfChange, Uri uri) {
            if (selfChange) return;
            if (BRIGHTNESS_MODE_URI.equals(uri)) {
                updateMode();
            } else if (BRIGHTNESS_URI.equals(uri)) {
                updateSlider();
            } else {
                updateMode();
                updateSlider();
            }
            for (BrightnessStateChangeCallback cb : mChangeCallbacks) {
                cb.onBrightnessLevelChanged();
            }
        }

        public void startObserving() {
            final ContentResolver cr = mContext.getContentResolver();
            cr.unregisterContentObserver(this);
            cr.registerContentObserver(
                    BRIGHTNESS_MODE_URI,
                    false, this, UserHandle.USER_ALL);
            cr.registerContentObserver(
                    BRIGHTNESS_URI,
                    false, this, UserHandle.USER_ALL);
        }

        public void stopObserving() {
            final ContentResolver cr = mContext.getContentResolver();
            cr.unregisterContentObserver(this);
        }

    }

    public BrightnessController(Context context, ImageView icon, ToggleSlider control) {
        mContext = context;
        mIcon = icon;
        mControl = control;
        mUserTracker = new CurrentUserTracker(mContext);
        mHandler = new Handler();
        mUserTracker = new CurrentUserTracker(mContext) {
            @Override
            public void onUserSwitched(int newUserId) {
                updateMode();
                updateSlider();
            }
        };
        mBrightnessObserver = new BrightnessObserver(mHandler);
        mBrightnessObserver.startObserving();

        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        mMinimumBacklight = pm.getMinimumScreenBrightnessSetting();
@@ -68,6 +133,11 @@ public class BrightnessController implements ToggleSlider.Listener {
                com.android.internal.R.bool.config_automatic_brightness_available);
        mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));

        // Update the slider and mode before attaching the listener so we don't receive the
        // onChanged notifications for the initial values.
        updateMode();
        updateSlider();

        control.setOnChangedListener(this);
    }

@@ -75,36 +145,20 @@ public class BrightnessController implements ToggleSlider.Listener {
        mChangeCallbacks.add(cb);
    }

    @Override
    public void onInit(ToggleSlider control) {
        if (mAutomaticAvailable) {
            int automatic;
            try {
                automatic = Settings.System.getIntForUser(mContext.getContentResolver(),
                        Settings.System.SCREEN_BRIGHTNESS_MODE,
                        mUserTracker.getCurrentUserId());
            } catch (SettingNotFoundException snfe) {
                automatic = 0;
            }
            control.setChecked(automatic != 0);
            updateIcon(automatic != 0);
        } else {
            control.setChecked(false);
            updateIcon(false /*automatic*/);
            //control.hideToggle();
    public boolean removeStateChangedCallback(BrightnessStateChangeCallback cb) {
        return mChangeCallbacks.remove(cb);
    }

        int value;
        try {
            value = Settings.System.getIntForUser(mContext.getContentResolver(),
                    Settings.System.SCREEN_BRIGHTNESS,
                    mUserTracker.getCurrentUserId());
        } catch (SettingNotFoundException ex) {
            value = mMaximumBacklight;
    @Override
    public void onInit(ToggleSlider control) {
        // Do nothing
    }

        control.setMax(mMaximumBacklight - mMinimumBacklight);
        control.setValue(value - mMinimumBacklight);
    /** Unregister all call backs, both to and from the controller */
    public void unregisterCallbacks() {
        mBrightnessObserver.stopObserving();
        mChangeCallbacks.clear();
        mUserTracker.stopTracking();
    }

    public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) {
@@ -119,7 +173,7 @@ public class BrightnessController implements ToggleSlider.Listener {
                        public void run() {
                            Settings.System.putIntForUser(mContext.getContentResolver(),
                                    Settings.System.SCREEN_BRIGHTNESS, val,
                                    mUserTracker.getCurrentUserId());
                                    UserHandle.USER_CURRENT);
                        }
                    });
            }
@@ -150,4 +204,38 @@ public class BrightnessController implements ToggleSlider.Listener {
                    com.android.systemui.R.drawable.ic_qs_brightness_auto_off);
        }
    }

    /** Fetch the brightness mode from the system settings and update the icon */
    private void updateMode() {
        if (mAutomaticAvailable) {
            int automatic;
            try {
                automatic = Settings.System.getIntForUser(mContext.getContentResolver(),
                        Settings.System.SCREEN_BRIGHTNESS_MODE,
                        UserHandle.USER_CURRENT);
            } catch (SettingNotFoundException snfe) {
                automatic = 0;
            }
            mControl.setChecked(automatic != 0);
            updateIcon(automatic != 0);
        } else {
            mControl.setChecked(false);
            updateIcon(false /*automatic*/);
        }
    }

    /** Fetch the brightness from the system settings and update the slider */
    private void updateSlider() {
        int value;
        try {
            value = Settings.System.getIntForUser(mContext.getContentResolver(),
                    Settings.System.SCREEN_BRIGHTNESS,
                    UserHandle.USER_CURRENT);
        } catch (SettingNotFoundException ex) {
            value = mMaximumBacklight;
        }
        mControl.setMax(mMaximumBacklight - mMinimumBacklight);
        mControl.setValue(value - mMinimumBacklight);
    }

}
Loading