This commit is contained in:
lunaticbum 2024-08-12 18:11:58 +09:00
parent 87629f0423
commit 85e3ac1414
2 changed files with 38 additions and 31 deletions

View File

@ -57,6 +57,7 @@ import rasel.lunar.launcher.helpers.Constants.Companion.KEY_SCROLLBAR_HEIGHT
import rasel.lunar.launcher.helpers.Constants.Companion.KEY_STATUS_BAR
import rasel.lunar.launcher.helpers.Constants.Companion.PREFS_APP_NAMES
import rasel.lunar.launcher.helpers.Constants.Companion.PREFS_SETTINGS
import rasel.lunar.launcher.utils.BLog
import java.text.Normalizer
import java.util.*
import java.util.regex.Pattern
@ -74,6 +75,7 @@ internal class AppDrawer : Fragment() {
private var appsAdapter: AppsAdapter? = null
private var packageInfoList: MutableList<ResolveInfo> = mutableListOf()
private var packageList = mutableListOf<Packages>()
private var packageListClone = mutableListOf<Packages>()
private val numberPattern = Pattern.compile("[0-9]")
private val alphabetPattern = Pattern.compile("[A-Z]")
@JvmStatic var settingsPrefs: SharedPreferences? = null
@ -86,28 +88,28 @@ internal class AppDrawer : Fragment() {
}
fun listenScroll(letter: String) {
packageList.clear()
for (resolver in packageInfoList) {
when {
letter == "#" -> {
if (numberPattern.matcher(appName(resolver).first().uppercase()).matches()) {
packageList.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
}
}
alphabetPattern.matcher(letter).matches() -> {
if (appName(resolver).first().uppercase() == letter) {
packageList.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
}
}
letter == "" -> {
if (!numberPattern.matcher(appName(resolver).first().uppercase()).matches() &&
!alphabetPattern.matcher(appName(resolver).first().uppercase()).matches()) {
packageList.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
}
}
}
}
appsAdapter?.updateData(packageList.sortedBy { it.appName.lowercase() })
// packageListClone.clear()
// for (resolver in packageInfoList) {
// when {
// letter == "#" -> {
// if (numberPattern.matcher(appName(resolver).first().uppercase()).matches()) {
// packageListClone.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
// }
// }
// alphabetPattern.matcher(letter).matches() -> {
// if (appName(resolver).first().uppercase() == letter) {
// packageListClone.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
// }
// }
// letter == "⠶" -> {
// if (!numberPattern.matcher(appName(resolver).first().uppercase()).matches() &&
// !alphabetPattern.matcher(appName(resolver).first().uppercase()).matches()) {
// packageListClone.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
// }
// }
// }
// }
// appsAdapter?.updateData(packageListClone.sortedBy { it.appName.lowercase() })
}
}
@ -138,7 +140,7 @@ internal class AppDrawer : Fragment() {
binding.reset.setOnClickListener { onResume() }
binding.moveDown.setOnClickListener {
binding.appsList.smoothScrollToPosition(packageList.size - 1)
binding.appsList.smoothScrollToPosition(packageListClone.size - 1)
}
binding.moveUp.setOnClickListener {
@ -208,13 +210,15 @@ internal class AppDrawer : Fragment() {
/* add package and app names to the list */
packageList.clear()
packageListClone.clear()
for (resolver in packageInfoList) {
packageList.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
packageListClone.add(Packages(resolver.activityInfo.packageName, appName(resolver)))
}
when {
packageList.size < 1 -> return
else -> appsAdapter?.updateData(packageList.sortedBy { it.appName.lowercase() })
packageListClone.size < 1 -> return
else -> appsAdapter?.updateData(packageListClone.sortedBy { it.appName.lowercase() })
}
}
@ -245,32 +249,34 @@ internal class AppDrawer : Fragment() {
private fun filterAppsList(searchString: String) {
/* check each app name and add if it matches the search string */
packageList.clear()
packageListClone.clear()
for (resolver in packageInfoList) {
appName(resolver).let {
BLog.LOGE("searchString >>> ${searchString} , normalize(it) ${normalize(it)} ${normalize(it).contains(searchString)}")
if (normalize(it).contains(searchString)) {
packageList.add(Packages(resolver.activityInfo.packageName, it))
packageListClone.add(Packages(resolver.activityInfo.packageName, it))
}
}
}
if (searchString.length > 2 && packageList.size == 1 && settingsPrefs!!.getBoolean(KEY_QUICK_LAUNCH, true)) {
if (searchString.length > 2 && packageListClone.size == 1 && settingsPrefs!!.getBoolean(KEY_QUICK_LAUNCH, true)) {
var dialog = AlertDialog.Builder(requireContext())
dialog.setTitle("앱 실행 확인")
dialog.setMessage("${searchString} 검색 결과 '${packageList[0].appName}' 준비됨")
dialog.setMessage("${searchString} 검색 결과 '${packageListClone[0].appName}' 준비됨")
dialog.setCancelable(false)
dialog.setOnCancelListener {
binding.searchInput.setText("")
it.dismiss()
}
dialog.setPositiveButton("실행") { s,d ->
startActivity(packageManager?.getLaunchIntentForPackage(packageList[0].packageName))
startActivity(packageManager?.getLaunchIntentForPackage(packageListClone[0].packageName))
s.dismiss()
binding.searchInput.setText("")
}
dialog.show()
}
else appsAdapter?.updateData(packageList.sortedBy { it.appName.lowercase() })
else appsAdapter?.updateData(packageListClone.sortedBy { it.appName.lowercase() })
}
private fun normalize(str: String): String {

View File

@ -125,6 +125,7 @@ internal class AppsAdapter(
appsCount.text = it.toString()
appsSize = it
}
this.notifyDataSetChanged()
}
/* update text gravity (alignment) */