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