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