- androidx.emoji2 1.0.0

- androidx.appcompat 1.4.0
- 物理キーボード使用時のコピペ操作ができなくなっていた問題の修正。ショートカットの実装をonKeyDown+onKeyUpからonKeyShortcutに変更した。
- EmojiTextView,EmojiEditText,EmojiButton を AppCompatに戻す。
This commit is contained in:
tateisu 2021-11-19 02:09:22 +09:00
parent 4c43e807b1
commit 0e996868ab
14 changed files with 60 additions and 74 deletions

View File

@ -139,11 +139,9 @@ dependencies {
implementation "androidx.appcompat:appcompat:$appcompat_version"
def emojiVersion = "1.0.0-rc01"
def emojiVersion = "1.0.0"
implementation "androidx.emoji2:emoji2:$emojiVersion"
implementation "androidx.emoji2:emoji2-bundled:$emojiVersion"
implementation "androidx.emoji2:emoji2-views:$emojiVersion"
implementation "androidx.emoji2:emoji2-views-helper:$emojiVersion"
// DrawerLayout
implementation "androidx.drawerlayout:drawerlayout:1.1.1"

View File

@ -302,7 +302,10 @@ class ActMain : AppCompatActivity(),
when (ar?.resultCode) {
ActText.RESULT_SEARCH_MSP -> searchFromActivityResult(ar.data, ColumnType.SEARCH_MSP)
ActText.RESULT_SEARCH_TS -> searchFromActivityResult(ar.data, ColumnType.SEARCH_TS)
ActText.RESULT_SEARCH_NOTESTOCK -> searchFromActivityResult(ar.data, ColumnType.SEARCH_NOTESTOCK)
ActText.RESULT_SEARCH_NOTESTOCK -> searchFromActivityResult(
ar.data,
ColumnType.SEARCH_NOTESTOCK
)
}
}
@ -642,26 +645,15 @@ class ActMain : AppCompatActivity(),
completionHelper.closeAcctPopup()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (super.onKeyDown(keyCode, event)) return true
if (event != null) {
if (event.isCtrlPressed) return true
}
return false
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
val rv = super.onKeyUp(keyCode, event)
if (event != null) {
if (event.isCtrlPressed) {
log.d("onKeyUp code=$keyCode rv=$rv")
when (keyCode) {
KeyEvent.KEYCODE_N -> btnToot.performClick()
}
return true
override fun onKeyShortcut(keyCode: Int, event: KeyEvent?): Boolean {
return when {
super.onKeyShortcut(keyCode, event) -> true
event?.isCtrlPressed == true && keyCode == KeyEvent.KEYCODE_N -> {
btnToot.performClick()
true
}
else -> false
}
return rv
}
//////////////////////////////////////////////////////////////////

View File

@ -265,24 +265,15 @@ class ActPost : AppCompatActivity(),
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
override fun onKeyShortcut(keyCode: Int, event: KeyEvent?): Boolean {
return when {
super.onKeyDown(keyCode, event) -> true
event == null -> false
else -> event.isCtrlPressed
}
}
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
val rv = super.onKeyUp(keyCode, event)
if (event?.isCtrlPressed == true) {
log.d("onKeyUp code=$keyCode rv=$rv")
when (keyCode) {
KeyEvent.KEYCODE_T -> btnPost.performClick()
super.onKeyShortcut(keyCode, event) -> true
event?.isCtrlPressed == true && keyCode == KeyEvent.KEYCODE_T -> {
btnPost.performClick()
true
}
return true
else -> false
}
return rv
}
override fun onMyClickableSpanClicked(viewClicked: View, span: MyClickableSpan) {

View File

@ -309,9 +309,11 @@ class App1 : Application() {
// initialize EmojiMap
EmojiMap.load(appContext)
// initialize EmojiCompat
val config = BundledEmojiCompatConfig(appContext)
EmojiCompat.init(config)
// emoji2 はデフォルトで自動初期化を行うのだが、新し目のPlayサービスに依存してるため
// Playサービスが古い端末ではEmojiCompatの初期化がまだ行われていない状態になる
// ワークアラウンドとして、アプリ内にバンドルしたデータを使うBundledEmojiCompatConfigで初期化する
// (初期化が既に行われている場合は無害である)
EmojiCompat.init(BundledEmojiCompatConfig(appContext))
// initialize Conscrypt
Security.insertProviderAt(

View File

@ -3,11 +3,11 @@ package jp.juggler.subwaytooter.actmain
import android.text.SpannableStringBuilder
import android.view.View
import android.widget.LinearLayout
import androidx.emoji2.widget.EmojiTextView
import jp.juggler.subwaytooter.ActMain
import jp.juggler.subwaytooter.R
import jp.juggler.subwaytooter.api.entity.TootStatus
import jp.juggler.subwaytooter.pref.PrefS
import jp.juggler.subwaytooter.view.MyTextView
import java.lang.ref.WeakReference
// AutoCWの基準幅を計算する
@ -52,7 +52,7 @@ fun ActMain.checkAutoCW(status: TootStatus, text: CharSequence) {
autoCw.decodedSpoilerText = null
// テキストをレイアウトして行数を測定
val tv = EmojiTextView(this).apply {
val tv = MyTextView(this).apply {
layoutParams =
LinearLayout.LayoutParams(nAutoCwCellWidth, LinearLayout.LayoutParams.WRAP_CONTENT)
if (!timelineFontSizeSp.isNaN()) {

View File

@ -42,13 +42,16 @@ class CompletionHelper(
// 無視するスパン
// ($を.に変換済)
val ignoreSpans = setOf(
"android.text.DynamicLayout.ChangeWatcher",
"android.text.method.TextKeyListener",
"android.text.method.Touch.DragState",
"android.text.Selection.END",
"android.text.Selection.START",
"android.widget.Editor.SpanController",
"android.widget.TextView.ChangeWatcher",
"androidx.emoji2.text.SpannableBuilder.WatcherWrapper",
"androidx.emoji2.viewsintegration.EmojiKeyListener",
"android.text.DynamicLayout.ChangeWatcher",
"android.text.method.TextKeyListener",
"android.text.method.Touch.DragState",
"android.text.style.SpellCheckSpan",
)
@ -366,7 +369,7 @@ class CompletionHelper(
val isImeComposing =
spans.any { it?.javaClass?.name == "android.view.inputmethod.ComposingText" }
if(!isImeComposing){
if (!isImeComposing) {
spans?.filter {
val name = (it?.javaClass?.name ?: "").replace('$', '.')
when {

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: EmojiButton
lateinit var btnConfirmMail: AppCompatButton
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: EmojiButton
lateinit var btnColor: EmojiButton
lateinit var btnLanguageFilter: EmojiButton
lateinit var btnDeleteNotification: AppCompatButton
lateinit var btnColor: AppCompatButton
lateinit var btnLanguageFilter: AppCompatButton
lateinit var svQuickFilter: HorizontalScrollView
lateinit var btnQuickFilterAll: EmojiButton
lateinit var btnQuickFilterAll: AppCompatButton
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 EmojiButton) {
if (v is MyTextView && v !is Button) {
v.typeface = ActMain.timelineFont
}
} catch (ex: Throwable) {

View File

@ -10,7 +10,7 @@ import android.util.TypedValue
import android.view.*
import android.widget.*
import androidx.annotation.StringRes
import androidx.emoji2.widget.EmojiTextView
import androidx.appcompat.widget.AppCompatTextView
import androidx.viewpager.widget.ViewPager
import com.astuetz.PagerSlidingTabStrip
import com.bumptech.glide.Glide
@ -276,7 +276,7 @@ class EmojiPicker(
customCategories.add(CustomCategory(
rangeStart,
rangeLength,
EmojiTextView(activity).apply {
AppCompatTextView(activity).apply {
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT
@ -495,7 +495,7 @@ class EmojiPicker(
}
} else {
view = viewOld
?: EmojiTextView(activity).apply {
?: AppCompatTextView(activity).apply {
layoutParams = AbsListView.LayoutParams(wh, wh)
}

View File

@ -13,8 +13,8 @@ import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.appcompat.widget.AppCompatButton
import androidx.core.content.ContextCompat
import androidx.emoji2.widget.EmojiButton
import com.google.android.flexbox.JustifyContent
import jp.juggler.subwaytooter.ActMain
import jp.juggler.subwaytooter.App1
@ -81,7 +81,7 @@ class ItemViewHolder(
lateinit var llContentWarning: View
lateinit var tvContentWarning: MyTextView
lateinit var btnContentWarning: EmojiButton
lateinit var btnContentWarning: AppCompatButton
lateinit var llContents: View
lateinit var tvMentions: MyTextView
@ -100,7 +100,7 @@ class ItemViewHolder(
lateinit var llButtonBar: View
lateinit var llSearchTag: View
lateinit var btnSearchTag: EmojiButton
lateinit var btnSearchTag: AppCompatButton
lateinit var btnGapHead: ImageButton
lateinit var btnGapTail: ImageButton
lateinit var llTrendTag: View
@ -110,7 +110,7 @@ class ItemViewHolder(
lateinit var cvTagHistory: TagHistoryView
lateinit var llList: View
lateinit var btnListTL: EmojiButton
lateinit var btnListTL: AppCompatButton
lateinit var btnListMore: ImageButton
lateinit var llFollowRequest: View

View File

@ -5,8 +5,8 @@ import android.text.SpannableStringBuilder
import android.view.View
import android.widget.CheckBox
import android.widget.LinearLayout
import androidx.emoji2.widget.EmojiButton
import androidx.emoji2.widget.EmojiTextView
import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatTextView
import jp.juggler.subwaytooter.R
import jp.juggler.subwaytooter.api.*
import jp.juggler.subwaytooter.api.entity.TootPolls
@ -120,7 +120,7 @@ fun ItemViewHolder.makeEnqueteChoiceView(
if (!canVote) {
val b = EmojiTextView(activity)
val b = AppCompatTextView(activity)
b.layoutParams = lp
b.text = text
@ -180,7 +180,7 @@ fun ItemViewHolder.makeEnqueteChoiceView(
}
llExtra.addView(b)
} else {
val b = EmojiButton(activity)
val b = AppCompatButton(activity)
b.layoutParams = lp
b.isAllCaps = false
b.text = text
@ -227,7 +227,7 @@ fun ItemViewHolder.makeEnqueteFooterMastodon(
topMargin = (0.5f + density * 3f).toInt()
}
val b = EmojiButton(activity)
val b = AppCompatButton(activity)
b.layoutParams = lp
b.isAllCaps = false
b.text = activity.getString(R.string.vote_button)
@ -239,7 +239,7 @@ fun ItemViewHolder.makeEnqueteFooterMastodon(
llExtra.addView(b)
}
val tv = EmojiTextView(activity)
val tv = AppCompatTextView(activity)
val lp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT

View File

@ -2,7 +2,7 @@ package jp.juggler.subwaytooter.util
import android.view.ViewManager
import androidx.appcompat.view.ContextThemeWrapper
import androidx.emoji2.widget.EmojiButton
import androidx.appcompat.widget.AppCompatButton
import androidx.recyclerview.widget.RecyclerView
import com.google.android.flexbox.FlexboxLayout
import com.omadahealth.github.swipyrefreshlayout.library.SwipyRefreshLayout
@ -24,8 +24,8 @@ inline fun ViewManager.myEditText(init: MyEditText.() -> Unit): MyEditText {
return ankoView({ MyEditText(it) }, theme = 0, init = init)
}
inline fun ViewManager.compatButton(init: EmojiButton.() -> Unit): EmojiButton {
return ankoView({ EmojiButton(it) }, theme = 0, init = init)
inline fun ViewManager.compatButton(init: AppCompatButton.() -> Unit): AppCompatButton {
return ankoView({ AppCompatButton(it) }, theme = 0, init = init)
}
inline fun ViewManager.trendTagHistoryView(init: TagHistoryView.() -> Unit): TagHistoryView {

View File

@ -4,7 +4,7 @@ import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.util.SparseIntArray
import androidx.emoji2.widget.EmojiTextView
import androidx.appcompat.widget.AppCompatTextView
import jp.juggler.util.LogCategory
import kotlin.math.cos
import kotlin.math.pow
@ -145,7 +145,7 @@ class Blurhash(blurhash: String, punch: Float = 1f) {
}
}
class BlurhashView : EmojiTextView {
class BlurhashView : AppCompatTextView {
companion object {
val log = LogCategory("BlurhashView")

View File

@ -4,9 +4,9 @@ import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.emoji2.widget.EmojiTextView
import androidx.appcompat.widget.AppCompatTextView
open class MyTextView : EmojiTextView {
open class MyTextView : AppCompatTextView {
internal var linkHit: Boolean = false

View File

@ -6,7 +6,7 @@ buildscript {
ext.target_sdk_version = 31
ext.compile_sdk_version = 31
ext.appcompat_version = '1.4.0-rc01'
ext.appcompat_version = "1.4.0"
ext.lifecycle_version = "2.4.0"
ext.arch_version = "2.1.0"