aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorbulic <bulic@google.com>2014-07-30 18:05:03 -0700
committerbulic <bulic@google.com>2014-07-31 15:37:47 -0700
commit0082a4906f98aabbc2435d44388f3ee276bcc8dc (patch)
treec6263577886795bbe56c0e4fb8034fed0b62729f /apps
parent45923d7e1092fcc904978c856df59d3c73eb564a (diff)
downloadsample-0082a4906f98aabbc2435d44388f3ee276bcc8dc.tar.gz
Added Leanback Customizer package
-moved from vendor/unbundled_google/packages/LeanbackLauncher/PartnerCustomizer -Refactored/cleaned up code to be presentable to 3rd parties Change-Id: I630d54d89557205a10a795e1723322bce129182d
Diffstat (limited to 'apps')
-rw-r--r--apps/LeanbackCustomizer/Android.mk13
-rw-r--r--apps/LeanbackCustomizer/AndroidManifest.xml23
-rw-r--r--apps/LeanbackCustomizer/proguard-project.txt20
-rw-r--r--apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.pngbin0 -> 4715 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-mdpi/ic_blank.pngbin0 -> 1817 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.pngbin0 -> 2215 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.pngbin0 -> 2326341 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.pngbin0 -> 7771 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.pngbin0 -> 11840 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.pngbin0 -> 2629 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.pngbin0 -> 1955 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.pngbin0 -> 1835 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.pngbin0 -> 2331 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.pngbin0 -> 3129 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.pngbin0 -> 14297 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.pngbin0 -> 4771 bytes
-rw-r--r--apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.pngbin0 -> 16553 bytes
-rw-r--r--apps/LeanbackCustomizer/res/values/colors.xml4
-rw-r--r--apps/LeanbackCustomizer/res/values/config.xml47
-rw-r--r--apps/LeanbackCustomizer/res/values/strings.xml20
-rw-r--r--apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/BootReceiver.java157
-rw-r--r--apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/TestActivity.java7
22 files changed, 291 insertions, 0 deletions
diff --git a/apps/LeanbackCustomizer/Android.mk b/apps/LeanbackCustomizer/Android.mk
new file mode 100644
index 0000000..fb4f41c
--- /dev/null
+++ b/apps/LeanbackCustomizer/Android.mk
@@ -0,0 +1,13 @@
+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 := LeanbackCustomizer
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
diff --git a/apps/LeanbackCustomizer/AndroidManifest.xml b/apps/LeanbackCustomizer/AndroidManifest.xml
new file mode 100644
index 0000000..be2bb3d
--- /dev/null
+++ b/apps/LeanbackCustomizer/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.leanbacklauncher.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=".BootReceiver">
+ <intent-filter>
+ <action android:name="com.android.leanbacklauncher.action.PARTNER_CUSTOMIZATION" />
+ <action android:name="android.intent.action.BOOT_COMPLETED"/>
+ <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/LeanbackCustomizer/proguard-project.txt b/apps/LeanbackCustomizer/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/apps/LeanbackCustomizer/proguard-project.txt
@@ -0,0 +1,20 @@
+# 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/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png b/apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..99c04cd
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-mdpi/ic_blank.png b/apps/LeanbackCustomizer/res/drawable-mdpi/ic_blank.png
new file mode 100644
index 0000000..edae9c4
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/drawable-mdpi/ic_blank.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png b/apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..d86fb50
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png b/apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png
new file mode 100644
index 0000000..a14fcc7
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..967e6d0
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png
new file mode 100644
index 0000000..0e25c62
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png
new file mode 100644
index 0000000..dd34536
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png
new file mode 100644
index 0000000..c0073e3
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png
new file mode 100644
index 0000000..ec9ab2b
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png
new file mode 100644
index 0000000..d473e4e
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png
new file mode 100644
index 0000000..ed43296
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png
new file mode 100644
index 0000000..567d130
--- /dev/null
+++ b/apps/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/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png
new file mode 100644
index 0000000..6f96f25
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png b/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..e6984eb
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/apps/LeanbackCustomizer/res/values/colors.xml b/apps/LeanbackCustomizer/res/values/colors.xml
new file mode 100644
index 0000000..810e40e
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/values/colors.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="partner_color">#FFFF00FF</color>
+</resources>
diff --git a/apps/LeanbackCustomizer/res/values/config.xml b/apps/LeanbackCustomizer/res/values/config.xml
new file mode 100644
index 0000000..02f97e7
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/values/config.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- DO NOT TRANSLATE -->
+ <string name="partner_wallpaper" translatable="false">bg_custom</string>
+
+ <!--
+ DO NOT TRANSLATE
+ List showing default out of box ordering for the launcher.
+ The higher in this list a package appears, the higher it will be in the launcher.
+ Since the apps row and games row are separate, we can safely put them in the same array.
+ This same list will be used to determine the initial ordering of recommendations.
+ The Google default out of box ordering will supercede this ordering if there is a conflict.
+ -->
+ <string-array name="partner_out_of_box_order" translatable="false">
+ <!-- Highest priority packages up here -->
+
+ <!-- Apps row -->
+ <item>com.ted.android.tv</item> <!-- TED -->
+ <item>com.clearchannel.iheartradio.tv</item> <!-- iHeartRadio -->
+ <item>com.plexapp.plex</item> <!-- Plex -->
+
+ <!-- Games row -->
+ <item>com.ayopagames.robotsloveicecream</item> <!-- Robots Love Ice Cream -->
+ <item>com.frogmind.badland</item> <!-- Badland -->
+ <item>com.bezircle</item> <!-- Bezircle -->
+
+ <!-- Lowest priority packages down here -->
+ </string-array>
+
+ <!-- DO NOT TRANSLATE -->
+ <string-array name="home_screen_row_ordering" translatable="false">
+ <item>partner_row</item>
+ <item>inputs_row</item>
+ <item>games_row</item>
+ <item>apps_row</item>
+ <item>settings_row</item>
+ </string-array>
+
+ <item type="drawable" name="partner_row_icon">@drawable/ic_title_custom</item>
+ <item type="drawable" name="apps_row_icon">@drawable/ic_title_apps</item>
+ <item type="drawable" name="games_row_icon">@drawable/ic_title_games</item>
+ <item type="drawable" name="inputs_row_icon">@drawable/ic_title_custom</item>
+ <item type="drawable" name="settings_row_icon">@drawable/ic_title_settings</item>
+
+ <!-- DO NOT TRANSLATE -->
+ <string name="launcher_category" translatable="false">android.intent.category.LEANBACK_LAUNCHER</string>
+</resources>
diff --git a/apps/LeanbackCustomizer/res/values/strings.xml b/apps/LeanbackCustomizer/res/values/strings.xml
new file mode 100644
index 0000000..c9e9889
--- /dev/null
+++ b/apps/LeanbackCustomizer/res/values/strings.xml
@@ -0,0 +1,20 @@
+<resources>
+
+ <string name="app_label">LeanbackCustomizer</string>
+
+ <string name="partner_row_title">Google\'s Top Picks</string>
+ <string name="apps_row_title">My Apps</string>
+ <string name="games_row_title">My Games</string>
+ <string name="inputs_row_title">My Inputs</string>
+ <string name="settings_row_title">My Settings</string>
+
+ <!-- Content description for Netflix App -->
+ <string name="ted">Ted</string>
+ <!-- Content description for banner to encourage users to download the Netflix App -->
+ <string name="try_ted">Try Ted</string>
+ <!-- Content description for Google Play Movies App -->
+ <string name="play_movies">Play Movies</string>
+ <!-- Content description for banner to encourage users to download Google Play Movies App -->
+ <string name="try_play_movies">Try Play Movies</string>
+
+</resources>
diff --git a/apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/BootReceiver.java b/apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/BootReceiver.java
new file mode 100644
index 0000000..84ff367
--- /dev/null
+++ b/apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/BootReceiver.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.leanbacklauncher.partnercustomizer;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class posts notifications that are used to populate the Partner Row of the Leanback Launcher
+ * It also allows the system/launcher to find the correct partner customization
+ * package.
+ *
+ * Packages using this broadcast receiver must also be a system app to be used for
+ * partner customization.
+ */
+public class BootReceiver extends BroadcastReceiver {
+
+ private static final String PARTNER_GROUP = "partner_row_entry";
+ private static final String BLACKLIST_PACKAGE = "com.android.leanbacklauncher.replacespackage";
+
+ private static final String TED_PKG_NAME = "com.ted.android.tv";
+ private static final String PLAY_MOVIES_PKG_NAME = "com.google.android.videos";
+
+ private Context mContext;
+ private NotificationManager mNotifMan;
+ private PackageManager mPkgMan;
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mContext == null) {
+ mContext = context;
+ mNotifMan = (NotificationManager)
+ mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ mPkgMan = mContext.getPackageManager();
+ }
+
+ String action = intent.getAction();
+ if (Intent.ACTION_PACKAGE_ADDED.equals(action)||
+ Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
+ postNotification(getPackageName(intent));
+ } else {
+ postNotification(TED_PKG_NAME);
+ postNotification(PLAY_MOVIES_PKG_NAME);
+ }
+ }
+
+ private void postNotification(String pkgName) {
+ int sort;
+ int resId;
+ int backupResId;
+ int titleId;
+ int backupTitleId;
+
+ switch (pkgName) {
+ case TED_PKG_NAME:
+ sort = 1;
+ resId = R.drawable.ic_ted_banner;
+ backupResId = R.drawable.ic_try_ted_banner;
+ titleId = R.string.ted;
+ backupTitleId = R.string.try_ted;
+ break;
+ case PLAY_MOVIES_PKG_NAME:
+ sort = 2;
+ resId = R.drawable.ic_play_movies_banner;
+ backupResId = R.drawable.ic_try_play_movies_banner;
+ titleId = R.string.play_movies;
+ backupTitleId = R.string.try_play_movies;
+ break;
+ default:
+ return;
+ }
+
+ postNotification(sort, resId, backupResId, titleId, backupTitleId, pkgName);
+ }
+
+ private void postNotification(int sort, int resId, int backupResId,
+ int titleId, int backupTitleId, String pkgName) {
+ int id = resId;
+ Intent intent = mPkgMan.getLeanbackLaunchIntentForPackage(pkgName);
+
+ if (intent == null) {
+ titleId = backupTitleId;
+ resId = backupResId;
+ intent = getBackupIntent(pkgName);
+ }
+
+ Notification.Builder bob = new Notification.Builder(mContext);
+ Bundle extras = new Bundle();
+ extras.putString(BLACKLIST_PACKAGE, pkgName);
+
+ bob.setContentTitle(mContext.getString(titleId))
+ .setSmallIcon(R.drawable.ic_launcher)
+ .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), resId))
+ .setContentIntent(PendingIntent.getActivity(mContext, 0, intent, 0))
+ .setCategory(Notification.CATEGORY_RECOMMENDATION)
+ .setGroup(PARTNER_GROUP)
+ .setSortKey(sort+"")
+ .setColor(mContext.getResources().getColor(R.color.partner_color))
+ .setExtras(extras);
+
+ mNotifMan.notify(id, bob.build());
+ }
+
+ private Intent getBackupIntent(String pkgName) {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse("market://details?id=" + pkgName));
+
+ return intent;
+ }
+
+ private String getPackageName(Intent intent) {
+ Uri uri = intent.getData();
+ String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
+ return pkg;
+ }
+
+}
diff --git a/apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/TestActivity.java b/apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/TestActivity.java
new file mode 100644
index 0000000..7318ec9
--- /dev/null
+++ b/apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/TestActivity.java
@@ -0,0 +1,7 @@
+package com.android.leanbacklauncher.partnercustomizer;
+
+import android.app.Activity;
+
+public class TestActivity extends Activity {
+
+}