2021-05-19 09:51:34 +02:00
|
|
|
package jp.juggler.subwaytooter
|
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
import android.app.Activity
|
2021-05-19 09:51:34 +02:00
|
|
|
import android.view.View
|
|
|
|
import android.widget.CompoundButton
|
|
|
|
import jp.juggler.subwaytooter.action.Action_Account
|
|
|
|
import jp.juggler.subwaytooter.action.Action_List
|
|
|
|
import jp.juggler.subwaytooter.action.Action_Notification
|
|
|
|
import jp.juggler.subwaytooter.api.entity.TootAnnouncement
|
2021-05-21 10:20:14 +02:00
|
|
|
import jp.juggler.util.*
|
2021-05-19 09:51:34 +02:00
|
|
|
import java.util.regex.Pattern
|
|
|
|
|
|
|
|
fun ColumnViewHolder.onListListUpdated() {
|
|
|
|
etListName.setText("")
|
|
|
|
}
|
|
|
|
|
|
|
|
fun ColumnViewHolder.checkRegexFilterError(src: String): String? {
|
|
|
|
try {
|
|
|
|
if (src.isEmpty()) {
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
val m = Pattern.compile(src).matcher("")
|
|
|
|
if (m.find()) {
|
|
|
|
// 空文字列にマッチする正規表現はエラー扱いにする
|
|
|
|
// そうしないとCWの警告テキストにマッチしてしまう
|
|
|
|
return activity.getString(R.string.regex_filter_matches_empty_string)
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
} catch (ex: Throwable) {
|
|
|
|
val message = ex.message
|
|
|
|
return if (message != null && message.isNotEmpty()) {
|
|
|
|
message
|
|
|
|
} else {
|
|
|
|
ex.withCaption(activity.resources, R.string.regex_error)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun ColumnViewHolder.isRegexValid(): Boolean {
|
|
|
|
val s = etRegexFilter.text.toString()
|
|
|
|
val error = checkRegexFilterError(s)
|
|
|
|
tvRegexFilterError.text = error ?: ""
|
|
|
|
return error == null
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun ColumnViewHolder.onCheckedChangedImpl(view: CompoundButton?, isChecked: Boolean) {
|
|
|
|
view ?: return
|
|
|
|
|
|
|
|
val column = this.column
|
|
|
|
|
|
|
|
if (binding_busy || column == null || status_adapter == null) return
|
|
|
|
|
|
|
|
// カラムを追加/削除したときに ColumnからColumnViewHolderへの参照が外れることがある
|
|
|
|
// リロードやリフレッシュ操作で直るようにする
|
|
|
|
column.addColumnViewHolder(this)
|
|
|
|
|
|
|
|
when (view) {
|
|
|
|
|
|
|
|
cbDontCloseColumn -> {
|
|
|
|
column.dont_close = isChecked
|
|
|
|
showColumnCloseButton()
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbWithAttachment -> {
|
|
|
|
column.with_attachment = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbRemoteOnly -> {
|
|
|
|
column.remote_only = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbWithHighlight -> {
|
|
|
|
column.with_highlight = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowBoost -> {
|
|
|
|
column.dont_show_boost = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowReply -> {
|
|
|
|
column.dont_show_reply = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowReaction -> {
|
|
|
|
column.dont_show_reaction = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowVote -> {
|
|
|
|
column.dont_show_vote = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowNormalToot -> {
|
|
|
|
column.dont_show_normal_toot = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowNonPublicToot -> {
|
|
|
|
column.dont_show_non_public_toot = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowFavourite -> {
|
|
|
|
column.dont_show_favourite = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontShowFollow -> {
|
|
|
|
column.dont_show_follow = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbInstanceLocal -> {
|
|
|
|
column.instance_local = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontStreaming -> {
|
|
|
|
column.dont_streaming = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
activity.app_state.streamManager.updateStreamingColumns()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbDontAutoRefresh -> {
|
|
|
|
column.dont_auto_refresh = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbHideMediaDefault -> {
|
|
|
|
column.hide_media_default = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.fireShowContent(reason = "HideMediaDefault in ColumnSetting", reset = true)
|
|
|
|
}
|
|
|
|
|
|
|
|
cbSystemNotificationNotRelated -> {
|
|
|
|
column.system_notification_not_related = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbEnableSpeech -> {
|
|
|
|
column.enable_speech = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
}
|
|
|
|
|
|
|
|
cbOldApi -> {
|
|
|
|
column.use_old_api = isChecked
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun ColumnViewHolder.onClickImpl(v: View?) {
|
2021-05-22 00:03:16 +02:00
|
|
|
v ?: return
|
2021-05-19 09:51:34 +02:00
|
|
|
|
|
|
|
val column = this.column
|
|
|
|
val status_adapter = this.status_adapter
|
|
|
|
if (binding_busy || column == null || status_adapter == null) return
|
|
|
|
|
|
|
|
// カラムを追加/削除したときに ColumnからColumnViewHolderへの参照が外れることがある
|
|
|
|
// リロードやリフレッシュ操作で直るようにする
|
|
|
|
column.addColumnViewHolder(this)
|
|
|
|
|
|
|
|
when (v) {
|
|
|
|
btnColumnClose -> activity.closeColumn(column)
|
|
|
|
|
|
|
|
btnColumnReload -> {
|
|
|
|
App1.custom_emoji_cache.clearErrorCache()
|
|
|
|
|
|
|
|
if (column.isSearchColumn) {
|
|
|
|
etSearch.hideKeyboard()
|
|
|
|
etSearch.setText(column.search_query)
|
|
|
|
cbResolve.isCheckedNoAnime = column.search_resolve
|
2021-05-22 00:03:16 +02:00
|
|
|
} else if (column.type == ColumnType.REACTIONS) {
|
2021-05-21 10:20:14 +02:00
|
|
|
updateReactionQueryView()
|
2021-05-19 09:51:34 +02:00
|
|
|
}
|
|
|
|
refreshLayout.isRefreshing = false
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
btnSearch -> {
|
2021-05-22 00:03:16 +02:00
|
|
|
if (column.isSearchColumn) {
|
2021-05-21 10:20:14 +02:00
|
|
|
etSearch.hideKeyboard()
|
|
|
|
column.search_query = etSearch.text.toString().trim { it <= ' ' }
|
|
|
|
column.search_resolve = cbResolve.isChecked
|
|
|
|
}
|
2021-05-19 09:51:34 +02:00
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
btnSearchClear -> {
|
|
|
|
column.search_query = ""
|
|
|
|
column.search_resolve = cbResolve.isChecked
|
2021-05-21 10:20:14 +02:00
|
|
|
etSearch.setText("")
|
|
|
|
flEmoji.removeAllViews()
|
2021-05-19 09:51:34 +02:00
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
column.startLoading()
|
|
|
|
}
|
|
|
|
|
|
|
|
llColumnHeader -> scrollToTop2()
|
|
|
|
|
|
|
|
btnColumnSetting -> {
|
|
|
|
if (showColumnSetting(!isColumnSettingShown)) {
|
|
|
|
hideAnnouncements()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
btnDeleteNotification -> Action_Notification.deleteAll(
|
|
|
|
activity,
|
|
|
|
column.access_info,
|
|
|
|
false
|
|
|
|
)
|
|
|
|
|
|
|
|
btnColor ->
|
2021-05-22 00:03:16 +02:00
|
|
|
activity.app_state.columnIndex(column)?.let { colIdx ->
|
|
|
|
|
|
|
|
|
|
|
|
activity.arColumnColor.launch(
|
|
|
|
ActColumnCustomize.createIntent(activity, colIdx)
|
|
|
|
)
|
2021-05-19 09:51:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
btnLanguageFilter ->
|
2021-05-22 00:03:16 +02:00
|
|
|
activity.app_state.columnIndex(column)?.let { colIdx ->
|
|
|
|
|
|
|
|
activity.arLanguageFilter.launch(
|
|
|
|
ActLanguageFilter.createIntent(activity, colIdx)
|
|
|
|
)
|
2021-05-19 09:51:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
btnListAdd -> {
|
|
|
|
val tv = etListName.text.toString().trim { it <= ' ' }
|
|
|
|
if (tv.isEmpty()) {
|
|
|
|
activity.showToast(true, R.string.list_name_empty)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
Action_List.create(activity, column.access_info, tv, null)
|
|
|
|
}
|
|
|
|
|
|
|
|
llRefreshError -> {
|
|
|
|
column.mRefreshLoadingErrorPopupState = 1 - column.mRefreshLoadingErrorPopupState
|
|
|
|
showRefreshError()
|
|
|
|
}
|
|
|
|
|
|
|
|
btnQuickFilterAll -> clickQuickFilter(Column.QUICK_FILTER_ALL)
|
|
|
|
btnQuickFilterMention -> clickQuickFilter(Column.QUICK_FILTER_MENTION)
|
|
|
|
btnQuickFilterFavourite -> clickQuickFilter(Column.QUICK_FILTER_FAVOURITE)
|
|
|
|
btnQuickFilterBoost -> clickQuickFilter(Column.QUICK_FILTER_BOOST)
|
|
|
|
btnQuickFilterFollow -> clickQuickFilter(Column.QUICK_FILTER_FOLLOW)
|
|
|
|
btnQuickFilterPost -> clickQuickFilter(Column.QUICK_FILTER_POST)
|
|
|
|
btnQuickFilterReaction -> clickQuickFilter(Column.QUICK_FILTER_REACTION)
|
|
|
|
btnQuickFilterVote -> clickQuickFilter(Column.QUICK_FILTER_VOTE)
|
|
|
|
|
|
|
|
btnAnnouncements -> toggleAnnouncements()
|
|
|
|
|
|
|
|
btnAnnouncementsPrev -> {
|
|
|
|
column.announcementId =
|
|
|
|
TootAnnouncement.move(column.announcements, column.announcementId, -1)
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
showAnnouncements()
|
|
|
|
}
|
|
|
|
|
|
|
|
btnAnnouncementsNext -> {
|
|
|
|
column.announcementId =
|
|
|
|
TootAnnouncement.move(column.announcements, column.announcementId, +1)
|
|
|
|
activity.app_state.saveColumnList()
|
|
|
|
showAnnouncements()
|
|
|
|
}
|
|
|
|
|
|
|
|
btnConfirmMail -> {
|
|
|
|
Action_Account.resendConfirmMail(activity, column.access_info)
|
2021-05-21 10:20:14 +02:00
|
|
|
}
|
2021-05-19 09:51:34 +02:00
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
btnEmojiAdd -> {
|
2021-05-21 10:20:14 +02:00
|
|
|
addEmojiQuery()
|
2021-05-19 09:51:34 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun ColumnViewHolder.onLongClickImpl(v: View?): Boolean {
|
2021-05-22 00:03:16 +02:00
|
|
|
v ?: return false
|
2021-05-19 09:51:34 +02:00
|
|
|
return when (v) {
|
|
|
|
btnColumnClose ->
|
|
|
|
activity.app_state.columnIndex(column)?.let {
|
|
|
|
activity.closeColumnAll(it)
|
|
|
|
true
|
|
|
|
} ?: false
|
|
|
|
|
|
|
|
else -> false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|