Emoji2のUI部品を使う、EmojiCompat.initを呼び出す、Twemoji設定のデフォルトをfalseに戻す
This commit is contained in:
parent
9d69d263dc
commit
2cf5436932
|
@ -18,7 +18,6 @@ import android.widget.*
|
|||
import androidx.annotation.ColorInt
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.appcompat.widget.SwitchCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.FileProvider
|
||||
|
@ -40,6 +39,7 @@ import jp.juggler.subwaytooter.table.SavedAccount
|
|||
import jp.juggler.subwaytooter.util.CustomShare
|
||||
import jp.juggler.subwaytooter.util.CustomShareTarget
|
||||
import jp.juggler.subwaytooter.util.cn
|
||||
import jp.juggler.subwaytooter.view.MyTextView
|
||||
import jp.juggler.util.*
|
||||
import org.apache.commons.io.IOUtils
|
||||
import java.io.File
|
||||
|
@ -391,8 +391,8 @@ class ActAppSetting : AppCompatActivity(), ColorPickerDialogListener, View.OnCli
|
|||
}
|
||||
|
||||
private fun getViewPath(path: String, convertView: View?): View {
|
||||
val tv: AppCompatTextView =
|
||||
convertView.cast() ?: AppCompatTextView(this@ActAppSetting).apply {
|
||||
val tv: MyTextView =
|
||||
convertView.cast() ?: MyTextView(this@ActAppSetting).apply {
|
||||
layoutParams = AbsListView.LayoutParams(
|
||||
AbsListView.LayoutParams.MATCH_PARENT,
|
||||
AbsListView.LayoutParams.WRAP_CONTENT
|
||||
|
|
|
@ -11,6 +11,8 @@ import android.os.Build
|
|||
import android.os.Handler
|
||||
import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.emoji2.bundled.BundledEmojiCompatConfig
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.GlideBuilder
|
||||
import com.bumptech.glide.Registry
|
||||
|
@ -307,6 +309,10 @@ class App1 : Application() {
|
|||
// initialize EmojiMap
|
||||
EmojiMap.load(appContext)
|
||||
|
||||
// initialize EmojiCompat
|
||||
val config = BundledEmojiCompatConfig(appContext)
|
||||
EmojiCompat.init(config)
|
||||
|
||||
// initialize Conscrypt
|
||||
Security.insertProviderAt(
|
||||
Conscrypt.newProvider(),
|
||||
|
|
|
@ -3,7 +3,7 @@ package jp.juggler.subwaytooter.actmain
|
|||
import android.text.SpannableStringBuilder
|
||||
import android.view.View
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.emoji2.widget.EmojiTextView
|
||||
import jp.juggler.subwaytooter.ActMain
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.api.entity.TootStatus
|
||||
|
@ -53,7 +53,7 @@ fun ActMain.checkAutoCW(status: TootStatus, text: CharSequence) {
|
|||
autoCw.decodedSpoilerText = null
|
||||
|
||||
// テキストをレイアウトして行数を測定
|
||||
val tv = AppCompatTextView(this).apply {
|
||||
val tv = EmojiTextView(this).apply {
|
||||
layoutParams =
|
||||
LinearLayout.LayoutParams(nAutoCwCellWidth, LinearLayout.LayoutParams.WRAP_CONTENT)
|
||||
if (!timelineFontSizeSp.isNaN()) {
|
||||
|
|
|
@ -784,9 +784,7 @@ val appSettingRoot = AppSettingItem(null, SettingType.Section, R.string.app_sett
|
|||
sw(PrefB.bpEmojioneShortcode, R.string.emojione_shortcode_support) {
|
||||
desc = R.string.emojione_shortcode_support_desc
|
||||
}
|
||||
sw(PrefB.bpUseTwemoji, R.string.use_twemoji_emoji){
|
||||
enabled = Build.VERSION.SDK_INT >= 31
|
||||
}
|
||||
sw(PrefB.bpUseTwemoji, R.string.use_twemoji_emoji)
|
||||
|
||||
sw(PrefB.bpKeepReactionSpace, R.string.keep_reaction_space)
|
||||
}
|
||||
|
|
|
@ -11,8 +11,8 @@ import android.text.SpannableStringBuilder
|
|||
import android.view.*
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.*
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.emoji2.widget.EmojiButton
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.flexbox.FlexWrap
|
||||
|
@ -71,7 +71,7 @@ class ColumnViewHolder(
|
|||
var pageIdx: Int = 0
|
||||
|
||||
lateinit var llLoading: View
|
||||
lateinit var btnConfirmMail: AppCompatButton
|
||||
lateinit var btnConfirmMail: EmojiButton
|
||||
lateinit var tvLoading: MyTextView
|
||||
|
||||
lateinit var listView: RecyclerView
|
||||
|
@ -130,12 +130,12 @@ class ColumnViewHolder(
|
|||
lateinit var cbEnableSpeech: CheckBox
|
||||
lateinit var cbOldApi: CheckBox
|
||||
lateinit var llRegexFilter: View
|
||||
lateinit var btnDeleteNotification: AppCompatButton
|
||||
lateinit var btnColor: AppCompatButton
|
||||
lateinit var btnLanguageFilter: AppCompatButton
|
||||
lateinit var btnDeleteNotification: EmojiButton
|
||||
lateinit var btnColor: EmojiButton
|
||||
lateinit var btnLanguageFilter: EmojiButton
|
||||
|
||||
lateinit var svQuickFilter: HorizontalScrollView
|
||||
lateinit var btnQuickFilterAll: AppCompatButton
|
||||
lateinit var btnQuickFilterAll: EmojiButton
|
||||
lateinit var btnQuickFilterMention: ImageButton
|
||||
lateinit var btnQuickFilterFavourite: ImageButton
|
||||
lateinit var btnQuickFilterBoost: ImageButton
|
||||
|
@ -344,7 +344,7 @@ class ColumnViewHolder(
|
|||
viewRoot.scan { v ->
|
||||
try {
|
||||
// ボタンではないTextViewのフォントを変更する
|
||||
if (v is MyTextView && v !is AppCompatButton) {
|
||||
if (v is MyTextView && v !is EmojiButton) {
|
||||
v.typeface = ActMain.timelineFont
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
|
|
|
@ -10,7 +10,6 @@ import android.util.TypedValue
|
|||
import android.view.*
|
||||
import android.widget.*
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.emoji2.widget.EmojiTextView
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.astuetz.PagerSlidingTabStrip
|
||||
|
@ -277,7 +276,7 @@ class EmojiPicker(
|
|||
customCategories.add(CustomCategory(
|
||||
rangeStart,
|
||||
rangeLength,
|
||||
AppCompatTextView(activity).apply {
|
||||
EmojiTextView(activity).apply {
|
||||
layoutParams = FrameLayout.LayoutParams(
|
||||
FrameLayout.LayoutParams.MATCH_PARENT,
|
||||
FrameLayout.LayoutParams.WRAP_CONTENT
|
||||
|
|
|
@ -10,11 +10,15 @@ import android.util.TypedValue
|
|||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import android.widget.ImageButton
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.emoji2.widget.EmojiButton
|
||||
import com.google.android.flexbox.JustifyContent
|
||||
import jp.juggler.subwaytooter.*
|
||||
import jp.juggler.subwaytooter.ActMain
|
||||
import jp.juggler.subwaytooter.App1
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.api.entity.TimelineItem
|
||||
import jp.juggler.subwaytooter.api.entity.TootAccountRef
|
||||
import jp.juggler.subwaytooter.api.entity.TootStatus
|
||||
|
@ -77,7 +81,7 @@ class ItemViewHolder(
|
|||
|
||||
lateinit var llContentWarning: View
|
||||
lateinit var tvContentWarning: MyTextView
|
||||
lateinit var btnContentWarning: AppCompatButton
|
||||
lateinit var btnContentWarning: EmojiButton
|
||||
|
||||
lateinit var llContents: View
|
||||
lateinit var tvMentions: MyTextView
|
||||
|
@ -96,7 +100,7 @@ class ItemViewHolder(
|
|||
lateinit var llButtonBar: View
|
||||
|
||||
lateinit var llSearchTag: View
|
||||
lateinit var btnSearchTag: AppCompatButton
|
||||
lateinit var btnSearchTag: EmojiButton
|
||||
lateinit var btnGapHead: ImageButton
|
||||
lateinit var btnGapTail: ImageButton
|
||||
lateinit var llTrendTag: View
|
||||
|
@ -106,7 +110,7 @@ class ItemViewHolder(
|
|||
lateinit var cvTagHistory: TagHistoryView
|
||||
|
||||
lateinit var llList: View
|
||||
lateinit var btnListTL: AppCompatButton
|
||||
lateinit var btnListTL: EmojiButton
|
||||
lateinit var btnListMore: ImageButton
|
||||
|
||||
lateinit var llFollowRequest: View
|
||||
|
|
|
@ -3,11 +3,10 @@ package jp.juggler.subwaytooter.itemviewholder
|
|||
import android.content.Context
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
import android.widget.CheckBox
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.emoji2.widget.EmojiButton
|
||||
import androidx.emoji2.widget.EmojiTextView
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.api.*
|
||||
import jp.juggler.subwaytooter.api.entity.TootPolls
|
||||
|
@ -121,7 +120,7 @@ fun ItemViewHolder.makeEnqueteChoiceView(
|
|||
|
||||
if (!canVote) {
|
||||
|
||||
val b = AppCompatTextView(activity)
|
||||
val b = EmojiTextView(activity)
|
||||
b.layoutParams = lp
|
||||
|
||||
b.text = text
|
||||
|
@ -181,7 +180,7 @@ fun ItemViewHolder.makeEnqueteChoiceView(
|
|||
}
|
||||
llExtra.addView(b)
|
||||
} else {
|
||||
val b = AppCompatButton(activity)
|
||||
val b = EmojiButton(activity)
|
||||
b.layoutParams = lp
|
||||
b.isAllCaps = false
|
||||
b.text = text
|
||||
|
@ -228,7 +227,7 @@ fun ItemViewHolder.makeEnqueteFooterMastodon(
|
|||
topMargin = (0.5f + density * 3f).toInt()
|
||||
}
|
||||
|
||||
val b = AppCompatButton(activity)
|
||||
val b = EmojiButton(activity)
|
||||
b.layoutParams = lp
|
||||
b.isAllCaps = false
|
||||
b.text = activity.getString(R.string.vote_button)
|
||||
|
@ -240,7 +239,7 @@ fun ItemViewHolder.makeEnqueteFooterMastodon(
|
|||
llExtra.addView(b)
|
||||
}
|
||||
|
||||
val tv = AppCompatTextView(activity)
|
||||
val tv = EmojiTextView(activity)
|
||||
val lp = LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT
|
||||
|
|
|
@ -322,8 +322,7 @@ object PrefB {
|
|||
|
||||
val bpUseTwemoji = BooleanPref(
|
||||
"UseTwemoji",
|
||||
// Android 12 以上ではデフォルトfalse
|
||||
Build.VERSION.SDK_INT < 31
|
||||
false
|
||||
)
|
||||
|
||||
val bpKeepReactionSpace = BooleanPref(
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
package jp.juggler.subwaytooter.util
|
||||
|
||||
import android.view.ViewManager
|
||||
import androidx.appcompat.view.ContextThemeWrapper
|
||||
import androidx.emoji2.widget.EmojiButton
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.flexbox.FlexboxLayout
|
||||
import com.omadahealth.github.swipyrefreshlayout.library.SwipyRefreshLayout
|
||||
import jp.juggler.subwaytooter.R
|
||||
import jp.juggler.subwaytooter.view.*
|
||||
import org.jetbrains.anko.custom.ankoView
|
||||
import androidx.appcompat.view.ContextThemeWrapper
|
||||
import androidx.appcompat.widget.AppCompatButton
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import com.google.android.flexbox.FlexboxLayout
|
||||
import jp.juggler.subwaytooter.R
|
||||
|
||||
// Anko Layout中にカスタムビューを指定する為に拡張関数を定義する
|
||||
|
||||
|
@ -20,13 +19,14 @@ inline fun ViewManager.myNetworkImageView(init: MyNetworkImageView.() -> Unit):
|
|||
inline fun ViewManager.myTextView(init: MyTextView.() -> Unit): MyTextView {
|
||||
return ankoView({ MyTextView(it) }, theme = 0, init = init)
|
||||
}
|
||||
|
||||
inline fun ViewManager.myEditText(init: MyEditText.() -> Unit): MyEditText {
|
||||
return ankoView({ MyEditText(it) }, theme = 0, init = init)
|
||||
}
|
||||
inline fun ViewManager.compatButton(init: AppCompatButton.() -> Unit): AppCompatButton {
|
||||
return ankoView({ AppCompatButton(it) }, theme = 0, init = init)
|
||||
|
||||
inline fun ViewManager.compatButton(init: EmojiButton.() -> Unit): EmojiButton {
|
||||
return ankoView({ EmojiButton(it) }, theme = 0, init = init)
|
||||
}
|
||||
inline fun ViewManager.compatTextView(init: AppCompatTextView.() -> Unit) = myTextView(init)
|
||||
|
||||
inline fun ViewManager.trendTagHistoryView(init: TagHistoryView.() -> Unit): TagHistoryView {
|
||||
return ankoView({ TagHistoryView(it) }, theme = 0, init = init)
|
||||
|
|
|
@ -408,10 +408,11 @@ object EmojiDecoder {
|
|||
} else {
|
||||
null
|
||||
}
|
||||
if (emoji != null) {
|
||||
builder.addImageSpan(part, emoji)
|
||||
} else {
|
||||
|
||||
if (emoji == null) {
|
||||
builder.addUnicodeString(part)
|
||||
} else {
|
||||
builder.addImageSpan(part, emoji)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -475,7 +476,7 @@ object EmojiDecoder {
|
|||
|
||||
val sb = SpannableStringBuilder()
|
||||
|
||||
if(PrefB.bpUseTwemoji(context)){
|
||||
if (PrefB.bpUseTwemoji(context)) {
|
||||
val start = 0
|
||||
sb.append(' ')
|
||||
val end = sb.length
|
||||
|
@ -486,7 +487,7 @@ object EmojiDecoder {
|
|||
end,
|
||||
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
|
||||
)
|
||||
}else{
|
||||
} else {
|
||||
sb.append(emoji.unifiedCode)
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import android.content.Context
|
|||
import android.graphics.*
|
||||
import android.util.AttributeSet
|
||||
import android.util.SparseIntArray
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import jp.juggler.util.LogCategory
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.pow
|
||||
|
@ -145,7 +144,7 @@ class Blurhash(blurhash: String, punch: Float = 1f) {
|
|||
}
|
||||
}
|
||||
|
||||
class BlurhashView : AppCompatTextView {
|
||||
class BlurhashView : MyTextView {
|
||||
|
||||
companion object {
|
||||
val log = LogCategory("BlurhashView")
|
||||
|
@ -155,13 +154,13 @@ class BlurhashView : AppCompatTextView {
|
|||
}
|
||||
|
||||
constructor(context: Context) :
|
||||
super(context)
|
||||
super(context)
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet) :
|
||||
super(context, attrs)
|
||||
super(context, attrs)
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) :
|
||||
super(context, attrs, defStyleAttr)
|
||||
super(context, attrs, defStyleAttr)
|
||||
|
||||
// keep bitmap and IntArray to reuse it.
|
||||
private val pixels = IntArray(bitmapWidth * bitmapHeight)
|
||||
|
|
|
@ -4,9 +4,9 @@ import android.annotation.SuppressLint
|
|||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.emoji2.widget.EmojiTextView
|
||||
|
||||
class MyTextView : AppCompatTextView {
|
||||
open class MyTextView : EmojiTextView {
|
||||
|
||||
internal var linkHit: Boolean = false
|
||||
|
||||
|
|
Loading…
Reference in New Issue