Loading packages/SystemUI/res/values/strings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -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> packages/SystemUI/res/xml/tuner_prefs.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +74 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -77,6 +87,7 @@ public class Clock extends TextView implements DemoMode { } finally { a.recycle(); } TunerService.get(context).addTunable(this, CLOCK_SECONDS); } @Override Loading Loading @@ -105,6 +116,7 @@ public class Clock extends TextView implements DemoMode { // Make sure we update to the current time updateClock(); updateShowSeconds(); } @Override Loading Loading @@ -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()); Loading @@ -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 Loading Loading @@ -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); } }; } packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java +12 −0 Original line number Diff line number Diff line Loading @@ -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)) { Loading packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java +2 −33 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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); } Loading @@ -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 Loading
packages/SystemUI/res/values/strings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -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>
packages/SystemUI/res/xml/tuner_prefs.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +74 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -77,6 +87,7 @@ public class Clock extends TextView implements DemoMode { } finally { a.recycle(); } TunerService.get(context).addTunable(this, CLOCK_SECONDS); } @Override Loading Loading @@ -105,6 +116,7 @@ public class Clock extends TextView implements DemoMode { // Make sure we update to the current time updateClock(); updateShowSeconds(); } @Override Loading Loading @@ -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()); Loading @@ -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 Loading Loading @@ -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); } }; }
packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java +12 −0 Original line number Diff line number Diff line Loading @@ -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)) { Loading
packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java +2 −33 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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); } Loading @@ -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