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

Commit 91ed64b3 authored by a.derendyaev's avatar a.derendyaev Committed by Sam Mortimer
Browse files

SystemUI: runtime configurable audio panel location



* Placement is now determined at runtime by a lineage setting.
  Use TunerService to track settings change.
  Various cleanup and fix formatting.
  Fixed left/right gravity on expand arrow and ringer.
  Fix commit author.
  (sam3000)

This is a squashed and adapted commit of the following patches:

----

  From cf187bd54fbd807e16b0ac3593e839008efd302e Mon Sep 17 00:00:00 2001
  From: "a.derendyaev" <a.derendyaev@magdv.com>
  Date: Wed, 19 Dec 2018 21:57:45 +0800
  Subject: [PATCH] SystemUI: allow devices override audio panel location

  Some devices have volume buttons on left side and it not fancy if volume panel will be at right side.
  You can override panel location using overlay for SystemUI:

  <!-- Allow devices override audio panel location to the left side -->
  <bool name="config_audioPanelOnLeftSide">true</bool>

  Change-Id: I8a2302867010b0e6a02efa68df57e534ce7bbf46
  Signed-off-by: default avatarJagrav Naik <jagravnaik0@gmail.com>
  Signed-off-by: default avatarAnirudh Gupta <anirudhgupta109@gmail.com>

----

  From 9d0ff1efd26961a4f14d0821f50ebe80c2a65ff9 Mon Sep 17 00:00:00 2001
  From: Alex Cruz <alex@dirtyunicorns.com>
  Date: Fri, 21 Dec 2018 22:08:52 -0600
  Subject: [PATCH] Volume panel: Do the same with less

  Use common volume_dialog layout for both left- and right-aligned panel

  [@TheDorkKnightRises - POSP]
  - Tweak padding values to make them uniform across both alignments
  - Remove redundant comment

  Change-Id: If41456f71ffd18466166e7b4120ff34d9e6f5a46
  Signed-off-by: default avatarJosh Fox (XlxFoXxlX) <joshfox87@gmail.com>

----

Change-Id: I9345d83af52cadf9f196fb341e27265af09d5aec
parent c964a821
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -19,18 +19,16 @@
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:theme="@style/qs_theme">
    <!-- right-aligned to be physically near volume button -->
    <LinearLayout
        android:id="@+id/volume_dialog"
        android:minWidth="@dimen/volume_dialog_panel_width"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|right"
        android:background="@android:color/transparent"
        android:paddingRight="@dimen/volume_dialog_panel_transparent_padding_right"
        android:paddingRight="@dimen/volume_dialog_panel_transparent_padding_horizontal"
        android:paddingTop="@dimen/volume_dialog_panel_transparent_padding"
        android:paddingBottom="@dimen/volume_dialog_panel_transparent_padding"
        android:paddingLeft="@dimen/volume_dialog_panel_transparent_padding"
        android:paddingLeft="@dimen/volume_dialog_panel_transparent_padding_horizontal"
        android:orientation="vertical"
        android:clipToPadding="false" >

@@ -40,7 +38,6 @@
            android:layout_height="@dimen/volume_dialog_ringer_size"
            android:layout_marginBottom="@dimen/volume_dialog_spacer"
            android:translationZ="@dimen/volume_dialog_elevation"
            android:layout_gravity="right"
            android:clipToPadding="false"
            android:background="@drawable/rounded_bg_full">
            <com.android.keyguard.AlphaOptimizedImageButton
@@ -56,7 +53,6 @@
            <include layout="@layout/volume_dnd_icon"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginRight="@dimen/volume_dialog_stream_padding"
                     android:layout_marginTop="6dp"/>
        </FrameLayout>

@@ -94,7 +90,6 @@
                    android:focusable="true"
                    android:layout_marginRight="8dp"
                    android:layout_marginLeft="8dp"
                    android:layout_gravity="right"
                    android:background="?android:attr/selectableItemBackgroundBorderless"
                    android:contentDescription="@string/accessibility_quick_settings_expand"
                    android:padding="14dp"
+1 −1
Original line number Diff line number Diff line
@@ -295,7 +295,7 @@
    <!-- The width of the panel that holds the quick settings. -->
    <dimen name="qs_panel_width">@dimen/notification_panel_width</dimen>

    <dimen name="volume_dialog_panel_transparent_padding_right">8dp</dimen>
    <dimen name="volume_dialog_panel_transparent_padding_horizontal">8dp</dimen>

    <dimen name="volume_dialog_panel_transparent_padding">20dp</dimen>

+60 −5
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.DecelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
@@ -96,6 +97,9 @@ import com.android.systemui.statusbar.phone.ExpandableIndicator;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.tuner.TunerService;

