From f88688213a7777fdb0361c9ddad36b490b90adfe Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Wed, 29 Aug 2018 23:38:36 +0200
Subject: Finished theme switcher (better library)
---
app/src/main/AndroidManifest.xml | 6 ++--
.../main/java/com/no_name/no_name/Application.kt | 16 ++++++++++
.../main/java/com/no_name/no_name/LoginActivity.kt | 13 +++++----
.../main/java/com/no_name/no_name/MainActivity.kt | 13 +++++----
.../java/com/no_name/no_name/RoutingActivity.kt | 17 ++++++-----
.../java/com/no_name/no_name/SettingsActivity.kt | 31 +++++++++++---------
.../java/com/no_name/no_name/util/ThemeUtil.kt | 34 ++++++++++++++++++++++
app/src/main/res/values/styles.xml | 10 ++-----
app/src/main/res/xml/pref_general.xml | 2 +-
9 files changed, 99 insertions(+), 43 deletions(-)
create mode 100644 app/src/main/java/com/no_name/no_name/Application.kt
create mode 100644 app/src/main/java/com/no_name/no_name/util/ThemeUtil.kt
(limited to 'app/src/main')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8e1bc19..9299761 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,13 +10,14 @@
@@ -33,8 +34,7 @@
android:label="@string/title_activity_login" />
+ android:label="@string/title_activity_app_settings">
diff --git a/app/src/main/java/com/no_name/no_name/Application.kt b/app/src/main/java/com/no_name/no_name/Application.kt
new file mode 100644
index 0000000..441a728
--- /dev/null
+++ b/app/src/main/java/com/no_name/no_name/Application.kt
@@ -0,0 +1,16 @@
+package com.no_name.no_name
+
+import android.app.Application
+import daio.io.dresscode.DressCode
+import daio.io.dresscode.declareDressCode
+
+class Application : Application() {
+
+ override fun onCreate() {
+ super.onCreate()
+
+ declareDressCode(this,
+ DressCode("dark", R.style.AppTheme_Dark),
+ DressCode("light", R.style.AppTheme))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/no_name/no_name/LoginActivity.kt b/app/src/main/java/com/no_name/no_name/LoginActivity.kt
index 9443e9c..861e425 100644
--- a/app/src/main/java/com/no_name/no_name/LoginActivity.kt
+++ b/app/src/main/java/com/no_name/no_name/LoginActivity.kt
@@ -15,16 +15,18 @@ import android.os.Build
import android.os.Bundle
import android.provider.ContactsContract
import android.support.design.widget.Snackbar
+import android.support.v7.app.AppCompatActivity
import android.text.TextUtils
import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.ArrayAdapter
import android.widget.TextView
-import com.afollestad.aesthetic.AestheticActivity
import com.github.kittinunf.fuel.android.extension.responseJson
import com.github.kittinunf.fuel.httpPost
import com.madapps.prefrences.EasyPrefrences
-import com.no_name.no_name.Util.ThemeUtil
+import com.no_name.no_name.util.ThemeUtil.getThemeName
+import daio.io.dresscode.dressCodeName
+import daio.io.dresscode.matchDressCode
import kotlinx.android.synthetic.main.activity_login.*
import org.jetbrains.anko.longToast
import org.jetbrains.anko.startActivity
@@ -34,7 +36,7 @@ import java.util.*
/**
* A login screen that offers login via email/password.
*/
-class LoginActivity : AestheticActivity(), LoaderCallbacks {
+class LoginActivity : AppCompatActivity(), LoaderCallbacks {
/**
* Keep track of the login task to ensure we can cancel it if requested.
*/
@@ -44,8 +46,11 @@ class LoginActivity : AestheticActivity(), LoaderCallbacks {
* Set up the login form and initial configuration
*/
override fun onCreate(savedInstanceState: Bundle?) {
+ matchDressCode()
super.onCreate(savedInstanceState)
+ dressCodeName = getThemeName(this)
setContentView(R.layout.activity_login)
+
populateAutoComplete()
password.setOnEditorActionListener(TextView.OnEditorActionListener { _, id, _ ->
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
@@ -55,8 +60,6 @@ class LoginActivity : AestheticActivity(), LoaderCallbacks {
false
})
- (ThemeUtil(this)::setActivityTheme)(true)
-
email_sign_in_button.setOnClickListener { attemptLogin() }
}
diff --git a/app/src/main/java/com/no_name/no_name/MainActivity.kt b/app/src/main/java/com/no_name/no_name/MainActivity.kt
index d82630d..299f5eb 100644
--- a/app/src/main/java/com/no_name/no_name/MainActivity.kt
+++ b/app/src/main/java/com/no_name/no_name/MainActivity.kt
@@ -1,10 +1,12 @@
package com.no_name.no_name
import android.os.Bundle
+import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
-import com.afollestad.aesthetic.AestheticActivity
-import com.no_name.no_name.Util.ThemeUtil
+import com.no_name.no_name.util.ThemeUtil.getThemeName
+import daio.io.dresscode.dressCodeName
+import daio.io.dresscode.matchDressCode
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.alert
import org.jetbrains.anko.longToast
@@ -13,15 +15,16 @@ import org.jetbrains.anko.startActivity
/**
* Main activity aka home screen of app
*/
-class MainActivity : AestheticActivity() {
+class MainActivity : AppCompatActivity() {
/**
* Set initial configuration
*/
override fun onCreate(savedInstanceState: Bundle?) {
+ matchDressCode()
super.onCreate(savedInstanceState)
+ dressCodeName = getThemeName(this)
setContentView(R.layout.activity_main)
-
- (ThemeUtil(this)::setActivityTheme)(false)
+ setSupportActionBar(toolbar)
if (intent.getBooleanExtra("serverDown", false)) {
alert("We are sorry, but our servers do not seem to be working at the moment. Please wait a few minutes before you try again.", "Sorry") {
diff --git a/app/src/main/java/com/no_name/no_name/RoutingActivity.kt b/app/src/main/java/com/no_name/no_name/RoutingActivity.kt
index efb3789..22c2813 100644
--- a/app/src/main/java/com/no_name/no_name/RoutingActivity.kt
+++ b/app/src/main/java/com/no_name/no_name/RoutingActivity.kt
@@ -1,12 +1,14 @@
package com.no_name.no_name
import android.os.Bundle
-import com.afollestad.aesthetic.AestheticActivity
+import android.support.v7.app.AppCompatActivity
import com.github.kittinunf.fuel.android.extension.responseJson
import com.github.kittinunf.fuel.core.FuelManager
import com.github.kittinunf.fuel.httpGet
import com.madapps.prefrences.EasyPrefrences
-import com.no_name.no_name.Util.ThemeUtil
+import com.no_name.no_name.util.ThemeUtil.getThemeName
+import daio.io.dresscode.dressCodeName
+import daio.io.dresscode.matchDressCode
import org.jetbrains.anko.alert
import org.jetbrains.anko.startActivity
import java.io.IOException
@@ -15,18 +17,19 @@ import java.io.IOException
* Activity which will be run before any other to verify user and choose which activity
* should be started next
*/
-class RoutingActivity : AestheticActivity() {
- private val server_address = "192.168.0.102"
+class RoutingActivity : AppCompatActivity() {
+ private val serverAddress = "192.168.0.102"
override fun onCreate(savedInstanceState: Bundle?) {
+ matchDressCode()
super.onCreate(savedInstanceState)
- FuelManager.instance.basePath = "http://$server_address"
+ dressCodeName = getThemeName(this)
+
+ FuelManager.instance.basePath = "http://$serverAddress"
alert("Logging you in.", "Loading...") {
isCancelable = false
}.show()
verifyLogin()
-
- (ThemeUtil(this)::setActivityTheme)(true)
}
@Throws(InterruptedException::class, IOException::class)
diff --git a/app/src/main/java/com/no_name/no_name/SettingsActivity.kt b/app/src/main/java/com/no_name/no_name/SettingsActivity.kt
index 11214d5..e4a9f74 100644
--- a/app/src/main/java/com/no_name/no_name/SettingsActivity.kt
+++ b/app/src/main/java/com/no_name/no_name/SettingsActivity.kt
@@ -9,8 +9,9 @@ import android.os.Bundle
import android.preference.*
import android.support.v4.app.NavUtils
import android.view.MenuItem
-import com.afollestad.aesthetic.Aesthetic
-import com.no_name.no_name.Util.ThemeUtil
+import com.no_name.no_name.util.ThemeUtil.getThemeName
+import daio.io.dresscode.dressCodeName
+import daio.io.dresscode.matchDressCode
/**
* A [PreferenceActivity] that presents a set of application settings. On
@@ -25,20 +26,10 @@ import com.no_name.no_name.Util.ThemeUtil
class SettingsActivity : PreferenceActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
- Aesthetic.attach(this)
+ matchDressCode()
super.onCreate(savedInstanceState)
+ dressCodeName = getThemeName(this)
setupActionBar()
- (ThemeUtil(this)::setActivityTheme)(true)
- }
-
- override fun onResume() {
- super.onResume()
- Aesthetic.resume(this)
- }
-
- override fun onPause() {
- Aesthetic.pause(this)
- super.onPause()
}
/**
@@ -48,6 +39,10 @@ class SettingsActivity : PreferenceActivity() {
actionBar?.setDisplayHomeAsUpEnabled(true)
}
+ fun updateTheme() {
+ dressCodeName = getThemeName(this)
+ }
+
/**
* Listener for menu item selector
*/
@@ -99,6 +94,14 @@ class SettingsActivity : PreferenceActivity() {
setHasOptionsMenu(true)
}
+ override fun onPreferenceTreeClick(preferenceScreen: PreferenceScreen?, preference: Preference?): Boolean {
+ if (preference?.key == "dark_theme_switch") {
+ (activity as SettingsActivity).updateTheme()
+ return true
+ }
+ return true
+ }
+
/**
* Listener for action bar option selector
*/
diff --git a/app/src/main/java/com/no_name/no_name/util/ThemeUtil.kt b/app/src/main/java/com/no_name/no_name/util/ThemeUtil.kt
new file mode 100644
index 0000000..5125f12
--- /dev/null
+++ b/app/src/main/java/com/no_name/no_name/util/ThemeUtil.kt
@@ -0,0 +1,34 @@
+package com.no_name.no_name.util
+
+import android.content.Context
+import com.madapps.prefrences.EasyPrefrences
+import com.no_name.no_name.util.ThemeUtil.isDarkTheme
+
+/**
+ * Get the name of the theme depending on [actionBar] and [isDarkTheme]
+ */
+object ThemeUtil {
+ /**
+ * Checks if the theme saved in sharedPreferences is dark/light
+ */
+ private fun isDarkTheme(context: Context): Boolean {
+ val sharedPrefs = EasyPrefrences(context)
+ val darkTheme: Boolean? = sharedPrefs.getBoolean("dark_theme_switch")
+ darkTheme?.let {
+ return darkTheme
+ } ?: run {
+ return false
+ }
+ }
+
+ /**
+ * Get the name of the theme depending on [actionBar] and [isDarkTheme]
+ */
+ fun getThemeName(context: Context): String {
+ return if (isDarkTheme(context)) {
+ "dark"
+ } else {
+ "light"
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index f55ac2c..85a68c6 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -5,20 +5,14 @@
- @color/colorPrimary
- @color/colorPrimaryDark
- @color/colorAccent
+ - false
+ - true
-
-
-
-
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index 9016d00..5326f4d 100644
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -4,8 +4,8 @@
android:id="@+id/dark_theme_switch_button"
android:defaultValue="true"
android:key="dark_theme_switch"
- android:summaryOff="@string/pref_description_dark_theme_off"
android:summaryOn="@string/pref_description_dark_theme_on"
+ android:summaryOff="@string/pref_description_dark_theme_off"
android:title="@string/pref_title_dark_theme" />
--
cgit v1.2.3