mirror of
https://github.com/He4eT/yamf_launcher.git
synced 2026-05-05 09:57:26 +00:00
Shortcut base functionality implemented (not saved yet)
This commit is contained in:
parent
6db5725aa5
commit
288c7921f6
3 changed files with 124 additions and 31 deletions
|
|
@ -1,12 +1,15 @@
|
|||
package eu.ottop.yamlauncher
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
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.View
|
||||
import android.widget.EditText
|
||||
import android.widget.LinearLayout
|
||||
|
|
@ -24,7 +27,7 @@ import kotlinx.coroutines.launch
|
|||
import kotlinx.coroutines.withContext
|
||||
|
||||
|
||||
class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, AppMenuAdapter.OnItemLongClickListener {
|
||||
class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, AppMenuAdapter.OnShortcutListener, AppMenuAdapter.OnItemLongClickListener {
|
||||
|
||||
private lateinit var binding: ActivityAppMenuBinding
|
||||
private lateinit var recyclerView: RecyclerView
|
||||
|
|
@ -38,8 +41,27 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
|||
|
||||
private val sharedPreferenceManager = SharedPreferenceManager()
|
||||
|
||||
private lateinit var menuMode: String
|
||||
|
||||
companion object {
|
||||
private lateinit var callback: (Pair<String, Pair<LauncherActivityInfo, UserHandle>>) -> Unit
|
||||
private const val MENU_MODE = "abcd"
|
||||
|
||||
fun start(context: Context, param1: String = "app", callback: (Pair<String, Pair<LauncherActivityInfo, UserHandle>>) -> Unit) {
|
||||
val intent = Intent(context, AppMenuActivity::class.java).apply {
|
||||
putExtra(MENU_MODE, param1)
|
||||
}
|
||||
context.startActivity(intent)
|
||||
|
||||
this.callback = callback
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
menuMode = intent.getStringExtra(MENU_MODE) ?: "app"
|
||||
|
||||
binding = ActivityAppMenuBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
setSupportActionBar(null)
|
||||
|
|
@ -50,7 +72,7 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
|||
recyclerView.layoutManager = LinearLayoutManager(this)
|
||||
installedApps = getInstalledApps()
|
||||
filteredApps = mutableListOf()
|
||||
adapter = AppMenuAdapter(this@AppMenuActivity, installedApps, this, this)
|
||||
adapter = AppMenuAdapter(this@AppMenuActivity, installedApps, this, this,this, menuMode)
|
||||
recyclerView.adapter = adapter
|
||||
|
||||
setupSearch()
|
||||
|
|
@ -60,12 +82,17 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
|||
val mainActivity = launcherApps.getActivityList(appInfo.applicationInfo.packageName, userHandle).firstOrNull()
|
||||
if (mainActivity != null) {
|
||||
launcherApps.startMainActivity(mainActivity.componentName, userHandle, null, null)
|
||||
finish()
|
||||
} else {
|
||||
// Handle the case when launch intent is null (e.g., app cannot be launched)
|
||||
Toast.makeText(this, "Cannot launch app", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onShortcut(appInfo: LauncherActivityInfo, userHandle: UserHandle, textView: TextView) {
|
||||
callback.invoke(Pair(textView.text.toString(), Pair(appInfo, userHandle,)))
|
||||
finish()
|
||||
}
|
||||
|
||||
override fun onItemLongClick(
|
||||
appInfo: LauncherActivityInfo,
|
||||
userHandle: UserHandle,
|
||||
|
|
@ -76,9 +103,23 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
|||
) {
|
||||
textView.visibility = View.INVISIBLE
|
||||
actionMenuLayout.visibility = View.VISIBLE
|
||||
val mainActivity = launcherApps.getActivityList(appInfo.applicationInfo.packageName, userHandle).firstOrNull()
|
||||
appActionMenu.setActionListeners(this@AppMenuActivity, CoroutineScope(Dispatchers.Main), binding, textView, editView, actionMenuLayout, searchView, appInfo.applicationInfo, userHandle, userProfile, launcherApps, mainActivity)
|
||||
|
||||
val mainActivity =
|
||||
launcherApps.getActivityList(appInfo.applicationInfo.packageName, userHandle)
|
||||
.firstOrNull()
|
||||
appActionMenu.setActionListeners(
|
||||
this@AppMenuActivity,
|
||||
CoroutineScope(Dispatchers.Main),
|
||||
binding,
|
||||
textView,
|
||||
editView,
|
||||
actionMenuLayout,
|
||||
searchView,
|
||||
appInfo.applicationInfo,
|
||||
userHandle,
|
||||
userProfile,
|
||||
launcherApps,
|
||||
mainActivity
|
||||
)
|
||||
}
|
||||
|
||||
private fun setupSearch() {
|
||||
|
|
|
|||
|
|
@ -12,10 +12,16 @@ import android.widget.FrameLayout
|
|||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
class AppMenuAdapter(private val activity: AppMenuActivity, var apps: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>, private val itemClickListener: OnItemClickListener, private val itemLongClickListener: OnItemLongClickListener) :
|
||||
class AppMenuAdapter(
|
||||
private val activity: AppMenuActivity,
|
||||
var apps: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>,
|
||||
private val itemClickListener: OnItemClickListener,
|
||||
private val shortcutListener: OnShortcutListener,
|
||||
private val itemLongClickListener: OnItemLongClickListener,
|
||||
private val menuMode: String
|
||||
) :
|
||||
RecyclerView.Adapter<AppMenuAdapter.AppViewHolder>() {
|
||||
|
||||
private val sharedPreferenceManager = SharedPreferenceManager()
|
||||
|
|
@ -24,6 +30,10 @@ class AppMenuAdapter(private val activity: AppMenuActivity, var apps: List<Pair<
|
|||
fun onItemClick(appInfo: LauncherActivityInfo, userHandle: UserHandle)
|
||||
}
|
||||
|
||||
interface OnShortcutListener {
|
||||
fun onShortcut(appInfo: LauncherActivityInfo, userHandle: UserHandle, textView: TextView)
|
||||
}
|
||||
|
||||
interface OnItemLongClickListener {
|
||||
fun onItemLongClick(
|
||||
appInfo: LauncherActivityInfo,
|
||||
|
|
@ -49,20 +59,34 @@ class AppMenuAdapter(private val activity: AppMenuActivity, var apps: List<Pair<
|
|||
val position = bindingAdapterPosition
|
||||
if (position != RecyclerView.NO_POSITION) {
|
||||
val app = apps[position].first
|
||||
if (menuMode == "shortcut") {
|
||||
shortcutListener.onShortcut(app, apps[position].second.first, textView)
|
||||
}
|
||||
else if (menuMode == "app") {
|
||||
itemClickListener.onItemClick(app, apps[position].second.first)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (menuMode == "app") {
|
||||
itemView.setOnLongClickListener {
|
||||
val position = bindingAdapterPosition
|
||||
if (position != RecyclerView.NO_POSITION) {
|
||||
val app = apps[position].first
|
||||
itemLongClickListener.onItemLongClick(app, apps[position].second.first, apps[position].second.second, textView, actionMenuLayout, editView)
|
||||
itemLongClickListener.onItemLongClick(
|
||||
app,
|
||||
apps[position].second.first,
|
||||
apps[position].second.second,
|
||||
textView,
|
||||
actionMenuLayout,
|
||||
editView
|
||||
)
|
||||
return@setOnLongClickListener true
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppViewHolder {
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
|
|
|
|||
|
|
@ -1,12 +1,19 @@
|
|||
package eu.ottop.yamlauncher
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.LauncherApps
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.GestureDetector
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.children
|
||||
import eu.ottop.yamlauncher.databinding.ActivityMainBinding
|
||||
|
|
@ -16,7 +23,7 @@ class MainActivity : AppCompatActivity() {
|
|||
|
||||
private lateinit var binding: ActivityMainBinding
|
||||
private lateinit var gestureDetector: GestureDetector
|
||||
private val sharedPreferenceManager = SharedPreferenceManager()
|
||||
private lateinit var launcherApps: LauncherApps
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
|
@ -24,12 +31,29 @@ class MainActivity : AppCompatActivity() {
|
|||
setContentView(binding.root)
|
||||
setSupportActionBar(null)
|
||||
|
||||
launcherApps = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
|
||||
|
||||
for (i in findViewById<LinearLayout>(R.id.shortcuts).children) {
|
||||
|
||||
var textView = i as TextView
|
||||
|
||||
i.setOnClickListener {
|
||||
Log.d("hHJKJFAF", "Click done")
|
||||
}
|
||||
|
||||
i.setOnLongClickListener {
|
||||
Log.d("hHJKJFAF", "long click done")
|
||||
AppMenuActivity.start(this@MainActivity, "shortcut") { newText ->
|
||||
textView.text = newText.first
|
||||
i.setOnClickListener {
|
||||
val mainActivity = launcherApps.getActivityList(newText.second.first.applicationInfo.packageName, newText.second.second).firstOrNull()
|
||||
if (mainActivity != null) {
|
||||
launcherApps.startMainActivity(mainActivity.componentName, newText.second.second, null, null)
|
||||
} else {
|
||||
Toast.makeText(this, "Cannot launch app", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return@setOnLongClickListener true
|
||||
}
|
||||
}
|
||||
|
|
@ -38,6 +62,8 @@ class MainActivity : AppCompatActivity() {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
gestureDetector.onTouchEvent(event)
|
||||
return super.onTouchEvent(event)
|
||||
|
|
@ -68,7 +94,9 @@ class MainActivity : AppCompatActivity() {
|
|||
}
|
||||
|
||||
fun openAppMenuActivity() {
|
||||
startActivity(Intent(this, AppMenuActivity::class.java))
|
||||
AppMenuActivity.start(this) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue