diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java
index 65b706e..a8939d3 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java
@@ -1,51 +1,201 @@
 package com.google.android.tv.setup.customizationsample;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
-import android.widget.Button;
+import android.view.KeyEvent;
+import android.view.View;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.util.LinkedHashMap;
 
 public abstract class BaseActivity extends Activity {
 
-    protected ImageView iv0;
-    protected Button btn0;
-    protected TextView tv0;
-    protected TextView tv1;
-    protected TextView tv2;
-    protected TextView tv3;
+    private static final String TAG = "SetupCustomization";
+
+    private ImageView iv0;
+    private TextView tv0;
+    private TextView tv1;
+    private TextView tv2;
+
+    private LinkedHashMap<Integer,Runnable> keyRunnables;
+    private LinkedHashMap<Integer,String> keyDescriptions;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+        super.onCreate(null);
         setContentView(R.layout.activity_base_layout);
 
-        iv0 = (ImageView)findViewById(R.id.image0);
-        btn0 = (Button)findViewById(R.id.btn0);
-        tv0 = (TextView)findViewById(R.id.tv0);
-        tv1 = (TextView)findViewById(R.id.tv1);
-        tv2 = (TextView)findViewById(R.id.tv2);
-        tv3 = (TextView)findViewById(R.id.tv3);
+        keyRunnables = new LinkedHashMap<>();
+        keyDescriptions = new LinkedHashMap<>();
+
+        iv0 = findViewById(R.id.image0);
+        tv0 = findViewById(R.id.tv0);
+        tv1 = findViewById(R.id.tv1);
+        tv2 = findViewById(R.id.tv2);
 
         tv0.setText(getTitle());
 
-        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
-        Date now = new Date();
-        String strDate = sdf.format(now);
-        tv1.setText(strDate);
+        populateIncomingExtrasView();
 
-        boolean movingForward = getIntent().getBooleanExtra("movingForward", true);
-        tv2.setText("movingForward: " + movingForward);
+        // tv1 left open for subclasses - see showText1()
+        // tv2 left open for subclasses - see showText2()
+    }
 
-        tv3.setText("upgraded_during_setup=" + getIntent().getBooleanExtra("upgraded_during_setup", false) +
-                ", post_provisioned_upgrade=" + getIntent().getBooleanExtra("post_provisioned_upgrade", false));
+    @Override
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        if (isFinishing()) {
+            return super.onKeyUp(keyCode, event);
+        }
+        for (int candidateKeyCode : keyRunnables.keySet()) {
+            if (candidateKeyCode == keyCode) {
+                return reactToKey(candidateKeyCode);
+            }
+        }
+        return super.onKeyUp(keyCode, event);
     }
 
     protected void log(String message) {
-        Log.d(getPackageName(), message);
+        Log.d(TAG, message);
+    }
+
+    protected void registerKeyHandlerResultCancelledBack() {
+        Intent intent = new Intent().putExtra(Constants.USER_INITIATED, true);
+        registerKeyHandler(KeyEvent.KEYCODE_BACK, null, Activity.RESULT_CANCELED, intent);
+    }
+
+    protected void registerKeyHandlerResultCancelledCrashDpadLeft() {
+        registerKeyHandler(KeyEvent.KEYCODE_DPAD_LEFT, "as if a crash occurred", Activity.RESULT_CANCELED, null);
+    }
+
+    protected void registerKeyHandlerResultOk(int keyCode, String addendum, String[] booleanExtrasToSend) {
+        final Intent intent = new Intent();
+        for (String booleanExtraToSend : booleanExtrasToSend) {
+            intent.putExtra(booleanExtraToSend, true);
+        }
+        registerKeyHandlerResultOk(keyCode, addendum, intent);
+    }
+
+    protected void registerKeyHandlerResultOk(int keyCode, String addendum) {
+        final Intent intent = new Intent();
+        registerKeyHandlerResultOk(keyCode, addendum, intent);
+    }
+
+    protected void registerKeyHandlerResultOkDpadCenterBoring() {
+        final Intent intent = new Intent();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_CENTER, "complete without doing anything interesting", intent);
+    }
+
+    protected void registerKeyHandlerResultOk(int keyCode, String addendum, final Intent intent) {
+        registerKeyHandler(keyCode, addendum, Activity.RESULT_OK, intent);
+    }
+
+    protected void showDrawable(int drawableResourceId) {
+        iv0.setVisibility(View.VISIBLE);
+        iv0.setImageResource(drawableResourceId);
+    }
+
+    protected void showText1(String text) {
+        tv1.setText(text);
+    }
+
+    protected void showText2(String text) {
+        tv2.setText(text);
+    }
+
+    private void registerKeyHandler(int keyCode, String addendum, final int resultCode, final Intent intent) {
+        StringBuilder message = new StringBuilder();
+        message.append("finish() and send " + resultCodeAsString(resultCode));
+        if (addendum != null) {
+            message.append(" - ").append(addendum);
+        }
+        if (intent != null) {
+            Bundle bundle = intent.getExtras();
+            if (bundle != null) {
+                message.append(" (");
+                for (String key : bundle.keySet()) {
+                    Object value = bundle.get(key);
+                    message.append(key).append('=').append(value).append(',');
+                }
+                message.append(')');
+            }
+        }
+        keyRunnables.put(keyCode, new Runnable() {
+            @Override
+            public void run() {
+                setResult(resultCode, intent);
+                finish();
+            }
+        });
+        keyDescriptions.put(keyCode, message.toString());
+        populateKeyHandlerViews();
+    }
+
+    private void populateKeyHandlerViews() {
+        LinearLayout llLeft = findViewById(R.id.ll_keyHandler1);
+        llLeft.removeAllViews();
+        LinearLayout llRight = findViewById(R.id.ll_keyHandler2);
+        llRight.removeAllViews();
+        for (Integer code : keyRunnables.keySet()) {
+            String keyStr = KeyEvent.keyCodeToString(code);
+            if (keyStr.startsWith("KEYCODE_")) {
+                keyStr = keyStr.substring("KEYCODE_".length());
+            }
+            if (keyStr.startsWith("DPAD_")) {
+                keyStr = keyStr.substring("DPAD_".length());
+            }
+            keyStr = keyStr + ":";
+            TextView tvKey = (TextView) getLayoutInflater().inflate(R.layout.key_item, llLeft, false);
+            tvKey.setText(keyStr);
+            tvKey.setTextColor(0xFF00FFFF);
+            llLeft.addView(tvKey);
+
+            TextView tvVal = (TextView) getLayoutInflater().inflate(R.layout.key_item, llRight, false);
+            tvVal.setText(keyDescriptions.get(code));
+            llRight.addView(tvVal);
+        }
+    }
+
+    private void populateIncomingExtrasView() {
+        LinearLayout llLeft = findViewById(R.id.ll_incomingExtra1);
+        llLeft.removeAllViews();
+        LinearLayout llRight = findViewById(R.id.ll_incomingExtra2);
+        llRight.removeAllViews();
+        Bundle bundle = getIntent().getExtras();
+        if (bundle != null) {
+            for (String key : bundle.keySet()) {
+                Object value = bundle.get(key);
+                TextView tvKey = (TextView) getLayoutInflater().inflate(R.layout.key_item, llLeft, false);
+                tvKey.setText(key);
+                tvKey.setTextColor(0xFF00FF00);
+                llLeft.addView(tvKey);
+                TextView tvVal = (TextView) getLayoutInflater().inflate(R.layout.key_item, llRight, false);
+                tvVal.setText(value.toString());
+                llRight.addView(tvVal);
+            }
+        }
+    }
+
+    private boolean reactToKey(int candidateKeyCode) {
+        try {
+            keyRunnables.get(candidateKeyCode).run();
+            log(keyDescriptions.get(candidateKeyCode));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static String resultCodeAsString(int resultCode) {
+        if (resultCode == Activity.RESULT_OK) {
+            return "RESULT_OK";
+        }
+        if (resultCode == Activity.RESULT_CANCELED) {
+            return "RESULT_CANCELLED";
+        }
+        return String.valueOf(resultCode);
     }
 }
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/Constants.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/Constants.java
new file mode 100644
index 0000000..84e652b
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/Constants.java
@@ -0,0 +1,9 @@
+package com.google.android.tv.setup.customizationsample;
+
+public class Constants {
+
+    public static final String PARTNER_HANDLED_NETWORK = "partner_handled_network";
+    public static final String PARTNER_HANDLED_NETWORK_USER_SKIPPED = "user_skipped_network_setup";
+
+    public static final String USER_INITIATED = "user_initiated";
+}
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookActivity.java
deleted file mode 100644
index 05a387f..0000000
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookActivity.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.google.android.tv.setup.customizationsample;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-
-public class HookActivity extends BaseActivity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        iv0.setVisibility(View.VISIBLE);
-        iv0.setImageResource(R.drawable.hook);
-
-        btn0.setVisibility(View.VISIBLE);
-        btn0.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                onAboutToFinish();
-                finish();
-            }
-        });
-    }
-
-    protected void onAboutToFinish() {
-        setResult(Activity.RESULT_OK);
-    }
-}
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java
index e4af2ab..9561638 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java
@@ -1,39 +1,23 @@
 package com.google.android.tv.setup.customizationsample;
 
