From ccfcf0aa811e507245eee0aded08b16ef8b93c28 Mon Sep 17 00:00:00 2001 From: Blaster4385 Date: Wed, 24 Jun 2026 09:29:38 +0530 Subject: feat: added app launcher in settings --- app/src/main/AndroidManifest.xml | 7 +++ .../dev/tablaster/dashpanel/AppLauncherFragment.kt | 51 ++++++++++++++++++++++ .../dev/tablaster/dashpanel/SettingsActivity.kt | 8 +++- .../dev/tablaster/dashpanel/SettingsFragment.kt | 16 +++++++ app/src/main/res/xml/preferences.xml | 5 +++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/dev/tablaster/dashpanel/AppLauncherFragment.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7491cfe..fdbde85 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,6 +9,13 @@ + + + + + + + (R.id.settings_toolbar)?.title = "App Launcher" + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + val context = preferenceManager.context + val screen = preferenceManager.createPreferenceScreen(context) + + val category = PreferenceCategory(context).apply { + title = "Installed Applications" + } + screen.addPreference(category) + + val packageManager = requireContext().packageManager + val intent = Intent(Intent.ACTION_MAIN, null).apply { + addCategory(Intent.CATEGORY_LAUNCHER) + } + val appList = packageManager.queryIntentActivities(intent, 0) + + appList.sortedBy { it.loadLabel(packageManager).toString().lowercase() }.forEach { app -> + val appPreference = Preference(context).apply { + title = app.loadLabel(packageManager) + icon = app.loadIcon(packageManager) + + setOnPreferenceClickListener { + val launchIntent = packageManager.getLaunchIntentForPackage(app.activityInfo.packageName) + launchIntent?.let { + startActivity(it) + } + true + } + } + category.addPreference(appPreference) + } + + preferenceScreen = screen + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/tablaster/dashpanel/SettingsActivity.kt b/app/src/main/java/dev/tablaster/dashpanel/SettingsActivity.kt index d326cd7..18aacf6 100644 --- a/app/src/main/java/dev/tablaster/dashpanel/SettingsActivity.kt +++ b/app/src/main/java/dev/tablaster/dashpanel/SettingsActivity.kt @@ -11,7 +11,13 @@ class SettingsActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) val toolbar : MaterialToolbar = findViewById(R.id.settings_toolbar) - toolbar.setNavigationOnClickListener{ openMain() } + toolbar.setNavigationOnClickListener { + if (supportFragmentManager.backStackEntryCount > 0) { + supportFragmentManager.popBackStack() + } else { + openMain() + } + } supportFragmentManager .beginTransaction() .replace(R.id.settings_container, SettingsFragment()) diff --git a/app/src/main/java/dev/tablaster/dashpanel/SettingsFragment.kt b/app/src/main/java/dev/tablaster/dashpanel/SettingsFragment.kt index fe86dfe..c93f0e4 100644 --- a/app/src/main/java/dev/tablaster/dashpanel/SettingsFragment.kt +++ b/app/src/main/java/dev/tablaster/dashpanel/SettingsFragment.kt @@ -1,19 +1,35 @@ package dev.tablaster.dashpanel import android.os.Bundle +import android.view.View import android.widget.Toast import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.core.content.edit +import com.google.android.material.appbar.MaterialToolbar class SettingsFragment : PreferenceFragmentCompat(), SettingsPassCodeFragment.PasscodeListener { + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + requireActivity().findViewById(R.id.settings_toolbar)?.title = "Settings" + } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) findPreference("settings_passcode")?.setOnPreferenceClickListener { SettingsPassCodeFragment().show(childFragmentManager, "settingsPasscodeDialog") true } + + findPreference("app_launcher")?.setOnPreferenceClickListener { + parentFragmentManager.beginTransaction() + .replace(R.id.settings_container, AppLauncherFragment()) + .addToBackStack(null) + .commit() + true + } } + override fun onPasscodeSet(passcode: Int) { preferenceManager.sharedPreferences ?.edit() { diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 0080429..7361bb9 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -127,4 +127,9 @@ app:summary="@string/sensor_battery_summary" app:dependency="mqtt_enabled" /> + + \ No newline at end of file -- cgit