From 8a6dd323604147112899e7eefb5ac49777eeceba Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Sat, 23 May 2020 00:28:15 +0200 Subject: [PATCH] Let the user change theme, Add animation, preference --- .../com/finnmglas/launcher/ChooseActivity.kt | 7 +++++++ .../launcher/FirstStartupActivity.kt | 7 +++++++ .../java/com/finnmglas/launcher/Functions.kt | 16 ++++++++++++++++ .../com/finnmglas/launcher/MainActivity.kt | 12 ++++++++++++ .../finnmglas/launcher/SettingsActivity.kt | 19 ++++++++++++++++--- app/src/main/res/values/styles.xml | 7 +++++++ 6 files changed, 65 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt b/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt index 56a9e97..d59dd5c 100644 --- a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt @@ -25,6 +25,13 @@ class ChooseActivity : AppCompatActivity() { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + setTheme( + when (getSavedTheme(this)) { + "dark" -> R.style.darkTheme + "finn" -> R.style.finnmglasTheme + else -> R.style.finnmglasTheme + } + ) setContentView(R.layout.activity_choose) // As older APIs somehow do not recognize the xml defined onClick diff --git a/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt b/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt index e849653..58e9399 100644 --- a/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt @@ -31,6 +31,13 @@ class FirstStartupActivity : AppCompatActivity(){ ) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + setTheme( + when (getSavedTheme(this)) { + "dark" -> R.style.darkTheme + "finn" -> R.style.finnmglasTheme + else -> R.style.finnmglasTheme + } + ) setContentView(R.layout.activity_firststartup) hintText.blink() // animate diff --git a/app/src/main/java/com/finnmglas/launcher/Functions.kt b/app/src/main/java/com/finnmglas/launcher/Functions.kt index cf92058..5818569 100644 --- a/app/src/main/java/com/finnmglas/launcher/Functions.kt +++ b/app/src/main/java/com/finnmglas/launcher/Functions.kt @@ -124,6 +124,22 @@ fun openNewTabWindow(urls: String, context : Context) { /** Settings related functions */ +fun getSavedTheme(context : Context) : String { + val sharedPref = context.getSharedPreferences( + context.getString(R.string.preference_file_key), Context.MODE_PRIVATE) + + return sharedPref.getString("theme", "finnmglas").toString() +} + +fun saveTheme(context : Context, themeName : String) { + val sharedPref = context.getSharedPreferences( + context.getString(R.string.preference_file_key), Context.MODE_PRIVATE) + + val editor: SharedPreferences.Editor = sharedPref.edit() + editor.putString("theme", themeName) + editor.apply() +} + fun openAppSettings(pkg :String, context:Context){ val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) intent.data = Uri.parse("package:$pkg") diff --git a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt index 2a48e33..66fb2eb 100644 --- a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt @@ -17,6 +17,8 @@ import kotlin.math.abs class MainActivity : AppCompatActivity(), GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { + private var currentTheme = "" // keep track of theme changes + /** Variables for this activity */ private lateinit var mDetector: GestureDetectorCompat @@ -45,6 +47,14 @@ class MainActivity : AppCompatActivity(), ) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + currentTheme = getSavedTheme(this) + setTheme( + when (currentTheme) { + "dark" -> R.style.darkTheme + "finn" -> R.style.finnmglasTheme + else -> R.style.finnmglasTheme + } + ) setContentView(R.layout.activity_main) // Start by showing the settings icon @@ -78,6 +88,8 @@ class MainActivity : AppCompatActivity(), override fun onResume() { super.onResume() + if (currentTheme != getSavedTheme(this)) recreate() + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) diff --git a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt b/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt index f068b94..35e4e5e 100644 --- a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt @@ -22,6 +22,15 @@ class SettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + setTheme( + when (getSavedTheme(this)) { + "dark" -> R.style.darkTheme + "finn" -> R.style.finnmglasTheme + else -> R.style.finnmglasTheme + } + ) + setContentView(R.layout.activity_settings) window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) @@ -178,14 +187,18 @@ class SettingsActivity : AppCompatActivity() { /** Theme - related */ fun chooseDarkTheme(view: View) { - + saveTheme(this, "dark") + recreate() } fun chooseFinnTheme(view: View) { - + saveTheme(this, "finn") + recreate() } fun chooseCustomTheme(view: View) { - + Toast.makeText(this, "[not implemented yet]", Toast.LENGTH_SHORT) + .show() } + } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7010e55..0d1f376 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -13,6 +13,7 @@ @color/finnmglasTheme_accent_color true + @style/WindowFadeTransition @@ -27,10 +28,16 @@ @color/darkTheme_accent_color true + @style/WindowFadeTransition + +