1 /* 2 * Copyright (C) 2007 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 */ 16 17 package com.android.internal.policy.impl; 18 19 import com.android.internal.R; 20 21 import android.app.Dialog; 22 import android.app.StatusBarManager; 23 import android.content.Context; 24 import android.os.Bundle; 25 import android.os.RemoteException; 26 import android.os.LocalPowerManager; 27 import android.os.ServiceManager; 28 import android.os.ServiceManagerNative; 29 import android.os.SystemClock; 30 31 import com.android.internal.app.ShutdownThread; 32 import com.android.internal.telephony.ITelephony; 33 import android.view.KeyEvent; 34 import android.util.Log; 35 import android.view.View; 36 import android.view.WindowManager; 37 import android.view.View.OnClickListener; 38 import android.view.View.OnKeyListener; 39 import android.widget.Button; 40 41 /** 42 * @deprecated use {@link GlobalActions} instead. 43 */ 44 public class PowerDialog extends Dialog implements OnClickListener, 45 OnKeyListener { 46 private static final String TAG = "PowerDialog"; 47 48 static private StatusBarManager sStatusBar; 49 private Button mKeyguard; 50 private Button mPower; 51 private Button mRadioPower; 52 private Button mSilent; 53 54 private LocalPowerManager mPowerManager; 55 56 public PowerDialog(Context context, LocalPowerManager powerManager) { 57 super(context); 58 mPowerManager = powerManager; 59 } 60 61 @Override 62 protected void onCreate(Bundle savedInstanceState) { 63 super.onCreate(savedInstanceState); 64 65 Context context = getContext(); 66 67 if (sStatusBar == null) { 68 sStatusBar = (StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE); 69 } 70 71 setContentView(com.android.internal.R.layout.power_dialog); 72 73 getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); 74 getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, 75 WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 76 77 setTitle(context.getText(R.string.power_dialog)); 78 79 mKeyguard = (Button) findViewById(R.id.keyguard); 80 mPower = (Button) findViewById(R.id.off); 81 mRadioPower = (Button) findViewById(R.id.radio_power); 82 mSilent = (Button) findViewById(R.id.silent); 83 84 if (mKeyguard != null) { 85 mKeyguard.setOnKeyListener(this); 86 mKeyguard.setOnClickListener(this); 87 } 88 if (mPower != null) { 89 mPower.setOnClickListener(this); 90 } 91 if (mRadioPower != null) { 92 mRadioPower.setOnClickListener(this); 93 } 94 if (mSilent != null) { 95 mSilent.setOnClickListener(this); 96 // XXX: HACK for now hide the silent until we get mute support 97 mSilent.setVisibility(View.GONE); 98 } 99 100 CharSequence text; 101 102 // set the keyguard button's text 103 text = context.getText(R.string.screen_lock); 104 mKeyguard.setText(text); 105 mKeyguard.requestFocus(); 106 107 try { 108 ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone")); 109 if (phone != null) { 110 text = phone.isRadioOn() ? context 111 .getText(R.string.turn_off_radio) : context 112 .getText(R.string.turn_on_radio); 113 } 114 } catch (RemoteException ex) { 115 // ignore it 116 } 117 118 mRadioPower.setText(text); 119 } 120 121 public void onClick(View v) { 122 this.dismiss(); 123 if (v == mPower) { 124 // shutdown by making sure radio and power are handled accordingly. 125 ShutdownThread.shutdown(getContext(), true); 126 } else if (v == mRadioPower) { 127 try { 128 ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone")); 129 if (phone != null) { 130 phone.toggleRadioOnOff(); 131 } 132 } catch (RemoteException ex) { 133 // ignore it 134 } 135 } else if (v == mSilent) { 136 // do something 137 } else if (v == mKeyguard) { 138 if (v.isInTouchMode()) { 139 // only in touch mode for the reasons explained in onKey. 140 this.dismiss(); 141 mPowerManager.goToSleep(SystemClock.uptimeMillis() + 1); 142 } 143 } 144 } 145 146 public boolean onKey(View v, int keyCode, KeyEvent event) { 147 // The activate keyguard button needs to put the device to sleep on the 148 // key up event. If we try to put it to sleep on the click or down 149 // action 150 // the the up action will cause the device to wake back up. 151 152 // Log.i(TAG, "keyCode: " + keyCode + " action: " + event.getAction()); 153 if (keyCode != KeyEvent.KEYCODE_DPAD_CENTER 154 || event.getAction() != KeyEvent.ACTION_UP) { 155 // Log.i(TAG, "getting out of dodge..."); 156 return false; 157 } 158 159 // Log.i(TAG, "Clicked mKeyguard! dimissing dialog"); 160 this.dismiss(); 161 // Log.i(TAG, "onKey: turning off the screen..."); 162 // XXX: arve says this is a hack for now 163 mPowerManager.goToSleep(event.getEventTime() + 1); 164 return true; 165 } 166 167 public void show() { 168 super.show(); 169 Log.d(TAG, "show... disabling expand"); 170 sStatusBar.disable(StatusBarManager.DISABLE_EXPAND); 171 } 172 173 public void dismiss() { 174 super.dismiss(); 175 Log.d(TAG, "dismiss... reenabling expand"); 176 sStatusBar.disable(StatusBarManager.DISABLE_NONE); 177 } 178 } 179