- 告知リアクションのカスタム絵文字がアニメーションしない問題の修正。

- 告知リアクションをピッカーで選んだ際のカスタム絵文字の取り扱いを修正。
- 告知ヘッダ部分のタップで開閉する。
- 告知の表示のカスタマイズ反映。色、フォント、文字サイズ、行間。
- 告知中のハッシュタグやメンションをタップした時の挙動をトゥートと同様にする。
- 告知を隠した時間を保存。
This commit is contained in:
tateisu 2020-01-28 00:41:18 +09:00
parent 99e2efb9bb
commit 130058c406
6 changed files with 163 additions and 75 deletions

View File

@ -242,6 +242,10 @@ class ActMain : AppCompatActivity()
column = tag.ivh.column column = tag.ivh.column
whoRef = tag.ivh.getAccount() whoRef = tag.ivh.getAccount()
break break
} else if(tag is ColumnViewHolder) {
column = tag.column
whoRef = null
break
} else if(tag is ViewHolderHeaderBase) { } else if(tag is ViewHolderHeaderBase) {
column = tag.column column = tag.column
whoRef = tag.getAccount() whoRef = tag.getAccount()
@ -603,6 +607,7 @@ class ActMain : AppCompatActivity()
// 背景画像を表示しない設定が変更された時にカラムの背景を設定しなおす // 背景画像を表示しない設定が変更された時にカラムの背景を設定しなおす
for(column in app_state.column_list) { for(column in app_state.column_list) {
column.viewHolder?.lastAnnouncementShown = 0L
column.fireColumnColor() column.fireColumnColor()
} }

View File

@ -189,6 +189,8 @@ class Column(
internal const val KEY_COLUMN_NAME = "column_name" internal const val KEY_COLUMN_NAME = "column_name"
internal const val KEY_OLD_INDEX = "old_index" internal const val KEY_OLD_INDEX = "old_index"
internal const val KEY_ANNOUNCEMEMT_HIDE_TIME = "announcementHideTime"
val typeMap : SparseArray<ColumnType> = SparseArray() val typeMap : SparseArray<ColumnType> = SparseArray()
internal var useInstanceTicker = false internal var useInstanceTicker = false
@ -713,6 +715,8 @@ class Column(
instance_local = src.optBoolean(KEY_INSTANCE_LOCAL) instance_local = src.optBoolean(KEY_INSTANCE_LOCAL)
quick_filter = src.optInt(KEY_QUICK_FILTER, 0) quick_filter = src.optInt(KEY_QUICK_FILTER, 0)
announcementHideTime = src.optLong(KEY_ANNOUNCEMEMT_HIDE_TIME,0L)
enable_speech = src.optBoolean(KEY_ENABLE_SPEECH) enable_speech = src.optBoolean(KEY_ENABLE_SPEECH)
use_old_api = src.optBoolean(KEY_USE_OLD_API) use_old_api = src.optBoolean(KEY_USE_OLD_API)
last_viewing_item_id = EntityId.from(src, KEY_LAST_VIEWING_ITEM) last_viewing_item_id = EntityId.from(src, KEY_LAST_VIEWING_ITEM)
@ -798,6 +802,8 @@ class Column(
dst[KEY_TYPE] = type.id dst[KEY_TYPE] = type.id
dst[KEY_COLUMN_ID] = column_id dst[KEY_COLUMN_ID] = column_id
dst[KEY_ANNOUNCEMEMT_HIDE_TIME] = announcementHideTime
dst.putIfTrue(KEY_DONT_CLOSE, dont_close) dst.putIfTrue(KEY_DONT_CLOSE, dont_close)
dst.putIfTrue(KEY_WITH_ATTACHMENT, with_attachment) dst.putIfTrue(KEY_WITH_ATTACHMENT, with_attachment)
dst.putIfTrue(KEY_WITH_HIGHLIGHT, with_highlight) dst.putIfTrue(KEY_WITH_HIGHLIGHT, with_highlight)

View File

@ -153,6 +153,9 @@ class ColumnViewHolder(
private lateinit var etHashtagExtraNone : EditText private lateinit var etHashtagExtraNone : EditText
private lateinit var llAnnouncementsBox : View private lateinit var llAnnouncementsBox : View
private lateinit var llAnnouncementsHeader : View
private lateinit var tvAnnouncementsCaption : TextView
private lateinit var tvAnnouncementsIndex : TextView private lateinit var tvAnnouncementsIndex : TextView
private lateinit var btnAnnouncementsPrev : ImageButton private lateinit var btnAnnouncementsPrev : ImageButton
private lateinit var btnAnnouncementsNext : ImageButton private lateinit var btnAnnouncementsNext : ImageButton
@ -164,7 +167,7 @@ class ColumnViewHolder(
private val announcementContentInvalidator : NetworkEmojiInvalidator private val announcementContentInvalidator : NetworkEmojiInvalidator
private var lastAnnouncementShown = 0L var lastAnnouncementShown = 0L
private val extra_invalidator_list = ArrayList<NetworkEmojiInvalidator>() private val extra_invalidator_list = ArrayList<NetworkEmojiInvalidator>()
@ -348,6 +351,7 @@ class ColumnViewHolder(
btnAnnouncementsShowHide.setOnClickListener(this) btnAnnouncementsShowHide.setOnClickListener(this)
btnAnnouncementsPrev.setOnClickListener(this) btnAnnouncementsPrev.setOnClickListener(this)
btnAnnouncementsNext.setOnClickListener(this) btnAnnouncementsNext.setOnClickListener(this)
llAnnouncementsHeader.setOnClickListener(this)
cbDontCloseColumn.setOnCheckedChangeListener(this) cbDontCloseColumn.setOnCheckedChangeListener(this)
@ -788,6 +792,8 @@ class ColumnViewHolder(
// カラム色を変更したらクイックフィルタの色も変わる場合がある // カラム色を変更したらクイックフィルタの色も変わる場合がある
showQuickFilter() showQuickFilter()
showAnnouncements(force = false)
} }
private fun closeBitmaps() { private fun closeBitmaps() {
@ -1098,7 +1104,7 @@ class ColumnViewHolder(
btnQuickFilterReaction -> clickQuickFilter(Column.QUICK_FILTER_REACTION) btnQuickFilterReaction -> clickQuickFilter(Column.QUICK_FILTER_REACTION)
btnQuickFilterVote -> clickQuickFilter(Column.QUICK_FILTER_VOTE) btnQuickFilterVote -> clickQuickFilter(Column.QUICK_FILTER_VOTE)
btnAnnouncementsShowHide -> { llAnnouncementsHeader, btnAnnouncementsShowHide -> {
if(llAnnouncements.visibility == View.VISIBLE) { if(llAnnouncements.visibility == View.VISIBLE) {
column.announcementHideTime = System.currentTimeMillis() column.announcementHideTime = System.currentTimeMillis()
} else { } else {
@ -1959,23 +1965,29 @@ class ColumnViewHolder(
} }
background = createRoundDrawable( background = createRoundDrawable(
dip(6).toFloat(), dip(6).toFloat(),
getAttributeColor(context, R.attr.colorThumbnailBackground) getAttributeColor(context, R.attr.colorSearchFormBackground)
) )
var pad_tb = dip(2) var pad_tb = dip(2)
setPadding(0, pad_tb, 0, pad_tb) setPadding(0, pad_tb, 0, pad_tb)
linearLayout { val buttonHeight = ActMain.boostButtonSize
lparams(matchParent, wrapContent) { val paddingH = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt()
startMargin = dip(6) val paddingV = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt()
endMargin = dip(6)
} llAnnouncementsHeader = linearLayout {
lparams(matchParent, wrapContent)
val pad_lr = dip(6)
setPadding(pad_lr, 0, pad_lr, 0)
gravity = Gravity.CENTER_VERTICAL background = ContextCompat.getDrawable(
context,
R.drawable.btn_bg_transparent_round6dp
)
gravity = Gravity.CENTER_VERTICAL or Gravity.END
tvAnnouncementsCaption = textView {
textView { gravity = Gravity.END or Gravity.CENTER_VERTICAL
gravity = Gravity.END
text = context.getString(R.string.announcements) text = context.getString(R.string.announcements)
}.lparams(0, wrapContent) { }.lparams(0, wrapContent) {
weight = 1f weight = 1f
@ -1985,12 +1997,14 @@ class ColumnViewHolder(
background = ContextCompat.getDrawable( background = ContextCompat.getDrawable(
context, context,
R.drawable.btn_bg_transparent R.drawable.btn_bg_transparent_round6dp
) )
contentDescription = context.getString(R.string.previous) contentDescription = context.getString(R.string.previous)
imageResource = R.drawable.ic_arrow_start imageResource = R.drawable.ic_arrow_start
}.lparams(dip(32), dip(32)) { setPadding(paddingH, paddingV, paddingH, paddingV)
gravity = Gravity.END scaleType = ImageView.ScaleType.FIT_CENTER
}.lparams(buttonHeight, buttonHeight) {
marginStart = dip(4) marginStart = dip(4)
} }
@ -2003,27 +2017,29 @@ class ColumnViewHolder(
background = ContextCompat.getDrawable( background = ContextCompat.getDrawable(
context, context,
R.drawable.btn_bg_transparent R.drawable.btn_bg_transparent_round6dp
) )
contentDescription = context.getString(R.string.next) contentDescription = context.getString(R.string.next)
imageResource = R.drawable.ic_arrow_end imageResource = R.drawable.ic_arrow_end
}.lparams(dip(32), dip(32)) { setPadding(paddingH, paddingV, paddingH, paddingV)
gravity = Gravity.END scaleType = ImageView.ScaleType.FIT_CENTER
}.lparams(buttonHeight, buttonHeight) {
marginStart = dip(4) marginStart = dip(4)
} }
btnAnnouncementsShowHide = imageButton { btnAnnouncementsShowHide = imageButton {
background = ContextCompat.getDrawable( background = ContextCompat.getDrawable(
context, context,
R.drawable.btn_bg_transparent R.drawable.btn_bg_transparent_round6dp
) )
contentDescription = context.getString(R.string.hide) contentDescription = context.getString(R.string.hide)
imageResource = R.drawable.ic_close imageResource = R.drawable.ic_arrow_drop_down
}.lparams(dip(32), dip(32)) { setPadding(paddingH, paddingV, paddingH, paddingV)
gravity = Gravity.END scaleType = ImageView.ScaleType.FIT_CENTER
}.lparams(buttonHeight, buttonHeight) {
marginStart = dip(4) marginStart = dip(4)
} }
} }
llAnnouncements = maxHeightScrollView { llAnnouncements = maxHeightScrollView {
@ -2320,16 +2336,56 @@ class ColumnViewHolder(
val itemIndex = listShown.indexOf(item) val itemIndex = listShown.indexOf(item)
val enablePaging = listShown.size > 1 val enablePaging = listShown.size > 1
val alphaPrevNext = if(enablePaging) 1f else 0.3f
setIconDrawableId(
activity,
btnAnnouncementsPrev,
R.drawable.ic_arrow_start,
color = content_color,
alphaMultiplier = alphaPrevNext
)
setIconDrawableId(
activity,
btnAnnouncementsNext,
R.drawable.ic_arrow_end,
color = content_color,
alphaMultiplier = alphaPrevNext
)
val expand = column.announcementHideTime <= 0L val expand = column.announcementHideTime <= 0L
btnAnnouncementsPrev.vg(expand)?.run { btnAnnouncementsPrev.vg(expand)?.run {
isEnabled = enablePaging isEnabled = enablePaging
alpha = if(enablePaging) 1f else 0.3f
} }
btnAnnouncementsNext.vg(expand)?.run { btnAnnouncementsNext.vg(expand)?.run {
isEnabled = enablePaging isEnabled = enablePaging
alpha = if(enablePaging) 1f else 0.3f
} }
tvAnnouncementsCaption.textColor = content_color
tvAnnouncementsIndex.textColor = content_color
tvAnnouncementPeriod.textColor = content_color
val f = activity.timeline_font_size_sp
if(! f.isNaN()) {
tvAnnouncementsCaption.textSize = f
tvAnnouncementsIndex.textSize = f
tvAnnouncementPeriod.textSize = f
tvAnnouncementContent.textSize = f
}
val spacing = activity.timeline_spacing
if(spacing != null) {
tvAnnouncementPeriod.setLineSpacing(0f, spacing)
tvAnnouncementContent.setLineSpacing(0f, spacing)
}
tvAnnouncementsCaption.typeface = ActMain.timeline_font_bold
val font_normal = ActMain.timeline_font
tvAnnouncementsIndex.typeface = font_normal
tvAnnouncementPeriod.typeface = font_normal
tvAnnouncementContent.typeface = font_normal
tvAnnouncementsIndex.vg(expand)?.text = tvAnnouncementsIndex.vg(expand)?.text =
activity.getString(R.string.announcements_index, itemIndex + 1, listShown.size) activity.getString(R.string.announcements_index, itemIndex + 1, listShown.size)
llAnnouncements.vg(expand) llAnnouncements.vg(expand)
@ -2343,7 +2399,7 @@ class ColumnViewHolder(
btnAnnouncementsShowHide, btnAnnouncementsShowHide,
R.drawable.ic_error, R.drawable.ic_error,
color = getAttributeColor(activity, R.attr.colorRegexFilterError), color = getAttributeColor(activity, R.attr.colorRegexFilterError),
alphaMultiplier = Styler.boost_alpha alphaMultiplier = 1f
) )
} else { } else {
setIconDrawableId( setIconDrawableId(
@ -2351,7 +2407,7 @@ class ColumnViewHolder(
btnAnnouncementsShowHide, btnAnnouncementsShowHide,
R.drawable.ic_arrow_drop_down, R.drawable.ic_arrow_drop_down,
color = content_color, color = content_color,
alphaMultiplier = Styler.boost_alpha alphaMultiplier = 1f
) )
} }
return return
@ -2362,7 +2418,7 @@ class ColumnViewHolder(
btnAnnouncementsShowHide, btnAnnouncementsShowHide,
R.drawable.ic_arrow_drop_up, R.drawable.ic_arrow_drop_up,
color = content_color, color = content_color,
alphaMultiplier = Styler.boost_alpha alphaMultiplier = 1f
) )
var periods : StringBuilder? = null var periods : StringBuilder? = null
@ -2382,7 +2438,6 @@ class ColumnViewHolder(
item.all_day item.all_day
) )
when { when {
// no periods. // no periods.
@ -2409,7 +2464,9 @@ class ColumnViewHolder(
val sb = periods val sb = periods
tvAnnouncementPeriod.vg(sb != null)?.text = sb tvAnnouncementPeriod.vg(sb != null)?.text = sb
tvAnnouncementContent.textColor = content_color
tvAnnouncementContent.text = item.decoded_content tvAnnouncementContent.text = item.decoded_content
tvAnnouncementContent.tag = this@ColumnViewHolder
announcementContentInvalidator.register(item.decoded_content) announcementContentInvalidator.register(item.decoded_content)
// リアクションの表示 // リアクションの表示
@ -2418,6 +2475,7 @@ class ColumnViewHolder(
val buttonHeight = ActMain.boostButtonSize val buttonHeight = ActMain.boostButtonSize
val marginBetween = (buttonHeight.toFloat() * 0.2f + 0.5f).toInt() val marginBetween = (buttonHeight.toFloat() * 0.2f + 0.5f).toInt()
val marginBottom = (buttonHeight.toFloat() * 0.2f + 0.5f).toInt()
val paddingH = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt() val paddingH = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt()
val paddingV = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt() val paddingV = (buttonHeight.toFloat() * 0.1f + 0.5f).toInt()
@ -2439,8 +2497,10 @@ class ColumnViewHolder(
val blp = FlexboxLayout.LayoutParams( val blp = FlexboxLayout.LayoutParams(
buttonHeight, buttonHeight,
buttonHeight buttonHeight
) ).apply {
blp.endMargin = marginBetween bottomMargin = marginBottom
endMargin = marginBetween
}
b.layoutParams = blp b.layoutParams = blp
b.background = ContextCompat.getDrawable( b.background = ContextCompat.getDrawable(
activity, activity,
@ -2459,7 +2519,7 @@ class ColumnViewHolder(
b, b,
R.drawable.ic_add, R.drawable.ic_add,
color = content_color, color = content_color,
alphaMultiplier = Styler.boost_alpha alphaMultiplier = 1f
) )
box.addView(b) box.addView(b)
@ -2477,29 +2537,30 @@ class ColumnViewHolder(
) )
val actMain = activity val actMain = activity
val emojiAnimation = Pref.bpDisableEmojiAnimation(actMain.pref) val disableEmojiAnimation = Pref.bpDisableEmojiAnimation(actMain.pref)
for(reaction in reactions) { for(reaction in reactions) {
val url = if(emojiAnimation) { val url = if(disableEmojiAnimation) {
reaction.url.notEmpty() ?: reaction.static_url.notEmpty()
} else {
reaction.static_url.notEmpty() ?: reaction.url.notEmpty() reaction.static_url.notEmpty() ?: reaction.url.notEmpty()
} else {
reaction.url.notEmpty() ?: reaction.static_url.notEmpty()
} }
val b = Button(activity).apply { val b = Button(activity).also { btn ->
layoutParams = FlexboxLayout.LayoutParams( btn.layoutParams = FlexboxLayout.LayoutParams(
FlexboxLayout.LayoutParams.WRAP_CONTENT, FlexboxLayout.LayoutParams.WRAP_CONTENT,
buttonHeight buttonHeight
).apply { ).apply {
endMargin = marginBetween endMargin = marginBetween
bottomMargin = marginBottom
} }
minWidthCompat = buttonHeight btn.minWidthCompat = buttonHeight
allCaps = false btn.allCaps = false
tag = reaction btn.tag = reaction
background = ContextCompat.getDrawable( btn.background = ContextCompat.getDrawable(
actMain, actMain,
if(reaction.me == true) { if(reaction.me == true) {
R.drawable.bg_button_cw R.drawable.bg_button_cw
@ -2508,12 +2569,12 @@ class ColumnViewHolder(
} }
) )
setTextColor(content_color) btn.setTextColor(content_color)
setPadding(paddingH, paddingV, paddingH, paddingV) btn.setPadding(paddingH, paddingV, paddingH, paddingV)
text = if(url == null) { btn.text = if(url == null) {
EmojiDecoder.decodeEmoji(options, "${reaction.name} ${reaction.count}") EmojiDecoder.decodeEmoji(options, "${reaction.name} ${reaction.count}")
} else { } else {
SpannableStringBuilder("${reaction.name} ${reaction.count}").also { sb -> SpannableStringBuilder("${reaction.name} ${reaction.count}").also { sb ->
@ -2524,13 +2585,13 @@ class ColumnViewHolder(
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
) )
val invalidator = val invalidator =
NetworkEmojiInvalidator(actMain.handler, this) NetworkEmojiInvalidator(actMain.handler, btn)
invalidator.register(sb) invalidator.register(sb)
extra_invalidator_list.add(invalidator) extra_invalidator_list.add(invalidator)
} }
} }
setOnClickListener { btn.setOnClickListener {
if(reaction.me == true) { if(reaction.me == true) {
removeReaction(item, reaction.name) removeReaction(item, reaction.name)
} else { } else {
@ -2563,27 +2624,16 @@ class ColumnViewHolder(
val host = column.access_info.host val host = column.access_info.host
val isMisskey = column.isMisskey val isMisskey = column.isMisskey
if(sample == null) { if(sample == null) {
EmojiPicker(activity, host, isMisskey) { name, _, _ ,unicode-> EmojiPicker(activity, host, isMisskey) { name, _, _, unicode, customEmoji ->
log.d("addReaction: $name") log.d("addReaction: $name")
addReaction(item, TootAnnouncement.Reaction(jsonObject { addReaction(item, TootAnnouncement.Reaction(jsonObject {
put("name", unicode ?: name ) put("name", unicode ?: name)
put("count", 1) put("count", 1)
put("me", true) put("me", true)
// 以下はカスタム絵文字のみ // 以下はカスタム絵文字のみ
if(unicode == null){ if(customEmoji != null) {
val map = App1.custom_emoji_lister.getMap(host, isMisskey) putNotNull("url", customEmoji.url)
if(map == null) { putNotNull("static_url", customEmoji.static_url)
showToast(activity, false, "emoji map is null")
return@EmojiPicker
}
val ce = map[name]
if(ce == null) {
showToast(activity, false, "emoji '$name' not found.")
return@EmojiPicker
}
putNotNull("url", ce.url)
putNotNull("static_url", ce.static_url)
} }
})) }))
}.show() }.show()
@ -2603,6 +2653,7 @@ class ColumnViewHolder(
if(result.jsonObject == null) { if(result.jsonObject == null) {
showToast(activity, true, result.error) showToast(activity, true, result.error)
} else { } else {
sample.count = 0
val list = item.reactions val list = item.reactions
if(list == null) { if(list == null) {
item.reactions = mutableListOf(sample) item.reactions = mutableListOf(sample)
@ -2612,7 +2663,7 @@ class ColumnViewHolder(
list.add(sample) list.add(sample)
} else { } else {
reaction.me = true reaction.me = true
++reaction.count ++ reaction.count
} }
} }
column.announcementUpdated = SystemClock.elapsedRealtime() column.announcementUpdated = SystemClock.elapsedRealtime()

View File

@ -34,7 +34,8 @@ class EmojiPicker(
name : String, name : String,
instance : String?, instance : String?,
bInstanceHasCustomEmoji : Boolean, bInstanceHasCustomEmoji : Boolean,
unicode:String? unicode : String?,
customEmoji : CustomEmoji?
) -> Unit ) -> Unit
// onEmojiPickedのinstance引数は通常の絵文字ならnull、カスタム絵文字なら非null、 // onEmojiPickedのinstance引数は通常の絵文字ならnull、カスタム絵文字なら非null、
) : View.OnClickListener, ViewPager.OnPageChangeListener { ) : View.OnClickListener, ViewPager.OnPageChangeListener {
@ -92,7 +93,7 @@ class EmojiPicker(
private var custom_list = ArrayList<EmojiItem>() private var custom_list = ArrayList<EmojiItem>()
private var custom_categories = ArrayList<CustomCategory>() private var custom_categories = ArrayList<CustomCategory>()
private val emoji_url_map = HashMap<String, String>() private val emoji_url_map = HashMap<String, CustomEmoji>()
private val recent_page_idx : Int private val recent_page_idx : Int
@ -237,7 +238,7 @@ class EmojiPicker(
newList[category] = subList newList[category] = subList
} }
subList.add(EmojiItem(emoji.shortcode, instance)) subList.add(EmojiItem(emoji.shortcode, instance))
emoji_url_map[emoji.shortcode] = emoji.url emoji_url_map[emoji.shortcode] = emoji
} }
// compose categories data list // compose categories data list
val entries = newList.entries val entries = newList.entries
@ -452,7 +453,7 @@ class EmojiPicker(
layoutParams = AbsListView.LayoutParams(wh, wh) layoutParams = AbsListView.LayoutParams(wh, wh)
} }
view.setTag(R.id.btnAbout, item) view.setTag(R.id.btnAbout, item)
(view as? NetworkEmojiView)?.setEmoji(emoji_url_map[item.name]) (view as? NetworkEmojiView)?.setEmoji(emoji_url_map[item.name]?.url)
} else { } else {
if(viewOld == null) { if(viewOld == null) {
view = ImageView(activity) view = ImageView(activity)
@ -506,7 +507,7 @@ class EmojiPicker(
var name = item.name var name = item.name
if(item.instance != null && item.instance.isNotEmpty()) { if(item.instance != null && item.instance.isNotEmpty()) {
// カスタム絵文字 // カスタム絵文字
selected(name, item.instance,null) selected(name, item.instance, customEmoji = emoji_url_map[item.name])
} else { } else {
// 普通の絵文字 // 普通の絵文字
var ei = EmojiMap.sShortNameToEmojiInfo[name] ?: return var ei = EmojiMap.sShortNameToEmojiInfo[name] ?: return
@ -514,20 +515,25 @@ class EmojiPicker(
if(page.hasSkinTone) { if(page.hasSkinTone) {
val sv = applySkinTone(name) val sv = applySkinTone(name)
val tmp = EmojiMap.sShortNameToEmojiInfo[sv] val tmp = EmojiMap.sShortNameToEmojiInfo[sv]
if( tmp!=null){ if(tmp != null) {
ei = tmp ei = tmp
name = sv name = sv
} }
} }
selected(name, null,ei.unified) selected(name, null, unicode= ei.unified)
} }
} }
} }
} }
// name はスキントーン適用済みであること // name はスキントーン適用済みであること
internal fun selected(name : String, instance : String?,unicode:String?) { internal fun selected(
name : String,
instance : String?,
unicode : String? = null,
customEmoji : CustomEmoji? = null
) {
dialog.dismissSafe() dialog.dismissSafe()
@ -571,7 +577,7 @@ class EmojiPicker(
} }
onEmojiPicked(name, instance, bInstanceHasCustomEmoji,unicode) onEmojiPicked(name, instance, bInstanceHasCustomEmoji, unicode,customEmoji)
} }
internal inner class EmojiPickerPagerAdapter : androidx.viewpager.widget.PagerAdapter() { internal inner class EmojiPickerPagerAdapter : androidx.viewpager.widget.PagerAdapter() {

View File

@ -1014,7 +1014,11 @@ class PostHelper(
} }
private val open_picker_emoji : Runnable = Runnable { private val open_picker_emoji : Runnable = Runnable {
EmojiPicker(activity, instance, isMisskey) { name, instance, bInstanceHasCustomEmoji,_ -> EmojiPicker(
activity,
instance,
isMisskey
) { name, instance, bInstanceHasCustomEmoji, _, _ ->
val et = this.et ?: return@EmojiPicker val et = this.et ?: return@EmojiPicker
val src = et.text ?: "" val src = et.text ?: ""
@ -1042,7 +1046,11 @@ class PostHelper(
} }
fun openEmojiPickerFromMore() { fun openEmojiPickerFromMore() {
EmojiPicker(activity, instance, isMisskey) { name, instance, bInstanceHasCustomEmoji,_ -> EmojiPicker(
activity,
instance,
isMisskey
) { name, instance, bInstanceHasCustomEmoji, _, _ ->
val et = this.et ?: return@EmojiPicker val et = this.et ?: return@EmojiPicker
val src = et.text ?: "" val src = et.text ?: ""

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorRippleEffect"
>
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="6dp" />
</shape>
</item>
</ripple>