From f7f6d5a1d101588de5cb484590f2d16b636d5258 Mon Sep 17 00:00:00 2001
From: El Dainosor <eldainosor@gmail.com>
Date: Thu, 02 Apr 2020 19:24:25 +0000
Subject: [PATCH] base: Add Divided Lines Clock

Change-Id: I38072182d704e3a72477025b0d9e0e6074c3d6b0
---

diff --git a/packages/SystemUI/res-keyguard/drawable-xxxhdpi/divided_lines_thumbnail.png b/packages/SystemUI/res-keyguard/drawable-xxxhdpi/divided_lines_thumbnail.png
new file mode 100644
index 0000000..8e5e5e4
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/drawable-xxxhdpi/divided_lines_thumbnail.png
Binary files differ
diff --git a/packages/SystemUI/res-keyguard/layout/divided_lines_clock.xml b/packages/SystemUI/res-keyguard/layout/divided_lines_clock.xml
new file mode 100644
index 0000000..bf77bf4
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/layout/divided_lines_clock.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.android.keyguard.clock.ClockLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_horizontal|top">
+    <FrameLayout
+         android:id="@+id/clock_view"
+         android:layout_width="match_parent"
+         android:layout_height="wrap_content"
+         android:layout_gravity="center_horizontal"
+         android:layout_alignParentTop="true">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="120dp"
+            android:layout_marginRight="120dp"
+            android:gravity="center_horizontal"
+            android:orientation="vertical"
+            android:layout_alignParentTop="true">
+
+            <View
+                android:id="@+id/topLine"
+                android:layout_width="match_parent"
+                android:layout_height="2dp"
+                android:paddingLeft="8dp"
+                android:paddingRight="8dp"
+                android:layout_weight="1"
+                android:background="?attr/wallpaperTextColor" />
+
+            <TextClock
+                android:id="@+id/date"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:gravity="center_horizontal"
+                android:format12Hour="EEE, MMM d"
+                android:format24Hour="EEE, MMM d"
+                android:textColor="?attr/wallpaperTextColor"
+                android:theme="@style/TextAppearance.Keyguard"
+                android:fontFamily="@*android:string/config_bodyFontFamily"
+                android:textSize="14sp"
+                android:layout_weight="1"
+                android:letterSpacing="0.25"
+                android:textAllCaps="true"
+                android:alpha="0.85"
+                android:paddingTop="15dp" />
+
+            <TextClock
+                android:id="@+id/clock"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:gravity="center_horizontal"
+                android:layout_weight="1"
+                android:paddingTop="15dp"
+                android:paddingBottom="15dp"
+                style="@style/widget_big"
+                android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
+                android:letterSpacing="0.3"
+                android:textColor="?attr/wallpaperTextColor"
+                android:textSize="42sp" />
+
+            <View
+                android:id="@+id/bottomLine"
+                android:layout_width="match_parent"
+                android:layout_height="2dp"
+                android:paddingLeft="8dp"
+                android:paddingRight="8dp"
+                android:layout_weight="1"
+                android:background="?attr/wallpaperTextColor" />
+
+        </LinearLayout>
+    </FrameLayout>
+</com.android.keyguard.clock.ClockLayout>
diff --git a/packages/SystemUI/res-keyguard/layout/divided_lines_preview.xml b/packages/SystemUI/res-keyguard/layout/divided_lines_preview.xml
new file mode 100644
index 0000000..31887ba
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/layout/divided_lines_preview.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    >
+
+    <View
+        android:id="@+id/topL"
+        android:layout_width="match_parent"
+        android:layout_height="2dp"
+        android:layout_weight="1" />
+
+    <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.25"
+        android:paddingTop="10dp"
+        android:alpha="0.85"
+        android:gravity="center_horizontal"
+        android:format12Hour="EEE, MMM d"
+        android:format24Hour="EEE, MMM d"
+        />
+
+    <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.3"
+        android:gravity="center_horizontal"
+        android:textSize="36sp"
+        android:format12Hour="@string/keyguard_widget_12_hours_format"
+        android:format24Hour="@string/keyguard_widget_24_hours_format"
+        />
+
+    <TextView
+        android:id="@+id/extraData"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:letterSpacing="0.25"
+        android:layout_weight="1"
+        android:paddingBottom="10dp"
+        android:alpha="0.85"
+        android:text="Unshishufied | 21°C" />
+
+    <View
+        android:id="@+id/bottomL"
+        android:layout_width="match_parent"
+        android:layout_height="2dp"
+        android:layout_weight="1" />
+</LinearLayout>
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
index c6ccbad..706a4cf 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
@@ -157,6 +157,7 @@
         addBuiltinClock(() -> new AnalogClockController(res, layoutInflater, colorExtractor));
         addBuiltinClock(() -> new TypeClockController(res, layoutInflater, colorExtractor));
         addBuiltinClock(() -> new SfunyClockController(res, layoutInflater, colorExtractor));
