From 2cf5436932969d1efc07a03dca837d89a33d9b04 Mon Sep 17 00:00:00 2001 From: tateisu Date: Mon, 8 Nov 2021 20:05:03 +0900 Subject: [PATCH] =?UTF-8?q?Emoji2=E3=81=AEUI=E9=83=A8=E5=93=81=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E3=81=86=E3=80=81EmojiCompat.init=E3=82=92=E5=91=BC?= =?UTF-8?q?=E3=81=B3=E5=87=BA=E3=81=99=E3=80=81Twemoji=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=81=AE=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E3=82=92?= =?UTF-8?q?false=E3=81=AB=E6=88=BB=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jp/juggler/subwaytooter/ActAppSetting.kt | 6 +++--- .../main/java/jp/juggler/subwaytooter/App1.kt | 6 ++++++ .../subwaytooter/actmain/ActMainAutoCW.kt | 4 ++-- .../subwaytooter/appsetting/AppSettingItem.kt | 4 +--- .../columnviewholder/ColumnViewHolder.kt | 14 +++++++------- .../juggler/subwaytooter/dialog/EmojiPicker.kt | 3 +-- .../itemviewholder/ItemViewHolder.kt | 16 ++++++++++------ .../itemviewholder/ItemViewHolderEnquete.kt | 13 ++++++------- .../java/jp/juggler/subwaytooter/pref/PrefB.kt | 3 +-- .../juggler/subwaytooter/util/AnkoCustomView.kt | 16 ++++++++-------- .../jp/juggler/subwaytooter/util/EmojiDecoder.kt | 11 ++++++----- .../jp/juggler/subwaytooter/view/BlurhashView.kt | 9 ++++----- .../jp/juggler/subwaytooter/view/MyTextView.kt | 4 ++-- 13 files changed, 57 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt b/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt index 588d8634..9746f733 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActAppSetting.kt @@ -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 diff --git a/app/src/main/java/jp/juggler/subwaytooter/App1.kt b/app/src/main/java/jp/juggler/subwaytooter/App1.kt index 55d61157..efb25ad9 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/App1.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/App1.kt @@ -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(), diff --git a/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainAutoCW.kt b/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainAutoCW.kt index ab83c163..4e7c6f28 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainAutoCW.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/actmain/ActMainAutoCW.kt @@ -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()) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt index 06d573f9..e174da2f 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/appsetting/AppSettingItem.kt @@ -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) } diff --git a/app/src/main/java/jp/juggler/subwaytooter/columnviewholder/ColumnViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/columnviewholder/ColumnViewHolder.kt index cf7a869e..548d755c 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/columnviewholder/ColumnViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/columnviewholder/ColumnViewHolder.kt @@ -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) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt b/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt index 077ca65e..838fed51 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/dialog/EmojiPicker.kt @@ -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 diff --git a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolder.kt index 786efbc9..c4828699 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolder.kt @@ -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 diff --git a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderEnquete.kt b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderEnquete.kt index e5f49d88..c29c144b 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderEnquete.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/itemviewholder/ItemViewHolderEnquete.kt @@ -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 diff --git a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt index 0791c1af..987c8032 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/pref/PrefB.kt @@ -322,8 +322,7 @@ object PrefB { val bpUseTwemoji = BooleanPref( "UseTwemoji", - // Android 12 以上ではデフォルトfalse - Build.VERSION.SDK_INT < 31 + false ) val bpKeepReactionSpace = BooleanPref( diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/AnkoCustomView.kt b/app/src/main/java/jp/juggler/subwaytooter/util/AnkoCustomView.kt index 58680e69..6e5163b7 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/AnkoCustomView.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/AnkoCustomView.kt @@ -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) diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.kt b/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.kt index 94304ae9..c20f0366 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/EmojiDecoder.kt @@ -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) } diff --git a/app/src/main/java/jp/juggler/subwaytooter/view/BlurhashView.kt b/app/src/main/java/jp/juggler/subwaytooter/view/BlurhashView.kt index b218137b..62f01146 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/view/BlurhashView.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/view/BlurhashView.kt @@ -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) diff --git a/app/src/main/java/jp/juggler/subwaytooter/view/MyTextView.kt b/app/src/main/java/jp/juggler/subwaytooter/view/MyTextView.kt index 836dd755..bb2bc1f0 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/view/MyTextView.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/view/MyTextView.kt @@ -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