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

Commit 31d4cad5 authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "SysUI Tuner: Add clock seconds option"

parents 8dc911ae fe7c91bb
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1140,4 +1140,9 @@
    <!-- Displayed when user launches an app that was uninstalled  [CHAR LIMIT=NONE] -->
    <string name="activity_not_found">Application is not installed on your device</string>

    <!-- Name of setting to show clock seconds [CHAR LIMIT=40] -->
    <string name="clock_seconds">Show clock seconds</string>
    <!-- Description of setting to show clock seconds [CHAR LIMIT=NONE] -->
    <string name="clock_seconds_desc">Show clock seconds in the status bar. May impact battery life.</string>

</resources>
+6 −0
Original line number Diff line number Diff line
@@ -72,10 +72,16 @@
        android:summary="@string/show_battery_percentage_summary"
        android:persistent="false" />

    <com.android.systemui.tuner.TunerSwitch
        android:key="clock_seconds"
        android:title="@string/clock_seconds"
        android:summary="@string/clock_seconds_desc" />

    <Preference
        android:key="demo_mode"
        android:title="@string/demo_mode" />

    <!-- Warning, this goes last. -->
    <Preference
        android:summary="@string/tuner_persistent_warning"
        android:selectable="false" />
+74 −4
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.os.UserHandle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
@@ -30,22 +32,28 @@ import android.text.format.DateFormat;
import android.text.style.CharacterStyle;
import android.text.style.RelativeSizeSpan;
import android.util.AttributeSet;
import android.view.Display;
import android.widget.TextView;

import com.android.systemui.DemoMode;
import com.android.systemui.R;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import libcore.icu.LocaleData;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;

import libcore.icu.LocaleData;

/**
 * Digital clock for the status bar.
 */
public class Clock extends TextView implements DemoMode {
public class Clock extends TextView implements DemoMode, Tunable {

    public static final String CLOCK_SECONDS = "clock_seconds";

