- カラム一覧のカラム名とアイコンとその背景に色をつける
- サーバ情報の取得時にFriendicaが/api/metaに401を返す問題
This commit is contained in:
parent
269e20e12f
commit
c6b92c4c11
|
@ -3,6 +3,7 @@ package jp.juggler.subwaytooter
|
|||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -29,6 +30,8 @@ import jp.juggler.util.log.LogCategory
|
|||
import jp.juggler.util.ui.attrColor
|
||||
import jp.juggler.util.ui.setNavigationBack
|
||||
import jp.juggler.util.ui.vg
|
||||
import org.jetbrains.anko.backgroundColor
|
||||
import org.jetbrains.anko.textColor
|
||||
|
||||
class ActColumnList : AppCompatActivity() {
|
||||
|
||||
|
@ -55,10 +58,12 @@ class ActColumnList : AppCompatActivity() {
|
|||
|
||||
private val listAdapter by lazy { MyListAdapter() }
|
||||
|
||||
private val defaultNameColor by lazy {
|
||||
attrColor(R.attr.colorColumnListItemText)
|
||||
private val defaultAcctColorFg by lazy {
|
||||
attrColor(R.attr.colorColumnHeaderAcct)
|
||||
}
|
||||
private val defaultColumnColorFg by lazy {
|
||||
attrColor(R.attr.colorColumnHeaderName)
|
||||
}
|
||||
|
||||
private var oldSelection: Int = 0
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -145,7 +150,10 @@ class ActColumnList : AppCompatActivity() {
|
|||
?.objectList()
|
||||
?.forEachIndexed { index, src ->
|
||||
try {
|
||||
val item = MyItem(src, index.toLong(), defaultNameColor)
|
||||
val item = MyItem(
|
||||
src,
|
||||
index.toLong(),
|
||||
)
|
||||
add(item)
|
||||
if (oldSelection == item.oldIndex) {
|
||||
item.setOldSelection(true)
|
||||
|
@ -196,16 +204,19 @@ class ActColumnList : AppCompatActivity() {
|
|||
}
|
||||
|
||||
// リスト要素のデータ
|
||||
internal class MyItem(val json: JsonObject, val id: Long, defaultNameColor: Int) {
|
||||
|
||||
val name: String = json.optString(ColumnEncoder.KEY_COLUMN_NAME)
|
||||
val acct: Acct = Acct.parse(json.optString(ColumnEncoder.KEY_COLUMN_ACCESS_ACCT))
|
||||
val acctName: String = json.optString(ColumnEncoder.KEY_COLUMN_ACCESS_STR)
|
||||
val oldIndex = json.optInt(ColumnEncoder.KEY_OLD_INDEX)
|
||||
val type = ColumnType.parse(json.optInt(ColumnEncoder.KEY_TYPE))
|
||||
val acctColorBg = json.optInt(ColumnEncoder.KEY_COLUMN_ACCESS_COLOR_BG, 0)
|
||||
val acctColorFg = json.optInt(ColumnEncoder.KEY_COLUMN_ACCESS_COLOR, 0)
|
||||
.notZero() ?: defaultNameColor
|
||||
internal inner class MyItem(
|
||||
val json: JsonObject,
|
||||
val id: Long,
|
||||
val name: String = json.optString(ColumnEncoder.KEY_COLUMN_NAME),
|
||||
val acct: Acct = Acct.parse(json.optString(ColumnEncoder.KEY_COLUMN_ACCESS_ACCT)),
|
||||
val acctName: String = json.optString(ColumnEncoder.KEY_COLUMN_ACCESS_STR),
|
||||
val oldIndex: Int = json.optInt(ColumnEncoder.KEY_OLD_INDEX),
|
||||
val type: ColumnType = ColumnType.parse(json.optInt(ColumnEncoder.KEY_TYPE)),
|
||||
val acctColorBg: Int = json.optInt(ColumnEncoder.KEY_COLUMN_ACCESS_COLOR_BG, 0),
|
||||
val acctColorFg: Int = json.optInt(ColumnEncoder.KEY_COLUMN_ACCESS_COLOR, 0),
|
||||
val columnColorFg: Int = json.optInt(ColumnEncoder.KEY_HEADER_TEXT_COLOR, 0),
|
||||
val columnColorBg: Int = json.optInt(ColumnEncoder.KEY_HEADER_BACKGROUND_COLOR, 0),
|
||||
) {
|
||||
var bOldSelection: Boolean = false
|
||||
|
||||
fun setOldSelection(b: Boolean) {
|
||||
|
@ -237,11 +248,16 @@ class ActColumnList : AppCompatActivity() {
|
|||
lastItem = item
|
||||
views.ivSelected.vg(item.bOldSelection)
|
||||
views.tvAccess.text = item.acctName
|
||||
views.tvAccess.setTextColor(item.acctColorFg)
|
||||
views.tvAccess.setTextColor(item.acctColorFg.notZero() ?: defaultAcctColorFg)
|
||||
views.tvAccess.setBackgroundColor(item.acctColorBg)
|
||||
views.tvAccess.setPaddingRelative(acctPadLr, 0, acctPadLr, 0)
|
||||
views.tvName.text = item.name
|
||||
|
||||
val columnColorFg = item.columnColorFg.notZero() ?: defaultColumnColorFg
|
||||
views.llColumn.backgroundColor = item.columnColorBg
|
||||
views.tvColumnName.text = item.name
|
||||
views.tvColumnName.textColor = columnColorFg
|
||||
views.ivColumnIcon.setImageResource(item.type.iconId(item.acct))
|
||||
views.ivColumnIcon.imageTintList = ColorStateList.valueOf(columnColorFg)
|
||||
// 背景色がテーマ次第なので、カラム設定の色を反映するとアイコンが見えなくなる可能性がある
|
||||
// よってアイコンやテキストにカラム設定の色を反映しない
|
||||
}
|
||||
|
@ -261,11 +277,16 @@ class ActColumnList : AppCompatActivity() {
|
|||
|
||||
dragViews.tvAccess.run {
|
||||
text = item.acctName
|
||||
setTextColor(item.acctColorFg)
|
||||
setBackgroundColor(item.acctColorBg)
|
||||
textColor = item.acctColorFg.notZero() ?: defaultAcctColorFg
|
||||
backgroundColor = item.acctColorBg
|
||||
}
|
||||
|
||||
dragViews.tvName.text = item.name
|
||||
val columnColorFg = item.columnColorFg.notZero() ?: defaultColumnColorFg
|
||||
dragViews.tvColumnName.run {
|
||||
text = item.name
|
||||
textColor = columnColorFg
|
||||
}
|
||||
dragViews.ivColumnIcon.imageTintList = ColorStateList.valueOf(columnColorFg)
|
||||
dragViews.llColumn.backgroundColor = item.columnColorBg
|
||||
dragViews.ivColumnIcon.setImageResource(item.type.iconId(item.acct))
|
||||
dragViews.ivSelected.visibility = clickViews.ivSelected.visibility
|
||||
dragViews.itemLayout.setBackgroundColor(attrColor(R.attr.list_item_bg_pressed_dragged))
|
||||
|
|
|
@ -397,19 +397,33 @@ class TootInstance(parser: TootParser, src: JsonObject) {
|
|||
private suspend fun TootApiClient.getInstanceInformation(
|
||||
forceAccessToken: String? = null,
|
||||
): TootApiResult? {
|
||||
|
||||
// misskeyのインスタンス情報を読めたら、それはmisskeyのインスタンス
|
||||
val r2 = getInstanceInformationMisskey(forceAccessToken) ?: return null
|
||||
val r2 = getInstanceInformationMisskey(forceAccessToken)
|
||||
?: return null
|
||||
if (r2.jsonObject != null) return r2
|
||||
when (r2.response?.code) {
|
||||
null, 404 -> Unit // fall
|
||||
else -> return r2
|
||||
}
|
||||
|
||||
// https://github.com/tateisu/SubwayTooter/issues/234
|
||||
// friendica は /api/meta に401を返す
|
||||
// このためMisskeyのサーバ情報取得に失敗したらそれが何であれMastodonのサーバ情報取得を行う
|
||||
|
||||
// マストドンのインスタンス情報を読めたら、それはマストドンのインスタンス
|
||||
// インスタンス情報を読めない場合もホワイトリストモードの問題があるので
|
||||
// マストドン側のエラーを返す
|
||||
return getInstanceInformationMastodon(forceAccessToken)
|
||||
val r1 = getInstanceInformationMastodon(forceAccessToken)
|
||||
?: return null
|
||||
if (r1.jsonObject != null) return r1
|
||||
|
||||
// 両方読めなかった場合
|
||||
return when (r1.response?.code) {
|
||||
// Mastodon側が404を返したらMisskeyのエラー応答を返す
|
||||
404 -> r2
|
||||
|
||||
// Mastodonはホワイトリストモードの際に401を返す。
|
||||
// Mastoronのエラー結果を返す。
|
||||
401 -> r1
|
||||
|
||||
// その他の場合
|
||||
// Mastoronのエラー結果を返す。
|
||||
else -> r1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -44,8 +44,8 @@ object ColumnEncoder {
|
|||
private const val KEY_REGEX_TEXT = "regex_text"
|
||||
private const val KEY_LANGUAGE_FILTER = "language_filter"
|
||||
|
||||
private const val KEY_HEADER_BACKGROUND_COLOR = "header_background_color"
|
||||
private const val KEY_HEADER_TEXT_COLOR = "header_text_color"
|
||||
const val KEY_HEADER_BACKGROUND_COLOR = "header_background_color"
|
||||
const val KEY_HEADER_TEXT_COLOR = "header_text_color"
|
||||
private const val KEY_COLUMN_BACKGROUND_COLOR = "column_background_color"
|
||||
private const val KEY_COLUMN_ACCT_TEXT_COLOR = "column_acct_text_color"
|
||||
private const val KEY_COLUMN_CONTENT_TEXT_COLOR = "column_content_text_color"
|
||||
|
|
|
@ -28,10 +28,10 @@ class MyDrawerLayout : DrawerLayout {
|
|||
private val exclusionRects = listOf(Rect(), Rect(), Rect(), Rect())
|
||||
|
||||
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
|
||||
val timeStart = SystemClock.elapsedRealtime()
|
||||
// val timeStart = SystemClock.elapsedRealtime()
|
||||
super.onLayout(changed, l, t, r, b)
|
||||
val timeEnd = SystemClock.elapsedRealtime()
|
||||
log.i("onLayout ${timeEnd - timeStart}ms changed=$changed")
|
||||
// val timeEnd = SystemClock.elapsedRealtime()
|
||||
// log.i("onLayout ${timeEnd - timeStart}ms changed=$changed")
|
||||
|
||||
// 画面下部の左右にはボタンがあるので、システムジェスチャーナビゲーションの対象外にする
|
||||
val w = r - l
|
||||
|
|
|
@ -71,14 +71,17 @@
|
|||
android:id="@+id/tvAccess"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="start"
|
||||
android:gravity="start|center_vertical"
|
||||
android:includeFontPadding="false"
|
||||
android:textColor="?attr/colorColumnListItemText"
|
||||
android:textSize="14sp"
|
||||
tools:text="user@acct" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llColumn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:baselineAligned="false"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
@ -92,10 +95,12 @@
|
|||
tools:src="@drawable/ic_face" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvName"
|
||||
android:id="@+id/tvColumnName"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="start|center_vertical"
|
||||
android:includeFontPadding="false"
|
||||
android:textSize="18sp"
|
||||
tools:text="name 名前 " />
|
||||
|
||||
|
|
Loading…
Reference in New Issue