diff --git a/Android.mk b/Android.mk
index 3d1bb08..f01263e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -13,12 +13,11 @@
 # limitations under the License.
 
 LOCAL_PATH:= $(call my-dir)
+
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_RESOURCE_FILES := $(addprefix $(LOCAL_PATH)/, res)
 
-LOCAL_PACKAGE_NAME := com.android.phone.common
+LOCAL_MODULE := com.android.phone.shared
 
-include $(BUILD_PACKAGE)
-include $(CLEAR_VARS)
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
deleted file mode 100644
index ff2935f..0000000
--- a/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.phone.common">
-</manifest>
-
diff --git a/res/anim/dialpad_slide_in_bottom.xml b/res/anim/dialpad_slide_in_bottom.xml
deleted file mode 100644
index 07748b5..0000000
--- a/res/anim/dialpad_slide_in_bottom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@android:interpolator/fast_out_slow_in"
-    android:duration="@integer/dialpad_slide_in_duration"
-    android:fromYDelta="67%p"
-    android:toYDelta="0" />
diff --git a/res/anim/dialpad_slide_in_right.xml b/res/anim/dialpad_slide_in_right.xml
deleted file mode 100644
index d87e82a..0000000
--- a/res/anim/dialpad_slide_in_right.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2014, The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-    android:fromXDelta="100%p"
-    android:toXDelta="0"
-    android:interpolator="@android:anim/decelerate_interpolator"
-    android:duration="@integer/dialpad_slide_in_duration"/>
diff --git a/res/anim/dialpad_slide_out_bottom.xml b/res/anim/dialpad_slide_out_bottom.xml
deleted file mode 100644
index c80c8ed..0000000
--- a/res/anim/dialpad_slide_out_bottom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-    android:interpolator="@android:interpolator/fast_out_linear_in"
-    android:duration="@integer/dialpad_slide_out_duration"
-    android:fromYDelta="0"
-    android:toYDelta="80%p" />
diff --git a/res/anim/dialpad_slide_out_right.xml b/res/anim/dialpad_slide_out_right.xml
deleted file mode 100644
index a29c1a0..0000000
--- a/res/anim/dialpad_slide_out_right.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2014, The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-    android:fromXDelta="0"
-    android:toXDelta="100%"
-    android:interpolator="@android:anim/decelerate_interpolator"
-    android:duration="@integer/dialpad_slide_out_duration"/>
diff --git a/res/drawable-hdpi/ic_dialpad_delete.png b/res/drawable-hdpi/ic_dialpad_delete.png
deleted file mode 100644
index e588d90..0000000
--- a/res/drawable-hdpi/ic_dialpad_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialpad_vm.png b/res/drawable-hdpi/ic_dialpad_vm.png
deleted file mode 100644
index 9501300..0000000
--- a/res/drawable-hdpi/ic_dialpad_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_overflow_menu.png b/res/drawable-hdpi/ic_overflow_menu.png
deleted file mode 100644
index 262e9df..0000000
--- a/res/drawable-hdpi/ic_overflow_menu.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialpad_delete.png b/res/drawable-mdpi/ic_dialpad_delete.png
deleted file mode 100644
index 64a52d0..0000000
--- a/res/drawable-mdpi/ic_dialpad_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialpad_vm.png b/res/drawable-mdpi/ic_dialpad_vm.png
deleted file mode 100644
index f32d8bf..0000000
--- a/res/drawable-mdpi/ic_dialpad_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_overflow_menu.png b/res/drawable-mdpi/ic_overflow_menu.png
deleted file mode 100644
index 0e720dd..0000000
--- a/res/drawable-mdpi/ic_overflow_menu.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialpad_delete.png b/res/drawable-xhdpi/ic_dialpad_delete.png
deleted file mode 100644
index 87bc113..0000000
--- a/res/drawable-xhdpi/ic_dialpad_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialpad_vm.png b/res/drawable-xhdpi/ic_dialpad_vm.png
deleted file mode 100644
index 5d87c50..0000000
--- a/res/drawable-xhdpi/ic_dialpad_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_overflow_menu.png b/res/drawable-xhdpi/ic_overflow_menu.png
deleted file mode 100644
index 9156076..0000000
--- a/res/drawable-xhdpi/ic_overflow_menu.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dialpad_delete.png b/res/drawable-xxhdpi/ic_dialpad_delete.png
deleted file mode 100644
index 186508a..0000000
--- a/res/drawable-xxhdpi/ic_dialpad_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dialpad_vm.png b/res/drawable-xxhdpi/ic_dialpad_vm.png
deleted file mode 100644
index ac20fab..0000000
--- a/res/drawable-xxhdpi/ic_dialpad_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_overflow_menu.png b/res/drawable-xxhdpi/ic_overflow_menu.png
deleted file mode 100644
index 92526f5..0000000
--- a/res/drawable-xxhdpi/ic_overflow_menu.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/btn_dialpad_key.xml b/res/drawable/btn_dialpad_key.xml
deleted file mode 100644
index a4cb088..0000000
--- a/res/drawable/btn_dialpad_key.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="?android:attr/colorControlHighlight" />
\ No newline at end of file
diff --git a/res/layout-land/dialpad_key.xml b/res/layout-land/dialpad_key.xml
deleted file mode 100644
index 29e6bf1..0000000
--- a/res/layout-land/dialpad_key.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- A layout representing a single key in the dialpad -->
-<com.android.phone.common.dialpad.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/DialpadKeyButtonStyle" >
-
-    <LinearLayout style="@style/DialpadKeyInternalLayoutStyle"
-        android:orientation="horizontal"
-        android:baselineAligned="false"
-        android:layout_gravity="right|center_vertical" >
-
-        <!-- Note in the referenced styles that we assign hard widths to these components
-             because we want them to line up vertically when we arrange them in an MxN grid -->
-
-        <com.android.phone.common.dialpad.DialpadTextView
-            android:id="@+id/dialpad_key_number"
-            style="@style/DialpadKeyNumberStyle"
-            android:layout_gravity="right"
-            android:layout_marginBottom="0dp"
-            android:layout_marginRight="@dimen/dialpad_key_margin_right" />
-
-        <TextView
-            android:id="@+id/dialpad_key_letters"
-            style="@style/DialpadKeyLettersStyle"
-            android:layout_width="@dimen/dialpad_key_text_width"
-            android:layout_gravity="right|bottom" />
-    </LinearLayout>
-</com.android.phone.common.dialpad.DialpadKeyButton>
diff --git a/res/layout-land/dialpad_key_one.xml b/res/layout-land/dialpad_key_one.xml
deleted file mode 100644
index 2890fd1..0000000
--- a/res/layout-land/dialpad_key_one.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<com.android.phone.common.dialpad.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/one"
-    style="@style/DialpadKeyButtonStyle">
-    <LinearLayout
-        style="@style/DialpadKeyInternalLayoutStyle"
-        android:orientation="horizontal"
-        android:baselineAligned="false"
-        android:layout_gravity="right|center_vertical" >
-        <com.android.phone.common.dialpad.DialpadTextView
-            android:id="@+id/dialpad_key_number"
-            style="@style/DialpadKeyNumberStyle"
-            android:layout_gravity="right"
-            android:layout_marginBottom="0dp"
-            android:layout_marginRight="@dimen/dialpad_key_margin_right" />
-        <RelativeLayout
-            android:layout_width="@dimen/dialpad_key_text_width"
-            android:layout_height="wrap_content"
-            android:layout_gravity="right|bottom" >
-            <ImageView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingTop="@dimen/dialpad_voicemail_icon_padding_top"
-                android:id="@+id/dialpad_key_voicemail"
-                android:src="@drawable/ic_dialpad_vm"
-                android:scaleType="fitCenter"
-                android:layout_centerInParent="true"
-                android:tint="@color/dialpad_secondary_text_color" />
-            <!-- Place empty text view so vertical height is same as other dialpad keys. -->
-            <TextView style="@style/DialpadKeyLettersStyle" />
-        </RelativeLayout>
-    </LinearLayout>
-</com.android.phone.common.dialpad.DialpadKeyButton>
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
deleted file mode 100644
index 1fc1f6c..0000000
--- a/res/layout/dialpad.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Dialpad in the Phone app. -->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/dialpad"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:clipChildren="false">
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:orientation="horizontal">
-        <Space style="@style/DialpadSpaceStyle" />
-        <include layout="@layout/dialpad_key_one" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/two"
-            style="@style/DialpadKeyButtonStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/three"
-            style="@style/DialpadKeyButtonStyle" />
-        <Space style="@style/DialpadSpaceStyle" />
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:orientation="horizontal">
-        <Space style="@style/DialpadSpaceStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/four"
-            style="@style/DialpadKeyButtonStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/five"
-            style="@style/DialpadKeyButtonStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/six"
-            style="@style/DialpadKeyButtonStyle" />
-        <Space style="@style/DialpadSpaceStyle" />
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:orientation="horizontal">
-        <Space style="@style/DialpadSpaceStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/seven"
-            style="@style/DialpadKeyButtonStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/eight"
-            style="@style/DialpadKeyButtonStyle" />
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/nine"
-            style="@style/DialpadKeyButtonStyle" />
-        <Space style="@style/DialpadSpaceStyle" />
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:orientation="horizontal">
-        <Space style="@style/DialpadSpaceStyle" />
-        <com.android.phone.common.dialpad.DialpadKeyButton
-            android:id="@+id/star"
-            style="@style/DialpadKeyButtonStyle">
-            <LinearLayout
-                style="@style/DialpadKeyInternalLayoutStyle">
-                <com.android.phone.common.dialpad.DialpadTextView
-                    android:id="@+id/dialpad_key_number"
-                    style="@style/DialpadKeyStarStyle" />
-            </LinearLayout>
-        </com.android.phone.common.dialpad.DialpadKeyButton>
-        <include layout="@layout/dialpad_key"
-            android:id="@+id/zero"
-            style="@style/DialpadKeyButtonStyle" />
-        <com.android.phone.common.dialpad.DialpadKeyButton
-            android:id="@+id/pound"
-            style="@style/DialpadKeyButtonStyle">
-            <LinearLayout
-                style="@style/DialpadKeyInternalLayoutStyle">
-                <com.android.phone.common.dialpad.DialpadTextView
-                    android:id="@id/dialpad_key_number"
-                    style="@style/DialpadKeyPoundStyle" />
-            </LinearLayout>
-        </com.android.phone.common.dialpad.DialpadKeyButton>
-        <Space style="@style/DialpadSpaceStyle" />
-    </LinearLayout>
-    <Space
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/dialpad_bottom_key_height" />
-</LinearLayout>
diff --git a/res/layout/dialpad_key.xml b/res/layout/dialpad_key.xml
deleted file mode 100644
index d5f47a4..0000000
--- a/res/layout/dialpad_key.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- A layout representing a single key in the dialpad -->
-<com.android.phone.common.dialpad.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/DialpadKeyButtonStyle" >
-
-    <LinearLayout style="@style/DialpadKeyInternalLayoutStyle">
-
-        <!-- Note in the referenced styles that we assign hard widths to these components
-             because we want them to line up vertically when we arrange them in an MxN grid -->
-
-        <com.android.phone.common.dialpad.DialpadTextView
-            android:id="@+id/dialpad_key_number"
-            style="@style/DialpadKeyNumberStyle" />
-
-        <TextView
-            android:id="@+id/dialpad_key_letters"
-            style="@style/DialpadKeyLettersStyle" />
-    </LinearLayout>
-</com.android.phone.common.dialpad.DialpadKeyButton>
diff --git a/res/layout/dialpad_key_one.xml b/res/layout/dialpad_key_one.xml
deleted file mode 100644
index dfb444a..0000000
--- a/res/layout/dialpad_key_one.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<com.android.phone.common.dialpad.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/one"
-    style="@style/DialpadKeyButtonStyle">
-    <LinearLayout
-        style="@style/DialpadKeyInternalLayoutStyle">
-        <com.android.phone.common.dialpad.DialpadTextView
-            android:id="@+id/dialpad_key_number"
-            style="@style/DialpadKeyNumberStyle" />
-        <RelativeLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content" >
-            <ImageView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:paddingTop="@dimen/dialpad_voicemail_icon_padding_top"
-                android:id="@+id/dialpad_key_voicemail"
-                android:src="@drawable/ic_dialpad_vm"
-                android:scaleType="fitCenter"
-                android:layout_centerInParent="true"
-                android:tint="@color/dialpad_secondary_text_color" />
-            <!-- Place empty text view so vertical height is same as other dialpad keys. -->
-            <TextView style="@style/DialpadKeyLettersStyle" />
-        </RelativeLayout>
-    </LinearLayout>
-</com.android.phone.common.dialpad.DialpadKeyButton>
diff --git a/res/layout/dialpad_view.xml b/res/layout/dialpad_view.xml
deleted file mode 100644
index 68de527..0000000
--- a/res/layout/dialpad_view.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<view class="com.android.phone.common.dialpad.DialpadView"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/dialpad_view"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:layout_gravity="bottom"
-    android:orientation="vertical"
-    android:layoutDirection="ltr"
-    android:background="@color/background_dialpad"
-    android:clickable="true" >
-
-    <!-- Text field and possibly soft menu button above the keypad where
-     the digits are displayed. -->
-    <LinearLayout
-        android:id="@+id/digits_container"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/dialpad_digits_height"
-        android:orientation="horizontal">
-
-        <ImageButton android:id="@+id/dialpad_overflow"
-            android:background="@drawable/btn_dialpad_key"
-            android:src="@drawable/ic_overflow_menu"
-            android:tint="@color/dialpad_icon_tint"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:paddingLeft="@dimen/dialpad_digits_padding"
-            android:paddingRight="@dimen/dialpad_digits_menu_right_padding"
-            android:contentDescription="@string/description_dialpad_overflow"
-            android:gravity="center"
-            android:visibility="gone" />
-
-        <view class="com.android.phone.common.dialpad.DigitsEditText"
-            android:id="@+id/digits"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:scrollHorizontally="true"
-            android:singleLine="true"
-            android:layout_weight="1"
-            android:gravity="center"
-            android:background="@android:color/transparent"
-            android:maxLines="1"
-            android:textSize="@dimen/dialpad_digits_text_size"
-            android:freezesText="true"
-            android:focusableInTouchMode="true"
-            android:cursorVisible="false"
-            android:textColor="@color/dialpad_digits_text_color"
-            android:textCursorDrawable="@null"
-            android:fontFamily="sans-serif-light"
-            android:textStyle="normal" />
-
-        <ImageButton
-            android:id="@+id/deleteButton"
-            android:background="@drawable/btn_dialpad_key"
-            android:tint="@color/dialpad_icon_tint"
-            android:paddingLeft="@dimen/dialpad_digits_padding"
-            android:paddingRight="@dimen/dialpad_digits_padding"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:state_enabled="false"
-            android:contentDescription="@string/description_delete_button"
-            android:src="@drawable/ic_dialpad_delete" />
-    </LinearLayout>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="#e3e3e3" />
-
-    <Space
-        android:layout_width="match_parent"
-        android:layout_height="14dp" />
-
-    <include layout="@layout/dialpad" />
-
-    <Space
-        android:layout_width="match_parent"
-        android:layout_height="8dp" />
-
-</view>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
deleted file mode 100644
index 96547f0..0000000
--- a/res/values-land/dimens.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-<resources>
-    <dimen name="dialpad_key_margin_right">10dp</dimen>
-    <dimen name="dialpad_key_text_width">25dp</dimen>
-</resources>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
deleted file mode 100644
index f8523e3..0000000
--- a/res/values/animation_constants.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<resources>
-    <integer name="floating_action_button_animation_duration">250</integer>
-    <integer name="dialpad_slide_in_duration">532</integer>
-    <integer name="dialpad_slide_out_duration">257</integer>
-</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
deleted file mode 100644
index 09620a8..0000000
--- a/res/values/attrs.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<resources>
-    <declare-styleable name="Dialpad">
-        <attr name="dialpad_key_button_touch_tint" format="color"/>
-    </declare-styleable>
-</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
deleted file mode 100644
index d38428c..0000000
--- a/res/values/colors.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<resources>
-    <!-- Colors for the dialpad -->
-    <color name="background_dialpad">#fcfcfc</color>
-    <color name="background_dialpad_pressed">#ececec</color>
-    <color name="dialpad_primary_text_color">#26c6da</color>
-    <color name="dialpad_secondary_text_color">#999999</color>
-    <color name="dialpad_digits_text_color">#666666</color>
-    <color name="dialpad_separator_line_color">#dadada</color>
-    <color name="dialpad_icon_tint">#b3b3b3</color>
-</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
deleted file mode 100644
index d681d9d..0000000
--- a/res/values/dimens.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<resources>
-    <!-- Text dimensions for dialpad keys -->
-    <dimen name="dialpad_key_numbers_size">36sp</dimen>
-    <dimen name="dialpad_key_letters_size">8sp</dimen>
-    <dimen name="dialpad_key_pound_size">23sp</dimen>
-    <dimen name="dialpad_key_star_size">28sp</dimen>
-    <dimen name="dialpad_key_height">64dp</dimen>
-    <dimen name="dialpad_key_number_margin_bottom">2dp</dimen>
-    <dimen name="dialpad_symbol_margin_bottom">13dp</dimen>
-    <!-- The bottom row of the dialpad is slightly taller to account for the dial button -->
-    <dimen name="dialpad_bottom_key_height">65dp</dimen>
-    <dimen name="dialpad_key_plus_size">18sp</dimen>
-    <dimen name="dialpad_horizontal_padding">5dp</dimen>
-    <dimen name="dialpad_digits_text_size">36dp</dimen>
-    <dimen name="dialpad_digits_height">64dp</dimen>
-    <dimen name="dialpad_digits_padding">16dp</dimen>
-    <dimen name="dialpad_digits_menu_right_padding">10dp</dimen>
-    <dimen name="dialpad_center_margin">3dp</dimen>
-    <dimen name="dialpad_button_margin">2dp</dimen>
-    <dimen name="dialpad_voicemail_icon_padding_top">2dp</dimen>
-    <dimen name="dialpad_key_button_translate_y">100dp</dimen>
-    <!-- Height of the floating action button -->
-    <dimen name="floating_action_button_height">56dp</dimen>
-    <!-- Width of the floating action button -->
-    <dimen name="floating_action_button_width">56dp</dimen>
-    <!-- Corner radius of the floating action button -->
-    <dimen name="floating_action_button_radius">28dp</dimen>
-    <!-- Z translation of the floating action button -->
-    <dimen name="floating_action_button_translation_z">3dp</dimen>
-    <!-- Padding to be applied to the bottom of lists to make space for the floating action
-         button -->
-    <dimen name="floating_action_button_list_bottom_padding">88dp</dimen>
-    <!-- Right margin of the floating action button -->
-    <dimen name="floating_action_button_margin_right">16dp</dimen>
-    <!-- Bottom margin of the floating action button -->
-    <dimen name="floating_action_button_margin_bottom">16dp</dimen>
-    <!-- Offset of bottom margin of the floating action button used when dialpad is up -->
-    <dimen name="floating_action_button_dialpad_margin_bottom_offset">4dp</dimen>
-</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
deleted file mode 100644
index bfa63a9..0000000
--- a/res/values/strings.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- The digit to be displayed on the 0 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_0_number">0</string>
-    <!-- The digit to be displayed on the 1 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_1_number">1</string>
-    <!-- The digit to be displayed on the 2 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_2_number">2</string>
-    <!-- The digit to be displayed on the 3 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_3_number">3</string>
-    <!-- The digit to be displayed on the 4 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_4_number">4</string>
-    <!-- The digit to be displayed on the 5 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_5_number">5</string>
-    <!-- The digit to be displayed on the 6 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_6_number">6</string>
-    <!-- The digit to be displayed on the 7 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_7_number">7</string>
-    <!-- The digit to be displayed on the 8 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_8_number">8</string>
-    <!-- The digit to be displayed on the 9 key of the dialpad [CHAR LIMIT=1]-->
-    <string name="dialpad_9_number">9</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_star_number">*</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_pound_number">#</string>
-
-    <!--  Do not translate. -->
-    <string name="dialpad_0_letters">+</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_1_letters"></string>
-    <!--  Do not translate. -->
-    <string name="dialpad_2_letters">ABC</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_3_letters">DEF</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_4_letters">GHI</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_5_letters">JKL</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_6_letters">MNO</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_7_letters">PQRS</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_8_letters">TUV</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_9_letters">WXYZ</string>
-    <!--  Do not translate. -->
-    <string name="dialpad_star_letters"></string>
-    <!--  Do not translate. -->
-    <string name="dialpad_pound_letters"></string>
-
-    <!-- String describing the overflow menu button in the dialpad. -->
-    <string name="description_dialpad_overflow">More options</string>
-
-    <!-- String describing the Delete/Backspace ImageButton.
-         Used by AccessibilityService to announce the purpose of the button.
-    -->
-    <string name="description_delete_button">backspace</string>
-
-     <!--  String describing the button used to add a plus (+) symbol to the dialpad -->
-     <string name="description_image_button_plus">plus</string>
-
-     <!-- String describing the Voicemail ImageButton.
-          Used by AccessibilityService to announce the purpose of the button.
-     -->
-     <string name="description_voicemail_button">voicemail</string>
-
-</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
deleted file mode 100644
index 5297aa1..0000000
--- a/res/values/styles.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<resources>
-    <style name="DialpadSpaceStyle">
-        <item name="android:layout_width">0dp</item>
-        <item name="android:layout_height">match_parent</item>
-        <item name="android:layout_weight">3</item>
-    </style>
-
-    <style name="DialpadKeyNumberStyle">
-        <item name="android:textColor">@color/dialpad_primary_text_color</item>
-        <item name="android:textSize">@dimen/dialpad_key_numbers_size</item>
-        <item name="android:fontFamily">sans-serif-light</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_marginBottom">@dimen/dialpad_key_number_margin_bottom</item>
-        <item name="android:gravity">center</item>
-    </style>
-
-    <style name="DialpadKeyStarStyle">
-        <item name="android:textColor">@color/dialpad_secondary_text_color</item>
-        <item name="android:textSize">@dimen/dialpad_key_star_size</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_marginBottom">@dimen/dialpad_symbol_margin_bottom</item>
-        <item name="android:gravity">center</item>
-    </style>
-
-    <style name="DialpadKeyPoundStyle">
-        <item name="android:textColor">@color/dialpad_secondary_text_color</item>
-        <item name="android:textSize">@dimen/dialpad_key_pound_size</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_marginBottom">@dimen/dialpad_symbol_margin_bottom</item>
-        <item name="android:gravity">center</item>
-    </style>
-
-    <style name="DialpadKeyLettersStyle">
-        <item name="android:textColor">@color/dialpad_secondary_text_color</item>
-        <item name="android:textSize">@dimen/dialpad_key_letters_size</item>
-        <item name="android:fontFamily">sans-serif-medium</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:gravity">center_horizontal</item>
-    </style>
-
-    <style name="DialpadKeyButtonStyle">
-        <item name="android:soundEffectsEnabled">false</item>
-        <item name="android:clickable">true</item>
-        <item name="android:layout_width">0dp</item>
-        <item name="android:layout_height">match_parent</item>
-        <item name="android:layout_weight">13</item>
-        <item name="android:minHeight">@dimen/dialpad_key_height</item>
-        <item name="android:background">@drawable/btn_dialpad_key</item>
-        <item name="android:focusable">true</item>
-    </style>
-
-    <style name="DialpadBottomKeyButtonStyle" parent="DialpadKeyButtonStyle">
-        <item name="android:layout_height">@dimen/dialpad_bottom_key_height</item>
-    </style>
-
-    <style name="DialpadKeyInternalLayoutStyle">
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_gravity">center</item>
-        <item name="android:gravity">center</item>
-        <item name="android:orientation">vertical</item>
-    </style>
-</resources>
diff --git a/src/com/android/phone/common/animation/AnimUtils.java b/src/com/android/phone/common/animation/AnimUtils.java
deleted file mode 100644
index 35ac107..0000000
--- a/src/com/android/phone/common/animation/AnimUtils.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.phone.common.animation;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.view.View;
-import android.view.ViewPropertyAnimator;
-import android.view.animation.Interpolator;
-import android.view.animation.PathInterpolator;
-
-public class AnimUtils {
-    public static final int DEFAULT_DURATION = -1;
-    public static final Interpolator EASE_IN = new PathInterpolator(0.0f, 0.0f, 0.2f, 1.0f);
-    public static final Interpolator EASE_OUT = new PathInterpolator(0.4f, 0.0f, 1.0f, 1.0f);
-    public static final Interpolator EASE_OUT_EASE_IN = new PathInterpolator(0.4f, 0, 0.2f, 1);
-
-    public static class AnimationCallback {
-        public void onAnimationEnd() {}
-        public void onAnimationCancel() {}
-    }
-
-    public static void crossFadeViews(View fadeIn, View fadeOut, int duration) {
-        fadeIn(fadeIn, duration);
-        fadeOut(fadeOut, duration);
-    }
-
-    public static void fadeOut(View fadeOut, int duration) {
-        fadeOut(fadeOut, duration, null);
-    }
-
-    public static void fadeOut(final View fadeOut, int duration, final AnimationCallback callback) {
-        fadeOut.setAlpha(1);
-        final ViewPropertyAnimator animator = fadeOut.animate();
-        animator.cancel();
-        animator.alpha(0).withLayer().setListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                fadeOut.setVisibility(View.GONE);
-                if (callback != null) {
-                    callback.onAnimationEnd();
-                }
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                fadeOut.setVisibility(View.GONE);
-                fadeOut.setAlpha(0);
-                if (callback != null) {
-                    callback.onAnimationCancel();
-                }
-            }
-        });
-        if (duration != DEFAULT_DURATION) {
-            animator.setDuration(duration);
-        }
-        animator.start();
-    }
-
-    public static void fadeIn(View fadeIn, int duration) {
-        fadeIn(fadeIn, duration, null);
-    }
-
-    public static void fadeIn(final View fadeIn, int duration, final AnimationCallback callback) {
-        fadeIn.setAlpha(0);
-        final ViewPropertyAnimator animator = fadeIn.animate();
-        animator.cancel();
-        animator.alpha(1).withLayer().setListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                fadeIn.setVisibility(View.VISIBLE);
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                fadeIn.setAlpha(1);
-                if (callback != null) {
-                    callback.onAnimationCancel();
-                }
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (callback != null) {
-                    callback.onAnimationEnd();
-                }
-            }
-        });
-        if (duration != DEFAULT_DURATION) {
-            animator.setDuration(duration);
-        }
-        animator.start();
-    }
-}
diff --git a/src/com/android/phone/common/animation/AnimationListenerAdapter.java b/src/com/android/phone/common/animation/AnimationListenerAdapter.java
deleted file mode 100644
index d8f3fa6..0000000
--- a/src/com/android/phone/common/animation/AnimationListenerAdapter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.phone.common.animation;
-
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-
-/**
- * Provides empty implementations of the methods in {@link AnimationListener}
- * for convenience reasons.
- */
-public class AnimationListenerAdapter implements AnimationListener {
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onAnimationStart(Animation animation) {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onAnimationEnd(Animation animation) {
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onAnimationRepeat(Animation animation) {
-    }
-}
diff --git a/src/com/android/phone/common/dialpad/DialpadKeyButton.java b/src/com/android/phone/common/dialpad/DialpadKeyButton.java
deleted file mode 100644
index 4e3781c..0000000
--- a/src/com/android/phone/common/dialpad/DialpadKeyButton.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone.common.dialpad;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.widget.FrameLayout;
-
-/**
- * Custom class for dialpad buttons.
- * <p>
- * When touch exploration mode is enabled for accessibility, this class
- * implements the lift-to-type interaction model:
- * <ul>
- * <li>Hovering over the button will cause it to gain accessibility focus
- * <li>Removing the hover pointer while inside the bounds of the button will
- * perform a click action
- * <li>If long-click is supported, hovering over the button for a longer period
- * of time will switch to the long-click action
- * <li>Moving the hover pointer outside of the bounds of the button will restore
- * to the normal click action
- * <ul>
- */
-public class DialpadKeyButton extends FrameLayout {
-    /** Timeout before switching to long-click accessibility mode. */
-    private static final int LONG_HOVER_TIMEOUT = ViewConfiguration.getLongPressTimeout() * 2;
-
-    /** Accessibility manager instance used to check touch exploration state. */
-    private AccessibilityManager mAccessibilityManager;
-
-    /** Bounds used to filter HOVER_EXIT events. */
-    private Rect mHoverBounds = new Rect();
-
-    /** Whether this view is currently in the long-hover state. */
-    private boolean mLongHovered;
-
-    /** Alternate content description for long-hover state. */
-    private CharSequence mLongHoverContentDesc;
-
-    /** Backup of standard content description. Used for accessibility. */
-    private CharSequence mBackupContentDesc;
-
-    /** Backup of clickable property. Used for accessibility. */
-    private boolean mWasClickable;
-
-    /** Backup of long-clickable property. Used for accessibility. */
-    private boolean mWasLongClickable;
-
-    /** Runnable used to trigger long-click mode for accessibility. */
-    private Runnable mLongHoverRunnable;
-
-    public interface OnPressedListener {
-        public void onPressed(View view, boolean pressed);
-    }
-
-    private OnPressedListener mOnPressedListener;
-
-    public void setOnPressedListener(OnPressedListener onPressedListener) {
-        mOnPressedListener = onPressedListener;
-    }
-
-    public DialpadKeyButton(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initForAccessibility(context);
-    }
-
-    public DialpadKeyButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        initForAccessibility(context);
-    }
-
-    private void initForAccessibility(Context context) {
-        mAccessibilityManager = (AccessibilityManager) context.getSystemService(
-                Context.ACCESSIBILITY_SERVICE);
-    }
-
-    public void setLongHoverContentDescription(CharSequence contentDescription) {
-        mLongHoverContentDesc = contentDescription;
-
-        if (mLongHovered) {
-            super.setContentDescription(mLongHoverContentDesc);
-        }
-    }
-
-    @Override
-    public void setContentDescription(CharSequence contentDescription) {
-        if (mLongHovered) {
-            mBackupContentDesc = contentDescription;
-        } else {
-            super.setContentDescription(contentDescription);
-        }
-    }
-
-    @Override
-    public void setPressed(boolean pressed) {
-        super.setPressed(pressed);
-        if (mOnPressedListener != null) {
-            mOnPressedListener.onPressed(this, pressed);
-        }
-    }
-
-    @Override
-    public void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-
-        mHoverBounds.left = getPaddingLeft();
-        mHoverBounds.right = w - getPaddingRight();
-        mHoverBounds.top = getPaddingTop();
-        mHoverBounds.bottom = h - getPaddingBottom();
-    }
-
-    @Override
-    public boolean performAccessibilityAction(int action, Bundle arguments) {
-        if (action == AccessibilityNodeInfo.ACTION_CLICK) {
-            simulateClickForAccessibility();
-            return true;
-        }
-
-        return super.performAccessibilityAction(action, arguments);
-    }
-
-    @Override
-    public boolean onHoverEvent(MotionEvent event) {
-        // When touch exploration is turned on, lifting a finger while inside
-        // the button's hover target bounds should perform a click action.
-        if (mAccessibilityManager.isEnabled()
-                && mAccessibilityManager.isTouchExplorationEnabled()) {
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_HOVER_ENTER:
-                    // Lift-to-type temporarily disables double-tap activation.
-                    mWasClickable = isClickable();
-                    mWasLongClickable = isLongClickable();
-                    if (mWasLongClickable && mLongHoverContentDesc != null) {
-                        if (mLongHoverRunnable == null) {
-                            mLongHoverRunnable = new Runnable() {
-                                @Override
-                                public void run() {
-                                    setLongHovered(true);
-                                    announceForAccessibility(mLongHoverContentDesc);
-                                }
-                            };
-                        }
-                        postDelayed(mLongHoverRunnable, LONG_HOVER_TIMEOUT);
-                    }
-
-                    setClickable(false);
-                    setLongClickable(false);
-                    break;
-                case MotionEvent.ACTION_HOVER_EXIT:
-                    if (mHoverBounds.contains((int) event.getX(), (int) event.getY())) {
-                        if (mLongHovered) {
-                            performLongClick();
-                        } else {
-                            simulateClickForAccessibility();
-                        }
-                    }
-
-                    cancelLongHover();
-                    setClickable(mWasClickable);
-                    setLongClickable(mWasLongClickable);
-                    break;
-            }
-        }
-
-        return super.onHoverEvent(event);
-    }
-
-    /**
-     * When accessibility is on, simulate press and release to preserve the
-     * semantic meaning of performClick(). Required for Braille support.
-     */
-    private void simulateClickForAccessibility() {
-        // Checking the press state prevents double activation.
-        if (isPressed()) {
-            return;
-        }
-
-        setPressed(true);
-
-        // Stay consistent with performClick() by sending the event after
-        // setting the pressed state but before performing the action.
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
-
-        setPressed(false);
-    }
-
-    private void setLongHovered(boolean enabled) {
-        if (mLongHovered != enabled) {
-            mLongHovered = enabled;
-
-            // Switch between normal and alternate description, if available.
-            if (enabled) {
-                mBackupContentDesc = getContentDescription();
-                super.setContentDescription(mLongHoverContentDesc);
-            } else {
-                super.setContentDescription(mBackupContentDesc);
-            }
-        }
-    }
-
-    private void cancelLongHover() {
-        if (mLongHoverRunnable != null) {
-            removeCallbacks(mLongHoverRunnable);
-        }
-        setLongHovered(false);
-    }
-}
diff --git a/src/com/android/phone/common/dialpad/DialpadTextView.java b/src/com/android/phone/common/dialpad/DialpadTextView.java
deleted file mode 100644
index 2802b32..0000000
--- a/src/com/android/phone/common/dialpad/DialpadTextView.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.phone.common.dialpad;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.widget.TextView;
-
-/**
- * This is a custom text view intended only for rendering the numerals (and star and pound) on the
- * dialpad. TextView has built in top/bottom padding to help account for ascenders/descenders.
- *
- * Since vertical space is at a premium on the dialpad, particularly if the font size is scaled to
- * a larger default, for the dialpad we use this class to more precisely render characters according
- * to the precise amount of space they need.
- */
-public class DialpadTextView extends TextView {
-    private Rect mTextBounds = new Rect();
-    private String mTextStr;
-
-    public DialpadTextView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    /**
-     * Draw the text to fit within the height/width which have been specified during measurement.
-     */
-    @Override
-    public void draw(Canvas canvas) {
-        Paint paint = getPaint();
-
-        // Without this, the draw does not respect the style's specified text color.
-        paint.setColor(getCurrentTextColor());
-
-        // The text bounds values are relative and can be negative,, so rather than specifying a
-        // standard origin such as 0, 0, we need to use negative of the left/top bounds.
-        // For example, the bounds may be: Left: 11, Right: 37, Top: -77, Bottom: 0
-        canvas.drawText(mTextStr, -mTextBounds.left, -mTextBounds.top, paint);
-    }
-
-    /**
-     * Calculate the pixel-accurate bounds of the text when rendered, and use that to specify the
-     * height and width.
-     */
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        mTextStr = getText().toString();
-        getPaint().getTextBounds(mTextStr, 0, mTextStr.length(), mTextBounds);
-
-        int width = resolveSize(mTextBounds.width(), widthMeasureSpec);
-        int height = resolveSize(mTextBounds.height(), heightMeasureSpec);
-        setMeasuredDimension(width, height);
-    }
-}
diff --git a/src/com/android/phone/common/dialpad/DialpadView.java b/src/com/android/phone/common/dialpad/DialpadView.java
deleted file mode 100644
index 6f9dd41..0000000
--- a/src/com/android/phone/common/dialpad/DialpadView.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone.common.dialpad;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.RippleDrawable;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.phone.common.R;
-import com.android.phone.common.animation.AnimUtils;
-
-/**
- * View that displays a twelve-key phone dialpad.
- */
-public class DialpadView extends LinearLayout {
-    private static final String TAG = DialpadView.class.getSimpleName();
-
-    private static final double DELAY_MULTIPLIER = 0.66;
-    private static final double DURATION_MULTIPLIER = 0.8;
-
-    private EditText mDigits;
-    private ImageButton mDelete;
-    private View mOverflowMenuButton;
-    private ColorStateList mRippleColor;
-
-    private boolean mCanDigitsBeEdited;
-
-    private final int[] mButtonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three,
-            R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star,
-            R.id.pound};
-
-    // For animation.
-    private static final int KEY_FRAME_DURATION = 33;
-
-    private int mTranslateDistance;
-
-    public DialpadView(Context context) {
-        this(context, null);
-    }
-
-    public DialpadView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public DialpadView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Dialpad);
-        mRippleColor = a.getColorStateList(R.styleable.Dialpad_dialpad_key_button_touch_tint);
-        a.recycle();
-
-        mTranslateDistance = getResources().getDimensionPixelSize(
-                R.dimen.dialpad_key_button_translate_y);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        setupKeypad();
-        mDigits = (EditText) findViewById(R.id.digits);
-        mDelete = (ImageButton) findViewById(R.id.deleteButton);
-        mOverflowMenuButton = findViewById(R.id.dialpad_overflow);
-    }
-
-    private void setupKeypad() {
-        final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
-                R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
-                R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
-                R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
-                R.string.dialpad_pound_number};
-
-        final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
-                R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
-                R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
-                R.string.dialpad_8_letters, R.string.dialpad_9_letters,
-                R.string.dialpad_star_letters, R.string.dialpad_pound_letters};
-
-        final Resources resources = getContext().getResources();
-
-        DialpadKeyButton dialpadKey;
-        TextView numberView;
-        TextView lettersView;
-
-        for (int i = 0; i < mButtonIds.length; i++) {
-            dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
-            numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
-            lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
-            final String numberString = resources.getString(numberIds[i]);
-            final RippleDrawable rippleBackground =
-                    (RippleDrawable) resources.getDrawable(R.drawable.btn_dialpad_key);
-            if (mRippleColor != null) {
-                rippleBackground.setColor(mRippleColor);
-            }
-
-            numberView.setText(numberString);
-            numberView.setElegantTextHeight(false);
-            dialpadKey.setContentDescription(numberString);
-            dialpadKey.setBackground(rippleBackground);
-
-            if (lettersView != null) {
-                lettersView.setText(resources.getString(letterIds[i]));
-            }
-        }
-
-        final DialpadKeyButton one = (DialpadKeyButton) findViewById(R.id.one);
-        one.setLongHoverContentDescription(
-                resources.getText(R.string.description_voicemail_button));
-
-        final DialpadKeyButton zero = (DialpadKeyButton) findViewById(R.id.zero);
-        zero.setLongHoverContentDescription(
-                resources.getText(R.string.description_image_button_plus));
-
-    }
-
-    public void setShowVoicemailButton(boolean show) {
-        View view = findViewById(R.id.dialpad_key_voicemail);
-        if (view != null) {
-            view.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
-        }
-    }
-
-    /**
-     * Whether or not the digits above the dialer can be edited.
-     *
-     * @param canBeEdited If true, the backspace button will be shown and the digits EditText
-     *         will be configured to allow text manipulation.
-     */
-    public void setCanDigitsBeEdited(boolean canBeEdited) {
-        View deleteButton = findViewById(R.id.deleteButton);
-        deleteButton.setVisibility(canBeEdited ? View.VISIBLE : View.GONE);
-        View overflowMenuButton = findViewById(R.id.dialpad_overflow);
-        overflowMenuButton.setVisibility(canBeEdited ? View.VISIBLE : View.GONE);
-
-        EditText digits = (EditText) findViewById(R.id.digits);
-        digits.setClickable(canBeEdited);
-        digits.setLongClickable(canBeEdited);
-        digits.setFocusableInTouchMode(canBeEdited);
-        digits.setCursorVisible(false);
-
-        mCanDigitsBeEdited = canBeEdited;
-    }
-
-    public boolean canDigitsBeEdited() {
-        return mCanDigitsBeEdited;
-    }
-
-    /**
-     * Always returns true for onHoverEvent callbacks, to fix problems with accessibility due to
-     * the dialpad overlaying other fragments.
-     */
-    @Override
-    public boolean onHoverEvent(MotionEvent event) {
-        return true;
-    }
-
-    public void animateShow() {
-        // This is a hack; without this, the setTranslationY is delayed in being applied, and the
-        // numbers appear at their original position (0) momentarily before animating.
-        final AnimatorListenerAdapter showListener = new AnimatorListenerAdapter() {};
-
-        for (int i = 0; i < mButtonIds.length; i++) {
-            int delay = (int)(getKeyButtonAnimationDelay(mButtonIds[i]) * DELAY_MULTIPLIER);
-            int duration =
-                    (int)(getKeyButtonAnimationDuration(mButtonIds[i]) * DURATION_MULTIPLIER);
-            final DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(mButtonIds[i]);
-
-            dialpadKey.setTranslationY(mTranslateDistance);
-            dialpadKey.animate()
-                    .translationY(0)
-                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
-                    .setStartDelay(delay)
-                    .setDuration(duration)
-                    .setListener(showListener)
-                    .start();
-        }
-    }
-
-    public EditText getDigits() {
-        return mDigits;
-    }
-
-    public ImageButton getDeleteButton() {
-        return mDelete;
-    }
-
-    public View getOverflowMenuButton() {
-        return mOverflowMenuButton;
-    }
-
-    private int getKeyButtonAnimationDelay(int buttonId) {
-        switch(buttonId) {
-            case R.id.one: return KEY_FRAME_DURATION * 1;
-            case R.id.two: return KEY_FRAME_DURATION * 2;
-            case R.id.three: return KEY_FRAME_DURATION * 3;
-            case R.id.four: return KEY_FRAME_DURATION * 4;
-            case R.id.five: return KEY_FRAME_DURATION * 5;
-            case R.id.six: return KEY_FRAME_DURATION * 6;
-            case R.id.seven: return KEY_FRAME_DURATION * 7;
-            case R.id.eight: return KEY_FRAME_DURATION * 8;
-            case R.id.nine: return KEY_FRAME_DURATION * 9;
-            case R.id.star: return KEY_FRAME_DURATION * 10;
-            case R.id.zero:
-            case R.id.pound:
-                return KEY_FRAME_DURATION * 11;
-        }
-
-        Log.wtf(TAG, "Attempted to get animation delay for invalid key button id.");
-        return 0;
-    }
-
-    private int getKeyButtonAnimationDuration(int buttonId) {
-        switch(buttonId) {
-            case R.id.one:
-            case R.id.two:
-            case R.id.three:
-            case R.id.four:
-            case R.id.five:
-            case R.id.six:
-                return KEY_FRAME_DURATION * 10;
-            case R.id.seven:
-            case R.id.eight:
-            case R.id.nine:
-                return KEY_FRAME_DURATION * 9;
-            case R.id.star:
-            case R.id.zero:
-            case R.id.pound:
-                return KEY_FRAME_DURATION * 8;
-        }
-
-        Log.wtf(TAG, "Attempted to get animation duration for invalid key button id.");
-        return 0;
-    }
-}
diff --git a/src/com/android/phone/common/dialpad/DigitsEditText.java b/src/com/android/phone/common/dialpad/DigitsEditText.java
deleted file mode 100644
index b2022aa..0000000
--- a/src/com/android/phone/common/dialpad/DigitsEditText.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone.common.dialpad;
-
-import android.content.Context;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.text.InputType;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.MotionEvent;
-import android.view.ViewGroup;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-
-import com.android.phone.common.R;
-
-/**
- * EditText which suppresses IME show up.
- */
-public class DigitsEditText extends EditText {
-    // Only scale the text down to 66% smaller at most.
-    private static final float MIN_TEXT_RESIZE_RATIO = 0.66f;
-    private final float mOriginalTextSize;
-
-    public DigitsEditText(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mOriginalTextSize = getTextSize();
-        setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
-        setShowSoftInputOnFocus(false);
-    }
-
-    @Override
-    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
-        super.onFocusChanged(focused, direction, previouslyFocusedRect);
-        final InputMethodManager imm = ((InputMethodManager) getContext()
-                .getSystemService(Context.INPUT_METHOD_SERVICE));
-        if (imm != null && imm.isActive(this)) {
-            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        final boolean ret = super.onTouchEvent(event);
-        // Must be done after super.onTouchEvent()
-        final InputMethodManager imm = ((InputMethodManager) getContext()
-                .getSystemService(Context.INPUT_METHOD_SERVICE));
-        if (imm != null && imm.isActive(this)) {
-            imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
-        }
-        return ret;
-    }
-
-    @Override
-    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
-        super.onTextChanged(text, start, lengthBefore, lengthAfter);
-        resizeText(getWidth());
-    }
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-        resizeText(w);
-    }
-
-    private void resizeText(int width) {
-        if (width == 0) {
-            return;
-        }
-        final Paint paint = getPaint();
-        setTextSize(TypedValue.COMPLEX_UNIT_PX, mOriginalTextSize);
-
-        float ratio = width / paint.measureText(getText().toString());
-        if (ratio <= 1.0f) {
-            setTextSize(TypedValue.COMPLEX_UNIT_PX,
-                    mOriginalTextSize * Math.max(MIN_TEXT_RESIZE_RATIO, ratio));
-        }
-    }
-}
diff --git a/src/com/android/phone/common/util/ViewUtil.java b/src/com/android/phone/common/util/ViewUtil.java
deleted file mode 100644
index 171eee0..0000000
--- a/src/com/android/phone/common/util/ViewUtil.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone.common.util;
-
-import android.content.res.Resources;
-import android.graphics.Outline;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-
-import com.android.phone.common.R;
-
-/**
- * Provides static functions to work with views
- */
-public class ViewUtil {
-    private ViewUtil() {}
-
-    /**
-     * Returns the width as specified in the LayoutParams
-     * @throws IllegalStateException Thrown if the view's width is unknown before a layout pass
-     * s
-     */
-    public static int getConstantPreLayoutWidth(View view) {
-        // We haven't been layed out yet, so get the size from the LayoutParams
-        final ViewGroup.LayoutParams p = view.getLayoutParams();
-        if (p.width < 0) {
-            throw new IllegalStateException("Expecting view's width to be a constant rather " +
-                    "than a result of the layout pass");
-        }
-        return p.width;
-    }
-
-    /**
-     * Returns a boolean indicating whether or not the view's layout direction is RTL
-     *
-     * @param view - A valid view
-     * @return True if the view's layout direction is RTL
-     */
-    public static boolean isViewLayoutRtl(View view) {
-        return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-    }
-
-    /**
-     * Configures the floating action button, clipping it to a circle and setting its translation z.
-     * @param view The float action button's view.
-     * @param res The resources file.
-     */
-    public static void setupFloatingActionButton(View view, Resources res) {
-        // Once layout is complete and the floating action button has been assigned a width and
-        // height, assign the outline.
-        view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                final Outline outline = new Outline();
-                final int minDimension = Math.min(right - left, bottom - top);
-                if (minDimension <= 0) {
-                    return;
-                }
-                outline.setRoundRect(0, 0, right - left, bottom - top, minDimension / 2);
-                v.setOutline(outline);
-            }
-        });
-        view.setTranslationZ(
-                res.getDimensionPixelSize(R.dimen.floating_action_button_translation_z));
-    }
-
-    /**
-     * Adds padding to the bottom of the given {@link ListView} so that the floating action button
-     * does not obscure any content.
-     *
-     * @param listView to add the padding to
-     * @param res valid resources object
-     */
-    public static void addBottomPaddingToListViewForFab(ListView listView, Resources res) {
-        final int fabPadding = res.getDimensionPixelSize(
-                R.dimen.floating_action_button_list_bottom_padding);
-        listView.setPaddingRelative(listView.getPaddingStart(), listView.getPaddingTop(),
-                listView.getPaddingEnd(), listView.getPaddingBottom() + fabPadding);
-        listView.setClipToPadding(false);
-    }
-}
