ZenModeSettings.java revision 019b87f17a51fef7fd4b6696dbea5c50fe8b6d07
172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock/*
272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * Copyright (C) 2014 The Android Open Source Project
372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *
472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License");
572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * you may not use this file except in compliance with the License.
672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * You may obtain a copy of the License at
772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *
872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *      http://www.apache.org/licenses/LICENSE-2.0
972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock *
1072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * Unless required by applicable law or agreed to in writing, software
1172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS,
1272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * See the License for the specific language governing permissions and
1472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock * limitations under the License.
1572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock */
1672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
1772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockpackage com.android.settings;
1872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
197f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.app.ActionBar;
207f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.app.Activity;
2172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.content.Context;
227f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.database.ContentObserver;
23019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport android.content.res.Resources;
2472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.graphics.Typeface;
2572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.graphics.drawable.Drawable;
267f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.net.Uri;
277f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.os.AsyncTask;
2872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.os.Bundle;
297f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.os.Handler;
307f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.provider.Settings.Global;
31019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport android.provider.SearchIndexableResource;
3272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.util.Log;
3372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.util.TypedValue;
3472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.view.Gravity;
3572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.view.LayoutInflater;
363726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlockimport android.view.Menu;
373726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlockimport android.view.MenuInflater;
383726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlockimport android.view.MenuItem;
3972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.view.View;
4072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.view.ViewGroup;
4172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.widget.CompoundButton;
4272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.widget.CompoundButton.OnCheckedChangeListener;
4372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.widget.LinearLayout;
4472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.widget.RelativeLayout;
4572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.widget.ScrollView;
467f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlockimport android.widget.Switch;
4772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlockimport android.widget.TextView;
48019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport com.android.settings.search.Indexable;
49019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport com.android.settings.search.SearchIndexableRaw;
5072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
51019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport java.util.ArrayList;
52019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglioimport java.util.List;
53019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
54019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Megliopublic class ZenModeSettings extends SettingsPreferenceFragment implements Indexable {
5572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    private static final String TAG = "ZenModeSettings";
5672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    private static final boolean DEBUG = false;
5772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
587f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    private final Handler mHandler = new Handler();
597f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    private final SettingsObserver mSettingsObserver = new SettingsObserver();
607f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
6172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    private ZenModeConfigView mConfig;
627f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    private Switch mSwitch;
633726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock    private Activity mActivity;
643726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock    private MenuItem mSearch;
657f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
667f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    @Override
677f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    public void onCreate(Bundle icicle) {
687f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        super.onCreate(icicle);
693726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mActivity = getActivity();
703726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mSwitch = new Switch(mActivity);
713726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        final int p = getResources().getDimensionPixelSize(R.dimen.content_margin_left);
723726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mSwitch.setPadding(0, 0, p, 0);
733726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        setHasOptionsMenu(true);
747f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    }
757f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
767f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    @Override
773726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
783726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        super.onCreateOptionsMenu(menu, inflater);
793726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mSearch = menu.findItem(R.id.search);
803726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        if (mSearch != null) mSearch.setVisible(false);
817f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    }
827f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
837f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    @Override
847f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    public void onResume() {
857f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        super.onResume();
867f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        updateState();
877f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        mSettingsObserver.register();
883726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mActivity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
893726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                ActionBar.DISPLAY_SHOW_CUSTOM);
903726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mActivity.getActionBar().setCustomView(mSwitch, new ActionBar.LayoutParams(
913726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                ActionBar.LayoutParams.WRAP_CONTENT,
923726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                ActionBar.LayoutParams.WRAP_CONTENT,
933726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                Gravity.CENTER_VERTICAL | Gravity.END));
943726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        if (mSearch != null) mSearch.setVisible(false);
953726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock    }
963726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock
973726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock    @Override
983726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock    public void onPause() {
993726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        super.onPause();
1003726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mSettingsObserver.unregister();
1013726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        mActivity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
1023726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock        if (mSearch != null) mSearch.setVisible(true);
1037f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    }
1047f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
1057f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    private final class SettingsObserver extends ContentObserver {
1067f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        private final Uri ZEN_MODE_URI = Global.getUriFor(Global.ZEN_MODE);
1077f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
1087f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        public SettingsObserver() {
1097f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            super(mHandler);
1107f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        }
1117f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
1127f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        public void register() {
1137f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            getContentResolver().registerContentObserver(ZEN_MODE_URI, false, this);
1147f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        }
1157f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
1167f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        public void unregister() {
1177f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            getContentResolver().unregisterContentObserver(this);
1187f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        }
1197f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
1207f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        @Override
1217f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        public void onChange(boolean selfChange, Uri uri) {
1227f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            super.onChange(selfChange, uri);
1237f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            if (ZEN_MODE_URI.equals(uri)) {
1247f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                updateState();
1257f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            }
1267f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        }
1277f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    };
1287f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
1297f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    private void updateState() {
1307f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        mSwitch.setOnCheckedChangeListener(null);
1317f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        final boolean zenMode = Global.getInt(getContentResolver(),
1327f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                Global.ZEN_MODE, Global.ZEN_MODE_OFF) != Global.ZEN_MODE_OFF;
1337f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        mSwitch.setChecked(zenMode);
1347f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        mSwitch.setOnCheckedChangeListener(mSwitchListener);
1357f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    }
13672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
13772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    @Override
13872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    public View onCreateView(LayoutInflater inflater, ViewGroup container,
13972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            Bundle savedInstanceState) {
14072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        final Context context = getActivity();
14172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        final ScrollView sv = new ScrollView(context);
14272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        sv.setVerticalScrollBarEnabled(false);
14372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        sv.setHorizontalScrollBarEnabled(false);
14472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        mConfig = new ZenModeConfigView(context);
14572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        sv.addView(mConfig);
14672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        return sv;
14772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    }
14872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
14972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    @Override
15072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    public void onDestroyView() {
15172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        super.onDestroyView();
15272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        mConfig.resetBackground();
15372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    }
15472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
1557f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    private final OnCheckedChangeListener mSwitchListener = new OnCheckedChangeListener() {
1567f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        @Override
1577f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        public void onCheckedChanged(CompoundButton buttonView, final boolean isChecked) {
1587f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            AsyncTask.execute(new Runnable() {
1597f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                @Override
1607f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                public void run() {
1617f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                    final int v = isChecked ? Global.ZEN_MODE_ON : Global.ZEN_MODE_OFF;
1627f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                    Global.putInt(getContentResolver(), Global.ZEN_MODE, v);
1637f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock                }
1647f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock            });
1657f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock        }
1667f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock    };
1677f502bf824955b2b3a43f8f7f32c00cf00f736feJohn Spurlock
16872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    public static final class ZenModeConfigView extends LinearLayout {
16972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private static final Typeface LIGHT =
17072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                Typeface.create("sans-serif-light", Typeface.NORMAL);
17172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private static final int BG_COLOR = 0xffe7e8e9;
17272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private final Context mContext;
17372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
17472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private Drawable mOldBackground;
17572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
17672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        public ZenModeConfigView(Context context) {
17772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            super(context);
17872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            mContext = context;
17972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            setOrientation(VERTICAL);
18072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
18172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            int p = getResources().getDimensionPixelSize(R.dimen.content_margin_left);
18272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            TextView tv = addHeader("When on");
18372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv.setPadding(0, p / 2, 0, p / 4);
18472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addBuckets();
18572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv = addHeader("Automatically turn on");
18672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv.setPadding(0, p / 2, 0, p / 4);
18772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addTriggers();
18872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
18972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
19072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        @Override
19172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        protected void onAttachedToWindow() {
19272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            super.onAttachedToWindow();
19372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            mOldBackground = getParentView().getBackground();
19472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            if (DEBUG) Log.d(TAG, "onAttachedToWindow mOldBackground=" + mOldBackground);
19572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            getParentView().setBackgroundColor(BG_COLOR);
19672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
19772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
19872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        public void resetBackground() {
19972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            if (DEBUG) Log.d(TAG, "resetBackground");
20072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            getParentView().setBackground(mOldBackground);
20172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
20272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
20372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private View getParentView() {
20472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            return (View)getParent().getParent();
20572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
20672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
20772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private TextView addHeader(String text) {
20872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            TextView tv = new TextView(mContext);
20972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv.setTypeface(LIGHT);
21072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv.setTextColor(0x7f000000);
21172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() * 1.5f);
21272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            tv.setText(text);
21372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addView(tv);
21472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            return tv;
21572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
21672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
21772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private void addTriggers() {
2183726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock            addView(new TriggerView("Never"));
21972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
22072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
22172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private void addBuckets() {
22272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,
22372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                    LayoutParams.WRAP_CONTENT);
2243726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock            BucketView callView = new BucketView("Phone calls", 0,
2253726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                    "Block all", "Block all except...", "Allow all");
22672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addView(callView, lp);
22772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            lp.topMargin = 4;
2283726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock            BucketView msgView = new BucketView("Texts, SMS, & other calls", 0,
2293726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                    "Block all", "Block all except...", "Allow all");
23072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addView(msgView, lp);
2313726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock            BucketView alarmView = new BucketView("Alarms & timers", 2,
2323726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                    "Block all", "Block all except...", "Allow all");
23372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addView(alarmView, lp);
2343726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock            BucketView otherView = new BucketView("Other interruptions", 0,
2353726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                    "Block all", "Block all except...", "Allow all");
23672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            addView(otherView, lp);
23772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
23872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
23972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private class BucketView extends RelativeLayout {
2403726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock            public BucketView(String category, int defaultValue, String... values) {
24172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                super(ZenModeConfigView.this.mContext);
24272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
24372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                setBackgroundColor(0xffffffff);
24472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                final int p = getResources().getDimensionPixelSize(R.dimen.content_margin_left);
2453726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                final int lm = p * 3 / 4;
2463726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                TextView title = new TextView(mContext);
2473726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                title.setId(android.R.id.title);
2483726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                title.setTextColor(0xff000000);
2493726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                title.setTypeface(LIGHT);
2503726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                title.setText(category);
2513726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                title.setTextSize(TypedValue.COMPLEX_UNIT_PX, title.getTextSize() * 1.5f);
2523726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                LayoutParams lp =
2533726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                        new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
25472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                lp.topMargin = p / 2;
2553726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.leftMargin = lm;
2563726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                addView(title, lp);
25772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
2583726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                TextView subtitle = new TextView(mContext);
2593726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                subtitle.setTextColor(0xff000000);
2603726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                subtitle.setTypeface(LIGHT);
2613726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                subtitle.setText(values[defaultValue]);
26272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
2633726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.addRule(BELOW, title.getId());
2643726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.leftMargin = lm;
2653726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.bottomMargin = p / 2;
2663726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                addView(subtitle, lp);
26772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            }
26872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
26972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
27072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        private class TriggerView extends RelativeLayout {
27172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            public TriggerView(String text) {
27272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                super(ZenModeConfigView.this.mContext);
27372438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
27472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                setBackgroundColor(0xffffffff);
27572438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                final int p = getResources().getDimensionPixelSize(R.dimen.content_margin_left);
27672438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock
27772438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                final TextView tv = new TextView(mContext);
27872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                tv.setText(text);
27972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                tv.setTypeface(LIGHT);
28072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                tv.setTextColor(0xff000000);
28172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize() * 1.5f);
2823726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                LayoutParams lp =
2833726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                        new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
28472438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                lp.addRule(CENTER_VERTICAL);
2853726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.bottomMargin = p / 2;
2863726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.topMargin = p / 2;
2873726525d50d480a3d954c103a844f0c4b3c7d3e0John Spurlock                lp.leftMargin = p * 3 / 4;
28872438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock                addView(tv, lp);
28972438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock            }
29072438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock        }
29172438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock    }
292019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
293019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio    // Enable indexing of searchable data
294019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
295019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio        new Indexable.SearchIndexProvider() {
296019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
297019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio            @Override
298019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio            public List<SearchIndexableResource> getXmlResourcesToIndex(
299019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                    Context context, boolean enabled) {
300019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                return null;
301019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio            }
302019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
303019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio            @Override
304019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio            public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
305019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
306019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                final Resources res = context.getResources();
307019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
308019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                SearchIndexableRaw data = new SearchIndexableRaw(context);
309019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = res.getString(R.string.zen_mode_settings_title);
310019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
311019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
312019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
313019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
314019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "When on";
315019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
316019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
317019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
318019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
319019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "Calls";
320019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
321019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
322019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
323019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
324019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "Text & SMS Messages";
325019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
326019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
327019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
328019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
329019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "Alarms & Timers";
330019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
331019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
332019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
333019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
334019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "Other Interruptions";
335019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
336019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
337019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
338019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
339019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "Automatically turn on";
340019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
341019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
342019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
343019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
344019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "While driving";
345019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
346019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
347019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
348019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
349019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "While in meetings";
350019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
351019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
352019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
353019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data = new SearchIndexableRaw(context);
354019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.title = "During a set time period";
355019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                data.screenTitle = res.getString(R.string.zen_mode_settings_title);
356019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                result.add(data);
357019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
358019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio                return result;
359019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio            }
360019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio        };
361019b87f17a51fef7fd4b6696dbea5c50fe8b6d07Fabrice Di Meglio
36272438063453d2141218cf7fa4d8c1da6de6cbf4cJohn Spurlock}
363