issue 2931 progress - finally got most functionality + looks decent

Signed-off-by: Julius Linus <juliuslinus1@gmail.com>

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
rapterjet2004 2023-05-15 15:54:32 -05:00 committed by Andy Scherzinger
parent b91e17ca3d
commit c6eacd30ea
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
3 changed files with 99 additions and 77 deletions

View File

@ -656,12 +656,10 @@ public interface NcApi {
@DELETE @DELETE
Observable<GenericOverall> sendCommonDeleteRequest(@Header("Authorization") String authorization, @Url String url); Observable<GenericOverall> sendCommonDeleteRequest(@Header("Authorization") String authorization, @Url String url);
@POST @POST
Observable<TranslationsOverall> translateMessage(@Header("Authorization") String authorization, Observable<TranslationsOverall> translateMessage(@Header("Authorization") String authorization,
@Url String url, @Url String url);
@Field("text") String text,
@Field("fromLanguage") String fromLanguage,
@Field("toLanguage") String toLanguage);
// @GET // @GET
// Observable<TranslationsOverall> getLanguageOptions(@Header("Authorization") String authorization, // Observable<TranslationsOverall> getLanguageOptions(@Header("Authorization") String authorization,

View File

@ -1,15 +1,26 @@
package com.nextcloud.talk.translate package com.nextcloud.talk.translate
import android.app.AlertDialog
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.text.method.ScrollingMovementMethod import android.text.method.ScrollingMovementMethod
import android.view.View
import android.widget.ArrayAdapter
import autodagger.AutoInjector import autodagger.AutoInjector
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ActivityTranslateBinding import com.nextcloud.talk.databinding.ActivityTranslateBinding
import com.nextcloud.talk.models.json.translations.TranslationsOverall
import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.bundle.BundleKeys
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -28,21 +39,27 @@ class TranslateActivity : BaseActivity()
@Inject @Inject
lateinit var userManager: UserManager lateinit var userManager: UserManager
var fromLanguages = arrayOf("Detect Language")
var toLanguages = arrayOf("Device Default")
var text : String? = null var text : String? = null
var fromLanguage : String = "en" var fromLanguage : String = "de"
val toLanguage : String = "de" val toLanguage : String = Locale.getDefault().language
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
binding = ActivityTranslateBinding.inflate(layoutInflater) binding = ActivityTranslateBinding.inflate(layoutInflater)
setupTextViews()
setupActionBar() setupActionBar()
setupSpinners()
setContentView(binding.root) setContentView(binding.root)
setupTextViews()
setupSpinners()
translate() translate()
getLanguageOptions()
} }
private fun setupActionBar() { private fun setupActionBar() {
@ -74,58 +91,65 @@ class TranslateActivity : BaseActivity()
private fun getLanguageOptions() { private fun getLanguageOptions() {
// TODO implement this function to retrieve an array of strings from the server for each language option // TODO implement this function to retrieve an array of strings from the server for each language option
// this uses another call to their /languages endpoint which requires another separate function in ncAPI and // weird, for some reason I'm not getting a body from the server, but I'm getting a 200 OK, that's dumb
// seprarate models for the JSON :|
} }
// TODO get this function working
private fun translate() { private fun translate() {
// var currentUser = userManager.currentUser.blockingGet() val currentUser : User = userManager.currentUser.blockingGet()
// Log.d("TranslateActivity Current User", currentUser.toString()) // Log.d("TranslateActivity Current User", currentUser.toString())
// val credentials = ApiUtils.getCredentials(currentUser.username, currentUser.token) val credentials : String = ApiUtils.getCredentials(currentUser.username, currentUser.token)
// val translateURL = currentUser.baseUrl + "/translation" + "/translate" val translateURL = currentUser.baseUrl + "/ocs/v2.php//translation/translate?text=" + text+ "&toLanguage=" + toLanguage
ncApi.translateMessage(credentials, translateURL)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<TranslationsOverall> {
override fun onSubscribe(d: Disposable) {
binding.translatedMessageTextview.visibility = View.GONE
binding.progressBar.visibility = View.VISIBLE
}
// ncApi.translateMessage(credentials, translateURL, text, fromLanguage, toLanguage) override fun onNext(translationOverall: TranslationsOverall) {
// ?.subscribeOn(Schedulers.io()) binding.progressBar.visibility = View.GONE
// ?.observeOn(AndroidSchedulers.mainThread()) binding.translatedMessageTextview.visibility = View.VISIBLE
// ?.subscribe(object : Observer<TranslationsOverall> { // binding.translatedMessageTextview.text = "Worked"
// override fun onSubscribe(d: Disposable) { binding.translatedMessageTextview.text = translationOverall.ocs?.data?.text
// // TODO set progress bar to show
// binding.translatedMessageTextview.visibility = View.GONE
// binding.progressBar.visibility = View.VISIBLE
// }
//
// override fun onNext(translationOverall: TranslationsOverall) {
// // TODO hide progress bar
// binding.progressBar.visibility = View.GONE
// binding.translatedMessageTextview.visibility = View.VISIBLE
// binding.translatedMessageTextview.text = translationOverall.ocs?.data?.text
// }
//
// override fun onError(e: Throwable) {
// Log.e("TranslateActivity", "Error")
// }
//
// override fun onComplete() {
// // not needed?
// }
// })
}
override fun onError(e: Throwable) {
binding.progressBar.visibility = View.GONE
//
val builder = AlertDialog.Builder(this@TranslateActivity)
builder.setTitle("Translation Failed")
builder.setMessage("Could not detect language")
val dialog = builder.create()
dialog.show()
}
override fun onComplete() {
// not needed?
}
})
} }
private fun setupSpinners() { private fun setupSpinners() {
// TODO set spinner options to use array from getLanguageOptions()
// TODO set onClickListener to call server using translate() //TODO create a way to show that items are disabled/enabled
// binding.toLanguageSpinner.setOnClickListener(View.OnClickListener { binding.fromLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,
// // translate() fromLanguages)
// }) // binding.fromLanguageSpinner.isEnabled = false
//
// binding.fromLanguageSpinner.setOnClickListener(View.OnClickListener {
// // translate()
// })
binding.toLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,
toLanguages)
// binding.toLanguageSpinner.isEnabled = false
} }