-import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
 
 /**
- * A HOOK_BEGIN Activity.
+ * A HOOK_BEGIN Activity that illustrates the partner_handled_network extra.
  */
-public class HookBegin2Activity extends HookActivity {
-
-    private static final String EXTRA_PARTNER_HANDLED_NETWORK = "partner_handled_network";
-    private static final String EXTRA_PARTNER_HANDLED_NETWORK_USER_SKIPPED = "user_skipped_network_setup";
+public class HookBegin2Activity extends BaseActivity {
 
     @Override
-    protected void onAboutToFinish() {
-        Intent intent = new Intent();
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        showDrawable(R.drawable.hook);
 
-        // Set this to true to inform TV Setup that the partner has handled the network setup.
-        // A present and true value means that TV Setup will not show the default Network step
-        // (because the partner has already handled it and it would be weird for the user to see
-        // the default Network step after already having gone through the partner's.
-        if (getIntent().getBooleanExtra(EXTRA_PARTNER_HANDLED_NETWORK, false)) {
-            // We read the extra from the incoming Intent only for testing purposes. Normally, this
-            // partner Activity would have its own reasons for returning this extra back to Setup.
-            intent.putExtra(EXTRA_PARTNER_HANDLED_NETWORK, true);
-        }
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
 
-        // Set this to true to inform TV Setup that the partner has handled the network setup and
-        // that the user chose to skip setting up a network connection.
-        // A present and true value means that TV Setup will not show steps that require a network
-        // connection.
-        if (getIntent().getBooleanExtra(EXTRA_PARTNER_HANDLED_NETWORK_USER_SKIPPED, false)) {
-            // We read the extra from the incoming Intent only for testing purposes. Normally, this
-            // partner Activity would have its own reasons for returning this extra back to Setup.
-            intent.putExtra(EXTRA_PARTNER_HANDLED_NETWORK_USER_SKIPPED, true);
-        }
-
-        setResult(RESULT_OK, intent);
+        registerKeyHandlerResultOkDpadCenterBoring();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "as if the partner handled network setup", new String[] {Constants.PARTNER_HANDLED_NETWORK});
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_UP, "as if the partner handles network setup but the user chose not to set up a network", new String[] {Constants.PARTNER_HANDLED_NETWORK,Constants.PARTNER_HANDLED_NETWORK_USER_SKIPPED});
     }
 }
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java
index 5e6dce0..dd64d8c 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java
@@ -1,7 +1,19 @@
 package com.google.android.tv.setup.customizationsample;
 
+import android.os.Bundle;
+
 /**
- * A HOOK_BEGIN Activity.
+ * A HOOK_BEGIN Activity that does nothing but allow finish().
  */
-public class HookBeginActivity extends HookActivity {
+public class HookBeginActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        showDrawable(R.drawable.hook);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
 }
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java
index 89b382d..a77b2f9 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java
@@ -1,7 +1,20 @@
 package com.google.android.tv.setup.customizationsample;
 
+import android.os.Bundle;
+
 /**
- * A HOOK_END Activity.
+ * A HOOK_END Activity that does nothing but allow finish().
  */
-public class HookEndActivity extends HookActivity {
+public class HookEndActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.hook);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
 }
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java
index b6394ac..3394cfd 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java
@@ -2,16 +2,13 @@
 
 import android.content.Intent;
 import android.os.Bundle;
