Merge "Revert "Adding padding to display the full clock for Burmese language"" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
eaf5ec33ca
@@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (C) 2023 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Formatting note: terminate all comments with a period, to avoid breaking
|
|
||||||
the documentation output. To suppress comment lines from the documentation
|
|
||||||
output, insert an eat-comment element after the comment lines.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
<!-- Whether to add padding at the bottom of the complication clock -->
|
|
||||||
<bool name="dream_overlay_complication_clock_bottom_padding">true</bool>
|
|
||||||
</resources>
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (C) 2023 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Formatting note: terminate all comments with a period, to avoid breaking
|
|
||||||
the documentation output. To suppress comment lines from the documentation
|
|
||||||
output, insert an eat-comment element after the comment lines.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<resources>
|
|
||||||
<!-- Whether to add padding at the bottom of the complication clock -->
|
|
||||||
<bool name="dream_overlay_complication_clock_bottom_padding">false</bool>
|
|
||||||
</resources>
|
|
||||||
@@ -16,51 +16,34 @@
|
|||||||
package com.android.systemui.shared.shadow
|
package com.android.systemui.shared.shadow
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
|
||||||
import android.content.res.TypedArray
|
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.TextClock
|
import android.widget.TextClock
|
||||||
import com.android.systemui.shared.R
|
import com.android.systemui.shared.R
|
||||||
import com.android.systemui.shared.shadow.DoubleShadowTextHelper.ShadowInfo
|
import com.android.systemui.shared.shadow.DoubleShadowTextHelper.ShadowInfo
|
||||||
import com.android.systemui.shared.shadow.DoubleShadowTextHelper.applyShadows
|
import com.android.systemui.shared.shadow.DoubleShadowTextHelper.applyShadows
|
||||||
import javax.inject.Inject
|
|
||||||
import kotlin.math.floor
|
import kotlin.math.floor
|
||||||
|
|
||||||
/** Extension of [TextClock] which draws two shadows on the text (ambient and key shadows) */
|
/** Extension of [TextClock] which draws two shadows on the text (ambient and key shadows) */
|
||||||
class ResourcesProvider @Inject constructor(private val context: Context) {
|
|
||||||
fun getResources(): Resources {
|
|
||||||
return context.resources
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getBoolean(resourceId: Int): Boolean {
|
|
||||||
return getResources().getBoolean(resourceId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class DoubleShadowTextClock
|
class DoubleShadowTextClock
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
constructor(
|
constructor(
|
||||||
private val resourcesProvider: ResourcesProvider,
|
|
||||||
context: Context,
|
context: Context,
|
||||||
attrs: AttributeSet? = null,
|
attrs: AttributeSet? = null,
|
||||||
defStyleAttr: Int = 0,
|
defStyleAttr: Int = 0,
|
||||||
defStyleRes: Int = 0,
|
defStyleRes: Int = 0
|
||||||
attributesInput: TypedArray? = null
|
|
||||||
) : TextClock(context, attrs, defStyleAttr, defStyleRes) {
|
) : TextClock(context, attrs, defStyleAttr, defStyleRes) {
|
||||||
private val mAmbientShadowInfo: ShadowInfo
|
private val mAmbientShadowInfo: ShadowInfo
|
||||||
private val mKeyShadowInfo: ShadowInfo
|
private val mKeyShadowInfo: ShadowInfo
|
||||||
|
|
||||||
init {
|
init {
|
||||||
var attributes: TypedArray =
|
val attributes =
|
||||||
attributesInput
|
context.obtainStyledAttributes(
|
||||||
?: context.obtainStyledAttributes(
|
|
||||||
attrs,
|
attrs,
|
||||||
R.styleable.DoubleShadowTextClock,
|
R.styleable.DoubleShadowTextClock,
|
||||||
defStyleAttr,
|
defStyleAttr,
|
||||||
defStyleRes
|
defStyleRes
|
||||||
)
|
)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val keyShadowBlur =
|
val keyShadowBlur =
|
||||||
attributes.getDimensionPixelSize(R.styleable.DoubleShadowTextClock_keyShadowBlur, 0)
|
attributes.getDimensionPixelSize(R.styleable.DoubleShadowTextClock_keyShadowBlur, 0)
|
||||||
@@ -115,29 +98,18 @@ constructor(
|
|||||||
0
|
0
|
||||||
)
|
)
|
||||||
if (removeTextDescent) {
|
if (removeTextDescent) {
|
||||||
val addBottomPaddingToClock =
|
setPaddingRelative(
|
||||||
resourcesProvider.getBoolean(
|
0,
|
||||||
R.bool.dream_overlay_complication_clock_bottom_padding
|
0,
|
||||||
|
0,
|
||||||
|
textDescentExtraPadding - floor(paint.fontMetrics.descent.toDouble()).toInt()
|
||||||
)
|
)
|
||||||
val metrics = paint.fontMetrics
|
|
||||||
val padding =
|
|
||||||
if (addBottomPaddingToClock) {
|
|
||||||
textDescentExtraPadding +
|
|
||||||
floor(metrics.descent.toDouble()).toInt() / paddingDividedOffset
|
|
||||||
} else {
|
|
||||||
textDescentExtraPadding - floor(metrics.descent.toDouble()).toInt()
|
|
||||||
}
|
|
||||||
setPaddingRelative(0, 0, 0, padding)
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
attributes.recycle()
|
attributes.recycle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
private val paddingDividedOffset = 2
|
|
||||||
}
|
|
||||||
|
|
||||||
public override fun onDraw(canvas: Canvas) {
|
public override fun onDraw(canvas: Canvas) {
|
||||||
applyShadows(mKeyShadowInfo, mAmbientShadowInfo, this, canvas) { super.onDraw(canvas) }
|
applyShadows(mKeyShadowInfo, mAmbientShadowInfo, this, canvas) { super.onDraw(canvas) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2023 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.systemui.shadow
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.res.TypedArray
|
|
||||||
import android.testing.AndroidTestingRunner
|
|
||||||
import android.util.AttributeSet
|
|
||||||
import androidx.test.filters.SmallTest
|
|
||||||
import com.android.systemui.R
|
|
||||||
import com.android.systemui.SysuiTestCase
|
|
||||||
import com.android.systemui.shared.shadow.DoubleShadowTextClock
|
|
||||||
import com.android.systemui.shared.shadow.ResourcesProvider
|
|
||||||
import com.android.systemui.util.mockito.whenever
|
|
||||||
import junit.framework.Assert.assertTrue
|
|
||||||
import org.junit.Before
|
|
||||||
import org.junit.Rule
|
|
||||||
import org.junit.Test
|
|
||||||
import org.junit.runner.RunWith
|
|
||||||
import org.mockito.Mock
|
|
||||||
import org.mockito.MockitoAnnotations
|
|
||||||
import org.mockito.junit.MockitoJUnit
|
|
||||||
import org.mockito.junit.MockitoRule
|
|
||||||
|
|
||||||
@SmallTest
|
|
||||||
@RunWith(AndroidTestingRunner::class)
|
|
||||||
class DoubleShadowTextClockTest : SysuiTestCase() {
|
|
||||||
@get:Rule val mockito: MockitoRule = MockitoJUnit.rule()
|
|
||||||
|
|
||||||
@Mock lateinit var resourcesProvider: ResourcesProvider
|
|
||||||
|
|
||||||
@Mock lateinit var attributes: TypedArray
|
|
||||||
|
|
||||||
private lateinit var context: Context
|
|
||||||
private var attrs: AttributeSet? = null
|
|
||||||
|
|
||||||
@Before
|
|
||||||
fun setup() {
|
|
||||||
MockitoAnnotations.initMocks(this)
|
|
||||||
context = getContext()
|
|
||||||
whenever(attributes.getBoolean(R.styleable.DoubleShadowTextClock_removeTextDescent, false))
|
|
||||||
.thenReturn(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testAddingPaddingToBottomOfClockWhenConfigIsTrue() {
|
|
||||||
whenever(
|
|
||||||
resourcesProvider.getBoolean(R.bool.dream_overlay_complication_clock_bottom_padding)
|
|
||||||
)
|
|
||||||
.thenReturn(true)
|
|
||||||
|
|
||||||
val doubleShadowTextClock =
|
|
||||||
DoubleShadowTextClock(
|
|
||||||
resourcesProvider = resourcesProvider,
|
|
||||||
context = context,
|
|
||||||
attrs = attrs,
|
|
||||||
attributesInput = attributes
|
|
||||||
)
|
|
||||||
assertTrue(doubleShadowTextClock.paddingBottom > 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testRemovingPaddingToBottomOfClockWhenConfigIsFalse() {
|
|
||||||
whenever(
|
|
||||||
resourcesProvider.getBoolean(R.bool.dream_overlay_complication_clock_bottom_padding)
|
|
||||||
)
|
|
||||||
.thenReturn(false)
|
|
||||||
|
|
||||||
val doubleShadowTextClock =
|
|
||||||
DoubleShadowTextClock(
|
|
||||||
resourcesProvider = resourcesProvider,
|
|
||||||
context = context,
|
|
||||||
attrs = attrs,
|
|
||||||
attributesInput = attributes
|
|
||||||
)
|
|
||||||
assertTrue(doubleShadowTextClock.paddingBottom < 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user