Update size and vertical spacing of clock on keyguard.

Bug: 130223602
Test: visual
Change-Id: I09f6dff826d6ef297a4babdc9aa70b7f138dbeed
diff --git a/packages/SystemUI/res-keyguard/layout/digital_clock.xml b/packages/SystemUI/res-keyguard/layout/digital_clock.xml
index 7c15fe6..38ee081 100644
--- a/packages/SystemUI/res-keyguard/layout/digital_clock.xml
+++ b/packages/SystemUI/res-keyguard/layout/digital_clock.xml
@@ -26,6 +26,7 @@
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:gravity="center_horizontal"
+      android:paddingBottom="@dimen/widget_vertical_padding_clock"
       android:letterSpacing="0.03"
       android:textColor="?attr/wallpaperTextColor"
       android:singleLine="true"
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
index 1967dd1..bf2963c 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
@@ -36,7 +36,8 @@
              android:layout_height="wrap_content"
              android:layout_gravity="center_horizontal"
              android:gravity="center_horizontal"
-             android:letterSpacing="0.03"
+             android:paddingBottom="@dimen/title_clock_padding"
+             android:letterSpacing="0.02"
              android:textColor="?attr/wallpaperTextColor"
              android:singleLine="true"
              style="@style/widget_big"
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_status_area.xml b/packages/SystemUI/res-keyguard/layout/keyguard_status_area.xml
index dc45b4b..a84ddaf 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_status_area.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_status_area.xml
@@ -32,8 +32,9 @@
               android:id="@+id/title"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
-              android:paddingStart="64dp"
-              android:paddingEnd="64dp"
+              android:paddingStart="44dp"
+              android:paddingEnd="44dp"
+              android:letterSpacing="0.02"
               android:visibility="gone"
               android:textColor="?attr/wallpaperTextColor"
               android:theme="@style/TextAppearance.Keyguard"
@@ -45,4 +46,4 @@
               android:orientation="horizontal"
               android:gravity="center"
     />
-</com.android.keyguard.KeyguardSliceView>
\ No newline at end of file
+</com.android.keyguard.KeyguardSliceView>
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml
index 10fea9d..04d6afc 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml
@@ -29,6 +29,7 @@
     androidprv:layout_maxHeight="@dimen/keyguard_security_height"
     android:gravity="center_horizontal|top">
     <LinearLayout
+        android:id="@+id/status_view_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="@dimen/widget_vertical_padding"
diff --git a/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml b/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml
index 3fb86d0..669f8fb 100644
--- a/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml
@@ -16,5 +16,5 @@
   -->
 
 <resources>
-    <dimen name="widget_big_font_size">64dp</dimen>
-</resources>
\ No newline at end of file
+    <dimen name="widget_big_font_size">54dp</dimen>
+</resources>
diff --git a/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml b/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml
index 3fb86d0..669f8fb 100644
--- a/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml
@@ -16,5 +16,5 @@
   -->
 
 <resources>
-    <dimen name="widget_big_font_size">64dp</dimen>
-</resources>
\ No newline at end of file
+    <dimen name="widget_big_font_size">54dp</dimen>
+</resources>
diff --git a/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml b/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml
index fdca44d..e9bd638 100644
--- a/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values-sw600dp/dimens.xml
@@ -27,7 +27,7 @@
 
     <!-- Overload default clock widget parameters -->
     <dimen name="widget_big_font_size">100dp</dimen>
-    <dimen name="widget_label_font_size">16sp</dimen>
+    <dimen name="widget_label_font_size">18sp</dimen>
 
     <!-- EmergencyCarrierArea overlap - amount to overlap the emergency button and carrier text.
          Should be 0 on devices with plenty of room (e.g. tablets) -->
diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
index 112dde6..8e00efe 100644
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
@@ -42,23 +42,26 @@
     <dimen name="eca_overlap">-10dip</dimen>
 
     <!-- Slice header -->
-    <dimen name="widget_title_font_size">22dp</dimen>
-    <dimen name="header_subtitle_padding">4dp</dimen>
-    <dimen name="header_icon_size">20dp</dimen>
+    <dimen name="widget_title_font_size">24dp</dimen>
+    <dimen name="header_subtitle_padding">12dp</dimen>
+    <dimen name="header_icon_size">16dp</dimen>
     <!-- Slice subtitle -->
-    <dimen name="widget_label_font_size">16dp</dimen>
+    <dimen name="widget_label_font_size">18dp</dimen>
     <!-- Clock without header -->
