From 1f85fb49cc2e0db77567f1f8adfeb48bbc5d1c7f Mon Sep 17 00:00:00 2001 From: tateisu Date: Wed, 7 Feb 2018 05:41:30 +0900 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E8=94=B5=E3=83=A1=E3=83=87=E3=82=A3?= =?UTF-8?q?=E3=82=A2=E3=83=93=E3=83=A5=E3=83=BC=E3=82=A2=E3=81=AE=E8=83=8C?= =?UTF-8?q?=E6=99=AF=E3=82=BF=E3=82=A4=E3=83=AB=E3=82=92=E3=82=88=E3=82=8A?= =?UTF-8?q?=E6=9A=97=E3=81=8F=E3=81=97=E3=81=9F=E3=80=82=E3=82=A2=E3=83=97?= =?UTF-8?q?=E3=83=AA=E8=A8=AD=E5=AE=9A=E3=81=AB=E3=80=8C=E6=8C=99=E5=8B=95?= =?UTF-8?q?/=E3=82=AB=E3=83=A9=E3=83=A0=E3=81=AE=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E3=82=92=E8=A8=B1=E5=AE=B9=E3=80=8D=E3=82=AB=E3=83=A9=E3=83=A0?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=AB=E3=80=8C=E3=82=B7=E3=82=B9=E3=83=86?= =?UTF-8?q?=E3=83=A0=E9=80=9A=E7=9F=A5=E3=81=AE=E3=82=BF=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=81=A7=E9=81=B8=E3=81=B0=E3=82=8C=E3=81=AA=E3=81=84=E3=80=8D?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _ArtWork/media_bg_dark.png | Bin 96 -> 150 bytes .../subwaytooter/api/TestTootApiClient.kt | 5 +- .../java/jp/juggler/subwaytooter/ActMain.kt | 79 ++++++++++++++---- .../java/jp/juggler/subwaytooter/Column.kt | 49 ++++++++++- .../juggler/subwaytooter/ColumnViewHolder.kt | 11 ++- .../jp/juggler/subwaytooter/DlgContextMenu.kt | 4 +- .../jp/juggler/subwaytooter/ItemViewHolder.kt | 2 +- .../main/java/jp/juggler/subwaytooter/Pref.kt | 6 ++ .../subwaytooter/action/Action_Instance.kt | 2 +- .../juggler/subwaytooter/api/TootApiClient.kt | 2 +- .../subwaytooter/util/SimpleHttpClient.kt | 53 +++++++++++- .../main/res/drawable-hdpi/media_bg_dark.png | Bin 257 -> 281 bytes .../main/res/drawable-mdpi/media_bg_dark.png | Bin 216 -> 256 bytes .../main/res/drawable-xhdpi/media_bg_dark.png | Bin 276 -> 314 bytes .../res/drawable-xxhdpi/media_bg_dark.png | Bin 294 -> 333 bytes .../res/drawable-xxxhdpi/media_bg_dark.png | Bin 350 -> 372 bytes app/src/main/res/layout/act_app_setting.xml | 16 ++++ app/src/main/res/layout/page_column.xml | 7 +- app/src/main/res/values-fr/strings.xml | 8 +- app/src/main/res/values-ja/strings.xml | 6 ++ app/src/main/res/values/strings.xml | 6 ++ resizeLauncherIcon.pl | 6 +- 22 files changed, 227 insertions(+), 35 deletions(-) diff --git a/_ArtWork/media_bg_dark.png b/_ArtWork/media_bg_dark.png index 10e8143a74630804f50e17679a8aca19b49f25a8..6e39ba212441f03ef1e7f8a165400e719bd02b38 100644 GIT binary patch delta 120 zcmYe8#yCNxh$+e2-G$+Qd;gjJ3=9mM1s;*b3=G`DAk4@xYmNj^kiEpy*OmPd6Pu8X z{;coZ{XijgPZ!4!i_^&=Kh8IZ+8oe3bKr=BlEhVmAQJr>mdKI;Vst05%gObN~PV delta 66 zcmbQnm@q-bM%~lJF~s6@GS9E`4Werf>zz4p#6d~oszH#6fzbmGZ^y+8O;$CUFfg>H WG1pICkT`(>2s~Z=T-G@yGywoq6&Pax diff --git a/app/src/androidTest/java/jp/juggler/subwaytooter/api/TestTootApiClient.kt b/app/src/androidTest/java/jp/juggler/subwaytooter/api/TestTootApiClient.kt index df79105b..e6a047e7 100644 --- a/app/src/androidTest/java/jp/juggler/subwaytooter/api/TestTootApiClient.kt +++ b/app/src/androidTest/java/jp/juggler/subwaytooter/api/TestTootApiClient.kt @@ -2,6 +2,7 @@ package jp.juggler.subwaytooter.api +import android.content.Context import android.support.test.InstrumentationRegistry import android.support.test.runner.AndroidJUnit4 import jp.juggler.subwaytooter.table.SavedAccount @@ -30,11 +31,11 @@ class TestTootApiClient { override var currentCallCallback : CurrentCallCallback? = null - override fun getResponse(request : Request) : Response { + override fun getResponse(context: Context, request : Request) : Response { return responseGenerator(request) } - override fun getWebSocket(request : Request, webSocketListener : WebSocketListener) : WebSocket { + override fun getWebSocket(context: Context,request : Request, webSocketListener : WebSocketListener) : WebSocket { return webSocketGenerator(request, webSocketListener) } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt index 65a32ade..a5b70665 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ActMain.kt @@ -772,6 +772,7 @@ class ActMain : AppCompatActivity() if(resultCode == ActText.RESULT_SEARCH_MSP) { val text = data?.getStringExtra(Intent.EXTRA_TEXT) addColumn( + false, defaultInsertPosition, SavedAccount.na, Column.TYPE_SEARCH_MSP, @@ -779,7 +780,13 @@ class ActMain : AppCompatActivity() ) } else if(resultCode == ActText.RESULT_SEARCH_TS) { val text = data?.getStringExtra(Intent.EXTRA_TEXT) - addColumn(defaultInsertPosition, SavedAccount.na, Column.TYPE_SEARCH_TS, text ?: "") + addColumn( + false, + defaultInsertPosition, + SavedAccount.na, + Column.TYPE_SEARCH_TS, + text ?: "" + ) } } @@ -1516,8 +1523,23 @@ class ActMain : AppCompatActivity() val dataId = dataIdString.toLong(10) val account = SavedAccount.loadAccount(this@ActMain, dataId) if(account != null) { - val column = - addColumn(defaultInsertPosition, account, Column.TYPE_NOTIFICATIONS) + var column = app_state.column_list.firstOrNull { + it.column_type == Column.TYPE_NOTIFICATIONS + && account.acct == it.access_info.acct + && ! it.system_notification_not_related + } + if( column != null){ + val index = app_state.column_list.indexOf(column) + scrollToColumn(index) + }else { + column = addColumn( + true, + defaultInsertPosition, + account, + Column.TYPE_NOTIFICATIONS + ) + } + // 通知を読み直す if(! column.bInitialLoading) { column.startLoading() @@ -1693,12 +1715,12 @@ class ActMain : AppCompatActivity() // 適当にカラムを追加する val count = SavedAccount.count if(count > 1) { - addColumn(defaultInsertPosition, account, Column.TYPE_HOME) + addColumn(false,defaultInsertPosition, account, Column.TYPE_HOME) } else { - addColumn(defaultInsertPosition, account, Column.TYPE_HOME) - addColumn(defaultInsertPosition, account, Column.TYPE_NOTIFICATIONS) - addColumn(defaultInsertPosition, account, Column.TYPE_LOCAL) - addColumn(defaultInsertPosition, account, Column.TYPE_FEDERATE) + addColumn(false,defaultInsertPosition, account, Column.TYPE_HOME) + addColumn(false,defaultInsertPosition, account, Column.TYPE_NOTIFICATIONS) + addColumn(false,defaultInsertPosition, account, Column.TYPE_LOCAL) + addColumn(false,defaultInsertPosition, account, Column.TYPE_FEDERATE) } return true @@ -1839,20 +1861,41 @@ class ActMain : AppCompatActivity() ////////////////////////////////////////////////////////////// // カラム追加系 - fun addColumn(indexArg : Int, ai : SavedAccount, type : Int, vararg params : Any) : Column { - var index = indexArg - // 既に同じカラムがあればそこに移動する - for(column in app_state.column_list) { - if(column.isSameSpec(ai, type, params)) { - index = app_state.column_list.indexOf(column) - scrollToColumn(index) - return column + fun addColumn( + indexArg : Int, + ai : SavedAccount, + type : Int, + vararg params : Any + ) : Column { + return addColumn( + Pref.bpAllowColumnDuplication(pref), + indexArg, + ai, + type, + *params + ) + } + + fun addColumn( + allowColumnDuplication:Boolean, + indexArg : Int, + ai : SavedAccount, + type : Int, + vararg params : Any + ) : Column { + if( ! allowColumnDuplication) { + // 既に同じカラムがあればそこに移動する + for(column in app_state.column_list) { + if(column.isSameSpec(ai, type, params)) { + val indexColumn = app_state.column_list.indexOf(column) + scrollToColumn(indexColumn) + return column + } } } - // val col = Column(app_state, ai, this, type, *params) - index = addColumn(col, index) + val index = addColumn(col, indexArg) scrollToColumn(index) if(! col.bFirstInitialized) { col.startLoading() diff --git a/app/src/main/java/jp/juggler/subwaytooter/Column.kt b/app/src/main/java/jp/juggler/subwaytooter/Column.kt index ae36106f..d69100d0 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Column.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Column.kt @@ -97,6 +97,8 @@ class Column( private const val KEY_DONT_STREAMING = "dont_streaming" private const val KEY_DONT_AUTO_REFRESH = "dont_auto_refresh" private const val KEY_HIDE_MEDIA_DEFAULT = "hide_media_default" + private const val KEY_SYSTEM_NOTIFICATION_NOT_RELATED = "system_notification_not_related" + private const val KEY_ENABLE_SPEECH = "enable_speech" private const val KEY_REGEX_TEXT = "regex_text" @@ -269,6 +271,7 @@ class Column( internal var dont_streaming : Boolean = false internal var dont_auto_refresh : Boolean = false internal var hide_media_default : Boolean = false + internal var system_notification_not_related : Boolean = false var enable_speech : Boolean = false internal var regex_text : String = "" @@ -443,6 +446,8 @@ class Column( dont_streaming = src.optBoolean(KEY_DONT_STREAMING) dont_auto_refresh = src.optBoolean(KEY_DONT_AUTO_REFRESH) hide_media_default = src.optBoolean(KEY_HIDE_MEDIA_DEFAULT) + system_notification_not_related = src.optBoolean(KEY_SYSTEM_NOTIFICATION_NOT_RELATED) + enable_speech = src.optBoolean(KEY_ENABLE_SPEECH) regex_text = src.parseString(KEY_REGEX_TEXT) ?: "" @@ -494,6 +499,8 @@ class Column( dst.put(KEY_DONT_STREAMING, dont_streaming) dst.put(KEY_DONT_AUTO_REFRESH, dont_auto_refresh) dst.put(KEY_HIDE_MEDIA_DEFAULT, hide_media_default) + dst.put(KEY_SYSTEM_NOTIFICATION_NOT_RELATED, system_notification_not_related) + dst.put(KEY_ENABLE_SPEECH, enable_speech) dst.put(KEY_REGEX_TEXT, regex_text) @@ -607,10 +614,43 @@ class Column( if(bLong) context.getString(R.string.instance_information_of, instance_uri) else getColumnTypeName(context, column_type) + TYPE_NOTIFICATIONS -> + context.getString(R.string.notifications) + getNotificationTypeString() + + else -> getColumnTypeName(context, column_type) } } + private fun getNotificationTypeString() : String { + return if(! dont_show_reply && ! dont_show_follow && ! dont_show_boost && ! dont_show_favourite) { + "" + } else if(dont_show_reply && dont_show_follow && dont_show_boost && dont_show_favourite) { + "" + } else { + val sb = StringBuilder() + if(! dont_show_reply) { + if(sb.isNotEmpty()) sb.append(", ") + sb.append(context.getString(R.string.notification_type_mention)) + } + if(! dont_show_follow) { + if(sb.isNotEmpty()) sb.append(", ") + sb.append(context.getString(R.string.notification_type_follow)) + } + if(! dont_show_boost) { + if(sb.isNotEmpty()) sb.append(", ") + sb.append(context.getString(R.string.notification_type_boost)) + } + if(! dont_show_favourite) { + if(sb.isNotEmpty()) sb.append(", ") + sb.append(context.getString(R.string.notification_type_favourite)) + } + sb.insert(0, "(") + sb.append(")") + sb.toString() + } + } + internal fun dispose() { is_dispose.set(true) stopStreaming() @@ -1103,6 +1143,11 @@ class Column( return true } + if(dont_show_reply && TootNotification.TYPE_MENTION == item.type) { + log.d("isFiltered: mention notification filtered.") + return true + } + val status = item.status if(status != null) { if(status.checkMuted(muted_app, muted_word)) { @@ -3247,10 +3292,10 @@ class Column( } } - // カラム設定に「変身を表示しない」ボタンを含めるなら真 + // カラム設定に「返信を表示しない」ボタンを含めるなら真 fun canFilterReply() : Boolean { return when(column_type) { - TYPE_HOME, TYPE_PROFILE, TYPE_LIST_TL -> true + TYPE_HOME, TYPE_PROFILE, TYPE_LIST_TL, TYPE_NOTIFICATIONS -> true else -> false } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt index e04002a6..f179e75d 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ColumnViewHolder.kt @@ -103,6 +103,7 @@ class ColumnViewHolder( private val cbDontStreaming : CheckBox private val cbDontAutoRefresh : CheckBox private val cbHideMediaDefault : CheckBox + private val cbSystemNotificationNotRelated : CheckBox private val cbEnableSpeech : CheckBox private val llRegexFilter : View private val btnDeleteNotification : Button @@ -232,6 +233,7 @@ class ColumnViewHolder( cbDontStreaming = viewRoot.findViewById(R.id.cbDontStreaming) cbDontAutoRefresh = viewRoot.findViewById(R.id.cbDontAutoRefresh) cbHideMediaDefault = viewRoot.findViewById(R.id.cbHideMediaDefault) + cbSystemNotificationNotRelated = viewRoot.findViewById(R.id.cbSystemNotificationNotRelated) cbEnableSpeech = viewRoot.findViewById(R.id.cbEnableSpeech) etRegexFilter = viewRoot.findViewById(R.id.etRegexFilter) llRegexFilter = viewRoot.findViewById(R.id.llRegexFilter) @@ -261,6 +263,7 @@ class ColumnViewHolder( cbDontStreaming.setOnCheckedChangeListener(this) cbDontAutoRefresh.setOnCheckedChangeListener(this) cbHideMediaDefault.setOnCheckedChangeListener(this) + cbSystemNotificationNotRelated.setOnCheckedChangeListener(this) cbEnableSpeech.setOnCheckedChangeListener(this) // 入力の追跡 @@ -428,6 +431,7 @@ class ColumnViewHolder( cbDontStreaming.isChecked = column.dont_streaming cbDontAutoRefresh.isChecked = column.dont_auto_refresh cbHideMediaDefault.isChecked = column.hide_media_default + cbSystemNotificationNotRelated.isChecked = column.system_notification_not_related cbEnableSpeech.isChecked = column.enable_speech etRegexFilter.setText(column.regex_text) @@ -447,6 +451,7 @@ class ColumnViewHolder( vg(cbDontStreaming, column.canStreaming()) vg(cbDontAutoRefresh, column.canAutoRefresh()) vg(cbHideMediaDefault, column.canNSFWDefault()) + vg(cbSystemNotificationNotRelated,column.column_type == Column.TYPE_NOTIFICATIONS) vg(cbEnableSpeech, column.canSpeech()) vg(btnDeleteNotification, column.column_type == Column.TYPE_NOTIFICATIONS) @@ -744,7 +749,11 @@ class ColumnViewHolder( activity.app_state.saveColumnList() column.fireShowContent(reason = "HideMediaDefault in ColumnSetting", reset = true) } - + R.id.cbSystemNotificationNotRelated -> { + column.system_notification_not_related = isChecked + activity.app_state.saveColumnList() + } + R.id.cbEnableSpeech -> { column.enable_speech = isChecked activity.app_state.saveColumnList() diff --git a/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt b/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt index 11cd0951..ae4c1ba5 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/DlgContextMenu.kt @@ -369,11 +369,11 @@ internal class DlgContextMenu( } R.id.btnBoostedBy -> status?.let { - activity.addColumn(pos, access_info, Column.TYPE_BOOSTED_BY, it.id) + activity.addColumn(false,pos, access_info, Column.TYPE_BOOSTED_BY, it.id) } R.id.btnFavouritedBy -> status?.let { - activity.addColumn(pos, access_info, Column.TYPE_FAVOURITED_BY, it.id) + activity.addColumn(false,pos, access_info, Column.TYPE_FAVOURITED_BY, it.id) } R.id.btnFollow -> who?.let { who -> diff --git a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt index 2dd87a7a..d768b1e8 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/ItemViewHolder.kt @@ -890,7 +890,7 @@ internal class ItemViewHolder( activity.addColumn(pos, access_info, Column.TYPE_LIST_TL, item.id) } .addAction(activity.getString(R.string.list_member)) { - activity.addColumn(pos, access_info, Column.TYPE_LIST_MEMBER, item.id) + activity.addColumn(false,pos, access_info, Column.TYPE_LIST_MEMBER, item.id) } .addAction(activity.getString(R.string.rename)){ Action_List.rename(activity, access_info, item) diff --git a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt index 8a0ac76d..a72067f9 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Pref.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Pref.kt @@ -282,6 +282,12 @@ object Pref { R.id.swShareViewPool ) + val bpAllowColumnDuplication = BooleanPref( + "AllowColumnDuplication", + true, + R.id.swShareViewPool + ) + // int val ipBackButtonAction = IntPref("back_button_action", 0) diff --git a/app/src/main/java/jp/juggler/subwaytooter/action/Action_Instance.kt b/app/src/main/java/jp/juggler/subwaytooter/action/Action_Instance.kt index b470b8a9..800ab637 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/action/Action_Instance.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/action/Action_Instance.kt @@ -23,7 +23,7 @@ object Action_Instance { fun information( activity : ActMain, pos : Int, host : String ) { - activity.addColumn(pos, SavedAccount.na, Column.TYPE_INSTANCE_INFORMATION, host) + activity.addColumn(false,pos, SavedAccount.na, Column.TYPE_INSTANCE_INFORMATION, host) } // 指定タンスのローカルタイムラインを開く diff --git a/app/src/main/java/jp/juggler/subwaytooter/api/TootApiClient.kt b/app/src/main/java/jp/juggler/subwaytooter/api/TootApiClient.kt index 94c028bf..5f8b8185 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/api/TootApiClient.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/api/TootApiClient.kt @@ -19,7 +19,7 @@ import java.util.regex.Pattern class TootApiClient( internal val context : Context, - internal val httpClient : SimpleHttpClient = SimpleHttpClientImpl(App1.ok_http_client), + internal val httpClient : SimpleHttpClient = SimpleHttpClientImpl(context, App1.ok_http_client), internal val callback : TootApiCallback ) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/util/SimpleHttpClient.kt b/app/src/main/java/jp/juggler/subwaytooter/util/SimpleHttpClient.kt index b95eeb5f..793ac424 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/util/SimpleHttpClient.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/util/SimpleHttpClient.kt @@ -1,6 +1,9 @@ package jp.juggler.subwaytooter.util +import android.content.Context import okhttp3.* +import android.net.ConnectivityManager +import android.net.NetworkInfo // okhttpそのままだとモックしづらいので // リクエストを投げてレスポンスを得る部分をインタフェースにまとめる @@ -12,13 +15,33 @@ interface CurrentCallCallback { interface SimpleHttpClient { var currentCallCallback : CurrentCallCallback? fun getResponse(request : Request) : Response - fun getWebSocket(request : Request, webSocketListener : WebSocketListener) : WebSocket + fun getWebSocket( + request : Request, + webSocketListener : WebSocketListener + ) : WebSocket } -class SimpleHttpClientImpl(private val okHttpClient : OkHttpClient) : SimpleHttpClient { +class SimpleHttpClientImpl( + context : Context, + private val okHttpClient : OkHttpClient +) : SimpleHttpClient { + + companion object { + val log = LogCategory("SimpleHttpClientImpl") + var connectivityManager : ConnectivityManager? = null + } + + init { + if(connectivityManager == null) { + connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager + } + } + override var currentCallCallback : CurrentCallCallback? = null override fun getResponse(request : Request) : Response { + checkNetworkState() val call = okHttpClient.newCall(request) currentCallCallback?.onCallCreated(call) return call.execute() @@ -28,7 +51,33 @@ class SimpleHttpClientImpl(private val okHttpClient : OkHttpClient) : SimpleHttp request : Request, webSocketListener : WebSocketListener ) : WebSocket { + checkNetworkState() return okHttpClient.newWebSocket(request, webSocketListener) } + + private fun checkNetworkState() { + + val cm = connectivityManager + if(cm == null) { + log.d("missing ConnectivityManager") + } else { + val networkInfo = cm.activeNetworkInfo + ?: throw RuntimeException("missing ActiveNetwork") + + val state = networkInfo.state + val detailedState = networkInfo.detailedState + if(! networkInfo.isConnected) { + throw RuntimeException("network not ready. state=$state detail=$detailedState") + } + if(state == NetworkInfo.State.CONNECTED && detailedState == NetworkInfo.DetailedState.CONNECTED) { + // no logging + } else { + log.d("checkNetworkState state=$state detail=$detailedState") + } + } + + } + } + diff --git a/app/src/main/res/drawable-hdpi/media_bg_dark.png b/app/src/main/res/drawable-hdpi/media_bg_dark.png index 297a01d9c498b9afa1475292d5eae3ba48039e5e..f31625ae84e45182ad2b86b668b355e4b8a8cb73 100644 GIT binary patch delta 223 zcmZoUO_QmvAUQh^kMkwJu^g|2~-u7P=ofw7g5g_Vi9wt=OU mfkDILTt5^Yx%nxXX_Y`7I5d3Rcl8rc1B0ilpUXO@geCy#twQ?% delta 199 zcmbQq)W|f!soulW#WBR<^xI1ZIT;jqm=Cxa&l0v+b6ND2J=ZVcg_UiKrv#Nu{!y^D zD^?|N5ie7i%U^>E-qHmk2aj3!8WlLsKI(k-v$g6kHs4H3o|zl(o-blxU{Eb_jVMV; zEJ?LWE=mPb3`Pcq=DLPPx<*DJhNf0V7FLGF+6Iqt*t R{}ZTz!PC{xWt~$(6999`^21>;uY~8Ebma{Ode8uR`)y$ayRH|Cy8c~vxSdwa$T$Bo= z7>o=IEp!cxbPdcy42-ReEUZk-wGAw-3=A3`+vobB=*Z1a$xN%nt>fdqtDk@x7(8A5 KT-G@yGywom_BJ^H delta 158 zcmZo*y1_WXsb1dG#W6(Vd@@gxLqn-YjvAXx!V@n8rQ#+HqpTa=3=B^K7#mNP*igTe~DWM4fnh`9Y diff --git a/app/src/main/res/drawable-xhdpi/media_bg_dark.png b/app/src/main/res/drawable-xhdpi/media_bg_dark.png index e13cfcd93b2204520741f6ad415ee860846a5a99..4e389c71ccfaca3a28b0231aac6506b9b63126cb 100644 GIT binary patch delta 256 zcmbQjw2NtiQ$1&aM`SSr1Gg{;GcwGYBf-GHz+U3%>&pI!iJeDA-{kY72|%GpPZ!4! zkK=EzT;x1pz`+u*-qy-N{l&k@sqHN{SkLwUnG$f$|LIDF4)u@)+ZDMBk0eP*Nc`az z*v0R4Ayw+JPp-pEzk5Em3x9+^Fg0CKc6OzDP6azNb91HsLGGLWyv;|PPKg6;Q7v(e zC`m~yNwrEYN(E93Mh1o!x&}tN2Ie6K##TlaRwm}!29{O^1`UsM{ZKUI=BH$)RpQq0 Tao^QXKn)C@u6{1-oD!M3ji(`n#@noK)18g(w<$tw>HZ^uOx)`iV3^}}_?cvhK)|n!SY;0`P z&PTM)+`sYv(RJ+;xmSOP*JEC{|3>bCz&OL=kADxYW1JrS|KGv9!wNm^fxL^Q+)OV7 zGczoC#JhgdnG`1m1_sp<*NBpo#FA92&pI!iJeDA-{kY72|%G7PZ!6K zh{JEM8FDok2)JB~j1;hK{cb;}ltoc4aoGm0`qvLr%`$_gpP6#(?~VyuetMWWKtZ=d ztX|-ziCZrANb%0Ev~I}a=d)&B*<8Qu*N4}x_3NkIDciK~*`JkxMhFe^MccX8&XZnJ z3A9+X#5JNMC9x#cD!C{XNHG{07+UBW80i|AhZq=J8Ch7Fm}?tYS{WELJkIq)(U6;; bl9^VCTf@hFS9w1Hbuf6k`njxgN@xNAKjU6k delta 207 zcmX@hw2WzjQ+=+di(^Q{;kVZe`5F`iTrNg#H3|_sR$N(f-f>M1W4}R&$dmlPpN$qO z<;{$qGXJ{krAL$ZF*8BHES6hqwrC~2SoEgr!uIf+frUF3X~ue<)qC|beOYko9qCe& zwW3!OyBnZDt+7rto$tb??KwgW3=FCzt`Q|E6JPL2nd=%F=^7b@7@ArcSy&kwYa3Wv h85oG!iMvh~U=&xwE}fpd{wL5B22WQ%mvv4FO#re=Ofvug diff --git a/app/src/main/res/drawable-xxxhdpi/media_bg_dark.png b/app/src/main/res/drawable-xxxhdpi/media_bg_dark.png index ba1e9b926444738a796ccaf640f2d7c32b341339..4f239247b3334b538ab62d4aa99a5bed360de22a 100644 GIT binary patch delta 277 zcmcb|^o41HQ$1&aM`SSr1Gg{;GcwGYBf-GHz+U3%>&pI!iJeDA-{kY72|%IAo-U3d z8Ta1a*vQMQDByB2(qY<*Lw~0~e<8Fv@8JDOlP}+|cwp$Ea>e+*|I?WDs}FXiEcn8& ztbhUv)DuKK#l1eWg|>E<3KaNF5=e24ePQ!=-t5}vSJFQIobhH-K(pW5o$izQx<&nt zB{0;o-|hW&zRBUz+90!VVC~6@9HO@=NLR){an^LB{Ts5-PmLN delta 293 zcmeyubdPC*Q~gp;7srr{dv9-S$x> z$!Den{m?TBKf0r5MG%8(-Yv8Bo0o5zly&Q0{i>SRdsQ5E-Cv{S?XAExZKlwN-|?&{ z#xfibZ!|yAsSq9i4;B-JXpC>2OC7#SFv>lzyA8X1KcnpzoISQ#2? p8(3Ny7>L=4yP{~w%}>cpt3=iyhpHnzdHqk2<({s7F6*2UngF!!W_SPq diff --git a/app/src/main/res/layout/act_app_setting.xml b/app/src/main/res/layout/act_app_setting.xml index 7b4cad08..384dfc1c 100644 --- a/app/src/main/res/layout/act_app_setting.xml +++ b/app/src/main/res/layout/act_app_setting.xml @@ -207,6 +207,22 @@ + + + + + + + + + + - + Don\'t round corner of avatar icon (app restart required) Share view pool between columns Rename… + Allow column duplication + Not chosen when tapping system notification + mention + follow + boost + fav. - + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1147f391..2465eda6 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -890,5 +890,11 @@ ユーザ画像を角丸にしない(アプリ再起動が必要) カラム間でViewPoolを共有する 名前の変更… + カラムの重複を許容する + システム通知をタップした時に選ばれない + 返信 + フォロー + ブースト + お気に入り diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e8d6f01..79d71699 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -596,4 +596,10 @@ Don\'t round corner of avatar icon (app restart required) Share view pool between columns Rename… + Allow column duplication + Not chosen when tapping system notification + mention + follow + boost + fav. diff --git a/resizeLauncherIcon.pl b/resizeLauncherIcon.pl index bb620465..fd48f6a8 100644 --- a/resizeLauncherIcon.pl +++ b/resizeLauncherIcon.pl @@ -111,7 +111,7 @@ my $res_dir = "app/src/main/res"; #resize_scales( "_ArtWork/ic_list_tl_dark.png" ,$res_dir,"drawable","ic_list_tl_dark",0,32); #resize_scales( "_ArtWork/ic_list_member_dark.png" ,$res_dir,"drawable","ic_list_member_dark",0,32); -#resize_scales( "_ArtWork/media_bg_dark.png" ,$res_dir,"drawable","media_bg_dark",0,24); +resize_scales( "_ArtWork/media_bg_dark.png" ,$res_dir,"drawable","media_bg_dark",0,24); -resize_scales( "_ArtWork/v0.5.1/ic_launcher_foreground.png" ,$res_dir,"mipmap","ic_launcher_foreground",0,108); -resize_scales( "_ArtWork/v0.5.1/ic_launcher_background.png" ,$res_dir,"mipmap","ic_launcher_background",0,108); +#resize_scales( "_ArtWork/v0.5.1/ic_launcher_foreground.png" ,$res_dir,"mipmap","ic_launcher_foreground",0,108); +#resize_scales( "_ArtWork/v0.5.1/ic_launcher_background.png" ,$res_dir,"mipmap","ic_launcher_background",0,108);