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

Unverified Commit 394d71ae 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 e4b0fab9
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -20,7 +20,7 @@
<!--    android:background="@drawable/status_bar_closed_default_background" -->
<!--    android:background="@drawable/status_bar_closed_default_background" -->
<com.android.systemui.statusbar.phone.PhoneStatusBarView
<com.android.systemui.statusbar.phone.PhoneStatusBarView
    xmlns:android="http://schemas.android.com/apk/res/android"
    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_width="match_parent"
    android:layout_height="@dimen/status_bar_height"
    android:layout_height="@dimen/status_bar_height"
    android:id="@+id/status_bar"
    android:id="@+id/status_bar"
@@ -101,6 +101,7 @@
                        android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
                        android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
                        android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
                        android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
                        android:gravity="center_vertical|start"
                        android:gravity="center_vertical|start"
                        systemui:isStatusBar="true"
                    />
                    />


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


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


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


import androidx.annotation.Nullable;

import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.Dependency;
import com.android.systemui.FontSizeUtils;
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.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.res.R;
import com.android.systemui.res.R;
import com.android.systemui.settings.UserTracker;
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.CommandQueue;
import com.android.systemui.statusbar.core.StatusBarRootModernization;
import com.android.systemui.statusbar.core.StatusBarRootModernization;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
@@ -90,11 +98,13 @@ public class Clock extends TextView implements
    private final CommandQueue mCommandQueue;
    private final CommandQueue mCommandQueue;
    private int mCurrentUserId;
    private int mCurrentUserId;


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


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


    private boolean mIsStatusBar;

    /**
    /**
     * Color to be set on this {@link TextView}, when wallpaperTextColor is <b>not</b> utilized.
     * Color to be set on this {@link TextView}, when wallpaperTextColor is <b>not</b> utilized.
     */
     */
@@ -143,7 +155,9 @@ public class Clock extends TextView implements
                    LineageSettings.System.STATUS_BAR_AM_PM, AM_PM_STYLE_GONE);
                    LineageSettings.System.STATUS_BAR_AM_PM, AM_PM_STYLE_GONE);
            mContentObserver = new ContentObserver(null) {
            mContentObserver = new ContentObserver(null) {
                @Override
                @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(
                        mAmPmStyle = LineageSettings.System.getInt(
                                mContext.getContentResolver(),
                                mContext.getContentResolver(),
                                LineageSettings.System.STATUS_BAR_AM_PM, AM_PM_STYLE_GONE);
                                LineageSettings.System.STATUS_BAR_AM_PM, AM_PM_STYLE_GONE);
@@ -153,8 +167,15 @@ public class Clock extends TextView implements
                        mContext.getMainExecutor().execute(() -> {
                        mContext.getMainExecutor().execute(() -> {
                            updateClock(true);
                            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();
            mNonAdaptedColor = getCurrentTextColor();
        } finally {
        } finally {
            a.recycle();
            a.recycle();
@@ -221,6 +242,12 @@ public class Clock extends TextView implements
            mContext.getContentResolver().registerContentObserver(
            mContext.getContentResolver().registerContentObserver(
                    LineageSettings.System.getUriFor(LineageSettings.System.STATUS_BAR_AM_PM),
                    LineageSettings.System.getUriFor(LineageSettings.System.STATUS_BAR_AM_PM),
                    false, mContentObserver);
                    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);
            mCommandQueue.addCallback(this);
            mUserTracker.addCallback(mUserChangedCallback, mContext.getMainExecutor());
            mUserTracker.addCallback(mUserChangedCallback, mContext.getMainExecutor());
            mCurrentUserId = mUserTracker.getUserId();
            mCurrentUserId = mUserTracker.getUserId();
@@ -257,6 +284,21 @@ public class Clock extends TextView implements
            Dependency.get(TunerService.class).removeTunable(this);
            Dependency.get(TunerService.class).removeTunable(this);
            mCommandQueue.removeCallback(this);
            mCommandQueue.removeCallback(this);
            mUserTracker.removeCallback(mUserChangedCallback);
            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;
        }
        }
    }
    }


@@ -322,7 +364,7 @@ public class Clock extends TextView implements
    }
    }


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


    private void updateClockVisibility() {
    private void updateClockVisibility() {
@@ -436,6 +478,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() {
    private final CharSequence getSmallTime() {
        Context context = getContext();
        Context context = getContext();
        boolean is24 = DateFormat.is24HourFormat(context, mCurrentUserId);
        boolean is24 = DateFormat.is24HourFormat(context, mCurrentUserId);
@@ -575,5 +630,22 @@ public class Clock extends TextView implements
            mSecondsHandler.postAtTime(this, SystemClock.uptimeMillis() / 1000 * 1000 + 1000);
            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();
        }
    };
}
}