-import android.os.Handler;
+import android.view.KeyEvent;
 
 /**
- * A HOOK_POST_NETWORK Activity, which simulates checking for a system upgrade.
+ * A HOOK_POST_NETWORK Activity which simulates checking for a system upgrade.
  */
 public class HookPostNetworkActivity extends BaseActivity {
 
-    int mSecondsRemaining;
-    Runnable mRunnable;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -20,31 +17,12 @@
         // We do not make visible any UI elements; instead we allow Android TV Setup's "Please wait"
         // step to show under us while we figure out if an upgrade is available. That way there are
         // fewer transitions which is especially useful in case we have nothing important to do.
-        mRunnable = new Runnable() {
-            @Override
-            public void run() {
-                mSecondsRemaining--;
-                if (mSecondsRemaining >= 0) {
-                    tv3.setText(mSecondsRemaining + " seconds remaining");
-                    new Handler().postDelayed(mRunnable, 1000);
-                } else {
-                    // This skip_stage_2 stuff is just for testing - so that we can exercise the
-                    // case where no follow-up Activity is needed.
-                    if (getIntent().getBooleanExtra("skip_follow_up", false)) {
-                        log("hook post-network: return no follow-up Activity Intent");
-                        setResult(RESULT_OK);
-                        finish();
-                    } else {
-                        log("hook post-network: return follow-up Activity Intent");
-                        Intent intent = new Intent(getApplicationContext(), HookPostNetworkFollowupActivity.class);
-                        setResult(RESULT_OK, intent);
-                        finish();
-                    }
-                }
-            }
-        };
-        mSecondsRemaining = 3;
-        mRunnable.run();
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_CENTER, "with no follow-up Activity");
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "with a follow-up Activity", new Intent(getApplicationContext(), HookPostNetworkFollowupActivity.class));
     }
 }
 
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java
index e3d36e8..ee1dc9b 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java
@@ -1,52 +1,24 @@
 package com.google.android.tv.setup.customizationsample;
 
-import android.content.Context;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.view.View;
+import android.view.KeyEvent;
 
 /**
  * A HOOK_POST_NETWORK follow-up Activity, which simulates performing a system upgrade.
  */
 public class HookPostNetworkFollowupActivity extends BaseActivity {
 
-    int mSecondsRemaining;
-    Runnable mRunnable;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        // Here we pretend to perform a system upgrade.
-        iv0.setVisibility(View.VISIBLE);
-        iv0.setImageResource(R.drawable.download);
-        mRunnable = new Runnable() {
-            @Override
-            public void run() {
-                mSecondsRemaining--;
-                if (mSecondsRemaining >= 0) {
-                    tv3.setText(mSecondsRemaining + " seconds remaining");
-                    new Handler().postDelayed(mRunnable, 1000);
-                } else {
-                    conclude();
-                }
-            }
-        };
-        mSecondsRemaining = 3;
-        mRunnable.run();
-    }
+        showDrawable(R.drawable.download);
 
-    protected void conclude() {
-        if (getIntent().getBooleanExtra("reboot", false)) {
-            log("simulate perform upgrade: simulate upgrade by invoking reboot now");
-            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
-            pm.reboot(null);
-        } else {
-            log("simulate perform upgrade: simulate upgrade halted/failed; return to Setup");
-            setResult(RESULT_OK);
-            finish();
-        }
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "simulate an upgrade by doing a reboot (this is a very weak simulation of an upgrade)");
     }
 }
 
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java
index a90c58c..0b0c0cd 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java
@@ -1,7 +1,5 @@
 package com.google.android.tv.setup.customizationsample;
 
-import android.app.Activity;
-import android.content.Intent;
 import android.os.Bundle;
 import android.view.KeyEvent;
 
@@ -10,36 +8,16 @@
  */
 public class NetworkDelegationActivity extends BaseActivity {
 
-    public static final int RESULT_CODE_USER_SKIPPED = 3;
-    boolean mHeardKey;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        tv1.setText("Press CENTER to pretend we just set up the network; press RIGHT to skip; press BACK to back out");
-    }
+        showDrawable(R.drawable.home_internet);
 
-    @Override
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (!mHeardKey && keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
-            mHeardKey = true;
-            setResult(Activity.RESULT_OK);
-            finish();
-            return true;
-        }
-        if (!mHeardKey && keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
-            mHeardKey = true;
-            setResult(RESULT_CODE_USER_SKIPPED);
-            finish();
-            return true;
-        }
-        return super.onKeyUp(keyCode, event);
-    }
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
 
-    @Override
-    public void onBackPressed() {
-        setResult(Activity.RESULT_CANCELED, new Intent().putExtra("user_initiated", true));
-        finish();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_CENTER, "as if the user set up a network");
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "as if the user chose to not set up a network", new String[] {Constants.PARTNER_HANDLED_NETWORK_USER_SKIPPED});
     }
 }
 
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/home_internet.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/home_internet.png
new file mode 100644
index 0000000..99d86e4
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/home_internet.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/layout/activity_base_layout.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/layout/activity_base_layout.xml
index da44ab4..a66d2a7 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/res/layout/activity_base_layout.xml
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/layout/activity_base_layout.xml
@@ -20,61 +20,97 @@
         android:layout_gravity="left|bottom"
         >
 
-        <Button
-            android:id="@+id/btn0"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="Next"
-            android:visibility="gone"
+        <TextView
+            android:id="@+id/tv2"
+            style="@style/MyTextViewStyle"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
+            tools:text="some more test text"
             />
 
         <TextView
-            android:id="@+id/tv0"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:layout_marginTop="20dp"
-            android:layout_marginLeft="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="24sp" />
-
-        <TextView
             android:id="@+id/tv1"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
+            style="@style/MyTextViewStyle"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="12sp" />
+            tools:text="some more test text"
+            />
 
+        <!-- Key Handlers -->
         <TextView
-            android:id="@+id/tv2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
+            style="@style/MyTextViewStyle"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="12sp" />
-
-        <TextView
-            android:id="@+id/tv3"
+            android:text="Key Handlers"
+            />
+        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="left|bottom"
-            android:gravity="center"
+            android:layout_marginLeft="30dp"
+            >
+
+            <LinearLayout
+                android:id="@+id/ll_keyHandler1"
+                android:orientation="vertical"
+                android:gravity="right"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                >
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/ll_keyHandler2"
+                android:orientation="vertical"
+                android:layout_gravity="left"
+                android:gravity="left"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="6dp"
+                >
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <!-- Incoming Extras -->
+        <TextView
+            style="@style/MyTextViewStyle"
+            android:layout_marginTop="20dp"
+            android:layout_marginLeft="20dp"
+            android:text="Incoming Extras"
+            />
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="30dp"
+            >
+            <LinearLayout
+                android:id="@+id/ll_incomingExtra1"
+                android:orientation="vertical"
+                android:gravity="right"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                >
+            </LinearLayout>
+            <LinearLayout
+                android:id="@+id/ll_incomingExtra2"
+                android:orientation="vertical"
+                android:layout_gravity="left"
+                android:gravity="left"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="6dp"
+                >
+            </LinearLayout>
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/tv0"
+            style="@style/MyTextViewStyleLarge"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
             android:layout_marginBottom="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="12sp" />
