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