diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java index d44494c86..99943df19 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BackgroundHelper.java @@ -100,6 +100,7 @@ public class BackgroundHelper { private Bitmap loadBitmap(Activity activity, Object imageToken) { if (imageToken instanceof Integer) { final int resourceId = (Integer) imageToken; + if (DEBUG) Log.v(TAG, "load resourceId " + resourceId); Drawable drawable = ContextCompat.getDrawable(activity, resourceId); if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); @@ -110,7 +111,7 @@ public class BackgroundHelper { private void applyBackground(Activity activity, Bitmap bitmap) { BackgroundManager backgroundManager = BackgroundManager.getInstance(activity); - if (bitmap == null || backgroundManager == null || !backgroundManager.isAttached()) { + if (backgroundManager == null || !backgroundManager.isAttached()) { return; } backgroundManager.setBitmap(bitmap); @@ -120,22 +121,34 @@ public class BackgroundHelper { private LoadBackgroundRunnable mRunnable; private LoadBitmapTask mTask; - public void attach(Activity activity) { - if (!ENABLED) { - return; - } - BackgroundManager.getInstance(activity).attach(activity.getWindow()); - } + // Allocate a dedicated handler because there may be no view available + // when setBackground is invoked. + private Handler mHandler = new Handler(); public void setBackground(Activity activity, Object imageToken) { if (!ENABLED) { return; } - Handler handler = activity.getWindow().getDecorView().getHandler(); if (mRunnable != null) { - handler.removeCallbacks(mRunnable); + mHandler.removeCallbacks(mRunnable); } mRunnable = new LoadBackgroundRunnable(activity, imageToken); - handler.postDelayed(mRunnable, SET_BACKGROUND_DELAY_MS); + mHandler.postDelayed(mRunnable, SET_BACKGROUND_DELAY_MS); + } + + static public void attach(Activity activity) { + if (!ENABLED) { + return; + } + if (DEBUG) Log.v(TAG, "attach to activity " + activity); + BackgroundManager.getInstance(activity).attach(activity.getWindow()); + } + + static public void release(Activity activity) { + if (!ENABLED) { + return; + } + if (DEBUG) Log.v(TAG, "release from activity " + activity); + BackgroundManager.getInstance(activity).release(); } } diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java index fdd81c638..38f2fb826 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseActivity.java @@ -23,4 +23,16 @@ public class BrowseActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.browse); } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + BackgroundHelper.attach(this); + } + + @Override + public void onStop() { + BackgroundHelper.release(this); + super.onStop(); + } } diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java index aea6109a2..0a509511d 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/BrowseFragment.java @@ -67,7 +67,10 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm RowPresenter.ViewHolder rowViewHolder, Row row) { Log.i(TAG, "onItemSelected: " + item + " row " + row); - if (item instanceof PhotoItem) { + if (isShowingHeaders()) { + mBackgroundHelper.setBackground(getActivity(), null); + } + else if (item instanceof PhotoItem) { mBackgroundHelper.setBackground( getActivity(), ((PhotoItem) item).getImageResourceId()); } @@ -85,8 +88,6 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm } }, 2000); } - - mBackgroundHelper.attach(getActivity()); } private void setupRows() { @@ -112,7 +113,7 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm listRowAdapter.add(new PhotoItem("Hello world", R.drawable.gallery_photo_5)); listRowAdapter.add(new PhotoItem("This is a test", "Only a test", R.drawable.gallery_photo_6)); listRowAdapter.add(new PhotoItem("Android TV", "open RowsActivity", R.drawable.gallery_photo_7)); - listRowAdapter.add(new PhotoItem("Leanback", "open MainActivity", R.drawable.gallery_photo_8)); + listRowAdapter.add(new PhotoItem("Leanback", "open BrowseActivity", R.drawable.gallery_photo_8)); HeaderItem header = new HeaderItem(i, "Row " + i); mRowsAdapter.add(new ListRow(header, listRowAdapter)); } @@ -128,7 +129,7 @@ public class BrowseFragment extends android.support.v17.leanback.app.BrowseFragm Intent intent; Bundle bundle; if ( ((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_8) { - intent = new Intent(getActivity(), MainActivity.class); + intent = new Intent(getActivity(), BrowseActivity.class); bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity()) .toBundle(); } else if ( ((PhotoItem) item).getImageResourceId() == R.drawable.gallery_photo_7) { diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java index 746da01b4..d6c52ab12 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsActivity.java @@ -35,4 +35,15 @@ public class DetailsActivity extends Activity } } + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + BackgroundHelper.attach(this); + } + + @Override + public void onStop() { + BackgroundHelper.release(this); + super.onStop(); + } } diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java index 98f218841..9238562f9 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/DetailsFragment.java @@ -159,8 +159,6 @@ public class DetailsFragment extends android.support.v17.leanback.app.DetailsFra prepareEntranceTransition(); } } - - mBackgroundHelper.attach(getActivity()); } @Override @@ -206,4 +204,13 @@ public class DetailsFragment extends android.support.v17.leanback.app.DetailsFra setAdapter(mRowsAdapter); } + @Override + public void onStart() { + super.onStart(); + if (mPhotoItem != null) { + mBackgroundHelper.setBackground( + getActivity(), mPhotoItem.getImageResourceId()); + } + } + } diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java index 90b1c6fc0..da6e0affd 100644 --- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java +++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/MainActivity.java @@ -88,5 +88,4 @@ public class MainActivity extends Activity { } } - }