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

Commit db6a24b3 authored by Jesse Chan's avatar Jesse Chan Committed by Michael W
Browse files

Implement quick QS brightness slider [1/3]



Change-Id: I20ef7755c8f532e801e1f070cf0c9fd8d9873faa
Signed-off-by: default avatarJesse Chan <jc@lineageos.org>
parent dcfcf1f5
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -40,11 +40,19 @@
    <!-- Layout containing tooltips, alarm text, etc. -->
    <include layout="@layout/quick_settings_header_info" />

    <FrameLayout
        android:id="@+id/quick_qs_brightness_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/brightness_mirror_height"
        android:layout_below="@id/header_text_container">
        <include layout="@layout/quick_settings_brightness_dialog" />
    </FrameLayout>

    <com.android.systemui.qs.QuickQSPanel
        android:id="@+id/quick_qs_panel"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_below="@id/quick_qs_status_icons"
        android:layout_below="@id/quick_qs_brightness_bar"
        android:layout_marginStart="@dimen/qs_header_tile_margin_horizontal"
        android:layout_marginEnd="@dimen/qs_header_tile_margin_horizontal"
        android:accessibilityTraversalAfter="@+id/date_time_group"
+15 −1
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import com.android.systemui.qs.TouchAnimator.Listener;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import lineageos.providers.LineageSettings;

import java.util.ArrayList;
import java.util.Collection;

