Skip to content

Commit f198ef0

Browse files
committed
refactor
1 parent defeec0 commit f198ef0

File tree

5 files changed

+61
-51
lines changed

5 files changed

+61
-51
lines changed

wear/src/main/java/com/example/util/simpletimetracker/complication/WearComplicationService.kt

+5-47
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,8 @@ import android.annotation.SuppressLint
99
import android.app.PendingIntent
1010
import android.content.Intent
1111
import android.graphics.Bitmap
12-
import android.graphics.Canvas
1312
import android.graphics.drawable.Icon
14-
import android.os.Build
1513
import android.util.Log
16-
import android.util.TypedValue
17-
import android.view.View
18-
import android.view.View.MeasureSpec
1914
import androidx.wear.watchface.complications.data.ComplicationData
2015
import androidx.wear.watchface.complications.data.ComplicationText
2116
import androidx.wear.watchface.complications.data.ComplicationType
@@ -30,13 +25,11 @@ import androidx.wear.watchface.complications.datasource.SuspendingComplicationDa
3025
import com.example.util.simpletimetracker.R
3126
import com.example.util.simpletimetracker.data.WearDataRepo
3227
import com.example.util.simpletimetracker.data.WearIconMapper
33-
import com.example.util.simpletimetracker.data.WearMessenger
3428
import com.example.util.simpletimetracker.domain.WearActivityIcon
3529
import com.example.util.simpletimetracker.presentation.MainActivity
3630
import dagger.hilt.android.AndroidEntryPoint
3731
import java.time.Instant
3832
import javax.inject.Inject
39-
import kotlin.math.roundToInt
4033

4134
@AndroidEntryPoint
4235
class WearComplicationService : SuspendingComplicationDataSourceService() {
@@ -47,9 +40,9 @@ class WearComplicationService : SuspendingComplicationDataSourceService() {
4740
@Inject
4841
lateinit var iconMapper: WearIconMapper
4942

50-
private val tag: String = WearMessenger::class.java.name
43+
private val tag: String = WearComplicationService::class.java.name
5144
private val appIcon = R.drawable.app_ic_launcher_monochrome
52-
private val iconSize by lazy { 20.dpToPx() }
45+
private val iconSizeDp = 20
5346
private val defaultText = "×"
5447
private val previewText = "Tracking"
5548

@@ -144,41 +137,14 @@ class WearComplicationService : SuspendingComplicationDataSourceService() {
144137
}
145138

146139
private fun getBitmap(icon: WearActivityIcon): Bitmap {
147-
return IconView(this)
140+
return WearIconView(this)
148141
.apply {
149142
itemIcon = icon
150-
measureExactly(iconSize)
143+
measureExactly(iconSizeDp.dpToPx(this.context))
151144
}
152145
.getBitmapFromView()
153146
}
154147

155-
private fun View.measureExactly(width: Int, height: Int = width) {
156-
val specWidth = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)
157-
val specHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
158-
measure(specWidth, specHeight)
159-
layout(0, 0, measuredWidth, measuredHeight)
160-
}
161-
162-
private fun View.getBitmapFromView(): Bitmap {
163-
fun Int.checkValue(): Int = this.takeUnless { it <= 0 } ?: iconSize
164-
165-
return Bitmap.createBitmap(
166-
measuredWidth.checkValue(),
167-
measuredHeight.checkValue(),
168-
Bitmap.Config.ARGB_8888,
169-
).also {
170-
draw(Canvas(it))
171-
}
172-
}
173-
174-
private fun Int.dpToPx(): Int {
175-
return TypedValue.applyDimension(
176-
TypedValue.COMPLEX_UNIT_DIP,
177-
this.toFloat(),
178-
this@WearComplicationService.resources.displayMetrics,
179-
).roundToInt()
180-
}
181-
182148
@SuppressLint("WearRecents")
183149
private fun getMainStartIntent(): PendingIntent {
184150
val startIntent = Intent(this, MainActivity::class.java).apply {
@@ -189,15 +155,7 @@ class WearComplicationService : SuspendingComplicationDataSourceService() {
189155
this,
190156
0,
191157
startIntent,
192-
getFlags(),
158+
getPendingIntentFlags(),
193159
)
194160
}
195-
196-
private fun getFlags(): Int {
197-
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
198-
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
199-
} else {
200-
PendingIntent.FLAG_UPDATE_CURRENT
201-
}
202-
}
203161
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this
4+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
5+
*/
6+
package com.example.util.simpletimetracker.complication
7+
8+
import android.app.PendingIntent
9+
import android.content.Context
10+
import android.graphics.Bitmap
11+
import android.graphics.Canvas
12+
import android.os.Build
13+
import android.util.TypedValue
14+
import android.view.View
15+
import android.view.View.MeasureSpec
16+
import kotlin.math.roundToInt
17+
18+
fun View.measureExactly(width: Int, height: Int = width) {
19+
val specWidth = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)
20+
val specHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
21+
measure(specWidth, specHeight)
22+
layout(0, 0, measuredWidth, measuredHeight)
23+
}
24+
25+
fun View.getBitmapFromView(): Bitmap {
26+
val defaultSize by lazy { 20.dpToPx(context) }
27+
fun Int.checkValue(): Int = this.takeUnless { it <= 0 } ?: defaultSize
28+
29+
return Bitmap.createBitmap(
30+
measuredWidth.checkValue(),
31+
measuredHeight.checkValue(),
32+
Bitmap.Config.ARGB_8888,
33+
).also {
34+
draw(Canvas(it))
35+
}
36+
}
37+
38+
fun Int.dpToPx(context: Context): Int {
39+
return TypedValue.applyDimension(
40+
TypedValue.COMPLEX_UNIT_DIP,
41+
this.toFloat(),
42+
context.resources.displayMetrics,
43+
).roundToInt()
44+
}
45+
46+
fun getPendingIntentFlags(): Int {
47+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
48+
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
49+
} else {
50+
PendingIntent.FLAG_UPDATE_CURRENT
51+
}
52+
}

