Skip to content

Commit bf11c8a

Browse files
committed
update theme style implementation and use AppCompatDelegate for night mode
1 parent 782221a commit bf11c8a

6 files changed

Lines changed: 29 additions & 35 deletions

File tree

app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import android.view.Menu
2626
import android.view.MenuItem
2727
import android.view.View
2828
import androidx.appcompat.app.AppCompatActivity
29+
import androidx.appcompat.app.AppCompatDelegate
2930
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
3031
import androidx.core.view.GravityCompat
3132
import androidx.drawerlayout.widget.DrawerLayout
@@ -61,7 +62,9 @@ class MainActivity :
6162

6263
val settings = mainContext.settings
6364
settings.initializeDefaultValues()
64-
setTheme(settings.themeStyle().themeNoActionBar)
65+
val themeStyle = settings.themeStyle()
66+
AppCompatDelegate.setDefaultNightMode(themeStyle.nightMode)
67+
setTheme(themeStyle.themeNoActionBar)
6568

6669
mainReload = MainReload(settings)
6770

app/src/main/kotlin/com/vrem/wifianalyzer/settings/Settings.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class Settings(
106106
fun keepScreenOn(): Boolean =
107107
repository.boolean(R.string.keep_screen_on_key, repository.resourceBoolean(R.bool.keep_screen_on_default))
108108

109-
fun themeStyle(): ThemeStyle = settingsFind(ThemeStyle.entries, R.string.theme_key, ThemeStyle.DARK)
109+
fun themeStyle(): ThemeStyle = settingsFind(ThemeStyle.entries, R.string.theme_key, ThemeStyle.SYSTEM)
110110

111111
fun selectedMenu(): NavigationMenu =
112112
settingsFind(NavigationMenu.entries, R.string.selected_menu_key, NavigationMenu.ACCESS_POINTS)

app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@ package com.vrem.wifianalyzer.settings
2020
import android.graphics.Color
2121
import androidx.annotation.ColorInt
2222
import androidx.annotation.StyleRes
23+
import androidx.appcompat.app.AppCompatDelegate
2324
import com.vrem.wifianalyzer.R
2425

2526
enum class ThemeStyle(
2627
@param:StyleRes val theme: Int,
2728
@param:StyleRes val themeNoActionBar: Int,
2829
@param:ColorInt val colorGraphText: Int,
30+
val nightMode: Int,
2931
) {
30-
DARK(R.style.ThemeDark, R.style.ThemeDarkNoActionBar, Color.WHITE),
31-
LIGHT(R.style.ThemeLight, R.style.ThemeLightNoActionBar, Color.BLACK),
32-
SYSTEM(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.GRAY),
33-
BLACK(R.style.ThemeBlack, R.style.ThemeBlackNoActionBar, Color.WHITE),
32+
DARK(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.WHITE, AppCompatDelegate.MODE_NIGHT_YES),
33+
LIGHT(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.BLACK, AppCompatDelegate.MODE_NIGHT_NO),
34+
SYSTEM(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.GRAY, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM),
35+
BLACK(R.style.ThemeBlack, R.style.ThemeBlackNoActionBar, Color.WHITE, AppCompatDelegate.MODE_NIGHT_YES),
3436
}

app/src/main/res/values/styles.xml

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,6 @@
1818

1919
<resources>
2020

21-
<!-- Dark theme -->
22-
<style name="ThemeDark" parent="Theme.AppCompat">
23-
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
24-
<item name="android:actionMenuTextColor">@color/selected</item>
25-
</style>
26-
<style name="ThemeDarkNoActionBar" parent="ThemeDark">
27-
<item name="windowActionBar">false</item>
28-
<item name="windowNoTitle">true</item>
29-
</style>
30-
31-
<!-- Light theme -->
32-
<style name="ThemeLight" parent="Theme.AppCompat.Light.DarkActionBar">
33-
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
34-
<item name="android:actionMenuTextColor">@color/selected</item>
35-
</style>
36-
<style name="ThemeLightNoActionBar" parent="ThemeLight">
37-
<item name="windowActionBar">false</item>
38-
<item name="windowNoTitle">true</item>
39-
</style>
40-
4121
<!-- Black theme -->
4222
<style name="ThemeBlack" parent="Theme.AppCompat">
4323
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>

app/src/test/kotlin/com/vrem/wifianalyzer/settings/SettingsTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,27 +174,27 @@ class SettingsTest {
174174
// setup
175175
doReturn(it.ordinal)
176176
.whenever(repository)
177-
.stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
177+
.stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
178178
// execute
179179
val actual = fixture.themeStyle()
180180
// validate
181181
assertThat(actual).describedAs("Theme: $it").isEqualTo(it)
182182
}
183183
verify(repository, times(ThemeStyle.entries.size))
184-
.stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
184+
.stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
185185
}
186186

