mirror of
https://github.com/jrpie/Launcher.git
synced 2025-02-23 06:21:31 +01:00
include hidden apps when selecting an app
This commit is contained in:
parent
335aef1d7c
commit
3dced7ace6
7 changed files with 68 additions and 26 deletions
|
@ -5,7 +5,6 @@ import android.app.Service
|
|||
import android.app.role.RoleManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.pm.LauncherApps
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.ColorMatrix
|
||||
|
|
|
@ -10,6 +10,7 @@ import android.os.SystemClock
|
|||
import android.view.KeyEvent
|
||||
import android.widget.Toast
|
||||
import de.jrpie.android.launcher.R
|
||||
import de.jrpie.android.launcher.apps.AppFilter
|
||||
import de.jrpie.android.launcher.apps.AppInfo.Companion.INVALID_USER
|
||||
import de.jrpie.android.launcher.ui.list.ListActivity
|
||||
import de.jrpie.android.launcher.ui.settings.SettingsActivity
|
||||
|
@ -183,8 +184,23 @@ private fun openSettings(context: Context) {
|
|||
fun openAppsList(context: Context, favorite: Boolean = false, hidden: Boolean = false) {
|
||||
val intent = Intent(context, ListActivity::class.java)
|
||||
intent.putExtra("intention", ListActivity.ListActivityIntention.VIEW.toString())
|
||||
intent.putExtra("favorite", favorite)
|
||||
intent.putExtra("hidden", hidden)
|
||||
intent.putExtra(
|
||||
"favoritesVisibility",
|
||||
if (favorite) {
|
||||
AppFilter.Companion.AppSetVisibility.EXCLUSIVE
|
||||
} else {
|
||||
AppFilter.Companion.AppSetVisibility.VISIBLE
|
||||
}
|
||||
)
|
||||
intent.putExtra(
|
||||
"hiddenVisibility",
|
||||
if (hidden) {
|
||||
AppFilter.Companion.AppSetVisibility.EXCLUSIVE
|
||||
} else {
|
||||
AppFilter.Companion.AppSetVisibility.HIDDEN
|
||||
}
|
||||
)
|
||||
|
||||
context.startActivity(intent)
|
||||
}
|
||||
|
||||
|
|
|
@ -6,19 +6,19 @@ import kotlin.text.Regex.Companion.escapeReplacement
|
|||
|
||||
class AppFilter(
|
||||
var search: String,
|
||||
var showOnlyFavorites: Boolean = false,
|
||||
var showOnlyHidden: Boolean = false
|
||||
var favoritesVisibility: AppSetVisibility = AppSetVisibility.VISIBLE,
|
||||
var hiddenVisibility: AppSetVisibility = AppSetVisibility.HIDDEN,
|
||||
) {
|
||||
operator fun invoke(apps: List<DetailedAppInfo>): List<DetailedAppInfo> {
|
||||
var apps = apps
|
||||
|
||||
val hidden = LauncherPreferences.apps().hidden() ?: setOf()
|
||||
apps = apps.filter { info -> !showOnlyHidden.xor(hidden.contains(info.app)) }
|
||||
|
||||
if (showOnlyFavorites) {
|
||||
val favorites = LauncherPreferences.apps().favorites() ?: setOf()
|
||||
apps = apps.filter { info -> favorites.contains(info.app) }
|
||||
apps = apps.filter { info ->
|
||||
favoritesVisibility.predicate(favorites, info)
|
||||
&& hiddenVisibility.predicate(hidden, info)
|
||||
}
|
||||
|
||||
// normalize text for search
|
||||
var allowedSpecialCharacters = search
|
||||
.lowercase(Locale.ROOT)
|
||||
|
@ -52,4 +52,15 @@ class AppFilter(
|
|||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
enum class AppSetVisibility(
|
||||
val predicate: (set: Set<AppInfo>, DetailedAppInfo) -> Boolean
|
||||
) {
|
||||
VISIBLE({ _, _ -> true }),
|
||||
HIDDEN({ set, appInfo -> !set.contains(appInfo.app) }),
|
||||
EXCLUSIVE({ set, appInfo -> set.contains(appInfo.app) }),
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ import com.google.android.material.tabs.TabLayout
|
|||
import de.jrpie.android.launcher.R
|
||||
import de.jrpie.android.launcher.REQUEST_UNINSTALL
|
||||
import de.jrpie.android.launcher.actions.LauncherAction
|
||||
import de.jrpie.android.launcher.apps.AppFilter
|
||||
import de.jrpie.android.launcher.databinding.ListBinding
|
||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||
import de.jrpie.android.launcher.ui.UIObject
|
||||
|
@ -27,8 +28,8 @@ import de.jrpie.android.launcher.ui.list.other.ListFragmentOther
|
|||
|
||||
// TODO: Better solution for this intercommunication functionality (used in list-fragments)
|
||||
var intention = ListActivity.ListActivityIntention.VIEW
|
||||
var showFavorites = false
|
||||
var showHidden = false
|
||||
var favoritesVisibility: AppFilter.Companion.AppSetVisibility = AppFilter.Companion.AppSetVisibility.VISIBLE
|
||||
var hiddenVisibility: AppFilter.Companion.AppSetVisibility = AppFilter.Companion.AppSetVisibility.HIDDEN
|
||||
var forGesture: String? = null
|
||||
|
||||
/**
|
||||
|
@ -57,8 +58,10 @@ class ListActivity : AppCompatActivity(), UIObject {
|
|||
?.let { ListActivityIntention.valueOf(it) }
|
||||
?: ListActivityIntention.VIEW
|
||||
|
||||
showFavorites = bundle.getBoolean("favorite") ?: false
|
||||
showHidden = bundle.getBoolean("hidden") ?: false
|
||||
favoritesVisibility = bundle.getSerializable("favoritesVisibility")
|
||||
as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility
|
||||
hiddenVisibility = bundle.getSerializable("hiddenVisibility")
|
||||
as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility
|
||||
|
||||
if (intention != ListActivityIntention.VIEW)
|
||||
forGesture = bundle.getString("forGesture")
|
||||
|
@ -126,9 +129,9 @@ class ListActivity : AppCompatActivity(), UIObject {
|
|||
fun updateTitle() {
|
||||
var titleResource = intention.titleResource
|
||||
if (intention == ListActivityIntention.VIEW) {
|
||||
titleResource = if (showHidden) {
|
||||
titleResource = if (hiddenVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) {
|
||||
R.string.list_title_hidden
|
||||
} else if (showFavorites) {
|
||||
} else if (favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) {
|
||||
R.string.list_title_favorite
|
||||
} else {
|
||||
R.string.list_title_view
|
||||
|
|
|
@ -258,13 +258,13 @@ class AppsRecyclerAdapter(
|
|||
|
||||
}
|
||||
|
||||
fun setShowOnlyFavorites(show: Boolean) {
|
||||
appFilter.showOnlyFavorites = show
|
||||
fun setFavoritesVisibility(v: AppFilter.Companion.AppSetVisibility) {
|
||||
appFilter.favoritesVisibility = v;
|
||||
updateAppsList()
|
||||
}
|
||||
|
||||
fun setShowHiddenApps(show: Boolean) {
|
||||
appFilter.showOnlyHidden = show
|
||||
fun setHiddenAppsVisibility(v: AppFilter.Companion.AppSetVisibility) {
|
||||
appFilter.hiddenVisibility = v;
|
||||
updateAppsList()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,10 +13,10 @@ import de.jrpie.android.launcher.openSoftKeyboard
|
|||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||
import de.jrpie.android.launcher.ui.UIObject
|
||||
import de.jrpie.android.launcher.ui.list.ListActivity
|
||||
import de.jrpie.android.launcher.ui.list.favoritesVisibility
|
||||
import de.jrpie.android.launcher.ui.list.forGesture
|
||||
import de.jrpie.android.launcher.ui.list.hiddenVisibility
|
||||
import de.jrpie.android.launcher.ui.list.intention
|
||||
import de.jrpie.android.launcher.ui.list.showFavorites
|
||||
import de.jrpie.android.launcher.ui.list.showHidden
|
||||
|
||||
|
||||
/**
|
||||
|
@ -47,7 +47,8 @@ class ListFragmentApps : Fragment(), UIObject {
|
|||
LauncherPreferences.getSharedPreferences()
|
||||
.registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
|
||||
|
||||
binding.listAppsCheckBoxFavorites.isChecked = showFavorites
|
||||
binding.listAppsCheckBoxFavorites.isChecked =
|
||||
(favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
|
@ -64,7 +65,11 @@ class ListFragmentApps : Fragment(), UIObject {
|
|||
appsRViewAdapter =
|
||||
AppsRecyclerAdapter(
|
||||
requireActivity(), binding.root, intention, forGesture,
|
||||
appFilter = AppFilter("", showOnlyFavorites = showFavorites, showOnlyHidden = showHidden)
|
||||
appFilter = AppFilter(
|
||||
"",
|
||||
favoritesVisibility = favoritesVisibility,
|
||||
hiddenVisibility = hiddenVisibility
|
||||
)
|
||||
)
|
||||
|
||||
// set up the list / recycler
|
||||
|
@ -72,6 +77,7 @@ class ListFragmentApps : Fragment(), UIObject {
|
|||
// improve performance (since content changes don't change the layout size)
|
||||
setHasFixedSize(true)
|
||||
layoutManager = LinearLayoutManager(context)
|
||||
// TODO: option to change this to GridLayoutManager(context, numCols)
|
||||
adapter = appsRViewAdapter
|
||||
}
|
||||
|
||||
|
@ -91,8 +97,13 @@ class ListFragmentApps : Fragment(), UIObject {
|
|||
})
|
||||
|
||||
binding.listAppsCheckBoxFavorites.setOnClickListener {
|
||||
showFavorites = binding.listAppsCheckBoxFavorites.isChecked
|
||||
appsRViewAdapter.setShowOnlyFavorites(showFavorites)
|
||||
favoritesVisibility =
|
||||
if (binding.listAppsCheckBoxFavorites.isChecked) {
|
||||
AppFilter.Companion.AppSetVisibility.EXCLUSIVE
|
||||
} else {
|
||||
AppFilter.Companion.AppSetVisibility.VISIBLE
|
||||
}
|
||||
appsRViewAdapter.setFavoritesVisibility(favoritesVisibility)
|
||||
(activity as? ListActivity)?.updateTitle()
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ import de.jrpie.android.launcher.R
|
|||
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
|
||||
import de.jrpie.android.launcher.actions.Action
|
||||
import de.jrpie.android.launcher.actions.Gesture
|
||||
import de.jrpie.android.launcher.apps.AppFilter
|
||||
import de.jrpie.android.launcher.databinding.SettingsActionsRecyclerBinding
|
||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||
import de.jrpie.android.launcher.transformGrayscale
|
||||
|
@ -155,6 +156,7 @@ class ActionsRecyclerAdapter(val activity: Activity) :
|
|||
private fun chooseApp(gesture: Gesture) {
|
||||
val intent = Intent(activity, ListActivity::class.java)
|
||||
intent.putExtra("intention", ListActivity.ListActivityIntention.PICK.toString())
|
||||
intent.putExtra("hiddenVisibility", AppFilter.Companion.AppSetVisibility.VISIBLE)
|
||||
intent.putExtra("forGesture", gesture.id) // for which action we choose the app
|
||||
activity.startActivityForResult(
|
||||
intent,
|
||||
|
|
Loading…
Add table
Reference in a new issue