+            tools:text="Some test title text"
+            />
 
     </LinearLayout>
 
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/layout/key_item.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/layout/key_item.xml
new file mode 100644
index 0000000..d694372
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/layout/key_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/tv"
+    style="@style/MyTextViewStyleSmall"
+    />
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml
index 178c902..4b19c7b 100644
--- a/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml
@@ -11,4 +11,20 @@
         <item name="android:windowBackground">@android:color/holo_blue_light</item>
     </style>
 
+    <style name="MyTextViewStyle">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">left</item>
+        <item name="android:textColor">@android:color/white</item>
+        <item name="android:textSize">12sp</item>
+    </style>
+
+    <style name="MyTextViewStyleSmall" parent="@style/MyTextViewStyle">
+        <item name="android:textSize">10sp</item>
+    </style>
+
+    <style name="MyTextViewStyleLarge" parent="@style/MyTextViewStyle">
+        <item name="android:textSize">24sp</item>
+    </style>
+
 </resources>
diff --git a/apps/tv/SetupValidation/app/build.gradle b/apps/tv/SetupValidation/app/build.gradle
index 05f841e..f4df956 100644
--- a/apps/tv/SetupValidation/app/build.gradle
+++ b/apps/tv/SetupValidation/app/build.gradle
@@ -3,7 +3,7 @@
 android {
     compileSdkVersion 26
     defaultConfig {
-        applicationId "com.google.android.tv.setup.validation"
+        applicationId "com.google.android.tv.setup.customizationsample"
         minSdkVersion 21
         targetSdkVersion 26
         versionCode 1
diff --git a/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml b/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml
index 83feeaa..43424fe 100644
--- a/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml
+++ b/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.google.android.tv.setup.validation">
+    package="com.google.android.tv.setup.customizationsample">
 
     <uses-feature
         android:name="android.hardware.touchscreen"
@@ -9,12 +9,106 @@
         android:name="android.software.leanback"
         android:required="true" />
 
+    <uses-permission android:name="com.android.setupwizard.permission.SETUP" />
+    <uses-permission android:name="android.permission.REBOOT" />
+
     <application
-        android:label="TV Setup Validation"
+        android:label="TV Setup Customization Sample"
         android:theme="@style/AppTheme">
 
 
-        <!-- A simple opaque Activity with a button that finishes it. -->
+        <!-- This Receiver marks this app as being eligible to provide resources which influence
+        the behavior and look of TV Setup. -->
+        <receiver android:name=".PartnerReceiver">
+            <intent-filter>
+                <action android:name="com.google.android.tvsetup.action.PARTNER_CUSTOMIZATION" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </receiver>
+
+
+        <!-- HOOK Activity examples -->
+
+        <activity
+            android:name=".HookBeginActivity"
+            android:label="Partner Hook: Begin (Priority 5)"
+            android:screenOrientation="landscape">
+            <intent-filter android:priority="5">
+                <action android:name="com.android.setupwizard.action.HOOK_BEGIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+        <activity
+            android:name=".HookBegin2Activity"
+            android:label="Partner Hook: Begin (Priority 4)"
+            android:screenOrientation="landscape">
+            <intent-filter android:priority="4">
+                <action android:name="com.android.setupwizard.action.HOOK_BEGIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+        <activity
+            android:name=".HookPostNetworkActivity"
+            android:screenOrientation="landscape"
+            android:label="Partner Hook: Post-Network"
+            >
+            <intent-filter>
+                <action android:name="com.android.setupwizard.action.HOOK_POST_NETWORK" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+        <activity
+            android:name=".HookPostNetworkFollowupActivity"
+            android:screenOrientation="landscape"
+            android:label="Partner Hook: Post-Network Follow-up"
+            android:exported="true"
+            >
+        </activity>
+
+
+        <activity
+            android:name=".HookEndActivity"
+            android:screenOrientation="landscape"
+            android:label="Partner Hook: End"
+            >
+            <intent-filter>
+                <action android:name="com.android.setupwizard.action.HOOK_END" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+        <!-- Implements the delegate-network-to-partner action. -->
+        <activity
+            android:name=".NetworkDelegationActivity"
+            android:screenOrientation="landscape"
+            android:label="Network Delegation"
+            >
+            <intent-filter>
+                <action android:name="com.android.net.GET_CONNECTED" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+        <activity
+            android:name=".HookPostWelcomeActivity"
+            android:label="Partner Hook: Post-Welcome"
+            android:screenOrientation="landscape">
+            <intent-filter android:priority="4">
+                <action android:name="com.android.setupwizard.action.HOOK_POST_WELCOME" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+
+        <!-- A simple opaque Activity -->
         <activity
             android:name=".OpaqueActivity"
             android:screenOrientation="landscape"
@@ -24,7 +118,8 @@
             >
         </activity>
 
-        <!-- A simple transparent Activity with a button that finishes it. -->
+
+        <!-- A simple transparent Activity -->
         <activity
             android:name=".TransparentActivity"
             android:screenOrientation="landscape"
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/BaseActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/BaseActivity.java
deleted file mode 100644
index f1e95df..0000000
--- a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/BaseActivity.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.google.android.tv.setup;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.google.android.tv.setup.validation.R;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-public abstract class BaseActivity extends Activity {
-
-    protected ImageView iv0;
-    protected Button btn0;
-    protected TextView tv0;
-    protected TextView tv1;
-    protected TextView tv2;
-    protected TextView tv3;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_base_layout);
-
-        iv0 = (ImageView)findViewById(R.id.image0);
-        btn0 = (Button)findViewById(R.id.btn0);
-        tv0 = (TextView)findViewById(R.id.tv0);
-        tv1 = (TextView)findViewById(R.id.tv1);
-        tv2 = (TextView)findViewById(R.id.tv2);
-        tv3 = (TextView)findViewById(R.id.tv3);
-
-        tv0.setText(getTitle());
-
-        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
-        Date now = new Date();
-        String strDate = sdf.format(now);
-        tv1.setText(strDate);
-
-        boolean movingForward = getIntent().getBooleanExtra("movingForward", true);
-        tv2.setText("movingForward: " + movingForward);
-    }
-
-    protected void log(String message) {
-        Log.d(getPackageName(), message);
-    }
-
-    @Override
-    public void onBackPressed() {
-        setResult(RESULT_CANCELED, new Intent().putExtra("user_initiated", true));
-        super.onBackPressed();
-    }
-}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java
new file mode 100644
index 0000000..a8939d3
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java
@@ -0,0 +1,201 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.util.LinkedHashMap;
+
+public abstract class BaseActivity extends Activity {
+
+    private static final String TAG = "SetupCustomization";
+
+    private ImageView iv0;
+    private TextView tv0;
+    private TextView tv1;
+    private TextView tv2;
+
+    private LinkedHashMap<Integer,Runnable> keyRunnables;
+    private LinkedHashMap<Integer,String> keyDescriptions;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(null);
+        setContentView(R.layout.activity_base_layout);
+
+        keyRunnables = new LinkedHashMap<>();
+        keyDescriptions = new LinkedHashMap<>();
+
+        iv0 = findViewById(R.id.image0);
+        tv0 = findViewById(R.id.tv0);
+        tv1 = findViewById(R.id.tv1);
+        tv2 = findViewById(R.id.tv2);
+
+        tv0.setText(getTitle());
+
+        populateIncomingExtrasView();
+
+        // tv1 left open for subclasses - see showText1()
+        // tv2 left open for subclasses - see showText2()
+    }
+
+    @Override
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        if (isFinishing()) {
+            return super.onKeyUp(keyCode, event);
+        }
+        for (int candidateKeyCode : keyRunnables.keySet()) {
+            if (candidateKeyCode == keyCode) {
+                return reactToKey(candidateKeyCode);
+            }
+        }
+        return super.onKeyUp(keyCode, event);
+    }
+
+    protected void log(String message) {
+        Log.d(TAG, message);
+    }
+
+    protected void registerKeyHandlerResultCancelledBack() {
+        Intent intent = new Intent().putExtra(Constants.USER_INITIATED, true);
+        registerKeyHandler(KeyEvent.KEYCODE_BACK, null, Activity.RESULT_CANCELED, intent);
+    }
+
+    protected void registerKeyHandlerResultCancelledCrashDpadLeft() {
+        registerKeyHandler(KeyEvent.KEYCODE_DPAD_LEFT, "as if a crash occurred", Activity.RESULT_CANCELED, null);
+    }
+
+    protected void registerKeyHandlerResultOk(int keyCode, String addendum, String[] booleanExtrasToSend) {
+        final Intent intent = new Intent();
+        for (String booleanExtraToSend : booleanExtrasToSend) {
+            intent.putExtra(booleanExtraToSend, true);
+        }
+        registerKeyHandlerResultOk(keyCode, addendum, intent);
+    }
+
+    protected void registerKeyHandlerResultOk(int keyCode, String addendum) {
+        final Intent intent = new Intent();
+        registerKeyHandlerResultOk(keyCode, addendum, intent);
+    }
+
+    protected void registerKeyHandlerResultOkDpadCenterBoring() {
+        final Intent intent = new Intent();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_CENTER, "complete without doing anything interesting", intent);
+    }
+
+    protected void registerKeyHandlerResultOk(int keyCode, String addendum, final Intent intent) {
+        registerKeyHandler(keyCode, addendum, Activity.RESULT_OK, intent);
+    }
+
+    protected void showDrawable(int drawableResourceId) {
+        iv0.setVisibility(View.VISIBLE);
+        iv0.setImageResource(drawableResourceId);
+    }
+
+    protected void showText1(String text) {
+        tv1.setText(text);
+    }
+
+    protected void showText2(String text) {
+        tv2.setText(text);
+    }
+
+    private void registerKeyHandler(int keyCode, String addendum, final int resultCode, final Intent intent) {
+        StringBuilder message = new StringBuilder();
+        message.append("finish() and send " + resultCodeAsString(resultCode));
+        if (addendum != null) {
+            message.append(" - ").append(addendum);
+        }
+        if (intent != null) {
+            Bundle bundle = intent.getExtras();
+            if (bundle != null) {
+                message.append(" (");
+                for (String key : bundle.keySet()) {
+                    Object value = bundle.get(key);
+                    message.append(key).append('=').append(value).append(',');
+                }
+                message.append(')');
+            }
+        }
+        keyRunnables.put(keyCode, new Runnable() {
+            @Override
+            public void run() {
+                setResult(resultCode, intent);
+                finish();
+            }
+        });
+        keyDescriptions.put(keyCode, message.toString());
+        populateKeyHandlerViews();
+    }
+
+    private void populateKeyHandlerViews() {
+        LinearLayout llLeft = findViewById(R.id.ll_keyHandler1);
+        llLeft.removeAllViews();
+        LinearLayout llRight = findViewById(R.id.ll_keyHandler2);
+        llRight.removeAllViews();
+        for (Integer code : keyRunnables.keySet()) {
+            String keyStr = KeyEvent.keyCodeToString(code);
+            if (keyStr.startsWith("KEYCODE_")) {
+                keyStr = keyStr.substring("KEYCODE_".length());
+            }
+            if (keyStr.startsWith("DPAD_")) {
+                keyStr = keyStr.substring("DPAD_".length());
+            }
+            keyStr = keyStr + ":";
+            TextView tvKey = (TextView) getLayoutInflater().inflate(R.layout.key_item, llLeft, false);
+            tvKey.setText(keyStr);
+            tvKey.setTextColor(0xFF00FFFF);
+            llLeft.addView(tvKey);
+
+            TextView tvVal = (TextView) getLayoutInflater().inflate(R.layout.key_item, llRight, false);
+            tvVal.setText(keyDescriptions.get(code));
+            llRight.addView(tvVal);
+        }
+    }
+
+    private void populateIncomingExtrasView() {
+        LinearLayout llLeft = findViewById(R.id.ll_incomingExtra1);
+        llLeft.removeAllViews();
+        LinearLayout llRight = findViewById(R.id.ll_incomingExtra2);
+        llRight.removeAllViews();
+        Bundle bundle = getIntent().getExtras();
+        if (bundle != null) {
+            for (String key : bundle.keySet()) {
+                Object value = bundle.get(key);
+                TextView tvKey = (TextView) getLayoutInflater().inflate(R.layout.key_item, llLeft, false);
+                tvKey.setText(key);
+                tvKey.setTextColor(0xFF00FF00);
+                llLeft.addView(tvKey);
+                TextView tvVal = (TextView) getLayoutInflater().inflate(R.layout.key_item, llRight, false);
+                tvVal.setText(value.toString());
+                llRight.addView(tvVal);
+            }
+        }
+    }
+
+    private boolean reactToKey(int candidateKeyCode) {
+        try {
+            keyRunnables.get(candidateKeyCode).run();
+            log(keyDescriptions.get(candidateKeyCode));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static String resultCodeAsString(int resultCode) {
+        if (resultCode == Activity.RESULT_OK) {
+            return "RESULT_OK";
+        }
+        if (resultCode == Activity.RESULT_CANCELED) {
+            return "RESULT_CANCELLED";
+        }
+        return String.valueOf(resultCode);
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/Constants.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/Constants.java
new file mode 100644
index 0000000..84e652b
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/Constants.java
@@ -0,0 +1,9 @@
+package com.google.android.tv.setup.customizationsample;
+
+public class Constants {
+
+    public static final String PARTNER_HANDLED_NETWORK = "partner_handled_network";
+    public static final String PARTNER_HANDLED_NETWORK_USER_SKIPPED = "user_skipped_network_setup";
+
+    public static final String USER_INITIATED = "user_initiated";
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java
new file mode 100644
index 0000000..9561638
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java
@@ -0,0 +1,23 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+import android.view.KeyEvent;
+
+/**
+ * A HOOK_BEGIN Activity that illustrates the partner_handled_network extra.
+ */
+public class HookBegin2Activity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        showDrawable(R.drawable.hook);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "as if the partner handled network setup", new String[] {Constants.PARTNER_HANDLED_NETWORK});
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_UP, "as if the partner handles network setup but the user chose not to set up a network", new String[] {Constants.PARTNER_HANDLED_NETWORK,Constants.PARTNER_HANDLED_NETWORK_USER_SKIPPED});
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java
new file mode 100644
index 0000000..dd64d8c
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java
@@ -0,0 +1,19 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+
+/**
+ * A HOOK_BEGIN Activity that does nothing but allow finish().
+ */
+public class HookBeginActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        showDrawable(R.drawable.hook);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java
new file mode 100644
index 0000000..a77b2f9
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java
@@ -0,0 +1,20 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+
+/**
+ * A HOOK_END Activity that does nothing but allow finish().
+ */
+public class HookEndActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.hook);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java
new file mode 100644
index 0000000..3394cfd
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java
@@ -0,0 +1,29 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+
+/**
+ * A HOOK_POST_NETWORK Activity which simulates checking for a system upgrade.
+ */
+public class HookPostNetworkActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Here we pretend that we are checking if an upgrade is available.
+        // We do not make visible any UI elements; instead we allow Android TV Setup's "Please wait"
+        // step to show under us while we figure out if an upgrade is available. That way there are
+        // fewer transitions which is especially useful in case we have nothing important to do.
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_CENTER, "with no follow-up Activity");
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "with a follow-up Activity", new Intent(getApplicationContext(), HookPostNetworkFollowupActivity.class));
+    }
+}
+
+
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java
new file mode 100644
index 0000000..ee1dc9b
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java
@@ -0,0 +1,25 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+import android.view.KeyEvent;
+
+/**
+ * A HOOK_POST_NETWORK follow-up Activity, which simulates performing a system upgrade.
+ */
+public class HookPostNetworkFollowupActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.download);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "simulate an upgrade by doing a reboot (this is a very weak simulation of an upgrade)");
+    }
+}
+
+
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostWelcomeActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostWelcomeActivity.java
new file mode 100644
index 0000000..718363e
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostWelcomeActivity.java
@@ -0,0 +1,23 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+import android.view.KeyEvent;
+
+/**
+ * A HOOK_POST_WELCOME Activity.
+ */
+public class HookPostWelcomeActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        showDrawable(R.drawable.hook);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "as if the partner handled network setup", new String[] {Constants.PARTNER_HANDLED_NETWORK});
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_UP, "as if the partner handles network setup but the user chose not to set up a network", new String[] {Constants.PARTNER_HANDLED_NETWORK,Constants.PARTNER_HANDLED_NETWORK_USER_SKIPPED});
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/MockHotwordEnrollmentActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/MockHotwordEnrollmentActivity.java
new file mode 100644
index 0000000..58a33fd
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/MockHotwordEnrollmentActivity.java
@@ -0,0 +1,15 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+
+public class MockHotwordEnrollmentActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.hotword_enrollment);
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/MockKatnissActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/MockKatnissActivity.java
new file mode 100644
index 0000000..ffb86e6
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/MockKatnissActivity.java
@@ -0,0 +1,15 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+
+public class MockKatnissActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.mock_katniss);
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java
new file mode 100644
index 0000000..0b0c0cd
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/NetworkDelegationActivity.java
@@ -0,0 +1,24 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+import android.view.KeyEvent;
+
+/**
+ * A network delegation Activity, which simulates presenting a get-me-connected user interface.
+ */
+public class NetworkDelegationActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        showDrawable(R.drawable.home_internet);
+
+        registerKeyHandlerResultCancelledBack();
+        registerKeyHandlerResultCancelledCrashDpadLeft();
+
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_CENTER, "as if the user set up a network");
+        registerKeyHandlerResultOk(KeyEvent.KEYCODE_DPAD_RIGHT, "as if the user chose to not set up a network", new String[] {Constants.PARTNER_HANDLED_NETWORK_USER_SKIPPED});
+    }
+}
+
+
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/OpaqueActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/OpaqueActivity.java
new file mode 100644
index 0000000..34385da
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/OpaqueActivity.java
@@ -0,0 +1,15 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+
+public class OpaqueActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.opaque_tile);
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/PartnerReceiver.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/PartnerReceiver.java
new file mode 100644
index 0000000..340d270
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/PartnerReceiver.java
@@ -0,0 +1,17 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+/**
+ * This no-op BroadcastReceiver marks this application as a provider of partner resources for
+ * Android TV Setup. See AndroidManifest.xml for more details.
+ */
+public class PartnerReceiver extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        // Do nothing.
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/TransparentActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/TransparentActivity.java
new file mode 100644
index 0000000..c06a66f
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/customizationsample/TransparentActivity.java
@@ -0,0 +1,15 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.os.Bundle;
+
+public class TransparentActivity extends BaseActivity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        showDrawable(R.drawable.opaque_tile);
+
+        registerKeyHandlerResultOkDpadCenterBoring();
+    }
+}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockHotwordEnrollmentActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockHotwordEnrollmentActivity.java
deleted file mode 100644
index c05624d..0000000
--- a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockHotwordEnrollmentActivity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.google.android.tv.setup.validation;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-
-import com.google.android.tv.setup.BaseActivity;
-
-public class MockHotwordEnrollmentActivity extends BaseActivity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        iv0.setVisibility(View.VISIBLE);
-        iv0.setImageResource(R.drawable.hotword_enrollment);
-
-        btn0.setVisibility(View.VISIBLE);
-        btn0.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                setResult(Activity.RESULT_OK);
-                finish();
-            }
-        });
-    }
-}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockKatnissActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockKatnissActivity.java
deleted file mode 100644
index 9ff134d..0000000
--- a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockKatnissActivity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.google.android.tv.setup.validation;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-
-import com.google.android.tv.setup.BaseActivity;
-
-public class MockKatnissActivity extends BaseActivity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        iv0.setVisibility(View.VISIBLE);
-        iv0.setImageResource(R.drawable.mock_katniss);
-
-        btn0.setVisibility(View.VISIBLE);
-        btn0.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                onAboutToFinish();
-                finish();
-            }
-        });
-    }
-
-    protected void onAboutToFinish() {
-        setResult(Activity.RESULT_OK);
-    }
-}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/OpaqueActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/OpaqueActivity.java
deleted file mode 100644
index 2ebf60d..0000000
--- a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/OpaqueActivity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.google.android.tv.setup.validation;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-
-import com.google.android.tv.setup.BaseActivity;
-
-public class OpaqueActivity extends BaseActivity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        iv0.setVisibility(View.VISIBLE);
-        iv0.setImageResource(R.drawable.opaque_tile);
-
-        btn0.setVisibility(View.VISIBLE);
-        btn0.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                setResult(Activity.RESULT_OK);
-                finish();
-            }
-        });
-    }
-}
diff --git a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/TransparentActivity.java b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/TransparentActivity.java
deleted file mode 100644
index 7b379ab..0000000
--- a/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/TransparentActivity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.google.android.tv.setup.validation;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-
-import com.google.android.tv.setup.BaseActivity;
-
-public class TransparentActivity extends BaseActivity {
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        iv0.setVisibility(View.VISIBLE);
-        iv0.setImageResource(R.drawable.opaque_tile);
-
-        btn0.setVisibility(View.VISIBLE);
-        btn0.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                setResult(Activity.RESULT_OK);
-                finish();
-            }
-        });
-    }
-}
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/download.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/download.png
new file mode 100644
index 0000000..ab2a1ea
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/download.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/home_internet.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/home_internet.png
new file mode 100644
index 0000000..99d86e4
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/home_internet.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hook.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hook.png
new file mode 100644
index 0000000..f7c7add
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hook.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hotword_graphic.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hotword_graphic.png
new file mode 100644
index 0000000..6e1513b
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hotword_graphic.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/tutorial_image_0.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/tutorial_image_0.png
new file mode 100644
index 0000000..a522985
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/tutorial_image_0.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/tutorial_image_1.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/tutorial_image_1.png
new file mode 100644
index 0000000..19c0c75
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/tutorial_image_1.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/welcome_background.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/welcome_background.png
new file mode 100644
index 0000000..7dd9c92
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/welcome_background.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.png b/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.png
new file mode 100644
index 0000000..a12e02b
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.png b/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.png
new file mode 100644
index 0000000..912c702
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.png b/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.png
new file mode 100644
index 0000000..1a3685f
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/layout/activity_base_layout.xml b/apps/tv/SetupValidation/app/src/main/res/layout/activity_base_layout.xml
index da44ab4..a66d2a7 100644
--- a/apps/tv/SetupValidation/app/src/main/res/layout/activity_base_layout.xml
+++ b/apps/tv/SetupValidation/app/src/main/res/layout/activity_base_layout.xml
@@ -20,61 +20,97 @@
         android:layout_gravity="left|bottom"
         >
 