187187
@Test
188188
fun themeStyleInvalid() {
189189
// setup
190190
doReturn(ThemeStyle.entries.size)
191191
.whenever(repository)
192-
.stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
192+
.stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
193193
// execute
194194
val actual = fixture.themeStyle()
195195
// validate
196-
assertThat(actual).isEqualTo(ThemeStyle.DARK)
197-
verify(repository).stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
196+
assertThat(actual).isEqualTo(ThemeStyle.SYSTEM)
197+
verify(repository).stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
198198
}
199199

200200
@Test

app/src/test/kotlin/com/vrem/wifianalyzer/settings/ThemeStyleTest.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package com.vrem.wifianalyzer.settings
1919

2020
import android.graphics.Color
21+
import androidx.appcompat.app.AppCompatDelegate
2122
import com.vrem.wifianalyzer.R
2223
import org.assertj.core.api.Assertions.assertThat
2324
import org.junit.Test
@@ -32,16 +33,16 @@ class ThemeStyleTest {
3233

3334
@Test
3435
fun theme() {
35-
assertThat(ThemeStyle.LIGHT.theme).isEqualTo(R.style.ThemeLight)
36-
assertThat(ThemeStyle.DARK.theme).isEqualTo(R.style.ThemeDark)
36+
assertThat(ThemeStyle.LIGHT.theme).isEqualTo(R.style.ThemeSystem)
37+
assertThat(ThemeStyle.DARK.theme).isEqualTo(R.style.ThemeSystem)
3738
assertThat(ThemeStyle.SYSTEM.theme).isEqualTo(R.style.ThemeSystem)
3839
assertThat(ThemeStyle.BLACK.theme).isEqualTo(R.style.ThemeBlack)
3940
}
4041

4142
@Test
4243
fun themeNoActionBar() {
43-
assertThat(ThemeStyle.DARK.themeNoActionBar).isEqualTo(R.style.ThemeDarkNoActionBar)
44-
assertThat(ThemeStyle.LIGHT.themeNoActionBar).isEqualTo(R.style.ThemeLightNoActionBar)
44+
assertThat(ThemeStyle.DARK.themeNoActionBar).isEqualTo(R.style.ThemeSystemNoActionBar)
45+
assertThat(ThemeStyle.LIGHT.themeNoActionBar).isEqualTo(R.style.ThemeSystemNoActionBar)
4546
assertThat(ThemeStyle.SYSTEM.themeNoActionBar).isEqualTo(R.style.ThemeSystemNoActionBar)
4647
assertThat(ThemeStyle.BLACK.themeNoActionBar).isEqualTo(R.style.ThemeBlackNoActionBar)
4748
}
@@ -54,6 +55,14 @@ class ThemeStyleTest {
5455
assertThat(ThemeStyle.BLACK.colorGraphText).isEqualTo(Color.WHITE)
5556
}
5657

58+
@Test
59+
fun nightMode() {
60+
assertThat(ThemeStyle.DARK.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_YES)
61+
assertThat(ThemeStyle.LIGHT.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_NO)
62+
assertThat(ThemeStyle.SYSTEM.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
63+
assertThat(ThemeStyle.BLACK.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_YES)
64+
}
65+
5766
@Test
5867
fun themeStyleOrdinal() {
5968
assertThat(ThemeStyle.DARK.ordinal).isEqualTo(0)

0 commit comments

Comments
 (0)