diff options
author | Marvin Borner | 2018-08-29 23:38:36 +0200 |
---|---|---|
committer | Marvin Borner | 2018-08-29 23:38:36 +0200 |
commit | f88688213a7777fdb0361c9ddad36b490b90adfe (patch) | |
tree | 5ec681c7fbd214c418f5291c02d863352b29e287 | |
parent | 35f01b107d206f237763b10ebd6d5c25c71d5610 (diff) |
Finished theme switcher (better library)
-rw-r--r-- | app/build.gradle | 5 | ||||
-rw-r--r-- | app/src/main/AndroidManifest.xml | 6 | ||||
-rw-r--r-- | app/src/main/java/com/no_name/no_name/Application.kt | 16 | ||||
-rw-r--r-- | app/src/main/java/com/no_name/no_name/LoginActivity.kt | 13 | ||||
-rw-r--r-- | app/src/main/java/com/no_name/no_name/MainActivity.kt | 13 | ||||
-rw-r--r-- | app/src/main/java/com/no_name/no_name/RoutingActivity.kt | 17 | ||||
-rw-r--r-- | app/src/main/java/com/no_name/no_name/SettingsActivity.kt | 31 | ||||
-rw-r--r-- | app/src/main/java/com/no_name/no_name/util/ThemeUtil.kt | 34 | ||||
-rw-r--r-- | app/src/main/res/values/styles.xml | 10 | ||||
-rw-r--r-- | app/src/main/res/xml/pref_general.xml | 2 |
10 files changed, 102 insertions, 45 deletions
diff --git a/app/build.gradle b/app/build.gradle index 999fee0..d1fb438 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { compileSdkVersion 28 defaultConfig { applicationId "com.no_name.no_name" - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" @@ -27,11 +27,12 @@ dependencies { implementation 'com.github.mukeshsolanki:easypreferences:1.0.6' implementation 'com.kazakago.cryptore:cryptore:1.3.0' implementation 'com.github.kittinunf.fuel:fuel-android:1.6.0' - implementation 'com.afollestad:aesthetic:0.5.3' + implementation 'com.github.Daio-io:dresscode:v0.0.2' implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.anko:anko-commons:0.10.5" implementation "org.jetbrains.anko:anko-design:0.10.5" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + //noinspection GradleCompatible implementation 'com.android.support:appcompat-v7:28.0.0-alpha1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support:design:28.0.0-alpha1' 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 @@ <uses-permission android:name="android.permission.INTERNET" /> <application + android:name=".Application" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme.NoActionBar" + android:theme="@style/AppTheme" tools:replace="android:allowBackup"> <activity android:name=".RoutingActivity"> <intent-filter> @@ -33,8 +34,7 @@ android:label="@string/title_activity_login" /> <activity android:name=".SettingsActivity" - android:label="@string/title_activity_app_settings" - android:parentActivityName=".MainActivity"> + android:label="@string/title_activity_app_settings"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.no_name.no_name.MainActivity" /> 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<Cursor> { +class LoginActivity : AppCompatActivity(), LoaderCallbacks<Cursor> { /** * Keep track of the login task to ensure we can cancel it if requested. */ @@ -44,8 +46,11 @@ class LoginActivity : AestheticActivity(), LoaderCallbacks<Cursor> { * 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<Cursor> { 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 @@ <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> + <item name="windowActionBar">false</item> + <item name="windowNoTitle">true</item> </style> <style name="AppTheme.Dark" parent="Theme.AppCompat"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> - </style> - - <style name="AppTheme.NoActionBar"> - <item name="windowActionBar">false</item> - <item name="windowNoTitle">true</item> - </style> - - <style name="AppTheme.Dark.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> 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" /> </PreferenceScreen> |