- androidx.emoji2 1.0.0
- androidx.appcompat 1.4.0 - 物理キーボード使用時のコピペ操作ができなくなっていた問題の修正。ショートカットの実装をonKeyDown+onKeyUpからonKeyShortcutに変更した。 - EmojiTextView,EmojiEditText,EmojiButton を AppCompatに戻す。
This commit is contained in:
parent
4c43e807b1
commit
0e996868ab
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
Loading…
Reference in New Issue