Skip to content

Commit 90ef575

Browse files
committed
Get formatting/scaling working for binary clock. Clean up things.
1 parent f36625d commit 90ef575

File tree

5 files changed

+44
-353
lines changed

5 files changed

+44
-353
lines changed

app/src/main/java/com/jkuester/unlauncher/view/BinaryClockView.kt

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,17 @@ class BinaryClockView(context: Context) : LinearLayout(context) {
3333

3434
private var offPaint = getColorPaint(context, R.attr.colorAccent)
3535
private var onPaint = getColorPaint(context, R.attr.colorAccent)
36+
37+
private var centerPoint = Pair(0F, 0F)
3638
private var bitSize = 20F
37-
private var border = 2F
3839
private var distance = 10F
39-
private val bounds = RectF(0F, 0F, 0F, 0F)
40+
41+
private val hourBounds = RectF(0F, 0F, 0F, 0F)
42+
private val minuteBounds = RectF(0F, 0F, 0F, 0F)
4043
private var is24Hour: Boolean = false
4144

4245
private val binding: ClockBinaryBinding
4346

44-
// HACK:
45-
// it does not seem to be possible to consider bottom margins in
46-
// layouting (or I don't know how layout_marginBottom is not
47-
// considered (the boxes touch without it, but the margin is drawn
48-
// in debug view)), so we add 20 pixels here.
49-
private var extraPaddingBottom = 20
50-
5147
init {
5248
inflate(context, R.layout.clock_binary, this)
5349
orientation = VERTICAL
@@ -63,43 +59,22 @@ class BinaryClockView(context: Context) : LinearLayout(context) {
6359
setOnClickListener(launchShowAlarms(fragment))
6460
binding.binaryDate.setOnClickListener(launchShowCalendar(fragment))
6561
updateChildViews()
66-
// context.theme.obtainStyledAttributes(
67-
// attrs,
68-
// R.styleable.BinaryClockView,
69-
// 0,
70-
// 0
71-
// ).apply {
72-
// try {
73-
// bitSize = getFloat(R.styleable.BinaryClockView_bitSize, 40F)
74-
// border = getFloat(R.styleable.BinaryClockView_border, 4F)
75-
// distance = getFloat(R.styleable.BinaryClockView_distance, 0F)
76-
// } finally {
77-
// recycle()
78-
// }
79-
// }
8062
}
8163

8264
override fun onDraw(canvas: Canvas) {
8365
super.onDraw(canvas)
8466
val calendar = Calendar.getInstance()
8567

86-
val middle = if (distance > 0) distance * 3 + bitSize * 2 else height.toFloat() / 2
8768
var hour = calendar[if (is24Hour) Calendar.HOUR_OF_DAY else Calendar.HOUR]
8869
if (hour == 0 && calendar[Calendar.AM] != 0) hour = 12
89-
bounds.set(0f, 0f, width.toFloat(), middle)
90-
renderBits(canvas, bounds, if (is24Hour) 5 else 4, hour)
70+
renderBits(canvas, hourBounds, if (is24Hour) 5 else 4, hour)
9171

92-
bounds.set(0f, middle, width.toFloat(), middle * 2)
9372
val minute = calendar[Calendar.MINUTE]
94-
renderBits(canvas, bounds, 6, minute)
73+
renderBits(canvas, minuteBounds, 6, minute)
9574
}
9675

9776
private fun renderBits(canvas: Canvas, bounds: RectF, nBits: Int, value: Int) {
98-
val cw = if (distance > 0) {
99-
distance + 2 * bitSize
100-
} else {
101-
bounds.width() / 18 // divide width by maximal number of bits * 3
102-
}
77+
val cw = distance + 2 * bitSize
10378
val ch = bounds.height()
10479
val cpx = cw / 2 - bitSize
10580
val cpy = ch / 2 - bitSize
@@ -126,7 +101,7 @@ class BinaryClockView(context: Context) : LinearLayout(context) {
126101
// Whatever the width is, ask for a height that lets the pie get as big as
127102
// it can.
128103
val minh: Int = paddingBottom + paddingTop +
129-
4 * bitSize.toInt() + 5 * distance.toInt() + extraPaddingBottom
104+
4 * bitSize.toInt() + 5 * distance.toInt()
130105
val h: Int = resolveSizeAndState(minh, heightMeasureSpec, 0)
131106

132107
setMeasuredDimension(w, h)
@@ -137,6 +112,21 @@ class BinaryClockView(context: Context) : LinearLayout(context) {
137112
updateChildViews()
138113
}
139114

115+
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
116+
super.onSizeChanged(w, h, oldw, oldh)
117+
centerPoint = Pair((w / 2).toFloat(), (h / 2).toFloat())
118+
distance = (w / 50).toFloat()
119+
bitSize = distance * 2
120+
121+
val bitWidth = distance + 2 * bitSize
122+
val bitHeight = distance * 3 + bitSize * 2
123+
val startX = -centerPoint.first + bitWidth * 3
124+
val startY = centerPoint.second - bitHeight * 2
125+
126+
hourBounds.set(startX, startY, startX + width.toFloat(), startY + bitHeight)
127+
minuteBounds.set(startX, startY + bitHeight, startX + width.toFloat(), startY + bitHeight * 2)
128+
}
129+
140130
private fun updateChildViews() {
141131
binding.binaryDate.text = getCurrentDateString(resources)
142132
}

app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

Lines changed: 15 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,6 @@ class HomeFragment : BaseFragment() {
8282
HomeFragmentDefaultBinding.inflate(layoutInflater, container, false).root
8383
}
8484

85-
private fun listenForChangesToClockType(binding: HomeFragmentContentBinding): Observer<CorePreferences> {
86-
var currentClockType: ClockType? = null
87-
return Observer { corePrefs ->
88-
if (corePrefs.clockType == currentClockType) {
89-
return@Observer
90-
}
91-
92-
currentClockType = corePrefs.clockType
93-
binding.clockWrapper.removeAllViews()
94-
val clock = createNewClock(requireContext(), corePrefs.clockType)
95-
clockReceiver.clock = clock
96-
binding.clockWrapper.addView(clock)
97-
}
98-
}
99-
10085
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
10186
super.onViewCreated(view, savedInstanceState)
10287
val adapter1 = HomeAdapter(this, corePreferencesRepo)
@@ -126,41 +111,6 @@ class HomeFragment : BaseFragment() {
126111
corePreferencesRepo.observe { corePreferences ->
127112
homeFragmentContent.appDrawerEditText
128113
.visibility = if (corePreferences.showSearchBar) View.VISIBLE else View.GONE
129-
130-
// val clockType = corePreferences.clockType
131-
// when (clockType) {
132-
// ClockType.analog_0,
133-
// ClockType.analog_1,
134-
// ClockType.analog_2,
135-
// ClockType.analog_3,
136-
// ClockType.analog_4,
137-
// ClockType.analog_6,
138-
// ClockType.analog_12,
139-
// ClockType.analog_60 -> {
140-
// digitalClockView.update()
141-
// }
142-
// else -> {
143-
// }
144-
// }
145-
146-
// homeFragmentContent.homeFragmentTime
147-
// .visibility = if (clockType == ClockType.digital) View.VISIBLE else View.GONE
148-
// homeFragmentContent.homeFragmentAnalogTime
149-
// .visibility = when (clockType) {
150-
// ClockType.analog_0,
151-
// ClockType.analog_1,
152-
// ClockType.analog_2,
153-
// ClockType.analog_3,
154-
// ClockType.analog_4,
155-
// ClockType.analog_6,
156-
// ClockType.analog_12,
157-
// ClockType.analog_60 -> View.VISIBLE
158-
// else -> View.GONE
159-
// }
160-
// homeFragmentContent.homeFragmentBinTime
161-
// .visibility = if (clockType == ClockType.binary) View.VISIBLE else View.GONE
162-
// homeFragmentContent.homeFragmentDate
163-
// .visibility = if (clockType != ClockType.none) View.VISIBLE else View.GONE
164114
}
165115
}
166116

@@ -203,31 +153,7 @@ class HomeFragment : BaseFragment() {
203153
}
204154

205155
private fun setEventListeners() {
206-
// val launchShowAlarms = OnClickListener {
207-
// try {
208-
// val intent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
209-
// intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
210-
// launchActivity(it, intent)
211-
// } catch (e: ActivityNotFoundException) {
212-
// e.printStackTrace()
213-
// // Do nothing, we've failed :(
214-
// }
215-
// }
216156
val homeFragmentContent = HomeFragmentContentBinding.bind(requireView())
217-
// homeFragmentContent.homeFragmentTime.setOnClickListener(launchShowAlarms)
218-
// homeFragmentContent.homeFragmentAnalogTime.setOnClickListener(launchShowAlarms)
219-
// homeFragmentContent.homeFragmentBinTime.setOnClickListener(launchShowAlarms)
220-
//
221-
// homeFragmentContent.homeFragmentDate.setOnClickListener {
222-
// try {
223-
// val builder = CalendarContract.CONTENT_URI.buildUpon().appendPath("time")
224-
// val intent = Intent(Intent.ACTION_VIEW, builder.build())
225-
// intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
226-
// launchActivity(it, intent)
227-
// } catch (e: ActivityNotFoundException) {
228-
// // Do nothing, we've failed :(
229-
// }
230-
// }
231157

232158
quickButtonPreferencesRepo.observe { prefs ->
233159
val leftButtonIcon = getIconResourceId(prefs.leftButton.iconId)
@@ -339,43 +265,6 @@ class HomeFragment : BaseFragment() {
339265
})
340266
}
341267

342-
// fun updateClock() {
343-
// // updateDate()
344-
// // val homeFragmentContent = HomeFragmentContentBinding.bind(requireView())
345-
// // val corePrefs = corePreferencesRepo.get()
346-
// // when (corePrefs.clockType) {
347-
// // ClockType.digital -> updateClockDigital(corePrefs)
348-
// // ClockType.analog_0,
349-
// // ClockType.analog_1,
350-
// // ClockType.analog_2,
351-
// // ClockType.analog_3,
352-
// // ClockType.analog_4,
353-
// // ClockType.analog_6,
354-
// // ClockType.analog_12,
355-
// // ClockType.analog_60 -> {
356-
// // homeFragmentContent.homeFragmentAnalogTime.updateClock(corePrefs)
357-
// // }
358-
// // ClockType.binary -> homeFragmentContent.homeFragmentBinTime.updateClock(corePrefs)
359-
// // else -> {}
360-
// // }
361-
// }
362-
363-
// private fun updateClockDigital(corePrefs: CorePreferences) {
364-
// val fWatchTime = when (corePrefs.timeFormat) {
365-
// TimeFormat.twenty_four_hour -> SimpleDateFormat("H:mm", Locale.getDefault())
366-
// TimeFormat.twelve_hour -> SimpleDateFormat("h:mm aa", Locale.getDefault())
367-
// else -> DateFormat.getTimeFormat(context)
368-
// }
369-
// val homeFragmentContent = HomeFragmentContentBinding.bind(requireView())
370-
// homeFragmentContent.homeFragmentTime.text = fWatchTime.format(Date())
371-
// }
372-
//
373-
// private fun updateDate() {
374-
// val fWatchDate = SimpleDateFormat(getString(R.string.main_date_format), Locale.getDefault())
375-
// val homeFragmentContent = HomeFragmentContentBinding.bind(requireView())
376-
// homeFragmentContent.homeFragmentDate.text = fWatchDate.format(Date())
377-
// }
378-
379268
fun onLaunch(app: UnlauncherApp, view: View) {
380269
launchApp(app.packageName, app.className, app.userSerial)
381270
}
@@ -407,6 +296,21 @@ class HomeFragment : BaseFragment() {
407296
}
408297
}
409298

299+
private fun listenForChangesToClockType(binding: HomeFragmentContentBinding): Observer<CorePreferences> {
300+
var currentClockType: ClockType? = null
301+
return Observer { corePrefs ->
302+
if (corePrefs.clockType == currentClockType) {
303+
return@Observer
304+
}
305+
306+
currentClockType = corePrefs.clockType
307+
binding.clockWrapper.removeAllViews()
308+
val clock = createNewClock(requireContext(), corePrefs.clockType)
309+
clockReceiver.clock = clock
310+
binding.clockWrapper.addView(clock)
311+
}
312+
}
313+
410314
private fun resetAppDrawerEditText() {
411315
val homeFragmentContent = HomeFragmentContentBinding.bind(requireView())
412316
homeFragmentContent.appDrawerEditText.clearComposingText()

app/src/main/res/layout/home_fragment_content.xml

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
<merge xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
5-
xmlns:custom="http://schemas.android.com/apk/res-auto"
65
android:layout_marginStart="@dimen/margin_sides_small"
76
android:layout_marginEnd="@dimen/margin_sides_small"
87
tools:showIn="@layout/home_fragment_default">
@@ -50,40 +49,6 @@
5049
android:layout_width="0dp"
5150
android:layout_height="0dp" />
5251

53-
54-
<!-- <com.jkuester.unlauncher.view.BinaryClockView-->
55-
<!-- android:id="@+id/home_fragment_bin_time"-->
56-
<!-- android:layout_width="match_parent"-->
57-
<!-- android:layout_height="wrap_content"-->
58-
<!-- custom:bitSize="20"-->
59-
<!-- custom:border="2"-->
60-
<!-- custom:distance="10" />-->
61-
62-
<!-- <com.jkuester.unlauncher.view.AnalogClockView-->
63-
<!-- android:id="@+id/home_fragment_analog_time"-->
64-
<!-- android:layout_width="match_parent"-->
65-
<!-- android:layout_height="wrap_content"-->
66-
<!-- custom:radius="@dimen/_60sdp"-->
67-
<!-- custom:rim="0" />-->
68-
69-
<!-- <TextView-->
70-
<!-- android:id="@+id/home_fragment_time"-->
71-
<!-- android:layout_width="wrap_content"-->
72-
<!-- android:layout_height="wrap_content"-->
73-
<!-- android:layout_marginTop="@dimen/_64sdp"-->
74-
<!-- android:text="@string/main_placeholder_clock"-->
75-
<!-- android:textAppearance="@style/TextAppearance.AppCompat"-->
76-
<!-- android:textSize="@dimen/font_size_home_clock" />-->
77-
78-
<!-- <TextView-->
79-
<!-- android:id="@+id/home_fragment_date"-->
80-
<!-- android:layout_width="wrap_content"-->
81-
<!-- android:layout_height="wrap_content"-->
82-
<!-- android:padding="@dimen/_4sdp"-->
83-
<!-- android:text="@string/main_placeholder_date"-->
84-
<!-- android:textAppearance="@style/TextAppearance.AppCompat"-->
85-
<!-- android:textSize="@dimen/font_size_home_date" />-->
86-
8752
<androidx.recyclerview.widget.RecyclerView
8853
android:id="@+id/home_fragment_list"
8954
android:layout_width="0dp"

0 commit comments

Comments
 (0)