diff --git a/InCallUI/InCallUI.iml b/InCallUI/InCallUI.iml
new file mode 100644
index 0000000..2dc7d7e
--- /dev/null
+++ b/InCallUI/InCallUI.iml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="GEN_FOLDER_RELATIVE_PATH_APT" value="../../../out/target/common/obj/APPS/InCallUI_intermediates/src" />
+        <option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="../../../out/target/common/obj/APPS/InCallUI_intermediates/src" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/../../../out/target/common/obj/APPS/InCallUI_intermediates/src">
+      <sourceFolder url="file://$MODULE_DIR$/../../../out/target/common/obj/APPS/InCallUI_intermediates/src" isTestSource="false" />
+    </content>
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="libcore" />
+    <orderEntry type="module" module-name="base" />
+    <orderEntry type="module" module-name="common" />
+    <orderEntry type="jdk" jdkName="Android 4.2.2" jdkType="Android SDK" />
+  </component>
+</module>
+
diff --git a/InCallUI/res/layout/answer_fragment.xml b/InCallUI/res/layout/answer_fragment.xml
new file mode 100644
index 0000000..bfe2303
--- /dev/null
+++ b/InCallUI/res/layout/answer_fragment.xml
@@ -0,0 +1,44 @@
+<?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.
+-->
+
+<!-- TODO(klp): move out to separate file -->
+<com.android.incallui.AnswerUi
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:dc="http://schemas.android.com/apk/res-auto"
+
+        android:id="@+id/glow_pad_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
+        android:focusable="true"
+        android:layout_alignParentBottom="true"
+        android:layout_centerHorizontal="true"
+        android:gravity="center"
+        android:layout_gravity="center_vertical"
+
+        dc:targetDrawables="@array/incoming_call_widget_3way_targets"
+        dc:targetDescriptions="@array/incoming_call_widget_3way_target_descriptions"
+        dc:directionDescriptions="@array/incoming_call_widget_3way_direction_descriptions"
+        dc:handleDrawable="@drawable/ic_in_call_touch_handle"
+        dc:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"
+        dc:outerRadius="@dimen/glowpadview_target_placement_radius"
+        dc:innerRadius="@dimen/glowpadview_inner_radius"
+        dc:snapMargin="@dimen/glowpadview_snap_margin"
+        dc:feedbackCount="1"
+        dc:vibrationDuration="20"
+        dc:glowRadius="@dimen/glowpadview_glow_radius"
+        dc:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
+        />
diff --git a/InCallUI/res/layout/incall_screen.xml b/InCallUI/res/layout/incall_screen.xml
index 32159a6..01180ee 100644
--- a/InCallUI/res/layout/incall_screen.xml
+++ b/InCallUI/res/layout/incall_screen.xml
@@ -26,30 +26,6 @@
           android:layout_weight="1"
           android:background="#ddd"/>
 
-    <!-- TODO(klp): move out to separate file -->
-    <com.android.incallui.widget.multiwaveview.GlowPadView
-            android:id="@+id/glow_pad_view"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/glowpadview_margin_bottom"
-            android:focusable="true"
-            android:layout_alignParentBottom="true"
-            android:layout_centerHorizontal="true"
-            android:gravity="center"
-            android:layout_gravity="center_vertical"
 
-            dc:targetDrawables="@array/incoming_call_widget_3way_targets"
-            dc:targetDescriptions="@array/incoming_call_widget_3way_target_descriptions"
-            dc:directionDescriptions="@array/incoming_call_widget_3way_direction_descriptions"
-            dc:handleDrawable="@drawable/ic_in_call_touch_handle"
-            dc:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring"
-            dc:outerRadius="@dimen/glowpadview_target_placement_radius"
-            dc:innerRadius="@dimen/glowpadview_inner_radius"
-            dc:snapMargin="@dimen/glowpadview_snap_margin"
-            dc:feedbackCount="1"
-            dc:vibrationDuration="20"
-            dc:glowRadius="@dimen/glowpadview_glow_radius"
-            dc:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
-            />
 
 </LinearLayout>
diff --git a/InCallUI/src/com/android/incallui/AnswerFragment.java b/InCallUI/src/com/android/incallui/AnswerFragment.java
new file mode 100644
index 0000000..a80fa93
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/AnswerFragment.java
@@ -0,0 +1,40 @@
+/*
+ * 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
+ */
+
+package com.android.incallui;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ *
+ */
+public class AnswerFragment extends Fragment {
+
+    AnswerPresenter mPresenter;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        final AnswerUi ui = (AnswerUi) inflater.inflate(R.layout.answer_fragment, container,
+                false);
+        mPresenter = new AnswerPresenter(ui);
+        return ui;
+    }
+}
diff --git a/InCallUI/src/com/android/incallui/AnswerPresenter.java b/InCallUI/src/com/android/incallui/AnswerPresenter.java
new file mode 100644
index 0000000..2377195
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/AnswerPresenter.java
@@ -0,0 +1,31 @@
+package com.android.incallui;
+
+/**
+ *
+ */
+public class AnswerPresenter {
+
+    private Ui mUi;
+
+    public AnswerPresenter(Ui ui) {
+        this.mUi = ui;
+
+        mUi.setPresenter(this);
+    }
+
+    public void onAnswer() {
+
+    }
+
+    public void onDecline() {
+
+    }
+
+    public void onText() {
+
+    }
+
+    public interface Ui {
+        void setPresenter(AnswerPresenter presenter);
+    }
+}
diff --git a/InCallUI/src/com/android/incallui/AnswerUi.java b/InCallUI/src/com/android/incallui/AnswerUi.java
new file mode 100644
index 0000000..f501153
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/AnswerUi.java
@@ -0,0 +1,72 @@
+package com.android.incallui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+
+import com.android.incallui.widget.multiwaveview.GlowPadView;
+
+/**
+ *
+ */
+public class AnswerUi extends GlowPadView implements AnswerPresenter.Ui,
+        GlowPadView.OnTriggerListener {
+
+    private static final String TAG = AnswerUi.class.getSimpleName();
+
+    private AnswerPresenter mPresenter;
+
+    public AnswerUi(Context context) {
+        super(context);
+    }
+
+    public AnswerUi(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void onGrabbed(View v, int handle) {
+
+    }
+
+    @Override
+    public void onReleased(View v, int handle) {
+
+    }
+
+    @Override
+    public void onTrigger(View v, int target) {
+        final int resId = getResourceIdForTarget(target);
+        switch (resId) {
+            case R.drawable.ic_lockscreen_answer:
+                mPresenter.onAnswer();
+                break;
+            case R.drawable.ic_lockscreen_decline:
+                mPresenter.onDecline();
+                break;
+            case R.drawable.ic_lockscreen_text:
+                mPresenter.onText();
+                break;
+            default:
+                // Code should never reach here.
+                Log.e(TAG, "Trigger detected on unhandled resource. Skipping.");
+        }
+    }
+
+    @Override
+    public void onGrabbedStateChange(View v, int handle) {
+
+    }
+
+    @Override
+    public void onFinishFinalAnimation() {
+
+    }
+
+    @Override
+    public void setPresenter(AnswerPresenter listener) {
+        mPresenter = listener;
+    }
+
+}
