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

Commit d15a64b2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Hide icons in QS Header if there's a cutout" into sc-dev am: 378fafcd

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14505486

Change-Id: Ib39064d57b189a9896e45ff01994dcbaff6d3a74
parents 4e4e030d 378fafcd
Loading
Loading
Loading
Loading
+28 −10
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@

    <com.android.systemui.statusbar.policy.Clock
        android:id="@+id/clock"
        android:layout_width="wrap_content"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:minWidth="48dp"
        android:minHeight="48dp"
@@ -49,6 +49,22 @@
        android:layout_gravity="end|center_vertical"
        android:focusable="false"/>

    <View
        android:id="@+id/separator"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:visibility="gone"
        />

    <LinearLayout
        android:id="@+id/rightLayout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        >
        <com.android.systemui.statusbar.phone.StatusIconContainer
            android:id="@+id/statusIcons"
            android:layout_width="wrap_content"
@@ -58,8 +74,10 @@
        <com.android.systemui.BatteryMeterView
            android:id="@+id/batteryRemainingIcon"
            android:layout_height="match_parent"
        android:layout_width="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1"
            systemui:textAppearance="@style/TextAppearance.QS.Status"
            android:paddingEnd="2dp" />

    </LinearLayout>
</LinearLayout>
+75 −34
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ import com.android.systemui.BatteryMeterView;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.qs.QSDetail.Callback;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.statusbar.phone.StatusIconContainer;
@@ -67,7 +66,11 @@ public class QuickStatusBarHeader extends FrameLayout {

    private View mQSCarriers;
    private Clock mClockView;
    private Space mSpace;
    private Space mDatePrivacySeparator;
    private View mClockIconsSeparator;
    private boolean mShowClockIconsSeparator;
    private ViewGroup mRightLayout;

    private BatteryMeterView mBatteryRemainingIcon;
    private StatusIconContainer mIconContainer;
    private View mPrivacyChip;
@@ -117,9 +120,11 @@ public class QuickStatusBarHeader extends FrameLayout {
        mPrivacyChip = findViewById(R.id.privacy_chip);
        mDateView = findViewById(R.id.date);
        mSecurityHeaderView = findViewById(R.id.header_text_container);
        mClockIconsSeparator = findViewById(R.id.separator);
        mRightLayout = findViewById(R.id.rightLayout);

        mClockView = findViewById(R.id.clock);
        mSpace = findViewById(R.id.space);
        mDatePrivacySeparator = findViewById(R.id.space);
        // Tint for the battery icons are handled in setupHost()
        mBatteryRemainingIcon = findViewById(R.id.batteryRemainingIcon);

@@ -230,17 +235,13 @@ public class QuickStatusBarHeader extends FrameLayout {
    }

    private void updateAlphaAnimator() {
        StatusBarIconView noCallingIcon =
                ((StatusBarIconView) mIconContainer.getViewForSlot(mMobileSlotName));
        StatusBarIconView callStrengthIcon =
                ((StatusBarIconView) mIconContainer.getViewForSlot(mCallStrengthSlotName));
        TouchAnimator.Builder builder = new TouchAnimator.Builder()
                // The following two views have to be hidden manually, so as not to hide the
                // Privacy chip in QQS
                .addFloat(mDateView, "alpha", 0, 1)
                .addFloat(mSecurityHeaderView, "alpha", 0, 1)
                .addFloat(mQSCarriers, "alpha", 0, 1);
        builder.setListener(new TouchAnimator.ListenerAdapter() {
                .addFloat(mQSCarriers, "alpha", 0, 1)
                .setListener(new TouchAnimator.ListenerAdapter() {
                    @Override
                    public void onAnimationAtEnd() {
                        mIconContainer.addIgnoredSlot(mMobileSlotName);
@@ -251,6 +252,8 @@ public class QuickStatusBarHeader extends FrameLayout {
                    public void onAnimationStarted() {
                        mIconContainer.addIgnoredSlot(mMobileSlotName);
                        mIconContainer.addIgnoredSlot(mCallStrengthSlotName);

                        setSeparatorVisibility(false);
                    }

                    @Override
@@ -258,6 +261,8 @@ public class QuickStatusBarHeader extends FrameLayout {
                        super.onAnimationAtStart();
                        mIconContainer.removeIgnoredSlot(mMobileSlotName);
                        mIconContainer.removeIgnoredSlot(mCallStrengthSlotName);

                        setSeparatorVisibility(mShowClockIconsSeparator);
                    }
                });
        mAlphaAnimator = builder.build();
@@ -337,20 +342,30 @@ public class QuickStatusBarHeader extends FrameLayout {
                        cutout, cornerCutoutPadding, -1);
        mDatePrivacyView.setPadding(padding.first, 0, padding.second, 0);
        mClockIconsView.setPadding(padding.first, 0, padding.second, 0);
        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mSpace.getLayoutParams();
        LinearLayout.LayoutParams datePrivacySeparatorLayoutParams =
                (LinearLayout.LayoutParams) mDatePrivacySeparator.getLayoutParams();
        LinearLayout.LayoutParams mClockIconsSeparatorLayoutParams =
                (LinearLayout.LayoutParams) mClockIconsSeparator.getLayoutParams();
        boolean cornerCutout = cornerCutoutPadding != null
                && (cornerCutoutPadding.first == 0 || cornerCutoutPadding.second == 0);
        if (cutout != null) {
            Rect topCutout = cutout.getBoundingRectTop();
            if (topCutout.isEmpty() || cornerCutout) {
                lp.width = 0;
                mSpace.setVisibility(View.GONE);
                datePrivacySeparatorLayoutParams.width = 0;
                mDatePrivacySeparator.setVisibility(View.GONE);
                mClockIconsSeparatorLayoutParams.width = 0;
                setSeparatorVisibility(false);
                mShowClockIconsSeparator = false;
            } else {
                lp.width = topCutout.width();
                mSpace.setVisibility(View.VISIBLE);
                datePrivacySeparatorLayoutParams.width = topCutout.width();
                mDatePrivacySeparator.setVisibility(View.VISIBLE);
                mClockIconsSeparatorLayoutParams.width = topCutout.width();
                mShowClockIconsSeparator = true;
                setSeparatorVisibility(mKeyguardExpansionFraction == 0f);
            }
        }
        mSpace.setLayoutParams(lp);
        mDatePrivacySeparator.setLayoutParams(datePrivacySeparatorLayoutParams);
        mClockIconsSeparator.setLayoutParams(mClockIconsSeparatorLayoutParams);
        mCutOutPaddingLeft = padding.first;
        mCutOutPaddingRight = padding.second;
        mWaterfallTopInset = cutout == null ? 0 : cutout.getWaterfallInsets().top;
@@ -358,6 +373,32 @@ public class QuickStatusBarHeader extends FrameLayout {
        return super.onApplyWindowInsets(insets);
    }

    /**
     * Sets the visibility of the separator between clock and icons.
     *
     * This separator is "visible" when there is a center cutout, to block that space. In that
     * case, the clock and the layout on the right (containing the icons and the battery meter) are
     * set to weight 1 to take the available space.
     * @param visible whether the separator between clock and icons should be visible.
     */
    private void setSeparatorVisibility(boolean visible) {
        int newVisibility = visible ? View.VISIBLE : View.GONE;
        if (mClockIconsSeparator.getVisibility() == newVisibility) return;

        mClockIconsSeparator.setVisibility(visible ? View.VISIBLE : View.GONE);
        mQSCarriers.setVisibility(visible ? View.GONE : View.VISIBLE);

        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mClockView.getLayoutParams();
        lp.width = visible ? 0 : WRAP_CONTENT;
        lp.weight = visible ? 1f : 0f;
        mClockView.setLayoutParams(lp);

        lp = (LinearLayout.LayoutParams) mRightLayout.getLayoutParams();
        lp.width = visible ? 0 : WRAP_CONTENT;
        lp.weight = visible ? 1f : 0f;
        mRightLayout.setLayoutParams(lp);
    }

    private void updateHeadersPadding() {
        setContentMargins(mDatePrivacyView, 0, 0);
        setContentMargins(mClockIconsView, 0, 0);