Skip to content

Commit 37663b7

Browse files
committed
refactor: split Utils.kt by function or receiver type
1 parent 00d2e0c commit 37663b7

File tree

9 files changed

+163
-161
lines changed

9 files changed

+163
-161
lines changed

app/src/main/java/com/osfans/trime/ui/fragments/AboutFragment.kt

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import com.osfans.trime.ui.components.PaddingPreferenceFragment
2020
import com.osfans.trime.ui.main.MainViewModel
2121
import com.osfans.trime.util.Const
2222
import com.osfans.trime.util.formatDateTime
23-
import com.osfans.trime.util.thirdPartySummary
2423
import com.osfans.trime.util.toast
2524
import splitties.systemservices.clipboardManager
2625

@@ -58,10 +57,22 @@ class AboutFragment : PaddingPreferenceFragment() {
5857
true
5958
}
6059
}
61-
get<Preference>("about__librime_version")
62-
?.thirdPartySummary(Rime.getLibrimeVersion())
63-
get<Preference>("about__opencc_version")
64-
?.thirdPartySummary(OpenCCDictManager.getOpenCCVersion())
60+
get<Preference>("about__librime_version")?.apply {
61+
val code = Rime.getLibrimeVersion()
62+
val hash = extractCommitHash(code)
63+
summary = code
64+
intent?.data?.also {
65+
intent!!.data = Uri.withAppendedPath(it, "commit/$hash")
66+
}
67+
}
68+
get<Preference>("about__opencc_version")?.apply {
69+
val code = OpenCCDictManager.getOpenCCVersion()
70+
val hash = extractCommitHash(code)
71+
summary = code
72+
intent?.data?.also {
73+
intent!!.data = Uri.withAppendedPath(it, "commit/$hash")
74+
}
75+
}
6576
get<Preference>("about__open_source_licenses")?.apply {
6677
setOnPreferenceClickListener {
6778
findNavController().navigate(R.id.action_aboutFragment_to_licenseFragment)
@@ -75,4 +86,14 @@ class AboutFragment : PaddingPreferenceFragment() {
7586
super.onResume()
7687
viewModel.setToolbarTitle(getString(R.string.pref_about))
7788
}
89+
90+
companion object {
91+
private val DASH_G_PATTERN = Regex("^(.*-g)([0-9a-f]+)(.*)$")
92+
private val COMMON_PATTERN = Regex("^([^-]*)(-.*)$")
93+
94+
private fun extractCommitHash(versionCode: String): String =
95+
DASH_G_PATTERN.find(versionCode)?.groupValues?.get(1)
96+
?: COMMON_PATTERN.find(versionCode)?.groupValues?.get(1)
97+
?: versionCode
98+
}
7899
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2015 - 2024 Rime community
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package com.osfans.trime.util
7+
8+
import android.content.Context
9+
import com.osfans.trime.TrimeApplication
10+
11+
val appContext: Context get() = TrimeApplication.getInstance().applicationContext
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2015 - 2024 Rime community
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package com.osfans.trime.util
7+
8+
import android.os.Build
9+
import android.os.Bundle
10+
import java.io.Serializable
11+
12+
inline fun <reified T : Serializable> Bundle.serializable(key: String): T? =
13+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
14+
getSerializable(key, T::class.java)
15+
} else {
16+
@Suppress("DEPRECATION")
17+
getSerializable(key) as? T
18+
}
File renamed without changes.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2015 - 2024 Rime community
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package com.osfans.trime.util
7+
8+
import android.content.Context
9+
import android.os.Environment
10+
import com.hjq.permissions.OnPermissionCallback
11+
import com.hjq.permissions.Permission
12+
import com.hjq.permissions.XXPermissions
13+
import com.osfans.trime.R
14+
15+
@Suppress("NOTHING_TO_INLINE")
16+
inline fun Context.isStorageAvailable(): Boolean =
17+
XXPermissions.isGranted(this, Permission.MANAGE_EXTERNAL_STORAGE) &&
18+
Environment.getExternalStorageDirectory().absolutePath.isNotEmpty()
19+
20+
fun Context.requestExternalStoragePermission() {
21+
XXPermissions
22+
.with(this)
23+
.permission(Permission.MANAGE_EXTERNAL_STORAGE)
24+
.request(
25+
object : OnPermissionCallback {
26+
override fun onGranted(
27+
permissions: List<String>,
28+
all: Boolean,
29+
) {
30+
if (all) {
31+
toast(R.string.external_storage_permission_granted)
32+
}
33+
}
34+
35+
override fun onDenied(
36+
permissions: List<String>,
37+
never: Boolean,
38+
) {
39+
if (never) {
40+
toast(R.string.external_storage_permission_denied)
41+
XXPermissions.startPermissionActivity(
42+
this@requestExternalStoragePermission,
43+
permissions,
44+
)
45+
} else {
46+
toast(R.string.external_storage_permission_denied)
47+
}
48+
}
49+
},
50+
)
51+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2015 - 2024 Rime community
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package com.osfans.trime.util
7+
8+
import androidx.core.view.ViewCompat
9+
import androidx.core.view.WindowInsetsCompat
10+
import androidx.recyclerview.widget.RecyclerView
11+
12+
fun RecyclerView.applyNavBarInsetsBottomPadding() {
13+
clipToPadding = false
14+
ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
15+
windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()).also {
16+
setPadding(paddingLeft, paddingTop, paddingRight, it.bottom)
17+
}
18+
windowInsets
19+
}
20+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2015 - 2024 Rime community
3+
* SPDX-License-Identifier: GPL-3.0-or-later
4+
*/
5+
6+
package com.osfans.trime.util
7+
8+
import android.content.Context
9+
import android.util.TypedValue
10+
import android.view.View
11+
import androidx.annotation.AttrRes
12+
import androidx.fragment.app.Fragment
13+
import splitties.experimental.InternalSplittiesApi
14+
import splitties.resources.withResolvedThemeAttribute
15+
16+
@OptIn(InternalSplittiesApi::class)
17+
fun Context.styledFloat(
18+
@AttrRes attrRes: Int,
19+
) = withResolvedThemeAttribute(attrRes) {
20+
when (type) {
21+
TypedValue.TYPE_FLOAT -> float
22+
else -> throw IllegalArgumentException("float attribute expected")
23+
}
24+
}
25+
26+
@Suppress("NOTHING_TO_INLINE")
27+
inline fun View.styledFloat(
28+
@AttrRes attrRes: Int,
29+
) = context.styledFloat(attrRes)
30+
31+
@Suppress("NOTHING_TO_INLINE")
32+
inline fun Fragment.styledFloat(
33+
@AttrRes attrRes: Int,
34+
) = context!!.styledFloat(attrRes)

app/src/main/java/com/osfans/trime/util/Utils.kt

Lines changed: 0 additions & 128 deletions
This file was deleted.

app/src/main/java/com/osfans/trime/util/WeakHashSet.kt

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,8 @@
44

55
package com.osfans.trime.util
66

7+
import java.util.Collections
78
import java.util.WeakHashMap
89

9-
class WeakHashSet<T> : MutableSet<T> {
10-
private val core = WeakHashMap<T, PlaceHolder>()
11-
12-
private object PlaceHolder
13-
14-
val view = object : Set<T> by core.keys {}
15-
override val size get() = core.size
16-
17-
override fun iterator(): MutableIterator<T> = core.keys.iterator()
18-
19-
override fun add(element: T) = core.put(element, PlaceHolder) == null
20-
21-
override fun addAll(elements: Collection<T>) = elements.all(::add)
22-
23-
override fun remove(element: T) = core.remove(element) != null
24-
25-
override fun removeAll(elements: Collection<T>) = elements.all(::remove)
26-
27-
override fun clear() = core.clear()
28-
29-
override fun retainAll(elements: Collection<T>) = removeAll(core.keys.filter { it !in elements })
30-
31-
override operator fun contains(element: T) = core.containsKey(element)
32-
33-
override fun containsAll(elements: Collection<T>) = elements.all(::contains)
34-
35-
override fun isEmpty() = core.isEmpty()
36-
}
10+
@Suppress("FunctionName")
11+
fun <T> WeakHashSet(): MutableSet<T> = Collections.newSetFromMap(WeakHashMap<T, Boolean>())

0 commit comments

Comments
 (0)