-    <dimen name="widget_big_font_size">64dp</dimen>
+    <dimen name="widget_big_font_size">54dp</dimen>
     <dimen name="bottom_text_spacing_digital">0dp</dimen>
+    <dimen name="title_clock_padding">4dp</dimen>
     <!-- Clock with header -->
-    <dimen name="widget_small_font_size">22dp</dimen>
-    <dimen name="widget_vertical_padding">32dp</dimen>
+    <dimen name="widget_small_font_size">@dimen/widget_title_font_size</dimen>
+    <dimen name="widget_vertical_padding">24dp</dimen>
+    <dimen name="widget_vertical_padding_with_header">32dp</dimen>
     <dimen name="widget_vertical_padding_clock">12dp</dimen>
     <!-- Subtitle paddings -->
     <dimen name="widget_horizontal_padding">8dp</dimen>
-    <dimen name="widget_icon_size">16dp</dimen>
+    <dimen name="widget_icon_size">20dp</dimen>
     <dimen name="widget_icon_padding">8dp</dimen>
-    <dimen name="subtitle_clock_padding">15dp</dimen>
+    <dimen name="subtitle_clock_padding">0dp</dimen>
+    <dimen name="header_row_font_size">14dp</dimen>
     <!-- Notification shelf padding when dark -->
     <dimen name="widget_bottom_separator_padding">-6dp</dimen>
 
diff --git a/packages/SystemUI/res-keyguard/values/styles.xml b/packages/SystemUI/res-keyguard/values/styles.xml
index 1c8e141..137c30a 100644
--- a/packages/SystemUI/res-keyguard/values/styles.xml
+++ b/packages/SystemUI/res-keyguard/values/styles.xml
@@ -115,6 +115,7 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:lines">1</item>
         <item name="android:textSize">@dimen/widget_label_font_size</item>
+        <item name="android:letterSpacing">0.02</item>
     </style>
 
     <style name="TextAppearance.Keyguard.BottomArea">
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
index c15c787..d0b2c58 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
@@ -416,7 +416,7 @@
         mClockView.setVisibility(hasHeader ? View.INVISIBLE : View.VISIBLE);
         mClockViewBold.setVisibility(hasHeader ? View.VISIBLE : View.INVISIBLE);
         int paddingBottom = mContext.getResources().getDimensionPixelSize(hasHeader
-                ? R.dimen.widget_vertical_padding_clock : R.dimen.header_subtitle_padding);
+                ? R.dimen.widget_vertical_padding_clock : R.dimen.title_clock_padding);
         mClockView.setPadding(mClockView.getPaddingLeft(), mClockView.getPaddingTop(),
                 mClockView.getPaddingRight(), paddingBottom);
         mClockViewBold.setPadding(mClockViewBold.getPaddingLeft(), mClockViewBold.getPaddingTop(),
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index c1bf4d4..e219e24 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -38,6 +38,7 @@
 import android.text.TextUtils.TruncateAt;
 import android.util.AttributeSet;
 import android.util.Log;
+import android.util.TypedValue;
 import android.view.View;
 import android.view.animation.Animation;
 import android.widget.Button;
@@ -98,6 +99,7 @@
     private LiveData<Slice> mLiveData;
     private int mDisplayId = INVALID_DISPLAY;
     private int mIconSize;
+    private int mIconSizeWithHeader;
     /**
      * Runnable called whenever the view contents change.
      */
@@ -106,6 +108,8 @@
     private boolean mHasHeader;
     private final int mRowWithHeaderPadding;
     private final int mRowPadding;
+    private float mRowTextSize;
+    private float mRowWithHeaderTextSize;
 
     @Inject
     public KeyguardSliceView(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
@@ -141,6 +145,11 @@
         mRow = findViewById(R.id.row);
         mTextColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColor);
         mIconSize = (int) mContext.getResources().getDimension(R.dimen.widget_icon_size);
+        mIconSizeWithHeader = (int) mContext.getResources().getDimension(R.dimen.header_icon_size);
+        mRowTextSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.widget_label_font_size);
+        mRowWithHeaderTextSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.header_row_font_size);
         mTitle.setOnClickListener(this);
     }
 
@@ -244,16 +253,19 @@
             final SliceItem titleItem = rc.getTitleItem();
             button.setText(titleItem == null ? null : titleItem.getText());
             button.setContentDescription(rc.getContentDescription());
