diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java index 2b41e9caa..5facfc05d 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java +++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java @@ -656,12 +656,10 @@ public interface NcApi { @DELETE Observable sendCommonDeleteRequest(@Header("Authorization") String authorization, @Url String url); + @POST Observable translateMessage(@Header("Authorization") String authorization, - @Url String url, - @Field("text") String text, - @Field("fromLanguage") String fromLanguage, - @Field("toLanguage") String toLanguage); + @Url String url); // @GET // Observable getLanguageOptions(@Header("Authorization") String authorization, 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 087e24817..e1d84ad4c 100644 --- a/app/src/main/java/com/nextcloud/talk/translate/TranslateActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/translate/TranslateActivity.kt @@ -1,15 +1,26 @@ package com.nextcloud.talk.translate +import android.app.AlertDialog import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.text.method.ScrollingMovementMethod +import android.view.View +import android.widget.ArrayAdapter import autodagger.AutoInjector import com.nextcloud.talk.R import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication +import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ActivityTranslateBinding +import com.nextcloud.talk.models.json.translations.TranslationsOverall import com.nextcloud.talk.users.UserManager +import com.nextcloud.talk.utils.ApiUtils 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 @@ -28,21 +39,27 @@ class TranslateActivity : BaseActivity() @Inject lateinit var userManager: UserManager + var fromLanguages = arrayOf("Detect Language") + + var toLanguages = arrayOf("Device Default") + 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?) { super.onCreate(savedInstanceState) + NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) binding = ActivityTranslateBinding.inflate(layoutInflater) - setupTextViews() setupActionBar() - setupSpinners() setContentView(binding.root) + setupTextViews() + setupSpinners() translate() + getLanguageOptions() } private fun setupActionBar() { @@ -74,58 +91,65 @@ class TranslateActivity : BaseActivity() private fun getLanguageOptions() { // 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 - // seprarate models for the JSON :| + // weird, for some reason I'm not getting a body from the server, but I'm getting a 200 OK, that's dumb + + } - // TODO get this function working + private fun translate() { - // var currentUser = userManager.currentUser.blockingGet() + val currentUser : User = userManager.currentUser.blockingGet() // Log.d("TranslateActivity Current User", currentUser.toString()) - // val credentials = ApiUtils.getCredentials(currentUser.username, currentUser.token) - // val translateURL = currentUser.baseUrl + "/translation" + "/translate" + val credentials : String = ApiUtils.getCredentials(currentUser.username, currentUser.token) + 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 { + override fun onSubscribe(d: Disposable) { + binding.translatedMessageTextview.visibility = View.GONE + binding.progressBar.visibility = View.VISIBLE + } - // ncApi.translateMessage(credentials, translateURL, text, fromLanguage, toLanguage) - // ?.subscribeOn(Schedulers.io()) - // ?.observeOn(AndroidSchedulers.mainThread()) - // ?.subscribe(object : Observer { - // override fun onSubscribe(d: Disposable) { - // // 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 onNext(translationOverall: TranslationsOverall) { + binding.progressBar.visibility = View.GONE + binding.translatedMessageTextview.visibility = View.VISIBLE + // binding.translatedMessageTextview.text = "Worked" + binding.translatedMessageTextview.text = translationOverall.ocs?.data?.text + } + + 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() { - // TODO set spinner options to use array from getLanguageOptions() - // TODO set onClickListener to call server using translate() - // binding.toLanguageSpinner.setOnClickListener(View.OnClickListener { - // // translate() - // }) - // - // binding.fromLanguageSpinner.setOnClickListener(View.OnClickListener { - // // translate() - // }) + //TODO create a way to show that items are disabled/enabled + binding.fromLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, + fromLanguages) + // binding.fromLanguageSpinner.isEnabled = false + + + + + binding.toLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, + toLanguages) + // binding.toLanguageSpinner.isEnabled = false } diff --git a/app/src/main/res/layout/activity_translate.xml b/app/src/main/res/layout/activity_translate.xml index 806d24178..41e48776f 100644 --- a/app/src/main/res/layout/activity_translate.xml +++ b/app/src/main/res/layout/activity_translate.xml @@ -27,43 +27,40 @@ - - - + + android:background="@color/grey_200" + android:layout_marginRight="@dimen/standard_margin" + /> + + + + + + android:layout_height="wrap_content" + android:layout_toRightOf="@id/fromLanguageSpinner" + android:background="@color/grey_200" + android:layout_marginLeft="@dimen/standard_margin" + /> - + @@ -85,8 +82,11 @@ android:layout_margin="@dimen/standard_margin" android:layout_weight="1" android:scrollbars="vertical" + android:padding="@dimen/dialog_padding" + android:background="@drawable/shape_grouped_incoming_message" android:text="" android:textSize="@dimen/message_text_size" + android:textColor="@color/nc_incoming_text_default" android:visibility="visible" />