diff --git a/.idea/dictionaries/tateisu.xml b/.idea/dictionaries/tateisu.xml index 3d3853a9..ed572a5b 100644 --- a/.idea/dictionaries/tateisu.xml +++ b/.idea/dictionaries/tateisu.xml @@ -61,6 +61,7 @@ thru timelines tootsearch + unarist unfavourite unfollow unmute diff --git a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt index db079e20..d64b88cb 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt @@ -457,7 +457,7 @@ internal class ItemViewHolder( boost_time = time llBoosted.visibility = View.VISIBLE ivBoosted.setImageResource(Styler.getAttributeResourceId(activity, icon_attr_id)) - tvBoostedTime.text = TootStatus.formatTime(tvBoostedTime.context, time, true) + showStatusTime(activity, tvBoostedTime, who, time = time) tvBoosted.text = text boost_invalidator.register(text) setAcct(tvBoostedAcct, access_info.getFullAcct(who), who.acct) @@ -484,7 +484,7 @@ internal class ItemViewHolder( this.status_showing = status llStatus.visibility = View.VISIBLE - showStatusTime(activity, status) + showStatusTime(activity, tvTime, who = status.account, status = status) val who = status.account this.status_account = who @@ -623,62 +623,95 @@ internal class ItemViewHolder( } } - private fun showStatusTime(activity : ActMain, status : TootStatus) { + private fun showStatusTime( + activity : ActMain, + tv : TextView, + @Suppress("UNUSED_PARAMETER") who : TootAccount, + status : TootStatus? = null, + time : Long? = null + ) { val sb = SpannableStringBuilder() - if(status.hasMedia() && status.sensitive) { - // if( sb.length() > 0 ) sb.append( ' ' ); + // if(access_info.getFullAcct(who) == "unarist@mstdn.maud.io") { + // // if(sb.isNotEmpty()) sb.append(' ') + // + // val start = sb.length + // sb.append("unarist") + // val end = sb.length + // val icon_id = R.drawable.unarist + // sb.setSpan( + // EmojiImageSpan(activity, icon_id), + // start, + // end, + // Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + // ) + // } + + if(status != null) { + if(status.hasMedia() && status.sensitive) { + if(sb.isNotEmpty()) sb.append(' ') + + val start = sb.length + sb.append("NSFW") + val end = sb.length + val icon_id = Styler.getAttributeResourceId(activity, R.attr.ic_eye_off) + sb.setSpan( + EmojiImageSpan(activity, icon_id), + start, + end, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + } + + val visIconAttrId = Styler.getVisibilityIconAttr(status.visibility) + if(R.attr.ic_public != visIconAttrId) { + if(sb.isNotEmpty()) sb.append(' ') + val start = sb.length + sb.append(status.visibility) + val end = sb.length + val iconResId = Styler.getAttributeResourceId(activity, visIconAttrId) + sb.setSpan( + EmojiImageSpan(activity, iconResId), + start, + end, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + } + + if(status.pinned) { + if(sb.isNotEmpty()) sb.append(' ') + val start = sb.length + sb.append("pinned") + val end = sb.length + val icon_id = Styler.getAttributeResourceId(activity, R.attr.ic_pin) + sb.setSpan( + EmojiImageSpan(activity, icon_id), + start, + end, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + } - val start = sb.length - sb.append("NSFW") - val end = sb.length - val icon_id = Styler.getAttributeResourceId(activity, R.attr.ic_eye_off) - sb.setSpan( - EmojiImageSpan(activity, icon_id), - start, - end, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE - ) - } - - val visIconAttrId = Styler.getVisibilityIconAttr(status.visibility) - if(R.attr.ic_public != visIconAttrId) { - if(sb.isNotEmpty()) sb.append(' ') - val start = sb.length - sb.append(status.visibility) - val end = sb.length - val iconResId = Styler.getAttributeResourceId(activity, visIconAttrId) - sb.setSpan( - EmojiImageSpan(activity, iconResId), - start, - end, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE - ) - } - - if(status.pinned) { - if(sb.isNotEmpty()) sb.append(' ') - val start = sb.length - sb.append("pinned") - val end = sb.length - val icon_id = Styler.getAttributeResourceId(activity, R.attr.ic_pin) - sb.setSpan( - EmojiImageSpan(activity, icon_id), - start, - end, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE - ) } if(sb.isNotEmpty()) sb.append(' ') sb.append( - TootStatus.formatTime( - activity, - status.time_created_at, - column.column_type != Column.TYPE_CONVERSATION - ) + when { + time != null -> TootStatus.formatTime( + activity, + time, + column.column_type != Column.TYPE_CONVERSATION + ) + status != null -> TootStatus.formatTime( + activity, + status.time_created_at, + column.column_type != Column.TYPE_CONVERSATION + ) + else -> "?" + } ) - tvTime.text = sb + + tv.text = sb } // fun updateRelativeTime() { @@ -1456,11 +1489,13 @@ internal class ItemViewHolder( val actMain = activity as? ActMain val thumbnailHeight = actMain?.app_state?.media_thumb_height ?: dip(64) - val verticalArrangeThumbnails = Pref.bpVerticalArrangeThumbnails( actMain?.pref ?: Pref.pref(context)) + val verticalArrangeThumbnails = Pref.bpVerticalArrangeThumbnails( + actMain?.pref ?: Pref.pref(context) + ) - flMedia = if(verticalArrangeThumbnails ) { + flMedia = if(verticalArrangeThumbnails) { frameLayout { - lparams(matchParent, wrapContent ) { + lparams(matchParent, wrapContent) { topMargin = dip(3) } llMedia = verticalLayout { @@ -1478,7 +1513,7 @@ internal class ItemViewHolder( context, R.attr.btn_close ) - }.lparams(dip(32),dip(32)) { + }.lparams(dip(32), dip(32)) { gravity = Gravity.END } @@ -1548,8 +1583,11 @@ internal class ItemViewHolder( gravity = Gravity.CENTER_VERTICAL or Gravity.END text = context.getString(R.string.tap_to_show) textColor = - Styler.getAttributeColor(context, R.attr.colorShowMediaText) - endPadding=dip(4) + Styler.getAttributeColor( + context, + R.attr.colorShowMediaText + ) + endPadding = dip(4) minHeightCompat = dip(32) }.lparams(matchParent, matchParent) } @@ -1646,13 +1684,16 @@ internal class ItemViewHolder( gravity = Gravity.CENTER text = context.getString(R.string.tap_to_show) textColor = - Styler.getAttributeColor(context, R.attr.colorShowMediaText) + Styler.getAttributeColor( + context, + R.attr.colorShowMediaText + ) }.lparams(matchParent, matchParent) } } - + llExtra = verticalLayout { diff --git a/app/src/main/java/jp/juggler/subwaytooter/view/PinchBitmapView.kt b/app/src/main/java/jp/juggler/subwaytooter/view/PinchBitmapView.kt index 308ebe10..fda41575 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/view/PinchBitmapView.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/view/PinchBitmapView.kt @@ -172,10 +172,14 @@ class PinchBitmapView(context : Context, attrs : AttributeSet?, defStyle : Int) override fun performClick() : Boolean { super.performClick() + initializeScale() + return true } + var defaultScale :Float = 1f + // 表示位置の初期化 // 呼ばれるのは、ビットマップを変更した時、ビューのサイズが変わった時、画像をクリックした時 private fun initializeScale() { @@ -186,23 +190,37 @@ class PinchBitmapView(context : Context, attrs : AttributeSet?, defStyle : Int) bitmap_h = Math.max(1f, bitmap.height.toFloat()) bitmap_aspect = bitmap_w / bitmap_h - current_scale = if(view_aspect > bitmap_aspect) { + if(view_aspect > bitmap_aspect) { + scale_min = view_h / bitmap_h / 2f + scale_max = view_w / bitmap_w * 8f + } else { + scale_min = view_w / bitmap_w / 2f + scale_max = view_h / bitmap_h * 8f + } + if(scale_max < scale_min) scale_max = scale_min * 16f + + defaultScale = if(view_aspect > bitmap_aspect) { view_h / bitmap_h } else { view_w / bitmap_w } - val draw_w = bitmap_w * current_scale - val draw_h = bitmap_h * current_scale + val draw_w = bitmap_w * defaultScale + val draw_h = bitmap_h * defaultScale + current_scale = defaultScale current_trans_x = (view_w - draw_w) / 2f current_trans_y = (view_h - draw_h) / 2f callback?.onMove(bitmap_w, bitmap_h, current_trans_x, current_trans_y, current_scale) } else { + defaultScale = 1f + scale_min = 1f + scale_max = 1f + + current_scale = defaultScale current_trans_y = 0f - current_trans_x = current_trans_y - current_scale = 1f + current_trans_x = 0f callback?.onMove(0f, 0f, current_trans_x, current_trans_y, current_scale) } @@ -388,14 +406,7 @@ class PinchBitmapView(context : Context, attrs : AttributeSet?, defStyle : Int) start_image_trans_y = current_trans_y start_image_scale = current_scale - if(view_aspect > bitmap_aspect) { - scale_min = view_h / bitmap_h / 2f - scale_max = view_w / bitmap_w * 8f - } else { - scale_min = view_w / bitmap_w / 2f - scale_max = view_h / bitmap_h * 8f - } - if(scale_max < scale_min) scale_max = scale_min * 16f + } // 画面上の指の位置から画像中の指の位置を調べる