1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.tv.settings.widget;
18 
19 import com.android.tv.settings.widget.BitmapDownloader;
20 import com.android.tv.settings.widget.BitmapDownloader.BitmapCallback;
21 import com.android.tv.settings.widget.BitmapWorkerOptions;
22 import com.android.tv.settings.R;
23 
24 import android.content.Context;
25 import android.graphics.Bitmap;
26 import android.net.Uri;
27 import android.view.Gravity;
28 import android.view.LayoutInflater;
29 import android.view.View;
30 import android.widget.ImageView;
31 import android.widget.TextView;
32 import android.widget.Toast;
33 
34 /**
35  * Implementation of the SettingsToast notification.
36  */
37 public class SettingsToast extends Toast {
38 
39     protected Context mContext;
40     protected TextView mTextView;
41     protected ImageView mIconView;
42     protected BitmapCallback mBitmapCallBack;
43 
44     /**
45      * Constructs a SettingsToast message with a text message.
46      *
47      * @param context  The context to use.  Usually your {@link android.app.Application}
48      *                 or {@link android.app.Activity} object.
49      * @param text     The text to show.  Can be formatted text.
50      */
SettingsToast(Context context, CharSequence text)51     public SettingsToast(Context context, CharSequence text) {
52         super(context);
53 
54         mContext = context;
55 
56         LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
57                 Context.LAYOUT_INFLATER_SERVICE);
58         View layout = inflater.inflate(R.layout.toast_notification, null);
59 
60         mTextView = (TextView) layout.findViewById(R.id.text);
61         if (mTextView != null) {
62             mTextView.setText(text);
63         }
64 
65         mIconView = (ImageView) layout.findViewById(R.id.icon);
66 
67         setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
68         setView(layout);
69     }
70 
71     /**
72      * Constructs a SettingsToast message with a text message and an icon.
73      *
74      * @param context The context to use. Usually your
75      *            {@link android.app.Application} or
76      *            {@link android.app.Activity} object.
77      * @param text The text to show. Can be formatted text.
78      * @param iconUri URI String identifying the Icon to be used in this
79      *            notification.
80      */
SettingsToast(Context context, CharSequence text, String iconUri)81     public SettingsToast(Context context, CharSequence text, String iconUri) {
82         this(context, text);
83 
84         if (mIconView != null && iconUri != null) {
85             mIconView.setVisibility(View.INVISIBLE);
86 
87             BitmapDownloader bitmapDownloader = BitmapDownloader.getInstance(mContext);
88             mBitmapCallBack = new BitmapCallback() {
89                     @Override
90                 public void onBitmapRetrieved(Bitmap bitmap) {
91                     mIconView.setImageBitmap(bitmap);
92                     mIconView.setVisibility(View.VISIBLE);
93                 }
94             };
95 
96             bitmapDownloader.getBitmap(new BitmapWorkerOptions.Builder(mContext).resource(
97                     Uri.parse(iconUri)).width(mIconView.getLayoutParams().width)
98                     .height(mIconView.getLayoutParams().height).build(), mBitmapCallBack);
99         }
100     }
101 
102     /**
103      * Constructs a SettingsToast message with a text message and a Bitmap icon.
104      *
105      * @param context The context to use. Usually your
106      *            {@link android.app.Application} or
107      *            {@link android.app.Activity} object.
108      * @param text The text to show. Can be formatted text.
109      * @param iconBitmap Bitmap Icon to be used in this toast notification.
110      */
SettingsToast(Context context, CharSequence text, Bitmap iconBitmap)111     public SettingsToast(Context context, CharSequence text, Bitmap iconBitmap) {
112         this(context, text);
113 
114         if (mIconView != null && iconBitmap != null) {
115             mIconView.setImageBitmap(iconBitmap);
116             mIconView.setVisibility(View.VISIBLE);
117         }
118     }
119 
120     @Override
finalize()121     public void finalize() throws Throwable {
122         if (mBitmapCallBack != null) {
123             BitmapDownloader bitmapDownloader = BitmapDownloader.getInstance(mContext);
124             bitmapDownloader.cancelDownload(mBitmapCallBack);
125         }
126         super.finalize();
127     }
128 }
129