Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
Expand Down Expand Up @@ -61,7 +62,9 @@ class MainActivity :

val settings = mainContext.settings
settings.initializeDefaultValues()
setTheme(settings.themeStyle().themeNoActionBar)
val themeStyle = settings.themeStyle()
AppCompatDelegate.setDefaultNightMode(themeStyle.nightMode)
setTheme(themeStyle.themeNoActionBar)

mainReload = MainReload(settings)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ class Settings(
fun keepScreenOn(): Boolean =
repository.boolean(R.string.keep_screen_on_key, repository.resourceBoolean(R.bool.keep_screen_on_default))

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

fun selectedMenu(): NavigationMenu =
settingsFind(NavigationMenu.entries, R.string.selected_menu_key, NavigationMenu.ACCESS_POINTS)
Expand Down
10 changes: 6 additions & 4 deletions app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,17 @@ package com.vrem.wifianalyzer.settings
import android.graphics.Color
import androidx.annotation.ColorInt
import androidx.annotation.StyleRes
import androidx.appcompat.app.AppCompatDelegate
import com.vrem.wifianalyzer.R

enum class ThemeStyle(
@param:StyleRes val theme: Int,
@param:StyleRes val themeNoActionBar: Int,
@param:ColorInt val colorGraphText: Int,
val nightMode: Int,
) {
DARK(R.style.ThemeDark, R.style.ThemeDarkNoActionBar, Color.WHITE),
LIGHT(R.style.ThemeLight, R.style.ThemeLightNoActionBar, Color.BLACK),
SYSTEM(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.GRAY),
BLACK(R.style.ThemeBlack, R.style.ThemeBlackNoActionBar, Color.WHITE),
DARK(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.WHITE, AppCompatDelegate.MODE_NIGHT_YES),
LIGHT(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.BLACK, AppCompatDelegate.MODE_NIGHT_NO),
SYSTEM(R.style.ThemeSystem, R.style.ThemeSystemNoActionBar, Color.GRAY, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM),
BLACK(R.style.ThemeBlack, R.style.ThemeBlackNoActionBar, Color.WHITE, AppCompatDelegate.MODE_NIGHT_YES),
}
20 changes: 0 additions & 20 deletions app/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,6 @@

<resources>

<!-- Dark theme -->
<style name="ThemeDark" parent="Theme.AppCompat">
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
<item name="android:actionMenuTextColor">@color/selected</item>
</style>
<style name="ThemeDarkNoActionBar" parent="ThemeDark">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<!-- Light theme -->
<style name="ThemeLight" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
<item name="android:actionMenuTextColor">@color/selected</item>
</style>
<style name="ThemeLightNoActionBar" parent="ThemeLight">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<!-- Black theme -->
<style name="ThemeBlack" parent="Theme.AppCompat">
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,27 +174,27 @@ class SettingsTest {
// setup
doReturn(it.ordinal)
.whenever(repository)
.stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
.stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
// execute
val actual = fixture.themeStyle()
// validate
assertThat(actual).describedAs("Theme: $it").isEqualTo(it)
}
verify(repository, times(ThemeStyle.entries.size))
.stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
.stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
}

@Test
fun themeStyleInvalid() {
// setup
doReturn(ThemeStyle.entries.size)
.whenever(repository)
.stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
.stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
// execute
val actual = fixture.themeStyle()
// validate
assertThat(actual).isEqualTo(ThemeStyle.DARK)
verify(repository).stringAsInteger(R.string.theme_key, ThemeStyle.DARK.ordinal)
assertThat(actual).isEqualTo(ThemeStyle.SYSTEM)
verify(repository).stringAsInteger(R.string.theme_key, ThemeStyle.SYSTEM.ordinal)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package com.vrem.wifianalyzer.settings

import android.graphics.Color
import androidx.appcompat.app.AppCompatDelegate
import com.vrem.wifianalyzer.R
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
Expand All @@ -32,16 +33,16 @@ class ThemeStyleTest {

@Test
fun theme() {
assertThat(ThemeStyle.LIGHT.theme).isEqualTo(R.style.ThemeLight)
assertThat(ThemeStyle.DARK.theme).isEqualTo(R.style.ThemeDark)
assertThat(ThemeStyle.LIGHT.theme).isEqualTo(R.style.ThemeSystem)
assertThat(ThemeStyle.DARK.theme).isEqualTo(R.style.ThemeSystem)
assertThat(ThemeStyle.SYSTEM.theme).isEqualTo(R.style.ThemeSystem)
assertThat(ThemeStyle.BLACK.theme).isEqualTo(R.style.ThemeBlack)
}

@Test
fun themeNoActionBar() {
assertThat(ThemeStyle.DARK.themeNoActionBar).isEqualTo(R.style.ThemeDarkNoActionBar)
assertThat(ThemeStyle.LIGHT.themeNoActionBar).isEqualTo(R.style.ThemeLightNoActionBar)
assertThat(ThemeStyle.DARK.themeNoActionBar).isEqualTo(R.style.ThemeSystemNoActionBar)
assertThat(ThemeStyle.LIGHT.themeNoActionBar).isEqualTo(R.style.ThemeSystemNoActionBar)
assertThat(ThemeStyle.SYSTEM.themeNoActionBar).isEqualTo(R.style.ThemeSystemNoActionBar)
assertThat(ThemeStyle.BLACK.themeNoActionBar).isEqualTo(R.style.ThemeBlackNoActionBar)
}
Expand All @@ -54,6 +55,14 @@ class ThemeStyleTest {
assertThat(ThemeStyle.BLACK.colorGraphText).isEqualTo(Color.WHITE)
}

@Test
fun nightMode() {
assertThat(ThemeStyle.DARK.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_YES)
assertThat(ThemeStyle.LIGHT.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_NO)
assertThat(ThemeStyle.SYSTEM.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
assertThat(ThemeStyle.BLACK.nightMode).isEqualTo(AppCompatDelegate.MODE_NIGHT_YES)
}

@Test
fun themeStyleOrdinal() {
assertThat(ThemeStyle.DARK.ordinal).isEqualTo(0)
Expand Down