From 8963b971492a70bcb65f81ad4b46d8537530afe7 Mon Sep 17 00:00:00 2001 From: ottoptj Date: Fri, 10 May 2024 12:50:29 +0300 Subject: [PATCH] SearchView changed to EditView. Still needs functionality and more adjustments. --- .../eu/ottop/yamlauncher/AppActionMenu.kt | 3 +- .../eu/ottop/yamlauncher/AppMenuActivity.kt | 54 +++++++++++++++++-- app/src/main/res/layout/activity_app_menu.xml | 20 +++---- app/src/main/res/layout/activity_main.xml | 9 ++-- app/src/main/res/layout/app_item_layout.xml | 22 +++++--- app/src/main/res/values-night/themes.xml | 1 + app/src/main/res/values/themes.xml | 5 ++ 7 files changed, 90 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/eu/ottop/yamlauncher/AppActionMenu.kt b/app/src/main/java/eu/ottop/yamlauncher/AppActionMenu.kt index b553532..d603cbe 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/AppActionMenu.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/AppActionMenu.kt @@ -14,7 +14,6 @@ import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.LinearLayout -import android.widget.SearchView import android.widget.TextView import eu.ottop.yamlauncher.databinding.ActivityAppMenuBinding import kotlinx.coroutines.CoroutineScope @@ -31,7 +30,7 @@ class AppActionMenu { textView: TextView, editLayout: LinearLayout, actionMenu: View, - searchView: SearchView, + searchView: EditText, appInfo: ApplicationInfo, userHandle: UserHandle, workProfile: Int, diff --git a/app/src/main/java/eu/ottop/yamlauncher/AppMenuActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/AppMenuActivity.kt index 13d9970..118968e 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/AppMenuActivity.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/AppMenuActivity.kt @@ -5,15 +5,15 @@ import android.content.pm.LauncherActivityInfo import android.content.pm.LauncherApps import android.os.Bundle import android.os.UserHandle +import android.text.Editable +import android.text.TextWatcher import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.ViewTreeObserver import android.widget.EditText import android.widget.FrameLayout import android.widget.LinearLayout -import android.widget.SearchView import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity @@ -32,7 +32,7 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, private lateinit var binding: ActivityAppMenuBinding private lateinit var recyclerView: RecyclerView - private lateinit var searchView: SearchView + private lateinit var searchView: EditText private lateinit var adapter: AppMenuAdapter private lateinit var shownApps: List>> private lateinit var job: Job @@ -52,6 +52,12 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, shownApps = getInstalledApps() adapter = AppMenuAdapter(shownApps, this, this) recyclerView.adapter = adapter + + binding.root.addOnLayoutChangeListener { _, _, top, _, bottom, _, oldTop, _, oldBottom -> + if (bottom - top > oldBottom - oldTop) { + searchView.clearFocus() + } + } } override fun onItemClick(appInfo: LauncherActivityInfo, userHandle: UserHandle) { @@ -73,6 +79,24 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, editView: LinearLayout ) { // Handle the long click action here, for example, show additional options or information about the app + editView.findViewById(R.id.app_name_edit).addTextChangedListener(object : + TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + // This method is called before the text is changed + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + // This method is called when the text is changed + // You can perform actions here based on the text changes + // For example, check if text is inserted or removed + filterItems(editView.findViewById(R.id.app_name_edit).text.toString()) + } + + override fun afterTextChanged(s: Editable?) { + + } + + }) textView.visibility = View.INVISIBLE actionMenuLayout.visibility = View.VISIBLE val mainActivity = launcherApps.getActivityList(appInfo.applicationInfo.packageName, userHandle).firstOrNull() @@ -80,6 +104,30 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, } + private fun filterItems(query: String?) { + val cleanQuery = query?.replace("[^a-zA-Z0-9]".toRegex(), "") + + for (i in 0 until binding.recyclerView.childCount) { + val view = binding.recyclerView.getChildAt(i) + + + if (view is FrameLayout) { + for (i in 0 until view.childCount) { + val text = view.getChildAt(i) + if (text is TextView) { + val itemText = text.text.toString() + val cleanItemText = itemText.replace("[^a-zA-Z0-9]".toRegex(), "") + + if (cleanItemText.contains(cleanQuery ?: "", ignoreCase = true)) { + view.visibility = View.VISIBLE + } else { + view.visibility = View.GONE + } + } + } + } + }} + private fun getInstalledApps(): List>> { val allApps = mutableListOf>>() val launcherApps = getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps diff --git a/app/src/main/res/layout/activity_app_menu.xml b/app/src/main/res/layout/activity_app_menu.xml index 3313b89..58a9e42 100644 --- a/app/src/main/res/layout/activity_app_menu.xml +++ b/app/src/main/res/layout/activity_app_menu.xml @@ -21,21 +21,23 @@ - + android:cursorVisible="true" + android:drawableLeft="@android:drawable/ic_menu_search" + android:drawablePadding="8dp" + android:editTextColor="#f3f3f3" + android:hint="Search..." + android:textAppearance="@android:style/TextAppearance.DeviceDefault" + android:textSize="25sp" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9873bfb..23135f7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,14 +20,17 @@ android:layout_weight="1" android:textAlignment="center" android:textColor="#F3F3F3" - android:textSize="70sp" /> + android:textSize="70sp" + android:fontFamily= "@null" + android:textAppearance= "@android:style/TextAppearance.DeviceDefault" /> -