OSDN Git Service

Fix 2336057: Provide a way for the user to return to a call from LockScreen.
authorJim Miller <jaggies@google.com>
Wed, 24 Feb 2010 23:35:05 +0000 (15:35 -0800)
committerJim Miller <jaggies@google.com>
Fri, 26 Feb 2010 04:07:56 +0000 (20:07 -0800)
This makes the "Emergency call" button dual-purpose. If there's a call in progress,
the button will show "Return to call" and take the user back to the call.

core/java/com/android/internal/widget/LockPatternUtils.java
core/res/res/values/strings.xml

index 9713c27..1956b4e 100644 (file)
 package com.android.internal.widget;
 
 import android.app.DevicePolicyManager;
-import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.security.MessageDigest;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
+import android.widget.Button;
 
+import com.android.internal.R;
+import com.android.internal.telephony.ITelephony;
 import com.google.android.collect.Lists;
 
 import java.io.FileNotFoundException;
@@ -675,4 +680,43 @@ public class LockPatternUtils {
             || (mode == MODE_PIN || mode == MODE_PASSWORD) && savedPasswordExists();
         return secure;
     }
+
+    /**
+     * Sets the text on the emergency button to indicate what action will be taken.
+     * If there's currently a call in progress, the button will take them to the call
+     * @param button the button to update
+     */
+    public void updateEmergencyCallButtonState(Button button) {
+        int newState = TelephonyManager.getDefault().getCallState();
+        int textId;
+        if (newState == TelephonyManager.CALL_STATE_OFFHOOK) {
+            // show "return to call" text and show phone icon
+            textId = R.string.lockscreen_return_to_call;
+            int phoneCallIcon = R.drawable.stat_sys_phone_call;
+            button.setCompoundDrawablesWithIntrinsicBounds(phoneCallIcon, 0, 0, 0);
+        } else {
+            textId = R.string.lockscreen_emergency_call;
+            int emergencyIcon = R.drawable.ic_emergency;
+            button.setCompoundDrawablesWithIntrinsicBounds(emergencyIcon, 0, 0, 0);
+        }
+        button.setText(textId);
+    }
+
+    /**
+     * Resumes a call in progress. Typically launched from the EmergencyCall button
+     * on various lockscreens.
+     *
+     * @return true if we were able to tell InCallScreen to show.
+     */
+    public boolean resumeCall() {
+        ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
+        try {
+            if (phone != null && phone.showCallScreen()) {
+                return true;
+            }
+        } catch (RemoteException e) {
+            // What can we do?
+        }
+        return false;
+    }
 }
index 5d2d272..b791bf8 100644 (file)
     <string name="lockscreen_pattern_instructions">Draw pattern to unlock</string>
     <!-- Button at the bottom of the unlock screen to make an emergency call. -->
     <string name="lockscreen_emergency_call">Emergency call</string>
+    <!-- Button at the bottom of the unlock screen that lets the user return to a call -->
+    <string name="lockscreen_return_to_call">Return to call</string>
     <!-- Shown to confirm that the user entered their lock pattern correctly. -->
     <string name="lockscreen_pattern_correct">Correct!</string>
     <!-- On the unlock pattern screen, shown when the user enters the wrong lock pattern and must try again. -->