aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJoseph Johnson <simplex@google.com>2018-06-28 15:18:37 -0700
committerJoseph Johnson <simplex@google.com>2018-07-11 12:09:47 -0700
commit06d21d47fe9e3295ff6456e8934de7b1b0e9a86b (patch)
treebb84b0d68c908cbbf3bcff05bad81064ef154646 /apps
parent834298826bd40d24fef748d7f5906f78e695f357 (diff)
downloadsample-06d21d47fe9e3295ff6456e8934de7b1b0e9a86b.tar.gz
TvSetupCustomization apps
Added 2 customization and validation apps. Partners can use these to validate the TV Setup partner customization interface. These apps are not included in the default system image builds. Also removes the existing SetupCustomizer, which is out-of-date. Bug: 78910364 Test: manual Change-Id: Icfb8dea4752100b0cff8d00c36d2e6b5ca0e90cb
Diffstat (limited to 'apps')
-rw-r--r--apps/SetupCustomizer/Android.mk13
-rw-r--r--apps/SetupCustomizer/AndroidManifest.xml23
-rw-r--r--apps/SetupCustomizer/proguard-project.txt20
-rw-r--r--apps/SetupCustomizer/res/drawable-xhdpi/welcome_background.pngbin14274 -> 0 bytes
-rw-r--r--apps/SetupCustomizer/res/values-de/strings.xml4
-rw-r--r--apps/SetupCustomizer/res/values-en-rCA/strings.xml4
-rw-r--r--apps/SetupCustomizer/res/values/bools.xml16
-rw-r--r--apps/SetupCustomizer/res/values/dimens.xml11
-rw-r--r--apps/SetupCustomizer/res/values/strings.xml11
-rw-r--r--apps/SetupCustomizer/src/com/android/tvsetup/partnercustomizer/PartnerReceiver.java33
-rw-r--r--apps/tv/LeanbackCustomizer/Android.mk (renamed from apps/LeanbackCustomizer/Android.mk)0
-rw-r--r--apps/tv/LeanbackCustomizer/AndroidManifest.xml (renamed from apps/LeanbackCustomizer/AndroidManifest.xml)0
-rw-r--r--apps/tv/LeanbackCustomizer/proguard-project.txt (renamed from apps/LeanbackCustomizer/proguard-project.txt)0
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-hdpi/ic_bundled_tuner_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-hdpi/ic_bundled_tuner_banner.png)bin2485 -> 2485 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png (renamed from apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png)bin2332 -> 2332 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-mdpi/ic_bundled_tuner_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-mdpi/ic_bundled_tuner_banner.png)bin1768 -> 1768 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png (renamed from apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png)bin1325 -> 1325 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png)bin2326341 -> 2326341 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_bundled_tuner_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_bundled_tuner_banner.png)bin1637 -> 1637 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png)bin2706 -> 2706 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png)bin11840 -> 11840 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png)bin2629 -> 2629 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png)bin1955 -> 1955 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png)bin1835 -> 1835 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png)bin2331 -> 2331 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png)bin3129 -> 3129 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png)bin14297 -> 14297 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png)bin4771 -> 4771 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xxhdpi/ic_bundled_tuner_banner.png (renamed from apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_bundled_tuner_banner.png)bin2325 -> 2325 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png (renamed from apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png)bin5263 -> 5263 bytes
-rw-r--r--apps/tv/LeanbackCustomizer/res/values/colors.xml (renamed from apps/LeanbackCustomizer/res/values/colors.xml)0
-rw-r--r--apps/tv/LeanbackCustomizer/res/values/config.xml (renamed from apps/LeanbackCustomizer/res/values/config.xml)0
-rw-r--r--apps/tv/LeanbackCustomizer/res/values/strings.xml (renamed from apps/LeanbackCustomizer/res/values/strings.xml)0
-rw-r--r--apps/tv/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/PartnerReceiver.java (renamed from apps/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/PartnerReceiver.java)0
-rw-r--r--apps/tv/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/TestActivity.java (renamed from apps/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/TestActivity.java)0
-rw-r--r--apps/tv/LeanbackWidget/Android.mk (renamed from apps/LeanbackWidget/Android.mk)0
-rw-r--r--apps/tv/LeanbackWidget/AndroidManifest.xml (renamed from apps/LeanbackWidget/AndroidManifest.xml)0
-rw-r--r--apps/tv/LeanbackWidget/proguard-project.txt (renamed from apps/LeanbackWidget/proguard-project.txt)0
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-hdpi/ic_launcher.png (renamed from apps/LeanbackWidget/res/drawable-hdpi/ic_launcher.png)bin2332 -> 2332 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_ethernet_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-hdpi/ic_widget_ethernet_not_connected.png)bin1544 -> 1544 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_no_internet.png (renamed from apps/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_no_internet.png)bin1453 -> 1453 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_not_connected.png)bin1796 -> 1796 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-mdpi/ic_launcher.png (renamed from apps/LeanbackWidget/res/drawable-mdpi/ic_launcher.png)bin1325 -> 1325 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_ethernet_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-mdpi/ic_widget_ethernet_not_connected.png)bin1024 -> 1024 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_no_internet.png (renamed from apps/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_no_internet.png)bin1029 -> 1029 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_not_connected.png)bin1155 -> 1155 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_launcher.png (renamed from apps/LeanbackWidget/res/drawable-xhdpi/ic_launcher.png)bin2706 -> 2706 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_ethernet_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_ethernet_not_connected.png)bin833 -> 833 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_no_internet.png (renamed from apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_no_internet.png)bin680 -> 680 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_not_connected.png)bin934 -> 934 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-xxhdpi/ic_launcher.png (renamed from apps/LeanbackWidget/res/drawable-xxhdpi/ic_launcher.png)bin5263 -> 5263 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/drawable-xxhdpi/ic_widget_ethernet_not_connected.png (renamed from apps/LeanbackWidget/res/drawable-xxhdpi/ic_widget_ethernet_not_connected.png)bin775 -> 775 bytes
-rw-r--r--apps/tv/LeanbackWidget/res/layout/clock_widget.xml (renamed from apps/LeanbackWidget/res/layout/clock_widget.xml)0
-rw-r--r--apps/tv/LeanbackWidget/res/values/colors.xml (renamed from apps/LeanbackWidget/res/values/colors.xml)0
-rw-r--r--apps/tv/LeanbackWidget/res/values/config.xml (renamed from apps/LeanbackWidget/res/values/config.xml)0
-rw-r--r--apps/tv/LeanbackWidget/res/values/dimens.xml (renamed from apps/LeanbackWidget/res/values/dimens.xml)0
-rw-r--r--apps/tv/LeanbackWidget/res/values/strings.xml (renamed from apps/LeanbackWidget/res/values/strings.xml)0
-rw-r--r--apps/tv/LeanbackWidget/res/xml/clock_widget_info.xml (renamed from apps/LeanbackWidget/res/xml/clock_widget_info.xml)0
-rw-r--r--apps/tv/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java (renamed from apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java)0
-rw-r--r--apps/tv/SetupCustomizationSample/.gitignore8
-rw-r--r--apps/tv/SetupCustomizationSample/app/.gitignore1
-rw-r--r--apps/tv/SetupCustomizationSample/app/build.gradle27
-rw-r--r--apps/tv/SetupCustomizationSample/app/proguard-rules.pro21
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/AndroidManifest.xml88
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java51
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookActivity.java29
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java39
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java7
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java7
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java51
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java53
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/PartnerReceiver.java17
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/download.pngbin0 -> 99188 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hook.pngbin0 -> 99328 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hotword_graphic.pngbin0 -> 53762 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_0.pngbin0 -> 294344 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_1.pngbin0 -> 314478 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/welcome_background.pngbin0 -> 323923 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.pngbin0 -> 43804 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.pngbin0 -> 194104 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.pngbin0 -> 295245 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/layout/activity_base_layout.xml81
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/values-zh/config.xml15
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/values/config.xml99
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/values/strings.xml4
-rw-r--r--apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml14
-rw-r--r--apps/tv/SetupCustomizationSample/build.gradle27
-rw-r--r--apps/tv/SetupCustomizationSample/gradle.properties17
-rw-r--r--apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.jarbin0 -> 53636 bytes
-rw-r--r--apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.properties6
-rwxr-xr-xapps/tv/SetupCustomizationSample/gradlew160
-rw-r--r--apps/tv/SetupCustomizationSample/settings.gradle1
-rw-r--r--apps/tv/SetupValidation/.gitignore8
-rw-r--r--apps/tv/SetupValidation/app/.gitignore1
-rw-r--r--apps/tv/SetupValidation/app/build.gradle27
-rw-r--r--apps/tv/SetupValidation/app/proguard-rules.pro21
-rw-r--r--apps/tv/SetupValidation/app/src/main/AndroidManifest.xml67
-rw-r--r--apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/BaseActivity.java50
-rw-r--r--apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockHotwordEnrollmentActivity.java27
-rw-r--r--apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockKatnissActivity.java31
-rw-r--r--apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/OpaqueActivity.java27
-rw-r--r--apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/TransparentActivity.java27
-rw-r--r--apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hotword_enrollment.pngbin0 -> 59103 bytes
-rw-r--r--apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/mock_katniss.pngbin0 -> 65499 bytes
-rw-r--r--apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/opaque_tile.pngbin0 -> 32784 bytes
-rw-r--r--apps/tv/SetupValidation/app/src/main/res/layout/activity_base_layout.xml81
-rw-r--r--apps/tv/SetupValidation/app/src/main/res/values/strings.xml4
-rw-r--r--apps/tv/SetupValidation/app/src/main/res/values/styles.xml14
-rw-r--r--apps/tv/SetupValidation/build.gradle27
-rw-r--r--apps/tv/SetupValidation/gradle.properties17
-rw-r--r--apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.jarbin0 -> 53636 bytes
-rw-r--r--apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.properties6
-rwxr-xr-xapps/tv/SetupValidation/gradlew160
-rw-r--r--apps/tv/SetupValidation/settings.gradle1
114 files changed, 1419 insertions, 135 deletions
diff --git a/apps/SetupCustomizer/Android.mk b/apps/SetupCustomizer/Android.mk
deleted file mode 100644
index 9312a36..0000000
--- a/apps/SetupCustomizer/Android.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/priv-app
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := TvSetupCustomizer
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
diff --git a/apps/SetupCustomizer/AndroidManifest.xml b/apps/SetupCustomizer/AndroidManifest.xml
deleted file mode 100644
index bdd31ff..0000000
--- a/apps/SetupCustomizer/AndroidManifest.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.android.tvsetup.partnercustomizer">
-
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.INTERNET" />
-
- <application android:label="@string/app_label">
-
- <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>
-
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_ADDED" />
- <action android:name="android.intent.action.PACKAGE_REMOVED" />
- <data android:scheme="package"/>
- </intent-filter>
- </receiver>
- </application>
-</manifest>
diff --git a/apps/SetupCustomizer/proguard-project.txt b/apps/SetupCustomizer/proguard-project.txt
deleted file mode 100644
index f2fe155..0000000
--- a/apps/SetupCustomizer/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/apps/SetupCustomizer/res/drawable-xhdpi/welcome_background.png b/apps/SetupCustomizer/res/drawable-xhdpi/welcome_background.png
deleted file mode 100644
index 2f2533a..0000000
--- a/apps/SetupCustomizer/res/drawable-xhdpi/welcome_background.png
+++ /dev/null
Binary files differ
diff --git a/apps/SetupCustomizer/res/values-de/strings.xml b/apps/SetupCustomizer/res/values-de/strings.xml
deleted file mode 100644
index 2794b47..0000000
--- a/apps/SetupCustomizer/res/values-de/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<resources>
- <!-- Welcome message -->
- <string name="welcome_message">a really really long welcome message, because german</string>
-</resources>
diff --git a/apps/SetupCustomizer/res/values-en-rCA/strings.xml b/apps/SetupCustomizer/res/values-en-rCA/strings.xml
deleted file mode 100644
index 2b19782..0000000
--- a/apps/SetupCustomizer/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<resources>
- <!-- Welcome message -->
- <string name="welcome_message">welcome_message, eh?</string>
-</resources>
diff --git a/apps/SetupCustomizer/res/values/bools.xml b/apps/SetupCustomizer/res/values/bools.xml
deleted file mode 100644
index 4e19b14..0000000
--- a/apps/SetupCustomizer/res/values/bools.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 2012-2014 Google Inc. All Rights Reserved. -->
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <!-- Display "SKIP" in network selection screen -->
- <bool name="show_skip_network">true</bool>
-
- <!-- Allow user to skip Google signin at signin setup step -->
- <bool name="show_skip_signin">true</bool>
-
- <!-- Show wifi WPS option at top of list -->
- <bool name="show_wps_at_top">true</bool>
-
- <!-- Prevent users from returning to the pre-setup oem customization hook -->
- <bool name="prevent_prehook_replay">true</bool>
-</resources>
diff --git a/apps/SetupCustomizer/res/values/dimens.xml b/apps/SetupCustomizer/res/values/dimens.xml
deleted file mode 100644
index 6907661..0000000
--- a/apps/SetupCustomizer/res/values/dimens.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 2012-2014 Google Inc. All Rights Reserved. -->
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-
- <!-- Max width for welcome text (default: 536dp) -->
- <dimen name="welcome_message_max_width">400dp</dimen>
-
- <!-- Offset (positive or negative) for the welcome message (default: 0) -->
- <dimen name="welcome_message_offset">-100dp</dimen>
-
-</resources>
diff --git a/apps/SetupCustomizer/res/values/strings.xml b/apps/SetupCustomizer/res/values/strings.xml
deleted file mode 100644
index f53fb11..0000000
--- a/apps/SetupCustomizer/res/values/strings.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<resources>
-
- <string name="app_label">SetupCustomizer</string>
-
- <!-- Welcome message -->
- <string name="welcome_message">welcome_message</string>
-
- <!-- Custom wallpaper [DO NOT TRANSLATE] -->
- <string name="setup_wallpaper_component" translatable="false">com.android.systemui/com.android.systemui.ImageWallpaper</string>
-
-</resources>
diff --git a/apps/SetupCustomizer/src/com/android/tvsetup/partnercustomizer/PartnerReceiver.java b/apps/SetupCustomizer/src/com/android/tvsetup/partnercustomizer/PartnerReceiver.java
deleted file mode 100644
index cf8efd9..0000000
--- a/apps/SetupCustomizer/src/com/android/tvsetup/partnercustomizer/PartnerReceiver.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.android.tvsetup.partnercustomizer;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * This class allows the system/setup app to find the partner customization package.
- *
- * Package must be a system app to be used for partner customization.
- */
-public class PartnerReceiver extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- }
-}
diff --git a/apps/LeanbackCustomizer/Android.mk b/apps/tv/LeanbackCustomizer/Android.mk
index fb4f41c..fb4f41c 100644
--- a/apps/LeanbackCustomizer/Android.mk
+++ b/apps/tv/LeanbackCustomizer/Android.mk
diff --git a/apps/LeanbackCustomizer/AndroidManifest.xml b/apps/tv/LeanbackCustomizer/AndroidManifest.xml
index e931ca2..e931ca2 100644
--- a/apps/LeanbackCustomizer/AndroidManifest.xml
+++ b/apps/tv/LeanbackCustomizer/AndroidManifest.xml
diff --git a/apps/LeanbackCustomizer/proguard-project.txt b/apps/tv/LeanbackCustomizer/proguard-project.txt
index f2fe155..f2fe155 100644
--- a/apps/LeanbackCustomizer/proguard-project.txt
+++ b/apps/tv/LeanbackCustomizer/proguard-project.txt
diff --git a/apps/LeanbackCustomizer/res/drawable-hdpi/ic_bundled_tuner_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-hdpi/ic_bundled_tuner_banner.png
index 520c6e8..520c6e8 100644
--- a/apps/LeanbackCustomizer/res/drawable-hdpi/ic_bundled_tuner_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-hdpi/ic_bundled_tuner_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png b/apps/tv/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png
index eb9dfe2..eb9dfe2 100644
--- a/apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-mdpi/ic_bundled_tuner_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-mdpi/ic_bundled_tuner_banner.png
index 785e3fc..785e3fc 100644
--- a/apps/LeanbackCustomizer/res/drawable-mdpi/ic_bundled_tuner_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-mdpi/ic_bundled_tuner_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png b/apps/tv/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png
index d8e46f3..d8e46f3 100644
--- a/apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png
index a14fcc7..a14fcc7 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_bundled_tuner_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_bundled_tuner_banner.png
index d7deb0e..d7deb0e 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_bundled_tuner_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_bundled_tuner_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png
index e4e79c9..e4e79c9 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png
index 0e25c62..0e25c62 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png
index dd34536..dd34536 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png
index c0073e3..c0073e3 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png
index ec9ab2b..ec9ab2b 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png
index d473e4e..d473e4e 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png
index ed43296..ed43296 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png
index 567d130..567d130 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png
index 6f96f25..6f96f25 100644
--- a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_bundled_tuner_banner.png b/apps/tv/LeanbackCustomizer/res/drawable-xxhdpi/ic_bundled_tuner_banner.png
index 93f1df6..93f1df6 100644
--- a/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_bundled_tuner_banner.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xxhdpi/ic_bundled_tuner_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png b/apps/tv/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png
index 53ced36..53ced36 100644
--- a/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png
+++ b/apps/tv/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/values/colors.xml b/apps/tv/LeanbackCustomizer/res/values/colors.xml
index 810e40e..810e40e 100644
--- a/apps/LeanbackCustomizer/res/values/colors.xml
+++ b/apps/tv/LeanbackCustomizer/res/values/colors.xml
diff --git a/apps/LeanbackCustomizer/res/values/config.xml b/apps/tv/LeanbackCustomizer/res/values/config.xml
index 868bb1d..868bb1d 100644
--- a/apps/LeanbackCustomizer/res/values/config.xml
+++ b/apps/tv/LeanbackCustomizer/res/values/config.xml
diff --git a/apps/LeanbackCustomizer/res/values/strings.xml b/apps/tv/LeanbackCustomizer/res/values/strings.xml
index c9e9889..c9e9889 100644
--- a/apps/LeanbackCustomizer/res/values/strings.xml
+++ b/apps/tv/LeanbackCustomizer/res/values/strings.xml
diff --git a/apps/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/PartnerReceiver.java b/apps/tv/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/PartnerReceiver.java
index daef196..daef196 100644
--- a/apps/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/PartnerReceiver.java
+++ b/apps/tv/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/PartnerReceiver.java
diff --git a/apps/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/TestActivity.java b/apps/tv/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/TestActivity.java
index 6ae07ef..6ae07ef 100644
--- a/apps/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/TestActivity.java
+++ b/apps/tv/LeanbackCustomizer/src/com/google/android/leanbacklauncher/partnercustomizer/TestActivity.java
diff --git a/apps/LeanbackWidget/Android.mk b/apps/tv/LeanbackWidget/Android.mk
index 7209b52..7209b52 100644
--- a/apps/LeanbackWidget/Android.mk
+++ b/apps/tv/LeanbackWidget/Android.mk
diff --git a/apps/LeanbackWidget/AndroidManifest.xml b/apps/tv/LeanbackWidget/AndroidManifest.xml
index 9474560..9474560 100644
--- a/apps/LeanbackWidget/AndroidManifest.xml
+++ b/apps/tv/LeanbackWidget/AndroidManifest.xml
diff --git a/apps/LeanbackWidget/proguard-project.txt b/apps/tv/LeanbackWidget/proguard-project.txt
index f2fe155..f2fe155 100644
--- a/apps/LeanbackWidget/proguard-project.txt
+++ b/apps/tv/LeanbackWidget/proguard-project.txt
diff --git a/apps/LeanbackWidget/res/drawable-hdpi/ic_launcher.png b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_launcher.png
index eb9dfe2..eb9dfe2 100644
--- a/apps/LeanbackWidget/res/drawable-hdpi/ic_launcher.png
+++ b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-hdpi/ic_widget_ethernet_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_ethernet_not_connected.png
index df02569..df02569 100644
--- a/apps/LeanbackWidget/res/drawable-hdpi/ic_widget_ethernet_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_ethernet_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_no_internet.png b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_no_internet.png
index 1b891de..1b891de 100644
--- a/apps/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_no_internet.png
+++ b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_no_internet.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_not_connected.png
index d6d4a30..d6d4a30 100644
--- a/apps/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-hdpi/ic_widget_wifi_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-mdpi/ic_launcher.png b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_launcher.png
index d8e46f3..d8e46f3 100644
--- a/apps/LeanbackWidget/res/drawable-mdpi/ic_launcher.png
+++ b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-mdpi/ic_widget_ethernet_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_ethernet_not_connected.png
index ece1478..ece1478 100644
--- a/apps/LeanbackWidget/res/drawable-mdpi/ic_widget_ethernet_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_ethernet_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_no_internet.png b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_no_internet.png
index 5054b40..5054b40 100644
--- a/apps/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_no_internet.png
+++ b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_no_internet.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_not_connected.png
index ad53107..ad53107 100644
--- a/apps/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-mdpi/ic_widget_wifi_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-xhdpi/ic_launcher.png b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_launcher.png
index e4e79c9..e4e79c9 100644
--- a/apps/LeanbackWidget/res/drawable-xhdpi/ic_launcher.png
+++ b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_ethernet_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_ethernet_not_connected.png
index 5d0bfb9..5d0bfb9 100644
--- a/apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_ethernet_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_ethernet_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_no_internet.png b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_no_internet.png
index 909d020..909d020 100644
--- a/apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_no_internet.png
+++ b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_no_internet.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_not_connected.png
index c892b26..c892b26 100644
--- a/apps/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-xhdpi/ic_widget_wifi_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-xxhdpi/ic_launcher.png b/apps/tv/LeanbackWidget/res/drawable-xxhdpi/ic_launcher.png
index 53ced36..53ced36 100644
--- a/apps/LeanbackWidget/res/drawable-xxhdpi/ic_launcher.png
+++ b/apps/tv/LeanbackWidget/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/drawable-xxhdpi/ic_widget_ethernet_not_connected.png b/apps/tv/LeanbackWidget/res/drawable-xxhdpi/ic_widget_ethernet_not_connected.png
index edb5a69..edb5a69 100644
--- a/apps/LeanbackWidget/res/drawable-xxhdpi/ic_widget_ethernet_not_connected.png
+++ b/apps/tv/LeanbackWidget/res/drawable-xxhdpi/ic_widget_ethernet_not_connected.png
Binary files differ
diff --git a/apps/LeanbackWidget/res/layout/clock_widget.xml b/apps/tv/LeanbackWidget/res/layout/clock_widget.xml
index 3ceb63e..3ceb63e 100644
--- a/apps/LeanbackWidget/res/layout/clock_widget.xml
+++ b/apps/tv/LeanbackWidget/res/layout/clock_widget.xml
diff --git a/apps/LeanbackWidget/res/values/colors.xml b/apps/tv/LeanbackWidget/res/values/colors.xml
index bcc3a80..bcc3a80 100644
--- a/apps/LeanbackWidget/res/values/colors.xml
+++ b/apps/tv/LeanbackWidget/res/values/colors.xml
diff --git a/apps/LeanbackWidget/res/values/config.xml b/apps/tv/LeanbackWidget/res/values/config.xml
index 9e4f1ba..9e4f1ba 100644
--- a/apps/LeanbackWidget/res/values/config.xml
+++ b/apps/tv/LeanbackWidget/res/values/config.xml
diff --git a/apps/LeanbackWidget/res/values/dimens.xml b/apps/tv/LeanbackWidget/res/values/dimens.xml
index fe1728f..fe1728f 100644
--- a/apps/LeanbackWidget/res/values/dimens.xml
+++ b/apps/tv/LeanbackWidget/res/values/dimens.xml
diff --git a/apps/LeanbackWidget/res/values/strings.xml b/apps/tv/LeanbackWidget/res/values/strings.xml
index 4f733a4..4f733a4 100644
--- a/apps/LeanbackWidget/res/values/strings.xml
+++ b/apps/tv/LeanbackWidget/res/values/strings.xml
diff --git a/apps/LeanbackWidget/res/xml/clock_widget_info.xml b/apps/tv/LeanbackWidget/res/xml/clock_widget_info.xml
index a877df8..a877df8 100644
--- a/apps/LeanbackWidget/res/xml/clock_widget_info.xml
+++ b/apps/tv/LeanbackWidget/res/xml/clock_widget_info.xml
diff --git a/apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java b/apps/tv/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java
index 77a2851..77a2851 100644
--- a/apps/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java
+++ b/apps/tv/LeanbackWidget/src/com/google/android/leanbacklauncher/partnerwidget/ClockWidgetProvider.java
diff --git a/apps/tv/SetupCustomizationSample/.gitignore b/apps/tv/SetupCustomizationSample/.gitignore
new file mode 100644
index 0000000..09b993d
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/.gitignore
@@ -0,0 +1,8 @@
+*.iml
+.gradle
+/local.properties
+/.idea
+.DS_Store
+/build
+/captures
+.externalNativeBuild
diff --git a/apps/tv/SetupCustomizationSample/app/.gitignore b/apps/tv/SetupCustomizationSample/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/apps/tv/SetupCustomizationSample/app/build.gradle b/apps/tv/SetupCustomizationSample/app/build.gradle
new file mode 100644
index 0000000..f4df956
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/build.gradle
@@ -0,0 +1,27 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "com.google.android.tv.setup.customizationsample"
+ minSdkVersion 21
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ lintOptions {
+ abortOnError false
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:leanback-v17:26.1.0'
+ implementation 'com.android.support:appcompat-v7:26.1.0'
+}
diff --git a/apps/tv/SetupCustomizationSample/app/proguard-rules.pro b/apps/tv/SetupCustomizationSample/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/AndroidManifest.xml b/apps/tv/SetupCustomizationSample/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..30f0c86
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/AndroidManifest.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.google.android.tv.setup.customizationsample">
+
+ <uses-feature
+ android:name="android.hardware.touchscreen"
+ android:required="false" />
+ <uses-feature
+ 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 Customization Sample"
+ android:theme="@style/AppTheme">
+
+
+ <!-- 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>
+
+ </application>
+
+</manifest>
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
new file mode 100644
index 0000000..65b706e
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/BaseActivity.java
@@ -0,0 +1,51 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+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);
+
+ tv3.setText("upgraded_during_setup=" + getIntent().getBooleanExtra("upgraded_during_setup", false) +
+ ", post_provisioned_upgrade=" + getIntent().getBooleanExtra("post_provisioned_upgrade", false));
+ }
+
+ protected void log(String message) {
+ Log.d(getPackageName(), message);
+ }
+}
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
new file mode 100644
index 0000000..05a387f
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookActivity.java
@@ -0,0 +1,29 @@
+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
new file mode 100644
index 0000000..532e50a
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBegin2Activity.java
@@ -0,0 +1,39 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.content.Intent;
+
+/**
+ * A HOOK_BEGIN Activity.
+ */
+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 = "partner_handled_network_user_skipped";
+
+ @Override
+ protected void onAboutToFinish() {
+ Intent intent = new Intent();
+
+ // 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);
+ }
+
+ // 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);
+ }
+}
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
new file mode 100644
index 0000000..5e6dce0
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookBeginActivity.java
@@ -0,0 +1,7 @@
+package com.google.android.tv.setup.customizationsample;
+
+/**
+ * A HOOK_BEGIN Activity.
+ */
+public class HookBeginActivity extends HookActivity {
+}
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
new file mode 100644
index 0000000..89b382d
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookEndActivity.java
@@ -0,0 +1,7 @@
+package com.google.android.tv.setup.customizationsample;
+
+/**
+ * A HOOK_END Activity.
+ */
+public class HookEndActivity extends HookActivity {
+}
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
new file mode 100644
index 0000000..b6394ac
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkActivity.java
@@ -0,0 +1,51 @@
+package com.google.android.tv.setup.customizationsample;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+
+/**
+ * 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);
+
+ // 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.
+ 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();
+ }
+}
+
+
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
new file mode 100644
index 0000000..e3d36e8
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/HookPostNetworkFollowupActivity.java
@@ -0,0 +1,53 @@
+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;
+
+/**
+ * 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();
+ }
+
+ 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();
+ }
+ }
+}
+
+
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/PartnerReceiver.java b/apps/tv/SetupCustomizationSample/app/src/main/java/com/google/android/tv/setup/customizationsample/PartnerReceiver.java
new file mode 100644
index 0000000..340d270
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/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/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/download.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/download.png
new file mode 100644
index 0000000..ab2a1ea
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/download.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hook.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hook.png
new file mode 100644
index 0000000..f7c7add
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hook.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hotword_graphic.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hotword_graphic.png
new file mode 100644
index 0000000..6e1513b
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/hotword_graphic.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_0.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_0.png
new file mode 100644
index 0000000..a522985
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_0.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_1.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_1.png
new file mode 100644
index 0000000..19c0c75
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/tutorial_image_1.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/welcome_background.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/welcome_background.png
new file mode 100644
index 0000000..7dd9c92
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-xhdpi/welcome_background.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.png
new file mode 100644
index 0000000..a12e02b
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/hotword_graphic.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.png
new file mode 100644
index 0000000..912c702
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_0.png
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.png b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.png
new file mode 100644
index 0000000..1a3685f
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/drawable-zh-xhdpi/tutorial_image_1.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
new file mode 100644
index 0000000..da44ab4
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/layout/activity_base_layout.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <ImageView
+ android:id="@+id/image0"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:layout_marginTop="60dp"
+ android:visibility="gone"
+ />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ 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"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="20dp"
+ />
+
+ <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"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="20dp"
+ tools:text="foobar"
+ android:textColor="@android:color/white"
+ android:textSize="12sp" />
+
+ <TextView
+ android:id="@+id/tv2"
+ 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="12sp" />
+
+ <TextView
+ android:id="@+id/tv3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left|bottom"
+ android:gravity="center"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_marginBottom="20dp"
+ tools:text="foobar"
+ android:textColor="@android:color/white"
+ android:textSize="12sp" />
+
+ </LinearLayout>
+
+</FrameLayout>
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/values-zh/config.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/values-zh/config.xml
new file mode 100644
index 0000000..2441911
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/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/SetupCustomizationSample/app/src/main/res/values/config.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/values/config.xml
new file mode 100644
index 0000000..47841f7
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/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/SetupCustomizationSample/app/src/main/res/values/strings.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..25fe7ea
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+<resources>
+
+
+</resources>
diff --git a/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml b/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..178c902
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/app/src/main/res/values/styles.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <style name="AppTheme" parent="@style/Theme.Leanback">
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowShowWallpaper">false</item>
+ </style>
+
+ <style name="AppThemeOpaque" parent="@style/Theme.Leanback">
+ <item name="android:windowBackground">@android:color/holo_blue_light</item>
+ </style>
+
+</resources>
diff --git a/apps/tv/SetupCustomizationSample/build.gradle b/apps/tv/SetupCustomizationSample/build.gradle
new file mode 100644
index 0000000..e6b32bc
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/build.gradle
@@ -0,0 +1,27 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.0.1'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/apps/tv/SetupCustomizationSample/gradle.properties b/apps/tv/SetupCustomizationSample/gradle.properties
new file mode 100644
index 0000000..aac7c9b
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/gradle.properties
@@ -0,0 +1,17 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.jar b/apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..13372ae
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.properties b/apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e03ba59
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed May 09 12:57:15 PDT 2018
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/apps/tv/SetupCustomizationSample/gradlew b/apps/tv/SetupCustomizationSample/gradlew
new file mode 100755
index 0000000..9d82f78
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/apps/tv/SetupCustomizationSample/settings.gradle b/apps/tv/SetupCustomizationSample/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/apps/tv/SetupCustomizationSample/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/apps/tv/SetupValidation/.gitignore b/apps/tv/SetupValidation/.gitignore
new file mode 100644
index 0000000..09b993d
--- /dev/null
+++ b/apps/tv/SetupValidation/.gitignore
@@ -0,0 +1,8 @@
+*.iml
+.gradle
+/local.properties
+/.idea
+.DS_Store
+/build
+/captures
+.externalNativeBuild
diff --git a/apps/tv/SetupValidation/app/.gitignore b/apps/tv/SetupValidation/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/apps/tv/SetupValidation/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/apps/tv/SetupValidation/app/build.gradle b/apps/tv/SetupValidation/app/build.gradle
new file mode 100644
index 0000000..05f841e
--- /dev/null
+++ b/apps/tv/SetupValidation/app/build.gradle
@@ -0,0 +1,27 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "com.google.android.tv.setup.validation"
+ minSdkVersion 21
+ targetSdkVersion 26
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ lintOptions {
+ abortOnError false
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:leanback-v17:26.1.0'
+ implementation 'com.android.support:appcompat-v7:26.1.0'
+}
diff --git a/apps/tv/SetupValidation/app/proguard-rules.pro b/apps/tv/SetupValidation/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/apps/tv/SetupValidation/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml b/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..83feeaa
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/AndroidManifest.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.google.android.tv.setup.validation">
+
+ <uses-feature
+ android:name="android.hardware.touchscreen"
+ android:required="false" />
+ <uses-feature
+ android:name="android.software.leanback"
+ android:required="true" />
+
+ <application
+ android:label="TV Setup Validation"
+ android:theme="@style/AppTheme">
+
+
+ <!-- A simple opaque Activity with a button that finishes it. -->
+ <activity
+ android:name=".OpaqueActivity"
+ android:screenOrientation="landscape"
+ android:label="Opaque Activity"
+ android:exported="true"
+ android:theme="@style/AppThemeOpaque"
+ >
+ </activity>
+
+ <!-- A simple transparent Activity with a button that finishes it. -->
+ <activity
+ android:name=".TransparentActivity"
+ android:screenOrientation="landscape"
+ android:label="Transparent Activity"
+ android:exported="true"
+ >
+ </activity>
+
+
+ <!-- Implements a pre-Enrollment action (which is normally handled by Katniss). We say
+ 'pre-Enrollment' because the actual enrollment Activity is a device-specific Activity; the
+ design calls for the Katniss implementation of this action to redirect to that device-
+ specific Activity (which we do not attempt here with MockHotwordEnrollmentActivity)-->
+ <activity
+ android:name=".MockHotwordEnrollmentActivity"
+ android:screenOrientation="landscape"
+ android:label="Mock Hotword Enrollment"
+ >
+ <intent-filter>
+ <action android:name="com.google.android.katniss.action.ATV_SETUP_ENROLL_HOTWORD" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+
+ <!-- Implements a delegate-to-Katniss action. -->
+ <activity
+ android:name=".MockKatnissActivity"
+ android:screenOrientation="landscape"
+ android:label="Mock Katniss"
+ >
+ <intent-filter>
+ <action android:name="com.google.android.katniss.action.ATV_SETUP" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ </application>
+
+</manifest>
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
new file mode 100644
index 0000000..d369192
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/BaseActivity.java
@@ -0,0 +1,50 @@
+package com.google.android.tv.setup;
+
+import android.app.Activity;
+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);
+ }
+}
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
new file mode 100644
index 0000000..c05624d
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockHotwordEnrollmentActivity.java
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000..9ff134d
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/MockKatnissActivity.java
@@ -0,0 +1,31 @@
+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
new file mode 100644
index 0000000..2ebf60d
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/OpaqueActivity.java
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000..7b379ab
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/java/com/google/android/tv/setup/validation/TransparentActivity.java
@@ -0,0 +1,27 @@
+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/hotword_enrollment.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hotword_enrollment.png
new file mode 100644
index 0000000..c61f013
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/hotword_enrollment.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/mock_katniss.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/mock_katniss.png
new file mode 100644
index 0000000..b83bddf
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/mock_katniss.png
Binary files differ
diff --git a/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/opaque_tile.png b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/opaque_tile.png
new file mode 100644
index 0000000..ffe417c
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/drawable-xhdpi/opaque_tile.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
new file mode 100644
index 0000000..da44ab4
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/layout/activity_base_layout.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <ImageView
+ android:id="@+id/image0"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:layout_marginTop="60dp"
+ android:visibility="gone"
+ />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ 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"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="20dp"
+ />
+
+ <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"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="20dp"
+ tools:text="foobar"
+ android:textColor="@android:color/white"
+ android:textSize="12sp" />
+
+ <TextView
+ android:id="@+id/tv2"
+ 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="12sp" />
+
+ <TextView
+ android:id="@+id/tv3"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left|bottom"
+ android:gravity="center"
+ android:layout_marginTop="20dp"
+ android:layout_marginLeft="20dp"
+ android:layout_marginBottom="20dp"
+ tools:text="foobar"
+ android:textColor="@android:color/white"
+ android:textSize="12sp" />
+
+ </LinearLayout>
+
+</FrameLayout>
diff --git a/apps/tv/SetupValidation/app/src/main/res/values/strings.xml b/apps/tv/SetupValidation/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..25fe7ea
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+<resources>
+
+
+</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
new file mode 100644
index 0000000..178c902
--- /dev/null
+++ b/apps/tv/SetupValidation/app/src/main/res/values/styles.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <style name="AppTheme" parent="@style/Theme.Leanback">
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowShowWallpaper">false</item>
+ </style>
+
+ <style name="AppThemeOpaque" parent="@style/Theme.Leanback">
+ <item name="android:windowBackground">@android:color/holo_blue_light</item>
+ </style>
+
+</resources>
diff --git a/apps/tv/SetupValidation/build.gradle b/apps/tv/SetupValidation/build.gradle
new file mode 100644
index 0000000..e6b32bc
--- /dev/null
+++ b/apps/tv/SetupValidation/build.gradle
@@ -0,0 +1,27 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.0.1'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/apps/tv/SetupValidation/gradle.properties b/apps/tv/SetupValidation/gradle.properties
new file mode 100644
index 0000000..aac7c9b
--- /dev/null
+++ b/apps/tv/SetupValidation/gradle.properties
@@ -0,0 +1,17 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.jar b/apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..13372ae
--- /dev/null
+++ b/apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.properties b/apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e03ba59
--- /dev/null
+++ b/apps/tv/SetupValidation/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed May 09 12:57:15 PDT 2018
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/apps/tv/SetupValidation/gradlew b/apps/tv/SetupValidation/gradlew
new file mode 100755
index 0000000..9d82f78
--- /dev/null
+++ b/apps/tv/SetupValidation/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/apps/tv/SetupValidation/settings.gradle b/apps/tv/SetupValidation/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/apps/tv/SetupValidation/settings.gradle
@@ -0,0 +1 @@
+include ':app'