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

Commit 1600570d authored by HrX03's avatar HrX03 Committed by Tim Schumacher
Browse files

base: Redo expanded volume panel for 9.x



[ @HrX03 | @AgentFabulous - POSP ]
- Google nuked expanded volume panel in pie. Redo the current
  implementation to bring this back from the past and dejank it.
- Back to Android 8.x functionality!

Change-Id: Ie4931a4ae09483ba737a74fc32ed0a1f6acf105d
Co-authored-by: default avatarKshitij Gupta <kshitijgm@gmail.com>
parent 312579cb
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -81,20 +81,24 @@
                    <!-- volume rows added and removed here! :-) -->
            </LinearLayout>
            <FrameLayout
                android:id="@+id/settings_container"
                android:id="@+id/expandable_indicator_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/rounded_bg_bottom_background">
                <com.android.keyguard.AlphaOptimizedImageButton
                    android:id="@+id/settings"
                    android:src="@drawable/ic_settings_16dp"
                    android:layout_width="@dimen/volume_dialog_tap_target_size"
                    android:layout_height="@dimen/volume_dialog_tap_target_size"
                    android:layout_gravity="center"
                    android:contentDescription="@string/accessibility_volume_settings"
                    android:background="@drawable/ripple_drawable_20dp"
                    android:tint="?android:attr/textColorSecondary"
                    android:soundEffectsEnabled="false" />
                <com.android.systemui.statusbar.phone.ExpandableIndicator
                    android:id="@+id/expandable_indicator"
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:clipToPadding="false"
                    android:clickable="true"
                    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"
                    android:rotation="90" />
            </FrameLayout>
        </LinearLayout>

+57 −9
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ import com.android.systemui.plugins.VolumeDialog;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.plugins.VolumeDialogController.State;
import com.android.systemui.plugins.VolumeDialogController.StreamState;
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;
@@ -124,8 +125,8 @@ public class VolumeDialogImpl implements VolumeDialog {
    private ViewGroup mDialogRowsView;
    private ViewGroup mRinger;
    private ImageButton mRingerIcon;
    private View mSettingsView;
    private ImageButton mSettingsIcon;
    private View mExpandRowsView;
    private ExpandableIndicator mExpandRows;
    private FrameLayout mZenIcon;
    private final List<VolumeRow> mRows = new ArrayList<>();
    private ConfigurableTexts mConfigurableTexts;
@@ -149,6 +150,7 @@ public class VolumeDialogImpl implements VolumeDialog {
    private State mState;
    private SafetyWarningDialog mSafetyWarning;
    private boolean mHovering = false;
    private boolean mExpanded;

    public VolumeDialogImpl(Context context) {
        mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme);
@@ -180,6 +182,7 @@ public class VolumeDialogImpl implements VolumeDialog {
        mConfigurableTexts = new ConfigurableTexts(mContext);
        mHovering = false;
        mShowing = false;
        mExpanded = false;
        mWindow = mDialog.getWindow();
        mWindow.requestFeature(Window.FEATURE_NO_TITLE);
        mWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
@@ -237,8 +240,8 @@ public class VolumeDialogImpl implements VolumeDialog {
        mRinger = mDialog.findViewById(R.id.ringer);
        mRingerIcon = mRinger.findViewById(R.id.ringer_icon);
        mZenIcon = mRinger.findViewById(R.id.dnd_icon);
        mSettingsView = mDialog.findViewById(R.id.settings_container);
        mSettingsIcon = mDialog.findViewById(R.id.settings);
        mExpandRowsView = mDialog.findViewById(R.id.expandable_indicator_container);
        mExpandRows = mDialog.findViewById(R.id.expandable_indicator);

        if (mRows.isEmpty()) {
            if (!AudioSystem.isSingleVolume(mContext)) {
@@ -310,8 +313,8 @@ 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);
        mDialogRowsView.addView(row.view);
        mRows.add(row);
        mDialogRowsView.addView(row.view, 0);
        mRows.add(0, row);
    }

    private void addExistingRows() {
@@ -325,6 +328,27 @@ public class VolumeDialogImpl implements VolumeDialog {
        }
    }

    private void cleanExpandedRows() {
        for (int i = mRows.size() - 1; i >= 0; i--) {
            final VolumeRow row = mRows.get(i);
            if (row.stream == AudioManager.STREAM_RING || row.stream == AudioManager.STREAM_ALARM) {
                removeRow(row);
            }
        }
    }

    private void removeRow(VolumeRow volumeRow) {
        mRows.remove(volumeRow);
        mDialogRowsView.removeView(volumeRow.view);
    }

    private void updateAllActiveRows() {
        int N = mRows.size();
        for (int i = 0; i < N; i++) {
            updateVolumeRowH(mRows.get(i));
        }
    }

    private VolumeRow getActiveRow() {
        for (VolumeRow row : mRows) {
            if (row.stream == mActiveStream) {
@@ -421,14 +445,29 @@ public class VolumeDialogImpl implements VolumeDialog {
    }

    public void initSettingsH() {
        mSettingsView.setVisibility(
        mExpandRowsView.setVisibility(
                mDeviceProvisionedController.isCurrentUserSetup() ? VISIBLE : GONE);
        mSettingsIcon.setOnClickListener(v -> {
        mExpandRows.setOnLongClickListener(v -> {
            Events.writeEvent(mContext, Events.EVENT_SETTINGS_CLICK);
            Intent intent = new Intent(Settings.ACTION_SOUND_SETTINGS);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            dismissH(DISMISS_REASON_SETTINGS_CLICKED);
            Dependency.get(ActivityStarter.class).startActivity(intent, true /* dismissShade */);
            return true;
        });
        mExpandRows.setOnClickListener(v -> {
            if (!mExpanded) {
                addRow(AudioManager.STREAM_RING, R.drawable.ic_volume_ringer,
                        R.drawable.ic_volume_ringer_mute, true, false);
                addRow(AudioManager.STREAM_ALARM, R.drawable.ic_volume_alarm,
                        R.drawable.ic_volume_alarm_mute, true, false);
                updateAllActiveRows();
                mExpanded = true;
            } else {
                cleanExpandedRows();
                mExpanded = false;
            }
            mExpandRows.setExpanded(mExpanded);
        });
    }

@@ -560,6 +599,10 @@ public class VolumeDialogImpl implements VolumeDialog {
    }

    protected void dismissH(int reason) {
        if (!mShowing) {
            // This may happen when dismissing an expanded panel, don't animate again
            return;
        }
        mHandler.removeMessages(H.DISMISS);
        mHandler.removeMessages(H.SHOW);
        mDialogView.animate().cancel();
@@ -574,6 +617,9 @@ public class VolumeDialogImpl implements VolumeDialog {
                .withEndAction(() -> mHandler.postDelayed(() -> {
                    if (D.BUG) Log.d(TAG, "mDialog.dismiss()");
                    mDialog.dismiss();
                    cleanExpandedRows();
                    mExpanded = false;
                    mExpandRows.setExpanded(mExpanded);
                }, 50));
        if (!isLandscape()) animator.translationX(mDialogView.getWidth() / 2);
        animator.start();
@@ -625,7 +671,9 @@ public class VolumeDialogImpl implements VolumeDialog {
        for (final VolumeRow row : mRows) {
            final boolean isActive = row == activeRow;
            final boolean shouldBeVisible = shouldBeVisibleH(row, activeRow);
            if (!mExpanded) {
                Util.setVisOrGone(row.view, shouldBeVisible);
            }
            if (row.view.isShown()) {
                updateVolumeRowTintH(row, isActive);
            }