View File

@ -27,43 +27,40 @@
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<RelativeLayout <LinearLayout
android:layout_width="match_parent" android:orientation="horizontal"
android:layout_height="wrap_content" > android:layout_width="wrap_content"
<TextView android:layout_gravity="center"
android:id="@+id/fromLanguage" android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_margin" android:padding="@dimen/standard_padding">
android:textSize="@dimen/input_text_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="From:"/>
<TextView
android:id="@+id/toLanguage"
android:layout_margin="@dimen/standard_margin"
android:textSize="@dimen/input_text_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/fromLanguage"
android:text="To:"/>
<Spinner <Spinner
android:id="@+id/fromLanguageSpinner" android:id="@+id/fromLanguageSpinner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_margin" android:background="@color/grey_200"
android:layout_marginTop="@dimen/standard_margin" android:layout_marginRight="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin" />
android:layout_marginBottom="@dimen/standard_margin"
android:layout_toRightOf="@id/fromLanguage" /> <ImageButton
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:backgroundTint="@color/colorBackgroundDarker"
android:background="@drawable/ic_chevron_right"
/>
<Spinner <Spinner
android:id="@+id/toLanguageSpinner" android:id="@+id/toLanguageSpinner"
android:layout_margin="@dimen/standard_margin"
android:layout_toRightOf="@id/toLanguage"
android:layout_below="@id/fromLanguage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"
android:layout_toRightOf="@id/fromLanguageSpinner"
android:background="@color/grey_200"
android:layout_marginLeft="@dimen/standard_margin"
/>
</RelativeLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/original_message_textview" android:id="@+id/original_message_textview"
@ -74,7 +71,7 @@
android:textColor="@color/nc_incoming_text_default" android:textColor="@color/nc_incoming_text_default"
android:padding="@dimen/dialog_padding" android:padding="@dimen/dialog_padding"
android:layout_margin="@dimen/standard_margin" android:layout_margin="@dimen/standard_margin"
android:background="@drawable/shape_incoming_message" android:background="@drawable/shape_grouped_incoming_message"
android:scrollbars="vertical" android:scrollbars="vertical"
android:text="" /> android:text="" />
@ -85,8 +82,11 @@
android:layout_margin="@dimen/standard_margin" android:layout_margin="@dimen/standard_margin"
android:layout_weight="1" android:layout_weight="1"
android:scrollbars="vertical" android:scrollbars="vertical"
android:padding="@dimen/dialog_padding"
android:background="@drawable/shape_grouped_incoming_message"
android:text="" android:text=""
android:textSize="@dimen/message_text_size" android:textSize="@dimen/message_text_size"
android:textColor="@color/nc_incoming_text_default"
android:visibility="visible" /> android:visibility="visible" />
<ProgressBar <ProgressBar