@@ -44,6 +46,8 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha

    public static final float EXPANDED_TILE_DELAY = .86f;

    private static final String QS_SHOW_BRIGHTNESS_SLIDER =
            "lineagesecure:" + LineageSettings.Secure.QS_SHOW_BRIGHTNESS_SLIDER;

    private final ArrayList<View> mAllViews = new ArrayList<>();
    /**
@@ -75,6 +79,8 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
    private QSTileHost mHost;
    private boolean mShowCollapsedOnKeyguard;

    private boolean mIsQuickQsBrightnessEnabled;

    public QSAnimator(QS qs, QuickQSPanel quickPanel, QSPanel panel) {
        mQs = qs;
        mQuickQsPanel = quickPanel;
@@ -135,6 +141,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
    public void onViewAttachedToWindow(View v) {
        Dependency.get(TunerService.class).addTunable(this, ALLOW_FANCY_ANIMATION,
                MOVE_FULL_ROWS, QuickQSPanel.NUM_QUICK_TILES);
        Dependency.get(TunerService.class).addTunable(this, QS_SHOW_BRIGHTNESS_SLIDER);
    }

    @Override
@@ -157,6 +164,13 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        } else if (QuickQSPanel.NUM_QUICK_TILES.equals(key)) {
            mNumQuickTiles = mQuickQsPanel.getNumQuickTiles(mQs.getContext());
            clearAnimationState();
        } else if (QS_SHOW_BRIGHTNESS_SLIDER.equals(key)) {
            try {
                mIsQuickQsBrightnessEnabled = Integer.parseInt(newValue) > 1;
            } catch (NumberFormatException e) {
                // Catches exception as newValue may be null or malformed.
                mIsQuickQsBrightnessEnabled = false;
            }
        }
        updateAnimators();
    }
@@ -273,7 +287,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
            if (brightness != null) {
                firstPageBuilder.addFloat(brightness, "translationY", heightDiff, 0);
                mBrightnessAnimator = new TouchAnimator.Builder()
                        .addFloat(brightness, "alpha", 0, 1)
                        .addFloat(brightness, "alpha", mIsQuickQsBrightnessEnabled ? 1 : 0, 1)
                        .setStartDelay(.5f)
                        .build();
                mAllViews.add(brightness);
+75 −3
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ import com.android.systemui.privacy.PrivacyItem;
import com.android.systemui.privacy.PrivacyItemController;
import com.android.systemui.privacy.PrivacyItemControllerKt;
import com.android.systemui.qs.QSDetail.Callback;
import com.android.systemui.settings.BrightnessController;
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
@@ -80,6 +81,8 @@ import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.tuner.TunerService;

import lineageos.providers.LineageSettings;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -105,6 +108,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
    private static final int TOOLTIP_NOT_YET_SHOWN_COUNT = 0;
    public static final int MAX_TOOLTIP_SHOWN_COUNT = 2;

    private static final String QS_SHOW_AUTO_BRIGHTNESS =
            "lineagesecure:" + LineageSettings.Secure.QS_SHOW_AUTO_BRIGHTNESS;
    private static final String QS_SHOW_BRIGHTNESS_SLIDER =
            "lineagesecure:" + LineageSettings.Secure.QS_SHOW_BRIGHTNESS_SLIDER;

    private final Handler mHandler = new Handler();
    private final NextAlarmController mAlarmController;
    private final ZenModeController mZenController;
@@ -148,6 +156,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
    private BatteryMeterView mBatteryRemainingIcon;
    private boolean mPermissionsHubEnabled;

    private View mQuickQsBrightness;
    private BrightnessController mBrightnessController;
    private boolean mIsQuickQsBrightnessEnabled;
    private boolean mIsQsAutoBrightnessEnabled;

    private PrivacyItemController mPrivacyItemController;

    private final BroadcastReceiver mRingerReceiver = new BroadcastReceiver() {
@@ -210,6 +223,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        iconContainer.setShouldRestrictIcons(false);
        mIconManager = new TintedIconManager(iconContainer);

        mQuickQsBrightness = findViewById(R.id.quick_qs_brightness_bar);
        mBrightnessController = new BrightnessController(getContext(),
                mQuickQsBrightness.findViewById(R.id.brightness_icon),
                mQuickQsBrightness.findViewById(R.id.brightness_slider));

        // Views corresponding to the header info section (e.g. ringer and next alarm).
        mHeaderTextContainerView = findViewById(R.id.header_text_container);
        mStatusSeparator = findViewById(R.id.status_separator);
@@ -261,7 +279,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements
                mContext.getMainExecutor(), mPropertyListener);

        Dependency.get(TunerService.class).addTunable(this,
                StatusBarIconController.ICON_BLACKLIST);
                StatusBarIconController.ICON_BLACKLIST,
                QS_SHOW_AUTO_BRIGHTNESS, QS_SHOW_BRIGHTNESS_SLIDER);
    }

    private List<String> getIgnoredIconSlots() {
@@ -380,6 +399,13 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        int qqsHeight = mContext.getResources().getDimensionPixelSize(
                R.dimen.qs_quick_header_panel_height);

        if (mIsQuickQsBrightnessEnabled) {
            qqsHeight += mContext.getResources().getDimensionPixelSize(
                    R.dimen.brightness_mirror_height)
                    + mContext.getResources().getDimensionPixelSize(
                    R.dimen.qs_tile_margin_top);
        }

        setMinimumHeight(sbHeight + qqsHeight);
    }

@@ -396,6 +422,28 @@ public class QuickStatusBarHeader extends RelativeLayout implements
                com.android.internal.R.dimen.quick_qs_offset_height);
        mSystemIconsView.setLayoutParams(mSystemIconsView.getLayoutParams());

        if (mIsQuickQsBrightnessEnabled) {
            // Offset container margin to align quick QS brightness bar with QS brightness bar.
            RelativeLayout.LayoutParams lpQuickQsBrightness = (RelativeLayout.LayoutParams)
                    mQuickQsBrightness.getLayoutParams();
            lpQuickQsBrightness.setMargins(
                    resources.getDimensionPixelSize(R.dimen.notification_side_paddings)
                            - resources.getDimensionPixelSize(R.dimen.status_bar_padding_start),
                    0, resources.getDimensionPixelSize(R.dimen.notification_side_paddings)
                            - resources.getDimensionPixelSize(R.dimen.status_bar_padding_end),
                    0);
            mQuickQsBrightness.setLayoutParams(lpQuickQsBrightness);
            if (mIsQsAutoBrightnessEnabled && resources.getBoolean(
                    com.android.internal.R.bool.config_automatic_brightness_available)) {
                mQuickQsBrightness.findViewById(R.id.brightness_icon).setVisibility(View.VISIBLE);
            } else {
                mQuickQsBrightness.findViewById(R.id.brightness_icon).setVisibility(View.GONE);
            }
            mQuickQsBrightness.setVisibility(View.VISIBLE);
        } else {
            mQuickQsBrightness.setVisibility(View.GONE);
        }

        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
        if (mQsDisabled) {
            lp.height = resources.getDimensionPixelSize(
@@ -473,6 +521,14 @@ public class QuickStatusBarHeader extends RelativeLayout implements
            mPrivacyChip.setExpanded(expansionFraction > 0.5);
            mPrivacyChipAlphaAnimator.setPosition(keyguardExpansionFraction);
        }

        if (mIsQuickQsBrightnessEnabled) {
            if (keyguardExpansionFraction > 0) {
                mQuickQsBrightness.setVisibility(INVISIBLE);
            } else {
                mQuickQsBrightness.setVisibility(VISIBLE);
            }
        }
    }

    public void disable(int state1, int state2, boolean animate) {
@@ -482,6 +538,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        mHeaderQsPanel.setDisabledByPolicy(disabled);
        mHeaderTextContainerView.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
        mQuickQsStatusIcons.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
        mQuickQsBrightness.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
        updateResources();
    }

@@ -545,11 +602,13 @@ public class QuickStatusBarHeader extends RelativeLayout implements
            mContext.registerReceiver(mRingerReceiver,
                    new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
            mPrivacyItemController.addCallback(mPICCallback);
            mBrightnessController.registerCallbacks();
        } else {
            mZenController.removeCallback(this);
            mAlarmController.removeCallback(this);
            mPrivacyItemController.removeCallback(mPICCallback);
            mContext.unregisterReceiver(mRingerReceiver);
            mBrightnessController.unregisterCallbacks();
            mPrivacyChipLogged = false;
        }
    }
@@ -662,7 +721,20 @@ public class QuickStatusBarHeader extends RelativeLayout implements

    @Override
    public void onTuningChanged(String key, String newValue) {
        if (QS_SHOW_BRIGHTNESS_SLIDER.equals(key)) {
            try {
                mIsQuickQsBrightnessEnabled = Integer.parseInt(newValue) > 1;
            } catch (NumberFormatException e) {
                // Catches exception as newValue may be null or malformed.
                mIsQuickQsBrightnessEnabled = false;
            }
            updateResources();
        } else if (QS_SHOW_AUTO_BRIGHTNESS.equals(key)) {
            mIsQsAutoBrightnessEnabled = TunerService.parseIntegerSwitch(newValue, true);
            updateResources();
        } else if (StatusBarIconController.ICON_BLACKLIST.equals(key)) {
            mClockView.setClockVisibleByUser(!StatusBarIconController.getIconBlacklist(newValue)
                    .contains("clock"));
        }
    }
}