    private boolean mAttached;
    private Calendar mCalendar;
    private String mClockFormatString;
@@ -57,6 +65,8 @@ public class Clock extends TextView implements DemoMode {
    private static final int AM_PM_STYLE_GONE    = 2;

    private final int mAmPmStyle;
    private boolean mShowSeconds;
    private Handler mSecondsHandler;

    public Clock(Context context) {
        this(context, null);
@@ -77,6 +87,7 @@ public class Clock extends TextView implements DemoMode {
        } finally {
            a.recycle();
        }
        TunerService.get(context).addTunable(this, CLOCK_SECONDS);
    }

    @Override
@@ -105,6 +116,7 @@ public class Clock extends TextView implements DemoMode {

        // Make sure we update to the current time
        updateClock();
        updateShowSeconds();
    }

    @Override
@@ -143,6 +155,35 @@ public class Clock extends TextView implements DemoMode {
        setText(getSmallTime());
    }

    @Override
    public void onTuningChanged(String key, String newValue) {
        mShowSeconds = newValue != null && Integer.parseInt(newValue) != 0;
        updateShowSeconds();
    }

    private void updateShowSeconds() {
        if (mShowSeconds) {
            // Wait until we have a display to start trying to show seconds.
            if (mSecondsHandler == null && getDisplay() != null) {
                mSecondsHandler = new Handler();
                if (getDisplay().getState() == Display.STATE_ON) {
                    mSecondsHandler.postAtTime(mSecondTick,
                            SystemClock.uptimeMillis() / 1000 * 1000 + 1000);
                }
                IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
                filter.addAction(Intent.ACTION_SCREEN_ON);
                mContext.registerReceiver(mScreenReceiver, filter);
            }
        } else {
            if (mSecondsHandler != null) {
                mContext.unregisterReceiver(mScreenReceiver);
                mSecondsHandler.removeCallbacks(mSecondTick);
                mSecondsHandler = null;
                updateClock();
            }
        }
    }

    private final CharSequence getSmallTime() {
        Context context = getContext();
        boolean is24 = DateFormat.is24HourFormat(context, ActivityManager.getCurrentUser());
@@ -152,7 +193,9 @@ public class Clock extends TextView implements DemoMode {
        final char MAGIC2 = '\uEF01';

        SimpleDateFormat sdf;
        String format = is24 ? d.timeFormat_Hm : d.timeFormat_hm;
        String format = mShowSeconds
                ? is24 ? d.timeFormat_Hms : d.timeFormat_hms
                : is24 ? d.timeFormat_Hm : d.timeFormat_hm;
        if (!format.equals(mClockFormatString)) {
            /*
             * Search for an unquoted "a" in the format string, so we can
@@ -244,5 +287,32 @@ public class Clock extends TextView implements DemoMode {
            setText(getSmallTime());
        }
    }

    private final BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                if (mSecondsHandler != null) {
                    mSecondsHandler.removeCallbacks(mSecondTick);
                }
            } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
                if (mSecondsHandler != null) {
                    mSecondsHandler.postAtTime(mSecondTick,
                            SystemClock.uptimeMillis() / 1000 * 1000 + 1000);
                }
            }
        }
    };

    private final Runnable mSecondTick = new Runnable() {
        @Override
        public void run() {
            if (mCalendar != null) {
                updateClock();
            }
            mSecondsHandler.postAtTime(this, SystemClock.uptimeMillis() / 1000 * 1000 + 1000);
        }
    };
}
+12 −0
Original line number Diff line number Diff line
@@ -37,6 +37,18 @@ public class StatusBarSwitch extends SwitchPreference implements Tunable {
        super(context, attrs);
    }

    @Override
    protected void onAttachedToActivity() {
        super.onAttachedToActivity();
        TunerService.get(getContext()).addTunable(this, StatusBarIconController.ICON_BLACKLIST);
    }

    @Override
    protected void onDetachedFromActivity() {
        TunerService.get(getContext()).removeTunable(this);
        super.onDetachedFromActivity();
    }

    @Override
    public void onTuningChanged(String key, String newValue) {
        if (!StatusBarIconController.ICON_BLACKLIST.equals(key)) {
+2 −33
Original line number Diff line number Diff line
@@ -15,8 +15,6 @@
 */
package com.android.systemui.tuner;

import static com.android.systemui.BatteryMeterView.SHOW_PERCENT_SETTING;

import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.content.DialogInterface;
@@ -29,7 +27,6 @@ import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup;
import android.preference.SwitchPreference;
import android.provider.Settings;
import android.provider.Settings.System;
@@ -39,8 +36,8 @@ import android.view.MenuItem;

import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.tuner.TunerService.Tunable;

import static com.android.systemui.BatteryMeterView.SHOW_PERCENT_SETTING;

public class TunerFragment extends PreferenceFragment {

@@ -108,7 +105,6 @@ public class TunerFragment extends PreferenceFragment {
        getContext().getContentResolver().registerContentObserver(
                System.getUriFor(SHOW_PERCENT_SETTING), false, mSettingObserver);

        registerPrefs(getPreferenceScreen());
        MetricsLogger.visibility(getContext(), MetricsLogger.TUNER, true);
    }

@@ -117,36 +113,9 @@ public class TunerFragment extends PreferenceFragment {
        super.onPause();
        getContext().getContentResolver().unregisterContentObserver(mSettingObserver);

        unregisterPrefs(getPreferenceScreen());
        MetricsLogger.visibility(getContext(), MetricsLogger.TUNER, false);
    }

    private void registerPrefs(PreferenceGroup group) {
        TunerService tunerService = TunerService.get(getContext());
        final int N = group.getPreferenceCount();
        for (int i = 0; i < N; i++) {
            Preference pref = group.getPreference(i);
            if (pref instanceof StatusBarSwitch) {
                tunerService.addTunable((Tunable) pref, StatusBarIconController.ICON_BLACKLIST);
            } else if (pref instanceof PreferenceGroup) {
                registerPrefs((PreferenceGroup) pref);
            }
        }
    }

    private void unregisterPrefs(PreferenceGroup group) {
        TunerService tunerService = TunerService.get(getContext());
        final int N = group.getPreferenceCount();
        for (int i = 0; i < N; i++) {
            Preference pref = group.getPreference(i);
            if (pref instanceof Tunable) {
                tunerService.removeTunable((Tunable) pref);
            } else if (pref instanceof PreferenceGroup) {
                registerPrefs((PreferenceGroup) pref);
            }
        }
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.add(Menu.NONE, MENU_REMOVE, Menu.NONE, R.string.remove_from_settings);
Loading