DemoModeFragment.java revision 431ad737a4752e9325894211c28bb0f0f97c00a7
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;
31import android.view.MenuItem;
32
33import com.android.systemui.DemoMode;
34import com.android.systemui.R;
35
36public class DemoModeFragment extends PreferenceFragment implements OnPreferenceChangeListener {
37
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(
79                DemoMode.DEMO_MODE_ALLOWED), false, mDemoModeObserver);
80        contentResolver.registerContentObserver(Settings.Global.getUriFor(DEMO_MODE_ON), false,
81                mDemoModeObserver);
82        setHasOptionsMenu(true);
83    }
84
85    @Override
86    public boolean onOptionsItemSelected(MenuItem item) {
87        switch (item.getItemId()) {
88            case android.R.id.home:
89                getFragmentManager().popBackStack();
90                break;
91        }
92        return super.onOptionsItemSelected(item);
93    }
94
95    @Override
96    public void onDestroy() {
97        getContext().getContentResolver().unregisterContentObserver(mDemoModeObserver);
98        super.onDestroy();
99    }
100
101    private void updateDemoModeEnabled() {
102        boolean enabled = Settings.Global.getInt(getContext().getContentResolver(),
103                DemoMode.DEMO_MODE_ALLOWED, 0) != 0;
104        mEnabledSwitch.setChecked(enabled);
105        mOnSwitch.setEnabled(enabled);
106    }
107
108    private void updateDemoModeOn() {
109        boolean enabled = Settings.Global.getInt(getContext().getContentResolver(),
110                DEMO_MODE_ON, 0) != 0;
111        mOnSwitch.setChecked(enabled);
112    }
113
114    @Override
115    public boolean onPreferenceChange(Preference preference, Object newValue) {
116        if (preference == mEnabledSwitch) {
117            if (newValue != Boolean.TRUE) {
118                // Make sure we aren't in demo mode when disabling it.
119                mOnSwitch.setChecked(false);
120                stopDemoMode();
121            }
122            setGlobal(DemoMode.DEMO_MODE_ALLOWED, newValue == Boolean.TRUE ? 1 : 0);
123        } else if (preference == mOnSwitch) {
124            if (newValue == Boolean.TRUE) {
125                startDemoMode();
126            } else {
127                stopDemoMode();
128            }
129        } else {
130            return false;
131        }
132        return true;
133    }
134
135    private void startDemoMode() {
136        Intent intent = new Intent(DemoMode.ACTION_DEMO);
137
138        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_ENTER);
139        getContext().sendBroadcast(intent);
140
141        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_CLOCK);
142        intent.putExtra("hhmm", "0600");
143        getContext().sendBroadcast(intent);
144
145        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NETWORK);
146        intent.putExtra("wifi", "show");
147        intent.putExtra("mobile", "show");
148        intent.putExtra("sims", "1");
149        intent.putExtra("nosim", "false");
150        intent.putExtra("level", "4");
151        intent.putExtra("datatypel", "");
152        getContext().sendBroadcast(intent);
153
154        // Need to send this after so that the sim controller already exists.
155        intent.putExtra("fully", "true");
156        getContext().sendBroadcast(intent);
157
158        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_BATTERY);
159        intent.putExtra("level", "100");
160        intent.putExtra("plugged", "false");
161        getContext().sendBroadcast(intent);
162
163        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_STATUS);
164        for (String icon : STATUS_ICONS) {
165            intent.putExtra(icon, "hide");
166        }
167        getContext().sendBroadcast(intent);
168
169        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NOTIFICATIONS);
170        intent.putExtra("visible", "false");
171        getContext().sendBroadcast(intent);
172
173        setGlobal(DEMO_MODE_ON, 1);
174    }
175
176    private void stopDemoMode() {
177        Intent intent = new Intent(DemoMode.ACTION_DEMO);
178        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_EXIT);
179        getContext().sendBroadcast(intent);
180        setGlobal(DEMO_MODE_ON, 0);
181    }
182
183    private void setGlobal(String key, int value) {
184        Settings.Global.putInt(getContext().getContentResolver(), key, value);
185    }
186
187    private final ContentObserver mDemoModeObserver =
188            new ContentObserver(new Handler(Looper.getMainLooper())) {
189        public void onChange(boolean selfChange) {
190            updateDemoModeEnabled();
191            updateDemoModeOn();
192        };
193    };
194}
195