wear/src/main/java/com/example/util/simpletimetracker/complication/IconView.kt wear/src/main/java/com/example/util/simpletimetracker/complication/WearIconView.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import android.util.AttributeSet
1010
import android.view.LayoutInflater
1111
import android.widget.FrameLayout
1212
import androidx.core.view.isVisible
13-
import com.example.util.simpletimetracker.databinding.IconViewLayoutBinding
13+
import com.example.util.simpletimetracker.databinding.WearIconViewLayoutBinding
1414
import com.example.util.simpletimetracker.domain.WearActivityIcon
1515

16-
class IconView @JvmOverloads constructor(
16+
class WearIconView @JvmOverloads constructor(
1717
context: Context,
1818
attrs: AttributeSet? = null,
1919
defStyleAttr: Int = 0,
@@ -23,7 +23,7 @@ class IconView @JvmOverloads constructor(
2323
defStyleAttr,
2424
) {
2525

26-
private val binding: IconViewLayoutBinding = IconViewLayoutBinding
26+
private val binding: WearIconViewLayoutBinding = WearIconViewLayoutBinding
2727
.inflate(LayoutInflater.from(context), this)
2828

2929
var itemIcon: WearActivityIcon = WearActivityIcon.Image(0)

wear/src/main/java/com/example/util/simpletimetracker/presentation/layout/ScrollingColumn.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ fun ScrollingColumn(
4141
.selectableGroup(),
4242
flingBehavior = ScalingLazyColumnDefaults.snapFlingBehavior(
4343
state = scrollState,
44-
decay = exponentialDecay(frictionMultiplier = 0.75f)
44+
decay = exponentialDecay(frictionMultiplier = 0.75f),
4545
),
4646
autoCentering = AutoCenteringParams(
4747
itemIndex = 0,

0 commit comments

Comments
 (0)