parent
4f137ad827
commit
cf270b72fc
|
@ -67,8 +67,6 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
|||
String TWITTER_CONSUMER_KEY = "MUUBibXUognm6e9vbzrUIqPkt";
|
||||
String TWITTER_CONSUMER_SECRET = "l2uWAgQkoHvDfM2PrRFx2WN4h7QIUIktmxyeTAqRo6TkGCtNKy";
|
||||
|
||||
String YANDEX_KEY = "trnsl.1.1.20200513T065609Z.8e72845b632aa04f.fe1297e42c152de9e8773e1bc71162b1e498e2a8";
|
||||
|
||||
String DEFAULT_TWITTER_API_URL_FORMAT = "https://[DOMAIN].twitter.com/";
|
||||
|
||||
String SCHEME_HTTP = "http";
|
||||
|
|
|
@ -285,8 +285,6 @@ public interface SharedPreferenceConstants {
|
|||
String KEY_OVERRIDE_LANGUAGE = "override_language";
|
||||
@ExportablePreference(STRING)
|
||||
String KEY_TAB_POSITION = "tab_position";
|
||||
@ExportablePreference(STRING)
|
||||
String KEY_YANDEX_KEY = "yandex_key";
|
||||
@ExportablePreference(BOOLEAN)
|
||||
String KEY_AUTO_HIDE_TABS = "auto_hide_tabs";
|
||||
@ExportablePreference(BOOLEAN)
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
package org.mariotaku.yandex
|
||||
|
||||
import org.mariotaku.restfu.annotation.method.POST
|
||||
import org.mariotaku.restfu.annotation.param.Query
|
||||
import org.mariotaku.yandex.model.YandexTranslateResult
|
||||
|
||||
interface YandexAPI {
|
||||
@POST("/api/v1.5/tr.json/translate")
|
||||
fun search(@Query("text") text: String,
|
||||
@Query("lang") lang: String): YandexTranslateResult
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
package org.mariotaku.yandex
|
||||
|
||||
import org.mariotaku.restfu.RestAPIFactory
|
||||
import org.mariotaku.restfu.RestConverter
|
||||
import org.mariotaku.restfu.RestMethod
|
||||
import org.mariotaku.restfu.RestRequest
|
||||
import org.mariotaku.restfu.http.Endpoint
|
||||
import org.mariotaku.restfu.http.RestHttpClient
|
||||
import org.mariotaku.restfu.http.ValueMap
|
||||
import org.mariotaku.restfu.logansqaure.LoganSquareConverterFactory
|
||||
|
||||
|
||||
class YandexAPIFactory(apiKey: String, endpoint: String) {
|
||||
private val factory: RestAPIFactory<YandexException> = RestAPIFactory<YandexException>()
|
||||
|
||||
init {
|
||||
factory.setEndpoint(Endpoint(endpoint))
|
||||
factory.setExceptionFactory { cause, _, _ ->
|
||||
cause?.let { YandexException(it) }
|
||||
?: YandexException()
|
||||
}
|
||||
factory.setRestConverterFactory(LoganSquareConverterFactory())
|
||||
factory.setRestRequestFactory(object : RestRequest.DefaultFactory<YandexException?>() {
|
||||
override fun create(restMethod: RestMethod<YandexException?>,
|
||||
factory: RestConverter.Factory<YandexException?>, valuePool: ValueMap?): RestRequest {
|
||||
val method = restMethod.method
|
||||
val path = restMethod.path
|
||||
val headers = restMethod.getHeaders(valuePool)
|
||||
val queries = restMethod.getQueries(valuePool)
|
||||
val params = restMethod.getParams(factory, valuePool)
|
||||
val rawValue = restMethod.rawValue
|
||||
val bodyType = restMethod.bodyType
|
||||
val extras = restMethod.extras
|
||||
queries.add("key", apiKey)
|
||||
return RestRequest(method.value, method.allowBody, path, headers, queries,
|
||||
params, rawValue, bodyType, extras)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun setHttpClient(restClient: RestHttpClient): YandexAPIFactory {
|
||||
factory.setHttpClient(restClient)
|
||||
return this
|
||||
}
|
||||
|
||||
fun build(): YandexAPI {
|
||||
return factory.build(YandexAPI::class.java)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
package org.mariotaku.yandex
|
||||
|
||||
class YandexException : Exception {
|
||||
constructor() : super()
|
||||
constructor(message: String?) : super(message)
|
||||
constructor(message: String?, cause: Throwable?) : super(message, cause)
|
||||
constructor(cause: Throwable?) : super(cause)
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package org.mariotaku.yandex.model
|
||||
|
||||
import com.bluelinelabs.logansquare.annotation.JsonField
|
||||
import com.bluelinelabs.logansquare.annotation.JsonObject
|
||||
|
||||
@JsonObject
|
||||
data class YandexTranslateResult(
|
||||
@JsonField(name = ["code"])
|
||||
var code: Int? = null,
|
||||
@JsonField(name = ["lang"])
|
||||
var lang: String? = null,
|
||||
@JsonField(name = ["text"])
|
||||
var text: List<String>? = null
|
||||
)
|
|
@ -10,7 +10,6 @@ import org.mariotaku.ktextension.bcp47Tag
|
|||
import org.mariotaku.ktextension.toLongOr
|
||||
import org.mariotaku.twidere.BuildConfig
|
||||
import org.mariotaku.twidere.Constants.*
|
||||
import org.mariotaku.twidere.TwidereConstants
|
||||
import org.mariotaku.twidere.TwidereConstants.KEY_MEDIA_PRELOAD
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.annotation.ImageShapeStyle
|
||||
|
@ -87,7 +86,6 @@ val lastLaunchTimeKey = KLongKey("last_launch_time", -1)
|
|||
val promotionsEnabledKey = KBooleanKey("promotions_enabled", false)
|
||||
val translationDestinationKey = KNullableStringKey(KEY_TRANSLATION_DESTINATION, null)
|
||||
val tabPositionKey = KStringKey(KEY_TAB_POSITION, SharedPreferenceConstants.DEFAULT_TAB_POSITION)
|
||||
val yandexKeyKey = KStringKey(SharedPreferenceConstants.KEY_YANDEX_KEY, TwidereConstants.YANDEX_KEY)
|
||||
val autoHideTabs = KBooleanKey(SharedPreferenceConstants.KEY_AUTO_HIDE_TABS, true)
|
||||
val hideCardNumbersKey = KBooleanKey(KEY_HIDE_CARD_NUMBERS, false)
|
||||
val showLinkPreviewKey = KBooleanKey(KEY_SHOW_LINK_PREVIEW, false)
|
||||
|
|
|
@ -32,19 +32,19 @@ import android.nfc.NdefMessage
|
|||
import android.nfc.NdefRecord
|
||||
import android.nfc.NfcAdapter.CreateNdefMessageCallback
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import android.view.*
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.loader.app.LoaderManager
|
||||
import androidx.loader.app.LoaderManager.LoaderCallbacks
|
||||
import androidx.loader.app.hasRunningLoadersSafe
|
||||
import androidx.loader.content.FixedAsyncTaskLoader
|
||||
import androidx.loader.content.Loader
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.recyclerview.widget.FixedLinearLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
||||
import android.text.TextUtils
|
||||
import android.view.*
|
||||
import android.widget.Toast
|
||||
import com.squareup.otto.Subscribe
|
||||
import kotlinx.android.synthetic.main.fragment_status.*
|
||||
import kotlinx.android.synthetic.main.layout_content_fragment_common.*
|
||||
|
@ -72,11 +72,13 @@ import org.mariotaku.twidere.annotation.AccountType
|
|||
import org.mariotaku.twidere.constant.KeyboardShortcutConstants.*
|
||||
import org.mariotaku.twidere.constant.displaySensitiveContentsKey
|
||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||
import org.mariotaku.twidere.constant.yandexKeyKey
|
||||
import org.mariotaku.twidere.extension.*
|
||||
import org.mariotaku.twidere.extension.model.*
|
||||
import org.mariotaku.twidere.extension.model.api.key
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.getAccountType
|
||||
import org.mariotaku.twidere.extension.model.media_type
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.extension.model.originalId
|
||||
import org.mariotaku.twidere.extension.view.calculateSpaceItemHeight
|
||||
import org.mariotaku.twidere.fragment.AbsStatusesFragment
|
||||
import org.mariotaku.twidere.fragment.AbsStatusesFragment.Companion.handleActionClick
|
||||
|
@ -99,14 +101,12 @@ import org.mariotaku.twidere.util.*
|
|||
import org.mariotaku.twidere.util.ContentScrollHandler.ContentListSupport
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
import org.mariotaku.twidere.util.RecyclerViewScrollHandler.RecyclerViewCallback
|
||||
import org.mariotaku.twidere.util.dagger.DependencyHolder
|
||||
import org.mariotaku.twidere.view.CardMediaContainer.OnMediaClickListener
|
||||
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
||||
import org.mariotaku.twidere.view.holder.GapViewHolder
|
||||
import org.mariotaku.twidere.view.holder.StatusViewHolder
|
||||
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
|
||||
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder.StatusClickListener
|
||||
import org.mariotaku.yandex.YandexAPIFactory
|
||||
import java.lang.ref.WeakReference
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
@ -692,8 +692,8 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
private val weakFragment = WeakReference(fragment)
|
||||
|
||||
override fun onExecute(account: AccountDetails, params: Any?): TranslationResult {
|
||||
val prefDest = preferences.getString(KEY_TRANSLATION_DESTINATION, null).orEmpty()
|
||||
val twitter = account.newMicroBlogInstance(context, MicroBlog::class.java)
|
||||
val prefDest = preferences.getString(KEY_TRANSLATION_DESTINATION, null).orEmpty()
|
||||
val dest: String
|
||||
if (TextUtils.isEmpty(prefDest)) {
|
||||
dest = twitter.accountSettings.language
|
||||
|
@ -703,21 +703,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
|||
} else {
|
||||
dest = prefDest
|
||||
}
|
||||
return if (account.isOfficial(context)) {
|
||||
twitter.showTranslation(status.originalId, dest)
|
||||
} else {
|
||||
val holder = DependencyHolder.get(context)
|
||||
val api = YandexAPIFactory(preferences[yandexKeyKey], "https://translate.yandex.net/")
|
||||
.setHttpClient(holder.restHttpClient)
|
||||
.build()
|
||||
val result = api.search(status.text_plain, "${status.lang}-${dest.split('-').firstOrNull()}")
|
||||
TranslationResult().also {
|
||||
it[TranslationResult::class.java.getDeclaredField("text")] = result.text?.firstOrNull()
|
||||
it[TranslationResult::class.java.getDeclaredField("id")] = status.originalId
|
||||
it[TranslationResult::class.java.getDeclaredField("translatedLang")] = result.lang?.split('-')?.lastOrNull()
|
||||
it[TranslationResult::class.java.getDeclaredField("lang")] = result.lang?.split('-')?.firstOrNull()
|
||||
}
|
||||
}
|
||||
return twitter.showTranslation(status.originalId, dest)
|
||||
}
|
||||
|
||||
override fun onSucceed(callback: Any?, result: TranslationResult) {
|
||||
|
|
|
@ -22,7 +22,12 @@ package org.mariotaku.twidere.view.holder.status
|
|||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Rect
|
||||
import android.net.Uri
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.appcompat.widget.ActionMenuView
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.text.SpannableString
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.Spanned
|
||||
|
@ -33,13 +38,6 @@ import android.view.LayoutInflater
|
|||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.appcompat.widget.ActionMenuView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kotlinx.android.synthetic.main.adapter_item_status_count_label.view.*
|
||||
import kotlinx.android.synthetic.main.header_status.view.*
|
||||
import org.mariotaku.abstask.library.TaskStarter
|
||||
|
@ -351,7 +349,7 @@ class DetailStatusViewHolder(
|
|||
|
||||
|
||||
val lang = status.lang
|
||||
if (CheckUtils.isValidLocale(lang) /* && account.isOfficial(context)*/) {
|
||||
if (CheckUtils.isValidLocale(lang) && account.isOfficial(context)) {
|
||||
translateContainer.visibility = View.VISIBLE
|
||||
if (translation != null) {
|
||||
val locale = Locale(translation.translatedLang)
|
||||
|
|
|
@ -326,8 +326,6 @@
|
|||
<string name="dns_server">DNS Server</string>
|
||||
<string name="dns_server_summary">Set DNS Server for network requests.</string>
|
||||
|
||||
<string name="yandex_key">Yandex Api Key</string>
|
||||
|
||||
<string name="draft_saved">Draft saved</string>
|
||||
|
||||
<string name="drafts_hint_messages">Your unsent tweets will save here</string>
|
||||
|
|
|
@ -36,12 +36,6 @@
|
|||
android:summary="@string/custom_host_mapping_summary"
|
||||
android:title="@string/custom_host_mapping"/>
|
||||
|
||||
<org.mariotaku.twidere.preference.ThemedEditTextPreference
|
||||
android:dialogTitle="@string/yandex_key"
|
||||
android:key="yandex_key"
|
||||
android:singleLine="true"
|
||||
android:title="@string/yandex_key"/>
|
||||
|
||||
<org.mariotaku.twidere.preference.TintedPreferenceCategory
|
||||
android:key="category_proxy"
|
||||
android:title="@string/proxy">
|
||||
|
|
Loading…
Reference in New Issue