summaryrefslogtreecommitdiffstats
path: root/samples/SupportLeanbackDemos
diff options
context:
space:
mode:
authorCraig Stout <cstout@google.com>2015-02-10 13:37:24 -0800
committerCraig Stout <cstout@google.com>2015-02-10 13:39:09 -0800
commitcada78686054bee000158e326cc40d7178cc36ab (patch)
treee2f027428c383b36894f792e257a8cd208327d87 /samples/SupportLeanbackDemos
parent529288b59c9019e117a1f8a68659d2ef9c88a1f5 (diff)
downloadandroid_development-cada78686054bee000158e326cc40d7178cc36ab.tar.gz
android_development-cada78686054bee000158e326cc40d7178cc36ab.tar.bz2
android_development-cada78686054bee000158e326cc40d7178cc36ab.zip
Add backgrounds.
Change-Id: I1f48ab3f6b914132f0c2560657e419b3f3ace882
Diffstat (limited to 'samples/SupportLeanbackDemos')
-rw-r--r--samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java140
-rw-r--r--samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java8
-rw-r--r--samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java3
3 files changed, 151 insertions, 0 deletions
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java
new file mode 100644
index 000000000..95d3cb68d
--- /dev/null
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2015 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.example.android.leanback;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.support.v17.leanback.app.BackgroundManager;
+import android.util.Log;
+
+public class BackgroundHelper {
+
+ private static final String TAG = "BackgroundHelper";
+ private static final boolean DEBUG = false;
+ private static final boolean ENABLED = true;
+
+ // Background delay serves to avoid kicking off expensive bitmap loading
+ // in case multiple backgrounds are set in quick succession.
+ private static final int SET_BACKGROUND_DELAY_MS = 100;
+
+ static class Request {
+ Object mImageToken;
+ Activity mActivity;
+ Bitmap mResult;
+
+ Request(Activity activity, Object imageToken) {
+ mActivity = activity;
+ mImageToken = imageToken;
+ }
+ }
+
+ public BackgroundHelper() {
+ if (DEBUG && !ENABLED) Log.v(TAG, "BackgroundHelper: disabled");
+ }
+
+ class LoadBackgroundRunnable implements Runnable {
+ Request mRequest;
+
+ LoadBackgroundRunnable(Activity activity, Object imageToken) {
+ mRequest = new Request(activity, imageToken);
+ }
+
+ @Override
+ public void run() {
+ if (mTask != null) {
+ if (DEBUG) Log.v(TAG, "Cancelling task");
+ mTask.cancel(true);
+ }
+ if (DEBUG) Log.v(TAG, "Executing task");
+ mTask = new LoadBitmapTask();
+ mTask.execute(mRequest);
+ mRunnable = null;
+ }
+ };
+
+ class LoadBitmapTask extends AsyncTask<Request, Object, Request> {
+ @Override
+ protected Request doInBackground(Request... params) {
+ boolean cancelled = isCancelled();
+ if (DEBUG) Log.v(TAG, "doInBackground cancelled " + cancelled);
+ Request request = params[0];
+ if (!cancelled) {
+ request.mResult = loadBitmap(request.mActivity, request.mImageToken);
+ }
+ return request;
+ }
+
+ @Override
+ protected void onPostExecute(Request request) {
+ if (DEBUG) Log.v(TAG, "onPostExecute");
+ applyBackground(request.mActivity, request.mResult);
+ if (mTask == this) {
+ mTask = null;
+ }
+ }
+
+ @Override
+ protected void onCancelled(Request request) {
+ if (DEBUG) Log.v(TAG, "onCancelled");
+ }
+
+ private Bitmap loadBitmap(Activity activity, Object imageToken) {
+ if (imageToken instanceof Integer) {
+ final int resourceId = (Integer) imageToken;
+ Drawable drawable = activity.getDrawable(resourceId);
+ if (drawable instanceof BitmapDrawable) {
+ return ((BitmapDrawable) drawable).getBitmap();
+ }
+ }
+ return null;
+ }
+
+ private void applyBackground(Activity activity, Bitmap bitmap) {
+ BackgroundManager backgroundManager = BackgroundManager.getInstance(activity);
+ if (bitmap == null || backgroundManager == null || !backgroundManager.isAttached()) {
+ return;
+ }
+ backgroundManager.setBitmap(bitmap);
+ }
+ }
+
+ private LoadBackgroundRunnable mRunnable;
+ private LoadBitmapTask mTask;
+
+ public void attach(Activity activity) {
+ if (!ENABLED) {
+ return;
+ }
+ BackgroundManager.getInstance(activity).attach(activity.getWindow());
+ }
+
+ public void setBackground(Activity activity, Object imageToken) {
+ if (!ENABLED) {
+ return;
+ }
+ Handler handler = activity.getWindow().getDecorView().getHandler();
+ if (mRunnable != null) {
+ handler.removeCallbacks(mRunnable);
+ }
+ mRunnable = new LoadBackgroundRunnable(activity, imageToken);
+ handler.postDelayed(mRunnable, SET_BACKGROUND_DELAY_MS);
+ }
+}
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
index 91fec5fdc..a0a62f03e 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java
@@ -37,6 +37,7 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm
private static final boolean TEST_ENTRANCE_TRANSITION = true;
private static final int NUM_ROWS = 10;
private ArrayObjectAdapter mRowsAdapter;
+ private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -62,6 +63,11 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm
public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
RowPresenter.ViewHolder rowViewHolder, Row row) {
Log.i(TAG, "onItemSelected: " + item + " row " + row);
+
+ if (item instanceof PhotoItem) {
+ mBackgroundHelper.setBackground(
+ getActivity(), ((PhotoItem) item).getImageResourceId());
+ }
}
});
if (TEST_ENTRANCE_TRANSITION) {
@@ -76,6 +82,8 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm
}
}, 2000);
}
+
+ mBackgroundHelper.attach(getActivity());
}
private void setupRows() {
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java
index bc88e2109..32f829c83 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java
@@ -44,6 +44,7 @@ public class DetailsFragment extends android.support.v17.leanback.app.DetailsFra
private ArrayObjectAdapter mRowsAdapter;
private PhotoItem mPhotoItem;
final CardPresenter cardPresenter = new CardPresenter();
+ private BackgroundHelper mBackgroundHelper = new BackgroundHelper();
private static final int ACTION_BUY = 1;
private static final int ACTION_RENT = 2;
@@ -131,6 +132,8 @@ public class DetailsFragment extends android.support.v17.leanback.app.DetailsFra
prepareEntranceTransition();
}
}
+
+ mBackgroundHelper.attach(getActivity());
}
@Override