diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt index 8896134d5b96..780ad7c99735 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/PreferenceUpgradeService.kt @@ -87,6 +87,7 @@ object PreferenceUpgradeService { yield(UpgradeGesturesToControls()) yield(UpgradeDayAndNightThemes()) yield(UpgradeCustomCollectionSyncUrl()) + yield(UpgradeCustomSyncServerEnabled()) } /** Returns a list of preference upgrade classes which have not been applied */ @@ -389,6 +390,26 @@ object PreferenceUpgradeService { } } } + + internal class UpgradeCustomSyncServerEnabled : PreferenceUpgrade(8) { + override fun upgrade(preferences: SharedPreferences) { + val customSyncServerEnabled = preferences.getBoolean(RemovedPreferences.PREFERENCE_ENABLE_CUSTOM_SYNC_SERVER, false) + val customCollectionSyncUrl = preferences.getString(CustomSyncServer.PREFERENCE_CUSTOM_COLLECTION_SYNC_URL, null) + val customMediaSyncUrl = preferences.getString(CustomSyncServer.PREFERENCE_CUSTOM_MEDIA_SYNC_URL, null) + + preferences.edit { + remove(RemovedPreferences.PREFERENCE_ENABLE_CUSTOM_SYNC_SERVER) + putBoolean( + CustomSyncServer.PREFERENCE_CUSTOM_COLLECTION_SYNC_SERVER_ENABLED, + customSyncServerEnabled && !customCollectionSyncUrl.isNullOrEmpty() + ) + putBoolean( + CustomSyncServer.PREFERENCE_CUSTOM_MEDIA_SYNC_SERVER_ENABLED, + customSyncServerEnabled && !customMediaSyncUrl.isNullOrEmpty() + ) + } + } + } } } diff --git a/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt b/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt index fde1f07c8b37..b0e630b53215 100644 --- a/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt +++ b/AnkiDroid/src/test/java/com/ichi2/anki/servicemodel/PreferenceUpgradeServiceTest.kt @@ -28,7 +28,6 @@ import com.ichi2.anki.servicelayer.PreferenceUpgradeService.PreferenceUpgrade import com.ichi2.anki.servicelayer.RemovedPreferences import com.ichi2.anki.web.CustomSyncServer import com.ichi2.libanki.Consts -import com.ichi2.testutils.EmptyApplication import com.ichi2.utils.HashUtil import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.MatcherAssert.assertThat @@ -37,10 +36,8 @@ import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.robolectric.annotation.Config @RunWith(AndroidJUnit4::class) -@Config(application = EmptyApplication::class) // no point in Application init if we don't use it class PreferenceUpgradeServiceTest : RobolectricTest() { private lateinit var mPrefs: SharedPreferences @@ -184,4 +181,22 @@ class PreferenceUpgradeServiceTest : RobolectricTest() { assertThat(mPrefs.contains(RemovedPreferences.PREFERENCE_CUSTOM_SYNC_BASE), equalTo(false)) assertThat(mPrefs.getString(CustomSyncServer.PREFERENCE_CUSTOM_COLLECTION_SYNC_URL, ""), equalTo("http://foo/sync/")) } + + @Test + fun `Removed Use custom sync server preference is applied to both sync URL preferences after upgrade`() { + mPrefs.edit { + putString(CustomSyncServer.PREFERENCE_CUSTOM_COLLECTION_SYNC_URL, "http://foo/sync/") + putBoolean(RemovedPreferences.PREFERENCE_ENABLE_CUSTOM_SYNC_SERVER, true) + } + + assertThat(CustomSyncServer.getCollectionSyncUrlIfSetAndEnabledOrNull(mPrefs), equalTo(null)) + assertThat(CustomSyncServer.getMediaSyncUrlIfSetAndEnabledOrNull(mPrefs), equalTo(null)) + + PreferenceUpgrade.UpgradeCustomSyncServerEnabled().performUpgrade(mPrefs) + + assertThat(mPrefs.getBoolean(CustomSyncServer.PREFERENCE_CUSTOM_COLLECTION_SYNC_SERVER_ENABLED, false), equalTo(true)) + assertThat(mPrefs.getBoolean(CustomSyncServer.PREFERENCE_CUSTOM_MEDIA_SYNC_SERVER_ENABLED, false), equalTo(false)) + assertThat(CustomSyncServer.getCollectionSyncUrlIfSetAndEnabledOrNull(mPrefs), equalTo("http://foo/sync/")) + assertThat(CustomSyncServer.getMediaSyncUrlIfSetAndEnabledOrNull(mPrefs), equalTo(null)) + } }