SearchView changed to EditView. Still needs functionality and more adjustments.

This commit is contained in:
ottoptj 2024-05-10 12:50:29 +03:00
commit 8963b97149
7 changed files with 90 additions and 24 deletions

View file

@ -14,7 +14,6 @@ import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.EditText import android.widget.EditText
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.SearchView
import android.widget.TextView import android.widget.TextView
import eu.ottop.yamlauncher.databinding.ActivityAppMenuBinding import eu.ottop.yamlauncher.databinding.ActivityAppMenuBinding
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -31,7 +30,7 @@ class AppActionMenu {
textView: TextView, textView: TextView,
editLayout: LinearLayout, editLayout: LinearLayout,
actionMenu: View, actionMenu: View,
searchView: SearchView, searchView: EditText,
appInfo: ApplicationInfo, appInfo: ApplicationInfo,
userHandle: UserHandle, userHandle: UserHandle,
workProfile: Int, workProfile: Int,

View file

@ -5,15 +5,15 @@ import android.content.pm.LauncherActivityInfo
import android.content.pm.LauncherApps import android.content.pm.LauncherApps
import android.os.Bundle import android.os.Bundle
import android.os.UserHandle import android.os.UserHandle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewTreeObserver
import android.widget.EditText import android.widget.EditText
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.SearchView
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@ -32,7 +32,7 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
private lateinit var binding: ActivityAppMenuBinding private lateinit var binding: ActivityAppMenuBinding
private lateinit var recyclerView: RecyclerView private lateinit var recyclerView: RecyclerView
private lateinit var searchView: SearchView private lateinit var searchView: EditText
private lateinit var adapter: AppMenuAdapter private lateinit var adapter: AppMenuAdapter
private lateinit var shownApps: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>> private lateinit var shownApps: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>
private lateinit var job: Job private lateinit var job: Job
@ -52,6 +52,12 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
shownApps = getInstalledApps() shownApps = getInstalledApps()
adapter = AppMenuAdapter(shownApps, this, this) adapter = AppMenuAdapter(shownApps, this, this)
recyclerView.adapter = adapter recyclerView.adapter = adapter
binding.root.addOnLayoutChangeListener { _, _, top, _, bottom, _, oldTop, _, oldBottom ->
if (bottom - top > oldBottom - oldTop) {
searchView.clearFocus()
}
}
} }
override fun onItemClick(appInfo: LauncherActivityInfo, userHandle: UserHandle) { override fun onItemClick(appInfo: LauncherActivityInfo, userHandle: UserHandle) {
@ -73,6 +79,24 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
editView: LinearLayout editView: LinearLayout
) { ) {
// Handle the long click action here, for example, show additional options or information about the app // Handle the long click action here, for example, show additional options or information about the app
editView.findViewById<EditText>(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<EditText>(R.id.app_name_edit).text.toString())
}
override fun afterTextChanged(s: Editable?) {
}
})
textView.visibility = View.INVISIBLE textView.visibility = View.INVISIBLE
actionMenuLayout.visibility = View.VISIBLE actionMenuLayout.visibility = View.VISIBLE
val mainActivity = launcherApps.getActivityList(appInfo.applicationInfo.packageName, userHandle).firstOrNull() 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<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>> { private fun getInstalledApps(): List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>> {
val allApps = mutableListOf<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>() val allApps = mutableListOf<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>()
val launcherApps = getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps val launcherApps = getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps

View file

@ -21,21 +21,23 @@
</androidx.recyclerview.widget.RecyclerView> </androidx.recyclerview.widget.RecyclerView>
<SearchView <com.google.android.material.textfield.TextInputEditText
android:id="@+id/searchView" android:id="@+id/searchView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_marginHorizontal="5dp" android:layout_marginHorizontal="40dp"
android:layout_marginTop="10dp" android:layout_marginTop="20dp"
android:layout_marginBottom="20dp" android:layout_marginBottom="40dp"
android:layout_weight="0.1" android:layout_weight="0.1"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:iconifiedByDefault="false" android:cursorVisible="true"
android:padding="0dp" android:drawableLeft="@android:drawable/ic_menu_search"
android:queryBackground="@null" android:drawablePadding="8dp"
android:queryHint="Search..." android:editTextColor="#f3f3f3"
android:theme="@style/AppSearchView" /> android:hint="Search..."
android:textAppearance="@android:style/TextAppearance.DeviceDefault"
android:textSize="25sp" />
</LinearLayout> </LinearLayout>

View file

@ -20,14 +20,17 @@
android:layout_weight="1" android:layout_weight="1"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#F3F3F3" android:textColor="#F3F3F3"
android:textSize="70sp" /> android:textSize="70sp"
android:fontFamily= "@null"
android:textAppearance= "@android:style/TextAppearance.DeviceDefault" />
<Button <androidx.appcompat.widget.AppCompatButton
android:id="@+id/button" android:id="@+id/button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.1" android:layout_weight="0.1"
android:onClick="openAppMenuActivity" android:onClick="openAppMenuActivity"
android:text="Button" /> android:text="Button"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
</LinearLayout> </LinearLayout>

View file

@ -31,7 +31,8 @@
android:paddingBottom="10dp" android:paddingBottom="10dp"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:singleLine="true" android:singleLine="true"
android:textSize="28sp" /> android:textSize="28sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
<androidx.appcompat.widget.AppCompatButton <androidx.appcompat.widget.AppCompatButton
android:id="@+id/button2" android:id="@+id/button2"
@ -44,7 +45,8 @@
android:insetTop="0dp" android:insetTop="0dp"
android:insetBottom="0dp" android:insetBottom="0dp"
android:text="Reset" android:text="Reset"
android:textColor="#F3F3F3" /> android:textColor="#F3F3F3"
android:textAppearance="@android:style/TextAppearance.DeviceDefault"/>
</LinearLayout> </LinearLayout>
<TextView <TextView
@ -57,6 +59,7 @@
android:paddingTop="20dp" android:paddingTop="20dp"
android:paddingRight="40dp" android:paddingRight="40dp"
android:paddingBottom="20dp" android:paddingBottom="20dp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault"
android:textColor="#F3F3F3" android:textColor="#F3F3F3"
android:textSize="28sp" android:textSize="28sp"
android:visibility="visible" /> android:visibility="visible" />
@ -78,7 +81,8 @@
android:text="Info" android:text="Info"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#F3F3F3FF" android:textColor="#F3F3F3FF"
app:drawableTopCompat="@android:drawable/ic_menu_info_details" /> app:drawableTopCompat="@android:drawable/ic_menu_info_details"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
<TextView <TextView
android:id="@+id/uninstall" android:id="@+id/uninstall"
@ -90,7 +94,8 @@
android:text="Uninstall" android:text="Uninstall"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#F3F3F3FF" android:textColor="#F3F3F3FF"
app:drawableTopCompat="@android:drawable/ic_menu_delete" /> app:drawableTopCompat="@android:drawable/ic_menu_delete"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
<TextView <TextView
android:id="@+id/rename" android:id="@+id/rename"
@ -102,7 +107,8 @@
android:text="Rename" android:text="Rename"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#F3F3F3FF" android:textColor="#F3F3F3FF"
app:drawableTopCompat="@android:drawable/ic_menu_edit" /> app:drawableTopCompat="@android:drawable/ic_menu_edit"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
<TextView <TextView
android:id="@+id/hide" android:id="@+id/hide"
@ -114,7 +120,8 @@
android:text="Hide" android:text="Hide"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#F3F3F3FF" android:textColor="#F3F3F3FF"
app:drawableTopCompat="@android:drawable/ic_menu_view" /> app:drawableTopCompat="@android:drawable/ic_menu_view"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
<TextView <TextView
android:id="@+id/close" android:id="@+id/close"
@ -126,7 +133,8 @@
android:text="Close" android:text="Close"
android:textAlignment="center" android:textAlignment="center"
android:textColor="#F3F3F3FF" android:textColor="#F3F3F3FF"
app:drawableTopCompat="@android:drawable/ic_menu_close_clear_cancel" /> app:drawableTopCompat="@android:drawable/ic_menu_close_clear_cancel"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
</LinearLayout> </LinearLayout>

View file

@ -7,4 +7,5 @@
<item name="android:windowShowWallpaper">true</item> <item name="android:windowShowWallpaper">true</item>
<!-- <item name="colorPrimary">@color/my_dark_primary</item> --> <!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
</style> </style>
</resources> </resources>

View file

@ -14,5 +14,10 @@
<item name="android:cursorVisible">true</item> <item name="android:cursorVisible">true</item>
</style> </style>
<style name="AppTextAppearance" parent="Widget.AppCompat.SearchView">
<item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault</item>
</style>
<style name="Theme.YamLauncher" parent="Base.Theme.YamLauncher" /> <style name="Theme.YamLauncher" parent="Base.Theme.YamLauncher" />
</resources> </resources>