Skip to content

Commit

Permalink
SystemUI: runtime configurable audio panel location
Browse files Browse the repository at this point in the history
* 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: Jagrav Naik <jagravnaik0@gmail.com>
  Signed-off-by: Anirudh 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: Josh 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
  • Loading branch information
alexxxdev authored and sam3000 committed Oct 4, 2019
1 parent 546b62b commit 9422492
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 11 deletions.
4 changes: 2 additions & 2 deletions packages/SystemUI/res/layout-land/volume_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions packages/SystemUI/res/layout/volume_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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">

Expand Down
2 changes: 1 addition & 1 deletion packages/SystemUI/res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
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;

Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
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;
Expand All @@ -97,6 +98,9 @@
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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -175,6 +185,7 @@ public VolumeDialogImpl(Context context) {
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
Expand Down Expand Up @@ -203,6 +214,9 @@ public void destroy() {
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;
Expand All @@ -223,7 +237,7 @@ private void initDialog() {
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);

Expand All @@ -232,7 +246,7 @@ private void initDialog() {
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)
Expand Down Expand Up @@ -263,6 +277,9 @@ private void initDialog() {
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);
Expand Down Expand Up @@ -308,6 +325,38 @@ private void initDialog() {
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;
}
Expand Down Expand Up @@ -350,7 +399,11 @@ private void addRow(int stream, int iconRes, int iconMuteRes, boolean important,
if (D.BUG) Slog.d(TAG, "Adding row for stream " + stream);
VolumeRow row = new VolumeRow();
initRow(row, stream, iconRes, iconMuteRes, important, defaultStream);
mDialogRowsView.addView(row.view);
if (mVolumePanelOnLeft) {
mDialogRowsView.addView(row.view, 0);
} else {
mDialogRowsView.addView(row.view);
}
mRows.add(row);
}

Expand All @@ -360,7 +413,11 @@ private void addExistingRows() {
final VolumeRow row = mRows.get(i);
initRow(row, row.stream, row.iconRes, row.iconMuteRes, row.important,
row.defaultStream);
mDialogRowsView.addView(row.view);
if (mVolumePanelOnLeft) {
mDialogRowsView.addView(row.view, 0);
} else {
mDialogRowsView.addView(row.view);
}
updateVolumeRowH(row);
}
}
Expand Down Expand Up @@ -753,7 +810,7 @@ protected void dismissH(int reason) {
mDialog.dismiss();
tryToRemoveCaptionsTooltip();
}, 50));
if (!isLandscape()) animator.translationX(mDialogView.getWidth() / 2.0f);
animator.translationX(getAnimatorX());
animator.start();
checkODICaptionsTooltip(true);
mController.notifyVisible(false);
Expand Down

0 comments on commit 9422492

Please sign in to comment.