1109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller/* 2109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Copyright (C) 2008 The Android Open Source Project 3109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * 4109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * you may not use this file except in compliance with the License. 6109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * You may obtain a copy of the License at 7109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * 8109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * http://www.apache.org/licenses/LICENSE-2.0 9109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * 10109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Unless required by applicable law or agreed to in writing, software 11109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * See the License for the specific language governing permissions and 14109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * limitations under the License. 15109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller */ 16109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 175ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpackage com.android.keyguard; 18109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 19dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0Sudheer Shankaimport android.app.ActivityManager; 20b5947e01270c5042f6050908e1582961fea3c325Adrian Roosimport android.app.ActivityOptions; 21109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.content.Context; 22109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.content.Intent; 2376511c75e67c2da778066dac829c6161b5e96003Jorim Jaggiimport android.content.res.Configuration; 24109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.os.PowerManager; 257dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liuimport android.os.RemoteException; 26109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.os.SystemClock; 27450a3a1697db810364cf7c5e7ea0f4d8c3000732Jim Millerimport android.os.UserHandle; 28c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roosimport android.telecom.TelecomManager; 29109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.util.AttributeSet; 307dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liuimport android.util.Slog; 31705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.view.MotionEvent; 32109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.view.View; 33705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.view.ViewConfiguration; 34109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport android.widget.Button; 35109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 36de0a21f4360280b40598e877b01dda8a0363a527Chris Wrenimport com.android.internal.logging.MetricsLogger; 37383db5ebcc3a4a615faf249bf4f126f42e80b82eTamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 38109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport com.android.internal.telephony.IccCardConstants.State; 39109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerimport com.android.internal.widget.LockPatternUtils; 40361915c727fc2ad137bfeed7ff74b3eadde96597Jason Monkimport com.android.internal.util.EmergencyAffordanceManager; 41109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 42109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller/** 43109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * This class implements a smart emergency button that updates itself based 44109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * on telephony state. When the phone is idle, it is an emergency call button. 45109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * When there's a call in progress, it presents an appropriate message and 46109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * allows the user to return to the call. 47109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller */ 48109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Millerpublic class EmergencyButton extends Button { 498d75c14d0c8881c7b97f2be86870d323d4454ec8Adrian Roos private static final Intent INTENT_EMERGENCY_DIAL = new Intent() 508d75c14d0c8881c7b97f2be86870d323d4454ec8Adrian Roos .setAction("com.android.phone.EmergencyDialer.DIAL") 518d75c14d0c8881c7b97f2be86870d323d4454ec8Adrian Roos .setPackage("com.android.phone") 520ab5742cf725654a7ce0e020dbea4c1d9bf7a2f7Adrian Roos .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 530ab5742cf725654a7ce0e020dbea4c1d9bf7a2f7Adrian Roos | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 54b5947e01270c5042f6050908e1582961fea3c325Adrian Roos | Intent.FLAG_ACTIVITY_CLEAR_TOP); 55109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 567dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liu private static final String LOG_TAG = "EmergencyButton"; 57705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private final EmergencyAffordanceManager mEmergencyAffordanceManager; 587dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liu 59705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private int mDownX; 60705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private int mDownY; 61109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { 62109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 63109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller @Override 6452a6133f4ba8b1d08f5158d802790d6a1b16568dJim Miller public void onSimStateChanged(int subId, int slotId, State simState) { 6552a6133f4ba8b1d08f5158d802790d6a1b16568dJim Miller updateEmergencyCallButton(); 66109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 67109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 685cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi @Override 695cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi public void onPhoneStateChanged(int phoneState) { 7052a6133f4ba8b1d08f5158d802790d6a1b16568dJim Miller updateEmergencyCallButton(); 715cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi } 72109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller }; 73705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private boolean mLongPressWasDragged; 7472b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee 7572b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee public interface EmergencyButtonCallback { 7672b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee public void onEmergencyButtonClickedWhenInCall(); 7772b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee } 7872b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee 79109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller private LockPatternUtils mLockPatternUtils; 80109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller private PowerManager mPowerManager; 8172b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee private EmergencyButtonCallback mEmergencyButtonCallback; 82109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 83c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private final boolean mIsVoiceCapable; 84c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private final boolean mEnableEmergencyCallWhileSimLocked; 85c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 86109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller public EmergencyButton(Context context) { 87109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller this(context, null); 88109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 89109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 90109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller public EmergencyButton(Context context, AttributeSet attrs) { 91109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller super(context, attrs); 92c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos mIsVoiceCapable = context.getResources().getBoolean( 93c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos com.android.internal.R.bool.config_voice_capable); 94c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos mEnableEmergencyCallWhileSimLocked = mContext.getResources().getBoolean( 95c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos com.android.internal.R.bool.config_enable_emergency_call_while_sim_locked); 96705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mEmergencyAffordanceManager = new EmergencyAffordanceManager(context); 97109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 98109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 99109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller @Override 1000928e019ce1a0e343df948520f32ac638379d8eeJim Miller protected void onAttachedToWindow() { 1010928e019ce1a0e343df948520f32ac638379d8eeJim Miller super.onAttachedToWindow(); 1020928e019ce1a0e343df948520f32ac638379d8eeJim Miller KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mInfoCallback); 1030928e019ce1a0e343df948520f32ac638379d8eeJim Miller } 1040928e019ce1a0e343df948520f32ac638379d8eeJim Miller 1050928e019ce1a0e343df948520f32ac638379d8eeJim Miller @Override 1060928e019ce1a0e343df948520f32ac638379d8eeJim Miller protected void onDetachedFromWindow() { 1070928e019ce1a0e343df948520f32ac638379d8eeJim Miller super.onDetachedFromWindow(); 1080928e019ce1a0e343df948520f32ac638379d8eeJim Miller KeyguardUpdateMonitor.getInstance(mContext).removeCallback(mInfoCallback); 1090928e019ce1a0e343df948520f32ac638379d8eeJim Miller } 1100928e019ce1a0e343df948520f32ac638379d8eeJim Miller 1110928e019ce1a0e343df948520f32ac638379d8eeJim Miller @Override 112109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller protected void onFinishInflate() { 113109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller super.onFinishInflate(); 114109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller mLockPatternUtils = new LockPatternUtils(mContext); 115109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); 116109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller setOnClickListener(new OnClickListener() { 117109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller public void onClick(View v) { 118109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller takeEmergencyCallAction(); 119109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 120109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller }); 121705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek setOnLongClickListener(new OnLongClickListener() { 122705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek @Override 123705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public boolean onLongClick(View v) { 124705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (!mLongPressWasDragged 125705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek && mEmergencyAffordanceManager.needsEmergencyAffordance()) { 126705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mEmergencyAffordanceManager.performEmergencyCall(); 127705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return true; 128705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 129705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return false; 130705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 131705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek }); 13252a6133f4ba8b1d08f5158d802790d6a1b16568dJim Miller updateEmergencyCallButton(); 133109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 134109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 13576511c75e67c2da778066dac829c6161b5e96003Jorim Jaggi @Override 136705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public boolean onTouchEvent(MotionEvent event) { 137705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek final int x = (int) event.getX(); 138705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek final int y = (int) event.getY(); 139705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { 140705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mDownX = x; 141705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mDownY = y; 142705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mLongPressWasDragged = false; 143705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } else { 144705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek final int xDiff = Math.abs(x - mDownX); 145705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek final int yDiff = Math.abs(y - mDownY); 146705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek int touchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop(); 147705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (Math.abs(yDiff) > touchSlop || Math.abs(xDiff) > touchSlop) { 148705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mLongPressWasDragged = true; 149705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 150705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 151705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return super.onTouchEvent(event); 152705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 153705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 154705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek @Override 155705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public boolean performLongClick() { 156705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return super.performLongClick(); 157705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 158705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 159705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek @Override 16076511c75e67c2da778066dac829c6161b5e96003Jorim Jaggi protected void onConfigurationChanged(Configuration newConfig) { 16176511c75e67c2da778066dac829c6161b5e96003Jorim Jaggi super.onConfigurationChanged(newConfig); 16276511c75e67c2da778066dac829c6161b5e96003Jorim Jaggi updateEmergencyCallButton(); 16376511c75e67c2da778066dac829c6161b5e96003Jorim Jaggi } 16476511c75e67c2da778066dac829c6161b5e96003Jorim Jaggi 165109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller /** 166109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller * Shows the emergency dialer or returns the user to the existing call. 167109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller */ 168109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller public void takeEmergencyCallAction() { 169f6e9228b8a97603d3ceb8f0d61e8d87cf19bd21fChris Wren MetricsLogger.action(mContext, MetricsEvent.ACTION_EMERGENCY_CALL); 170109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller // TODO: implement a shorter timeout once new PowerManager API is ready. 171109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller // should be the equivalent to the old userActivity(EMERGENCY_CALL_TIMEOUT) 172109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller mPowerManager.userActivity(SystemClock.uptimeMillis(), true); 1737dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liu try { 174dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0Sudheer Shanka ActivityManager.getService().stopSystemLockTaskMode(); 1757dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liu } catch (RemoteException e) { 1767dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liu Slog.w(LOG_TAG, "Failed to stop app pinning"); 1777dac366a7f72e3d3f0c7e26616ec0ee55efe1fcdHall Liu } 178c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (isInCall()) { 179c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos resumeCall(); 18072b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee if (mEmergencyButtonCallback != null) { 18172b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee mEmergencyButtonCallback.onEmergencyButtonClickedWhenInCall(); 18272b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee } 183109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } else { 1848d75c14d0c8881c7b97f2be86870d323d4454ec8Adrian Roos KeyguardUpdateMonitor.getInstance(mContext).reportEmergencyCallAction( 1858d75c14d0c8881c7b97f2be86870d323d4454ec8Adrian Roos true /* bypassHandler */); 1868d75c14d0c8881c7b97f2be86870d323d4454ec8Adrian Roos getContext().startActivityAsUser(INTENT_EMERGENCY_DIAL, 187b5947e01270c5042f6050908e1582961fea3c325Adrian Roos ActivityOptions.makeCustomAnimation(getContext(), 0, 0).toBundle(), 188d6aa6cb0cc8c70a30434048e25e14643b1645755Adrian Roos new UserHandle(KeyguardUpdateMonitor.getCurrentUser())); 189109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 190109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 191109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 19252a6133f4ba8b1d08f5158d802790d6a1b16568dJim Miller private void updateEmergencyCallButton() { 193c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos boolean visible = false; 194c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (mIsVoiceCapable) { 195c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos // Emergency calling requires voice capability. 196c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (isInCall()) { 197c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos visible = true; // always show "return to call" if phone is off-hook 198c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } else { 199c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos final boolean simLocked = KeyguardUpdateMonitor.getInstance(mContext) 200c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos .isSimPinVoiceSecure(); 201c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (simLocked) { 202c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos // Some countries can't handle emergency calls while SIM is locked. 203c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos visible = mEnableEmergencyCallWhileSimLocked; 204c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } else { 205c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos // Only show if there is a secure screen (pin/pattern/SIM pin/SIM puk); 206d6aa6cb0cc8c70a30434048e25e14643b1645755Adrian Roos visible = mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser()); 207c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 208c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 209c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 210c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (visible) { 211c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos setVisibility(View.VISIBLE); 212c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 213c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos int textId; 214c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos if (isInCall()) { 215c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos textId = com.android.internal.R.string.lockscreen_return_to_call; 2163efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } else { 217c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos textId = com.android.internal.R.string.lockscreen_emergency_call; 2183efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 219c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos setText(textId); 220c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } else { 221c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos setVisibility(View.GONE); 222109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 223109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller } 224109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller 22572b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee public void setCallback(EmergencyButtonCallback callback) { 22672b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee mEmergencyButtonCallback = callback; 22772b46d429cbab54af962c25ffe087c5f927f7340Andrew Lee } 228c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 229c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos /** 230c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos * Resumes a call in progress. 231c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos */ 232c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private void resumeCall() { 233c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos getTelecommManager().showInCallScreen(false); 234c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 235c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 236c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos /** 237c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos * @return {@code true} if there is a call currently in progress. 238c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos */ 239c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private boolean isInCall() { 240c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return getTelecommManager().isInCall(); 241c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 242c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos 243c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos private TelecomManager getTelecommManager() { 244c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos return (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE); 245c2e01683b34029729262e2fb346ceea4bfe4b4b6Adrian Roos } 246109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller} 247