Merge "Add preview for default clock face."
diff --git a/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
new file mode 100644
index 0000000..3e6dd13
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/layout/default_clock_preview.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ >
+ <TextClock
+ android:id="@+id/time"
+ style="@style/widget_big"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_above="@id/date"
+ android:letterSpacing="0.03"
+ android:gravity="center_horizontal"
+ android:format12Hour="@string/keyguard_widget_12_hours_format"
+ android:format24Hour="@string/keyguard_widget_24_hours_format"
+ />
+
+ <TextClock
+ android:id="@+id/date"
+ style="@stype/widget_big"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:letterSpacing="0.03"
+ android:gravity="center_horizontal"
+ android:format12Hour="EEE, MMM d"
+ android:format24Hour="EEE, MMM d"
+ />
+</RelativeLayout>
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
index 3827e44..42a6e22 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
@@ -60,6 +60,9 @@
@Singleton
public final class ClockManager {
+ private static final String TAG = "ClockOptsProvider";
+ private static final String DEFAULT_CLOCK_ID = "default";
+
private final List<ClockInfo> mClockInfos = new ArrayList<>();
/**
* Map from expected value stored in settings to supplier of custom clock face.
@@ -67,6 +70,7 @@
private final Map<String, Supplier<ClockPlugin>> mClocks = new ArrayMap<>();
@Nullable private ClockPlugin mCurrentClock;
+ private final LayoutInflater mLayoutInflater;
private final ContentResolver mContentResolver;
private final SettingsWrapper mSettingsWrapper;
/**
@@ -122,11 +126,11 @@
Resources res = context.getResources();
mClockInfos.add(ClockInfo.builder()
- .setName("default")
+ .setName(DEFAULT_CLOCK_ID)
.setTitle(res.getString(R.string.clock_title_default))
- .setId("default")
+ .setId(DEFAULT_CLOCK_ID)
.setThumbnail(() -> BitmapFactory.decodeResource(res, R.drawable.default_thumbnail))
- .setPreview(() -> BitmapFactory.decodeResource(res, R.drawable.default_preview))
+ .setPreview(() -> getClockPreview(DEFAULT_CLOCK_ID))
.build());
mClockInfos.add(ClockInfo.builder()
.setName("bubble")
@@ -151,12 +155,15 @@
.build());
LayoutInflater layoutInflater = injectionInflater.injectable(LayoutInflater.from(context));
+ mClocks.put(DEFAULT_CLOCK_ID,
+ () -> DefaultClockController.build(layoutInflater));
mClocks.put(BubbleClockController.class.getName(),
() -> BubbleClockController.build(layoutInflater));
mClocks.put(StretchAnalogClockController.class.getName(),
() -> StretchAnalogClockController.build(layoutInflater));
mClocks.put(TypeClockController.class.getName(),
() -> TypeClockController.build(layoutInflater));
+ mLayoutInflater = layoutInflater;
// Store the size of the display for generation of clock preview.
DisplayMetrics dm = res.getDisplayMetrics();
@@ -218,6 +225,7 @@
*/
@Nullable
private Bitmap getClockPreview(String clockId) {
+ Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
Supplier<ClockPlugin> supplier = mClocks.get(clockId);
if (supplier == null) {
return null;
@@ -240,15 +248,13 @@
plugin.dozeTimeTick();
// Draw clock view hierarchy to canvas.
- Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
+ canvas.drawColor(Color.BLACK);
dispatchVisibilityAggregated(clockView, true);
clockView.measure(MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(mHeight, MeasureSpec.EXACTLY));
clockView.layout(0, 0, mWidth, mHeight);
- canvas.drawColor(Color.BLACK);
clockView.draw(canvas);
-
return bitmap;
}
@@ -299,7 +305,11 @@
private void reload() {
mCurrentClock = getClockPlugin();
- notifyClockChanged(mCurrentClock);
+ if (mCurrentClock instanceof DefaultClockController) {
+ notifyClockChanged(null);
+ } else {
+ notifyClockChanged(mCurrentClock);
+ }
}
private ClockPlugin getClockPlugin() {
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java
new file mode 100644
index 0000000..a4766db
--- /dev/null
+++ b/packages/SystemUI/src/com/android/keyguard/clock/DefaultClockController.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.keyguard.clock;
+
+import android.graphics.Paint.Style;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.keyguard.R;
+import com.android.systemui.plugins.ClockPlugin;
+
+import java.util.TimeZone;
+
+/**
+ * Plugin for the default clock face used only to provide a preview.
+ */
+public class DefaultClockController implements ClockPlugin {
+
+ /**
+ * Root view of preview.
+ */
+ private View mView;
+ /**
+ * Text clock in preview view hierarchy.
+ */
+ private TextView mTextTime;
+ private TextView mTextDate;
+
+ private DefaultClockController() {}
+
+ /**
+ * Create a DefaultClockController instance.
+ *
+ * @param inflater Inflater used to inflate custom clock views.
+ */
+ public static DefaultClockController build(LayoutInflater inflater) {
+ DefaultClockController controller = new DefaultClockController();
+ controller.createViews(inflater);
+ return controller;
+ }
+
+ private void createViews(LayoutInflater inflater) {
+ mView = inflater.inflate(R.layout.default_clock_preview, null);
+ mTextTime = mView.findViewById(R.id.time);
+ mTextDate = mView.findViewById(R.id.date);
+ }
+
+ @Override
+ public View getView() {
+ return null;
+ }
+
+ @Override
+ public View getBigClockView() {
+ return mView;
+ }
+
+ @Override
+ public void setStyle(Style style) {}
+
+ @Override
+ public void setTextColor(int color) {
+ mTextTime.setTextColor(color);
+ mTextDate.setTextColor(color);
+ }
+
+ @Override
+ public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {}
+
+ @Override
+ public void dozeTimeTick() {
+ }
+
+ @Override
+ public void setDarkAmount(float darkAmount) {}
+
+ @Override
+ public void onTimeZoneChanged(TimeZone timeZone) {}
+
+ @Override
+ public boolean shouldShowStatusArea() {
+ return true;
+ }
+}