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

Unverified Commit 8c5dbd8c authored by Cédric Bellegarde's avatar Cédric Bellegarde Committed by Michael Bestas
Browse files

SystemUI: Add support for clock auto-hiding

Hide statusbar clock when launcher is visible.
Useful when you already have a clock as widget.

Change-Id: I03dfc81bc055f2f865ac704e3bf9d9d104fac272
parent fd7778c0
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
<!--    android:background="@drawable/status_bar_closed_default_background" -->
<com.android.systemui.statusbar.phone.PhoneStatusBarView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    xmlns:systemui="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/status_bar_height"
    android:id="@+id/status_bar"
@@ -97,6 +97,7 @@
                        android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
                        android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
                        android:gravity="center_vertical|start"
                        systemui:isStatusBar="true"
                    />

                    <include layout="@layout/ongoing_activity_chip" />
@@ -173,6 +174,7 @@
            android:singleLine="true"
            android:gravity="center"
            android:visibility="gone"
            systemui:isStatusBar="true"
        />
    </com.android.keyguard.AlphaOptimizedLinearLayout>

+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@
            android:paddingEnd="@dimen/status_bar_clock_end_padding"
            android:gravity="center_vertical"
            android:visibility="gone"
            systemui:isStatusBar="true"
        />
    </com.android.keyguard.AlphaOptimizedLinearLayout>
</LinearLayout>
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@
            <enum name="small" value="1" />
            <enum name="gone" value="2" />
        </attr>
        <attr name="isStatusBar" format="boolean" />
        <attr name="showDark" format="boolean" />
    </declare-styleable>
    <attr name="orientation">
+83 −11
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package com.android.systemui.statusbar.policy;

import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.StatusBarManager;
import android.app.WindowConfiguration;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -27,6 +29,7 @@ import android.database.ContentObserver;
import android.graphics.Rect;
import android.icu.lang.UCharacter;
import android.icu.text.DateTimePatternGenerator;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
@@ -46,6 +49,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.Nullable;

import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.FontSizeUtils;
@@ -55,6 +60,9 @@ import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.res.R;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListeners;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.tuner.TunerService;
@@ -89,11 +97,13 @@ public class Clock extends TextView implements
    private final CommandQueue mCommandQueue;
    private int mCurrentUserId;

    private boolean mClockAutoHide = false;
    private boolean mClockVisibleByPolicy = true;
    private boolean mClockVisibleByUser = getVisibility() == View.VISIBLE;

    private boolean mAttached;
    private boolean mScreenReceiverRegistered;
    private boolean mTaskStackListenerRegistered;
    private Calendar mCalendar;
    private String mContentDescriptionFormatString;
    private SimpleDateFormat mClockFormat;
@@ -110,6 +120,8 @@ public class Clock extends TextView implements
    private boolean mShowSeconds;
    private Handler mSecondsHandler;

    private boolean mIsStatusBar;

    // Fields to cache the width so the clock remains at an approximately constant width
    private int mCharsAtCurrentWidth = -1;
    private int mCachedWidth = -1;
@@ -146,7 +158,9 @@ public class Clock extends TextView implements
                    LineageSettings.System.STATUS_BAR_AM_PM, AM_PM_STYLE_GONE);
            mContentObserver = new ContentObserver(null) {
                @Override
                public void onChange(boolean selfChange) {
                public void onChange(boolean selfChange, Uri uri) {
                    if (LineageSettings.System.getUriFor(
                            LineageSettings.System.STATUS_BAR_AM_PM).equals(uri)) {
                        mAmPmStyle = LineageSettings.System.getInt(
                                mContext.getContentResolver(),
                                LineageSettings.System.STATUS_BAR_AM_PM, AM_PM_STYLE_GONE);
@@ -156,8 +170,15 @@ public class Clock extends TextView implements
                        mContext.getMainExecutor().execute(() -> {
                            updateClock(true);
                        });
                    } else if (LineageSettings.System.getUriFor(
                            LineageSettings.System.STATUS_BAR_CLOCK_AUTO_HIDE).equals(uri)) {
                        handleTaskStackListener(
                                LineageSettings.System.getInt(mContext.getContentResolver(),
                                        LineageSettings.System.STATUS_BAR_CLOCK_AUTO_HIDE, 0) != 0);
                    }
                }
            };
            mIsStatusBar = a.getBoolean(R.styleable.Clock_isStatusBar, mIsStatusBar);
            mNonAdaptedColor = getCurrentTextColor();
        } finally {
            a.recycle();
@@ -224,6 +245,12 @@ public class Clock extends TextView implements
            mContext.getContentResolver().registerContentObserver(
                    LineageSettings.System.getUriFor(LineageSettings.System.STATUS_BAR_AM_PM),
                    false, mContentObserver);
            mContext.getContentResolver().registerContentObserver(
                    LineageSettings.System.getUriFor(
                            LineageSettings.System.STATUS_BAR_CLOCK_AUTO_HIDE),
                    false, mContentObserver);
            mContentObserver.onChange(false, LineageSettings.System.getUriFor(
                    LineageSettings.System.STATUS_BAR_CLOCK_AUTO_HIDE));
            mCommandQueue.addCallback(this);
            mUserTracker.addCallback(mUserChangedCallback, mContext.getMainExecutor());
            mCurrentUserId = mUserTracker.getUserId();
@@ -258,6 +285,21 @@ public class Clock extends TextView implements
            Dependency.get(TunerService.class).removeTunable(this);
            mCommandQueue.removeCallback(this);
            mUserTracker.removeCallback(mUserChangedCallback);
            handleTaskStackListener(false);
        }
    }

    private void handleTaskStackListener(boolean register) {
        if (!mIsStatusBar) {
            // We don't support clock auto hide for quick settings.
            return;
        }
        if (register && !mTaskStackListenerRegistered) {
            TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
            mTaskStackListenerRegistered = true;
        } else if (!register && mTaskStackListenerRegistered) {
            TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener);
            mTaskStackListenerRegistered = false;
        }
    }

@@ -314,7 +356,7 @@ public class Clock extends TextView implements
    }

    public boolean shouldBeVisible() {
        return mClockVisibleByPolicy && mClockVisibleByUser;
        return !mClockAutoHide && mClockVisibleByPolicy && mClockVisibleByUser;
    }

    private void updateClockVisibility() {
@@ -451,6 +493,19 @@ public class Clock extends TextView implements
        }
    }

    private void updateShowClock() {
        ActivityManager.RunningTaskInfo runningTask =
                ActivityManagerWrapper.getInstance().getRunningTask();
        final int activityType = runningTask != null
                ? runningTask.configuration.windowConfiguration.getActivityType()
                : WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
        final boolean clockAutoHide = activityType == WindowConfiguration.ACTIVITY_TYPE_HOME;
        if (mClockAutoHide != clockAutoHide) {
            mClockAutoHide = clockAutoHide;
            updateClockVisibility();
        }
    }

    private final CharSequence getSmallTime() {
        Context context = getContext();
        boolean is24 = DateFormat.is24HourFormat(context, mCurrentUserId);
@@ -590,5 +645,22 @@ public class Clock extends TextView implements
            mSecondsHandler.postAtTime(this, SystemClock.uptimeMillis() / 1000 * 1000 + 1000);
        }
    };

    private final TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() {
        @Override
        public void onTaskStackChanged() {
            updateShowClock();
        }

        @Override
        public void onTaskRemoved(int taskId) {
            updateShowClock();
        }

        @Override
        public void onTaskMovedToFront(int taskId) {
            updateShowClock();
        }
    };
}