From df035616dda92b401fee2f3cc3628ac3601e586f Mon Sep 17 00:00:00 2001 From: FrancoisDuchene Date: Tue, 14 Sep 2021 14:49:26 +0200 Subject: [PATCH 1/6] =?UTF-8?q?d=C3=A9but=20night=20mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/lufra/youpidapp/ParametersUITest.kt | 51 ++++++- app/src/main/java/adapter/SoundAdapter.kt | 3 + app/src/main/java/fragments/MainFragment.kt | 8 +- .../main/java/fragments/ParameterFragment.kt | 29 ++++ app/src/main/res/animator-night/fade.xml | 8 ++ .../main/res/layout-night/fragment_about.xml | 131 ++++++++++++++++++ .../main/res/layout-night/fragment_main.xml | 40 ++++++ .../res/layout-night/fragment_parameters.xml | 117 ++++++++++++++++ .../main/res/layout-night/sound_button.xml | 22 +++ .../layout-sw360dp-night/fragment_about.xml | 130 +++++++++++++++++ .../res/layout-sw360dp/fragment_about.xml | 2 + .../layout-sw600dp-night/fragment_about.xml | 129 +++++++++++++++++ .../res/layout-sw600dp/fragment_about.xml | 2 + app/src/main/res/layout/fragment_about.xml | 2 + app/src/main/res/layout/fragment_main.xml | 2 + .../main/res/layout/fragment_parameters.xml | 11 ++ app/src/main/res/layout/sound_button.xml | 3 + app/src/main/res/values/colors.xml | 13 +- app/src/main/res/values/strings.xml | 8 ++ app/src/main/res/values/styles.xml | 4 +- 20 files changed, 708 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/animator-night/fade.xml create mode 100644 app/src/main/res/layout-night/fragment_about.xml create mode 100644 app/src/main/res/layout-night/fragment_main.xml create mode 100644 app/src/main/res/layout-night/fragment_parameters.xml create mode 100644 app/src/main/res/layout-night/sound_button.xml create mode 100644 app/src/main/res/layout-sw360dp-night/fragment_about.xml create mode 100644 app/src/main/res/layout-sw600dp-night/fragment_about.xml diff --git a/app/src/androidTest/java/lufra/youpidapp/ParametersUITest.kt b/app/src/androidTest/java/lufra/youpidapp/ParametersUITest.kt index 29bd5f9..cd842e1 100644 --- a/app/src/androidTest/java/lufra/youpidapp/ParametersUITest.kt +++ b/app/src/androidTest/java/lufra/youpidapp/ParametersUITest.kt @@ -16,6 +16,7 @@ import androidx.test.filters.MediumTest import androidx.test.platform.app.InstrumentationRegistry import org.hamcrest.Matchers import org.hamcrest.Matchers.not +import org.junit.AfterClass import org.junit.Before import org.junit.Rule import org.junit.Test @@ -40,6 +41,11 @@ class ParametersUITest { .perform(click()) onData(Matchers.anything()).atPosition(PLAYMODE_DEFAULT).perform(click()) onView(withId(R.id.checkbox_open_on_favorites)).perform(CustomViewActions.setChecked(false)) + onView(withId(R.id.theme_spinner)) + .perform(click()) + onData(Matchers.anything()).atPosition(PLAYMODE_DEFAULT).perform(click()) + // activity restarted, we come back to the parameterFragment + UIInstrumentedTestSuite.changeOfFragmentFromDrawer(3) } @Test @@ -97,7 +103,6 @@ class ParametersUITest { onView(withId(R.id.type_spinner)) .check(matches(isDisplayed())) .check(matches(isClickable())) - //.check(matches(withSpinnerText(containsString(type2)))) depends des prefs .check(isCompletelyBelow(withId(R.id.title))) .perform(click()) @@ -187,6 +192,8 @@ class ParametersUITest { val tc = InstrumentationRegistry.getInstrumentation().targetContext val type1 = tc.getString(R.string.type1) val type2 = tc.getString(R.string.type2) + val themeMode1 = tc.getString(R.string.day_mode) + val themeMode2 = tc.getString(R.string.night_mode) // change the values onView(withId(R.id.pitch_seekBar)) @@ -202,6 +209,14 @@ class ParametersUITest { onData(Matchers.anything()).atPosition(1).perform(click()) onView(withId(R.id.type_spinner)) .check(matches(withSpinnerText(Matchers.containsString(type2)))) + onView(withId(R.id.theme_spinner)) + .check(matches(withSpinnerText(Matchers.containsString(themeMode1)))) + .perform(click()) + onData(Matchers.anything()).atPosition(1).perform(click()) + // activity restarted, we come back to the parameterFragment + UIInstrumentedTestSuite.changeOfFragmentFromDrawer(3) + onView(withId(R.id.theme_spinner)) + .check(matches(withSpinnerText(Matchers.containsString(themeMode2)))) // press the default button onView(withId(R.id.default_settings_button)).perform(click()) @@ -212,5 +227,39 @@ class ParametersUITest { onView(withId(R.id.checkbox_open_on_favorites)).check(matches(isChecked())) onView(withId(R.id.type_spinner)) .check(matches(withSpinnerText(Matchers.containsString(type2)))) + // activity restarted, we come back to the parameterFragment + UIInstrumentedTestSuite.changeOfFragmentFromDrawer(3) + onView(withId(R.id.theme_spinner)) + .check(matches(withSpinnerText(Matchers.containsString(themeMode2)))) + } + + @Test + fun themeChooserTest() { + val tc = InstrumentationRegistry.getInstrumentation().targetContext + + val themeMode1 = tc.getString(R.string.day_mode) + val themeMode2 = tc.getString(R.string.night_mode) + + onView(withId(R.id.theme_spinner)) + .check(matches(isDisplayed())) + .check(matches(isClickable())) + .check(matches(isFocusable())) + .check(isCompletelyBelow(withId(R.id.title))) + .check(matches(withSpinnerText(Matchers.containsString(themeMode1)))) + .perform(click()) + onData(Matchers.anything()).atPosition(1).perform(click()) + // activity restarted, we come back to the parameterFragment + UIInstrumentedTestSuite.changeOfFragmentFromDrawer(3) + onView(withId(R.id.theme_spinner)) + .check(matches(withSpinnerText(Matchers.containsString(themeMode2)))) + + // Check the parametersFragment nightMode + val whiteCol = R.color.white + onView(withId(R.id.title)) + .check(matches(hasTextColor(whiteCol))) + onView(withId(R.id.type_of_reading)) + .check(matches(hasTextColor(whiteCol))) + onView(withId(R.id.pitch)) + .check(matches(hasTextColor(whiteCol))) } } \ No newline at end of file diff --git a/app/src/main/java/adapter/SoundAdapter.kt b/app/src/main/java/adapter/SoundAdapter.kt index 1939eb3..bea27c0 100644 --- a/app/src/main/java/adapter/SoundAdapter.kt +++ b/app/src/main/java/adapter/SoundAdapter.kt @@ -3,6 +3,8 @@ package adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.os.bundleOf import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.SortedList import androidx.recyclerview.widget.SortedListAdapterCallback @@ -65,6 +67,7 @@ class SoundAdapter(_soundsList: List, private val soundClickedListener: S if (sound != null) { if (sound!!.isFavourite) { button.setIconResource(R.drawable.ic_baseline_star_border_24) + button.setIconTintResource(R.color.black) DataPersistenceHelper.removeSoundFavorite(sound!!) } else { button.setIconResource(R.drawable.ic_baseline_star_24) diff --git a/app/src/main/java/fragments/MainFragment.kt b/app/src/main/java/fragments/MainFragment.kt index 51a4230..c5a9ecc 100644 --- a/app/src/main/java/fragments/MainFragment.kt +++ b/app/src/main/java/fragments/MainFragment.kt @@ -11,6 +11,7 @@ import android.animation.* import android.content.res.Configuration import android.view.MenuItem import android.widget.Button +import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat import androidx.recyclerview.widget.GridLayoutManager @@ -38,7 +39,12 @@ open class MainFragment: MyFragment() { } private val animCleanup = object: SoundAdapter.CleanupAnimationListener { override fun onUnbind(soundViewHolder: SoundAdapter.SoundViewHolder) { - soundViewHolder.button.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary)) + val nightMode = AppCompatDelegate.getDefaultNightMode() + if (nightMode == AppCompatDelegate.MODE_NIGHT_YES) { + soundViewHolder.button.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimaryDarkMode)) + } else { + soundViewHolder.button.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary)) + } } } private val soundFilterListener = object : SearchView.OnQueryTextListener { diff --git a/app/src/main/java/fragments/ParameterFragment.kt b/app/src/main/java/fragments/ParameterFragment.kt index ddb5fd3..2403912 100644 --- a/app/src/main/java/fragments/ParameterFragment.kt +++ b/app/src/main/java/fragments/ParameterFragment.kt @@ -5,6 +5,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.* +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.app.ActivityCompat.recreate import lufra.youpidapp.DataPersistenceHelper import lufra.youpidapp.Discotheque import lufra.youpidapp.MainActivity @@ -17,6 +19,7 @@ class ParameterFragment: MyFragment() { private lateinit var pitchSeekBar: SeekBar private lateinit var setDefaultButton: Button private lateinit var openOnFavoritesCheckBox: CheckBox + private lateinit var themeSpinner: Spinner override var TAG: String = "=====BOITEFRAGMENT=====" override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? { @@ -53,6 +56,32 @@ class ParameterFragment: MyFragment() { pitchSeekBar.progress = ((context.discotheque.getDefaultPitch() - 0.5f) * 20f).toInt() } + themeSpinner = context.findViewById(R.id.theme_spinner) + val nightMode = AppCompatDelegate.getDefaultNightMode() + val theme_spinner_position: Int + if (nightMode == AppCompatDelegate.MODE_NIGHT_YES) { + themeSpinner.setSelection(1) + theme_spinner_position = 1 + } else { + themeSpinner.setSelection(0) + theme_spinner_position = 0 + } + //themeSpinner.setSelection() + //AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + themeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onNothingSelected(parent: AdapterView<*>?) {} + override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { + if (p2 != theme_spinner_position) { + if (p2 == 0) { // DayMode + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + } else { // NightMode + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + } + recreate(context); + } + } + } + context.setTitle(R.string.parameters) } diff --git a/app/src/main/res/animator-night/fade.xml b/app/src/main/res/animator-night/fade.xml new file mode 100644 index 0000000..acdaf22 --- /dev/null +++ b/app/src/main/res/animator-night/fade.xml @@ -0,0 +1,8 @@ + + diff --git a/app/src/main/res/layout-night/fragment_about.xml b/app/src/main/res/layout-night/fragment_about.xml new file mode 100644 index 0000000..1cf0bfc --- /dev/null +++ b/app/src/main/res/layout-night/fragment_about.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-night/fragment_main.xml b/app/src/main/res/layout-night/fragment_main.xml new file mode 100644 index 0000000..34a730c --- /dev/null +++ b/app/src/main/res/layout-night/fragment_main.xml @@ -0,0 +1,40 @@ + + + + + +