blob: c81935a15a1522d810ee8d63e633ac449d3b9895 [file] [log] [blame]
Robert Snoeberger00257512019-02-27 16:44:04 -05001/*
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 */
16package com.android.keyguard.clock;
17
Robert Snoeberger2ba20602019-03-29 14:25:39 -040018import android.app.WallpaperManager;
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050019import android.content.res.Resources;
20import android.graphics.Bitmap;
21import android.graphics.BitmapFactory;
Robert Snoeberger2ba20602019-03-29 14:25:39 -040022import android.graphics.Color;
Robert Snoeberger00257512019-02-27 16:44:04 -050023import android.graphics.Paint.Style;
24import android.view.LayoutInflater;
25import android.view.View;
26import android.widget.TextView;
27
Robert Snoeberger2ba20602019-03-29 14:25:39 -040028import com.android.internal.colorextraction.ColorExtractor;
Sunny Goyal87fccf02019-08-13 17:39:10 -070029import com.android.systemui.R;
Robert Snoeberger2ba20602019-03-29 14:25:39 -040030import com.android.systemui.colorextraction.SysuiColorExtractor;
Robert Snoeberger00257512019-02-27 16:44:04 -050031import com.android.systemui.plugins.ClockPlugin;
32
33import java.util.TimeZone;
34
35/**
36 * Plugin for the default clock face used only to provide a preview.
37 */
38public class DefaultClockController implements ClockPlugin {
39
40 /**
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050041 * 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 /**
Robert Snoeberger2ba20602019-03-29 14:25:39 -040051 * 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 /**
Robert Snoeberger00257512019-02-27 16:44:04 -050061 * Root view of preview.
62 */
63 private View mView;
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050064
Robert Snoeberger00257512019-02-27 16:44:04 -050065 /**
66 * Text clock in preview view hierarchy.
67 */
68 private TextView mTextTime;
Robert Snoeberger00257512019-02-27 16:44:04 -050069
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050070 /**
71 * Date showing below time in preview view hierarchy.
72 */
73 private TextView mTextDate;
Robert Snoeberger00257512019-02-27 16:44:04 -050074
75 /**
76 * Create a DefaultClockController instance.
77 *
Robert Snoeberger2ba20602019-03-29 14:25:39 -040078 * @param res Resources contains title and thumbnail.
Robert Snoeberger00257512019-02-27 16:44:04 -050079 * @param inflater Inflater used to inflate custom clock views.
Robert Snoeberger2ba20602019-03-29 14:25:39 -040080 * @param colorExtractor Extracts accent color from wallpaper.
Robert Snoeberger00257512019-02-27 16:44:04 -050081 */
Robert Snoeberger2ba20602019-03-29 14:25:39 -040082 public DefaultClockController(Resources res, LayoutInflater inflater,
83 SysuiColorExtractor colorExtractor) {
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050084 mResources = res;
85 mLayoutInflater = inflater;
Robert Snoeberger2ba20602019-03-29 14:25:39 -040086 mColorExtractor = colorExtractor;
Robert Snoeberger00257512019-02-27 16:44:04 -050087 }
88
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050089 private void createViews() {
90 mView = mLayoutInflater.inflate(R.layout.default_clock_preview, null);
Robert Snoeberger00257512019-02-27 16:44:04 -050091 mTextTime = mView.findViewById(R.id.time);
92 mTextDate = mView.findViewById(R.id.date);
93 }
94
95 @Override
Robert Snoeberger3358cfb2019-04-03 13:09:55 -040096 public void onDestroyView() {
97 mView = null;
98 mTextTime = null;
99 mTextDate = null;
100 }
101
102 @Override
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500103 public String getName() {
104 return "default";
105 }
106
107 @Override
108 public String getTitle() {
109 return mResources.getString(R.string.clock_title_default);
110 }
111
112 @Override
113 public Bitmap getThumbnail() {
114 return BitmapFactory.decodeResource(mResources, R.drawable.default_thumbnail);
115 }
116
117 @Override
Robert Snoeberger2ba20602019-03-29 14:25:39 -0400118 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(
Lucas Dupin89233c42019-06-10 18:00:22 -0700127 WallpaperManager.FLAG_LOCK);
Robert Snoeberger2ba20602019-03-29 14:25:39 -0400128 setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
129 onTimeTick();
130
131 return mRenderer.createPreview(view, width, height);
132 }
133
134 @Override
Robert Snoeberger00257512019-02-27 16:44:04 -0500135 public View getView() {
136 return null;
137 }
138
139 @Override
140 public View getBigClockView() {
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500141 if (mView == null) {
142 createViews();
143 }
Robert Snoeberger00257512019-02-27 16:44:04 -0500144 return mView;
145 }
146
147 @Override
Robert Snoeberger69956802019-04-16 16:55:21 -0400148 public int getPreferredY(int totalHeight) {
149 return totalHeight / 2;
150 }
151
152 @Override
Robert Snoeberger00257512019-02-27 16:44:04 -0500153 public void setStyle(Style style) {}
154
155 @Override
156 public void setTextColor(int color) {
157 mTextTime.setTextColor(color);
158 mTextDate.setTextColor(color);
159 }
160
161 @Override
162 public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {}
163
164 @Override
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500165 public void onTimeTick() {
Robert Snoeberger00257512019-02-27 16:44:04 -0500166 }
167
168 @Override
169 public void setDarkAmount(float darkAmount) {}
170
171 @Override
172 public void onTimeZoneChanged(TimeZone timeZone) {}
173
174 @Override
175 public boolean shouldShowStatusArea() {
176 return true;
177 }
178}