mirror of
https://github.com/SimpleMobileTools/Simple-Launcher.git
synced 2025-04-13 09:32:02 +02:00
116 lines
4.5 KiB
Kotlin
116 lines
4.5 KiB
Kotlin
package com.simplemobiletools.launcher.extensions
|
|
|
|
import android.app.Activity
|
|
import android.content.ComponentName
|
|
import android.content.Intent
|
|
import android.content.pm.ApplicationInfo
|
|
import android.content.res.ColorStateList
|
|
import android.net.Uri
|
|
import android.provider.Settings
|
|
import android.view.ContextThemeWrapper
|
|
import android.view.Gravity
|
|
import android.view.View
|
|
import android.widget.PopupMenu
|
|
import androidx.core.view.forEach
|
|
import com.google.android.material.color.MaterialColors
|
|
import com.simplemobiletools.commons.extensions.getPopupMenuTheme
|
|
import com.simplemobiletools.commons.extensions.getProperTextColor
|
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
|
import com.simplemobiletools.commons.helpers.isQPlus
|
|
import com.simplemobiletools.launcher.R
|
|
import com.simplemobiletools.launcher.activities.SettingsActivity
|
|
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_FOLDER
|
|
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_ICON
|
|
import com.simplemobiletools.launcher.helpers.ITEM_TYPE_WIDGET
|
|
import com.simplemobiletools.launcher.helpers.UNINSTALL_APP_REQUEST_CODE
|
|
import com.simplemobiletools.launcher.interfaces.ItemMenuListener
|
|
import com.simplemobiletools.launcher.models.HomeScreenGridItem
|
|
|
|
fun Activity.launchApp(packageName: String, activityName: String) {
|
|
// if this is true, launch the app settings
|
|
if (packageName == this.packageName) {
|
|
startActivity(Intent(applicationContext, SettingsActivity::class.java))
|
|
return
|
|
}
|
|
|
|
try {
|
|
Intent(Intent.ACTION_MAIN).apply {
|
|
addCategory(Intent.CATEGORY_LAUNCHER)
|
|
`package` = packageName
|
|
component = ComponentName.unflattenFromString("$packageName/$activityName")
|
|
addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
|
|
startActivity(this)
|
|
}
|
|
} catch (e: Exception) {
|
|
try {
|
|
val launchIntent = packageManager.getLaunchIntentForPackage(packageName)
|
|
startActivity(launchIntent)
|
|
} catch (e: Exception) {
|
|
showErrorToast(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun Activity.launchAppInfo(packageName: String) {
|
|
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
|
|
data = Uri.fromParts("package", packageName, null)
|
|
startActivity(this)
|
|
}
|
|
}
|
|
|
|
fun Activity.canAppBeUninstalled(packageName: String): Boolean {
|
|
return try {
|
|
(packageManager.getApplicationInfo(packageName, 0).flags and ApplicationInfo.FLAG_SYSTEM) == 0
|
|
} catch (ignored: Exception) {
|
|
false
|
|
}
|
|
}
|
|
|
|
fun Activity.uninstallApp(packageName: String) {
|
|
Intent(Intent.ACTION_DELETE).apply {
|
|
data = Uri.fromParts("package", packageName, null)
|
|
startActivityForResult(this, UNINSTALL_APP_REQUEST_CODE)
|
|
}
|
|
}
|
|
|
|
fun Activity.handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean, listener: ItemMenuListener): PopupMenu {
|
|
val contextTheme = ContextThemeWrapper(this, getPopupMenuTheme())
|
|
return PopupMenu(contextTheme, anchorView, Gravity.TOP or Gravity.END).apply {
|
|
if (isQPlus()) {
|
|
setForceShowIcon(true)
|
|
}
|
|
|
|
inflate(R.menu.menu_app_icon)
|
|
menu.forEach {
|
|
val color = MaterialColors.getColor(contextTheme, android.R.attr.textColorPrimary, getProperTextColor())
|
|
it.iconTintList = ColorStateList.valueOf(color)
|
|
}
|
|
menu.findItem(R.id.rename).isVisible = (gridItem.type == ITEM_TYPE_ICON || gridItem.type == ITEM_TYPE_FOLDER) && !isOnAllAppsFragment
|
|
menu.findItem(R.id.hide_icon).isVisible = gridItem.type == ITEM_TYPE_ICON && isOnAllAppsFragment
|
|
menu.findItem(R.id.resize).isVisible = gridItem.type == ITEM_TYPE_WIDGET
|
|
menu.findItem(R.id.app_info).isVisible = gridItem.type == ITEM_TYPE_ICON
|
|
menu.findItem(R.id.uninstall).isVisible = gridItem.type == ITEM_TYPE_ICON && canAppBeUninstalled(gridItem.packageName)
|
|
menu.findItem(R.id.remove).isVisible = !isOnAllAppsFragment
|
|
setOnMenuItemClickListener { item ->
|
|
listener.onAnyClick()
|
|
when (item.itemId) {
|
|
R.id.hide_icon -> listener.hide(gridItem)
|
|
R.id.rename -> listener.rename(gridItem)
|
|
R.id.resize -> listener.resize(gridItem)
|
|
R.id.app_info -> listener.appInfo(gridItem)
|
|
R.id.remove -> listener.remove(gridItem)
|
|
R.id.uninstall -> listener.uninstall(gridItem)
|
|
}
|
|
true
|
|
}
|
|
|
|
setOnDismissListener {
|
|
listener.onDismiss()
|
|
}
|
|
|
|
listener.beforeShow(menu)
|
|
|
|
show()
|
|
}
|
|
}
|