-        <Button
-            android:id="@+id/btn0"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="Next"
-            android:visibility="gone"
+        <TextView
+            android:id="@+id/tv2"
+            style="@style/MyTextViewStyle"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
+            tools:text="some more test text"
             />
 
         <TextView
-            android:id="@+id/tv0"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:layout_marginTop="20dp"
-            android:layout_marginLeft="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="24sp" />
-
-        <TextView
             android:id="@+id/tv1"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
+            style="@style/MyTextViewStyle"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="12sp" />
+            tools:text="some more test text"
+            />
 
+        <!-- Key Handlers -->
         <TextView
-            android:id="@+id/tv2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
+            style="@style/MyTextViewStyle"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="12sp" />
-
-        <TextView
-            android:id="@+id/tv3"
+            android:text="Key Handlers"
+            />
+        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="left|bottom"
-            android:gravity="center"
+            android:layout_marginLeft="30dp"
+            >
+
+            <LinearLayout
+                android:id="@+id/ll_keyHandler1"
+                android:orientation="vertical"
+                android:gravity="right"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                >
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/ll_keyHandler2"
+                android:orientation="vertical"
+                android:layout_gravity="left"
+                android:gravity="left"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="6dp"
+                >
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <!-- Incoming Extras -->
+        <TextView
+            style="@style/MyTextViewStyle"
+            android:layout_marginTop="20dp"
+            android:layout_marginLeft="20dp"
+            android:text="Incoming Extras"
+            />
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="30dp"
+            >
+            <LinearLayout
+                android:id="@+id/ll_incomingExtra1"
+                android:orientation="vertical"
+                android:gravity="right"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                >
+            </LinearLayout>
+            <LinearLayout
+                android:id="@+id/ll_incomingExtra2"
+                android:orientation="vertical"
+                android:layout_gravity="left"
+                android:gravity="left"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="6dp"
+                >
+            </LinearLayout>
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/tv0"
+            style="@style/MyTextViewStyleLarge"
             android:layout_marginTop="20dp"
             android:layout_marginLeft="20dp"
             android:layout_marginBottom="20dp"
