diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c19ec0e774fe46e7d49437fc5fb5ac0a655637d1..ada6f42557d3598086076defc958b3568f11ad47 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -72,7 +72,7 @@ android { minSdkVersion(16) targetSdkVersion(27) - applicationId = "de.kuschku.quasseldroid" + applicationId = "com.iskrembilen.quasseldroid" versionCode = cmd("git", "rev-list", "--count", "HEAD")?.toIntOrNull() ?: 1 versionName = cmd("git", "describe", "--always", "--tags", "HEAD") ?: "1.0.0" diff --git a/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt b/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt index c6631ecd837c20c98edc0bc48c4827b3c095e20d..ffb178515e8d5ecbca236704ffb7e034dc49b3ff 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/Quasseldroid.kt @@ -27,13 +27,18 @@ import dagger.android.AndroidInjector import dagger.android.support.DaggerApplication import de.kuschku.malheur.CrashHandler import de.kuschku.quasseldroid.dagger.DaggerAppComponent +import de.kuschku.quasseldroid.persistence.AccountDatabase +import de.kuschku.quasseldroid.persistence.LegacyAccountDatabase +import de.kuschku.quasseldroid.settings.AppearanceSettings +import de.kuschku.quasseldroid.settings.SettingsMigration +import de.kuschku.quasseldroid.settings.SettingsMigrationManager import de.kuschku.quasseldroid.util.backport.AndroidThreeTenBackport import de.kuschku.quasseldroid.util.compatibility.AndroidCompatibilityUtils import de.kuschku.quasseldroid.util.compatibility.AndroidLoggingHandler import de.kuschku.quasseldroid.util.compatibility.AndroidStreamChannelFactory class Quasseldroid : DaggerApplication() { - override fun applicationInjector(): AndroidInjector<out Quasseldroid> = + override fun applicationInjector(): AndroidInjector<Quasseldroid> = DaggerAppComponent.builder().create(this) override fun onCreate() { @@ -58,6 +63,94 @@ class Quasseldroid : DaggerApplication() { AndroidThreeTenBackport.init(this) + applicationInjector().inject(this) + + // Migrate preferences + SettingsMigrationManager(listOf( + SettingsMigration.migrationOf(0, 1) { prefs, edit -> + // Migrating database + val database = LegacyAccountDatabase.Creator.init(this) + val accounts = database.accounts().all() + database.close() + + val accountDatabase = AccountDatabase.Creator.init(this) + accountDatabase.accounts().create(*accounts.map { + AccountDatabase.Account( + id = it.id, + host = it.host, + port = it.port, + user = it.user, + pass = it.pass, + name = it.name, + lastUsed = 0 + ) + }.toTypedArray()) + accountDatabase.close() + Thread(Runnable { + deleteDatabase("data") + }).start() + + // Migrating actual settings + if (prefs.contains("selectedtheme")) { + prefs.getString("selectedtheme", "").let { theme -> + when (theme) { + "light" -> AppearanceSettings.Theme.MATERIAL_LIGHT + "dark" -> AppearanceSettings.Theme.MATERIAL_DARK + else -> null + }?.let { + edit.putString(getString(R.string.preference_theme_key), it.name) + } + } + edit.remove("selectedtheme") + } + + if (prefs.contains("timestamp")) { + prefs.getString("timestamp", "").let { timestamp -> + edit.putBoolean(getString(R.string.preference_show_seconds_key), + timestamp.contains("ss")) + edit.putBoolean(getString(R.string.preference_show_seconds_key), + timestamp.contains("hh") || timestamp.contains("a")) + } + edit.remove("timestamp") + } + + if (prefs.contains("fontsizeChannelList")) { + prefs.getString("fontsizeChannelList", "").toIntOrNull()?.let { fontSize -> + edit.putInt(getString(R.string.preference_textsize_key), fontSize) + } + edit.remove("fontsizeChannelList") + } + + if (prefs.contains("allowcoloredtext")) { + prefs.getBoolean("allowcoloredtext", false).let { + edit.putBoolean(getString(R.string.preference_colorize_mirc_key), it) + } + edit.remove("allowcoloredtext") + } + + if (prefs.contains("monospace")) { + prefs.getBoolean("monospace", false).let { + edit.putBoolean(getString(R.string.preference_monospace_key), it) + } + edit.remove("monospace") + } + + if (prefs.contains("detailed_actions")) { + prefs.getBoolean("detailed_actions", false).let { + edit.putBoolean(getString(R.string.preference_hostmask_actions_key), it) + } + edit.remove("detailed_actions") + } + + if (prefs.contains("showlag")) { + prefs.getBoolean("showlag", false).let { + edit.putBoolean(getString(R.string.preference_show_lag_key), it) + } + edit.remove("showlag") + } + } + )).migrate(PreferenceManager.getDefaultSharedPreferences(this)) + // Initialize preferences unless already set PreferenceManager.setDefaultValues(this, R.xml.preferences, false) diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt index d45d4883de96f4900a8d509deeab77d57681052c..407d3e594aa35bf75374625074d782176278f13b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasseldroidNotificationManager.kt @@ -29,6 +29,7 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.drawable.Drawable +import android.net.Uri import android.os.Build import android.support.v4.app.NotificationCompat import android.support.v4.app.NotificationManagerCompat @@ -148,12 +149,8 @@ class QuasseldroidNotificationManager @Inject constructor(private val context: C .apply { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { var defaults = 0 - if (notificationSettings.notificationSoundEnabled) { - if (notificationSettings.notificationSound != null) { - setSound(notificationSettings.notificationSound) - } else { - defaults = defaults or NotificationCompat.DEFAULT_SOUND - } + if (!notificationSettings.sound.isNullOrEmpty()) { + setSound(Uri.parse(notificationSettings.sound)) } if (notificationSettings.vibrate) { defaults = defaults or NotificationCompat.DEFAULT_VIBRATE diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt index 958981f6e3d0aed8825f291d4ed50c202ba36902..15aae626cb8409fd026c09302026019f3a91fffe 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt @@ -28,7 +28,6 @@ data class MessageSettings( val showSeconds: Boolean = false, val use24hClock: Boolean = true, val showHostmaskActions: Boolean = false, - val showHostmaskPlain: Boolean = false, val nicksOnNewLine: Boolean = false, val timeAtEnd: Boolean = false, val showRealNames: Boolean = false, diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt index ca9f720e6651a40ebb41e1fec88dafb2ccb4f1a3..71cc7334718c7a3bea76471cf1d453d3c9395976 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt @@ -19,14 +19,11 @@ package de.kuschku.quasseldroid.settings -import android.net.Uri - data class NotificationSettings( val query: Level = Level.ALL, val channel: Level = Level.HIGHLIGHT, val other: Level = Level.NONE, - val notificationSoundEnabled: Boolean = false, - val notificationSound: Uri? = null, + val sound: String? = null, val vibrate: Boolean = true ) { enum class Level { diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt index 057b7c0357698cdd5b47a4f8c371b6577f9d34d0..9a1730e64b3c743d85a0b3830a4546bb48453a78 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt @@ -85,10 +85,6 @@ object Settings { context.getString(R.string.preference_hostmask_actions_key), MessageSettings.DEFAULT.showHostmaskActions ), - showHostmaskPlain = getBoolean( - context.getString(R.string.preference_hostmask_plain_key), - MessageSettings.DEFAULT.showHostmaskPlain - ), nicksOnNewLine = getBoolean( context.getString(R.string.preference_nicks_on_new_line_key), MessageSettings.DEFAULT.nicksOnNewLine diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigration.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigration.kt new file mode 100644 index 0000000000000000000000000000000000000000..7b5514957ef052f4b0b85842a562218321ea9244 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigration.kt @@ -0,0 +1,41 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2018 Janne Koschinski + * Copyright (c) 2018 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * 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 <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid.settings + +import android.content.SharedPreferences + +interface SettingsMigration { + val from: Int + val to: Int + + fun migrate(preferences: SharedPreferences, editor: SharedPreferences.Editor) + + companion object { + fun migrationOf(from: Int, to: Int, + migrationFunction: (SharedPreferences, SharedPreferences.Editor) -> Unit): SettingsMigration { + return object : SettingsMigration { + override val from = from + override val to = to + override fun migrate(preferences: SharedPreferences, editor: SharedPreferences.Editor) = + migrationFunction(preferences, editor) + } + } + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigrationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigrationManager.kt new file mode 100644 index 0000000000000000000000000000000000000000..b8c5c2990cc8f5094a403c730b6163a02fd20e37 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/SettingsMigrationManager.kt @@ -0,0 +1,46 @@ +/* + * Quasseldroid - Quassel client for Android + * + * Copyright (c) 2018 Janne Koschinski + * Copyright (c) 2018 The Quassel Project + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3 as published + * by the Free Software Foundation. + * + * 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 <http://www.gnu.org/licenses/>. + */ + +package de.kuschku.quasseldroid.settings + +import android.content.SharedPreferences + +class SettingsMigrationManager( + migrations: List<SettingsMigration> +) { + private val migrationMap = migrations.associateBy(SettingsMigration::from) + private val currentVersion = migrations.map(SettingsMigration::to).max() + + fun migrate(preferences: SharedPreferences) { + var version = preferences.getInt(SETTINGS_VERSION, 0) + while (version != currentVersion) { + val migration = migrationMap[version] + ?: throw IllegalArgumentException("Migration not available") + val editor = preferences.edit() + migration.migrate(preferences, editor) + version = migration.to + editor.putInt(SETTINGS_VERSION, version) + editor.commit() + } + } + + companion object { + private const val SETTINGS_VERSION = "settings_version" + } +} diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt index 87d23eed9d057948f3bed1f8de0a0c601b08aab4..bbe2414d1ef274eab22437ef7df69af9f4c7b855 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt @@ -205,7 +205,7 @@ class QuasselMessageRenderer @Inject constructor( message.content.sender, self, highlight, - messageSettings.showHostmaskPlain && messageSettings.nicksOnNewLine + false )) } val content = contentFormatter.formatContent(message.content.content, highlight) diff --git a/app/src/main/res/values-de/strings_preferences.xml b/app/src/main/res/values-de/strings_preferences.xml index 91a1876c8f7d10c540264340de0d593a22ea8e95..3295059cb8fc54c6f16f084c120f551cdb7b99e3 100644 --- a/app/src/main/res/values-de/strings_preferences.xml +++ b/app/src/main/res/values-de/strings_preferences.xml @@ -80,9 +80,6 @@ <string name="preference_hostmask_actions_title">Hostmaske in Aktionen</string> <string name="preference_hostmask_actions_summary">Zeigt Ident und Host in Betreten/Verlassen-Nachrichten</string> - <string name="preference_hostmask_plain_title">Hostmaske in normalen Nachrichten</string> - <string name="preference_hostmask_plain_summary">Zeigt Ident und Host in normalen Nachrichten</string> - <string name="preference_nicks_on_new_line_title">Separate Spitznamen</string> <string name="preference_nicks_on_new_line_summary">Zeigt Spitznamen in einer eigenen Zeile an</string> diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index d59aa3e8fd488c144813f0baceb64bfcfdc6bd39..9ba628c8706d1ebc07ed247f91badcbef8434a5a 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -159,10 +159,6 @@ <string name="preference_hostmask_actions_title">Show Hostmask in actions</string> <string name="preference_hostmask_actions_summary">Display the full nick!ident@host in join/part/quit messages</string> - <string name="preference_hostmask_plain_key" translatable="false">hostmask_plain</string> - <string name="preference_hostmask_plain_title">Show Hostmask in normal messages</string> - <string name="preference_hostmask_plain_summary">Display the full nick!ident@host in normal messages</string> - <string name="preference_nicks_on_new_line_key" translatable="false">nicks_on_new_line</string> <string name="preference_nicks_on_new_line_title">Separate Nicknames</string> <string name="preference_nicks_on_new_line_summary">Shows nicknames on a separate line</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d47e1523799b9fff6bbf570cb5fcad51629b05f1..a270c1f55307028ed70fb198cc28c2b4e08c9254 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -146,13 +146,6 @@ android:summary="@string/preference_hostmask_actions_summary" android:title="@string/preference_hostmask_actions_title" /> - <SwitchPreference - android:defaultValue="false" - android:dependency="@string/preference_nicks_on_new_line_key" - android:key="@string/preference_hostmask_plain_key" - android:summary="@string/preference_hostmask_plain_summary" - android:title="@string/preference_hostmask_plain_title" /> - <SwitchPreference android:defaultValue="true" android:key="@string/preference_time_at_end_key"