A fork of Simple Time Tracker with WearOS support. (Now integrated upstream)
0

Configure Feed

Select the types of activity you want to include in your feed.

add border to ColorSelectionView

razeeman (Dec 18, 2021, 7:19 PM +0300) bf25ebad eb68f0e7

+46 -23
+1 -1
app/src/main/res/navigation/nav_graph.xml
··· 94 94 tools:layout="@layout/emoji_selection_dialog_fragment" /> 95 95 <dialog 96 96 android:id="@+id/colorSelectionDialogFragment" 97 - android:name="com.example.util.simpletimetracker.feature_dialogs.colorSelection.ColorSelectionDialogFragment" 97 + android:name="com.example.util.simpletimetracker.feature_dialogs.colorSelection.view.ColorSelectionDialogFragment" 98 98 android:label="ColorSelectionDialogFragment" 99 99 tools:layout="@layout/color_selection_dialog_fragment" /> 100 100 <dialog
+3 -1
features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/ColorSelectionDialogFragment.kt features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/view/ColorSelectionDialogFragment.kt
··· 1 - package com.example.util.simpletimetracker.feature_dialogs.colorSelection 1 + package com.example.util.simpletimetracker.feature_dialogs.colorSelection.view 2 2 3 3 import android.content.Context 4 4 import android.text.TextWatcher ··· 13 13 import com.example.util.simpletimetracker.core.extension.getAllFragments 14 14 import com.example.util.simpletimetracker.core.extension.setFullScreen 15 15 import com.example.util.simpletimetracker.core.extension.setSkipCollapsed 16 + import com.example.util.simpletimetracker.feature_dialogs.colorSelection.customView.ColorSelectionView 17 + import com.example.util.simpletimetracker.feature_dialogs.colorSelection.viewModel.ColorSelectionViewModel 16 18 import com.example.util.simpletimetracker.feature_dialogs.colorSelection.model.HSVUpdate 17 19 import com.example.util.simpletimetracker.feature_dialogs.colorSelection.model.RGBUpdate 18 20 import com.example.util.simpletimetracker.feature_views.extension.setOnClick
+31 -13
features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/ColorSelectionView.kt features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/customView/ColorSelectionView.kt
··· 1 - package com.example.util.simpletimetracker.feature_dialogs.colorSelection 1 + package com.example.util.simpletimetracker.feature_dialogs.colorSelection.customView 2 2 3 3 import android.annotation.SuppressLint 4 4 import android.content.Context ··· 40 40 // End of attrs 41 41 42 42 private var listener: ColorSelectedListener? = null 43 + 44 + private var pixelTopBound: Float = 0f 45 + private var pixelBottomBound: Float = 0f 46 + private var pixelRightBound: Float = 0f 47 + private var pixelLeftBound: Float = 0f 48 + private var pixelWidthBound: Float = 0f 49 + private var pixelHeightBound: Float = 0f 50 + 43 51 private val bounds: RectF = RectF(0f, 0f, 0f, 0f) 44 52 private val mainPaint: Paint = Paint() 45 53 private val gradientPaint1: Paint = Paint() ··· 68 76 val h = resolveSize(0, heightMeasureSpec) 69 77 70 78 setMeasuredDimension(w, h) 79 + calculateDimensions(w.toFloat(), h.toFloat()) 71 80 initGradientPaint(w.toFloat(), h.toFloat()) 72 81 } 73 82 74 83 override fun onDraw(canvas: Canvas?) { 75 84 if (canvas == null) return 76 85 77 - val w = width.toFloat() 78 - val h = height.toFloat() 79 - 80 86 // Draw base color. 81 87 mainPaint.color = floatArrayOf(colorHue, 1f, 1f) 82 88 .let(Color::HSVToColor) 83 - canvas.drawRect(0f, 0f, w, h, mainPaint) 89 + canvas.drawRect(pixelLeftBound, pixelTopBound, pixelRightBound, pixelBottomBound, mainPaint) 84 90 85 91 // Draw gradients. 86 - canvas.drawRect(0f, 0f, w, h, gradientPaint1) 87 - canvas.drawRect(0f, 0f, w, h, gradientPaint2) 92 + canvas.drawRect(pixelLeftBound, pixelTopBound, pixelRightBound, pixelBottomBound, gradientPaint1) 93 + canvas.drawRect(pixelLeftBound, pixelTopBound, pixelRightBound, pixelBottomBound, gradientPaint2) 88 94 89 95 // Draw selected color indicator. 90 - val selectedColorCenterX = w * colorSaturation 91 - val selectedColorCenterY = h * (1 - colorValue) 96 + val selectedColorCenterX = pixelLeftBound + pixelWidthBound * colorSaturation 97 + val selectedColorCenterY = pixelTopBound + pixelHeightBound * (1 - colorValue) 92 98 bounds.set( 93 99 selectedColorCenterX - selectedColorRadius, selectedColorCenterY - selectedColorRadius, 94 100 selectedColorCenterX + selectedColorRadius, selectedColorCenterY + selectedColorRadius ··· 176 182 ).let(gradientPaint2::setShader) 177 183 } 178 184 185 + private fun calculateDimensions(w: Float, h: Float) { 186 + val selectedColorFullRadius = selectedColorRadius + selectedColorStrokeWidth / 2 187 + 188 + pixelLeftBound = 0f + selectedColorFullRadius 189 + pixelRightBound = w - selectedColorFullRadius 190 + pixelTopBound = 0f + selectedColorFullRadius 191 + pixelBottomBound = h - selectedColorFullRadius 192 + 193 + pixelWidthBound = pixelRightBound - pixelLeftBound 194 + pixelHeightBound = pixelBottomBound - pixelTopBound 195 + } 196 + 179 197 private fun onTouch(event: MotionEvent) { 180 - val x = event.x 181 - val y = event.y 198 + val x = event.x.coerceIn(pixelLeftBound, pixelRightBound) - pixelLeftBound 199 + val y = event.y.coerceIn(pixelTopBound, pixelBottomBound) - pixelTopBound 182 200 183 - val newSaturation = (x / width.toFloat()).coerceIn(0f, 1f) 184 - val newValue = (1 - y / height.toFloat()).coerceIn(0f, 1f) 201 + val newSaturation = (x / pixelWidthBound).coerceIn(0f, 1f) 202 + val newValue = (1 - y / pixelHeightBound).coerceIn(0f, 1f) 185 203 186 204 listener?.onColorSelected( 187 205 saturation = newSaturation,
+1 -1
features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/ColorSelectionViewData.kt features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/viewData/ColorSelectionViewData.kt
··· 1 - package com.example.util.simpletimetracker.feature_dialogs.colorSelection 1 + package com.example.util.simpletimetracker.feature_dialogs.colorSelection.viewData 2 2 3 3 import androidx.annotation.ColorInt 4 4
+2 -1
features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/ColorSelectionViewModel.kt features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/viewModel/ColorSelectionViewModel.kt
··· 1 - package com.example.util.simpletimetracker.feature_dialogs.colorSelection 1 + package com.example.util.simpletimetracker.feature_dialogs.colorSelection.viewModel 2 2 3 3 import android.graphics.Color 4 4 import androidx.annotation.ColorInt ··· 8 8 import com.example.util.simpletimetracker.core.extension.set 9 9 import com.example.util.simpletimetracker.feature_dialogs.colorSelection.model.HSVUpdate 10 10 import com.example.util.simpletimetracker.feature_dialogs.colorSelection.model.RGBUpdate 11 + import com.example.util.simpletimetracker.feature_dialogs.colorSelection.viewData.ColorSelectionViewData 11 12 import javax.inject.Inject 12 13 13 14 class ColorSelectionViewModel @Inject constructor() : ViewModel() {
+7 -5
features/feature_dialogs/src/main/res/layout/color_selection_dialog_fragment.xml
··· 29 29 app:layout_constraintStart_toStartOf="parent" 30 30 app:layout_constraintTop_toBottomOf="@id/ivColorSelectionArrow" /> 31 31 32 - <com.example.util.simpletimetracker.feature_dialogs.colorSelection.ColorSelectionView 32 + <com.example.util.simpletimetracker.feature_dialogs.colorSelection.customView.ColorSelectionView 33 33 android:id="@+id/viewColorSelectionView" 34 34 android:layout_width="match_parent" 35 35 android:layout_height="0dp" 36 - android:layout_marginHorizontal="16dp" 37 - android:layout_marginTop="16dp" 38 - android:layout_marginBottom="16dp" 36 + android:layout_marginHorizontal="5dp" 37 + android:layout_marginTop="5dp" 38 + android:layout_marginBottom="5dp" 39 39 app:colorSelectionSelectedColorRadius="10dp" 40 40 app:colorSelectionSelectedColorStrokeColor="@color/white" 41 41 app:colorSelectionSelectedColorStrokeWidth="2dp" 42 42 app:layout_constraintBottom_toTopOf="@id/containerColorSelectionSelectedColor" 43 43 app:layout_constraintTop_toBottomOf="@id/sliderColorSelectionHue" 44 + app:layout_constraintVertical_weight="2" 44 45 tools:colorSelectionHue="180" 45 46 tools:colorSelectionSaturation="0.4" 46 47 tools:colorSelectionValue="0.3" /> ··· 55 56 app:cardCornerRadius="@dimen/record_type_card_corner_radius" 56 57 app:cardElevation="0dp" 57 58 app:layout_constraintBottom_toTopOf="@id/inputColorSelectionHex" 58 - app:layout_constraintHeight_percent="0.2"> 59 + app:layout_constraintTop_toBottomOf="@id/viewColorSelectionView" 60 + app:layout_constraintVertical_weight="1"> 59 61 60 62 <androidx.cardview.widget.CardView 61 63 android:id="@+id/cardColorSelectionSelectedColor"
+1 -1
features/feature_dialogs/src/main/res/values/styles.xml
··· 3 3 4 4 <style name="ColorSelectionEditText" parent="ChangeItemNameEditText"> 5 5 <item name="android:gravity">center</item> 6 - <item name="android:textSize">14sp</item> 6 + <item name="android:textSize">12sp</item> 7 7 <item name="android:inputType">numberDecimal</item> 8 8 </style> 9 9