+        addBuiltinClock(() -> new DividedLinesClockController(res, layoutInflater, colorExtractor));
 
         // Store the size of the display for generation of clock preview.
         DisplayMetrics dm = res.getDisplayMetrics();
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/DividedLinesClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/DividedLinesClockController.java
new file mode 100644
index 0000000..00ffd01
--- /dev/null
+++ b/packages/SystemUI/src/com/android/keyguard/clock/DividedLinesClockController.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 Projekt Spicy Future
+ * Copyright (C) 2020 Bootleggers ROM
+ *
+ * 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.app.WallpaperManager;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
+import android.graphics.Paint.Style;
+import android.graphics.Typeface;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextClock;
+import android.widget.TextView;
+
+import com.android.internal.colorextraction.ColorExtractor;
+import com.android.systemui.R;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.plugins.ClockPlugin;
+
+import java.util.TimeZone;
+
+import static com.android.systemui.statusbar.phone
+        .KeyguardClockPositionAlgorithm.CLOCK_USE_DEFAULT_Y;
+
+/**
+ * Plugin for the default clock face used only to provide a preview.
+ */
+public class DividedLinesClockController implements ClockPlugin {
+
+    /**
+     * Resources used to get title and thumbnail.
+     */
+    private final Resources mResources;
+
+    /**
+     * LayoutInflater used to inflate custom clock views.
+     */
+    private final LayoutInflater mLayoutInflater;
+
+    /**
+     * Extracts accent color from wallpaper.
+     */
+    private final SysuiColorExtractor mColorExtractor;
+
+    /**
+     * Renders preview from clock view.
+     */
+    private final ViewPreviewer mRenderer = new ViewPreviewer();
+
+    /**
+     * Root view of clock.
+     */
+    private ClockLayout mView;
+
+    /**
+     * Text clock in preview view hierarchy.
+     */
+    private TextClock mClock;
+
+    /**
+     * Text date in preview view hierarchy.
+     */
+    private TextClock mDate;
+
+    /**
+     * Top and bottom dividers in preview view hierarchy.
+     */
+    private View mTopLine;
+    private View mBottomLine;
+
+    /**
+     * Create a DefaultClockController instance.
+     *
+     * @param res Resources contains title and thumbnail.
+     * @param inflater Inflater used to inflate custom clock views.
+     * @param colorExtractor Extracts accent color from wallpaper.
+     */
+    public DividedLinesClockController(Resources res, LayoutInflater inflater,
+            SysuiColorExtractor colorExtractor) {
+        mResources = res;
+        mLayoutInflater = inflater;
+        mColorExtractor = colorExtractor;
+    }
+
+    private void createViews() {
+        mView = (ClockLayout) mLayoutInflater
+                .inflate(R.layout.divided_lines_clock, null);
+        mClock = mView.findViewById(R.id.clock);
+        mDate = mView.findViewById(R.id.date);
+        mClock.setFormat12Hour("h:mm");
+        onTimeTick();
+    }
+
+    @Override
+    public void onDestroyView() {
+        mView = null;
+        mClock = null;
+        mDate = null;
+        mTopLine = null;
+        mBottomLine = null;
+    }
+
+    @Override
+    public String getName() {
+        return "dividedlines";
+    }
+
+    @Override
+    public String getTitle() {
+        return "Divided Lines";
+    }
+
+    @Override
+    public Bitmap getThumbnail() {
+        return BitmapFactory.decodeResource(mResources, R.drawable.divided_lines_thumbnail);
+    }
+
+    @Override
+    public Bitmap getPreview(int width, int height) {
+        View previewView = mLayoutInflater.inflate(R.layout.divided_lines_clock, null);
+        TextClock previewTime = previewView.findViewById(R.id.clock);
+        TextClock previewDate = previewView.findViewById(R.id.date);
+        View previewTLine = previewView.findViewById(R.id.topLine);
+        View previewBLine = previewView.findViewById(R.id.bottomLine);
+        previewTime.setFormat12Hour("h:mm");
+
+        // Initialize state of plugin before generating preview.
+        previewTime.setTextColor(Color.WHITE);
+        previewDate.setTextColor(Color.WHITE);
+        previewTLine.setBackgroundColor(Color.WHITE);
+        previewBLine.setBackgroundColor(Color.WHITE);
+        ColorExtractor.GradientColors colors = mColorExtractor.getColors(
+                WallpaperManager.FLAG_LOCK);
+        setColorPalette(colors.supportsDarkText(), colors.getColorPalette());
+        onTimeTick();
+
+        return mRenderer.createPreview(previewView, width, height);
+    }
+
+    @Override
+    public View getView() {
+        if (mView == null) {
+            createViews();
+        }
+        return mView;
+    }
+
+    @Override
+    public View getBigClockView() {
+        return null;
+    }
+
+    @Override
+    public int getPreferredY(int totalHeight) {
+        return CLOCK_USE_DEFAULT_Y;
+    }
+
+    @Override
+    public void setStyle(Style style) {}
+
+    @Override
+    public void setTextColor(int color) {
+        mClock.setTextColor(color);
+    }
+
+    @Override
+    public void setColorPalette(boolean supportsDarkText, int[] colorPalette) {}
+
+    @Override
+    public void onTimeTick() {
+    }
+
+    @Override
+    public void setDarkAmount(float darkAmount) {
+        mView.setDarkAmount(darkAmount);
+    }
+
+    @Override
+    public void onTimeZoneChanged(TimeZone timeZone) {}
+
+    @Override
+    public boolean shouldShowStatusArea() {
+        return false;
+    }
+}
