aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaster4385 <[email protected]>2026-06-24 09:29:38 +0530
committerBlaster4385 <[email protected]>2026-06-24 09:29:38 +0530
commitccfcf0aa811e507245eee0aded08b16ef8b93c28 (patch)
tree09d21c7dfe6243cfea331cb46cec16a730cc8bf9
parent7575f1c5938223386fce5c4b7e626a51f8d99d3e (diff)
feat: added app launcher in settings
-rw-r--r--app/src/main/AndroidManifest.xml7
-rw-r--r--app/src/main/java/dev/tablaster/dashpanel/AppLauncherFragment.kt51
-rw-r--r--app/src/main/java/dev/tablaster/dashpanel/SettingsActivity.kt8
-rw-r--r--app/src/main/java/dev/tablaster/dashpanel/SettingsFragment.kt16
-rw-r--r--app/src/main/res/xml/preferences.xml5
5 files changed, 86 insertions, 1 deletions
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 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
+ <queries>
+ <intent>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent>
+ </queries>
+
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
diff --git a/app/src/main/java/dev/tablaster/dashpanel/AppLauncherFragment.kt b/app/src/main/java/dev/tablaster/dashpanel/AppLauncherFragment.kt
new file mode 100644
index 0000000..f689b36
--- /dev/null
+++ b/app/src/main/java/dev/tablaster/dashpanel/AppLauncherFragment.kt
@@ -0,0 +1,51 @@
+package dev.tablaster.dashpanel
+
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
+import androidx.preference.PreferenceFragmentCompat
+import com.google.android.material.appbar.MaterialToolbar
+
+class AppLauncherFragment : PreferenceFragmentCompat() {
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ requireActivity().findViewById<MaterialToolbar>(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<MaterialToolbar>(R.id.settings_toolbar)?.title = "Settings"
+ }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
findPreference<Preference>("settings_passcode")?.setOnPreferenceClickListener {
SettingsPassCodeFragment().show(childFragmentManager, "settingsPasscodeDialog")
true
}
+
+ findPreference<Preference>("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" />
+ <Preference
+ android:key="app_launcher"
+ app:title="App Launcher"
+ app:summary="Launch installed applications" />
+
</PreferenceScreen> \ No newline at end of file