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 @@ - + + + + + + + + + + + + + + + + +