DemoModeFragment.java revision 259e06f58225e70716d3370d123e8dca830206a7
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            setGlobal(DEMO_MODE_ALLOWED, newValue == Boolean.TRUE ? 1 : 0);
107        } else if (preference == mOnSwitch) {
108            if (newValue == Boolean.TRUE) {
109                startDemoMode();
110            } else {
111                stopDemoMode();
112            }
113        } else {
114            return false;
115        }
116        return true;
117    }
118
119    private void startDemoMode() {
120        Intent intent = new Intent(DemoMode.ACTION_DEMO);
121
122        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_ENTER);
123        getContext().sendBroadcast(intent);
124
125        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_CLOCK);
126        intent.putExtra("hhmm", "0520");
127        getContext().sendBroadcast(intent);
128
129        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NETWORK);
130        intent.putExtra("wifi", "show");
131        intent.putExtra("mobile", "show");
132        intent.putExtra("sims", "1");
133        intent.putExtra("nosim", "false");
134        intent.putExtra("level", "4");
135        intent.putExtra("datatypel", "");
136        getContext().sendBroadcast(intent);
137
138        // Need to send this after so that the sim controller already exists.
139        intent.putExtra("fully", "true");
140        getContext().sendBroadcast(intent);
141
142        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_BATTERY);
143        intent.putExtra("level", "100");
144        intent.putExtra("plugged", "false");
145        getContext().sendBroadcast(intent);
146
147        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_STATUS);
148        for (String icon : STATUS_ICONS) {
149            intent.putExtra(icon, "hide");
150        }
151        getContext().sendBroadcast(intent);
152
153        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_NOTIFICATIONS);
154        intent.putExtra("visible", "false");
155        getContext().sendBroadcast(intent);
156
157        setGlobal(DEMO_MODE_ON, 1);
158    }
159
160    private void stopDemoMode() {
161        Intent intent = new Intent(DemoMode.ACTION_DEMO);
162        intent.putExtra(DemoMode.EXTRA_COMMAND, DemoMode.COMMAND_EXIT);
163        getContext().sendBroadcast(intent);
164        setGlobal(DEMO_MODE_ON, 0);
165    }
166
167    private void setGlobal(String key, int value) {
168        Settings.Global.putInt(getContext().getContentResolver(), key, value);
169    }
170
171    private final ContentObserver mDemoModeObserver =
172            new ContentObserver(new Handler(Looper.getMainLooper())) {
173        public void onChange(boolean selfChange) {
174            updateDemoModeEnabled();
175            updateDemoModeOn();
176        };
177    };
178}
179