SubwayTooter-Android-App/app/src/main/java/jp/juggler/subwaytooter/actpost/ActPostVisibility.kt

76 lines
2.5 KiB
Kotlin

package jp.juggler.subwaytooter.actpost
import androidx.appcompat.app.AlertDialog
import jp.juggler.subwaytooter.ActPost
import jp.juggler.subwaytooter.R
import jp.juggler.subwaytooter.api.entity.InstanceCapability
import jp.juggler.subwaytooter.api.entity.TootInstance
import jp.juggler.subwaytooter.api.entity.TootVisibility
import jp.juggler.subwaytooter.getVisibilityCaption
import jp.juggler.subwaytooter.getVisibilityIconId
fun ActPost.showVisibility() {
val iconId = (states.visibility ?: TootVisibility.Public)
.getVisibilityIconId(account?.isMisskey == true)
views.btnVisibility.setImageResource(iconId)
}
fun ActPost.openVisibilityPicker() {
val ti = TootInstance.getCached(account)
val list = when {
account?.isMisskey == true -> arrayOf(
// TootVisibility.WebSetting,
TootVisibility.Public,
TootVisibility.UnlistedHome,
TootVisibility.PrivateFollowers,
TootVisibility.LocalPublic,
TootVisibility.LocalHome,
TootVisibility.LocalFollowers,
TootVisibility.DirectSpecified,
TootVisibility.DirectPrivate
)
InstanceCapability.visibilityMutual(ti) -> arrayOf(
TootVisibility.WebSetting,
TootVisibility.Public,
TootVisibility.UnlistedHome,
TootVisibility.PrivateFollowers,
TootVisibility.Limited,
TootVisibility.Mutual,
TootVisibility.DirectSpecified
)
InstanceCapability.visibilityLimited(ti) -> arrayOf(
TootVisibility.WebSetting,
TootVisibility.Public,
TootVisibility.UnlistedHome,
TootVisibility.PrivateFollowers,
TootVisibility.Limited,
TootVisibility.DirectSpecified
)
else -> arrayOf(
TootVisibility.WebSetting,
TootVisibility.Public,
TootVisibility.UnlistedHome,
TootVisibility.PrivateFollowers,
TootVisibility.DirectSpecified
)
}
val captionList = list
.map { getVisibilityCaption(this, account?.isMisskey == true, it) }
.toTypedArray()
AlertDialog.Builder(this)
.setTitle(R.string.choose_visibility)
.setNegativeButton(R.string.cancel, null)
.setItems(captionList) { _, which ->
list.elementAtOrNull(which)?.let {
states.visibility = it
showVisibility()
}
}
.show()
}