diff options
| author | 2015-08-20 15:42:15 +0000 | |
|---|---|---|
| committer | 2015-08-20 15:42:15 +0000 | |
| commit | 31d4cad5ae87b5775722ba0f26eb53bd588f8654 (patch) | |
| tree | df741b40805ef716ca9594e0aef31222bc622209 | |
| parent | 8dc911aef43dbd6ba81ba0f73d805f324b68240e (diff) | |
| parent | fe7c91bb6031622ca576454926db875c0c8ac0d8 (diff) | |
Merge "SysUI Tuner: Add clock seconds option"
6 files changed, 138 insertions, 37 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 918d85666b79..8b3f2d8bab3c 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -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> diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index 3a41c3c540bd..beb863c44925 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -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" /> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java index 61986adc1d65..896bd62f9969 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java @@ -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); + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java index e5b550e82bdb..dcb0d8d0c498 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/StatusBarSwitch.java @@ -38,6 +38,18 @@ public class StatusBarSwitch extends SwitchPreference implements Tunable { } @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)) { return; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java index 71b5de56444b..96ad756b4e94 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerFragment.java @@ -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); diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java new file mode 100644 index 000000000000..0740e0808529 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java @@ -0,0 +1,39 @@ +package com.android.systemui.tuner; + +import android.content.Context; +import android.preference.SwitchPreference; +import android.provider.Settings; +import android.util.AttributeSet; + +import com.android.systemui.tuner.TunerService.Tunable; + +public class TunerSwitch extends SwitchPreference implements Tunable { + + public TunerSwitch(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onAttachedToActivity() { + super.onAttachedToActivity(); + TunerService.get(getContext()).addTunable(this, getKey()); + } + + @Override + protected void onDetachedFromActivity() { + TunerService.get(getContext()).removeTunable(this); + super.onDetachedFromActivity(); + } + + @Override + public void onTuningChanged(String key, String newValue) { + setChecked(newValue != null && Integer.parseInt(newValue) != 0); + } + + @Override + protected boolean persistBoolean(boolean value) { + Settings.Secure.putString(getContext().getContentResolver(), getKey(), value ? "1" : "0"); + return true; + } + +} |