v3.5.6. 長すぎるハッシュタグの表示を改善
This commit is contained in:
parent
7f59bc7197
commit
0415d183da
|
@ -40,7 +40,7 @@
|
|||
</value>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
|
|
|
@ -13,8 +13,8 @@ android {
|
|||
targetSdkVersion target_sdk_version
|
||||
minSdkVersion min_sdk_version
|
||||
|
||||
versionCode 355
|
||||
versionName "3.5.5"
|
||||
versionCode 356
|
||||
versionName "3.5.6"
|
||||
applicationId "jp.juggler.subwaytooter"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
|
|
|
@ -226,6 +226,8 @@ class Column(
|
|||
internal const val QUICK_FILTER_REACTION = 5
|
||||
internal const val QUICK_FILTER_VOTE = 6
|
||||
|
||||
internal const val HASHTAG_ELLIPSIZE = 26
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
private inline fun <reified T> getParamAt(params : Array<out Any>, idx : Int) : T {
|
||||
return params[idx] as T
|
||||
|
@ -388,7 +390,6 @@ class Column(
|
|||
})
|
||||
}
|
||||
|
||||
|
||||
private val columnIdMap = HashMap<String, WeakReference<Column>?>()
|
||||
private fun registerColumnId(id : String, column : Column) {
|
||||
synchronized(columnIdMap) {
|
||||
|
@ -818,6 +819,9 @@ class Column(
|
|||
TYPE_HASHTAG_FROM_ACCT -> {
|
||||
hashtag = src.optString(KEY_HASHTAG)
|
||||
hashtag_acct = src.optString(KEY_HASHTAG_ACCT)
|
||||
hashtag_any = src.optString(KEY_HASHTAG_ANY)
|
||||
hashtag_all = src.optString(KEY_HASHTAG_ALL)
|
||||
hashtag_none = src.optString(KEY_HASHTAG_NONE)
|
||||
}
|
||||
|
||||
TYPE_NOTIFICATION_FROM_ACCT -> {
|
||||
|
@ -1011,33 +1015,26 @@ class Column(
|
|||
(status_id?.toString() ?: "null")
|
||||
)
|
||||
|
||||
TYPE_HASHTAG -> {
|
||||
val sb = StringBuilder(context.getString(R.string.hashtag_of, hashtag))
|
||||
|
||||
if(hashtag_any.isNotBlank()) sb.append(' ').append(
|
||||
TYPE_HASHTAG ->
|
||||
StringBuilder(
|
||||
context.getString(
|
||||
R.string.hashtag_title_any,
|
||||
hashtag_any
|
||||
R.string.hashtag_of,
|
||||
hashtag.ellipsizeDot3(HASHTAG_ELLIPSIZE)
|
||||
)
|
||||
)
|
||||
if(hashtag_all.isNotBlank()) sb.append(' ').append(
|
||||
context.getString(
|
||||
R.string.hashtag_title_all,
|
||||
hashtag_all
|
||||
)
|
||||
)
|
||||
if(hashtag_none.isNotBlank()) sb.append(' ').append(
|
||||
context.getString(
|
||||
R.string.hashtag_title_none,
|
||||
hashtag_none
|
||||
)
|
||||
)
|
||||
sb.toString()
|
||||
}
|
||||
.appendHashtagExtra()
|
||||
.toString()
|
||||
|
||||
TYPE_HASHTAG_FROM_ACCT -> {
|
||||
context.getString(R.string.hashtag_of_from, hashtag, hashtag_acct)
|
||||
}
|
||||
TYPE_HASHTAG_FROM_ACCT ->
|
||||
StringBuilder(
|
||||
context.getString(
|
||||
R.string.hashtag_of_from,
|
||||
hashtag.ellipsizeDot3(HASHTAG_ELLIPSIZE),
|
||||
hashtag_acct
|
||||
)
|
||||
)
|
||||
.appendHashtagExtra()
|
||||
.toString()
|
||||
|
||||
TYPE_NOTIFICATION_FROM_ACCT -> {
|
||||
context.getString(
|
||||
|
@ -1574,7 +1571,6 @@ class Column(
|
|||
return status.checkMuted()
|
||||
}
|
||||
|
||||
|
||||
internal fun isFiltered(item : TootNotification) : Boolean {
|
||||
|
||||
if(when(quick_filter) {
|
||||
|
@ -1943,7 +1939,6 @@ class Column(
|
|||
task.executeOnExecutor(App1.task_executor)
|
||||
}
|
||||
|
||||
|
||||
private var bMinIdMatched : Boolean = false
|
||||
|
||||
internal fun parseRange(
|
||||
|
@ -2347,6 +2342,35 @@ class Column(
|
|||
return streamPath != null
|
||||
}
|
||||
|
||||
internal fun hasHashtagExtra() = when {
|
||||
isMisskey -> false
|
||||
column_type == TYPE_HASHTAG || column_type == TYPE_HASHTAG_FROM_ACCT -> true
|
||||
else -> false
|
||||
}
|
||||
|
||||
private fun StringBuilder.appendHashtagExtra() : StringBuilder {
|
||||
val limit = ( HASHTAG_ELLIPSIZE * 2 - min( length , HASHTAG_ELLIPSIZE) ) /3
|
||||
if(hashtag_any.isNotBlank()) append(' ').append(
|
||||
context.getString(
|
||||
R.string.hashtag_title_any,
|
||||
hashtag_any.ellipsizeDot3(limit)
|
||||
)
|
||||
)
|
||||
if(hashtag_all.isNotBlank()) append(' ').append(
|
||||
context.getString(
|
||||
R.string.hashtag_title_all,
|
||||
hashtag_all.ellipsizeDot3(limit)
|
||||
)
|
||||
)
|
||||
if(hashtag_none.isNotBlank()) append(' ').append(
|
||||
context.getString(
|
||||
R.string.hashtag_title_none,
|
||||
hashtag_none.ellipsizeDot3(limit)
|
||||
)
|
||||
)
|
||||
return this
|
||||
}
|
||||
|
||||
fun canReloadWhenRefreshTop() : Boolean {
|
||||
return when(column_type) {
|
||||
|
||||
|
@ -2902,7 +2926,6 @@ class Column(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
internal fun loadFilter2(client : TootApiClient) : ArrayList<TootFilter>? {
|
||||
if(access_info.isPseudo || access_info.isMisskey) return null
|
||||
val column_context = getFilterContext()
|
||||
|
|
|
@ -682,7 +682,7 @@ class ColumnViewHolder(
|
|||
vg(llListList, column.column_type == Column.TYPE_LIST_LIST)
|
||||
vg(cbResolve, column.column_type == Column.TYPE_SEARCH)
|
||||
|
||||
vg(llHashtagExtra, column.column_type == Column.TYPE_HASHTAG && ! column.isMisskey)
|
||||
vg(llHashtagExtra, column.hasHashtagExtra())
|
||||
etHashtagExtraAny.setText(column.hashtag_any)
|
||||
etHashtagExtraAll.setText(column.hashtag_all)
|
||||
etHashtagExtraNone.setText(column.hashtag_none)
|
||||
|
|
|
@ -138,7 +138,7 @@ inline fun <S : CharSequence, Z : Any?> S?.letNotEmpty(block : (S) -> Z?) : Z? =
|
|||
|
||||
// usage: str.notEmpty() ?: fallback
|
||||
// equivalent: if(this.isNotEmpty() ) this else null
|
||||
fun <S : CharSequence> S?.notEmpty() :S? = if( this?.isNotEmpty() ==true ) this else null
|
||||
fun <S : CharSequence> S?.notEmpty() : S? = if(this?.isNotEmpty() == true) this else null
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// string
|
||||
|
@ -150,7 +150,7 @@ fun String.encodeUTF8() = this.toByteArray(charsetUTF8)
|
|||
|
||||
fun ByteArray.decodeUTF8() = this.toString(charsetUTF8)
|
||||
|
||||
fun String.codePointCount(beginIndex:Int = 0): Int = this.codePointCount(beginIndex, this.length)
|
||||
fun String.codePointCount(beginIndex : Int = 0) : Int = this.codePointCount(beginIndex, this.length)
|
||||
|
||||
// 16進ダンプ
|
||||
fun ByteArray.encodeHex() : String {
|
||||
|
@ -192,8 +192,12 @@ fun String?.filterNotEmpty() : String? = when {
|
|||
else -> this
|
||||
}
|
||||
|
||||
//fun String.ellipsize(max : Int) = if(this.length > max) this.substring(0, max - 1) + "…" else this
|
||||
//
|
||||
fun String?.ellipsizeDot3(max : Int) = when {
|
||||
this == null -> null
|
||||
this.length > max -> this.substring(0, max - 1) + "…"
|
||||
else -> this
|
||||
}
|
||||
|
||||
//fun String.toCamelCase() : String {
|
||||
// val sb = StringBuilder()
|
||||
// for(s in this.split("_".toRegex())) {
|
||||
|
|
|
@ -893,7 +893,7 @@
|
|||
<string name="vote_button">投票</string>
|
||||
<string name="end_of_polling_from">%1$sの調査の終了</string>
|
||||
<string name="open_hashtag_from_account">(%1$sからの)ハッシュタグのカラムを開く</string>
|
||||
<string name="hashtag_of_from">Hashtag :#%1$s (%2$sから)</string>
|
||||
<string name="hashtag_of_from">ハッシュタグ #%1$s (%2$sから)</string>
|
||||
<string name="boost_with_visibility">公開範囲を指定してブースト</string>
|
||||
<string name="confirm_private_boost_from">このトゥートを %1$s からブーストしますか? 全てのフォロワーに公開されます</string>
|
||||
<string name="quick_toot_menu">簡易投稿メニュー</string>
|
||||
|
|
Loading…
Reference in New Issue