import lineageos.providers.LineageSettings;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -114,6 +118,9 @@ public class VolumeDialogImpl implements VolumeDialog {
    private static final long USER_ATTEMPT_GRACE_PERIOD = 1000;
    private static final int UPDATE_ANIMATION_DURATION = 80;

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

    private final Context mContext;
    private final H mHandler = new H();
    private final VolumeDialogController mController;
@@ -151,6 +158,10 @@ public class VolumeDialogImpl implements VolumeDialog {
    private SafetyWarningDialog mSafetyWarning;
    private boolean mHovering = false;
    private boolean mExpanded;
    // Volume panel placement setting state.
    private boolean mVolumePanelOnLeftDesired;
    // Volume panel placement that is currently in use.
    private boolean mVolumePanelOnLeft;

    public VolumeDialogImpl(Context context) {
        mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
@@ -158,6 +169,7 @@ public class VolumeDialogImpl implements VolumeDialog {
        mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
        mAccessibilityMgr = Dependency.get(AccessibilityManagerWrapper.class);
        mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class);
        Dependency.get(TunerService.class).addTunable(mTunable, SETTING_VOLUME_PANEL_ON_LEFT);
    }

    public void init(int windowType, Callback callback) {
@@ -199,15 +211,19 @@ public class VolumeDialogImpl implements VolumeDialog {
        final WindowManager.LayoutParams lp = mWindow.getAttributes();
        lp.format = PixelFormat.TRANSLUCENT;
        lp.setTitle(VolumeDialogImpl.class.getSimpleName());
        lp.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
        lp.windowAnimations = -1;
        if (!mVolumePanelOnLeft) {
            lp.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
        } else {
            lp.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
        }
        mWindow.setAttributes(lp);
        mWindow.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        mDialog.setCanceledOnTouchOutside(true);
        mDialog.setContentView(R.layout.volume_dialog);
        mDialog.setOnShowListener(dialog -> {
            if (!isLandscape()) mDialogView.setTranslationX(mDialogView.getWidth() / 2);
            if (!isLandscape()) mDialogView.setTranslationX(getAnimatorX());
            mDialogView.setAlpha(0);
            mDialogView.animate()
                    .alpha(1)
@@ -242,6 +258,15 @@ public class VolumeDialogImpl implements VolumeDialog {
        mZenIcon = mRinger.findViewById(R.id.dnd_icon);
        mExpandRowsView = mDialog.findViewById(R.id.expandable_indicator_container);
        mExpandRows = mDialog.findViewById(R.id.expandable_indicator);
        if (!mVolumePanelOnLeft) {
            ((LinearLayout.LayoutParams) mRinger.getLayoutParams()).gravity = Gravity.RIGHT;
            ((FrameLayout.LayoutParams) mExpandRows.getLayoutParams()).gravity = Gravity.RIGHT;
            mExpandRows.setRotation(90);
        } else {
            ((LinearLayout.LayoutParams) mRinger.getLayoutParams()).gravity = Gravity.LEFT;
            ((FrameLayout.LayoutParams) mExpandRows.getLayoutParams()).gravity = Gravity.LEFT;
            mExpandRows.setRotation(-90);
        }

        if (mRows.isEmpty()) {
            if (!AudioSystem.isSingleVolume(mContext)) {
@@ -276,6 +301,20 @@ public class VolumeDialogImpl implements VolumeDialog {
        initSettingsH();
    }

    private float getAnimatorX() {
        float x = mDialogView.getWidth() / 2;
        return mVolumePanelOnLeft ? -x : x;
    }

    private final TunerService.Tunable mTunable = new TunerService.Tunable() {
        @Override
        public void onTuningChanged(String key, String newValue) {
            if (key.equals(SETTING_VOLUME_PANEL_ON_LEFT)) {
                mVolumePanelOnLeftDesired = TunerService.parseIntegerSwitch(newValue, false);
            }
        }
    };

    protected ViewGroup getDialogView() {
        return mDialogView;
    }
@@ -318,7 +357,11 @@ public class VolumeDialogImpl implements VolumeDialog {
        if (D.BUG) Slog.d(TAG, "Adding row for stream " + stream);
        VolumeRow row = new VolumeRow();
        initRow(row, stream, iconRes, iconMuteRes, important, defaultStream);
        if (!mVolumePanelOnLeft) {
            mDialogRowsView.addView(row.view, 0);
        } else {
            mDialogRowsView.addView(row.view);
        }
        mRows.add(0, row);
    }

@@ -328,7 +371,11 @@ public class VolumeDialogImpl implements VolumeDialog {
            final VolumeRow row = mRows.get(i);
            initRow(row, row.stream, row.iconRes, row.iconMuteRes, row.important,
                    row.defaultStream);
            if (!mVolumePanelOnLeft) {
                mDialogRowsView.addView(row.view, 0);
            } else {
                mDialogRowsView.addView(row.view);
            }
            updateVolumeRowH(row);
        }
    }
@@ -579,6 +626,14 @@ public class VolumeDialogImpl implements VolumeDialog {
        mHandler.removeMessages(H.SHOW);
        mHandler.removeMessages(H.DISMISS);
        rescheduleTimeoutH();
        // Now is a good time to apply any panel left/right placement
        // settings change.
        if (mVolumePanelOnLeft != mVolumePanelOnLeftDesired) {
            mVolumePanelOnLeft = mVolumePanelOnLeftDesired;
            // Reinit the panel dialog
            initDialog();
            mConfigurableTexts.update();
        }
        mShowing = true;

        initSettingsH();
@@ -626,7 +681,7 @@ public class VolumeDialogImpl implements VolumeDialog {
                    mExpanded = false;
                    mExpandRows.setExpanded(mExpanded);
                }, 50));
        if (!isLandscape()) animator.translationX(mDialogView.getWidth() / 2);
        if (!isLandscape()) animator.translationX(getAnimatorX());
        animator.start();

        Events.writeEvent(mContext, Events.EVENT_DISMISS_DIALOG, reason);