1 /*
2  * Copyright (C) 2019 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 package com.android.keyguard.clock;
17 
18 import android.app.WallpaperManager;
19 import android.content.res.Resources;
20 import android.graphics.Bitmap;
21 import android.graphics.BitmapFactory;
22 import android.graphics.Color;
23 import android.graphics.Paint.Style;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.widget.TextView;
27 
28 import com.android.internal.colorextraction.ColorExtractor;
29 import com.android.systemui.R;
30 import com.android.systemui.colorextraction.SysuiColorExtractor;
31 import com.android.systemui.plugins.ClockPlugin;
32 
33 import java.util.TimeZone;
34 
35 /**
36  * Plugin for the default clock face used only to provide a preview.
37  */
38 public class DefaultClockController implements ClockPlugin {
39 
40     /**
41      * Resources used to get title and thumbnail.
42      */
43     private final Resources mResources;
44 
45     /**
46      * LayoutInflater used to inflate custom clock views.
47      */
48     private final LayoutInflater mLayoutInflater;
49 
50     /**
51      * Extracts accent color from wallpaper.
52      */
53     private final SysuiColorExtractor mColorExtractor;
54 
55     /**
56      * Renders preview from clock view.
57      */
58     private final ViewPreviewer mRenderer = new ViewPreviewer();
59 
60     /**
61      * Root view of preview.
62      */
63     private View mView;
64 
65     /**
66      * Text clock in preview view hierarchy.
67      */
68     private TextView mTextTime;
69 
70     /**
71      * Date showing below time in preview view hierarchy.
72      */
73     private TextView mTextDate;
74 
75     /**
76      * Create a DefaultClockController instance.
77      *
78      * @param res Resources contains title and thumbnail.
79      * @param inflater Inflater used to inflate custom clock views.
80      * @param colorExtractor Extracts accent color from wallpaper.
81      */
DefaultClockController(Resources res, LayoutInflater inflater, SysuiColorExtractor colorExtractor)82     public DefaultClockController(Resources res, LayoutInflater inflater,
83             SysuiColorExtractor colorExtractor) {
84         mResources = res;
85         mLayoutInflater = inflater;
86         mColorExtractor = colorExtractor;
87     }
88 
createViews()89     private void createViews() {
90         mView = mLayoutInflater.inflate(R.layout.default_clock_preview, null);
91         mTextTime = mView.findViewById(R.id.time);
92         mTextDate = mView.findViewById(R.id.date);
93     }
94 
95     @Override
onDestroyView()96     public void onDestroyView() {
97         mView = null;
98         mTextTime = null;
99         mTextDate = null;
100     }
101 
102     @Override
getName()103     public String getName() {
104         return "default";
105     }
106 
107     @Override
getTitle()108     public String getTitle() {
109         return mResources.getString(R.string.clock_title_default);
110     }
111 
112     @Override
getThumbnail()113     public Bitmap getThumbnail() {
114         return BitmapFactory.decodeResource(mResources, R.drawable.default_thumbnail);
115     }
116 
117     @Override
getPreview(int width, int height)118     public Bitmap getPreview(int width, int height) {
119 
120         // Use the big clock view for the preview
121         View view = getBigClockView();
122 
123         // Initialize state of plugin before generating preview.
124         setDarkAmount(1f);
125         setTextColor(Color.WHITE);
126         ColorExtractor.GradientColors colors = mColorExtractor.getColors(
127                 WallpaperManager.FLAG_LOCK);
128         setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
129         onTimeTick();
130 
131         return mRenderer.createPreview(view, width, height);
132     }
133 
134     @Override
getView()135     public View getView() {
136         return null;
137     }
138 
139     @Override
getBigClockView()140     public View getBigClockView() {
141         if (mView == null) {
142             createViews();
143         }
144         return mView;
145     }
146 
147     @Override
getPreferredY(int totalHeight)148     public int getPreferredY(int totalHeight) {
149         return totalHeight / 2;
150     }
151 
152     @Override
setStyle(Style style)153     public void setStyle(Style style) {}
154 
155     @Override
setTextColor(int color)156     public void setTextColor(int color) {
157         mTextTime.setTextColor(color);
158         mTextDate.setTextColor(color);
159     }
160 
161     @Override
setColorPalette(boolean supportsDarkText, int[] colorPalette)162     public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {}
163 
164     @Override
onTimeTick()165     public void onTimeTick() {
166     }
167 
168     @Override
setDarkAmount(float darkAmount)169     public void setDarkAmount(float darkAmount) {}
170 
171     @Override
onTimeZoneChanged(TimeZone timeZone)172     public void onTimeZoneChanged(TimeZone timeZone) {}
173 
174     @Override
shouldShowStatusArea()175     public boolean shouldShowStatusArea() {
176         return true;
177     }
178 }
179