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

View File

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