From f33b3a84c575fd809e3719932f2a50bdb84be5b1 Mon Sep 17 00:00:00 2001 From: tateisu Date: Sat, 17 Oct 2020 00:41:40 +0900 Subject: [PATCH] refactor. fix mute from pseudo account --- .../api/entity/TestTootAccount.kt | 4 +- .../subwaytooter/util/TestHtmlDecoder.kt | 2 +- .../jp/juggler/subwaytooter/DlgContextMenu.kt | 9 +- .../jp/juggler/subwaytooter/ItemViewHolder.kt | 14 +-- .../subwaytooter/action/Action_User.kt | 117 +++++++++--------- .../subwaytooter/action/RelationResult.kt | 9 -- .../jp/juggler/subwaytooter/api/TootParser.kt | 2 +- .../juggler/subwaytooter/util/OpenSticker.kt | 4 +- app/src/main/java/jp/juggler/util/Json.kt | 2 +- .../java/jp/juggler/util/PrimitiveUtils.kt | 2 +- app/src/main/res/layout/lv_drawable.xml | 1 + app/src/main/res/layout/lv_header_profile.xml | 1 + app/src/main/res/layout/lv_highlight_word.xml | 54 ++++---- app/src/main/res/values/strings.xml | 1 + 14 files changed, 106 insertions(+), 116 deletions(-) delete mode 100644 app/src/main/java/jp/juggler/subwaytooter/action/RelationResult.kt diff --git a/app/src/androidTest/java/jp/juggler/subwaytooter/api/entity/TestTootAccount.kt b/app/src/androidTest/java/jp/juggler/subwaytooter/api/entity/TestTootAccount.kt index 96300f1a..295fb1c4 100644 --- a/app/src/androidTest/java/jp/juggler/subwaytooter/api/entity/TestTootAccount.kt +++ b/app/src/androidTest/java/jp/juggler/subwaytooter/api/entity/TestTootAccount.kt @@ -27,13 +27,13 @@ class TestTootAccount { // find from accessHost assertEquals( "", - TootAccount.findHostFromUrl(null, LinkHelper.newLinkHelper(Host.parse("")), null).first + TootAccount.findHostFromUrl(null, LinkHelper.create(Host.parse("")), null).first ) assertEquals( "any string is allowed", TootAccount.findHostFromUrl( null, - LinkHelper.newLinkHelper(Host.parse("any string is allowed")), + LinkHelper.create(Host.parse("any string is allowed")), null ).first ) diff --git a/app/src/androidTest/java/jp/juggler/subwaytooter/util/TestHtmlDecoder.kt b/app/src/androidTest/java/jp/juggler/subwaytooter/util/TestHtmlDecoder.kt index dc01dfc6..a28baf1a 100644 --- a/app/src/androidTest/java/jp/juggler/subwaytooter/util/TestHtmlDecoder.kt +++ b/app/src/androidTest/java/jp/juggler/subwaytooter/util/TestHtmlDecoder.kt @@ -26,7 +26,7 @@ class TestHtmlDecoder { // Context of the app under test. val appContext = InstrumentationRegistry.getTargetContext() - val options = DecodeOptions(appContext,LinkHelper.newLinkHelper(Host.parse("instance.test"))) + val options = DecodeOptions(appContext,LinkHelper.create(Host.parse("instance.test"))) val html = """ 日本語で楽しめるMastodonサーバを提供しています。 diff --git a/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt b/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt index f8f3cfda..8a235459 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt @@ -400,7 +400,7 @@ internal class DlgContextMenu( if(access_info.isPseudo) { // 疑似アカミュートができたのでアカウントアクションを表示する - showRelation(UserRelation()) + showRelation( relation) llAccountActionBar.visibility = View.VISIBLE ivFollowedBy.vg(false) btnFollow.setImageResource(R.drawable.ic_follow_plus) @@ -690,7 +690,12 @@ internal class DlgContextMenu( access_info, bMute = false ) - else -> Action_User.muteConfirm(activity, access_info, who, access_info) + else -> Action_User.muteConfirm( + activity, + access_info, + who, + access_info + ) } R.id.btnBlock -> when { diff --git a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt index 87034f8a..1fb8ef64 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt @@ -1495,15 +1495,11 @@ internal class ItemViewHolder( ivOpenSticker.layoutParams = lp ivOpenSticker.setImageUrl(activity.pref, 0f, item.favicon) val colorBg = item.bgColor - when { - colorBg.isEmpty() -> { - tvOpenSticker.background = null - ivOpenSticker.background = null - } - - colorBg.size == 1 -> { - tvOpenSticker.setBackgroundColor(colorBg.first()) - ivOpenSticker.setBackgroundColor(colorBg.first()) + when(colorBg.size) { + 1 -> { + val c = colorBg.first() + tvOpenSticker.setBackgroundColor(c) + ivOpenSticker.setBackgroundColor(c) } else -> { diff --git a/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt b/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt index fb301354..0778e35c 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/action/Action_User.kt @@ -33,8 +33,7 @@ object Action_User { bMute : Boolean = true, bMuteNotification : Boolean = false ) { - val whoAcct = whoArg.acct - + val whoAcct = whoAccessInfo.getFullAcct(whoArg) if(access_info.isMe(whoAcct)) { activity.showToast(false, R.string.it_is_you) return @@ -46,71 +45,73 @@ object Action_User { var whoIdResult : EntityId? = null override fun background(client : TootApiClient) : TootApiResult? { - if(access_info.isPseudo) - return if(whoAcct.ascii.contains('?')) { + return if(access_info.isPseudo) { + if(! whoAcct.isValidFull) { TootApiResult("can't mute pseudo acct ${whoAcct.pretty}") } else { val relation = UserRelation.loadPseudo(whoAcct) relation.muting = bMute relation.savePseudo(whoAcct.ascii) relationResult = relation + whoIdResult = whoArg.id TootApiResult() } - - val whoId = if(access_info.matchHost(whoAccessInfo)) { - whoArg.id - } else { - val (result, accountRef) = client.syncAccountByAcct(access_info, whoAcct) - accountRef?.get()?.id ?: return result - } - whoIdResult = whoId - - return if(access_info.isMisskey) { - client.request( - when(bMute) { - true -> "/api/mute/create" - else -> "/api/mute/delete" - }, - access_info.putMisskeyApiToken().apply { - put("userId", whoId.toString()) - }.toPostRequestBuilder() - )?.apply { - if(jsonObject != null) { - // 204 no content - - // update user relation - val ur = UserRelation.load(access_info.db_id, whoId) - ur.muting = bMute - saveUserRelationMisskey( - access_info, - whoId, - TootParser(activity, access_info) - ) - relationResult = ur - } + }else{ + val whoId = if(access_info.matchHost(whoAccessInfo)) { + whoArg.id + } else { + val (result, accountRef) = client.syncAccountByAcct(access_info, whoAcct) + accountRef?.get()?.id ?: return result } - } else { - client.request( - "/api/v1/accounts/${whoId}/${if(bMute) "mute" else "unmute"}", - when { - ! bMute -> "".toFormRequestBody() - else -> - jsonObject { - put("notifications", bMuteNotification) - } - .toRequestBody() - }.toPost() - )?.apply { - val jsonObject = jsonObject - if(jsonObject != null) { - relationResult = saveUserRelation( - access_info, - parseItem( - ::TootRelationShip, - TootParser(activity, access_info), - jsonObject + whoIdResult = whoId + + if(access_info.isMisskey) { + client.request( + when(bMute) { + true -> "/api/mute/create" + else -> "/api/mute/delete" + }, + access_info.putMisskeyApiToken().apply { + put("userId", whoId.toString()) + }.toPostRequestBuilder() + )?.apply { + if(jsonObject != null) { + // 204 no content + + // update user relation + val ur = UserRelation.load(access_info.db_id, whoId) + ur.muting = bMute + saveUserRelationMisskey( + access_info, + whoId, + TootParser(activity, access_info) ) - ) + relationResult = ur + } + } + } else { + client.request( + "/api/v1/accounts/${whoId}/${if(bMute) "mute" else "unmute"}", + when { + ! bMute -> "".toFormRequestBody() + else -> + jsonObject { + put("notifications", bMuteNotification) + } + .toRequestBody() + }.toPost() + )?.apply { + val jsonObject = jsonObject + if(jsonObject != null) { + relationResult = saveUserRelation( + access_info, + parseItem( + ::TootRelationShip, + TootParser(activity, access_info), + jsonObject + ) + ) + } } } } @@ -131,7 +132,7 @@ object Action_User { for(column in App1.getAppState(activity).column_list) { if(column.access_info.isPseudo) { - if(relation.muting) { + if(relation.muting && column.type != ColumnType.PROFILE) { // ミュートしたユーザの情報はTLから消える column.removeAccountInTimelinePseudo(whoAcct) } diff --git a/app/src/main/java/jp/juggler/subwaytooter/action/RelationResult.kt b/app/src/main/java/jp/juggler/subwaytooter/action/RelationResult.kt deleted file mode 100644 index f7679648..00000000 --- a/app/src/main/java/jp/juggler/subwaytooter/action/RelationResult.kt +++ /dev/null @@ -1,9 +0,0 @@ -package jp.juggler.subwaytooter.action - -import jp.juggler.subwaytooter.api.TootApiResult -import jp.juggler.subwaytooter.table.UserRelation - -class RelationResult { - var result : TootApiResult? = null - var relation : UserRelation? = null -} \ No newline at end of file diff --git a/app/src/main/java/jp/juggler/subwaytooter/api/TootParser.kt b/app/src/main/java/jp/juggler/subwaytooter/api/TootParser.kt index 09cee198..b0398184 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/api/TootParser.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/api/TootParser.kt @@ -22,7 +22,7 @@ class TootParser( ) { val misskeyUserRelationMap = HashMap() - val misskeyAccountDetailMap = HashMap() + // val misskeyAccountDetailMap = HashMap() val apiHost : Host? get() = linkHelper.apiHost diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/OpenSticker.kt b/app/src/main/java/jp/juggler/subwaytooter/util/OpenSticker.kt index 2c884e7d..fc783a24 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/OpenSticker.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/OpenSticker.kt @@ -20,7 +20,7 @@ object OpenSticker { private val reColor3 = """#($alnum)($alnum)($alnum)\b""" .asciiPattern(Pattern.CASE_INSENSITIVE) - + private fun parseHex(group : String?) : Int = group?.toInt(16) ?: 0 private fun String.parseColor() : Int? { @@ -66,7 +66,6 @@ object OpenSticker { val size = array.size - fun isEmpty() = size == 0 fun first() = array.first() fun last() = array.last() @@ -92,7 +91,6 @@ object OpenSticker { .takeIf { it.isNotEmpty() } ?.let { ColorBg(it) } - class Default( val fontColor : Int, val bgColor : ColorBg diff --git a/app/src/main/java/jp/juggler/util/Json.kt b/app/src/main/java/jp/juggler/util/Json.kt index e7f54f46..4ba5a101 100644 --- a/app/src/main/java/jp/juggler/util/Json.kt +++ b/app/src/main/java/jp/juggler/util/Json.kt @@ -271,7 +271,7 @@ class JsonObject : LinkedHashMap() { fun optDouble(name : String, defVal : Double = 0.0) = double(name) ?: defVal fun stringOrThrow(name : String) = notEmptyOrThrow(name, string(name)) - fun isNull(name : String) = this[name] == null + // fun isNull(name : String) = this[name] == null fun putNotNull(name : String, value : Any?) { if(value != null) put(name, value) } diff --git a/app/src/main/java/jp/juggler/util/PrimitiveUtils.kt b/app/src/main/java/jp/juggler/util/PrimitiveUtils.kt index b0dac147..f29b46f4 100644 --- a/app/src/main/java/jp/juggler/util/PrimitiveUtils.kt +++ b/app/src/main/java/jp/juggler/util/PrimitiveUtils.kt @@ -17,7 +17,7 @@ fun Double.notZero() : Double? = if(this != .0) this else null // usage: boolean.truth() ?: fallback() // equivalent: if(this != 0 ) this else null -fun Boolean.truth() : Boolean? = if(this) this else null +// fun Boolean.truth() : Boolean? = if(this) this else null //////////////////////////////////////////////////////////////////// // long diff --git a/app/src/main/res/layout/lv_drawable.xml b/app/src/main/res/layout/lv_drawable.xml index 5f6ae9ab..d88c5375 100644 --- a/app/src/main/res/layout/lv_drawable.xml +++ b/app/src/main/res/layout/lv_drawable.xml @@ -11,6 +11,7 @@ android:layout_height="48dp" android:id="@+id/ivImage" android:background="#888" + android:contentDescription="@string/image" /> diff --git a/app/src/main/res/layout/lv_highlight_word.xml b/app/src/main/res/layout/lv_highlight_word.xml index 7483dad6..0135c7f0 100644 --- a/app/src/main/res/layout/lv_highlight_word.xml +++ b/app/src/main/res/layout/lv_highlight_word.xml @@ -1,6 +1,5 @@ - + android:textSize="20sp" /> + android:text="@string/delete" + android:textColor="?attr/colorColumnListDeleteText" + android:textSize="20sp" /> + android:orientation="horizontal"> + app:tint="?attr/colorVectorDrawable" /> + android:textSize="20sp" /> + - + android:contentDescription="@string/speech" + android:src="@drawable/ic_comment" + android:tint="?attr/colorVectorDrawable" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c463d650..71a14a38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1059,4 +1059,5 @@ Stop notify posts from this user Gap Using OpenSticker API. + Speech