165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/*
265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Copyright (C) 2016 The Android Open Source Project
365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * you may not use this file except in compliance with the License.
665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * You may obtain a copy of the License at
765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
1065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Unless required by applicable law or agreed to in writing, software
1165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
1265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * See the License for the specific language governing permissions and
1465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * limitations under the License
1565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */
1665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkopackage com.android.tv.dvr.ui.browse;
1865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
1965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.app.Activity;
2065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.graphics.drawable.BitmapDrawable;
2165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.graphics.drawable.ColorDrawable;
2265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.graphics.drawable.Drawable;
2365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.os.Handler;
2465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.v17.leanback.app.BackgroundManager;
2565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
2665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/**
2765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * The Background Helper.
2865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */
296ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoclass DetailsViewBackgroundHelper {
3065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    // Background delay serves to avoid kicking off expensive bitmap loading
3165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    // in case multiple backgrounds are set in quick succession.
3265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private static final int SET_BACKGROUND_DELAY_MS = 100;
3365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
3465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private final BackgroundManager mBackgroundManager;
3565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
3665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    class LoadBackgroundRunnable implements Runnable {
3765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        final Drawable mBackGround;
3865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
3965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        LoadBackgroundRunnable(Drawable background) {
4065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            mBackGround = background;
4165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
4265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
4365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        @Override
4465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        public void run() {
4565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            if (!mBackgroundManager.isAttached()) {
4665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                return;
4765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            }
4865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            if (mBackGround instanceof BitmapDrawable) {
4965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                mBackgroundManager.setBitmap(((BitmapDrawable) mBackGround).getBitmap());
5065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            }
5165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            mRunnable = null;
5265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
5365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
5465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
5565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private LoadBackgroundRunnable mRunnable;
5665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
5765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private final Handler mHandler = new Handler();
5865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
5965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public DetailsViewBackgroundHelper(Activity activity) {
6065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mBackgroundManager = BackgroundManager.getInstance(activity);
6165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mBackgroundManager.attach(activity.getWindow());
6265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
6365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
6465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    /**
6565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * Sets the given image to background.
6665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     */
6765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public void setBackground(Drawable background) {
6865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        if (mRunnable != null) {
6965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            mHandler.removeCallbacks(mRunnable);
7065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
7165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mRunnable = new LoadBackgroundRunnable(background);
7265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        mHandler.postDelayed(mRunnable, SET_BACKGROUND_DELAY_MS);
7365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
7465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
7565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    /**
7665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * Sets the background color.
7765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     */
7865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public void setBackgroundColor(int color) {
79d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        if (mBackgroundManager.isAttached()) {
80d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            mBackgroundManager.setColor(color);
81d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        }
8265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
8365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
8465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    /**
8565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * Sets the background scrim.
8665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     */
8765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public void setScrim(int color) {
88d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        if (mBackgroundManager.isAttached()) {
89d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko            mBackgroundManager.setDimLayer(new ColorDrawable(color));
90d41f0075a7d2ea826204e81fcec57d0aa57171a9Nick Chalko        }
9165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
9265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko}
93