Let InCallActivity handle resize config change.

Bug: 26862821,27250655
Change-Id: I1b5c35846f1a2d2dedaf2df9abf1f522270b1638
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 05ee493..e155d69 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -305,10 +305,11 @@
                   android:label="@string/phoneAppLabel"
                   android:excludeFromRecents="true"
                   android:launchMode="singleInstance"
-                  android:configChanges="keyboardHidden"
+                  android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden"
                   android:exported="false"
                   android:screenOrientation="nosensor"
-                  android:encryptionAware="true" >
+                  android:encryptionAware="true"
+                  android:resizeableActivity="true">
         </activity>
 
         <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 73155a4..9e35c3d 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -88,6 +88,12 @@
     private static final int DIALPAD_REQUEST_SHOW = 2;
     private static final int DIALPAD_REQUEST_HIDE = 3;
 
+    /**
+     * This is used to relaunch the activity if resizing beyond which it needs to load different
+     * layout file.
+     */
+    private static final int SCREEN_HEIGHT_RESIZE_THRESHOLD = 500;
+
     private CallButtonFragment mCallButtonFragment;
     private CallCardFragment mCallCardFragment;
     private AnswerFragment mAnswerFragment;
@@ -252,7 +258,7 @@
         // setting activity should be last thing in setup process
         InCallPresenter.getInstance().setActivity(this);
         enableInCallOrientationEventListener(getRequestedOrientation() ==
-               InCallOrientationEventListener.FULL_SENSOR_SCREEN_ORIENTATION);
+                InCallOrientationEventListener.FULL_SENSOR_SCREEN_ORIENTATION);
 
         InCallPresenter.getInstance().onActivityStarted();
     }
@@ -353,6 +359,27 @@
         }
     }
 
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        Configuration oldConfig = getResources().getConfiguration();
+        Log.v(this, String.format(
+                "incallui config changed, screen size: w%ddp x h%ddp old:w%ddp x h%ddp",
+                newConfig.screenWidthDp, newConfig.screenHeightDp,
+                oldConfig.screenWidthDp, oldConfig.screenHeightDp));
+        // Recreate this activity if height is changing beyond the threshold to load different
+        // layout file.
+        if (oldConfig.screenHeightDp < SCREEN_HEIGHT_RESIZE_THRESHOLD &&
+                newConfig.screenHeightDp > SCREEN_HEIGHT_RESIZE_THRESHOLD ||
+                oldConfig.screenHeightDp > SCREEN_HEIGHT_RESIZE_THRESHOLD &&
+                        newConfig.screenHeightDp < SCREEN_HEIGHT_RESIZE_THRESHOLD) {
+            Log.i(this, String.format(
+                    "Recreate activity due to resize beyond threshold: %d dp",
+                    SCREEN_HEIGHT_RESIZE_THRESHOLD));
+            recreate();
+        }
+    }
+
     /**
      * Returns true when the Activity is currently visible.
      */