+            button.setTextSize(TypedValue.COMPLEX_UNIT_PX,
+                    mHasHeader ? mRowWithHeaderTextSize : mRowTextSize);
 
             Drawable iconDrawable = null;
             SliceItem icon = SliceQuery.find(item.getSlice(),
                     android.app.slice.SliceItem.FORMAT_IMAGE);
             if (icon != null) {
+                final int iconSize = mHasHeader ? mIconSizeWithHeader : mIconSize;
                 iconDrawable = icon.getIcon().loadDrawable(mContext);
                 if (iconDrawable != null) {
                     final int width = (int) (iconDrawable.getIntrinsicWidth()
-                            / (float) iconDrawable.getIntrinsicHeight() * mIconSize);
-                    iconDrawable.setBounds(0, 0, Math.max(width, 1), mIconSize);
+                            / (float) iconDrawable.getIntrinsicHeight() * iconSize);
+                    iconDrawable.setBounds(0, 0, Math.max(width, 1), iconSize);
                 }
             }
             button.setCompoundDrawables(iconDrawable, null, null, null);
@@ -361,6 +373,11 @@
     @Override
     public void onDensityOrFontScaleChanged() {
         mIconSize = mContext.getResources().getDimensionPixelSize(R.dimen.widget_icon_size);
+        mIconSizeWithHeader = (int) mContext.getResources().getDimension(R.dimen.header_icon_size);
+        mRowTextSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.widget_label_font_size);
+        mRowWithHeaderTextSize = mContext.getResources().getDimensionPixelSize(
+                R.dimen.header_row_font_size);
     }
 
     public void refresh() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
index b02d514..1dc3474 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusView.java
@@ -33,6 +33,7 @@
 import android.util.TypedValue;
 import android.view.View;
 import android.widget.GridLayout;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import androidx.core.graphics.ColorUtils;
@@ -55,6 +56,7 @@
     private final LockPatternUtils mLockPatternUtils;
     private final IActivityManager mIActivityManager;
 
+    private LinearLayout mStatusViewContainer;
     private TextView mLogoutView;
     private KeyguardClockSwitch mClockView;
     private TextView mOwnerInfo;
@@ -66,6 +68,14 @@
     private float mDarkAmount = 0;
     private int mTextColor;
 
+    /**
+     * Bottom margin that defines the margin between bottom of smart space and top of notification
+     * icons on AOD.
+     */
+    private int mBottomMargin;
+    private int mBottomMarginWithHeader;
+    private boolean mShowingHeader;
+
     private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
 
         @Override
@@ -161,6 +171,7 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
+        mStatusViewContainer = findViewById(R.id.status_view_container);
         mLogoutView = findViewById(R.id.logout);
         if (mLogoutView != null) {
             mLogoutView.setOnClickListener(this::onLogoutClicked);
@@ -190,7 +201,19 @@
      * Moves clock, adjusting margins when slice content changes.
      */
     private void onSliceContentChanged() {
-        mClockView.setKeyguardShowingHeader(mKeyguardSlice.hasHeader());
+        final boolean hasHeader = mKeyguardSlice.hasHeader();
+        mClockView.setKeyguardShowingHeader(hasHeader);
+        if (mShowingHeader == hasHeader) {
+            return;
+        }
+        mShowingHeader = hasHeader;
+        // Update bottom margin since header has appeared/disappeared.
+        if (mStatusViewContainer != null) {
+            MarginLayoutParams params = (MarginLayoutParams) mStatusViewContainer.getLayoutParams();
+            params.setMargins(params.leftMargin, params.topMargin, params.rightMargin,
+                    hasHeader ? mBottomMarginWithHeader : mBottomMargin);
+            mStatusViewContainer.setLayoutParams(params);
+        }
     }
 
     @Override
@@ -209,6 +232,7 @@
             mOwnerInfo.setTextSize(TypedValue.COMPLEX_UNIT_PX,
                     getResources().getDimensionPixelSize(R.dimen.widget_label_font_size));
         }
+        loadBottomMargin();
     }
 
     public void dozeTimeTick() {
@@ -318,6 +342,12 @@
         }
     }
 
+    private void loadBottomMargin() {
+        mBottomMargin = getResources().getDimensionPixelSize(R.dimen.widget_vertical_padding);
+        mBottomMarginWithHeader = getResources().getDimensionPixelSize(
+                R.dimen.widget_vertical_padding_with_header);
+    }
+
     // DateFormat.getBestDateTimePattern is extremely expensive, and refresh is called often.
     // This is an optimization to ensure we only recompute the patterns when the inputs change.
     private static final class Patterns {