|
@@ -3,7 +3,9 @@ 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.util.Log
|
|
import android.view.View
|
|
import android.view.View
|
|
|
|
+import android.widget.AdapterView
|
|
import android.widget.ArrayAdapter
|
|
import android.widget.ArrayAdapter
|
|
import autodagger.AutoInjector
|
|
import autodagger.AutoInjector
|
|
import com.nextcloud.talk.R
|
|
import com.nextcloud.talk.R
|
|
@@ -16,10 +18,12 @@ 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.ApiUtils
|
|
import com.nextcloud.talk.utils.bundle.BundleKeys
|
|
import com.nextcloud.talk.utils.bundle.BundleKeys
|
|
|
|
+import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
|
|
import io.reactivex.Observer
|
|
import io.reactivex.Observer
|
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
import io.reactivex.disposables.Disposable
|
|
import io.reactivex.disposables.Disposable
|
|
import io.reactivex.schedulers.Schedulers
|
|
import io.reactivex.schedulers.Schedulers
|
|
|
|
+import org.json.JSONArray
|
|
import java.util.Locale
|
|
import java.util.Locale
|
|
import javax.inject.Inject
|
|
import javax.inject.Inject
|
|
|
|
|
|
@@ -39,15 +43,16 @@ class TranslateActivity : BaseActivity()
|
|
@Inject
|
|
@Inject
|
|
lateinit var userManager: UserManager
|
|
lateinit var userManager: UserManager
|
|
|
|
|
|
- var fromLanguages = arrayOf("Detect Language")
|
|
|
|
|
|
|
|
- var toLanguages = arrayOf("Device Default")
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ var fromLanguages = arrayOf<String>()
|
|
|
|
+
|
|
|
|
+ var toLanguages = arrayOf<String>()
|
|
|
|
|
|
var text : String? = null
|
|
var text : String? = null
|
|
|
|
|
|
- var fromLanguage : String = "de"
|
|
|
|
|
|
|
|
- val toLanguage : String = Locale.getDefault().language
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
super.onCreate(savedInstanceState)
|
|
@@ -58,8 +63,9 @@ class TranslateActivity : BaseActivity()
|
|
setContentView(binding.root)
|
|
setContentView(binding.root)
|
|
setupTextViews()
|
|
setupTextViews()
|
|
setupSpinners()
|
|
setupSpinners()
|
|
- translate()
|
|
|
|
getLanguageOptions()
|
|
getLanguageOptions()
|
|
|
|
+ translate(null, Locale.getDefault().language)
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
private fun setupActionBar() {
|
|
private fun setupActionBar() {
|
|
@@ -84,24 +90,49 @@ class TranslateActivity : BaseActivity()
|
|
val bundle = intent.extras
|
|
val bundle = intent.extras
|
|
binding.originalMessageTextview.text = bundle?.getString(BundleKeys.KEY_TRANSLATE_MESSAGE)
|
|
binding.originalMessageTextview.text = bundle?.getString(BundleKeys.KEY_TRANSLATE_MESSAGE)
|
|
text = bundle?.getString(BundleKeys.KEY_TRANSLATE_MESSAGE)
|
|
text = bundle?.getString(BundleKeys.KEY_TRANSLATE_MESSAGE)
|
|
-
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun getLanguageOptions() {
|
|
private fun getLanguageOptions() {
|
|
- // TODO implement this function to retrieve an array of strings from the server for each language option
|
|
|
|
- // weird, for some reason I'm not getting a body from the server, but I'm getting a 200 OK, that's dumb
|
|
|
|
|
|
+ val currentUser : User = userManager.currentUser.blockingGet()
|
|
|
|
+ val json = JSONArray(CapabilitiesUtilNew.getLanguages(currentUser).toString())
|
|
|
|
+ Log.i("TranslateActivity", "json is: ${json.toString()}")
|
|
|
|
+
|
|
|
|
+ var fromLanguagesSet = mutableSetOf<String>("Detect Language")
|
|
|
|
+ var toLanguagesSet = mutableSetOf<String>("Device Settings")
|
|
|
|
+
|
|
|
|
+ for( i in 0..json.length()-1) {
|
|
|
|
+ val current = json.getJSONObject(i)
|
|
|
|
+ if(current.getString("from") != Locale.getDefault().language)
|
|
|
|
+ {
|
|
|
|
+ toLanguagesSet.add(current.getString("fromLabel"))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fromLanguagesSet.add(current.getString("toLabel"))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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)
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private fun enableSpinners(value : Boolean) {
|
|
|
|
+ binding.fromLanguageSpinner.isEnabled = value
|
|
|
|
+ binding.toLanguageSpinner.isEnabled = value
|
|
|
|
+ }
|
|
|
|
|
|
- private fun translate() {
|
|
|
|
|
|
+ private fun translate(fromLanguage: String?, toLanguage : String) {
|
|
val currentUser : User = userManager.currentUser.blockingGet()
|
|
val currentUser : User = userManager.currentUser.blockingGet()
|
|
- // Log.d("TranslateActivity Current User", currentUser.toString())
|
|
|
|
val credentials : String = ApiUtils.getCredentials(currentUser.username, currentUser.token)
|
|
val credentials : String = ApiUtils.getCredentials(currentUser.username, currentUser.token)
|
|
- val translateURL = currentUser.baseUrl + "/ocs/v2.php//translation/translate?text=" + text+ "&toLanguage=" + toLanguage
|
|
|
|
|
|
+ val translateURL = currentUser.baseUrl +
|
|
|
|
+ "/ocs/v2.php/translation/translate?text=$text&toLanguage=$toLanguage" +
|
|
|
|
+ if(fromLanguage != "") { "&fromLanguage=$fromLanguage" } else {""}
|
|
|
|
|
|
|
|
|
|
ncApi.translateMessage(credentials, translateURL)
|
|
ncApi.translateMessage(credentials, translateURL)
|
|
@@ -109,6 +140,7 @@ class TranslateActivity : BaseActivity()
|
|
?.observeOn(AndroidSchedulers.mainThread())
|
|
?.observeOn(AndroidSchedulers.mainThread())
|
|
?.subscribe(object : Observer<TranslationsOverall> {
|
|
?.subscribe(object : Observer<TranslationsOverall> {
|
|
override fun onSubscribe(d: Disposable) {
|
|
override fun onSubscribe(d: Disposable) {
|
|
|
|
+ enableSpinners(false)
|
|
binding.translatedMessageTextview.visibility = View.GONE
|
|
binding.translatedMessageTextview.visibility = View.GONE
|
|
binding.progressBar.visibility = View.VISIBLE
|
|
binding.progressBar.visibility = View.VISIBLE
|
|
}
|
|
}
|
|
@@ -116,14 +148,11 @@ class TranslateActivity : BaseActivity()
|
|
override fun onNext(translationOverall: TranslationsOverall) {
|
|
override fun onNext(translationOverall: TranslationsOverall) {
|
|
binding.progressBar.visibility = View.GONE
|
|
binding.progressBar.visibility = View.GONE
|
|
binding.translatedMessageTextview.visibility = View.VISIBLE
|
|
binding.translatedMessageTextview.visibility = View.VISIBLE
|
|
- // binding.translatedMessageTextview.text = "Worked"
|
|
|
|
binding.translatedMessageTextview.text = translationOverall.ocs?.data?.text
|
|
binding.translatedMessageTextview.text = translationOverall.ocs?.data?.text
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
override fun onError(e: Throwable) {
|
|
override fun onError(e: Throwable) {
|
|
binding.progressBar.visibility = View.GONE
|
|
binding.progressBar.visibility = View.GONE
|
|
- //
|
|
|
|
val builder = AlertDialog.Builder(this@TranslateActivity)
|
|
val builder = AlertDialog.Builder(this@TranslateActivity)
|
|
builder.setTitle("Translation Failed")
|
|
builder.setTitle("Translation Failed")
|
|
builder.setMessage("Could not detect language")
|
|
builder.setMessage("Could not detect language")
|
|
@@ -132,24 +161,69 @@ class TranslateActivity : BaseActivity()
|
|
}
|
|
}
|
|
|
|
|
|
override fun onComplete() {
|
|
override fun onComplete() {
|
|
- // not needed?
|
|
|
|
|
|
+ // nothing?
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
+
|
|
|
|
+ enableSpinners(true)
|
|
}
|
|
}
|
|
|
|
|
|
- private fun setupSpinners() {
|
|
|
|
|
|
|
|
- //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
|
|
|
|
|
|
+ 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())
|
|
|
|
|
|
|
|
+ for( i in 0..json.length()-1) {
|
|
|
|
+ val current = json.getJSONObject(i)
|
|
|
|
+ if (current.getString("fromLabel") == language) {
|
|
|
|
+ return current.getString("from")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ 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,
|
|
binding.toLanguageSpinner.adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,
|
|
toLanguages)
|
|
toLanguages)
|
|
- // binding.toLanguageSpinner.isEnabled = false
|
|
|
|
|
|
+
|
|
|
|
+ // TODO set up onclickers make sure to deal with options becoming unavaliable in the spinner onClicker
|
|
|
|
+ binding.fromLanguageSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
|
|
+ override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
|
|
|
+ var fromLabel : String = getISOFromLanguage(parent.getItemAtPosition(position).toString())
|
|
|
|
+ var toLabel : String = getISOFromLanguage(binding.toLanguageSpinner.selectedItem.toString())
|
|
|
|
+ Log.i("TranslateActivity", "fromLanguageSpinner :: fromLabel = $fromLabel, toLabel = $toLabel")
|
|
|
|
+ translate(fromLabel, toLabel)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override fun onNothingSelected(parent: AdapterView<*>) {
|
|
|
|
+ // write code to perform some action
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ binding.toLanguageSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
|
|
+ override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
|
|
|
+ var toLabel : String = getISOFromLanguage(parent.getItemAtPosition(position).toString())
|
|
|
|
+ var fromLabel : String = getISOFromLanguage(binding.fromLanguageSpinner.selectedItem.toString())
|
|
|
|
+ Log.i("TranslateActivity", "toLanguageSpinner :: fromLabel = $fromLabel, toLabel = $toLabel")
|
|
|
|
+ translate(fromLabel, toLabel)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override fun onNothingSelected(parent: AdapterView<*>) {
|
|
|
|
+ // write code to perform some action
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|