diff --git a/packages/SystemUI/res-keyguard/drawable-xxxhdpi/stretch_thumbnail.png b/packages/SystemUI/res-keyguard/drawable-xxxhdpi/analog_thumbnail.png similarity index 100% rename from packages/SystemUI/res-keyguard/drawable-xxxhdpi/stretch_thumbnail.png rename to packages/SystemUI/res-keyguard/drawable-xxxhdpi/analog_thumbnail.png diff --git a/packages/SystemUI/res-keyguard/drawable/analog_frame.xml b/packages/SystemUI/res-keyguard/drawable/analog_frame.xml new file mode 100644 index 0000000000000..a663ac8261276 --- /dev/null +++ b/packages/SystemUI/res-keyguard/drawable/analog_frame.xml @@ -0,0 +1,7 @@ + + + diff --git a/packages/SystemUI/res-keyguard/drawable/analog_hour_hand.xml b/packages/SystemUI/res-keyguard/drawable/analog_hour_hand.xml new file mode 100644 index 0000000000000..c7b6d60b319f8 --- /dev/null +++ b/packages/SystemUI/res-keyguard/drawable/analog_hour_hand.xml @@ -0,0 +1,7 @@ + + + diff --git a/packages/SystemUI/res-keyguard/drawable/analog_minute_hand.xml b/packages/SystemUI/res-keyguard/drawable/analog_minute_hand.xml new file mode 100644 index 0000000000000..458275bec23a6 --- /dev/null +++ b/packages/SystemUI/res-keyguard/drawable/analog_minute_hand.xml @@ -0,0 +1,7 @@ + + + diff --git a/packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml b/packages/SystemUI/res-keyguard/layout/analog_clock.xml similarity index 67% rename from packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml rename to packages/SystemUI/res-keyguard/layout/analog_clock.xml index dd25df8647335..cf6d35ee27af9 100644 --- a/packages/SystemUI/res-keyguard/layout/stretchanalog_clock.xml +++ b/packages/SystemUI/res-keyguard/layout/analog_clock.xml @@ -35,9 +35,27 @@ android:format24Hour="@string/keyguard_widget_24_hours_format" android:elegantTextHeight="false" /> - + android:layout_width="wrap_content" + android:layout_height="wrap_content" + > + + + + diff --git a/packages/SystemUI/res-keyguard/values/strings.xml b/packages/SystemUI/res-keyguard/values/strings.xml index dc985cc8fdbd3..1e98189fa238e 100644 --- a/packages/SystemUI/res-keyguard/values/strings.xml +++ b/packages/SystemUI/res-keyguard/values/strings.xml @@ -413,6 +413,6 @@ number">%d remaining attempts before SIM becomes permanently unusable. Bubble - Stretch + Analog diff --git a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/AnalogClockController.java similarity index 91% rename from packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java rename to packages/SystemUI/src/com/android/keyguard/clock/AnalogClockController.java index 81b6a600f398f..1652121f350db 100644 --- a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClockController.java +++ b/packages/SystemUI/src/com/android/keyguard/clock/AnalogClockController.java @@ -35,7 +35,7 @@ import java.util.TimeZone; /** * Controller for Stretch clock that can appear on lock screen and AOD. */ -public class StretchAnalogClockController implements ClockPlugin { +public class AnalogClockController implements ClockPlugin { /** * Resources used to get title and thumbnail. @@ -60,9 +60,9 @@ public class StretchAnalogClockController implements ClockPlugin { /** * Custom clock shown on AOD screen and behind stack scroller on lock. */ - private View mBigClockView; + private ClockLayout mBigClockView; private TextClock mDigitalClock; - private StretchAnalogClock mAnalogClock; + private ImageClock mAnalogClock; /** * Small clock shown on lock screen above stack scroller. @@ -82,7 +82,7 @@ public class StretchAnalogClockController implements ClockPlugin { * @param inflater Inflater used to inflate custom clock views. * @param colorExtractor Extracts accent color from wallpaper. */ - public StretchAnalogClockController(Resources res, LayoutInflater inflater, + public AnalogClockController(Resources res, LayoutInflater inflater, SysuiColorExtractor colorExtractor) { mResources = res; mLayoutInflater = inflater; @@ -90,7 +90,7 @@ public class StretchAnalogClockController implements ClockPlugin { } private void createViews() { - mBigClockView = mLayoutInflater.inflate(R.layout.stretchanalog_clock, null); + mBigClockView = (ClockLayout) mLayoutInflater.inflate(R.layout.analog_clock, null); mAnalogClock = mBigClockView.findViewById(R.id.analog_clock); mDigitalClock = mBigClockView.findViewById(R.id.digital_clock); @@ -114,17 +114,17 @@ public class StretchAnalogClockController implements ClockPlugin { @Override public String getName() { - return "stretch"; + return "analog"; } @Override public String getTitle() { - return mResources.getString(R.string.clock_title_stretch); + return mResources.getString(R.string.clock_title_analog); } @Override public Bitmap getThumbnail() { - return BitmapFactory.decodeResource(mResources, R.drawable.stretch_thumbnail); + return BitmapFactory.decodeResource(mResources, R.drawable.analog_thumbnail); } @Override @@ -175,13 +175,14 @@ public class StretchAnalogClockController implements ClockPlugin { } final int length = colorPalette.length; mDigitalClock.setTextColor(colorPalette[Math.max(0, length - 5)]); - mAnalogClock.setClockColor(colorPalette[Math.max(0, length - 5)], + mAnalogClock.setClockColors(colorPalette[Math.max(0, length - 5)], colorPalette[Math.max(0, length - 2)]); } @Override public void onTimeTick() { mAnalogClock.onTimeChanged(); + mBigClockView.onTimeChanged(); mDigitalClock.refresh(); mLockClock.refresh(); } diff --git a/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java b/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java index d30f45f212b98..6069a5e4783dc 100644 --- a/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java +++ b/packages/SystemUI/src/com/android/keyguard/clock/BubbleClockController.java @@ -60,7 +60,7 @@ public class BubbleClockController implements ClockPlugin { /** * Custom clock shown on AOD screen and behind stack scroller on lock. */ - private View mView; + private ClockLayout mView; private TextClock mDigitalClock; private ImageClock mAnalogClock; @@ -90,7 +90,7 @@ public class BubbleClockController implements ClockPlugin { } private void createViews() { - mView = mLayoutInflater.inflate(R.layout.bubble_clock, null); + mView = (ClockLayout) mLayoutInflater.inflate(R.layout.bubble_clock, null); mDigitalClock = (TextClock) mView.findViewById(R.id.digital_clock); mAnalogClock = (ImageClock) mView.findViewById(R.id.analog_clock); @@ -186,6 +186,7 @@ public class BubbleClockController implements ClockPlugin { @Override public void onTimeTick() { mAnalogClock.onTimeChanged(); + mView.onTimeChanged(); mDigitalClock.refresh(); mLockClock.refresh(); } diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockLayout.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockLayout.java index 7ffee5d5232db..55088a800ec87 100644 --- a/packages/SystemUI/src/com/android/keyguard/clock/ClockLayout.java +++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockLayout.java @@ -32,6 +32,7 @@ import com.android.keyguard.R; */ public class ClockLayout extends FrameLayout { + private static final int ANALOG_CLOCK_SHIFT_FACTOR = 3; /** * Clock face views. */ @@ -73,7 +74,14 @@ public class ClockLayout extends FrameLayout { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); + positionChildren(); + } + void onTimeChanged() { + positionChildren(); + } + + private void positionChildren() { final float offsetX = getBurnInOffset(mBurnInPreventionOffsetX * 2, true) - mBurnInPreventionOffsetX; final float offsetY = getBurnInOffset(mBurnInPreventionOffsetY * 2, false) @@ -89,9 +97,9 @@ public class ClockLayout extends FrameLayout { // Put the analog clock in the middle of the screen. if (mAnalogClock != null) { mAnalogClock.setX(Math.max(0f, 0.5f * (getWidth() - mAnalogClock.getWidth())) - + offsetX); + + ANALOG_CLOCK_SHIFT_FACTOR * offsetX); mAnalogClock.setY(Math.max(0f, 0.5f * (getHeight() - mAnalogClock.getHeight())) - + offsetY); + + ANALOG_CLOCK_SHIFT_FACTOR * offsetY); } } } diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java index e373ca1d955c6..06488b86c59e9 100644 --- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java +++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java @@ -142,8 +142,7 @@ public final class ClockManager { addBuiltinClock(() -> new DefaultClockController(res, layoutInflater, colorExtractor)); addBuiltinClock(() -> new BubbleClockController(res, layoutInflater, colorExtractor)); - addBuiltinClock(() -> new StretchAnalogClockController(res, layoutInflater, - colorExtractor)); + addBuiltinClock(() -> new AnalogClockController(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/StretchAnalogClock.java b/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClock.java deleted file mode 100644 index 8cdd6325638e2..0000000000000 --- a/packages/SystemUI/src/com/android/keyguard/clock/StretchAnalogClock.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * 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.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.util.AttributeSet; -import android.view.View; - -import java.util.Calendar; -import java.util.TimeZone; - -/** - * Analog clock where the minute hand extends off of the screen. - */ -public class StretchAnalogClock extends View { - - private static final int DEFAULT_COLOR = Color.parseColor("#F5C983"); - private static final float HOUR_STROKE_WIDTH = 60f; - private static final float MINUTE_STROKE_WIDTH = 20f; - private static final float CENTER_GAP_AND_CIRCLE_RADIUS = 80f; - - private final Paint mHourPaint = new Paint(); - private final Paint mMinutePaint = new Paint(); - private Calendar mTime = Calendar.getInstance(TimeZone.getDefault()); - private TimeZone mTimeZone; - - public StretchAnalogClock(Context context) { - this(context, null); - } - - public StretchAnalogClock(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public StretchAnalogClock(Context context, AttributeSet attrs, int defStyleAttr) { - this(context, attrs, defStyleAttr, 0); - } - - public StretchAnalogClock(Context context, AttributeSet attrs, int defStyleAttr, - int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(); - } - - /** - * Call when the time changes to update the clock hands. - */ - public void onTimeChanged() { - mTime.setTimeInMillis(System.currentTimeMillis()); - invalidate(); - } - - /** - * Call when the time zone has changed to update clock hands. - * - * @param timeZone The updated time zone that will be used. - */ - public void onTimeZoneChanged(TimeZone timeZone) { - mTime.setTimeZone(timeZone); - } - - /** - * Set the colors to use on the clock face. - * @param dark Darker color obtained from color palette. - * @param light Lighter color obtained from color palette. - */ - public void setClockColor(int dark, int light) { - mHourPaint.setColor(dark); - invalidate(); - } - - private void init() { - mHourPaint.setColor(DEFAULT_COLOR); - mHourPaint.setStrokeWidth(HOUR_STROKE_WIDTH); - mHourPaint.setAntiAlias(true); - mHourPaint.setStrokeCap(Paint.Cap.ROUND); - - mMinutePaint.setColor(Color.WHITE); - mMinutePaint.setStrokeWidth(MINUTE_STROKE_WIDTH); - mMinutePaint.setAntiAlias(true); - mMinutePaint.setStrokeCap(Paint.Cap.ROUND); - } - - @Override - protected void onDraw(Canvas canvas) { - final float centerX = getWidth() / 2f; - final float centerY = getHeight() / 2f; - - final float minutesRotation = mTime.get(Calendar.MINUTE) * 6f; - final float hoursRotation = mTime.get(Calendar.HOUR) * 30 - + mTime.get(Calendar.MINUTE) * 0.5f; - - // Compute length of clock hands. Hour hand is 60% the length from center to edge - // and minute hand is twice the length to make sure it extends past screen edge. - double sMinuteHandLengthFactor = Math.sin(2d * Math.PI * minutesRotation / 360d); - float sMinuteHandLength = (float) (2d * (centerY + (centerX - centerY) - * sMinuteHandLengthFactor * sMinuteHandLengthFactor)); - double sHourHandLengthFactor = Math.sin(2d * Math.PI * hoursRotation / 360d); - float sHourHandLength = (float) (0.6d * (centerY + (centerX - centerY) - * sHourHandLengthFactor * sHourHandLengthFactor)); - - canvas.save(); - - canvas.rotate(minutesRotation, centerX, centerY); - canvas.drawLine( - centerX, - centerY + CENTER_GAP_AND_CIRCLE_RADIUS, - centerX, - centerY - sMinuteHandLength, - mMinutePaint); - - canvas.rotate(hoursRotation - minutesRotation, centerX, centerY); - canvas.drawLine( - centerX, - centerY + CENTER_GAP_AND_CIRCLE_RADIUS, - centerX, - centerY - sHourHandLength, - mHourPaint); - - canvas.restore(); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - mTime.setTimeZone(mTimeZone != null ? mTimeZone : TimeZone.getDefault()); - onTimeChanged(); - } -} diff --git a/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/clock/AnalogClockControllerTest.java similarity index 91% rename from packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java rename to packages/SystemUI/tests/src/com/android/keyguard/clock/AnalogClockControllerTest.java index 26fa62b77d9a9..4bb2395cc92df 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/clock/StretchAnalogClockControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/clock/AnalogClockControllerTest.java @@ -38,9 +38,9 @@ import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidTestingRunner.class) @RunWithLooper -public final class StretchAnalogClockControllerTest extends SysuiTestCase { +public final class AnalogClockControllerTest extends SysuiTestCase { - private StretchAnalogClockController mClockController; + private AnalogClockController mClockController; @Mock SysuiColorExtractor mMockColorExtractor; @Before @@ -49,7 +49,7 @@ public final class StretchAnalogClockControllerTest extends SysuiTestCase { Resources res = getContext().getResources(); LayoutInflater layoutInflater = LayoutInflater.from(getContext()); - mClockController = new StretchAnalogClockController(res, layoutInflater, + mClockController = new AnalogClockController(res, layoutInflater, mMockColorExtractor); }