DemoModeFragment.java revision 33b60bb45ff45540c4bd4f5d74f3ca5489f02088
1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.systemui.tuner;
17
18import android.content.ContentResolver;
19import android.content.Context;
20import android.content.Intent;
21import android.database.ContentObserver;
22import android.os.Bundle;
23import android.os.Handler;
24import android.os.Looper;
25import android.preference.Preference;
26import android.preference.Preference.OnPreferenceChangeListener;
27import android.preference.PreferenceFragment;
28import android.preference.PreferenceScreen;
29import android.preference.SwitchPreference;
30import android.provider.Settings;
31
32import com.android.systemui.DemoMode;
33import com.android.systemui.R;
34
35public class DemoModeFragment extends PreferenceFragment implements OnPreferenceChangeListener {
36
37    private static final String DEMO_MODE_ALLOWED = "sysui_demo_allowed";
38    private static final String DEMO_MODE_ON = "sysui_tuner_demo_on";
39
40    private static final String[] STATUS_ICONS = {
41        "volume",
42        "bluetooth",
43        "location",
44        "alarm",
45        "zen",
46        "sync",
47        "tty",
48        "eri",
49        "mute",
50        "speakerphone",
51        "managed_profile",
52    };
53
54    private SwitchPreference mEnabledSwitch;
55    private SwitchPreference mOnSwitch;
56
57    @Override
58    public void onCreate(Bundle savedInstanceState) {
59        super.onCreate(savedInstanceState);
60
61        Context context = getContext();
62        mEnabledSwitch = new SwitchPreference(context);
63        mEnabledSwitch.setTitle(R.string.enable_demo_mode);
64        mEnabledSwitch.setOnPreferenceChangeListener(this);
65        mOnSwitch = new SwitchPreference(context);
66        mOnSwitch.setTitle(R.string.show_demo_mode);
67        mOnSwitch.setEnabled(false);
68        mOnSwitch.setOnPreferenceChangeListener(this);
69
70        PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(context);
71        screen.addPreference(mEnabledSwitch);
72        screen.addPreference(mOnSwitch);
73        setPreferenceScreen(screen);
74
75        updateDemoModeEnabled();
76        updateDemoModeOn();
77        ContentResolver contentResolver = getContext().getContentResolver();
78        contentResolver.registerContentObserver(Settings.Global.getUriFor(DEMO_MODE_ALLOWED), false,
79                mDemoModeObserver);
80        contentResolver.registerContentObserver(Settings.Global.getUriFor(DEMO_MODE_ON), false,
81                mDemoModeObserver);
82    }
83
84    @Override
85    public void onDestroy() {
86        getContext().getContentResolver().unregisterContentObserver(mDemoModeObserver);
87        super.onDestroy();
88    }
89
90    private void updateDemoModeEnabled() {
91        boolean enabled = Settings.Global.getInt(getContext().getContentResolver(),
92                DEMO_MODE_ALLOWED, 0) != 0;
93        mEnabledSwitch.setChecked(enabled);
94        mOnSwitch.setEnabled(enabled);
95    }
96
97    private void updateDemoModeOn() {
98        boolean enabled = Settings.Global.getInt(getContext().getContentResolver(),
99                DEMO_MODE_ON, 0) != 0;
100        mOnSwitch.setChecked(enabled);
101    }
102
103    @Override
104    public boolean onPreferenceChange(Preference preference, Object newValue) {
105        if (preference == mEnabledSwitch) {
106            if (newValue != Boolean.TRUE) {
107                // Make sure we aren't in demo mode when disabling it.
108                mOnSwitch.setChecked(false);
109                stopDemoMode();
110            }
111            setGlobal(DEMO_MODE_ALLOWED, newValue == Boolean.TRUE ? 1 : 0);
112        } else if (preference == mOnSwitch) {
113            if (newValue == Boolean.TRUE) {
114                startDemoMode();
115            } else {
116                stopDemoMode();
117            }
118        } else {
119            return false;
120        }
121        return true;
122    }
123
124    private void startDemoMode() {
125        Intent intent = new Intent(DemoMode.ACTION_DEMO);
126
127        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_ENTER);
128        getContext().sendBroadcast(intent);
129
130        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_CLOCK);
131        intent.putExtra("hhmm", "0600");
132        getContext().sendBroadcast(intent);
133
134        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NETWORK);
135        intent.putExtra("wifi", "show");
136        intent.putExtra("mobile", "show");
137        intent.putExtra("sims", "1");
138        intent.putExtra("nosim", "false");
139        intent.putExtra("level", "4");
140        intent.putExtra("datatypel", "");
141        getContext().sendBroadcast(intent);
142
143        // Need to send this after so that the sim controller already exists.
144        intent.putExtra("fully", "true");
145        getContext().sendBroadcast(intent);
146
147        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_BATTERY);
148        intent.putExtra("level", "100");
149        intent.putExtra("plugged", "false");
150        getContext().sendBroadcast(intent);
151
152        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_STATUS);
153        for (String icon : STATUS_ICONS) {
154            intent.putExtra(icon, "hide");
155        }
156        getContext().sendBroadcast(intent);
157
158        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NOTIFICATIONS);
159        intent.putExtra("visible", "false");
160        getContext().sendBroadcast(intent);
161
162        setGlobal(DEMO_MODE_ON, 1);
163    }
164
165    private void stopDemoMode() {
166        Intent intent = new Intent(DemoMode.ACTION_DEMO);
167        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_EXIT);
168        getContext().sendBroadcast(intent);
169        setGlobal(DEMO_MODE_ON, 0);
170    }
171
172    private void setGlobal(String key, int value) {
173        Settings.Global.putInt(getContext().getContentResolver(), key, value);
174    }
175
176    private final ContentObserver mDemoModeObserver =
177            new ContentObserver(new Handler(Looper.getMainLooper())) {
178        public void onChange(boolean selfChange) {
179            updateDemoModeEnabled();
180            updateDemoModeOn();
181        };
182    };
183}
184