From 0082a4906f98aabbc2435d44388f3ee276bcc8dc Mon Sep 17 00:00:00 2001 From: bulic Date: Wed, 30 Jul 2014 18:05:03 -0700 Subject: 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 --- apps/LeanbackCustomizer/Android.mk | 13 ++ apps/LeanbackCustomizer/AndroidManifest.xml | 23 +++ apps/LeanbackCustomizer/proguard-project.txt | 20 +++ .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4715 bytes .../res/drawable-mdpi/ic_blank.png | Bin 0 -> 1817 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2215 bytes .../res/drawable-xhdpi/bg_custom.png | Bin 0 -> 2326341 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 7771 bytes .../res/drawable-xhdpi/ic_play_movies_banner.png | Bin 0 -> 11840 bytes .../res/drawable-xhdpi/ic_ted_banner.png | Bin 0 -> 2629 bytes .../res/drawable-xhdpi/ic_title_apps.png | Bin 0 -> 1955 bytes .../res/drawable-xhdpi/ic_title_custom.png | Bin 0 -> 1835 bytes .../res/drawable-xhdpi/ic_title_games.png | Bin 0 -> 2331 bytes .../res/drawable-xhdpi/ic_title_settings.png | Bin 0 -> 3129 bytes .../drawable-xhdpi/ic_try_play_movies_banner.png | Bin 0 -> 14297 bytes .../res/drawable-xhdpi/ic_try_ted_banner.png | Bin 0 -> 4771 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 16553 bytes apps/LeanbackCustomizer/res/values/colors.xml | 4 + apps/LeanbackCustomizer/res/values/config.xml | 47 ++++++ apps/LeanbackCustomizer/res/values/strings.xml | 20 +++ .../partnercustomizer/BootReceiver.java | 157 +++++++++++++++++++++ .../partnercustomizer/TestActivity.java | 7 + 22 files changed, 291 insertions(+) create mode 100644 apps/LeanbackCustomizer/Android.mk create mode 100644 apps/LeanbackCustomizer/AndroidManifest.xml create mode 100644 apps/LeanbackCustomizer/proguard-project.txt create mode 100644 apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png create mode 100644 apps/LeanbackCustomizer/res/drawable-mdpi/ic_blank.png create mode 100644 apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png create mode 100644 apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png create mode 100644 apps/LeanbackCustomizer/res/values/colors.xml create mode 100644 apps/LeanbackCustomizer/res/values/config.xml create mode 100644 apps/LeanbackCustomizer/res/values/strings.xml create mode 100644 apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/BootReceiver.java create mode 100644 apps/LeanbackCustomizer/src/com/android/leanbacklauncher/partnercustomizer/TestActivity.java (limited to 'apps') 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-hdpi/ic_launcher.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-mdpi/ic_blank.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-mdpi/ic_launcher.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/bg_custom.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_launcher.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_play_movies_banner.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_ted_banner.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_apps.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_custom.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_games.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_title_settings.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_play_movies_banner.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xhdpi/ic_try_ted_banner.png 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 Binary files /dev/null and b/apps/LeanbackCustomizer/res/drawable-xxhdpi/ic_launcher.png 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 @@ + + + #FFFF00FF + 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 @@ + + + + bg_custom + + + + + + + com.ted.android.tv + com.clearchannel.iheartradio.tv + com.plexapp.plex + + + com.ayopagames.robotsloveicecream + com.frogmind.badland + com.bezircle + + + + + + + partner_row + inputs_row + games_row + apps_row + settings_row + + + @drawable/ic_title_custom + @drawable/ic_title_apps + @drawable/ic_title_games + @drawable/ic_title_custom + @drawable/ic_title_settings + + + android.intent.category.LEANBACK_LAUNCHER + 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 @@ + + + LeanbackCustomizer + + Google\'s Top Picks + My Apps + My Games + My Inputs + My Settings + + + Ted + + Try Ted + + Play Movies + + Try Play Movies + + 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 { + +} -- cgit v1.2.3