diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 4827ac978..0a23661bf 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -3239,7 +3239,6 @@ class ChatActivity : val intent = Intent(this, TranslateActivity::class.java) intent.putExtras(bundle) startActivity(intent) - } private fun hasVisibleItems(message: ChatMessage): Boolean { diff --git a/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateData.kt b/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateData.kt index 761562e22..2f37fb57f 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateData.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateData.kt @@ -1,3 +1,22 @@ +/* + * Nextcloud Talk application + * + * @author Julius Linus + * Copyright (C) 2023 Julius Linus + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * 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 . + */ package com.nextcloud.talk.models.json.translations import android.os.Parcelable @@ -16,4 +35,4 @@ data class TranslateData( ) : Parcelable { // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' constructor() : this(null, null ) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateOCS.kt b/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateOCS.kt index 608eeeb94..74ba31327 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateOCS.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslateOCS.kt @@ -1,3 +1,22 @@ +/* + * Nextcloud Talk application + * + * @author Julius Linus + * Copyright (C) 2023 Julius Linus + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * 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 . + */ package com.nextcloud.talk.models.json.translations import android.os.Parcelable @@ -16,4 +35,4 @@ data class TranslateOCS( // TODO finish this model ) : Parcelable { // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' constructor() : this(null, TranslateData()) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslationsOverall.kt b/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslationsOverall.kt index 8fbc9b80d..1b832e9cd 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslationsOverall.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/translations/TranslationsOverall.kt @@ -1,3 +1,22 @@ +/* + * Nextcloud Talk application + * + * @author Julius Linus + * Copyright (C) 2023 Julius Linus + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * 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 . + */ package com.nextcloud.talk.models.json.translations import android.os.Parcelable @@ -10,7 +29,7 @@ import kotlinx.parcelize.Parcelize class TranslationsOverall( @JsonField(name = ["ocs"]) var ocs: TranslateOCS? - ) : Parcelable { - // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' - constructor() : this(null) - } \ No newline at end of file +) : Parcelable { + // This constructor is added to work with the 'com.bluelinelabs.logansquare.annotation.JsonObject' + constructor() : this(null) +} diff --git a/app/src/main/java/com/nextcloud/talk/translate/TranslateActivity.kt b/app/src/main/java/com/nextcloud/talk/translate/TranslateActivity.kt index 0100d97cb..73f98a124 100644 --- a/app/src/main/java/com/nextcloud/talk/translate/TranslateActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/translate/TranslateActivity.kt @@ -1,4 +1,24 @@ +/* + * Nextcloud Talk application + * + * @author Julius Linus + * Copyright (C) 2023 Julius Linus + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * 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 . + */ package com.nextcloud.talk.translate + import android.app.AlertDialog import android.graphics.drawable.ColorDrawable import android.os.Bundle @@ -27,14 +47,8 @@ import org.json.JSONArray import java.util.Locale import javax.inject.Inject - - -// TODO include license at top of the file - - @AutoInjector(NextcloudTalkApplication::class) -class TranslateActivity : BaseActivity() -{ +class TranslateActivity : BaseActivity() { private lateinit var binding: ActivityTranslateBinding @Inject @@ -47,10 +61,9 @@ class TranslateActivity : BaseActivity() var toLanguages = arrayOf() - var text : String? = null - - var check : Int = 0 + var text: String? = null + var check: Int = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -59,6 +72,7 @@ class TranslateActivity : BaseActivity() setupActionBar() setContentView(binding.root) + setupSystemColors() setupTextViews() setupSpinners() getLanguageOptions() @@ -73,7 +87,7 @@ class TranslateActivity : BaseActivity() supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setIcon(ColorDrawable(resources!!.getColor(R.color.transparent))) - supportActionBar?.title = "Translation" + supportActionBar?.title = resources!!.getString(R.string.translation) viewThemeUtils.material.themeToolbar(binding.translationToolbar) } @@ -81,6 +95,9 @@ class TranslateActivity : BaseActivity() val original = binding.originalMessageTextview val translation = binding.translatedMessageTextview + viewThemeUtils.talk.themeIncomingMessageBubble(original, grouped = true, deleted = false) + viewThemeUtils.talk.themeIncomingMessageBubble(translation, grouped = true, deleted = false) + original.movementMethod = ScrollingMovementMethod() translation.movementMethod = ScrollingMovementMethod() @@ -89,19 +106,17 @@ class TranslateActivity : BaseActivity() text = bundle?.getString(BundleKeys.KEY_TRANSLATE_MESSAGE) } - private fun getLanguageOptions() { - val currentUser : User = userManager.currentUser.blockingGet() - val json = JSONArray(CapabilitiesUtilNew.getLanguages(currentUser).toString()) - Log.i("TranslateActivity", "json is: ${json.toString()}") + val currentUser: User = userManager.currentUser.blockingGet() + val json = JSONArray(CapabilitiesUtilNew.getLanguages(currentUser).toString()) + Log.i("TranslateActivity", "json is: $json") - var fromLanguagesSet = mutableSetOf("Detect Language") - var toLanguagesSet = mutableSetOf("Device Settings") + val fromLanguagesSet = mutableSetOf("Detect Language") + val toLanguagesSet = mutableSetOf("Device Settings") - for( i in 0..json.length()-1) { + for (i in 0..json.length() - 1) { val current = json.getJSONObject(i) - if(current.getString("from") != Locale.getDefault().language) - { + if (current.getString("from") != Locale.getDefault().language) { toLanguagesSet.add(current.getString("fromLabel")) } @@ -111,25 +126,32 @@ class TranslateActivity : BaseActivity() fromLanguages = fromLanguagesSet.toTypedArray() toLanguages = toLanguagesSet.toTypedArray() - binding.fromLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, - fromLanguages) - - binding.toLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, - toLanguages) + binding.fromLanguageSpinner.adapter = ArrayAdapter( + this, android.R.layout.simple_spinner_dropdown_item, + fromLanguages + ) + binding.toLanguageSpinner.adapter = ArrayAdapter( + this, android.R.layout.simple_spinner_dropdown_item, + toLanguages + ) } - private fun enableSpinners(value : Boolean) { + private fun enableSpinners(value: Boolean) { binding.fromLanguageSpinner.isEnabled = value binding.toLanguageSpinner.isEnabled = value } - private fun translate(fromLanguage: String?, toLanguage : String) { - val currentUser : User = userManager.currentUser.blockingGet() - val credentials : String = ApiUtils.getCredentials(currentUser.username, currentUser.token) + private fun translate(fromLanguage: String?, toLanguage: String) { + val currentUser: User = userManager.currentUser.blockingGet() + val credentials: String = ApiUtils.getCredentials(currentUser.username, currentUser.token) val translateURL = currentUser.baseUrl + "/ocs/v2.php/translation/translate?text=$text&toLanguage=$toLanguage" + - if(fromLanguage != null && fromLanguage != "") { "&fromLanguage=$fromLanguage" } else {""} + if (fromLanguage != null && fromLanguage != "") { + "&fromLanguage=$fromLanguage" + } else { + "" + } Log.i("TranslateActivity", "Url is: $translateURL") ncApi.translateMessage(credentials, translateURL) @@ -165,17 +187,15 @@ class TranslateActivity : BaseActivity() enableSpinners(true) } - - private fun getISOFromLanguage(language: String) : String { - if(language == "Device Settings") { + private fun getISOFromLanguage(language: String): String { + if (language == "Device Settings") { return Locale.getDefault().language } + val currentUser: User = userManager.currentUser.blockingGet() + val json = JSONArray(CapabilitiesUtilNew.getLanguages(currentUser).toString()) - val currentUser : User = userManager.currentUser.blockingGet() - val json = JSONArray(CapabilitiesUtilNew.getLanguages(currentUser).toString()) - - for( i in 0..json.length()-1) { + for (i in 0..json.length() - 1) { val current = json.getJSONObject(i) if (current.getString("fromLabel") == language) { return current.getString("from") @@ -185,20 +205,25 @@ class TranslateActivity : BaseActivity() return "" } - private fun setupSpinners() { - binding.fromLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, - fromLanguages) - binding.toLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, - toLanguages) + binding.fromLanguageSpinner.adapter = ArrayAdapter( + this, android.R.layout.simple_spinner_dropdown_item, + fromLanguages + ) + binding.toLanguageSpinner.adapter = ArrayAdapter( + this, android.R.layout.simple_spinner_dropdown_item, + toLanguages + ) binding.fromLanguageSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { - if(++check > 1) { - var fromLabel : String = getISOFromLanguage(parent.getItemAtPosition(position).toString()) - var toLabel : String = getISOFromLanguage(binding.toLanguageSpinner.selectedItem.toString()) - Log.i("TranslateActivity", "fromLanguageSpinner :: fromLabel = $fromLabel, toLabel = $ count: " + - "$check") + if (++check > 1) { + val fromLabel: String = getISOFromLanguage(parent.getItemAtPosition(position).toString()) + val toLabel: String = getISOFromLanguage(binding.toLanguageSpinner.selectedItem.toString()) + Log.i( + "TranslateActivity", "fromLanguageSpinner :: fromLabel = $fromLabel, toLabel = $ count: " + + "$check" + ) translate(fromLabel, toLabel) } } @@ -210,11 +235,13 @@ class TranslateActivity : BaseActivity() binding.toLanguageSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { - if(++check > 2) { - var toLabel : String = getISOFromLanguage(parent.getItemAtPosition(position).toString()) - var fromLabel : String = getISOFromLanguage(binding.fromLanguageSpinner.selectedItem.toString()) - Log.i("TranslateActivity", "toLanguageSpinner :: fromLabel = $fromLabel, toLabel = $toLabel " + - "count: $check") + if (++check > 2) { + val toLabel: String = getISOFromLanguage(parent.getItemAtPosition(position).toString()) + val fromLabel: String = getISOFromLanguage(binding.fromLanguageSpinner.selectedItem.toString()) + Log.i( + "TranslateActivity", "toLanguageSpinner :: fromLabel = $fromLabel, toLabel = $toLabel " + + "count: $check" + ) translate(fromLabel, toLabel) } } @@ -223,8 +250,5 @@ class TranslateActivity : BaseActivity() // write code to perform some action } } - } - - -} \ No newline at end of file +} diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt index b4b78bd81..4c69bcda3 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt @@ -65,7 +65,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( private val appcompat: AndroidXViewThemeUtils ) : ViewThemeUtilsBase(schemes) { - fun themeIncomingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { + fun themeIncomingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean) { val resources = bubble.resources var bubbleResource = R.drawable.shape_incoming_message @@ -88,7 +88,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( ViewCompat.setBackground(bubble, bubbleDrawable) } - fun themeOutgoingMessageBubble(bubble: ViewGroup, grouped: Boolean, deleted: Boolean) { + fun themeOutgoingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean) { withScheme(bubble) { scheme -> val bgBubbleColor = if (deleted) { ColorUtils.setAlphaComponent(scheme.surfaceVariant, HALF_ALPHA_INT) diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/CapabilitiesUtilNew.kt b/app/src/main/java/com/nextcloud/talk/utils/database/user/CapabilitiesUtilNew.kt index 64ad6056b..f88c031fc 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/user/CapabilitiesUtilNew.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/CapabilitiesUtilNew.kt @@ -219,7 +219,5 @@ object CapabilitiesUtilNew { return null } - - const val DEFAULT_CHAT_SIZE = 1000 } diff --git a/app/src/main/res/drawable-night/ic_chevron_right.xml b/app/src/main/res/drawable-night/ic_chevron_right.xml new file mode 100644 index 000000000..253ff96a2 --- /dev/null +++ b/app/src/main/res/drawable-night/ic_chevron_right.xml @@ -0,0 +1,25 @@ + + + + diff --git a/app/src/main/res/drawable/ic_baseline_translate_24.xml b/app/src/main/res/drawable/ic_baseline_translate_24.xml index 1a73c2d64..4b511684c 100644 --- a/app/src/main/res/drawable/ic_baseline_translate_24.xml +++ b/app/src/main/res/drawable/ic_baseline_translate_24.xml @@ -1,5 +1,26 @@ - - + + + diff --git a/app/src/main/res/drawable/ic_chevron_right.xml b/app/src/main/res/drawable/ic_chevron_right.xml new file mode 100644 index 000000000..91ec3a701 --- /dev/null +++ b/app/src/main/res/drawable/ic_chevron_right.xml @@ -0,0 +1,25 @@ + + + + diff --git a/app/src/main/res/layout/activity_translate.xml b/app/src/main/res/layout/activity_translate.xml index 04f431520..37ea6348f 100644 --- a/app/src/main/res/layout/activity_translate.xml +++ b/app/src/main/res/layout/activity_translate.xml @@ -1,16 +1,36 @@ + + android:layout_height="match_parent" + android:orientation="vertical" + android:weightSum="2"> + + tools:title=""> - - - + android:layout_height="@dimen/min_size_clickable_area" + android:layout_weight="1" + android:background="@color/grey_200" /> + + android:layout_height="@dimen/min_size_clickable_area" + android:layout_weight="1" + android:background="@color/grey_200" /> @@ -66,27 +80,31 @@ android:id="@+id/original_message_textview" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginStart="@dimen/standard_margin" + android:layout_marginEnd="@dimen/standard_margin" + android:layout_marginBottom="@dimen/standard_margin" android:layout_weight="1" - android:textSize="@dimen/message_text_size" - android:textColor="@color/nc_incoming_text_default" - android:padding="@dimen/dialog_padding" - android:layout_margin="@dimen/standard_margin" android:background="@drawable/shape_grouped_incoming_message" + android:padding="@dimen/dialog_padding" android:scrollbars="vertical" - android:text="" /> + android:text="" + android:textColor="@color/nc_incoming_text_default" + android:textSize="@dimen/message_text_size" /> - - \ No newline at end of file +