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

Commit 9422492f authored by a.derendyaev's avatar a.derendyaev Committed by Sam Mortimer
Browse files

SystemUI: runtime configurable audio panel location



* Updates for ten (@sam3000):
  * Squash in tuner service settings reset blacklist.
  * Remove layout xml changes that aren't needed.
  * Apply slide in/out animations to landscape too
    (they work fine).
  * Few other simplifications.

* 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>

----

Author: Sam Mortimer <sam@mortimer.me.uk>
Date:   Sun Jun 9 13:33:05 2019 -0700

    SystemUI: Blacklist volume panel on left setting from tuner reset

    Change-Id: I47ddb3b818cfa3548fef42fa686d0991e2a35605

----

Change-Id: Ie4e2a6660f76a45e4b8959471165655c0f06b18d

extras

Change-Id: If22c97eb1ce4cfb13396d182d90786f4b7acaee7
parent 546b62bf
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -32,10 +32,10 @@
        android:gravity="right"
        android:layout_gravity="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:clipToPadding="false">

        <FrameLayout
+2 −2
Original line number Diff line number Diff line
@@ -33,10 +33,10 @@
        android:gravity="right"
        android:layout_gravity="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">

+1 −1
Original line number Diff line number Diff line
@@ -382,7 +382,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>

+3 −1
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.util.leak.LeakDetector;
import com.android.systemui.volume.VolumeDialogImpl;

import lineageos.providers.LineageSettings;

@@ -76,7 +77,8 @@ public class TunerServiceImpl extends TunerService {
            Settings.Secure.DOZE_ALWAYS_ON,
            StatusBar.FORCE_SHOW_NAVBAR,
            StatusBar.SCREEN_BRIGHTNESS_MODE,
            StatusBar.STATUS_BAR_BRIGHTNESS_CONTROL
            StatusBar.STATUS_BAR_BRIGHTNESS_CONTROL,
            VolumeDialogImpl.SETTING_VOLUME_PANEL_ON_LEFT,
    };

    private final Observer mObserver = new Observer();
+62 −5
Original line number Diff line number Diff line
@@ -80,6 +80,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;
@@ -97,6 +98,9 @@ import com.android.systemui.plugins.VolumeDialogController.StreamState;
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
import com.android.systemui.statusbar.policy.ConfigurationController;
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;
@@ -116,6 +120,9 @@ public class VolumeDialogImpl implements VolumeDialog,
    private static final long USER_ATTEMPT_GRACE_PERIOD = 1000;
    private static final int UPDATE_ANIMATION_DURATION = 80;

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

    static final int DIALOG_TIMEOUT_MILLIS = 3000;
    static final int DIALOG_SAFETYWARNING_TIMEOUT_MILLIS = 5000;
    static final int DIALOG_ODI_CAPTIONS_TOOLTIP_TIMEOUT_MILLIS = 5000;
@@ -164,6 +171,9 @@ public class VolumeDialogImpl implements VolumeDialog,
    private ViewStub mODICaptionsTooltipViewStub;
    private View mODICaptionsTooltipView = null;

    // Volume panel placement left or right
    private boolean mVolumePanelOnLeft;

    public VolumeDialogImpl(Context context) {
        mContext =
                new ContextThemeWrapper(context, R.style.qs_theme);
@@ -175,6 +185,7 @@ public class VolumeDialogImpl implements VolumeDialog,
        mShowActiveStreamOnly = showActiveStreamOnly();
        mHasSeenODICaptionsTooltip =
                Prefs.getBoolean(context, Prefs.Key.HAS_SEEN_ODI_CAPTIONS_TOOLTIP, false);
        Dependency.get(TunerService.class).addTunable(mTunable, SETTING_VOLUME_PANEL_ON_LEFT);
    }

    @Override
@@ -203,6 +214,9 @@ public class VolumeDialogImpl implements VolumeDialog,
    private void initDialog() {
        mDialog = new CustomDialog(mContext);

        // Gravitate various views left/right depending on panel placement setting.
        final int panelGravity = mVolumePanelOnLeft ? Gravity.LEFT : Gravity.RIGHT;

        mConfigurableTexts = new ConfigurableTexts(mContext);
        mHovering = false;
        mShowing = false;
@@ -223,7 +237,7 @@ public class VolumeDialogImpl implements VolumeDialog,
        lp.format = PixelFormat.TRANSLUCENT;
        lp.setTitle(VolumeDialogImpl.class.getSimpleName());
        lp.windowAnimations = -1;
        lp.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
        lp.gravity = panelGravity | Gravity.CENTER_VERTICAL;
        mWindow.setAttributes(lp);
        mWindow.setLayout(WRAP_CONTENT, WRAP_CONTENT);

@@ -232,7 +246,7 @@ public class VolumeDialogImpl implements VolumeDialog,
        mDialogView.setAlpha(0);
        mDialog.setCanceledOnTouchOutside(true);
        mDialog.setOnShowListener(dialog -> {
            if (!isLandscape()) mDialogView.setTranslationX(mDialogView.getWidth() / 2.0f);
            mDialogView.setTranslationX(getAnimatorX());
            mDialogView.setAlpha(0);
            mDialogView.animate()
                    .alpha(1)
@@ -263,6 +277,9 @@ public class VolumeDialogImpl implements VolumeDialog,
        if (mRinger != null) {
            mRingerIcon = mRinger.findViewById(R.id.ringer_icon);
            mZenIcon = mRinger.findViewById(R.id.dnd_icon);
            // Apply ringer layout gravity based on panel left/right setting
            // Layout type is different between landscape/portrait.
            setLayoutGravity(mRinger.getLayoutParams(), panelGravity);
        }

        mODICaptionsView = mDialog.findViewById(R.id.odi_captions);
@@ -308,6 +325,38 @@ public class VolumeDialogImpl implements VolumeDialog,
        initODICaptionsH();
    }

    // Helper to set layout gravity.
    // Particular useful when the ViewGroup in question
    // is different for portait vs landscape.
    private void setLayoutGravity(Object obj, int gravity) {
        if (obj instanceof FrameLayout.LayoutParams) {
            ((FrameLayout.LayoutParams) obj).gravity = gravity;
        } else if (obj instanceof LinearLayout.LayoutParams) {
            ((LinearLayout.LayoutParams) obj).gravity = gravity;
        }
    }

    private float getAnimatorX() {
        final float x = mDialogView.getWidth() / 2.0f;
        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)) {
                final boolean volumePanelOnLeft = TunerService.parseIntegerSwitch(newValue, false);
                if (mVolumePanelOnLeft != volumePanelOnLeft) {
                    mVolumePanelOnLeft = volumePanelOnLeft;
                    mHandler.post(() -> {
                        // Trigger panel rebuild on next show
                        mConfigChanged = true;
                    });
                }
            }
        }
    };

    protected ViewGroup getDialogView() {
        return mDialogView;
    }
@@ -350,7 +399,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(row);
    }

@@ -360,7 +413,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);
        }
    }
@@ -753,7 +810,7 @@ public class VolumeDialogImpl implements VolumeDialog,
                    mDialog.dismiss();
                    tryToRemoveCaptionsTooltip();
                }, 50));
        if (!isLandscape()) animator.translationX(mDialogView.getWidth() / 2.0f);
        animator.translationX(getAnimatorX());
        animator.start();
        checkODICaptionsTooltip(true);
        mController.notifyVisible(false);