From 1b7f48c53a3ec377119cca20ca17cc046ebe5642 Mon Sep 17 00:00:00 2001 From: Maxence G Date: Mon, 24 May 2021 23:25:12 +0200 Subject: [PATCH 01/13] Implement server feature checking --- .../java/org/moire/ultrasonic/util/Util.java | 26 +++++++ .../ultrasonic/activity/NavigationActivity.kt | 20 +++-- .../org/moire/ultrasonic/data/AppDatabase.kt | 11 ++- .../moire/ultrasonic/data/ServerSetting.kt | 6 +- .../di/AppPermanentStorageModule.kt | 4 +- .../ultrasonic/fragment/EditServerFragment.kt | 76 ++++++++++++++++--- 6 files changed, 125 insertions(+), 18 deletions(-) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index f89ed103..da3e98af 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -359,6 +359,20 @@ public class Util return Math.min(Math.max(percent,0),100) + " %"; } + /** + * Return a Mark depending on boolean (❌ or ✓) + * + * @param value Is true or false + * @return The corresponding mark. + */ + public static synchronized String boolToMark(boolean value) + { + if (value) + return "✔️"; + else + return "❌"; + } + /** * Converts a byte-count to a formatted string suitable for display to the user. @@ -606,6 +620,18 @@ public class Util }).show(); } + public static void showDialog(Context context, int icon, int titleId, String message) + { + new AlertDialog.Builder(context).setIcon(icon).setTitle(titleId).setMessage(message).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() + { + @Override + public void onClick(DialogInterface dialog, int i) + { + dialog.dismiss(); + } + }).show(); + } + public static void sleepQuietly(long millis) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 6c8e5691..2cff4a3f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -29,7 +29,9 @@ import androidx.preference.PreferenceManager import com.google.android.material.navigation.NavigationView import org.koin.android.ext.android.inject import org.koin.android.viewmodel.ext.android.viewModel +import org.koin.java.KoinJavaComponent.inject import org.moire.ultrasonic.R +import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.PlayerState import org.moire.ultrasonic.fragment.OnBackPressedHandler @@ -368,10 +370,18 @@ class NavigationActivity : AppCompatActivity() { } private fun setMenuForServerSetting() { - val visibility = !isOffline() - chatMenuItem?.isVisible = visibility - bookmarksMenuItem?.isVisible = visibility - sharesMenuItem?.isVisible = visibility - podcastsMenuItem?.isVisible = visibility + if (isOffline()) + { + chatMenuItem?.isVisible = false + bookmarksMenuItem?.isVisible = false + sharesMenuItem?.isVisible = false + podcastsMenuItem?.isVisible = false + return + } + val activeServerProvider = inject(ActiveServerProvider::class.java) + chatMenuItem?.isVisible = activeServerProvider.value.getActiveServer().chatSupport + bookmarksMenuItem?.isVisible = activeServerProvider.value.getActiveServer().bookmarkSupport + sharesMenuItem?.isVisible = activeServerProvider.value.getActiveServer().shareSupport + podcastsMenuItem?.isVisible = activeServerProvider.value.getActiveServer().podcastSupport } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt index ee265000..2a882cd9 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt @@ -8,7 +8,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase /** * Room Database to be used to store data for Ultrasonic */ -@Database(entities = [ServerSetting::class], version = 2) +@Database(entities = [ServerSetting::class], version = 3) abstract class AppDatabase : RoomDatabase() { /** @@ -24,3 +24,12 @@ val MIGRATION_1_2: Migration = object : Migration(1, 2) { ) } } + +val MIGRATION_2_3: Migration = object : Migration(2, 3) { + override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("ALTER TABLE ServerSetting ADD COLUMN chatSupport INTEGER NOT NULL DEFAULT(1)") + database.execSQL("ALTER TABLE ServerSetting ADD COLUMN bookmarkSupport INTEGER NOT NULL DEFAULT(1)") + database.execSQL("ALTER TABLE ServerSetting ADD COLUMN shareSupport INTEGER NOT NULL DEFAULT(1)") + database.execSQL("ALTER TABLE ServerSetting ADD COLUMN podcastSupport INTEGER NOT NULL DEFAULT(1)") + } +} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt index c5749a23..f1597e87 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt @@ -29,7 +29,11 @@ data class ServerSetting( @ColumnInfo(name = "allowSelfSignedCertificate") var allowSelfSignedCertificate: Boolean, @ColumnInfo(name = "ldapSupport") var ldapSupport: Boolean, @ColumnInfo(name = "musicFolderId") var musicFolderId: String?, - @ColumnInfo(name = "minimumApiVersion") var minimumApiVersion: String? + @ColumnInfo(name = "minimumApiVersion") var minimumApiVersion: String?, + @ColumnInfo(name = "chatSupport") var chatSupport: Boolean = true, + @ColumnInfo(name = "bookmarkSupport") var bookmarkSupport: Boolean = true, + @ColumnInfo(name = "shareSupport") var shareSupport: Boolean = true, + @ColumnInfo(name = "podcastSupport") var podcastSupport: Boolean = true ) { constructor() : this ( -1, 0, "", "", "", "", false, false, false, null, null diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt index 89c5cbc3..fd07d52f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt @@ -7,6 +7,7 @@ import org.koin.core.qualifier.named import org.koin.dsl.module import org.moire.ultrasonic.data.AppDatabase import org.moire.ultrasonic.data.MIGRATION_1_2 +import org.moire.ultrasonic.data.MIGRATION_2_3 import org.moire.ultrasonic.fragment.ServerSettingsModel import org.moire.ultrasonic.util.Util @@ -24,7 +25,8 @@ val appPermanentStorage = module { AppDatabase::class.java, "ultrasonic-database" ) - .addMigrations(MIGRATION_1_2) + .addMigrations(MIGRATION_1_2) + .addMigrations(MIGRATION_2_3) .fallbackToDestructiveMigrationOnDowngrade() .build() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index 12519813..3bb409f6 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -295,14 +295,22 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { * Tests if the network connection to the entered Server Settings can be made */ private fun testConnection() { - val task: ModalBackgroundTask = object : ModalBackgroundTask( + val task: ModalBackgroundTask = object : ModalBackgroundTask( activity, false ) { @Throws(Throwable::class) - override fun doInBackground(): Boolean { - updateProgress(R.string.settings_testing_connection) + override fun doInBackground(): String { + + var progressString = """ + |%s - ${activity.resources.getString(R.string.button_bar_chat)} + |%s - ${activity.resources.getString(R.string.button_bar_bookmarks)} + |%s - ${activity.resources.getString(R.string.button_bar_shares)} + |%s - ${activity.resources.getString(R.string.button_bar_podcasts)} + """.trimMargin() + updateProgress(String.format(progressString, "⌛", "⌛", "⌛", "⌛")) + val configuration = SubsonicClientConfiguration( currentServerSetting!!.url, currentServerSetting!!.userName, @@ -330,17 +338,65 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { pingResponse = subsonicApiClient.api.ping().execute() ApiCallResponseChecker.checkResponseSuccessful(pingResponse) + updateProgress(String.format(progressString, "⌛", "⌛", "⌛", "⌛")) + + currentServerSetting!!.chatSupport = try { + subsonicApiClient.api.getChatMessages().execute() + true + } catch (e: Throwable) { false } + + updateProgress(String.format(progressString, + Util.boolToMark(currentServerSetting!!.chatSupport), + "⌛", "⌛", "⌛")) + + currentServerSetting!!.bookmarkSupport = try { + subsonicApiClient.api.getBookmarks().execute() + true + } catch (e: Throwable) { false } + + updateProgress(String.format(progressString, + Util.boolToMark(currentServerSetting!!.chatSupport), + Util.boolToMark(currentServerSetting!!.bookmarkSupport), + "⌛", "⌛")) + + currentServerSetting!!.shareSupport = try { + subsonicApiClient.api.getShares().execute() + true + } catch (e: Throwable) { false } + + updateProgress(String.format(progressString, + Util.boolToMark(currentServerSetting!!.chatSupport), + Util.boolToMark(currentServerSetting!!.bookmarkSupport), + Util.boolToMark(currentServerSetting!!.shareSupport), + "⌛")) + + currentServerSetting!!.podcastSupport = try { + subsonicApiClient.api.getPodcasts().execute() + true + } catch (e: Throwable) { false } + + // Finalize String before displaying it to Dialog + progressString = String.format(progressString, + Util.boolToMark(currentServerSetting!!.chatSupport), + Util.boolToMark(currentServerSetting!!.bookmarkSupport), + Util.boolToMark(currentServerSetting!!.shareSupport), + Util.boolToMark(currentServerSetting!!.podcastSupport)) + updateProgress(progressString) + val licenseResponse = subsonicApiClient.api.getLicense().execute() ApiCallResponseChecker.checkResponseSuccessful(licenseResponse) - return licenseResponse.body()!!.license.valid + if (!licenseResponse.body()!!.license.valid) { + progressString += "\n${activity.resources.getString(R.string.settings_testing_unlicensed)}" + } + return progressString } - override fun done(licenseValid: Boolean) { - if (licenseValid) { - Util.toast(activity, R.string.settings_testing_ok) - } else { - Util.toast(activity, R.string.settings_testing_unlicensed) - } + override fun done(responseString: String) { + Util.showDialog( + activity, + android.R.drawable.ic_dialog_info, + R.string.settings_testing_ok, + responseString) } override fun error(error: Throwable) { From 070e0ac792d34c52033a5aad1e85d6f321cdc726 Mon Sep 17 00:00:00 2001 From: Maxence G Date: Tue, 25 May 2021 18:51:00 +0200 Subject: [PATCH 02/13] Fix lintFormat + remove synchronized --- .../java/org/moire/ultrasonic/util/Util.java | 2 +- .../ultrasonic/activity/NavigationActivity.kt | 3 +- .../org/moire/ultrasonic/data/AppDatabase.kt | 16 ++++-- .../di/AppPermanentStorageModule.kt | 4 +- .../ultrasonic/fragment/EditServerFragment.kt | 51 ++++++++++++------- 5 files changed, 50 insertions(+), 26 deletions(-) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index da3e98af..35086202 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -365,7 +365,7 @@ public class Util * @param value Is true or false * @return The corresponding mark. */ - public static synchronized String boolToMark(boolean value) + public static String boolToMark(boolean value) { if (value) return "✔️"; diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 2cff4a3f..2a1f97c0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -370,8 +370,7 @@ class NavigationActivity : AppCompatActivity() { } private fun setMenuForServerSetting() { - if (isOffline()) - { + if (isOffline()) { chatMenuItem?.isVisible = false bookmarksMenuItem?.isVisible = false sharesMenuItem?.isVisible = false diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt index 2a882cd9..a29f895f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt @@ -27,9 +27,17 @@ val MIGRATION_1_2: Migration = object : Migration(1, 2) { val MIGRATION_2_3: Migration = object : Migration(2, 3) { override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("ALTER TABLE ServerSetting ADD COLUMN chatSupport INTEGER NOT NULL DEFAULT(1)") - database.execSQL("ALTER TABLE ServerSetting ADD COLUMN bookmarkSupport INTEGER NOT NULL DEFAULT(1)") - database.execSQL("ALTER TABLE ServerSetting ADD COLUMN shareSupport INTEGER NOT NULL DEFAULT(1)") - database.execSQL("ALTER TABLE ServerSetting ADD COLUMN podcastSupport INTEGER NOT NULL DEFAULT(1)") + database.execSQL( + "ALTER TABLE ServerSetting ADD COLUMN chatSupport INTEGER NOT NULL DEFAULT(1)" + ) + database.execSQL( + "ALTER TABLE ServerSetting ADD COLUMN bookmarkSupport INTEGER NOT NULL DEFAULT(1)" + ) + database.execSQL( + "ALTER TABLE ServerSetting ADD COLUMN shareSupport INTEGER NOT NULL DEFAULT(1)" + ) + database.execSQL( + "ALTER TABLE ServerSetting ADD COLUMN podcastSupport INTEGER NOT NULL DEFAULT(1)" + ) } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt index fd07d52f..31d63ffd 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt @@ -25,8 +25,8 @@ val appPermanentStorage = module { AppDatabase::class.java, "ultrasonic-database" ) - .addMigrations(MIGRATION_1_2) - .addMigrations(MIGRATION_2_3) + .addMigrations(MIGRATION_1_2) + .addMigrations(MIGRATION_2_3) .fallbackToDestructiveMigrationOnDowngrade() .build() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index 3bb409f6..c7d009fa 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -303,7 +303,8 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { @Throws(Throwable::class) override fun doInBackground(): String { - var progressString = """ + var progressString = + """ |%s - ${activity.resources.getString(R.string.button_bar_chat)} |%s - ${activity.resources.getString(R.string.button_bar_bookmarks)} |%s - ${activity.resources.getString(R.string.button_bar_shares)} @@ -345,30 +346,42 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { true } catch (e: Throwable) { false } - updateProgress(String.format(progressString, + updateProgress( + String.format( + progressString, Util.boolToMark(currentServerSetting!!.chatSupport), - "⌛", "⌛", "⌛")) + "⌛", "⌛", "⌛" + ) + ) currentServerSetting!!.bookmarkSupport = try { subsonicApiClient.api.getBookmarks().execute() true } catch (e: Throwable) { false } - updateProgress(String.format(progressString, + updateProgress( + String.format( + progressString, Util.boolToMark(currentServerSetting!!.chatSupport), Util.boolToMark(currentServerSetting!!.bookmarkSupport), - "⌛", "⌛")) + "⌛", "⌛" + ) + ) currentServerSetting!!.shareSupport = try { subsonicApiClient.api.getShares().execute() true } catch (e: Throwable) { false } - updateProgress(String.format(progressString, + updateProgress( + String.format( + progressString, Util.boolToMark(currentServerSetting!!.chatSupport), Util.boolToMark(currentServerSetting!!.bookmarkSupport), Util.boolToMark(currentServerSetting!!.shareSupport), - "⌛")) + "⌛" + ) + ) currentServerSetting!!.podcastSupport = try { subsonicApiClient.api.getPodcasts().execute() @@ -376,27 +389,31 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { } catch (e: Throwable) { false } // Finalize String before displaying it to Dialog - progressString = String.format(progressString, - Util.boolToMark(currentServerSetting!!.chatSupport), - Util.boolToMark(currentServerSetting!!.bookmarkSupport), - Util.boolToMark(currentServerSetting!!.shareSupport), - Util.boolToMark(currentServerSetting!!.podcastSupport)) + progressString = String.format( + progressString, + Util.boolToMark(currentServerSetting!!.chatSupport), + Util.boolToMark(currentServerSetting!!.bookmarkSupport), + Util.boolToMark(currentServerSetting!!.shareSupport), + Util.boolToMark(currentServerSetting!!.podcastSupport) + ) updateProgress(progressString) val licenseResponse = subsonicApiClient.api.getLicense().execute() ApiCallResponseChecker.checkResponseSuccessful(licenseResponse) if (!licenseResponse.body()!!.license.valid) { - progressString += "\n${activity.resources.getString(R.string.settings_testing_unlicensed)}" + progressString += "\n" + + activity.resources.getString(R.string.settings_testing_unlicensed) } return progressString } override fun done(responseString: String) { Util.showDialog( - activity, - android.R.drawable.ic_dialog_info, - R.string.settings_testing_ok, - responseString) + activity, + android.R.drawable.ic_dialog_info, + R.string.settings_testing_ok, + responseString + ) } override fun error(error: Throwable) { From 3c4a5064b05313b26a540c36b25b4808e1cffb06 Mon Sep 17 00:00:00 2001 From: Maxence G Date: Tue, 25 May 2021 19:30:02 +0200 Subject: [PATCH 03/13] change exception type --- .../org/moire/ultrasonic/fragment/EditServerFragment.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index c7d009fa..978f6bf3 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -29,6 +29,7 @@ import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.ModalBackgroundTask import org.moire.ultrasonic.util.Util import timber.log.Timber +import java.io.IOException /** * Displays a form where server settings can be created / edited @@ -344,7 +345,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { currentServerSetting!!.chatSupport = try { subsonicApiClient.api.getChatMessages().execute() true - } catch (e: Throwable) { false } + } catch (e: IOException) { false } updateProgress( String.format( @@ -357,7 +358,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { currentServerSetting!!.bookmarkSupport = try { subsonicApiClient.api.getBookmarks().execute() true - } catch (e: Throwable) { false } + } catch (e: IOException) { false } updateProgress( String.format( @@ -371,7 +372,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { currentServerSetting!!.shareSupport = try { subsonicApiClient.api.getShares().execute() true - } catch (e: Throwable) { false } + } catch (e: IOException) { false } updateProgress( String.format( @@ -386,7 +387,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { currentServerSetting!!.podcastSupport = try { subsonicApiClient.api.getPodcasts().execute() true - } catch (e: Throwable) { false } + } catch (e: IOException) { false } // Finalize String before displaying it to Dialog progressString = String.format( From 31850bf2704f5e3336ede7d813adb96e24db78ee Mon Sep 17 00:00:00 2001 From: tzugen <67737443+tzugen@users.noreply.github.com> Date: Wed, 26 May 2021 08:36:54 +0200 Subject: [PATCH 04/13] Cleanup AlertDialog method The other method was unused, so we can get rid of it. Also use a lambda for the callback --- .../java/org/moire/ultrasonic/util/Util.java | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index 35086202..fc4fce23 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -608,28 +608,16 @@ public class Util } - private static void showDialog(Context context, int icon, int titleId, int messageId) - { - new AlertDialog.Builder(context).setIcon(icon).setTitle(titleId).setMessage(messageId).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int i) - { - dialog.dismiss(); - } - }).show(); - } - + // The AlertDialog requires an Activity context, app context is not enough + // See https://stackoverflow.com/questions/5436822/ public static void showDialog(Context context, int icon, int titleId, String message) { - new AlertDialog.Builder(context).setIcon(icon).setTitle(titleId).setMessage(message).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int i) - { - dialog.dismiss(); - } - }).show(); + new AlertDialog.Builder(context) + .setIcon(icon) + .setTitle(titleId) + .setMessage(message) + .setPositiveButton(R.string.common_ok, (dialog, i) -> dialog.dismiss()) + .show(); } From f510638571d40dc053cf21217ee21ef80d9114db Mon Sep 17 00:00:00 2001 From: tzugen Date: Wed, 26 May 2021 08:44:11 +0200 Subject: [PATCH 05/13] Fix KtLint issue --- .../kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index 978f6bf3..d5767ce1 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.Observer import androidx.navigation.fragment.findNavController import com.google.android.material.switchmaterial.SwitchMaterial import com.google.android.material.textfield.TextInputLayout +import java.io.IOException import java.net.MalformedURLException import java.net.URL import org.koin.android.ext.android.inject @@ -29,7 +30,6 @@ import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.ModalBackgroundTask import org.moire.ultrasonic.util.Util import timber.log.Timber -import java.io.IOException /** * Displays a form where server settings can be created / edited From fd48367cab22fc3e27a578cbe167d78249207bd4 Mon Sep 17 00:00:00 2001 From: Maxence G Date: Sat, 29 May 2021 15:00:46 +0200 Subject: [PATCH 06/13] Reduce function length --- .../java/org/moire/ultrasonic/util/Util.java | 14 ---- .../ultrasonic/activity/NavigationActivity.kt | 10 +-- .../org/moire/ultrasonic/data/AppDatabase.kt | 8 +- .../moire/ultrasonic/data/ServerSetting.kt | 8 +- .../ultrasonic/fragment/EditServerFragment.kt | 82 ++++++++----------- 5 files changed, 48 insertions(+), 74 deletions(-) diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index fc4fce23..82366ed6 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -359,20 +359,6 @@ public class Util return Math.min(Math.max(percent,0),100) + " %"; } - /** - * Return a Mark depending on boolean (❌ or ✓) - * - * @param value Is true or false - * @return The corresponding mark. - */ - public static String boolToMark(boolean value) - { - if (value) - return "✔️"; - else - return "❌"; - } - /** * Converts a byte-count to a formatted string suitable for display to the user. diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 2a1f97c0..f81c99b8 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -377,10 +377,10 @@ class NavigationActivity : AppCompatActivity() { podcastsMenuItem?.isVisible = false return } - val activeServerProvider = inject(ActiveServerProvider::class.java) - chatMenuItem?.isVisible = activeServerProvider.value.getActiveServer().chatSupport - bookmarksMenuItem?.isVisible = activeServerProvider.value.getActiveServer().bookmarkSupport - sharesMenuItem?.isVisible = activeServerProvider.value.getActiveServer().shareSupport - podcastsMenuItem?.isVisible = activeServerProvider.value.getActiveServer().podcastSupport + val activeServerProvider = inject(ActiveServerProvider::class.java).value.getActiveServer() + chatMenuItem?.isVisible = activeServerProvider.chatSupport != false + bookmarksMenuItem?.isVisible = activeServerProvider.bookmarkSupport != false + sharesMenuItem?.isVisible = activeServerProvider.shareSupport != false + podcastsMenuItem?.isVisible = activeServerProvider.podcastSupport != false } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt index a29f895f..e4aa77dc 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/AppDatabase.kt @@ -28,16 +28,16 @@ val MIGRATION_1_2: Migration = object : Migration(1, 2) { val MIGRATION_2_3: Migration = object : Migration(2, 3) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL( - "ALTER TABLE ServerSetting ADD COLUMN chatSupport INTEGER NOT NULL DEFAULT(1)" + "ALTER TABLE ServerSetting ADD COLUMN chatSupport INTEGER" ) database.execSQL( - "ALTER TABLE ServerSetting ADD COLUMN bookmarkSupport INTEGER NOT NULL DEFAULT(1)" + "ALTER TABLE ServerSetting ADD COLUMN bookmarkSupport INTEGER" ) database.execSQL( - "ALTER TABLE ServerSetting ADD COLUMN shareSupport INTEGER NOT NULL DEFAULT(1)" + "ALTER TABLE ServerSetting ADD COLUMN shareSupport INTEGER" ) database.execSQL( - "ALTER TABLE ServerSetting ADD COLUMN podcastSupport INTEGER NOT NULL DEFAULT(1)" + "ALTER TABLE ServerSetting ADD COLUMN podcastSupport INTEGER" ) } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt index f1597e87..705f526a 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/data/ServerSetting.kt @@ -30,10 +30,10 @@ data class ServerSetting( @ColumnInfo(name = "ldapSupport") var ldapSupport: Boolean, @ColumnInfo(name = "musicFolderId") var musicFolderId: String?, @ColumnInfo(name = "minimumApiVersion") var minimumApiVersion: String?, - @ColumnInfo(name = "chatSupport") var chatSupport: Boolean = true, - @ColumnInfo(name = "bookmarkSupport") var bookmarkSupport: Boolean = true, - @ColumnInfo(name = "shareSupport") var shareSupport: Boolean = true, - @ColumnInfo(name = "podcastSupport") var podcastSupport: Boolean = true + @ColumnInfo(name = "chatSupport") var chatSupport: Boolean? = null, + @ColumnInfo(name = "bookmarkSupport") var bookmarkSupport: Boolean? = null, + @ColumnInfo(name = "shareSupport") var shareSupport: Boolean? = null, + @ColumnInfo(name = "podcastSupport") var podcastSupport: Boolean? = null ) { constructor() : this ( -1, 0, "", "", "", "", false, false, false, null, null diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index d5767ce1..b2f6bf4a 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -11,9 +11,6 @@ import androidx.lifecycle.Observer import androidx.navigation.fragment.findNavController import com.google.android.material.switchmaterial.SwitchMaterial import com.google.android.material.textfield.TextInputLayout -import java.io.IOException -import java.net.MalformedURLException -import java.net.URL import org.koin.android.ext.android.inject import org.koin.android.viewmodel.ext.android.viewModel import org.moire.ultrasonic.BuildConfig @@ -29,7 +26,11 @@ import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.ModalBackgroundTask import org.moire.ultrasonic.util.Util +import retrofit2.Call import timber.log.Timber +import java.io.IOException +import java.net.MalformedURLException +import java.net.URL /** * Displays a form where server settings can be created / edited @@ -300,18 +301,36 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { activity, false ) { + fun boolToMark(value: Boolean?): String { + if (value == null) + return "⌛" + return if (value) "✔️" else "❌" + } - @Throws(Throwable::class) - override fun doInBackground(): String { - - var progressString = - """ + fun getProgress(): String { + return String.format( + """ |%s - ${activity.resources.getString(R.string.button_bar_chat)} |%s - ${activity.resources.getString(R.string.button_bar_bookmarks)} |%s - ${activity.resources.getString(R.string.button_bar_shares)} |%s - ${activity.resources.getString(R.string.button_bar_podcasts)} - """.trimMargin() - updateProgress(String.format(progressString, "⌛", "⌛", "⌛", "⌛")) + """.trimMargin(), + boolToMark(currentServerSetting!!.chatSupport), + boolToMark(currentServerSetting!!.bookmarkSupport), + boolToMark(currentServerSetting!!.shareSupport), + boolToMark(currentServerSetting!!.podcastSupport) + ) + } + + @Throws(Throwable::class) + override fun doInBackground(): String { + + currentServerSetting!!.chatSupport = null + currentServerSetting!!.bookmarkSupport = null + currentServerSetting!!.shareSupport = null + currentServerSetting!!.podcastSupport = null + + updateProgress(getProgress()) val configuration = SubsonicClientConfiguration( currentServerSetting!!.url, @@ -340,72 +359,41 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { pingResponse = subsonicApiClient.api.ping().execute() ApiCallResponseChecker.checkResponseSuccessful(pingResponse) - updateProgress(String.format(progressString, "⌛", "⌛", "⌛", "⌛")) - currentServerSetting!!.chatSupport = try { subsonicApiClient.api.getChatMessages().execute() true } catch (e: IOException) { false } - updateProgress( - String.format( - progressString, - Util.boolToMark(currentServerSetting!!.chatSupport), - "⌛", "⌛", "⌛" - ) - ) + updateProgress(getProgress()) currentServerSetting!!.bookmarkSupport = try { subsonicApiClient.api.getBookmarks().execute() true } catch (e: IOException) { false } - updateProgress( - String.format( - progressString, - Util.boolToMark(currentServerSetting!!.chatSupport), - Util.boolToMark(currentServerSetting!!.bookmarkSupport), - "⌛", "⌛" - ) - ) + updateProgress(getProgress()) currentServerSetting!!.shareSupport = try { subsonicApiClient.api.getShares().execute() true } catch (e: IOException) { false } - updateProgress( - String.format( - progressString, - Util.boolToMark(currentServerSetting!!.chatSupport), - Util.boolToMark(currentServerSetting!!.bookmarkSupport), - Util.boolToMark(currentServerSetting!!.shareSupport), - "⌛" - ) - ) + updateProgress(getProgress()) currentServerSetting!!.podcastSupport = try { subsonicApiClient.api.getPodcasts().execute() true } catch (e: IOException) { false } - // Finalize String before displaying it to Dialog - progressString = String.format( - progressString, - Util.boolToMark(currentServerSetting!!.chatSupport), - Util.boolToMark(currentServerSetting!!.bookmarkSupport), - Util.boolToMark(currentServerSetting!!.shareSupport), - Util.boolToMark(currentServerSetting!!.podcastSupport) - ) - updateProgress(progressString) + updateProgress(getProgress()) val licenseResponse = subsonicApiClient.api.getLicense().execute() ApiCallResponseChecker.checkResponseSuccessful(licenseResponse) if (!licenseResponse.body()!!.license.valid) { - progressString += "\n" + + return getProgress() + "\n" + activity.resources.getString(R.string.settings_testing_unlicensed) } - return progressString + return getProgress() } override fun done(responseString: String) { From 075b80c01fc818c08cd20562042cafa60955181d Mon Sep 17 00:00:00 2001 From: Maxence G Date: Sat, 29 May 2021 15:30:01 +0200 Subject: [PATCH 07/13] Fix new active server getter --- .../moire/ultrasonic/activity/NavigationActivity.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 126454b5..c30e689f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -377,10 +377,10 @@ class NavigationActivity : AppCompatActivity() { podcastsMenuItem?.isVisible = false return } - val activeServerProvider = inject(ActiveServerProvider::class.java).value.getActiveServer() - chatMenuItem?.isVisible = activeServerProvider.chatSupport != false - bookmarksMenuItem?.isVisible = activeServerProvider.bookmarkSupport != false - sharesMenuItem?.isVisible = activeServerProvider.shareSupport != false - podcastsMenuItem?.isVisible = activeServerProvider.podcastSupport != false + val activeServerProvider: ActiveServerProvider by inject() + chatMenuItem?.isVisible = activeServerProvider.getActiveServer().chatSupport != false + bookmarksMenuItem?.isVisible = activeServerProvider.getActiveServer().bookmarkSupport != false + sharesMenuItem?.isVisible = activeServerProvider.getActiveServer().shareSupport != false + podcastsMenuItem?.isVisible = activeServerProvider.getActiveServer().podcastSupport != false } } From 3e0873537410ad41331671a88cfa0a5b7593a58b Mon Sep 17 00:00:00 2001 From: Maxence G Date: Sat, 29 May 2021 15:42:15 +0200 Subject: [PATCH 08/13] run ktlint --- .../ultrasonic/fragment/EditServerFragment.kt | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index d8776c14..f4b6d757 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -11,6 +11,9 @@ import androidx.lifecycle.Observer import androidx.navigation.fragment.findNavController import com.google.android.material.switchmaterial.SwitchMaterial import com.google.android.material.textfield.TextInputLayout +import java.io.IOException +import java.net.MalformedURLException +import java.net.URL import org.koin.android.ext.android.inject import org.koin.androidx.viewmodel.ext.android.viewModel import org.moire.ultrasonic.BuildConfig @@ -26,11 +29,7 @@ import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.ModalBackgroundTask import org.moire.ultrasonic.util.Util -import retrofit2.Call import timber.log.Timber -import java.io.IOException -import java.net.MalformedURLException -import java.net.URL /** * Displays a form where server settings can be created / edited @@ -309,16 +308,16 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { fun getProgress(): String { return String.format( - """ + """ |%s - ${activity.resources.getString(R.string.button_bar_chat)} |%s - ${activity.resources.getString(R.string.button_bar_bookmarks)} |%s - ${activity.resources.getString(R.string.button_bar_shares)} |%s - ${activity.resources.getString(R.string.button_bar_podcasts)} """.trimMargin(), - boolToMark(currentServerSetting!!.chatSupport), - boolToMark(currentServerSetting!!.bookmarkSupport), - boolToMark(currentServerSetting!!.shareSupport), - boolToMark(currentServerSetting!!.podcastSupport) + boolToMark(currentServerSetting!!.chatSupport), + boolToMark(currentServerSetting!!.bookmarkSupport), + boolToMark(currentServerSetting!!.shareSupport), + boolToMark(currentServerSetting!!.podcastSupport) ) } @@ -362,28 +361,36 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { currentServerSetting!!.chatSupport = try { subsonicApiClient.api.getChatMessages().execute() true - } catch (e: IOException) { false } + } catch (e: IOException) { + false + } updateProgress(getProgress()) currentServerSetting!!.bookmarkSupport = try { subsonicApiClient.api.getBookmarks().execute() true - } catch (e: IOException) { false } + } catch (e: IOException) { + false + } updateProgress(getProgress()) currentServerSetting!!.shareSupport = try { subsonicApiClient.api.getShares().execute() true - } catch (e: IOException) { false } + } catch (e: IOException) { + false + } updateProgress(getProgress()) currentServerSetting!!.podcastSupport = try { subsonicApiClient.api.getPodcasts().execute() true - } catch (e: IOException) { false } + } catch (e: IOException) { + false + } updateProgress(getProgress()) From 67870efd6795090c28e124e502adfc66d3616106 Mon Sep 17 00:00:00 2001 From: Maxence G Date: Sat, 29 May 2021 15:46:09 +0200 Subject: [PATCH 09/13] Fix length --- .../org/moire/ultrasonic/activity/NavigationActivity.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index c30e689f..7f8abc29 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -378,9 +378,10 @@ class NavigationActivity : AppCompatActivity() { return } val activeServerProvider: ActiveServerProvider by inject() - chatMenuItem?.isVisible = activeServerProvider.getActiveServer().chatSupport != false - bookmarksMenuItem?.isVisible = activeServerProvider.getActiveServer().bookmarkSupport != false - sharesMenuItem?.isVisible = activeServerProvider.getActiveServer().shareSupport != false - podcastsMenuItem?.isVisible = activeServerProvider.getActiveServer().podcastSupport != false + val activeServer = activeServerProvider.getActiveServer() + chatMenuItem?.isVisible = activeServer.chatSupport != false + bookmarksMenuItem?.isVisible = activeServer.bookmarkSupport != false + sharesMenuItem?.isVisible = activeServer.shareSupport != false + podcastsMenuItem?.isVisible = activeServer.podcastSupport != false } } From 41023282e8a323d148f07d68d66d0ebde602e30e Mon Sep 17 00:00:00 2001 From: Nite Date: Mon, 31 May 2021 13:38:53 +0200 Subject: [PATCH 10/13] Fixed detekt Fixed code duplication Added more info to the Connection Test dialog for the user --- .../ultrasonic/fragment/EditServerFragment.kt | 60 ++++++++++++------- ultrasonic/src/main/res/values/strings.xml | 1 + 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index f4b6d757..7f56979b 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -21,14 +21,17 @@ import org.moire.ultrasonic.R import org.moire.ultrasonic.api.subsonic.SubsonicAPIClient import org.moire.ultrasonic.api.subsonic.SubsonicAPIVersions import org.moire.ultrasonic.api.subsonic.SubsonicClientConfiguration +import org.moire.ultrasonic.api.subsonic.response.SubsonicResponse import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.data.ServerSetting import org.moire.ultrasonic.service.ApiCallResponseChecker import org.moire.ultrasonic.service.MusicServiceFactory +import org.moire.ultrasonic.service.SubsonicRESTException import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.ModalBackgroundTask import org.moire.ultrasonic.util.Util +import retrofit2.Response import timber.log.Timber /** @@ -309,10 +312,10 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { fun getProgress(): String { return String.format( """ - |%s - ${activity.resources.getString(R.string.button_bar_chat)} - |%s - ${activity.resources.getString(R.string.button_bar_bookmarks)} - |%s - ${activity.resources.getString(R.string.button_bar_shares)} - |%s - ${activity.resources.getString(R.string.button_bar_podcasts)} + |%s - ${resources.getString(R.string.button_bar_chat)} + |%s - ${resources.getString(R.string.button_bar_bookmarks)} + |%s - ${resources.getString(R.string.button_bar_shares)} + |%s - ${resources.getString(R.string.button_bar_podcasts)} """.trimMargin(), boolToMark(currentServerSetting!!.chatSupport), boolToMark(currentServerSetting!!.bookmarkSupport), @@ -358,38 +361,26 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { pingResponse = subsonicApiClient.api.ping().execute() ApiCallResponseChecker.checkResponseSuccessful(pingResponse) - currentServerSetting!!.chatSupport = try { + currentServerSetting!!.chatSupport = isServerFunctionAvailable { subsonicApiClient.api.getChatMessages().execute() - true - } catch (e: IOException) { - false } updateProgress(getProgress()) - currentServerSetting!!.bookmarkSupport = try { + currentServerSetting!!.bookmarkSupport = isServerFunctionAvailable { subsonicApiClient.api.getBookmarks().execute() - true - } catch (e: IOException) { - false } updateProgress(getProgress()) - currentServerSetting!!.shareSupport = try { + currentServerSetting!!.shareSupport = isServerFunctionAvailable { subsonicApiClient.api.getShares().execute() - true - } catch (e: IOException) { - false } updateProgress(getProgress()) - currentServerSetting!!.podcastSupport = try { + currentServerSetting!!.podcastSupport = isServerFunctionAvailable { subsonicApiClient.api.getPodcasts().execute() - true - } catch (e: IOException) { - false } updateProgress(getProgress()) @@ -398,17 +389,30 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { ApiCallResponseChecker.checkResponseSuccessful(licenseResponse) if (!licenseResponse.body()!!.license.valid) { return getProgress() + "\n" + - activity.resources.getString(R.string.settings_testing_unlicensed) + resources.getString(R.string.settings_testing_unlicensed) } return getProgress() } override fun done(responseString: String) { + var dialogText = responseString + if ( arrayOf(currentServerSetting!!.chatSupport, + currentServerSetting!!.bookmarkSupport, + currentServerSetting!!.shareSupport, + currentServerSetting!!.podcastSupport).any { x -> x == false } + ) { + dialogText = String.format( + "%s\n\n%s", + responseString, + resources.getString(R.string.server_editor_disabled_feature) + ) + } + Util.showDialog( activity, android.R.drawable.ic_dialog_info, R.string.settings_testing_ok, - responseString + dialogText ) } @@ -428,6 +432,18 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { task.execute() } + private fun isServerFunctionAvailable(function: () -> Response): Boolean { + return try { + val response = function() + ApiCallResponseChecker.checkResponseSuccessful(response) + true + } catch (_: IOException) { + false + } catch (_: SubsonicRESTException) { + false + } + } + /** * Finishes the Activity, after confirmation from the user if needed */ diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 7ab179e0..280d0352 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -462,6 +462,7 @@ Move down Authentication Advanced settings + One or more features were disabled because the server doesn\'t support them.\nYou can run this test again anytime. 1 song From fe5ee8b12a5118645934b06ecc48bd6226edd491 Mon Sep 17 00:00:00 2001 From: Nite Date: Mon, 31 May 2021 14:04:46 +0200 Subject: [PATCH 11/13] Fixed ktlint --- .../org/moire/ultrasonic/fragment/EditServerFragment.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index 7f56979b..39dc892d 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -14,6 +14,7 @@ import com.google.android.material.textfield.TextInputLayout import java.io.IOException import java.net.MalformedURLException import java.net.URL +import java.util.Locale import org.koin.android.ext.android.inject import org.koin.androidx.viewmodel.ext.android.viewModel import org.moire.ultrasonic.BuildConfig @@ -396,12 +397,15 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { override fun done(responseString: String) { var dialogText = responseString - if ( arrayOf(currentServerSetting!!.chatSupport, + if (arrayOf( + currentServerSetting!!.chatSupport, currentServerSetting!!.bookmarkSupport, currentServerSetting!!.shareSupport, - currentServerSetting!!.podcastSupport).any { x -> x == false } + currentServerSetting!!.podcastSupport + ).any { x -> x == false } ) { dialogText = String.format( + Locale.ROOT, "%s\n\n%s", responseString, resources.getString(R.string.server_editor_disabled_feature) From 132ee3b5636bde983ff5f3775c8d2a92fa6337c1 Mon Sep 17 00:00:00 2001 From: Nite Date: Mon, 31 May 2021 14:26:48 +0200 Subject: [PATCH 12/13] Removed unused string --- ultrasonic/src/main/res/values-cs/strings.xml | 1 - ultrasonic/src/main/res/values-de/strings.xml | 1 - ultrasonic/src/main/res/values-es/strings.xml | 1 - ultrasonic/src/main/res/values-fr/strings.xml | 1 - ultrasonic/src/main/res/values-hu/strings.xml | 1 - ultrasonic/src/main/res/values-it/strings.xml | 1 - ultrasonic/src/main/res/values-nl/strings.xml | 1 - ultrasonic/src/main/res/values-pl/strings.xml | 1 - ultrasonic/src/main/res/values-pt-rBR/strings.xml | 1 - ultrasonic/src/main/res/values-pt/strings.xml | 1 - ultrasonic/src/main/res/values-ru/strings.xml | 1 - ultrasonic/src/main/res/values-zh-rCN/strings.xml | 1 - ultrasonic/src/main/res/values/strings.xml | 1 - 13 files changed, 13 deletions(-) diff --git a/ultrasonic/src/main/res/values-cs/strings.xml b/ultrasonic/src/main/res/values-cs/strings.xml index eae638c6..21c58346 100644 --- a/ultrasonic/src/main/res/values-cs/strings.xml +++ b/ultrasonic/src/main/res/values-cs/strings.xml @@ -297,7 +297,6 @@ Zobrazovat číslo skladby Připojovat číslo skladby při zobrazování skladby Test připojení - Testuji připojení… Připojení je v pořádku Připojení je v pořádku. Server bez licence. Světlý diff --git a/ultrasonic/src/main/res/values-de/strings.xml b/ultrasonic/src/main/res/values-de/strings.xml index 32b362a5..ee0c65bf 100644 --- a/ultrasonic/src/main/res/values-de/strings.xml +++ b/ultrasonic/src/main/res/values-de/strings.xml @@ -296,7 +296,6 @@ Titelnummer anzeigen Titel mit Nummer anzeigen Verbindung testen - Teste Verbindung… Verbindung OK Verbindung OK, Server nicht lizensiert. Hell diff --git a/ultrasonic/src/main/res/values-es/strings.xml b/ultrasonic/src/main/res/values-es/strings.xml index 5c2520ba..6b11208a 100644 --- a/ultrasonic/src/main/res/values-es/strings.xml +++ b/ultrasonic/src/main/res/values-es/strings.xml @@ -309,7 +309,6 @@ Mostrar número de pista Incluir el número de pista cuando se muestre una canción Comprobar conexión - Comprobado conexión… La conexión es correcta La conexión es correcta. Servidor sin licencia. Claro diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index f2f65ed8..be164a44 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -297,7 +297,6 @@ Afficher le numéro du titre Inclure son numero lors de l\'affichage d\'un titre Tester la connexion - Connexion en cours de test… Connexion correcte Connexion correcte. Serveur sans licence. Clair diff --git a/ultrasonic/src/main/res/values-hu/strings.xml b/ultrasonic/src/main/res/values-hu/strings.xml index c185bcf5..3999ff01 100644 --- a/ultrasonic/src/main/res/values-hu/strings.xml +++ b/ultrasonic/src/main/res/values-hu/strings.xml @@ -297,7 +297,6 @@ Sorszám megjelenítése Dalok sorszámának megjelenítése. Kapcsolat tesztelése - Kapcsolat tesztelése… Kapcsolat OK! Kapcsolat OK! A kiszolgálónak nincs licence! Világos diff --git a/ultrasonic/src/main/res/values-it/strings.xml b/ultrasonic/src/main/res/values-it/strings.xml index a74532b5..043368a8 100644 --- a/ultrasonic/src/main/res/values-it/strings.xml +++ b/ultrasonic/src/main/res/values-it/strings.xml @@ -289,7 +289,6 @@ Visualizza numero traccia Includi numero traccia quando visualizzi una canzone Prova Connessione - Collaudo connessione… Connessione OK Connessione OK. Server senza licenza. Chiaro diff --git a/ultrasonic/src/main/res/values-nl/strings.xml b/ultrasonic/src/main/res/values-nl/strings.xml index 41c77857..d39fd5fd 100644 --- a/ultrasonic/src/main/res/values-nl/strings.xml +++ b/ultrasonic/src/main/res/values-nl/strings.xml @@ -307,7 +307,6 @@ Itemnummer tonen Itemnummer tonen tijdens tonen van nummers Verbinding testen - Bezig met testen van verbinding… Verbinding is goed Verbinding is goed; geen serverlicentie. Licht diff --git a/ultrasonic/src/main/res/values-pl/strings.xml b/ultrasonic/src/main/res/values-pl/strings.xml index 12d063bb..c09b4479 100644 --- a/ultrasonic/src/main/res/values-pl/strings.xml +++ b/ultrasonic/src/main/res/values-pl/strings.xml @@ -295,7 +295,6 @@ Wyświetlaj numer utworu Dołącza numer utworu podczas wyświetlania utworu Testuj połączenie - Trwa testowanie połączenia… Połączenie jest OK Połączenie jest OK. Brak licencji na serwerze. Jasny diff --git a/ultrasonic/src/main/res/values-pt-rBR/strings.xml b/ultrasonic/src/main/res/values-pt-rBR/strings.xml index 9989f711..0a864f66 100644 --- a/ultrasonic/src/main/res/values-pt-rBR/strings.xml +++ b/ultrasonic/src/main/res/values-pt-rBR/strings.xml @@ -297,7 +297,6 @@ Mostrar o Número da Faixa Incluir o número da faixa quando mostrando uma música Teste de Conexão - Testando conexão… Conexão OK Conexão OK. Servidor não licenciado. Claro diff --git a/ultrasonic/src/main/res/values-pt/strings.xml b/ultrasonic/src/main/res/values-pt/strings.xml index d607c8c4..74a7d3d4 100644 --- a/ultrasonic/src/main/res/values-pt/strings.xml +++ b/ultrasonic/src/main/res/values-pt/strings.xml @@ -295,7 +295,6 @@ Mostrar o Número da Faixa Incluir o número da faixa quando mostrando uma música Teste de Conexão - Testando conexão… Conexão OK Conexão OK. Servidor não licenciado. Claro diff --git a/ultrasonic/src/main/res/values-ru/strings.xml b/ultrasonic/src/main/res/values-ru/strings.xml index 277f7d6b..76d8f0c0 100644 --- a/ultrasonic/src/main/res/values-ru/strings.xml +++ b/ultrasonic/src/main/res/values-ru/strings.xml @@ -290,7 +290,6 @@ Показать номер трека Включить номер дорожки при отображении песни Тестовое соединение - Тестирование соединения… Успешное соединение Успешное соединение. Сервер нелицензионный. Светлая diff --git a/ultrasonic/src/main/res/values-zh-rCN/strings.xml b/ultrasonic/src/main/res/values-zh-rCN/strings.xml index 9ebc2ebc..e6fd90bf 100644 --- a/ultrasonic/src/main/res/values-zh-rCN/strings.xml +++ b/ultrasonic/src/main/res/values-zh-rCN/strings.xml @@ -220,7 +220,6 @@ 显示通知 总是显示通知 测试连接 - 测试连接… 连接正常 连接正常, 服务器未授权。 主题 diff --git a/ultrasonic/src/main/res/values/strings.xml b/ultrasonic/src/main/res/values/strings.xml index 280d0352..f0733e73 100644 --- a/ultrasonic/src/main/res/values/strings.xml +++ b/ultrasonic/src/main/res/values/strings.xml @@ -311,7 +311,6 @@ Show Track Number Include track number when displaying a song Test Connection - Testing connection… Connection is OK Connection is OK. Server unlicensed. Light From 17b9b776fb4270286e284790c66e26df20c23362 Mon Sep 17 00:00:00 2001 From: Maxence G Date: Mon, 31 May 2021 17:02:27 +0200 Subject: [PATCH 13/13] Add french translation --- ultrasonic/src/main/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/ultrasonic/src/main/res/values-fr/strings.xml b/ultrasonic/src/main/res/values-fr/strings.xml index be164a44..7270a666 100644 --- a/ultrasonic/src/main/res/values-fr/strings.xml +++ b/ultrasonic/src/main/res/values-fr/strings.xml @@ -498,5 +498,6 @@ Utiliser un système de notation à base d\'étoiles pour les morceaux au lieu de simplement mettre en avant les morceaux. + Une ou plusieurs fonctionnalités ont été désactivées car le serveur ne les prend pas en charge.\nVous pouvez réexécuter ce test à tout moment.