blob: 870ac8778f7699bd25084229921a33701bcdf8ef [file] [log] [blame]
Robert Snoeberger046ee9c2019-01-10 18:29:38 -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 Snoeberger9ad03f42019-02-28 14:47:49 -050018import android.content.res.Resources;
19import android.graphics.Bitmap;
20import android.graphics.BitmapFactory;
Robert Snoeberger046ee9c2019-01-10 18:29:38 -050021import android.graphics.Paint.Style;
22import android.view.LayoutInflater;
23import android.view.View;
24import android.widget.TextClock;
25
26import com.android.keyguard.R;
27import com.android.systemui.plugins.ClockPlugin;
28
29import java.util.TimeZone;
30
31/**
32 * Controller for Bubble clock that can appear on lock screen and AOD.
33 */
34public class BubbleClockController implements ClockPlugin {
35
36 /**
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050037 * Resources used to get title and thumbnail.
38 */
39 private final Resources mResources;
40
41 /**
42 * LayoutInflater used to inflate custom clock views.
43 */
44 private final LayoutInflater mLayoutInflater;
45
46 /**
Robert Snoeberger046ee9c2019-01-10 18:29:38 -050047 * Custom clock shown on AOD screen and behind stack scroller on lock.
48 */
49 private View mView;
50 private TextClock mDigitalClock;
51 private ImageClock mAnalogClock;
52
53 /**
54 * Small clock shown on lock screen above stack scroller.
55 */
56 private View mLockClockContainer;
57 private TextClock mLockClock;
58
59 /**
60 * Controller for transition to dark state.
61 */
62 private CrossFadeDarkController mDarkController;
63
Robert Snoeberger046ee9c2019-01-10 18:29:38 -050064 /**
65 * Create a BubbleClockController instance.
66 *
67 * @param layoutInflater Inflater used to inflate custom clock views.
68 */
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050069 public BubbleClockController(Resources res, LayoutInflater inflater) {
70 mResources = res;
71 mLayoutInflater = inflater;
Robert Snoeberger046ee9c2019-01-10 18:29:38 -050072 }
73
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050074 private void createViews() {
75 mView = mLayoutInflater.inflate(R.layout.bubble_clock, null);
Robert Snoeberger046ee9c2019-01-10 18:29:38 -050076 mDigitalClock = (TextClock) mView.findViewById(R.id.digital_clock);
77 mAnalogClock = (ImageClock) mView.findViewById(R.id.analog_clock);
78
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050079 mLockClockContainer = mLayoutInflater.inflate(R.layout.digital_clock, null);
Robert Snoeberger046ee9c2019-01-10 18:29:38 -050080 mLockClock = (TextClock) mLockClockContainer.findViewById(R.id.lock_screen_clock);
81 mLockClock.setVisibility(View.GONE);
82
83 mDarkController = new CrossFadeDarkController(mDigitalClock, mLockClock);
84 }
85
86 @Override
Robert Snoeberger9ad03f42019-02-28 14:47:49 -050087 public String getName() {
88 return "bubble";
89 }
90
91 @Override
92 public String getTitle() {
93 return mResources.getString(R.string.clock_title_bubble);
94 }
95
96 @Override
97 public Bitmap getThumbnail() {
98 return BitmapFactory.decodeResource(mResources, R.drawable.bubble_thumbnail);
99 }
100
101 @Override
Robert Snoeberger046ee9c2019-01-10 18:29:38 -0500102 public View getView() {
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500103 if (mLockClockContainer == null) {
104 createViews();
105 }
Robert Snoeberger046ee9c2019-01-10 18:29:38 -0500106 return mLockClockContainer;
107 }
108
109 @Override
110 public View getBigClockView() {
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500111 if (mView == null) {
112 createViews();
113 }
Robert Snoeberger046ee9c2019-01-10 18:29:38 -0500114 return mView;
115 }
116
117 @Override
118 public void setStyle(Style style) {}
119
120 @Override
121 public void setTextColor(int color) {
122 mLockClock.setTextColor(color);
Robert Snoeberger0397c842019-02-07 14:25:46 -0500123 }
124
125 @Override
126 public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {
127 if (colorPalette == null || colorPalette.length == 0) {
128 return;
129 }
130 final int length = colorPalette.length;
131 mDigitalClock.setTextColor(colorPalette[Math.max(0, length - 6)]);
132 mAnalogClock.setClockColors(colorPalette[Math.max(0, length - 6)],
133 colorPalette[Math.max(0, length - 3)]);
Robert Snoeberger046ee9c2019-01-10 18:29:38 -0500134 }
135
136 @Override
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500137 public void setDarkAmount(float darkAmount) {
138 mDarkController.setDarkAmount(darkAmount);
Robert Snoeberger046ee9c2019-01-10 18:29:38 -0500139 }
140
141 @Override
Robert Snoeberger9ad03f42019-02-28 14:47:49 -0500142 public void onTimeTick() {
143 mAnalogClock.onTimeChanged();
Robert Snoeberger046ee9c2019-01-10 18:29:38 -0500144 }
145
146 @Override
147 public void onTimeZoneChanged(TimeZone timeZone) {
148 mAnalogClock.onTimeZoneChanged(timeZone);
149 }
150
151 @Override
152 public boolean shouldShowStatusArea() {
153 return false;
154 }
155}