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

Unverified Commit 91bd0ac2 authored by Luca Stefani's avatar Luca Stefani Committed by Michael Bestas
Browse files

SystemUI: Clock position customization



Co-authored-by: default avatarHendrik Hagendorn <git@finnq.de>
Co-authored-by: default avatarkxxt <rsworktech@outlook.com>
Co-authored-by: default avatarLuK1337 <priv.luk@gmail.com>
Co-authored-by: default avatarMichael W <baddaemon87@gmail.com>
Co-authored-by: default avatarPranav Vashi <neobuddy89@gmail.com>
Co-authored-by: default avatarVolodymyr Zhdanov <wight554@gmail.com>
Co-authored-by: default avatarkxxt <rsworktech@outlook.com>
Change-Id: Icdc039d13fd2676c1eb979a81fb77f9a6ec59b4a
parent ba4f4448
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -157,4 +157,23 @@
        </FrameLayout>
    </LinearLayout>

    <com.android.keyguard.AlphaOptimizedLinearLayout
        android:id="@+id/centered_area"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="@dimen/status_bar_padding_top"
        >
        <com.android.systemui.statusbar.policy.Clock
            android:id="@+id/clock_center"
            android:textAppearance="@style/TextAppearance.StatusBar.Clock"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/status_bar_system_icons_height"
            android:singleLine="true"
            android:gravity="center"
            android:visibility="gone"
        />
    </com.android.keyguard.AlphaOptimizedLinearLayout>

</com.android.systemui.statusbar.phone.PhoneStatusBarView>
+19 −0
Original line number Diff line number Diff line
@@ -42,4 +42,23 @@
        android:clipChildren="false"
        android:paddingEnd="@dimen/status_bar_battery_end_padding"
        systemui:textAppearance="@style/TextAppearance.StatusBar.Clock" />

    <com.android.keyguard.AlphaOptimizedLinearLayout
        android:id="@+id/right_clock_layout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >
        <com.android.systemui.statusbar.policy.Clock
            android:id="@+id/clock_right"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/status_bar_system_icons_height"
            android:textAppearance="@style/TextAppearance.StatusBar.Clock"
            android:singleLine="true"
            android:paddingStart="@dimen/status_bar_clock_starting_padding"
            android:paddingEnd="@dimen/status_bar_clock_end_padding"
            android:gravity="center_vertical"
            android:visibility="gone"
        />
    </com.android.keyguard.AlphaOptimizedLinearLayout>
</LinearLayout>
+3 −0
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@
 */
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- Name of the clock in status bar [CHAR LIMIT=30] -->
    <string name="clock">Clock</string>

    <!-- Advanced restart menu -->
    <!-- Button to indicate more options -->
    <string name="global_action_restart_more">Restart\u2026</string>
+3 −4
Original line number Diff line number Diff line
@@ -116,11 +116,10 @@

    <!-- secure -->

    <com.android.systemui.tuner.ClockPreference
    <com.android.systemui.tuner.StatusBarSwitch
        android:icon="@drawable/ic_statusbar_clock"
        android:title="@string/tuner_time"
        android:summary="%s"
        android:entries="@array/clock_options" />
        android:key="clock"
        android:title="@string/clock" />

    <com.android.systemui.tuner.TunerSwitch
        android:icon="@drawable/ic_statusbar_priority"
+118 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018-2023 The LineageOS Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.phone;

import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.provider.Settings;
import android.view.View;

import androidx.annotation.Nullable;

import com.android.systemui.Dependency;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.phone.ui.StatusBarIconController;
import com.android.systemui.statusbar.policy.Clock;

import lineageos.providers.LineageSettings;

public class ClockController {

    private static final String TAG = "ClockController";

    private static final int CLOCK_POSITION_RIGHT = 0;
    private static final int CLOCK_POSITION_CENTER = 1;
    private static final int CLOCK_POSITION_LEFT = 2;

    private Context mContext;
    private Clock mActiveClock, mCenterClock, mLeftClock, mRightClock;

    private int mClockPosition;
    private boolean mDenyListed;

    public ClockController(Context context, View statusBar) {
        mContext = context;

        mCenterClock = statusBar.findViewById(R.id.clock_center);
        mLeftClock = statusBar.findViewById(R.id.clock);
        mRightClock = statusBar.findViewById(R.id.clock_right);

        mActiveClock = mLeftClock;

        Uri iconHideList = Settings.Secure.getUriFor(StatusBarIconController.ICON_HIDE_LIST);
        Uri statusBarClock = LineageSettings.System.getUriFor(
                LineageSettings.System.STATUS_BAR_CLOCK);
        ContentObserver contentObserver = new ContentObserver(null) {
            @Override
            public void onChange(boolean selfChange, @Nullable Uri uri) {
                if (iconHideList.equals(uri)) {
                    mDenyListed = StatusBarIconController.getIconHideList(mContext,
                            Settings.Secure.getString(mContext.getContentResolver(),
                                    StatusBarIconController.ICON_HIDE_LIST)).contains("clock");
                } else if (statusBarClock.equals(uri)) {
                    mClockPosition = LineageSettings.System.getInt(mContext.getContentResolver(),
                            LineageSettings.System.STATUS_BAR_CLOCK, CLOCK_POSITION_LEFT);
                }
                updateActiveClock();
            }
        };
        mContext.getContentResolver().registerContentObserver(iconHideList, false, contentObserver);
        mContext.getContentResolver().registerContentObserver(statusBarClock, false,
                contentObserver);
        contentObserver.onChange(true, iconHideList);
        contentObserver.onChange(true, statusBarClock);
    }

    public Clock getClock() {
        switch (mClockPosition) {
            case CLOCK_POSITION_RIGHT:
                return mRightClock;
            case CLOCK_POSITION_CENTER:
                return mCenterClock;
            case CLOCK_POSITION_LEFT:
            default:
                return mLeftClock;
        }
    }

    private void updateActiveClock() {
        mContext.getMainExecutor().execute(() -> {
            mActiveClock.setClockVisibleByUser(false);
            removeDarkReceiver();
            mActiveClock = getClock();
            mActiveClock.setClockVisibleByUser(true);
            addDarkReceiver();

            // Override any previous setting
            mActiveClock.setClockVisibleByUser(!mDenyListed);
        });
    }

    public void addDarkReceiver() {
        Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mActiveClock);
    }

    public void removeDarkReceiver() {
        Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(mActiveClock);
    }

    public void onDensityOrFontScaleChanged() {
        mActiveClock.onDensityOrFontScaleChanged();
    }
}
Loading