Merge "Fix window leak when split-screen is released"
diff --git a/res/layout/emergency_dialer.xml b/res/layout/emergency_dialer.xml
index 01c2f80..ee55c06 100644
--- a/res/layout/emergency_dialer.xml
+++ b/res/layout/emergency_dialer.xml
@@ -112,11 +112,16 @@
 
     </LinearLayout>
 
+    <Space
+        android:id="@+id/floating_action_button_margin_bottom"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/floating_action_button_margin_bottom"
+        android:layout_alignParentBottom="true"/>
+
     <FrameLayout
         android:id="@+id/floating_action_button_container"
         android:layout_width="@dimen/floating_action_button_width"
         android:layout_height="@dimen/floating_action_button_height"
-        android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
         android:layout_gravity="center_horizontal|bottom" >
 
         <ImageButton
diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index 227e112..c402148 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -106,8 +106,6 @@
 
     private static final int BAD_EMERGENCY_NUMBER_DIALOG = 0;
 
-    // private static final int USER_ACTIVITY_TIMEOUT_WHEN_NO_PROX_SENSOR = 15000; // millis
-
     EditText mDigits;
     private View mDialButton;
     private View mDelete;
diff --git a/src/com/android/services/telephony/Log.java b/src/com/android/services/telephony/Log.java
index 30aa367..a56e8b1 100644
--- a/src/com/android/services/telephony/Log.java
+++ b/src/com/android/services/telephony/Log.java
@@ -16,10 +16,7 @@
 
 package com.android.services.telephony;
 
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.IllegalFormatException;
-import java.util.Locale;
+import android.content.Context;
 
 /**
  * Manages logging for the entire module.
@@ -42,138 +39,73 @@
         return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level);
     }
 
+    public static void initLogging(Context context) {
+        // Register Telephony with the Telecom Logger.
+        android.telecom.Log.setTag(TAG);
+        android.telecom.Log.setSessionContext(context);
+        android.telecom.Log.initMd5Sum();
+    }
+
+    // Relay log messages to Telecom
+    // TODO: Redo namespace of Telephony to use these methods directly.
+
     public static void d(String prefix, String format, Object... args) {
-        if (DEBUG) {
-            android.util.Log.d(TAG, buildMessage(prefix, format, args));
-        }
+        android.telecom.Log.d(prefix, format, args);
     }
 
     public static void d(Object objectPrefix, String format, Object... args) {
-        if (DEBUG) {
-            android.util.Log.d(TAG, buildMessage(getPrefixFromObject(objectPrefix), format, args));
-        }
+        android.telecom.Log.d(objectPrefix, format, args);
     }
 
     public static void i(String prefix, String format, Object... args) {
-        if (INFO) {
-            android.util.Log.i(TAG, buildMessage(prefix, format, args));
-        }
+        android.telecom.Log.i(prefix, format, args);
     }
 
     public static void i(Object objectPrefix, String format, Object... args) {
-        if (INFO) {
-            android.util.Log.i(TAG, buildMessage(getPrefixFromObject(objectPrefix), format, args));
-        }
+        android.telecom.Log.i(objectPrefix, format, args);
     }
 
     public static void v(String prefix, String format, Object... args) {
-        if (VERBOSE) {
-            android.util.Log.v(TAG, buildMessage(prefix, format, args));
-        }
+        android.telecom.Log.v(prefix, format, args);
     }
 
     public static void v(Object objectPrefix, String format, Object... args) {
-        if (VERBOSE) {
-            android.util.Log.v(TAG, buildMessage(getPrefixFromObject(objectPrefix), format, args));
-        }
+        android.telecom.Log.v(objectPrefix, format, args);
     }
 
     public static void w(String prefix, String format, Object... args) {
-        if (WARN) {
-            android.util.Log.w(TAG, buildMessage(prefix, format, args));
-        }
+        android.telecom.Log.w(prefix, format, args);
     }
 
     public static void w(Object objectPrefix, String format, Object... args) {
-        if (WARN) {
-            android.util.Log.w(TAG, buildMessage(getPrefixFromObject(objectPrefix), format, args));
-        }
+        android.telecom.Log.w(objectPrefix, format, args);
     }
 
     public static void e(String prefix, Throwable tr, String format, Object... args) {
-        if (ERROR) {
-            android.util.Log.e(TAG, buildMessage(prefix, format, args), tr);
-        }
+        android.telecom.Log.e(prefix, tr, format, args);
     }
 
     public static void e(Object objectPrefix, Throwable tr, String format, Object... args) {
-        if (ERROR) {
-            android.util.Log.e(TAG, buildMessage(getPrefixFromObject(objectPrefix), format, args),
-                    tr);
-        }
+        android.telecom.Log.e(objectPrefix, tr, format, args);
     }
 
     public static void wtf(String prefix, Throwable tr, String format, Object... args) {
-        android.util.Log.wtf(TAG, buildMessage(prefix, format, args), tr);
+        android.telecom.Log.wtf(prefix, tr, format, args);
     }
 
     public static void wtf(Object objectPrefix, Throwable tr, String format, Object... args) {
-        android.util.Log.wtf(TAG, buildMessage(getPrefixFromObject(objectPrefix), format, args),
-                tr);
+        android.telecom.Log.wtf(objectPrefix, tr, format, args);
     }
 
     public static void wtf(String prefix, String format, Object... args) {
-        String msg = buildMessage(prefix, format, args);
-        android.util.Log.wtf(TAG, msg, new IllegalStateException(msg));
+        android.telecom.Log.wtf(prefix, format, args);
     }
 
     public static void wtf(Object objectPrefix, String format, Object... args) {
-        String msg = buildMessage(getPrefixFromObject(objectPrefix), format, args);
-        android.util.Log.wtf(TAG, msg, new IllegalStateException(msg));
+        android.telecom.Log.wtf(objectPrefix, format, args);
     }
 
-    /**
-     * Redact personally identifiable information for production users.
-     * If we are running in verbose mode, return the original string, otherwise
-     * return a SHA-1 hash of the input string.
-     */
     public static String pii(Object pii) {
-        if (pii == null || VERBOSE) {
-            return String.valueOf(pii);
-        }
-        return "[" + secureHash(String.valueOf(pii).getBytes()) + "]";
-    }
-
-    private static String secureHash(byte[] input) {
-        MessageDigest messageDigest;
-        try {
-            messageDigest = MessageDigest.getInstance("SHA-1");
-        } catch (NoSuchAlgorithmException e) {
-            return null;
-        }
-        messageDigest.update(input);
-        byte[] result = messageDigest.digest();
-        return encodeHex(result);
-    }
-
-    private static String encodeHex(byte[] bytes) {
-        StringBuffer hex = new StringBuffer(bytes.length * 2);
-
-        for (int i = 0; i < bytes.length; i++) {
-            int byteIntValue = bytes[i] & 0xff;
-            if (byteIntValue < 0x10) {
-                hex.append("0");
-            }
-            hex.append(Integer.toString(byteIntValue, 16));
-        }
-
-        return hex.toString();
-    }
-
-    private static String getPrefixFromObject(Object obj) {
-        return obj == null ? "<null>" : obj.getClass().getSimpleName();
-    }
-
-    private static String buildMessage(String prefix, String format, Object... args) {
-        String msg;
-        try {
-            msg = (args == null || args.length == 0) ? format
-                    : String.format(Locale.US, format, args);
-        } catch (IllegalFormatException ife) {
-            wtf("Log", ife, "IllegalFormatException: formatString='%s' numArgs=%d", format,
-                    args.length);
-            msg = format + " (An error occurred while formatting the message.)";
-        }
-        return String.format(Locale.US, "%s: %s", prefix, msg);
+        return android.telecom.Log.pii(pii);
     }
 }
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 21c71d2..343f7e4 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -719,6 +719,7 @@
         setVideoState(mOriginalConnection.getVideoState());
         setOriginalConnectionCapabilities(mOriginalConnection.getConnectionCapabilities());
         setWifi(mOriginalConnection.isWifi());
+        setAudioModeIsVoip(mOriginalConnection.getAudioModeIsVoip());
         setVideoProvider(mOriginalConnection.getVideoProvider());
         setAudioQuality(mOriginalConnection.getAudioQuality());
         setTechnologyTypeExtra();
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 0af667a..2b2ed02 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -90,6 +90,7 @@
     @Override
     public void onCreate() {
         super.onCreate();
+        Log.initLogging(this);
         mExpectedComponentName = new ComponentName(this, this.getClass());
         mEmergencyTonePlayer = new EmergencyTonePlayer(this);
         TelecomAccountRegistry.getInstance(this).setTelephonyConnectionService(this);