diff --git a/app/build.properties b/app/build.properties index c91d3d0b7..4d52d4a45 100644 --- a/app/build.properties +++ b/app/build.properties @@ -1,6 +1,6 @@ #Build Properties -#Sat Jan 17 10:15:29 EST 2026 -version_build=1 +#Sat Jan 17 13:51:56 EST 2026 +version_build=2 version_major=3 version_minor=2 version_patch=2 diff --git a/app/src/androidTest/kotlin/com/vrem/wifianalyzer/MainInstrumentedTest.kt b/app/src/androidTest/kotlin/com/vrem/wifianalyzer/MainInstrumentedTest.kt index 7fc055e3f..2802cdd7a 100644 --- a/app/src/androidTest/kotlin/com/vrem/wifianalyzer/MainInstrumentedTest.kt +++ b/app/src/androidTest/kotlin/com/vrem/wifianalyzer/MainInstrumentedTest.kt @@ -115,4 +115,9 @@ class MainInstrumentedTest { fun settings() { SettingsInstrumentedTest().run() } + + @Test + fun theme() { + ThemeInstrumentedTest().run() + } } diff --git a/app/src/androidTest/kotlin/com/vrem/wifianalyzer/ThemeInstrumentedTest.kt b/app/src/androidTest/kotlin/com/vrem/wifianalyzer/ThemeInstrumentedTest.kt new file mode 100644 index 000000000..76d6e6a38 --- /dev/null +++ b/app/src/androidTest/kotlin/com/vrem/wifianalyzer/ThemeInstrumentedTest.kt @@ -0,0 +1,57 @@ +/* + * WiFiAnalyzer + * Copyright (C) 2015 - 2026 VREM Software Development + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.vrem.wifianalyzer + +import androidx.appcompat.app.AppCompatDelegate +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.withText +import org.junit.Assert.assertEquals + +internal class ThemeInstrumentedTest : Runnable { + override fun run() { + listOf( + "Light" to AppCompatDelegate.MODE_NIGHT_NO, + "System" to AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, + "Black" to AppCompatDelegate.MODE_NIGHT_YES, + "Dark" to AppCompatDelegate.MODE_NIGHT_YES, + ).forEach { (themeName, expectedNightMode) -> + changeThemeAndVerify(themeName, expectedNightMode) + } + } + + private fun changeThemeAndVerify( + themeName: String, + expectedNightMode: Int, + ) { + selectMenuItem(R.id.nav_drawer_settings, "Settings") + scrollToAndVerify("Theme") + onView(withText("Theme")).perform(click()) + pauseShort() + onView(withText(themeName)).check(matches(isDisplayed())) + onView(withText(themeName)).perform(click()) + pauseShort() + assertEquals( + "Theme $themeName should set night mode to $expectedNightMode", + expectedNightMode, + AppCompatDelegate.getDefaultNightMode(), + ) + } +} diff --git a/app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt b/app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt index b61b2f7c1..c08640a76 100644 --- a/app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt +++ b/app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt @@ -61,7 +61,7 @@ class MainActivity : val settings = mainContext.settings settings.initializeDefaultValues() - setTheme(settings.themeStyle().themeNoActionBar) + settings.themeStyle().setTheme(this) mainReload = MainReload(settings) diff --git a/app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt b/app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt index 6f6385767..e480a25e8 100644 --- a/app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt +++ b/app/src/main/kotlin/com/vrem/wifianalyzer/settings/ThemeStyle.kt @@ -20,15 +20,23 @@ package com.vrem.wifianalyzer.settings import android.graphics.Color import androidx.annotation.ColorInt import androidx.annotation.StyleRes +import androidx.appcompat.app.AppCompatActivity +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, + @param:StyleRes private val theme: Int, + private 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(Color.WHITE, R.style.ThemeSystemNoActionBar, AppCompatDelegate.MODE_NIGHT_YES), + LIGHT(Color.BLACK, R.style.ThemeSystemNoActionBar, AppCompatDelegate.MODE_NIGHT_NO), + SYSTEM(Color.GRAY, R.style.ThemeSystemNoActionBar, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM), + BLACK(Color.WHITE, R.style.ThemeBlackNoActionBar, AppCompatDelegate.MODE_NIGHT_YES), + ; + + fun setTheme(activity: AppCompatActivity) { + activity.setTheme(theme) + AppCompatDelegate.setDefaultNightMode(nightMode) + } } diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 60e7451e2..50a3c57b4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -18,26 +18,6 @@ - - - - - - - -