Переглянути джерело

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>

rapterjet2004 2 роки тому
батько
коміт
c6eacd30ea

+ 2 - 4
app/src/main/java/com/nextcloud/talk/api/NcApi.java

@@ -656,12 +656,10 @@ public interface NcApi {
     @DELETE
     Observable<GenericOverall> sendCommonDeleteRequest(@Header("Authorization") String authorization, @Url String url);
 
+
     @POST
     Observable<TranslationsOverall> 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<TranslationsOverall> getLanguageOptions(@Header("Authorization") String authorization,

+ 73 - 49
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"
-
-
-
-        // ncApi.translateMessage(credentials, translateURL, text, fromLanguage, toLanguage)
-        //     ?.subscribeOn(Schedulers.io())
-        //     ?.observeOn(AndroidSchedulers.mainThread())
-        //     ?.subscribe(object : Observer<TranslationsOverall> {
-        //         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?
-        //         }
-        //     })
-
+        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<TranslationsOverall> {
+                override fun onSubscribe(d: Disposable) {
+                    binding.translatedMessageTextview.visibility = View.GONE
+                    binding.progressBar.visibility = View.VISIBLE
+                }
+
+                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
     }
 
 

+ 29 - 29
app/src/main/res/layout/activity_translate.xml

@@ -27,43 +27,40 @@
 
     </com.google.android.material.appbar.AppBarLayout>
 
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" >
-        <TextView
-            android:id="@+id/fromLanguage"
-            android:layout_margin="@dimen/standard_margin"
-            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:"/>
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="wrap_content"
+        android:layout_gravity="center"
+        android:layout_height="wrap_content"
+        android:padding="@dimen/standard_padding">
 
         <Spinner
             android:id="@+id/fromLanguageSpinner"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/standard_margin"
-            android:layout_marginTop="@dimen/standard_margin"
-            android:layout_marginEnd="@dimen/standard_margin"
-            android:layout_marginBottom="@dimen/standard_margin"
-            android:layout_toRightOf="@id/fromLanguage" />
+            android:background="@color/grey_200"
+            android:layout_marginRight="@dimen/standard_margin"
+           />
+
+        <ImageButton
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:backgroundTint="@color/colorBackgroundDarker"
+            android:background="@drawable/ic_chevron_right"
+            />
+
+
+
         <Spinner
             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_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
         android:id="@+id/original_message_textview"
@@ -74,7 +71,7 @@
         android:textColor="@color/nc_incoming_text_default"
         android:padding="@dimen/dialog_padding"
         android:layout_margin="@dimen/standard_margin"
-        android:background="@drawable/shape_incoming_message"
+        android:background="@drawable/shape_grouped_incoming_message"
         android:scrollbars="vertical"
         android:text="" />
 
@@ -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" />
 
     <ProgressBar