Emoji2のUI部品を使う、EmojiCompat.initを呼び出す、Twemoji設定のデフォルトをfalseに戻す

This commit is contained in:
tateisu 2021-11-08 20:05:03 +09:00
parent 9d69d263dc
commit 2cf5436932
13 changed files with 57 additions and 52 deletions

View File

@ -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

View File

@ -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(),

View File

@ -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()) {

View File

@ -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)
}

View File

@ -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) {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -322,8 +322,7 @@ object PrefB {
val bpUseTwemoji = BooleanPref(
"UseTwemoji",
// Android 12 以上ではデフォルトfalse
Build.VERSION.SDK_INT < 31
false
)
val bpKeepReactionSpace = BooleanPref(

View File

@ -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)

View File

@ -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)
}

View File

@ -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)

View File

@ -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