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.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,

View file

@ -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<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>
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<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
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<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>> {
val allApps = mutableListOf<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>()
val launcherApps = getSystemService(LAUNCHER_APPS_SERVICE) as LauncherApps

View file

@ -21,21 +21,23 @@
</androidx.recyclerview.widget.RecyclerView>
<SearchView
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="bottom"
android:layout_marginHorizontal="5dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="20dp"
android:layout_marginHorizontal="40dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="40dp"
android:layout_weight="0.1"
android:background="@android:color/transparent"
android:iconifiedByDefault="false"
android:padding="0dp"
android:queryBackground="@null"
android:queryHint="Search..."
android:theme="@style/AppSearchView" />
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" />
</LinearLayout>

View file

@ -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" />
<Button
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.1"
android:onClick="openAppMenuActivity"
android:text="Button" />
android:text="Button"
android:textAppearance="@android:style/TextAppearance.DeviceDefault" />
</LinearLayout>

View file

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

View file

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

View file

@ -14,5 +14,10 @@
<item name="android:cursorVisible">true</item>
</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" />
</resources>