diff --git a/app/build.gradle b/app/build.gradle index 76bd285..23273af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -100,7 +100,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.2.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.palette:palette-ktx:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.4.0' + implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'com.google.android.material:material:1.12.0' implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") diff --git a/app/src/main/java/de/jrpie/android/launcher/Application.kt b/app/src/main/java/de/jrpie/android/launcher/Application.kt index c856066..6e924c2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Application.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Application.kt @@ -17,14 +17,12 @@ import androidx.preference.PreferenceManager import de.jrpie.android.launcher.actions.TorchManager import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.DetailedAppInfo -import de.jrpie.android.launcher.apps.isPrivateSpaceLocked import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.preferences.migratePreferencesToNewVersion import de.jrpie.android.launcher.preferences.resetPreferences class Application : android.app.Application() { val apps = MutableLiveData>() - val privateSpaceLocked = MutableLiveData() private val profileAvailabilityBroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { @@ -146,7 +144,6 @@ class Application : android.app.Application() { } private fun loadApps() { - privateSpaceLocked.postValue(isPrivateSpaceLocked(this)) AsyncTask.execute { apps.postValue(getApps(packageManager, applicationContext)) } } } diff --git a/app/src/main/java/de/jrpie/android/launcher/Functions.kt b/app/src/main/java/de/jrpie/android/launcher/Functions.kt index 5f7e9c9..721caa2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt @@ -22,8 +22,6 @@ import de.jrpie.android.launcher.actions.Action import de.jrpie.android.launcher.actions.Gesture import de.jrpie.android.launcher.apps.AppInfo import de.jrpie.android.launcher.apps.DetailedAppInfo -import de.jrpie.android.launcher.apps.getPrivateSpaceUser -import de.jrpie.android.launcher.apps.isPrivateSpaceSupported import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.ui.tutorial.TutorialActivity @@ -50,15 +48,14 @@ fun isDefaultHomeScreen(context: Context): Boolean { } fun setDefaultHomeScreen(context: Context, checkDefault: Boolean = false) { - val isDefault = isDefaultHomeScreen(context) - if (checkDefault && isDefault) { + if (checkDefault && isDefaultHomeScreen(context)) { // Launcher is already the default home app return } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && context is Activity - && !isDefault // using role manager only works when µLauncher is not already the default. + && checkDefault // using role manager only works when µLauncher is not already the default. ) { val roleManager = context.getSystemService(RoleManager::class.java) context.startActivityForResult( @@ -81,6 +78,16 @@ fun getUserFromId(userId: Int?, context: Context): UserHandle { return profiles.firstOrNull { it.hashCode() == userId } ?: profiles[0] } +fun getPrivateSpaceUser(context: Context): UserHandle? { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) { + return null + } + val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager + val launcherApps = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps + return userManager.userProfiles.firstOrNull { u -> + launcherApps.getLauncherUserInfo(u)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE + } +} fun openInBrowser(url: String, context: Context) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) @@ -109,8 +116,6 @@ fun getApps(packageManager: PackageManager, context: Context): MutableList= Build.VERSION_CODES.VANILLA_ICE_CREAM && launcherApps.getLauncherUserInfo(user)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE ) { continue @@ -130,7 +135,7 @@ fun getApps(packageManager: PackageManager, context: Context): MutableList openAppsList(context, favorite = true) }, + { context -> openAppsList(context, true) }, true ), - CHOOSE_FROM_PRIVATE_SPACE( - "choose_from_private_space", - R.string.list_other_list_private_space, - R.drawable.baseline_security_24, - { context -> - openAppsList(context, private = true) - }, - available = { _ -> - isPrivateSpaceSupported() - } - ), TOGGLE_PRIVATE_SPACE_LOCK( "toggle_private_space_lock", R.string.list_other_toggle_private_space_lock, R.drawable.baseline_security_24, ::togglePrivateSpaceLock, - available = { _ -> isPrivateSpaceSupported() } + available = { Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM } ), VOLUME_UP( "volume_up", @@ -114,7 +107,7 @@ enum class LauncherAction( LOCK_SCREEN( "lock_screen", R.string.list_other_lock_screen, - R.drawable.baseline_lock_24, + R.drawable.baseline_lock_24px, { c -> LauncherPreferences.actions().lockMethod().lockOrEnable(c) } ), TORCH( @@ -135,7 +128,7 @@ enum class LauncherAction( } override fun getIcon(context: Context): Drawable? { - return AppCompatResources.getDrawable(context, icon) + return context.getDrawable(icon) } override fun isAvailable(context: Context): Boolean { @@ -237,6 +230,37 @@ private fun expandNotificationsPanel(context: Context) { } } +private fun togglePrivateSpaceLock(context: Context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) { + Toast.makeText( + context, + context.getString(R.string.alert_requires_android_v), + Toast.LENGTH_LONG + ).show() + return + } + val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager + val privateSpaceUser = getPrivateSpaceUser(context) + if (privateSpaceUser == null) { + Toast.makeText(context, context.getString(R.string.toast_private_space_not_available), Toast.LENGTH_LONG).show() + + if (!isDefaultHomeScreen(context)) { + Toast.makeText(context, context.getString(R.string.toast_private_space_default_home_screen), Toast.LENGTH_LONG).show() + return + } + + try { + context.startActivity(Intent(Settings.ACTION_PRIVACY_SETTINGS)) + } catch (_: ActivityNotFoundException) {} + return + } + if (userManager.isQuietModeEnabled(privateSpaceUser)) { + userManager.requestQuietModeEnabled(false, privateSpaceUser) + return + } + userManager.requestQuietModeEnabled(true, privateSpaceUser) + Toast.makeText(context, context.getString(R.string.toast_private_space_locked), Toast.LENGTH_LONG).show() +} private fun expandSettingsPanel(context: Context) { /* https://stackoverflow.com/a/31898506 */ @@ -259,12 +283,7 @@ private fun openSettings(context: Context) { context.startActivity(Intent(context, SettingsActivity::class.java)) } -fun openAppsList( - context: Context, - favorite: Boolean = false, - hidden: Boolean = false, - private: Boolean = false -) { +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( @@ -283,16 +302,6 @@ fun openAppsList( AppFilter.Companion.AppSetVisibility.HIDDEN } ) - intent.putExtra( - "privateSpaceVisibility", - if (private) { - AppFilter.Companion.AppSetVisibility.EXCLUSIVE - } else if (!hidden && LauncherPreferences.apps().hidePrivateSpaceApps()) { - AppFilter.Companion.AppSetVisibility.HIDDEN - } else { - AppFilter.Companion.AppSetVisibility.VISIBLE - } - ) context.startActivity(intent) } diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt b/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt index ecc7eaa..f3640d2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/AppFilter.kt @@ -15,7 +15,6 @@ class AppFilter( var query: String, var favoritesVisibility: AppSetVisibility = AppSetVisibility.VISIBLE, var hiddenVisibility: AppSetVisibility = AppSetVisibility.HIDDEN, - var privateSpaceVisibility: AppSetVisibility = AppSetVisibility.VISIBLE ) { operator fun invoke(apps: List): List { @@ -24,12 +23,10 @@ class AppFilter( val hidden = LauncherPreferences.apps().hidden() ?: setOf() val favorites = LauncherPreferences.apps().favorites() ?: setOf() - val private = apps.filter { it.isPrivateSpaceApp }.map { it.app }.toSet() apps = apps.filter { info -> favoritesVisibility.predicate(favorites, info) && hiddenVisibility.predicate(hidden, info) - && privateSpaceVisibility.predicate(private, info) } if (LauncherPreferences.apps().hideBoundApps()) { diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt b/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt index d77bf93..519798d 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt @@ -9,17 +9,16 @@ import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.preferences.LauncherPreferences /** - * Stores information used to create [de.jrpie.android.launcher.ui.list.apps.AppsRecyclerAdapter] rows. + * Stores information used to create [AppsRecyclerAdapter] rows. */ class DetailedAppInfo( val app: AppInfo, val label: CharSequence, val icon: Drawable, - val isPrivateSpaceApp: Boolean, val isSystemApp: Boolean = false, ) { - constructor(activityInfo: LauncherActivityInfo, private: Boolean) : this( + constructor(activityInfo: LauncherActivityInfo) : this( AppInfo( activityInfo.applicationInfo.packageName, activityInfo.name, @@ -27,7 +26,6 @@ class DetailedAppInfo( ), activityInfo.label, activityInfo.getBadgedIcon(0), - private, activityInfo.applicationInfo.flags.and(ApplicationInfo.FLAG_SYSTEM) != 0 ) @@ -53,9 +51,7 @@ class DetailedAppInfo( companion object { fun fromAppInfo(appInfo: AppInfo, context: Context): DetailedAppInfo? { - return appInfo.getLauncherActivityInfo(context)?.let { - DetailedAppInfo(it, it.user == getPrivateSpaceUser(context)) - } + return appInfo.getLauncherActivityInfo(context)?.let { DetailedAppInfo(it) } } } } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/PrivateSpace.kt b/app/src/main/java/de/jrpie/android/launcher/apps/PrivateSpace.kt deleted file mode 100644 index 9b37d60..0000000 --- a/app/src/main/java/de/jrpie/android/launcher/apps/PrivateSpace.kt +++ /dev/null @@ -1,118 +0,0 @@ -package de.jrpie.android.launcher.apps - -import android.content.ActivityNotFoundException -import android.content.Context -import android.content.Intent -import android.content.pm.LauncherApps -import android.os.Build -import android.os.UserHandle -import android.os.UserManager -import android.provider.Settings -import android.widget.Toast -import de.jrpie.android.launcher.R -import de.jrpie.android.launcher.isDefaultHomeScreen -import de.jrpie.android.launcher.setDefaultHomeScreen - - -/* - * Checks whether the device supports private space. - */ -fun isPrivateSpaceSupported(): Boolean { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM -} - -fun getPrivateSpaceUser(context: Context): UserHandle? { - if (!isPrivateSpaceSupported()) { - return null - } - val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager - val launcherApps = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - return userManager.userProfiles.firstOrNull { u -> - launcherApps.getLauncherUserInfo(u)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE - } -} - -/** - * Check whether the user has created a private space and whether µLauncher can access it. - */ -fun isPrivateSpaceSetUp( - context: Context, - showToast: Boolean = false, - launchSettings: Boolean = false -): Boolean { - if (!isPrivateSpaceSupported()) { - if (showToast) { - Toast.makeText( - context, - context.getString(R.string.alert_requires_android_v), - Toast.LENGTH_LONG - ).show() - } - return false - } - val privateSpaceUser = getPrivateSpaceUser(context) - if (privateSpaceUser != null) { - return true - } - if (!isDefaultHomeScreen(context)) { - if (showToast) { - Toast.makeText( - context, - context.getString(R.string.toast_private_space_default_home_screen), - Toast.LENGTH_LONG - ).show() - } - if (launchSettings) { - setDefaultHomeScreen(context) - } - } else { - if (showToast) { - Toast.makeText( - context, - context.getString(R.string.toast_private_space_not_available), - Toast.LENGTH_LONG - ).show() - } - if (launchSettings) { - try { - context.startActivity(Intent(Settings.ACTION_PRIVACY_SETTINGS)) - } catch (_: ActivityNotFoundException) { - } - } - } - return false -} - -fun isPrivateSpaceLocked(context: Context): Boolean { - if (!isPrivateSpaceSupported()) { - return false - } - val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager - val privateSpaceUser = getPrivateSpaceUser(context) ?: return false - return userManager.isQuietModeEnabled(privateSpaceUser) -} -fun lockPrivateSpace(context: Context, lock: Boolean) { - if (!isPrivateSpaceSupported()) { - return - } - val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager - val privateSpaceUser = getPrivateSpaceUser(context) ?: return - userManager.requestQuietModeEnabled(lock, privateSpaceUser) -} - -fun togglePrivateSpaceLock(context: Context) { - if (!isPrivateSpaceSetUp(context, showToast = true, launchSettings = true)) { - return - } - - val lock = isPrivateSpaceLocked(context) - lockPrivateSpace(context, !lock) - if (!lock) { - Toast.makeText( - context, - context.getString(R.string.toast_private_space_locked), - Toast.LENGTH_LONG - ).show() - } -} - diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java index c216911..98496ce 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java @@ -30,7 +30,6 @@ import eu.jonahbauer.android.preference.annotations.Preferences; @Preference(name = "custom_names", type = HashMap.class, serializer = MapAppInfoStringPreferenceSerializer.class), @Preference(name = "hide_bound_apps", type = boolean.class, defaultValue = "false"), @Preference(name = "hide_paused_apps", type = boolean.class, defaultValue = "false"), - @Preference(name = "hide_private_space_apps", type = boolean.class, defaultValue = "false"), }), @PreferenceGroup(name = "list", prefix = "settings_list_", suffix = "_key", value = { @Preference(name = "layout", type = ListLayout.class, defaultValue = "DEFAULT") diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version1.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version1.kt index a61980a..d617127 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version1.kt +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version1.kt @@ -68,9 +68,9 @@ private fun Action.Companion.legacyFromPreference(id: String): Action? { val actionId = preferences.getString("$id.app", "")!! var u: Int? = preferences.getInt( "$id.user", - INVALID_USER + AppInfo.INVALID_USER ) - u = if (u == INVALID_USER) null else u + u = if (u == AppInfo.INVALID_USER) null else u return Action.legacyFromId(actionId, u) } @@ -80,9 +80,9 @@ private fun migrateAppInfoStringMap(key: String) { MapAppInfoStringPreferenceSerializer().serialize( preferences.getStringSet(key, setOf())?.mapNotNull { entry -> try { - val obj = JSONObject(entry) + val obj = JSONObject(entry); val info = AppInfo.legacyDeserialize(obj.getString("key")) - val value = obj.getString("value") + val value = obj.getString("value"); Pair(info, value) } catch (_: JSONException) { null diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/VersionUnknown.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/VersionUnknown.kt index a33670b..c61ca95 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/VersionUnknown.kt +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/VersionUnknown.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.SharedPreferences import android.util.Log import de.jrpie.android.launcher.preferences.LauncherPreferences +import de.jrpie.android.launcher.preferences.PREFERENCE_VERSION import de.jrpie.android.launcher.preferences.theme.Background import de.jrpie.android.launcher.preferences.theme.ColorTheme diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/serialization/PreferenceSerializers.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/serialization/PreferenceSerializers.kt index 041fe4d..4a745a2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/serialization/PreferenceSerializers.kt +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/serialization/PreferenceSerializers.kt @@ -15,7 +15,7 @@ import kotlinx.serialization.json.Json class SetAppInfoPreferenceSerializer : PreferenceSerializer?, java.util.Set?> { @Throws(PreferenceSerializationException::class) - override fun serialize(value: java.util.Set?): java.util.Set { + override fun serialize(value: java.util.Set?): java.util.Set? { return value?.map(AppInfo::serialize)?.toHashSet() as java.util.Set } @@ -29,7 +29,7 @@ class SetAppInfoPreferenceSerializer : class MapAppInfoStringPreferenceSerializer : PreferenceSerializer?, java.util.Set?> { - @Serializable + @Serializable() private class MapEntry(val key: AppInfo, val value: String) @Throws(PreferenceSerializationException::class) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt index b41eff3..42dc01b 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt @@ -216,7 +216,7 @@ class HomeActivity : UIObject, AppCompatActivity(), if (e1 == null) return false - val displayMetrics = DisplayMetrics() + val displayMetrics: DisplayMetrics = DisplayMetrics() windowManager.defaultDisplay.getMetrics(displayMetrics) val width = displayMetrics.widthPixels diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt index c4ecded..1fe5afb 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/ListActivity.kt @@ -11,20 +11,15 @@ import android.view.View import android.widget.Toast import android.window.OnBackInvokedDispatcher import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.content.res.AppCompatResources import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentPagerAdapter import androidx.viewpager.widget.ViewPager import com.google.android.material.tabs.TabLayout -import de.jrpie.android.launcher.Application 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.apps.isPrivateSpaceLocked -import de.jrpie.android.launcher.apps.isPrivateSpaceSetUp -import de.jrpie.android.launcher.apps.togglePrivateSpaceLock import de.jrpie.android.launcher.databinding.ListBinding import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.ui.UIObject @@ -35,8 +30,6 @@ 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 favoritesVisibility: AppFilter.Companion.AppSetVisibility = AppFilter.Companion.AppSetVisibility.VISIBLE -var privateSpaceVisibility: AppFilter.Companion.AppSetVisibility = - AppFilter.Companion.AppSetVisibility.VISIBLE var hiddenVisibility: AppFilter.Companion.AppSetVisibility = AppFilter.Companion.AppSetVisibility.HIDDEN var forGesture: String? = null @@ -51,30 +44,6 @@ class ListActivity : AppCompatActivity(), UIObject { private lateinit var binding: ListBinding - private fun updateLockIcon(locked: Boolean) { - binding.listLock.setImageDrawable( - AppCompatResources.getDrawable( - this, - if (locked) { - R.drawable.baseline_lock_24 - } else { - R.drawable.baseline_lock_open_24 - } - ) - ) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - binding.listLock.tooltipText = getString( - if (locked) { - R.string.tooltip_unlock_private_space - } else { - R.string.tooltip_lock_private_space - } - ) - } - } - - - enum class ListActivityIntention(val titleResource: Int) { VIEW(R.string.list_title_view), /* view list of apps */ PICK(R.string.list_title_pick) /* choose app or action to associate to a gesture */ @@ -101,10 +70,8 @@ class ListActivity : AppCompatActivity(), UIObject { favoritesVisibility = bundle.getSerializable("favoritesVisibility") as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility - privateSpaceVisibility = bundle.getSerializable("privateSpaceVisibility") - as? AppFilter.Companion.AppSetVisibility ?: privateSpaceVisibility hiddenVisibility = bundle.getSerializable("hiddenVisibility") - as? AppFilter.Companion.AppSetVisibility ?: hiddenVisibility + as? AppFilter.Companion.AppSetVisibility ?: favoritesVisibility if (intention != ListActivityIntention.VIEW) forGesture = bundle.getString("forGesture") @@ -119,31 +86,6 @@ class ListActivity : AppCompatActivity(), UIObject { LauncherAction.SETTINGS.launch(this@ListActivity) } - binding.listLock.visibility = - if (intention != ListActivityIntention.VIEW) { - View.GONE - } else if (!isPrivateSpaceSetUp(this)) { - View.GONE - } else if (LauncherPreferences.apps().hidePrivateSpaceApps()) { - if (privateSpaceVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { - View.VISIBLE - } else { - View.GONE - } - } else { - View.VISIBLE - } - - if (privateSpaceVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { - isPrivateSpaceSetUp(this, showToast = true, launchSettings = true) - if (isPrivateSpaceLocked(this)) { - togglePrivateSpaceLock(this) - } - } - updateLockIcon(isPrivateSpaceLocked(this)) - - val privateSpaceLocked = (this.applicationContext as Application).privateSpaceLocked - privateSpaceLocked.observe(this) { updateLockIcon(it) } // android:windowSoftInputMode="adjustResize" doesn't work in full screen. // workaround from https://stackoverflow.com/a/57623505 @@ -202,8 +144,6 @@ class ListActivity : AppCompatActivity(), UIObject { if (intention == ListActivityIntention.VIEW) { titleResource = if (hiddenVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { R.string.list_title_hidden - } else if (privateSpaceVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { - R.string.list_title_private_space } else if (favoritesVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { R.string.list_title_favorite } else { @@ -221,12 +161,6 @@ class ListActivity : AppCompatActivity(), UIObject { override fun setOnClicks() { binding.listClose.setOnClickListener { finish() } - binding.listLock.setOnClickListener { - togglePrivateSpaceLock(this) - if (privateSpaceVisibility == AppFilter.Companion.AppSetVisibility.EXCLUSIVE) { - finish() - } - } } override fun adjustLayout() { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ContextMenuActions.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ContextMenuActions.kt index 9636dc2..e09111e 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ContextMenuActions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ContextMenuActions.kt @@ -33,7 +33,7 @@ fun AppInfo.openSettings( } fun AppInfo.uninstall(activity: android.app.Activity) { - val packageName = this.packageName + val packageName = this.packageName.toString() val userId = this.user Log.i(LOG_TAG, "uninstalling $this") diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt index 3a6e403..c52f951 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt @@ -19,7 +19,6 @@ 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.privateSpaceVisibility import de.jrpie.android.launcher.ui.openSoftKeyboard @@ -73,7 +72,6 @@ class ListFragmentApps : Fragment(), UIObject { requireContext(), "", favoritesVisibility = favoritesVisibility, - privateSpaceVisibility = privateSpaceVisibility, hiddenVisibility = hiddenVisibility ), layout = LauncherPreferences.list().layout() diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt index 70a225d..fd3a738 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt @@ -45,6 +45,21 @@ class SettingsFragmentMeta : Fragment(), UIObject { super.onStart() } + // Rate App + // Just copied code from https://stackoverflow.com/q/10816757/12787264 + // that is how we write good software ^^ + + private fun rateIntentForUrl(url: String): Intent { + val intent = Intent( + Intent.ACTION_VIEW, + Uri.parse(String.format("%s?id=%s", url, this.requireContext().packageName)) + ) + var flags = Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_MULTIPLE_TASK + flags = flags or Intent.FLAG_ACTIVITY_NEW_DOCUMENT + intent.addFlags(flags) + return intent + } + override fun setOnClicks() { binding.settingsMetaButtonViewTutorial.setOnClickListener { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/tabs/TutorialFragmentConcept.kt b/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/tabs/TutorialFragmentConcept.kt index f0fd233..26d4141 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/tabs/TutorialFragmentConcept.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/tutorial/tabs/TutorialFragmentConcept.kt @@ -21,7 +21,7 @@ class TutorialFragmentConcept : Fragment(), UIObject { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - binding = TutorialConceptBinding.inflate(inflater, container, false) + val binding = TutorialConceptBinding.inflate(inflater, container, false) binding.tutorialConceptBadgeVersion.text = BuildConfig.VERSION_NAME return binding.root } diff --git a/app/src/main/res/drawable/baseline_lock_24.xml b/app/src/main/res/drawable/baseline_lock_24px.xml similarity index 100% rename from app/src/main/res/drawable/baseline_lock_24.xml rename to app/src/main/res/drawable/baseline_lock_24px.xml diff --git a/app/src/main/res/drawable/baseline_lock_open_24.xml b/app/src/main/res/drawable/baseline_lock_open_24.xml deleted file mode 100644 index f0f6ea3..0000000 --- a/app/src/main/res/drawable/baseline_lock_open_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/layout/list.xml b/app/src/main/res/layout/list.xml index e68c895..062cab4 100644 --- a/app/src/main/res/layout/list.xml +++ b/app/src/main/res/layout/list.xml @@ -32,7 +32,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" + android:layout_marginLeft="8dp" android:contentDescription="@string/settings" android:gravity="center" android:paddingLeft="16sp" @@ -53,8 +53,8 @@ android:text="@string/list_title_pick" android:textAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" android:textSize="30sp" - app:layout_constraintEnd_toStartOf="@id/list_lock" - app:layout_constraintStart_toEndOf="@id/list_settings" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 8b20aae..6f2acb4 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -2,5 +2,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 6ebdf63..53aabad 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -14,7 +14,6 @@ apps.custom_names apps.hide_bound_apps apps.hide_paused_apps - apps.hide_private_space_apps list.layout general.select_launcher diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 97d7384..9c07ed6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,7 +150,6 @@ Hidden apps Don\'t show apps that are bound to a gesture in the app list Hide paused apps - Hide private space from app list Layout of app list Default @@ -198,7 +197,6 @@ All Apps Favorite Apps Hidden Apps - Private Space Choose App Apps @@ -221,7 +219,6 @@ µLauncher Settings All Applications Favorite Applications - Private Space Toggle Private Space Lock Music: Louder Music: Quieter @@ -276,8 +273,6 @@ Private space unlocked Private space is not available µLauncher needs to be the default home screen to access private space. - Lock private space - Unlock private space Error: Locking the screen using accessibility is not supported on this device. Please use device admin instead. µLauncher - lock screen diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 406f81a..314f85f 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -151,11 +151,6 @@ android:title="@string/settings_apps_hide_paused_apps" android:defaultValue="false" /> - -