From f86859794f829fd4d163e26b222f2da2092bdd4a Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Wed, 26 May 2021 19:58:19 +0200 Subject: [PATCH] Improve deceptive network warning --- app/src/main/assets/networks.json | 9 ++------ .../settings/AppearanceSettings.kt | 3 ++- .../kuschku/quasseldroid/settings/Settings.kt | 6 +++++- .../quasseldroid/ui/chat/ChatActivity.kt | 6 ++++-- .../DeceptiveNetworkDialog.kt | 12 ++++++----- .../raw/untrustworthy_network_freenode.html | 21 ------------------- app/src/main/res/values-de/strings.xml | 12 +++++++++++ app/src/main/res/values/strings.xml | 8 +++++++ .../main/res/values/strings_preferences.xml | 12 +++++++---- app/src/main/res/xml/preferences.xml | 5 +++++ .../viewmodel/helper/EditorViewModelHelper.kt | 4 +++- 11 files changed, 56 insertions(+), 42 deletions(-) delete mode 100644 app/src/main/res/raw/untrustworthy_network_freenode.html diff --git a/app/src/main/assets/networks.json b/app/src/main/assets/networks.json index 43fb35140..eaf2bbdec 100644 --- a/app/src/main/assets/networks.json +++ b/app/src/main/assets/networks.json @@ -298,21 +298,16 @@ ] }, { - "name": "Freenode", + "name": "Libera.Chat", "default": true, "defaultChannels": [ "#quassel" ], "servers": [ { - "host": "chat.freenode.net", + "host": "irc.libera.chat", "port": 6697, "secure": true - }, - { - "host": "chat.freenode.net", - "port": 6667, - "secure": false } ] }, diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt index ddf6aea96..0176e398f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt @@ -27,7 +27,8 @@ data class AppearanceSettings( val showLag: Boolean = true, val theme: Theme = Theme.MATERIAL_LIGHT, val language: String = "", - val keepScreenOn: Boolean = false + val keepScreenOn: Boolean = false, + val deceptiveNetworks: Boolean = true ) { enum class InputEnterMode { EMOJI, 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 20cb30430..102cf64c3 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt @@ -51,7 +51,11 @@ object Settings { language = getString( context.getString(R.string.preference_language_key), AppearanceSettings.DEFAULT.language - ) ?: "" + ) ?: "", + deceptiveNetworks = getBoolean( + context.getString(R.string.preference_deceptive_networks_key), + AppearanceSettings.DEFAULT.deceptiveNetworks + ) ) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index 5f8b613bc..e8c9bb369 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -769,7 +769,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc if (modelHelper.connectionProgress.value?.first == ConnectionState.CONNECTED && modelHelper.deceptiveNetwork.value == true) { DeceptiveNetworkDialog.Builder(this) - .message(R.raw.untrustworthy_network_freenode) + .message(R.string.deceptive_network_freenode) .show() } else { modelHelper.sessionManager.value?.orNull()?.apply { @@ -789,6 +789,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc ConnectionState.CLOSED -> { binding.layoutMain.layoutToolbar.progressBar.visibility = View.INVISIBLE + binding.layoutMain.connectionStatus.icon.setImageResource(R.drawable.ic_disconnected) binding.layoutMain.connectionStatus.setMode(WarningBarView.MODE_ICON) binding.layoutMain.connectionStatus.setText(getString(R.string.label_status_disconnected)) } @@ -818,8 +819,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc } ConnectionState.CONNECTED -> { binding.layoutMain.layoutToolbar.progressBar.visibility = View.INVISIBLE - if (deceptive) { + if (deceptive && appearanceSettings.deceptiveNetworks) { binding.layoutMain.connectionStatus.setMode(WarningBarView.MODE_ICON) + binding.layoutMain.connectionStatus.icon.setImageResource(R.drawable.ic_alert) binding.layoutMain.connectionStatus.setText(R.string.deceptive_network) } else { binding.layoutMain.connectionStatus.setMode(WarningBarView.MODE_NONE) diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/deceptive_networks/DeceptiveNetworkDialog.kt b/app/src/main/java/de/kuschku/quasseldroid/util/deceptive_networks/DeceptiveNetworkDialog.kt index 2acf8d935..beed44af5 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/deceptive_networks/DeceptiveNetworkDialog.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/deceptive_networks/DeceptiveNetworkDialog.kt @@ -25,6 +25,7 @@ import android.os.Bundle import android.text.Html import android.widget.TextView import androidx.annotation.RawRes +import androidx.annotation.StringRes import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentManager @@ -32,6 +33,7 @@ import butterknife.BindView import butterknife.ButterKnife import com.afollestad.materialdialogs.MaterialDialog import de.kuschku.quasseldroid.R +import de.kuschku.quasseldroid.util.ui.BetterLinkMovementMethod class DeceptiveNetworkDialog : DialogFragment() { private var builder: Builder? = null @@ -44,12 +46,12 @@ class DeceptiveNetworkDialog : DialogFragment() { val dialog = MaterialDialog.Builder(requireContext()) .customView(R.layout.dialog_deceptive_network, true) .title(R.string.deceptive_network) + .negativeText(R.string.label_close) .build() ButterKnife.bind(this, dialog.customView!!) builder?.message?.let { - message.text = Html.fromHtml( - resources.openRawResource(it).bufferedReader(Charsets.UTF_8).readText() - ) + message.text = Html.fromHtml(getString(it)) + message.movementMethod = BetterLinkMovementMethod.newInstance() } return dialog } @@ -70,10 +72,10 @@ class DeceptiveNetworkDialog : DialogFragment() { class Builder(private val fragmentManager: FragmentManager) { constructor(context: FragmentActivity) : this(context.supportFragmentManager) - @RawRes + @StringRes var message: Int? = null - fun message(@RawRes message: Int?): Builder { + fun message(@StringRes message: Int?): Builder { this.message = message return this } diff --git a/app/src/main/res/raw/untrustworthy_network_freenode.html b/app/src/main/res/raw/untrustworthy_network_freenode.html deleted file mode 100644 index a565c563b..000000000 --- a/app/src/main/res/raw/untrustworthy_network_freenode.html +++ /dev/null @@ -1,21 +0,0 @@ -<!-- - Quasseldroid - Quassel client for Android - - Copyright (c) 2021 Janne Mareike Koschinski - Copyright (c) 2021 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/>. - --> -<p>The staff of this network has taken over several official project channels against the wishes of the channel owners.<br/> -Those projects have mostly moved to other networks such as libera.chat.</p> -<p>Before joining or chatting in any project channel make sure to verify that the channel you are in hasn’t moved or been taken over.</p> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a66f3f457..7568d2d45 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -187,6 +187,18 @@ <string name="notification_channel_highlight_title">Benachrichtigungen</string> <string name="notification_channel_old_highlight_title">Alte Benachrichtigungen</string> + <string name="deceptive_network">Irreführendes IRC-Netzwerk</string> + <string name="deceptive_network_freenode"><![CDATA[ + <p> + Das Team dieses Netzwerkes hat die Kontrolle über die offiziellen Kanäle mehrerer Projekte übernommen. + Dies geschah gegen die Wünsche der Channel-Operatoren. + Diese Projekte sind auf andere IRC-Netzwerke wie <a href="https://libera.chat/">libera.chat</a> und <a href="https://www.oftc.net/">OFTC</a> umgezogen. + </p> + <p> + Bitte verifiziere vor dem Betreten und Chatten in Kanälen, ob die Channels umgezogen sind oder von neuen Moderatoren übernommen wurden. + </p> + ]]></string> + <string name="label_missing_features">Fehlende Features</string> <string name="info_missing_features" tools:ignore="StringFormatCount">Deinem Core fehlen bestimmte Features die benötigt werden damit Quasseldroid korrekt funktionieren kann. Du solltest deinen Quassel Core auf Version %1$s oder neuer <a href="https://quassel-irc.org>updaten</a>.</string> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e1fae9264..d95a4d045 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -188,6 +188,14 @@ <string name="notification_channel_old_highlight_title">Old Highlights</string> <string name="deceptive_network">Deceptive Network detected</string> + <string name="deceptive_network_freenode"><![CDATA[ + <p> + The staff of this network have taken over several official project channels. + This happened against the wishes of the channel operators. + Those projects have moved to other networks such as <a href="https://libera.chat/">libera.chat</a> and <a href="https://www.oftc.net/">OFTC</a>. + Before joining or chatting in any project channel make sure to verify that the channel you are in hasn’t moved or been taken over. + </p> + ]]></string> <string name="label_missing_features">Missing Features</string> <string name="info_missing_features" tools:ignore="StringFormatCount">Your core is missing features that are required for Quasseldroid to work correctly. You should <a href="https://quassel-irc.org>upgrade</a> your Quassel core to %1$s or newer.</string> diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index 110584314..17790a2cf 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -36,21 +36,26 @@ <string name="preference_theme_entry_gruvbox_light">Gruvbox (Light)</string> <string name="preference_theme_entry_gruvbox_dark">Gruvbox (Dark)</string> <string name="preference_theme_entry_dracula">Dracula</string> + <string name="preference_input_enter_key" translatable="false">input_enter</string> <string name="preference_input_enter_title">Enter key on keyboard</string> + <string name="preference_deceptive_networks_key" translatable="false">deceptive_networks</string> + <string name="preference_deceptive_networks_title">Warn against deceptive networks</string> + <string name="preference_input_enter_entry_emoji">Emoji</string> <string name="preference_input_enter_entry_send">Send</string> <string name="preference_input_enter_entry_newline">New Line</string> + <string name="preference_show_lag_key" translatable="false">show_lag</string> <string name="preference_show_lag_title">Show Lag</string> <string name="preference_show_lag_summary">Displays the lag between client and core in the action bar</string> - <string name="preference_keep_screen_on_key" translatable="false">keep_screen_on</string> + <string name="preference_keep_screen_on_key" translatable="false">keep_screen_on</string> <string name="preference_keep_screen_on_title">Keep Screen Active</string> <string name="preference_keep_screen_on_summary">Prevents the device from going to sleep while the app is in foreground</string> - <string name="preference_language_key" translatable="false">language</string> + <string name="preference_language_key" translatable="false">language</string> <string name="preference_language_title">Language</string> <string name="preference_language_entry_auto">System Default</string> <string name="preference_language_entry_en" translatable="false">English</string> @@ -64,14 +69,13 @@ <string name="preference_language_entry_nl" translatable="false">Nederlands</string> <string name="preference_language_entry_pt" translatable="false">Português</string> <string name="preference_language_entry_sr" translatable="false">Srpski (latinica)</string> + <string name="preference_redirection_title">Message Redirection</string> <string name="preference_redirection_user_notices_key" translatable="false">redirection_user_notices</string> <string name="preference_redirection_user_notices_title">Redirect User Notices</string> <string name="preference_redirection_user_notices_summary">Displays user notices in the currently open channel</string> <string name="preference_redirection_server_notices_key" translatable="false">redirection_user_notices</string> <string name="preference_redirection_server_notices_title">Redirect Server Notices</string> - - <string name="preference_redirection_server_notices_summary">Displays server notices in the currently open channel</string> <string name="preference_redirection_errors_key" translatable="false">redirection_errors</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 6d5099edd..5744510bb 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -60,6 +60,11 @@ android:entryValues="@array/preference_language_entryvalues" android:key="@string/preference_language_key" android:title="@string/preference_language_title" /> + + <SwitchPreference + android:defaultValue="true" + android:key="@string/preference_deceptive_networks_key" + android:title="@string/preference_deceptive_networks_title" /> </PreferenceCategory> <PreferenceCategory android:layout="@layout/widget_preference_divider" /> diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt index fa1ddf148..28c8eb502 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt @@ -33,6 +33,7 @@ import de.kuschku.libquassel.util.helper.mapNullable import de.kuschku.libquassel.util.helper.nullIf import de.kuschku.libquassel.util.helper.safeSwitchMap import de.kuschku.quasseldroid.util.emoji.EmojiData +import de.kuschku.quasseldroid.util.safety.DeceptiveNetworkManager import de.kuschku.quasseldroid.viewmodel.ChatViewModel import de.kuschku.quasseldroid.viewmodel.EditorViewModel import de.kuschku.quasseldroid.viewmodel.QuasselViewModel @@ -44,9 +45,10 @@ import javax.inject.Inject open class EditorViewModelHelper @Inject constructor( val editor: EditorViewModel, + deceptiveNetworkManager: DeceptiveNetworkManager, chat: ChatViewModel, quassel: QuasselViewModel -) : ChatViewModelHelper(chat, quassel) { +) : ChatViewModelHelper(chat, deceptiveNetworkManager, quassel) { val rawAutoCompleteData: Observable<Triple<Optional<ISession>, BufferId, Pair<String, IntRange>>> = combineLatest( connectedSession, -- GitLab