From 7f502bf824955b2b3a43f8f7f32c00cf00f736fe Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Thu, 27 Mar 2014 10:21:04 -0400 Subject: [PATCH] Add switch to zen mode settings preference page. Bug:13670014 Change-Id: Id45841818e2fe8f57b5db47df3b0add06be6967a --- src/com/android/settings/ZenModeSettings.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/com/android/settings/ZenModeSettings.java b/src/com/android/settings/ZenModeSettings.java index a0ce9d72cfa..3dae7f2f73f 100644 --- a/src/com/android/settings/ZenModeSettings.java +++ b/src/com/android/settings/ZenModeSettings.java @@ -16,13 +16,20 @@ package com.android.settings; +import android.app.ActionBar; +import android.app.Activity; import android.content.Context; +import android.database.ContentObserver; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Typeface; import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings.Global; import android.util.Log; import android.util.TypedValue; import android.view.Gravity; @@ -39,6 +46,7 @@ import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.Spinner; +import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; @@ -46,7 +54,69 @@ public class ZenModeSettings extends SettingsPreferenceFragment { private static final String TAG = "ZenModeSettings"; private static final boolean DEBUG = false; + private final Handler mHandler = new Handler(); + private final SettingsObserver mSettingsObserver = new SettingsObserver(); + private ZenModeConfigView mConfig; + private Switch mSwitch; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + final Activity activity = getActivity(); + mSwitch = new Switch(activity); + activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, + ActionBar.DISPLAY_SHOW_CUSTOM); + activity.getActionBar().setCustomView(mSwitch, new ActionBar.LayoutParams( + ActionBar.LayoutParams.WRAP_CONTENT, + ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END)); + } + + @Override + public void onPause() { + super.onPause(); + mSettingsObserver.unregister(); + } + + @Override + public void onResume() { + super.onResume(); + updateState(); + mSettingsObserver.register(); + } + + private final class SettingsObserver extends ContentObserver { + private final Uri ZEN_MODE_URI = Global.getUriFor(Global.ZEN_MODE); + + public SettingsObserver() { + super(mHandler); + } + + public void register() { + getContentResolver().registerContentObserver(ZEN_MODE_URI, false, this); + } + + public void unregister() { + getContentResolver().unregisterContentObserver(this); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + super.onChange(selfChange, uri); + if (ZEN_MODE_URI.equals(uri)) { + updateState(); + } + } + }; + + private void updateState() { + mSwitch.setOnCheckedChangeListener(null); + final boolean zenMode = Global.getInt(getContentResolver(), + Global.ZEN_MODE, Global.ZEN_MODE_OFF) != Global.ZEN_MODE_OFF; + mSwitch.setChecked(zenMode); + mSwitch.setOnCheckedChangeListener(mSwitchListener); + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -66,6 +136,19 @@ public class ZenModeSettings extends SettingsPreferenceFragment { mConfig.resetBackground(); } + private final OnCheckedChangeListener mSwitchListener = new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, final boolean isChecked) { + AsyncTask.execute(new Runnable() { + @Override + public void run() { + final int v = isChecked ? Global.ZEN_MODE_ON : Global.ZEN_MODE_OFF; + Global.putInt(getContentResolver(), Global.ZEN_MODE, v); + } + }); + } + }; + public static final class ZenModeConfigView extends LinearLayout { private static final Typeface LIGHT = Typeface.create("sans-serif-light", Typeface.NORMAL);