1c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project/* 2c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * 4c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * you may not use this file except in compliance with the License. 6c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * You may obtain a copy of the License at 7c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * 8c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * 10c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * See the License for the specific language governing permissions and 14c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * limitations under the License. 15c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 16c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 17c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectpackage com.android.internal.policy.impl; 18c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 19c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport com.android.internal.R; 20cbaa463dd167ad9a1f0f4e1eba65bb3f0285db95Dianne Hackbornimport com.android.internal.app.ShutdownThread; 21c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport com.google.android.collect.Lists; 22c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 23c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.app.AlertDialog; 24c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.app.StatusBarManager; 25c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.content.Context; 26c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.content.BroadcastReceiver; 27c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.content.Intent; 28c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.content.IntentFilter; 29c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.content.DialogInterface; 30c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.media.AudioManager; 31c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.os.LocalPowerManager; 32c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.os.Handler; 33c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.os.Message; 34c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.os.SystemClock; 35c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.view.LayoutInflater; 36c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.view.View; 37c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.view.ViewGroup; 38c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.view.WindowManager; 39c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.widget.BaseAdapter; 40c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.widget.ImageView; 41c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.widget.LinearLayout; 42c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport android.widget.TextView; 43c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 44c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectimport java.util.ArrayList; 45c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 46c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project/** 47c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * Helper to show the global actions dialog. Each item is an {@link Action} that 48c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * may show depending on whether the keyguard is showing, and whether the device 49c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * is provisioned. 50c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 51c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Projectclass GlobalActions implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener { 52c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 53c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private StatusBarManager mStatusBar; 54c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 55c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final Context mContext; 56c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final LocalPowerManager mPowerManager; 57c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final AudioManager mAudioManager; 58c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private ArrayList<Action> mItems; 59c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private AlertDialog mDialog; 60c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 61c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private ToggleAction mSilentModeToggle; 62c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 63c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private MyAdapter mAdapter; 64c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 65c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private boolean mKeyguardShowing = false; 66c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private boolean mDeviceProvisioned = false; 67c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 68c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 69c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param context everything needs a context :) 70c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param powerManager used to turn the screen off (the lock action). 71c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 72c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public GlobalActions(Context context, LocalPowerManager powerManager) { 73c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mContext = context; 74c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mPowerManager = powerManager; 75c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); 76c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 77c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // receive broadcasts 78c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project IntentFilter filter = new IntentFilter(); 79c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 80c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project context.registerReceiver(mBroadcastReceiver, filter); 81c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 82c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 83c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 84c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * Show the global actions dialog (creating if necessary) 85c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param keyguardShowing True if keyguard is showing 86c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 87c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void showDialog(boolean keyguardShowing, boolean isDeviceProvisioned) { 88c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mKeyguardShowing = keyguardShowing; 89c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDeviceProvisioned = isDeviceProvisioned; 90c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (mDialog == null) { 91c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mStatusBar = (StatusBarManager)mContext.getSystemService(Context.STATUS_BAR_SERVICE); 92c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDialog = createDialog(); 93c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 94c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project prepareDialog(); 95c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 96c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mStatusBar.disable(StatusBarManager.DISABLE_EXPAND); 97c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDialog.show(); 98c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 99c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 100c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 101c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * Create the global actions dialog. 102c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @return A new dialog. 103c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 104c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private AlertDialog createDialog() { 105c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 106c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mSilentModeToggle = new ToggleAction( 107c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project R.drawable.ic_lock_silent_mode, 108c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project R.drawable.ic_lock_silent_mode_off, 109c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project R.string.global_action_toggle_silent_mode, 110c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project R.string.global_action_silent_mode_on_status, 111c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project R.string.global_action_silent_mode_off_status) { 112c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 113c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project void onToggle(boolean on) { 114c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mAudioManager.setRingerMode(on ? AudioManager.RINGER_MODE_SILENT 115c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project : AudioManager.RINGER_MODE_NORMAL); 116c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 117c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 118c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public boolean showDuringKeyguard() { 119c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return true; 120c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 121c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 122c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public boolean showBeforeProvisioning() { 123c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return false; 124c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 125c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project }; 126c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 127c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mItems = Lists.newArrayList( 128c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // first: lock screen 129c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project new SinglePressAction(com.android.internal.R.drawable.ic_lock_lock, R.string.global_action_lock) { 130c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 131c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void onPress() { 132c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mPowerManager.goToSleep(SystemClock.uptimeMillis() + 1); 133c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 134c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 135c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public boolean showDuringKeyguard() { 136c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return false; 137c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 138c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 139c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public boolean showBeforeProvisioning() { 140c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return false; 141c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 142c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project }, 143c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // next: silent mode 144c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mSilentModeToggle, 145c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // last: power off 146c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project new SinglePressAction(com.android.internal.R.drawable.ic_lock_power_off, R.string.global_action_power_off) { 147c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 148c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void onPress() { 149c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // shutdown by making sure radio and power are handled accordingly. 150cbaa463dd167ad9a1f0f4e1eba65bb3f0285db95Dianne Hackborn ShutdownThread.shutdown(mContext, true); 151c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 152c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 153c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public boolean showDuringKeyguard() { 154c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return true; 155c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 156c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 157c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public boolean showBeforeProvisioning() { 158c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return true; 159c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 160c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project }); 161c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 162c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mAdapter = new MyAdapter(); 163c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 164c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project final AlertDialog.Builder ab = new AlertDialog.Builder(mContext); 165c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 166c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project ab.setAdapter(mAdapter, this) 167c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project .setInverseBackgroundForced(true) 168c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project .setTitle(R.string.global_actions); 169c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 170c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project final AlertDialog dialog = ab.create(); 171c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); 172c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, 173c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 174c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 175c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project dialog.setOnDismissListener(this); 176c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 177c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return dialog; 178c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 179c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 180c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private void prepareDialog() { 181c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // TODO: May need another 'Vibrate' toggle button, but for now treat them the same 182c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project final boolean silentModeOn = 183c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL; 184c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mSilentModeToggle.updateState(silentModeOn); 185c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mAdapter.notifyDataSetChanged(); 186c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (mKeyguardShowing) { 187c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 188c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } else { 189c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); 190c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 191c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 192c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 193c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** {@inheritDoc} */ 194c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void onDismiss(DialogInterface dialog) { 195c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mStatusBar.disable(StatusBarManager.DISABLE_NONE); 196c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 197c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 198c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** {@inheritDoc} */ 199c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void onClick(DialogInterface dialog, int which) { 200c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project dialog.dismiss(); 201c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mAdapter.getItem(which).onPress(); 202c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 203c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 204c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 205c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 206c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * The adapter used for the list within the global actions dialog, taking 207c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * into account whether the keyguard is showing via 208c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * {@link GlobalActions#mKeyguardShowing} and whether the device is provisioned 209c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * via {@link GlobalActions#mDeviceProvisioned}. 210c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 211c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private class MyAdapter extends BaseAdapter { 212c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 213c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public int getCount() { 214c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project int count = 0; 215c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 216c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project for (int i = 0; i < mItems.size(); i++) { 217c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project final Action action = mItems.get(i); 218c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 219c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (mKeyguardShowing && !action.showDuringKeyguard()) { 220c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project continue; 221c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 222c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (!mDeviceProvisioned && !action.showBeforeProvisioning()) { 223c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project continue; 224c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 225c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project count++; 226c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 227c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return count; 228c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 229c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 230c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public Action getItem(int position) { 231c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 232c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project int filteredPos = 0; 233c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project for (int i = 0; i < mItems.size(); i++) { 234c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project final Action action = mItems.get(i); 235c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (mKeyguardShowing && !action.showDuringKeyguard()) { 236c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project continue; 237c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 238c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (!mDeviceProvisioned && !action.showBeforeProvisioning()) { 239c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project continue; 240c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 241c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (filteredPos == position) { 242c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return action; 243c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 244c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project filteredPos++; 245c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 246c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 247c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project throw new IllegalArgumentException("position " + position + " out of " 248c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project + "range of showable actions, filtered count = " 249c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project + "= " + getCount() + ", keyguardshowing=" + mKeyguardShowing 250c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project + ", provisioned=" + mDeviceProvisioned); 251c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 252c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 253c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 254c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public long getItemId(int position) { 255c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return position; 256c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 257c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 258c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 259c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project Action action = getItem(position); 260c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return action.create(mContext, (LinearLayout) convertView, LayoutInflater.from(mContext)); 261c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 262c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 263c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 264c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // note: the scheme below made more sense when we were planning on having 265c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // 8 different things in the global actions dialog. seems overkill with 266c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // only 3 items now, but may as well keep this flexible approach so it will 267c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // be easy should someone decide at the last minute to include something 268c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // else, such as 'enable wifi', or 'enable bluetooth' 269c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 270c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 271c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * What each item in the global actions dialog must be able to support. 272c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 273c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private interface Action { 274c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project LinearLayout create(Context context, LinearLayout convertView, LayoutInflater inflater); 275c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 276c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project void onPress(); 277c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 278c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 279c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @return whether this action should appear in the dialog when the keygaurd 280c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * is showing. 281c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 282c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project boolean showDuringKeyguard(); 283c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 284c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 285c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @return whether this action should appear in the dialog before the 286c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * device is provisioned. 287c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 288c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project boolean showBeforeProvisioning(); 289c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 290c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 291c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 292c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * A single press action maintains no state, just responds to a press 293c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * and takes an action. 294c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 295c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private static abstract class SinglePressAction implements Action { 296c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mIconResId; 297c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mMessageResId; 298c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 299c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project protected SinglePressAction(int iconResId, int messageResId) { 300c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mIconResId = iconResId; 301c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mMessageResId = messageResId; 302c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 303c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 304c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project abstract public void onPress(); 305c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 306c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public LinearLayout create(Context context, LinearLayout convertView, LayoutInflater inflater) { 307c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project LinearLayout v = (LinearLayout) ((convertView != null) ? 308c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project convertView : 309c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project inflater.inflate(R.layout.global_actions_item, null)); 310c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 311c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project ImageView icon = (ImageView) v.findViewById(R.id.icon); 312c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project TextView messageView = (TextView) v.findViewById(R.id.message); 313c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 314c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project v.findViewById(R.id.status).setVisibility(View.GONE); 315c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 316c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project icon.setImageDrawable(context.getResources().getDrawable(mIconResId)); 317c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project messageView.setText(mMessageResId); 318c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 319c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return v; 320c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 321c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 322c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 323c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 324c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * A toggle action knows whether it is on or off, and displays an icon 325c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * and status message accordingly. 326c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 327c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project static abstract class ToggleAction implements Action { 328c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 329c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private boolean mOn = false; 330c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 331c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project // prefs 332c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mEnabledIconResId; 333c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mDisabledIconResid; 334c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mMessageResId; 335c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mEnabledStatusMessageResId; 336c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private final int mDisabledStatusMessageResId; 337c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 338c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project /** 339c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param enabledIconResId The icon for when this action is on. 340c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param disabledIconResid The icon for when this action is off. 341c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param essage The general information message, e.g 'Silent Mode' 342c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param enabledStatusMessageResId The on status message, e.g 'sound disabled' 343c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project * @param disabledStatusMessageResId The off status message, e.g. 'sound enabled' 344c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project */ 345c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public ToggleAction(int enabledIconResId, 346c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project int disabledIconResid, 347c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project int essage, 348c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project int enabledStatusMessageResId, 349c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project int disabledStatusMessageResId) { 350c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mEnabledIconResId = enabledIconResId; 351c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDisabledIconResid = disabledIconResid; 352c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mMessageResId = essage; 353c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mEnabledStatusMessageResId = enabledStatusMessageResId; 354c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDisabledStatusMessageResId = disabledStatusMessageResId; 355c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 356c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 357c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public LinearLayout create(Context context, LinearLayout convertView, 358c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project LayoutInflater inflater) { 359c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project LinearLayout v = (LinearLayout) ((convertView != null) ? 360c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project convertView : 361c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project inflater.inflate(R 362c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project .layout.global_actions_item, null)); 363c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 364c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project ImageView icon = (ImageView) v.findViewById(R.id.icon); 365c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project TextView messageView = (TextView) v.findViewById(R.id.message); 366c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project TextView statusView = (TextView) v.findViewById(R.id.status); 367c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 368c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project messageView.setText(mMessageResId); 369c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 370c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project icon.setImageDrawable(context.getResources().getDrawable( 371c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project (mOn ? mEnabledIconResId : mDisabledIconResid))); 372c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project statusView.setText(mOn ? mEnabledStatusMessageResId : mDisabledStatusMessageResId); 373c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project statusView.setVisibility(View.VISIBLE); 374c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 375c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project return v; 376c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 377c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 378c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void onPress() { 379c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project updateState(!mOn); 380c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project onToggle(mOn); 381c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 382c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 383c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project abstract void onToggle(boolean on); 384c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 385c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void updateState(boolean on) { 386c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mOn = on; 387c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 388c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 389c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 390c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 391c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void onReceive(Context context, Intent intent) { 392c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project String action = intent.getAction(); 393c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) { 394c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project String reason = intent.getStringExtra(MidWindowManager.SYSTEM_DIALOG_REASON_KEY); 395c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (! MidWindowManager.SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS.equals(reason)) { 396c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mHandler.sendEmptyMessage(MESSAGE_DISMISS); 397c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 398c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 399c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 400c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project }; 401c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project 402c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private static final int MESSAGE_DISMISS = 0; 403c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project private Handler mHandler = new Handler() { 404c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project public void handleMessage(Message msg) { 405c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (msg.what == MESSAGE_DISMISS) { 406c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project if (mDialog != null) { 407c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project mDialog.dismiss(); 408c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 409c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 410c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project } 411c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project }; 412c5d93b3b6a0ba4831903f8e8d1664c4470cf15d7The Android Open Source Project} 413