Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00257519 authored by Robert Snoeberger's avatar Robert Snoeberger
Browse files

Add preview for default clock face.

Bug: 123704608
Test: Checked image provided by ContentProvider
Change-Id: I485e02c287a0d26e1eb0e37cf2a519f009a708ca
parent 8e95f0bf
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
<?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>
+17 −7
Original line number Diff line number Diff line
@@ -60,6 +60,9 @@ import javax.inject.Singleton;
@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 @@ public final class ClockManager {
    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 @@ public final class ClockManager {

        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 @@ public final class ClockManager {
                .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 @@ public final class ClockManager {
     */
    @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 @@ public final class ClockManager {
        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,8 +305,12 @@ public final class ClockManager {

    private void reload() {
        mCurrentClock = getClockPlugin();
        if (mCurrentClock instanceof DefaultClockController) {
            notifyClockChanged(null);
        } else {
            notifyClockChanged(mCurrentClock);
        }
    }

    private ClockPlugin getClockPlugin() {
        ClockPlugin plugin = null;
+98 −0
Original line number Diff line number Diff line
/*
 * 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;
    }
}