/* * Copyright 2014 Google Inc. All rights reserved. * * 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.example.leanback.fastlane; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Handler; import android.support.v17.leanback.app.BackgroundManager; import android.util.DisplayMetrics; import com.android.example.leanback.BlurTransform; import com.android.example.leanback.R; import com.squareup.picasso.Picasso; import com.squareup.picasso.Target; /** * Created by anirudhd on 11/3/14. */ public class BackgroundHelper { private final Handler mHandler = new Handler(); private final Runnable mUpdateBackgroundAction = new Runnable() { @Override public void run() { if (mBackgroundURL != null) { updateBackground(mBackgroundURL); } } }; private Activity mActivity; private BackgroundManager mBackgroundManager; private DisplayMetrics mMetrics; private String mBackgroundURL; private Drawable mDefaultBackground; private Target mBackgroundTarget; public BackgroundHelper(Activity mActivity) { this.mActivity = mActivity; } private long BACKGROUND_UPDATE_DELAY = 200L; public void prepareBackgroundManager() { mBackgroundManager = BackgroundManager.getInstance(mActivity); mBackgroundManager.attach(mActivity.getWindow()); mBackgroundTarget = new PicassoBackgroundManagerTarget(mBackgroundManager); mDefaultBackground = mActivity.getResources().getDrawable(R.drawable.default_background); mMetrics = new DisplayMetrics(); mActivity.getWindowManager().getDefaultDisplay().getMetrics(mMetrics); } public void release() { mHandler.removeCallbacksAndMessages(null); mBackgroundManager.release(); } public void setBackgroundUrl(String backgroundUrl) { this.mBackgroundURL = backgroundUrl; scheduleUpdate(); } static class PicassoBackgroundManagerTarget implements Target { BackgroundManager mBackgroundManager; public PicassoBackgroundManagerTarget(BackgroundManager backgroundManager) { this.mBackgroundManager = backgroundManager; } @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { this.mBackgroundManager.setBitmap(bitmap); } @Override public void onBitmapFailed(Drawable drawable) { this.mBackgroundManager.setDrawable(drawable); } @Override public void onPrepareLoad(Drawable drawable) { // Do nothing, default_background manager has its own transitions } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; PicassoBackgroundManagerTarget that = (PicassoBackgroundManagerTarget) o; if (!mBackgroundManager.equals(that.mBackgroundManager)) return false; return true; } @Override public int hashCode() { return mBackgroundManager.hashCode(); } } protected void setDefaultBackground(Drawable background) { mDefaultBackground = background; } protected void setDefaultBackground(int resourceId) { mDefaultBackground = mActivity.getResources().getDrawable(resourceId); } protected void updateBackground(String url) { Picasso.with(mActivity) .load(url) .resize(mMetrics.widthPixels, mMetrics.heightPixels) .centerCrop() .transform(BlurTransform.getInstance(mActivity)) .error(mDefaultBackground) .into(mBackgroundTarget); } protected void updateBackground(Drawable drawable) { BackgroundManager.getInstance(mActivity).setDrawable(drawable); } protected void clearBackground() { BackgroundManager.getInstance(mActivity).setDrawable(mDefaultBackground); } private void scheduleUpdate() { mHandler.removeCallbacks(mUpdateBackgroundAction); mHandler.postDelayed(mUpdateBackgroundAction, BACKGROUND_UPDATE_DELAY); } /** * Deprecated, simply use {@link #setBackgroundUrl(String)} */ @Deprecated public void startBackgroundTimer() { } }