-            tools:text="foobar"
-            android:textColor="@android:color/white"
-            android:textSize="12sp" />
+            tools:text="Some test title text"
+            />
 
     </LinearLayout>
 
diff --git a/apps/tv/SetupValidation/app/src/main/res/layout/key_item.xml b/apps/tv/SetupValidation/app/src/main/res/layout/key_item.xml
new file mode 100644
index 0000000..d694372
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/layout/key_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/tv"
+    style="@style/MyTextViewStyleSmall"
+    />
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_01_searching.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_01_searching.mp4
new file mode 100644
index 0000000..07a217e
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_01_searching.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_01_searching_already_bonded.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_01_searching_already_bonded.mp4
new file mode 100644
index 0000000..9150f5d
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_01_searching_already_bonded.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_02_tran_01.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_02_tran_01.mp4
new file mode 100644
index 0000000..80a550a
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_02_tran_01.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_03_instruction.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_03_instruction.mp4
new file mode 100644
index 0000000..40d367d
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_03_instruction.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_04_tran_02.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_04_tran_02.mp4
new file mode 100644
index 0000000..2915d80
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_04_tran_02.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_05_connecting.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_05_connecting.mp4
new file mode 100644
index 0000000..293b8b8
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_05_connecting.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_06_success.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_06_success.mp4
new file mode 100644
index 0000000..d6a0bc7
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_06_success.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/btpair_07_error.mp4 b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_07_error.mp4
new file mode 100644
index 0000000..5afd580
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/btpair_07_error.mp4
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/raw/remote_pairing.xml b/apps/tv/SetupValidation/app/src/main/res/raw/remote_pairing.xml
new file mode 100644
index 0000000..6a38cec
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/raw/remote_pairing.xml
@@ -0,0 +1,30 @@
+<remote-pairing type="video">
+  <prepaired-searching>
+    <item name="btpair_01_searching" count="0" />
+  </prepaired-searching>
+  <prepaired-await-select>
+    <item name="btpair_01_searching_already_bonded" count="0" />
+  </prepaired-await-select>
+  <initial-scan>
+    <item name="btpair_01_searching" count="3" />
+    <item name="btpair_02_tran_01" count="1" />
+    <item name="btpair_03_instruction" count="0" />
+  </initial-scan>
+  <prepaired-initial-scan>
+    <item name="btpair_02_tran_01" count="1" />
+    <item name="btpair_03_instruction" count="0" />
+  </prepaired-initial-scan>
+  <rescan>
+    <item name="btpair_03_instruction" count="0" />
+  </rescan>
+  <bond>
+    <item name="btpair_04_tran_02" count="1" />
+    <item name="btpair_05_connecting" count="0" />
+  </bond>
+  <success>
+    <item name="btpair_06_success" count="1" />
+  </success>
+  <error>
+    <item name="btpair_07_error" count="1" />
+  </error>
+</remote-pairing>
diff --git a/apps/tv/SetupValidation/app/src/main/res/values-zh/config.xml b/apps/tv/SetupValidation/app/src/main/res/values-zh/config.xml
new file mode 100644
index 0000000..2441911
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/values-zh/config.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <!--<string name="welcome_message">你好</string>-->
+
+    <!--<string name="hotword_description_appendage">Hotwording 很熱!</string>-->
+
+
+    <!--<string name="tutorial_title0">恐龍好可怕</string>-->
+    <!--<string name="tutorial_description0">要小心，否則你可能會被吃掉</string>-->
+
+    <!--<string name="tutorial_title1">這部電影很棒</string>-->
+    <!--<string name="tutorial_description1">小孩子喜歡恐龍玩具</string>-->
+
+</resources>
diff --git a/apps/tv/SetupValidation/app/src/main/res/values/config.xml b/apps/tv/SetupValidation/app/src/main/res/values/config.xml
new file mode 100644
index 0000000..47841f7
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/values/config.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+
+    <!-- Whether to allow backing into the HOOK_BEGIN activities. -->
+    <!--<bool name="allow_hook_replay"></bool>-->
+
+
+    <!-- Whether to allow background music to play. -->
+    <!-- <bool name="play_background_music"></bool> -->
+
+
+    <!-- Whether to allow background movie to play. -->
+    <!-- <bool name="play_background_movie"></bool> -->
+
+
+    <!-- Whether to allow the welcome (locale picker) to be shown. -->
+    <!--<bool name="show_welcome"></bool>-->
+
+
+    <!-- Whether to show the your-device-has-been-upgraded step in the case of a post-provisioned-upgrade run. -->
+    <!--<bool name="show_welcome_post_provisioned_upgrade"></bool>-->
+
+
+    <!-- Provide a list of locales to show atop the default locale picker.
+         Relevant only if the default locale picker is shown. -->
+    <!--<string-array name="preferred_locales"><item></item></string-array>-->
+
+
+    <!-- Provide a welcome string to display on the default locale picker.
+         Relevant only if the default locale picker is shown. -->
+    <!--<string name="welcome_message"></string>-->
+
+
+    <!-- Provide the android:maxWidth attribute for the welcome string on the default locale picker.
+         Relevant only if the default locale picker is shown. -->
+    <!--<dimen name="welcome_message_max_width"></dimen>-->
+
+
+    <!-- Provide the y offset for the welcome string on the default locale picker. A negative value
+         means lift the View upward; a positive value means push it downward.
+         Relevant only if the default locale picker is shown. -->
+    <!--<dimen name="welcome_message_offset"></dimen>-->
+
+
+    <!-- Whether to present the device-to-device bootstrap (QuickSetup) flow. -->
+    <!--<bool name="show_quicksetup"></bool>-->
+
+
+    <!-- Whether to allow the user to skip the default Network step. -->
+    <!--<bool name="show_skip_network"></bool>-->
+
+
+    <!-- Whether to allow the user to skip the Google Account Sign-in step. -->
+    <!--<bool name="show_skip_signin"></bool>-->
+
+
+    <!-- Whether to show the set-device-name step. -->
+    <!--<bool name="show_set_device_name"></bool>-->
+
+
+    <!-- Whether to show the assistant hotword step during Setup.
+         This is only relevant if the device supports hotwording. -->
+    <!--<bool name="show_assistant_hotword"></bool>-->
+
+
+    <!-- Provide a partner-specific string for the hotword step.
+         This is only relevant if the hotwording step gets shown. -->
+    <!--<string name="hotword_description_appendage"></string>-->
+
+
+    <!-- Whether the tutorials step should be shown in the case of a post-provisioned-upgrade run. -->
+    <!--<bool name="show_tutorial_post_provisioned_upgrade"></bool>-->
+
+
+    <!-- Tutorial resources
+    <array name="tutorial_drawables">
+        <item>@drawable/tutorial_image_0</item>
+        <item>@drawable/tutorial_image_1</item>
+    </array>
+
+    <string-array name="tutorial_titles">
+        <item>@string/tutorial_title0</item>
+        <item>@string/tutorial_title1</item>
+    </string-array>
+
+    <string-array name="tutorial_descriptions">
+        <item>@string/tutorial_description0</item>
+        <item>@string/tutorial_description1</item>
+    </string-array>
+
+    <string name="tutorial_title0">Dinosaurs are scary</string>
+    <string name="tutorial_description0">Do not mess with them, or you might get eaten. Be aware!</string>
+
+    <string name="tutorial_title1">This movie was great</string>
+    <string name="tutorial_description1">Be sure to purchase lots of merchandise</string>
+    -->
+
+</resources>
diff --git a/apps/tv/SetupValidation/app/src/main/res/values/styles.xml b/apps/tv/SetupValidation/app/src/main/res/values/styles.xml
index 178c902..4b19c7b 100644
--- a/apps/tv/SetupValidation/app/src/main/res/values/styles.xml
+++ b/apps/tv/SetupValidation/app/src/main/res/values/styles.xml
@@ -11,4 +11,20 @@
         <item name="android:windowBackground">@android:color/holo_blue_light</item>
     </style>
 
+    <style name="MyTextViewStyle">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">left</item>
+        <item name="android:textColor">@android:color/white</item>
+        <item name="android:textSize">12sp</item>
+    </style>
+
+    <style name="MyTextViewStyleSmall" parent="@style/MyTextViewStyle">
+        <item name="android:textSize">10sp</item>
+    </style>
+
+    <style name="MyTextViewStyleLarge" parent="@style/MyTextViewStyle">
+        <item name="android:textSize">24sp</item>
+    </style>
+
 </resources>
