Promotion of atel.lnx.2.0-00029.

CRs      Change ID                                   Subject
--------------------------------------------------------------------------------------------------------------
1080282   I491ff8dd8d06a54aa92740f7307a41fe96bb7d7b   Launch Emergency Call on Speed Dialing key 9.
1087615   I146e6c358bd44b8a4a5fc872c1ef4f0ffe2cc5ae   IMS-VT:Process crash during MT_VT call accept scenario
1078562   I9fc213eaa8d1a46797b34a962bb58d7656f4773a   Dialer: Screen does not light when incominging call  in

Change-Id: I4c17c7fa15c718a29653d44f3dcfc796628149ca
CRs-Fixed: 1078562, 1080282, 1087615
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b87e31f..ccbb8b4 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -63,6 +63,7 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
     <!-- This tells the activity manager to not delay any of our activity
      start requests, even if they happen immediately after the user
      presses home. -->
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 9d2820d..ab4a5f2 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -707,6 +707,7 @@
         if (CallList.getInstance().isDsdaEnabled() && (mInCallActivity != null)) {
             mInCallActivity.updateDsdaTab();
         }
+        wakeUpScreen();
     }
 
     @Override
@@ -947,7 +948,9 @@
         }
 
         Call call = mCallList.getIncomingCall();
-        answerIncomingCall(context, call.getVideoState());
+        if (call != null) {
+            answerIncomingCall(context, call.getVideoState());
+        }
     }
 
     /**
diff --git a/res/values/config.xml b/res/values/config.xml
index e992426..b6632c1 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -36,4 +36,6 @@
   <!--not display SIP dial icon -->
   <bool name="config_hide_SIP_dial_icon">false</bool>
 
+  <integer name="speed_dial_emergency_number_assigned_key">9</integer>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 98d9dc6..ce088cd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1119,6 +1119,9 @@
     <string name="dialog_speed_dial_airplane_mode_message">To use speed dial, first turn off Airplan
 e mode.</string>
 
+    <!-- Speed Dial can not be set for the key used for Emergency number-->
+    <string name="speed_dial_can_not_be_set">Speed Dial Can not be set for this Key</string>
+
     <string name="yes">Yes</string>
 
     <string name="no">No</string>
diff --git a/src/com/android/dialer/SpeedDialListActivity.java b/src/com/android/dialer/SpeedDialListActivity.java
index d3889a3..2d6cef2 100644
--- a/src/com/android/dialer/SpeedDialListActivity.java
+++ b/src/com/android/dialer/SpeedDialListActivity.java
@@ -40,6 +40,7 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.SystemProperties;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.Settings;
@@ -64,6 +65,7 @@
 import android.widget.PopupMenu;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
@@ -110,6 +112,9 @@
     private static final int MENU_REPLACE = 1001;
     private static final int MENU_DELETE = 1002;
 
+    private static final String PROPERTY_RADIO_ATEL_CARRIER = "persist.radio.atel.carrier";
+    private static final String CARRIER_ONE_DEFAULT_MCC_MNC = "405854";
+
     private static class Record {
         long contactId;
         String name;
@@ -135,6 +140,9 @@
 
     private SubscriptionManager mSubscriptionManager;
 
+    private boolean mEmergencyCallSpeedDial = false;
+    private int mSpeedDialKeyforEmergncyCall = -1;
+
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -161,6 +169,11 @@
 
         mAdapter = new SpeedDialAdapter();
         setListAdapter(mAdapter);
+
+        String property = SystemProperties.get(PROPERTY_RADIO_ATEL_CARRIER);
+        mEmergencyCallSpeedDial = CARRIER_ONE_DEFAULT_MCC_MNC.equals(property);
+        mSpeedDialKeyforEmergncyCall = getResources().getInteger(
+                R.integer.speed_dial_emergency_number_assigned_key);
     }
 
     @Override
@@ -315,6 +328,11 @@
             }
         } else {
             int number = position + 1;
+            if (mEmergencyCallSpeedDial && (number == mSpeedDialKeyforEmergncyCall)) {
+                Toast.makeText(SpeedDialListActivity.this, R.string.speed_dial_can_not_be_set,
+                Toast.LENGTH_SHORT).show();
+                return;
+            }
             final Record record = mRecords.get(number);
             if (record == null) {
                 showAddSpeedDialDialog(number);
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 78e4760..2b21ac3 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -30,6 +30,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
+import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -196,6 +197,9 @@
     /** Stream type used to play the DTMF tones off call, and mapped to the volume control keys */
     private static final int DIAL_TONE_STREAM_TYPE = AudioManager.STREAM_DTMF;
 
+    private static final String PROPERTY_RADIO_ATEL_CARRIER = "persist.radio.atel.carrier";
+    private static final String CARRIER_ONE_DEFAULT_MCC_MNC = "405854";
+
     private OnDialpadQueryChangedListener mDialpadQueryListener;
 
     private DialpadView mDialpadView;
@@ -1135,6 +1139,33 @@
         }
     }
 
+    private int getNumberfromId(int id) {
+        int number = -1;
+        switch(id) {
+            case R.id.zero: number = 0; break;
+            case R.id.one: number = 1; break;
+            case R.id.two: number = 2; break;
+            case R.id.three: number = 3; break;
+            case R.id.four: number = 4; break;
+            case R.id.five: number = 5; break;
+            case R.id.six: number = 6; break;
+            case R.id.seven: number = 7; break;
+            case R.id.eight: number = 8; break;
+            case R.id.nine: number = 9; break;
+        }
+        return number;
+    }
+
+    private void placeEmergencyCall() {
+        Resources resources = getContext().getResources();
+        String emergencyNumber = resources.getString(
+                    com.android.internal.R.string.power_key_emergency_number);
+        Intent intent = new Intent(Intent.ACTION_CALL_EMERGENCY);
+        intent.setData(Uri.fromParts(PhoneAccount.SCHEME_TEL, emergencyNumber, null));
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(intent);
+    }
+
     @Override
     public boolean onLongClick(View view) {
         final Editable digits = mDigits.getText();
@@ -1231,6 +1262,14 @@
             case R.id.nine: {
                 if (mDigits.length() == 1) {
                     //removePreviousDigitIfPossible();
+                    String property = SystemProperties.get(PROPERTY_RADIO_ATEL_CARRIER);
+                    boolean isCarrierOneSupported = CARRIER_ONE_DEFAULT_MCC_MNC.equals(property);
+                    if (isCarrierOneSupported &&
+                           (getNumberfromId(id) == getContext().getResources().getInteger(
+                            R.integer.speed_dial_emergency_number_assigned_key))) {
+                        placeEmergencyCall();
+                        return true;
+                    }
                     final boolean isAirplaneModeOn =
                             Settings.System.getInt(getActivity().getContentResolver(),
                                     Settings.System.AIRPLANE_MODE_ON, 0) != 0;