diff --git a/.idea/misc.xml b/.idea/misc.xml
index 4a65853..8f51cae 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,6 +8,11 @@
+
+
+
+
+
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 5507db6..f3452a2 100644
--- a/app/src/main/java/de/jrpie/android/launcher/Application.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/Application.kt
@@ -1,6 +1,7 @@
package de.jrpie.android.launcher
import android.content.Context
+import de.jrpie.android.launcher.preferences.LauncherPreferences
class Application: android.app.Application() {
override fun onCreate() {
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 bd45269..dba49f2 100644
--- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt
@@ -39,6 +39,7 @@ import android.widget.Button
import android.widget.ImageView
import android.widget.Switch
import android.widget.Toast
+import androidx.annotation.RequiresApi
import de.jrpie.android.launcher.list.ListActivity
import de.jrpie.android.launcher.list.apps.AppInfo
import de.jrpie.android.launcher.list.apps.AppsRecyclerAdapter
@@ -359,24 +360,6 @@ fun loadApps(packageManager: PackageManager, context: Context) {
appsList.addAll(loadList)
}
-fun setWindowFlags(window: Window) {
- window.setFlags(0, 0) // clear flags
- // Display notification bar
- if (LauncherPreferences.display().fullScreen())
- window.setFlags(
- WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN
- )
- else window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
-
- // Screen Timeout
- if (LauncherPreferences.display().screenTimeoutDisabled())
- window.setFlags(
- WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
- WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
- )
- else window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
-}
// Used in Tutorial and Settings `ActivityOnResult`
fun saveListActivityChoice(context: Context, data: Intent?) {
@@ -397,27 +380,6 @@ fun openSoftKeyboard(context: Context, view: View) {
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
-/* Bitmaps */
-fun setButtonColor(btn: Button, color: Int) {
- if (Build.VERSION.SDK_INT >= 29)
- btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.MULTIPLY)
- else {
- // tested with API 17 (Android 4.4.2 on S4 mini) -> fails
- // tested with API 28 (Android 9 on S8) -> necessary
- btn.background.colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)
- }
- // not setting it in any other case (yet), unable to find a good solution
-}
-
-fun setSwitchColor(sw: Switch, trackColor: Int) {
- if (Build.VERSION.SDK_INT >= 29) {
- sw.trackDrawable.colorFilter = BlendModeColorFilter(trackColor, BlendMode.MULTIPLY)
- }
- else {
- sw.trackDrawable.colorFilter = PorterDuffColorFilter(trackColor, PorterDuff.Mode.SRC_ATOP)
- }
-}
-
// Taken from: https://stackoverflow.com/a/30340794/12787264
fun transformGrayscale(imageView: ImageView){
val matrix = ColorMatrix()
diff --git a/app/src/main/java/de/jrpie/android/launcher/Gesture.kt b/app/src/main/java/de/jrpie/android/launcher/Gesture.kt
index 9bf5204..8990da3 100644
--- a/app/src/main/java/de/jrpie/android/launcher/Gesture.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/Gesture.kt
@@ -2,6 +2,7 @@ package de.jrpie.android.launcher
import android.app.Activity
import android.content.Context
+import de.jrpie.android.launcher.preferences.LauncherPreferences
/**
* @param id internal id to serialize the action. Used as a key in shared preferences.
diff --git a/app/src/main/java/de/jrpie/android/launcher/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/HomeActivity.kt
index cd690cc..1eafe50 100644
--- a/app/src/main/java/de/jrpie/android/launcher/HomeActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/HomeActivity.kt
@@ -1,18 +1,19 @@
package de.jrpie.android.launcher
import android.content.Intent
+import android.content.res.Resources
import android.os.AsyncTask
import android.os.Bundle
import android.view.GestureDetector
import android.view.KeyEvent
import android.view.MotionEvent
import androidx.appcompat.app.AppCompatActivity
-import androidx.core.app.AppLaunchChecker
import androidx.core.view.GestureDetectorCompat
import androidx.core.view.isVisible
-import de.jrpie.android.launcher.BuildConfig.VERSION_NAME
import de.jrpie.android.launcher.databinding.HomeBinding
import de.jrpie.android.launcher.list.other.LauncherAction
+import de.jrpie.android.launcher.preferences.LauncherPreferences
+import de.jrpie.android.launcher.preferences.migrateToNewVersion
import de.jrpie.android.launcher.tutorial.TutorialActivity
import java.text.SimpleDateFormat
import java.util.*
@@ -120,6 +121,12 @@ class HomeActivity: UIObject, AppCompatActivity(),
}
}
+ override fun getTheme(): Resources.Theme {
+ val mTheme = modifyTheme(super.getTheme())
+ mTheme.applyStyle(R.style.backgroundWallpaper, true)
+ return mTheme
+ }
+
override fun onResume() {
super.onResume()
updateClock()
@@ -247,4 +254,8 @@ class HomeActivity: UIObject, AppCompatActivity(),
override fun onShowPress(event: MotionEvent) {}
override fun onSingleTapUp(event: MotionEvent): Boolean { return false }
+ override fun isHomeScreen(): Boolean {
+ return true
+ }
+
}
diff --git a/app/src/main/java/de/jrpie/android/launcher/UIObject.kt b/app/src/main/java/de/jrpie/android/launcher/UIObject.kt
index 894f948..7bf0fd7 100644
--- a/app/src/main/java/de/jrpie/android/launcher/UIObject.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/UIObject.kt
@@ -1,22 +1,61 @@
package de.jrpie.android.launcher
import android.app.Activity
+import android.content.res.Resources
+import android.os.Build
+import android.view.Window
+import android.view.WindowManager
+import de.jrpie.android.launcher.preferences.LauncherPreferences
/**
* An interface implemented by every [Activity], Fragment etc. in Launcher.
* It handles themes and window flags - a useful abstraction as it is the same everywhere.
*/
+fun setWindowFlags(window: Window, homeScreen: Boolean) {
+ window.setFlags(0, 0) // clear flags
+ // Display notification bar
+ if (LauncherPreferences.display().fullScreen())
+ window.setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
+ )
+ else window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
+
+ // Screen Timeout
+ if (LauncherPreferences.display().screenTimeoutDisabled())
+ window.setFlags(
+ WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
+ WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ )
+ else window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
+
+ if (!homeScreen) {
+ LauncherPreferences.theme().background().applyToWindow(window)
+
+ }
+
+}
+
interface UIObject {
fun onStart() {
- if (this is Activity) setWindowFlags(window)
+ if (this is Activity) setWindowFlags(window, isHomeScreen())
- applyTheme()
setOnClicks()
adjustLayout()
}
+ fun modifyTheme(theme: Resources.Theme): Resources.Theme {
+ LauncherPreferences.theme().colorTheme().applyToTheme(theme)
+ LauncherPreferences.theme().background().applyToTheme(theme)
+ LauncherPreferences.theme().font().applyToTheme(theme)
- // Don't use actual themes, rather create them on the fly for faster theme-switching
- fun applyTheme() { }
+ return theme
+ }
+
+ // fun applyTheme() { }
fun setOnClicks() { }
fun adjustLayout() { }
+
+ fun isHomeScreen(): Boolean {
+ return false
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/de/jrpie/android/launcher/list/ListActivity.kt b/app/src/main/java/de/jrpie/android/launcher/list/ListActivity.kt
index 946fa1a..1bc304e 100644
--- a/app/src/main/java/de/jrpie/android/launcher/list/ListActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/list/ListActivity.kt
@@ -3,6 +3,7 @@ package de.jrpie.android.launcher.list
import android.app.Activity
import android.content.Context
import android.content.Intent
+import android.content.res.Resources
import android.graphics.Rect
import android.os.Build
import android.os.Bundle
@@ -14,7 +15,6 @@ 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.LauncherPreferences
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_UNINSTALL
import de.jrpie.android.launcher.UIObject
@@ -22,6 +22,7 @@ import de.jrpie.android.launcher.databinding.ListBinding
import de.jrpie.android.launcher.list.apps.ListFragmentApps
import de.jrpie.android.launcher.list.other.LauncherAction
import de.jrpie.android.launcher.list.other.ListFragmentOther
+import de.jrpie.android.launcher.preferences.LauncherPreferences
// TODO: Better solution for this intercommunication functionality (used in list-fragments)
@@ -102,10 +103,8 @@ class ListActivity : AppCompatActivity(), UIObject {
}
}
- override fun applyTheme() {
- // list_close.setTextColor(vibrantColor)
-
- binding.listTabs.setSelectedTabIndicatorColor(LauncherPreferences.theme().vibrant())
+ override fun getTheme(): Resources.Theme {
+ return modifyTheme(super.getTheme())
}
override fun setOnClicks() {
diff --git a/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt
index 155d7e2..86fdb6f 100644
--- a/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt
@@ -12,7 +12,6 @@ import android.widget.ImageView
import android.widget.PopupMenu
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
-import de.jrpie.android.launcher.LauncherPreferences
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
import de.jrpie.android.launcher.appsList
@@ -21,6 +20,7 @@ import de.jrpie.android.launcher.launchApp
import de.jrpie.android.launcher.list.ListActivity
import de.jrpie.android.launcher.loadApps
import de.jrpie.android.launcher.openAppSettings
+import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.transformGrayscale
import de.jrpie.android.launcher.uninstallApp
import java.util.*
@@ -66,7 +66,7 @@ class AppsRecyclerAdapter(val activity: Activity,
viewHolder.textView.text = appLabel
viewHolder.img.setImageDrawable(appIcon)
- if (LauncherPreferences.theme().theme() == "dark") transformGrayscale(
+ if (LauncherPreferences.theme().monochromeIcons()) transformGrayscale(
viewHolder.img
)
diff --git a/app/src/main/java/de/jrpie/android/launcher/list/apps/ListFragmentApps.kt b/app/src/main/java/de/jrpie/android/launcher/list/apps/ListFragmentApps.kt
index 70f303d..72f3f48 100644
--- a/app/src/main/java/de/jrpie/android/launcher/list/apps/ListFragmentApps.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/list/apps/ListFragmentApps.kt
@@ -6,13 +6,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
-import de.jrpie.android.launcher.LauncherPreferences
import de.jrpie.android.launcher.UIObject
import de.jrpie.android.launcher.databinding.ListAppsBinding
import de.jrpie.android.launcher.list.ListActivity
import de.jrpie.android.launcher.list.forGesture
import de.jrpie.android.launcher.list.intention
import de.jrpie.android.launcher.openSoftKeyboard
+import de.jrpie.android.launcher.preferences.LauncherPreferences
/**
@@ -36,9 +36,6 @@ class ListFragmentApps : Fragment(), UIObject {
super.onStart()
}
- override fun applyTheme() {
- }
-
override fun setOnClicks() { }
override fun adjustLayout() {
diff --git a/app/src/main/java/de/jrpie/android/launcher/LauncherPreferences$Config.java b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
similarity index 78%
rename from app/src/main/java/de/jrpie/android/launcher/LauncherPreferences$Config.java
rename to app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
index 9b5a047..10c4b4d 100644
--- a/app/src/main/java/de/jrpie/android/launcher/LauncherPreferences$Config.java
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
@@ -1,11 +1,15 @@
-package de.jrpie.android.launcher;
+package de.jrpie.android.launcher.preferences;
+import de.jrpie.android.launcher.R;
+import de.jrpie.android.launcher.preferences.theme.Background;
+import de.jrpie.android.launcher.preferences.theme.ColorTheme;
+import de.jrpie.android.launcher.preferences.theme.Font;
import eu.jonahbauer.android.preference.annotations.Preference;
import eu.jonahbauer.android.preference.annotations.PreferenceGroup;
import eu.jonahbauer.android.preference.annotations.Preferences;
@Preferences(
- name = "de.jrpie.android.launcher.LauncherPreferences",
+ name = "de.jrpie.android.launcher.preferences.LauncherPreferences",
makeFile = true,
r = R.class,
value = {
@@ -21,9 +25,10 @@ import eu.jonahbauer.android.preference.annotations.Preferences;
}),
@PreferenceGroup(name = "theme", prefix = "settings_theme_", suffix = "_key", value = {
@Preference(name = "wallpaper", type = void.class),
- @Preference(name = "theme", type = String.class), // TODO: change to enum
- @Preference(name = "dominant", type = int.class),
- @Preference(name = "vibrant", type = int.class),
+ @Preference(name = "color_theme", type = ColorTheme.class, defaultValue = "DEFAULT"),
+ @Preference(name = "background", type = Background.class, defaultValue = "BLUR"),
+ @Preference(name = "font", type = Font.class, defaultValue = "HACK"),
+ @Preference(name = "monochrome_icons", type = boolean.class, defaultValue = "false"),
}),
@PreferenceGroup(name = "clock", prefix = "settings_clock_", suffix = "_key", value = {
@Preference(name = "date_visible", type = boolean.class, defaultValue = "true"),
diff --git a/app/src/main/java/de/jrpie/android/launcher/Preferences.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt
similarity index 67%
rename from app/src/main/java/de/jrpie/android/launcher/Preferences.kt
rename to app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt
index 8aa73ae..6012819 100644
--- a/app/src/main/java/de/jrpie/android/launcher/Preferences.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/Preferences.kt
@@ -1,9 +1,11 @@
-package de.jrpie.android.launcher
+package de.jrpie.android.launcher.preferences
import android.app.Activity
import android.content.Context
import android.content.Intent
import de.jrpie.android.launcher.BuildConfig.VERSION_CODE
+import de.jrpie.android.launcher.Gesture
+import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.tutorial.TutorialActivity
@@ -22,10 +24,10 @@ fun migrateToNewVersion(activity: Activity) {
* were not stored anywhere. Now they have to be stored:
* -> we just reset them using newly implemented functions
*/
- when (LauncherPreferences.theme().theme()) {
+ /*when (LauncherPreferences.theme().colorTheme()) {
"finn" -> resetToDefaultTheme(activity)
"dark" -> resetToDarkTheme(activity)
- }
+ } */
LauncherPreferences.internal().versionCode(VERSION_CODE)
// show the new tutorial
activity.startActivity(Intent(activity, TutorialActivity::class.java))
@@ -48,25 +50,5 @@ fun resetSettings(context: Context) {
LauncherPreferences.theme().vibrant(vibrantColor)
}
-fun resetToDefaultTheme(activity: Activity) {
- val dominantColor = activity.resources.getColor(R.color.finnmglasTheme_background_color)
- val vibrantColor = activity.resources.getColor(R.color.finnmglasTheme_accent_color)
-
- LauncherPreferences.theme().dominant(dominantColor)
- LauncherPreferences.theme().vibrant(vibrantColor)
-
- activity.recreate()
-}
-
-fun resetToDarkTheme(activity: Activity) {
- val dominantColor = activity.resources.getColor(R.color.darkTheme_background_color)
- val vibrantColor = activity.resources.getColor(R.color.darkTheme_accent_color)
-
- LauncherPreferences.theme().dominant(dominantColor)
- LauncherPreferences.theme().vibrant(vibrantColor)
-
- activity.recreate()
-}
-
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/Background.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/Background.kt
new file mode 100644
index 0000000..599fdf6
--- /dev/null
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/Background.kt
@@ -0,0 +1,51 @@
+package de.jrpie.android.launcher.preferences.theme
+
+import android.content.res.Resources
+import android.os.Build
+import android.view.Window
+import android.view.WindowManager
+import de.jrpie.android.launcher.R
+
+enum class Background(val id: Int, val dim: Boolean = false, val blur: Boolean = false) {
+ TRANSPARENT(R.style.backgroundWallpaper),
+ DIM(R.style.backgroundWallpaper, dim = true),
+ BLUR(R.style.backgroundWallpaper, dim = true, blur = true),
+ SOLID(R.style.backgroundSolid),
+ ;
+
+ fun applyToTheme(theme: Resources.Theme) {
+ theme.applyStyle(id, true)
+ }
+
+ fun applyToWindow(window: Window) {
+ val layoutParams: WindowManager.LayoutParams = window.attributes
+ var dimAmount = 0.5f
+ var dim = this.dim
+ var blur = this.blur
+
+ // replace blur by more intense dim on old devices
+ if (blur && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ blur = false
+ dimAmount += 0.3f
+ }
+
+ if (dim) {
+ layoutParams.dimAmount = dimAmount
+ window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
+ } else {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ if (blur) {
+ window.addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND)
+ layoutParams.blurBehindRadius = 10
+ } else {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND)
+ layoutParams.blurBehindRadius = 0
+ }
+ }
+
+ window.setAttributes(layoutParams)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt
new file mode 100644
index 0000000..b4c9db8
--- /dev/null
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt
@@ -0,0 +1,14 @@
+package de.jrpie.android.launcher.preferences.theme
+
+import android.content.res.Resources
+import de.jrpie.android.launcher.R
+
+enum class ColorTheme(val id: Int) {
+ DEFAULT(R.style.colorThemeDefault),
+ DARK(R.style.colorThemeDark),
+ ;
+
+ fun applyToTheme(theme: Resources.Theme) {
+ theme.applyStyle(id, true)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/Font.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/Font.kt
new file mode 100644
index 0000000..15d9398
--- /dev/null
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/Font.kt
@@ -0,0 +1,14 @@
+package de.jrpie.android.launcher.preferences.theme
+
+import android.content.res.Resources
+import de.jrpie.android.launcher.R
+
+enum class Font(val id: Int) {
+ HACK(R.style.fontHack),
+ SYSTEM_DEFAULT(R.style.fontSystemDefault),
+ ;
+
+ fun applyToTheme(theme: Resources.Theme) {
+ theme.applyStyle(id, true)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/SettingsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/settings/SettingsActivity.kt
index f543242..c021f34 100644
--- a/app/src/main/java/de/jrpie/android/launcher/settings/SettingsActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/settings/SettingsActivity.kt
@@ -2,6 +2,8 @@ package de.jrpie.android.launcher.settings
import android.content.Context
import android.content.Intent
+import android.content.SharedPreferences
+import android.content.res.Resources
import android.os.Bundle
import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity
@@ -12,6 +14,7 @@ import de.jrpie.android.launcher.databinding.SettingsBinding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
+import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.settings.actions.SettingsFragmentActions
import de.jrpie.android.launcher.settings.launcher.SettingsFragmentLauncher
import de.jrpie.android.launcher.settings.meta.SettingsFragmentMeta
@@ -26,6 +29,13 @@ import de.jrpie.android.launcher.settings.meta.SettingsFragmentMeta
* Settings are closed automatically if the activity goes `onPause` unexpectedly.
*/
class SettingsActivity: AppCompatActivity(), UIObject {
+
+ private var sharedPreferencesListener =
+ SharedPreferences.OnSharedPreferenceChangeListener { _,prefKey ->
+ if(prefKey?.startsWith("theme.") == true) {
+ recreate()
+ }
+ }
private lateinit var binding: SettingsBinding
override fun onCreate(savedInstanceState: Bundle?) {
@@ -46,12 +56,16 @@ class SettingsActivity: AppCompatActivity(), UIObject {
override fun onStart() {
super.onStart()
super.onStart()
+ LauncherPreferences.getSharedPreferences().registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
}
- override fun applyTheme() {
- //settings_system.setTextColor(vibrantColor)
- //settings_close.setTextColor(vibrantColor)
- binding.settingsTabs.setSelectedTabIndicatorColor(LauncherPreferences.theme().vibrant())
+ override fun onPause() {
+ LauncherPreferences.getSharedPreferences().unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener)
+ super.onPause()
+ }
+
+ override fun getTheme(): Resources.Theme {
+ return modifyTheme(super.getTheme())
}
override fun setOnClicks(){
diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt
index 61346ea..bd0fa19 100644
--- a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt
@@ -8,12 +8,10 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
-import de.jrpie.android.launcher.LauncherPreferences
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.UIObject
import de.jrpie.android.launcher.databinding.SettingsActionsBinding
import de.jrpie.android.launcher.list.ListActivity
-import de.jrpie.android.launcher.setButtonColor
/**
@@ -43,12 +41,6 @@ SettingsFragmentActions : Fragment(), UIObject {
}
- override fun applyTheme() {
- val vibrantColor = LauncherPreferences.theme().vibrant()
- setButtonColor(binding!!.settingsActionsButtonViewApps, vibrantColor)
- setButtonColor(binding!!.settingsActionsButtonInstallApps, vibrantColor)
- }
-
override fun setOnClicks() {
// App management buttons
diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt
index 9ff4f5a..50bfa6c 100644
--- a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt
@@ -18,6 +18,7 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import de.jrpie.android.launcher.list.other.LauncherAction
import de.jrpie.android.launcher.databinding.SettingsActionsRecyclerBinding
+import de.jrpie.android.launcher.preferences.LauncherPreferences
import java.lang.Exception
/**
@@ -116,12 +117,9 @@ class ActionsRecyclerAdapter(val activity: Activity):
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
val gesture = gesturesList[i]
- val vibrantColor = LauncherPreferences.theme().vibrant()
viewHolder.textView.text = gesture.getLabel(activity)
- setButtonColor(viewHolder.chooseButton, vibrantColor)
- if (LauncherPreferences.theme().theme() == "dark") transformGrayscale(
- viewHolder.img
- )
+ if (LauncherPreferences.theme().monochromeIcons())
+ transformGrayscale( viewHolder.img )
updateViewHolder(gesture, viewHolder)
viewHolder.img.setOnClickListener{ chooseApp(gesture) }
viewHolder.chooseButton.setOnClickListener{ chooseApp(gesture) }
diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/launcher/SettingsFragmentLauncher.kt b/app/src/main/java/de/jrpie/android/launcher/settings/launcher/SettingsFragmentLauncher.kt
index 2d4b29b..c8240bf 100644
--- a/app/src/main/java/de/jrpie/android/launcher/settings/launcher/SettingsFragmentLauncher.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/settings/launcher/SettingsFragmentLauncher.kt
@@ -4,10 +4,9 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
-import de.jrpie.android.launcher.LauncherPreferences
+import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.setDefaultHomeScreen
-import eu.jonahbauer.android.preference.annotations.Preference
/**
@@ -18,15 +17,14 @@ import eu.jonahbauer.android.preference.annotations.Preference
class SettingsFragmentLauncher : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
- setPreferencesFromResource(R.xml.preferences, rootKey)
preferenceManager.sharedPreferencesName = getString(R.string.preference_file_key)
preferenceManager.sharedPreferencesMode = Context.MODE_PRIVATE
+ setPreferencesFromResource(R.xml.preferences, rootKey)
val selectWallpaper = findPreference(LauncherPreferences.theme().keys().wallpaper())
selectWallpaper?.setOnPreferenceClickListener {
// https://github.com/LineageOS/android_packages_apps_Trebuchet/blob/6caab89b21b2b91f0a439e1fd8c4510dcb255819/src/com/android/launcher3/views/OptionsPopupView.java#L271
val intent = Intent(Intent.ACTION_SET_WALLPAPER)
- //.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
.putExtra("com.android.wallpaper.LAUNCH_SOURCE", "app_launched_launcher")
.putExtra("com.android.launcher3.WALLPAPER_FLAVOR", "focus_wallpaper")
startActivity(intent)
diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/meta/SettingsFragmentMeta.kt b/app/src/main/java/de/jrpie/android/launcher/settings/meta/SettingsFragmentMeta.kt
index 0c9e27b..93c883e 100644
--- a/app/src/main/java/de/jrpie/android/launcher/settings/meta/SettingsFragmentMeta.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/settings/meta/SettingsFragmentMeta.kt
@@ -8,12 +8,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
-import de.jrpie.android.launcher.LauncherPreferences
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.UIObject
import de.jrpie.android.launcher.openNewTabWindow
-import de.jrpie.android.launcher.resetSettings
-import de.jrpie.android.launcher.setButtonColor
+import de.jrpie.android.launcher.preferences.resetSettings
import de.jrpie.android.launcher.tutorial.TutorialActivity
import de.jrpie.android.launcher.databinding.SettingsMetaBinding
@@ -56,16 +54,6 @@ class SettingsFragmentMeta : Fragment(), UIObject {
return intent
}
- override fun applyTheme() {
- val vibrantColor = LauncherPreferences.theme().vibrant()
- setButtonColor(binding.settingsMetaButtonViewTutorial, vibrantColor)
- setButtonColor(binding.settingsMetaButtonResetSettings, vibrantColor)
- setButtonColor(binding.settingsMetaButtonReportBug, vibrantColor)
- setButtonColor(binding.settingsMetaButtonContact, vibrantColor)
- setButtonColor(binding.settingsMetaButtonForkContact, vibrantColor)
- setButtonColor(binding.settingsMetaButtonPrivacy, vibrantColor)
- }
-
override fun setOnClicks() {
binding.settingsMetaButtonViewTutorial.setOnClickListener {
diff --git a/app/src/main/java/de/jrpie/android/launcher/tutorial/TutorialActivity.kt b/app/src/main/java/de/jrpie/android/launcher/tutorial/TutorialActivity.kt
index 75cf85b..62df8b6 100644
--- a/app/src/main/java/de/jrpie/android/launcher/tutorial/TutorialActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/tutorial/TutorialActivity.kt
@@ -8,11 +8,11 @@ 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.LauncherPreferences
+import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
import de.jrpie.android.launcher.UIObject
-import de.jrpie.android.launcher.resetSettings
+import de.jrpie.android.launcher.preferences.resetSettings
import de.jrpie.android.launcher.saveListActivityChoice
import de.jrpie.android.launcher.tutorial.tabs.TutorialFragmentConcept
import de.jrpie.android.launcher.tutorial.tabs.TutorialFragmentFinish
diff --git a/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentFinish.kt b/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentFinish.kt
index 72edb1f..f4598b1 100644
--- a/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentFinish.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentFinish.kt
@@ -8,6 +8,7 @@ import android.view.ViewGroup
import de.jrpie.android.launcher.*
import de.jrpie.android.launcher.BuildConfig.VERSION_CODE
import de.jrpie.android.launcher.databinding.TutorialFinishBinding
+import de.jrpie.android.launcher.preferences.LauncherPreferences
/**
* The [TutorialFragmentFinish] is a used as a tab in the TutorialActivity.
@@ -31,12 +32,6 @@ class TutorialFragmentFinish : Fragment(), UIObject {
super.onStart()
}
- override fun applyTheme() {
- val vibrantColor = LauncherPreferences.theme().vibrant()
- setButtonColor(binding.tutorialFinishButtonStart, vibrantColor)
- binding.tutorialFinishButtonStart.blink()
- }
-
override fun setOnClicks() {
super.setOnClicks()
binding.tutorialFinishButtonStart.setOnClickListener{ finishTutorial() }
diff --git a/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentStart.kt b/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentStart.kt
index cd21970..433da9b 100644
--- a/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentStart.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/tutorial/tabs/TutorialFragmentStart.kt
@@ -21,6 +21,7 @@ class TutorialFragmentStart : Fragment(), UIObject {
savedInstanceState: Bundle?
): View {
binding = TutorialStartBinding.inflate(inflater, container, false)
+ binding.tutorialStartIconRight.blink()
return binding.root
}
@@ -28,12 +29,4 @@ class TutorialFragmentStart : Fragment(), UIObject {
super.onStart()
super.onStart()
}
-
- override fun applyTheme() {
- val vibrantColor = LauncherPreferences.theme().vibrant()
-
- binding.tutorialStartIconRight.setTextColor(vibrantColor)
- binding.tutorialStartIconRight.blink()
-
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/baseline_close_24.xml b/app/src/main/res/drawable/baseline_close_24.xml
index bcc56a1..6633ab1 100644
--- a/app/src/main/res/drawable/baseline_close_24.xml
+++ b/app/src/main/res/drawable/baseline_close_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_menu_24.xml b/app/src/main/res/drawable/baseline_menu_24.xml
index 45ca7a9..bb74ee9 100644
--- a/app/src/main/res/drawable/baseline_menu_24.xml
+++ b/app/src/main/res/drawable/baseline_menu_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_more_horiz_24.xml b/app/src/main/res/drawable/baseline_more_horiz_24.xml
index ccdca9d..5cf9689 100644
--- a/app/src/main/res/drawable/baseline_more_horiz_24.xml
+++ b/app/src/main/res/drawable/baseline_more_horiz_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_not_interested_24.xml b/app/src/main/res/drawable/baseline_not_interested_24.xml
index dabcefb..ae05a1b 100644
--- a/app/src/main/res/drawable/baseline_not_interested_24.xml
+++ b/app/src/main/res/drawable/baseline_not_interested_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_notifications_24.xml b/app/src/main/res/drawable/baseline_notifications_24.xml
index 7e0369f..9425400 100644
--- a/app/src/main/res/drawable/baseline_notifications_24.xml
+++ b/app/src/main/res/drawable/baseline_notifications_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_search_24.xml b/app/src/main/res/drawable/baseline_search_24.xml
index f4e055b..309824f 100644
--- a/app/src/main/res/drawable/baseline_search_24.xml
+++ b/app/src/main/res/drawable/baseline_search_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_settings_24.xml b/app/src/main/res/drawable/baseline_settings_24.xml
index 21228c7..0916edd 100644
--- a/app/src/main/res/drawable/baseline_settings_24.xml
+++ b/app/src/main/res/drawable/baseline_settings_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_settings_applications_24.xml b/app/src/main/res/drawable/baseline_settings_applications_24.xml
index bf969f5..854b024 100644
--- a/app/src/main/res/drawable/baseline_settings_applications_24.xml
+++ b/app/src/main/res/drawable/baseline_settings_applications_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_skip_next_24.xml b/app/src/main/res/drawable/baseline_skip_next_24.xml
index e62ff25..53ea058 100644
--- a/app/src/main/res/drawable/baseline_skip_next_24.xml
+++ b/app/src/main/res/drawable/baseline_skip_next_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_skip_previous_24.xml b/app/src/main/res/drawable/baseline_skip_previous_24.xml
index b333dcd..76574ae 100644
--- a/app/src/main/res/drawable/baseline_skip_previous_24.xml
+++ b/app/src/main/res/drawable/baseline_skip_previous_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_volume_down_24.xml b/app/src/main/res/drawable/baseline_volume_down_24.xml
index bf3aed4..c20ea79 100644
--- a/app/src/main/res/drawable/baseline_volume_down_24.xml
+++ b/app/src/main/res/drawable/baseline_volume_down_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/baseline_volume_up_24.xml b/app/src/main/res/drawable/baseline_volume_up_24.xml
index 1e0f8f4..e9a1ba5 100644
--- a/app/src/main/res/drawable/baseline_volume_up_24.xml
+++ b/app/src/main/res/drawable/baseline_volume_up_24.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/layout/list.xml b/app/src/main/res/layout/list.xml
index 109aa35..df1d5f5 100644
--- a/app/src/main/res/layout/list.xml
+++ b/app/src/main/res/layout/list.xml
@@ -78,6 +78,7 @@
android:id="@+id/list_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ app:tabIndicatorColor="?attr/colorAccent"
custom:tabTextColor="?attr/android:textColor" />
diff --git a/app/src/main/res/layout/settings_actions_row.xml b/app/src/main/res/layout/settings_actions_row.xml
index cfae024..645cc44 100644
--- a/app/src/main/res/layout/settings_actions_row.xml
+++ b/app/src/main/res/layout/settings_actions_row.xml
@@ -30,7 +30,8 @@
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent"
+ />
-
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 2f1a92c..95210ee 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -67,10 +67,11 @@
Lokalisiertes Datumsformat verwenden
Datum und Uhrzeit tauschen
- Theme
-
+ Farbschema
+
- Standard
- Dunkel
+
Hintergrund auswählen
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 07bf72a..152016a 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -65,7 +65,7 @@
Apariencia
Formato de fecha
-
+
- Normal
- Oscuro
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index e6a8b64..ebbee0e 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -47,8 +47,8 @@
-->
Apparence
Format de date
- Thème
-
+ Thème
+
- Défaut
- Noir
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 9e51f32..b046b1b 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -5,7 +5,7 @@
更多选项
设置
外观
- 主题
+ 主题
显示
其他
上滑
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index c4a008d..c9b8a2f 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,4 +7,9 @@
#000
#444
#fff
+
+ #fff
+ #5555ff
+ #000
+
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index bf854df..5d0f696 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -44,11 +44,26 @@
- Settings : Theme
-
-->
- theme
- settings.theme.wallpaper
- custom_dominant
- custom_vibrant
-
+ theme.color_theme
+
+ - DEFAULT
+ - DARK
+
+
+ theme.background
+
+ - TRANSPARENT
+ - DIM
+ - BLUR
+ - SOLID
+
+ theme.wallpaper
+ theme.font
+
+ - HACK
+ - SYSTEM_DEFAULT
+
+ theme.monochrome_icons
+ Background (app list and setting)
+
+ - Transparent
+ - Dim
+ - Blur
+ - Solid
+
+ Font
+
+ - Hack
+ - System default
+
+ Monochrome app icons
Dominant color
Vibrant color
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index aaf8158..db2f80f 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,43 +1,73 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+