メディアビューア画面のステータスバーとナビゲーションバーの色は常に暗くする。Android 8未満では単に端末デフォルトの色になる

This commit is contained in:
tateisu 2019-10-08 04:39:56 +09:00
parent 0fcae5ab12
commit 3f9cbd3145
20 changed files with 107 additions and 79 deletions

View File

@ -38,7 +38,7 @@ class ActAbout : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
setContentView(R.layout.act_about)
App1.initEdgeToEdge(this)
@ -89,17 +89,17 @@ class ActAbout : AppCompatActivity() {
val margin_top = (0.5f + density * 8).toInt()
val padding = (0.5f + density * 8).toInt()
for( pair in contributors){
ll.addView(Button(this).apply{
for(pair in contributors) {
ll.addView(Button(this).apply {
val acct = pair.first
val works = pair.second
//
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply{
if( ll.childCount != 0 ) topMargin = margin_top
).apply {
if(ll.childCount != 0) topMargin = margin_top
}
//
setBackgroundResource(R.drawable.btn_bg_transparent)

View File

@ -163,7 +163,7 @@ class ActAccountSetting
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
this.pref = App1.pref
initUI()

View File

@ -44,7 +44,7 @@ class ActAppSetting : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
setContentView(R.layout.act_app_setting)
App1.initEdgeToEdge(this)

View File

@ -324,7 +324,7 @@ class ActAppSettingChild : AppCompatActivity()
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
pref = Pref.pref(this)
@ -412,15 +412,19 @@ class ActAppSettingChild : AppCompatActivity()
, getString(R.string.theme_dark)
)
val resizeList = ActPost.resizeConfigList.map{
when(it.type){
ResizeType.None->getString(R.string.dont_resize)
ResizeType.LongSide->getString(R.string.long_side_pixel, it.size)
ResizeType.SquarePixel->getString(R.string.resize_square_pixels, it.size*it.size,it.size)
val resizeList = ActPost.resizeConfigList.map {
when(it.type) {
ResizeType.None -> getString(R.string.dont_resize)
ResizeType.LongSide -> getString(R.string.long_side_pixel, it.size)
ResizeType.SquarePixel -> getString(
R.string.resize_square_pixels,
it.size * it.size,
it.size
)
}
}.toTypedArray()
spResizeImage = initSpinner(R.id.spResizeImage ,*resizeList )
spResizeImage = initSpinner(R.id.spResizeImage, *resizeList)
spRefreshAfterToot = initSpinner(
R.id.spRefreshAfterToot
@ -566,7 +570,7 @@ class ActAppSettingChild : AppCompatActivity()
etMovieSizeMax = findViewById(R.id.etMovieSizeMax)
etMovieSizeMax?.addTextChangedListener(this)
etMediaSizeMaxPixelfed= findViewById(R.id.etMediaSizeMaxPixelfed)
etMediaSizeMaxPixelfed = findViewById(R.id.etMediaSizeMaxPixelfed)
etMediaSizeMaxPixelfed?.addTextChangedListener(this)
etRoundRatio = findViewById(R.id.etRoundRatio)
@ -648,9 +652,7 @@ class ActAppSettingChild : AppCompatActivity()
}
private fun initSpinner(@IdRes viewId : Int,vararg captions : String) : Spinner? =
private fun initSpinner(@IdRes viewId : Int, vararg captions : String) : Spinner? =
findViewById<Spinner>(viewId)?.apply {
adapter = ArrayAdapter(
this@ActAppSettingChild,

View File

@ -90,7 +90,7 @@ class ActColumnCustomize : AppCompatActivity(), View.OnClickListener, ColorPicke
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
app_state = App1.getAppState(this)
@ -245,7 +245,8 @@ class ActColumnCustomize : AppCompatActivity(), View.OnClickListener, ColorPicke
override fun background(client : TootApiClient) : TootApiResult? {
try {
val backgroundDir = Column.getBackgroundImageDir(this@ActColumnCustomize)
val file = File(backgroundDir, "${column.column_id}:${System.currentTimeMillis()}")
val file =
File(backgroundDir, "${column.column_id}:${System.currentTimeMillis()}")
val fileUri = Uri.fromFile(file)
client.publishApiProgress("loading image from ${uriArg}")

View File

@ -47,7 +47,7 @@ class ActColumnList : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
if(savedInstanceState != null) {

View File

@ -31,7 +31,7 @@ class ActFavMute : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
loadData()
}
@ -86,13 +86,16 @@ class ActFavMute : AppCompatActivity() {
// mRefreshLayout.setEnabled( false );
}
override fun onItemSwipeEnded(item : ListSwipeItem?, swipedDirection : ListSwipeItem.SwipeDirection?) {
override fun onItemSwipeEnded(
item : ListSwipeItem?,
swipedDirection : ListSwipeItem.SwipeDirection?
) {
// 操作完了でリフレッシュ許可
// mRefreshLayout.setEnabled( USE_SWIPE_REFRESH );
// 左にスワイプした(右端に青が見えた) なら要素を削除する
if(swipedDirection == ListSwipeItem.SwipeDirection.LEFT) {
val o = item ?.tag
val o = item?.tag
if(o is MyItem) {
FavMute.delete(o.name)
listAdapter.removeItem(listAdapter.getPositionForItem(o))
@ -127,7 +130,8 @@ class ActFavMute : AppCompatActivity() {
internal class MyItem(val id : Long, val name : String)
// リスト要素のViewHolder
internal class MyViewHolder(viewRoot : View) : DragItemAdapter.ViewHolder(viewRoot, R.id.ivDragHandle, false) {
internal class MyViewHolder(viewRoot : View) :
DragItemAdapter.ViewHolder(viewRoot, R.id.ivDragHandle, false) {
val tvName : TextView
@ -160,10 +164,12 @@ class ActFavMute : AppCompatActivity() {
}
// ドラッグ操作中のデータ
private inner class MyDragItem internal constructor(context : Context, layoutId : Int) : DragItem(context, layoutId) {
private inner class MyDragItem internal constructor(context : Context, layoutId : Int) :
DragItem(context, layoutId) {
override fun onBindDragView(clickedView : View, dragView : View) {
dragView.findViewById<TextView>(R.id.tvName).text = clickedView.findViewById<TextView>(R.id.tvName).text
dragView.findViewById<TextView>(R.id.tvName).text =
clickedView.findViewById<TextView>(R.id.tvName).text
dragView.findViewById<View>(R.id.item_layout).setBackgroundColor(
getAttributeColor(this@ActFavMute, R.attr.list_item_bg_pressed_dragged)
@ -171,7 +177,8 @@ class ActFavMute : AppCompatActivity() {
}
}
private inner class MyListAdapter internal constructor() : DragItemAdapter<MyItem, MyViewHolder>() {
private inner class MyListAdapter internal constructor() :
DragItemAdapter<MyItem, MyViewHolder>() {
init {
setHasStableIds(true)

View File

@ -70,7 +70,7 @@ class ActHighlightWordEdit
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
item = HighlightWord(

View File

@ -44,7 +44,7 @@ class ActHighlightWordList : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
loadData()
}
@ -265,7 +265,7 @@ class ActHighlightWordList : AppCompatActivity(), View.OnClickListener {
} catch(ex : Throwable) {
throw RuntimeException("can't load data", ex)
}
else -> super.onActivityResult(requestCode, resultCode, data)
}
}

View File

@ -32,12 +32,12 @@ class ActKeywordFilter
fun open(
activity : Activity,
ai : SavedAccount,
filter_id : EntityId? =null,
filter_id : EntityId? = null,
initial_phrase : String? = null
) {
val intent = Intent(activity, ActKeywordFilter::class.java)
intent.putExtra(EXTRA_ACCOUNT_DB_ID, ai.db_id)
filter_id?.putTo(intent,EXTRA_FILTER_ID)
filter_id?.putTo(intent, EXTRA_FILTER_ID)
if(initial_phrase != null) intent.putExtra(EXTRA_INITIAL_PHRASE, initial_phrase)
activity.startActivity(intent)
}
@ -80,12 +80,12 @@ class ActKeywordFilter
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
val intent = this.intent
// filter ID の有無はUIに影響するのでinitUIより先に初期化する
this.filter_id = EntityId.from(intent,EXTRA_FILTER_ID)
this.filter_id = EntityId.from(intent, EXTRA_FILTER_ID)
val a = SavedAccount.loadAccount(this, intent.getLongExtra(EXTRA_ACCOUNT_DB_ID, - 1L))
if(a == null) {
@ -97,11 +97,11 @@ class ActKeywordFilter
initUI()
if(savedInstanceState == null) {
if(filter_id != null ) {
if(filter_id != null) {
startLoading()
} else {
spExpire.setSelection(1)
etPhrase.setText( intent.getStringExtra(EXTRA_INITIAL_PHRASE) ?: "" )
etPhrase.setText(intent.getStringExtra(EXTRA_INITIAL_PHRASE) ?: "")
}
} else {
val iv = savedInstanceState.getInt(STATE_EXPIRE_SPINNER, - 1)
@ -116,13 +116,13 @@ class ActKeywordFilter
super.onSaveInstanceState(outState)
if(! loading) {
outState.putInt(STATE_EXPIRE_SPINNER, spExpire.selectedItemPosition)
outState.putLong(STATE_EXPIRE_AT,filter_expire)
outState.putLong(STATE_EXPIRE_AT, filter_expire)
}
}
private fun initUI() {
title =
getString(if(filter_id ==null ) R.string.keyword_filter_new else R.string.keyword_filter_edit)
getString(if(filter_id == null) R.string.keyword_filter_new else R.string.keyword_filter_edit)
this.density = resources.displayMetrics.density
setContentView(R.layout.act_keyword_filter)
@ -245,19 +245,20 @@ class ActKeywordFilter
}
when(seconds) {
// dont change
- 1 -> {}
// unlimited
0 -> if( filter_expire <= 0L ) {
// dont change
- 1 -> {
}
// unlimited
0 -> if(filter_expire <= 0L) {
// already unlimited. don't change.
} else {
// FIXME: currently there is no way to remove expires from existing filter.
put("expires_in", Int.MAX_VALUE )
put("expires_in", Int.MAX_VALUE)
}
// set seconds
// set seconds
else -> put("expires_in", seconds)
}

View File

@ -393,7 +393,7 @@ class ActMain : AppCompatActivity()
log.d("onCreate")
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
App1.setActivityTheme(this, true)
App1.setActivityTheme(this, noActionBar = true)
handler = Handler()
app_state = App1.getAppState(this)

View File

@ -188,7 +188,7 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
App1.setActivityTheme(this, true, R.style.AppTheme_Dark_NoActionBar)
App1.setActivityTheme(this, noActionBar = true, forceDark = true)
val intent = intent

View File

@ -28,7 +28,7 @@ class ActMutedApp : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
loadData()
}

View File

@ -27,7 +27,7 @@ class ActMutedPseudoAccount : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
loadData()
}
@ -105,7 +105,7 @@ class ActMutedPseudoAccount : AppCompatActivity() {
val tmp_list = ArrayList<MyItem>()
try {
UserRelation.createCursorPseudo().use{ cursor->
UserRelation.createCursorPseudo().use { cursor ->
val idx_id = cursor.getColumnIndex(UserRelation.COL_ID)
val idx_name = cursor.getColumnIndex(UserRelation.COL_WHO_ID)
while(cursor.moveToNext()) {

View File

@ -28,7 +28,7 @@ class ActMutedWord : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
initUI()
loadData()
}
@ -83,13 +83,16 @@ class ActMutedWord : AppCompatActivity() {
// mRefreshLayout.setEnabled( false );
}
override fun onItemSwipeEnded(item : ListSwipeItem?, swipedDirection : ListSwipeItem.SwipeDirection?) {
override fun onItemSwipeEnded(
item : ListSwipeItem?,
swipedDirection : ListSwipeItem.SwipeDirection?
) {
// 操作完了でリフレッシュ許可
// mRefreshLayout.setEnabled( USE_SWIPE_REFRESH );
// 左にスワイプした(右端に青が見えた) なら要素を削除する
if(swipedDirection == ListSwipeItem.SwipeDirection.LEFT) {
val o = item ?.tag
val o = item?.tag
if(o is MyItem) {
MutedWord.delete(o.name)
listAdapter.removeItem(listAdapter.getPositionForItem(o))
@ -124,7 +127,8 @@ class ActMutedWord : AppCompatActivity() {
internal class MyItem(val id : Long, val name : String)
// リスト要素のViewHolder
internal class MyViewHolder(viewRoot : View) : DragItemAdapter.ViewHolder(viewRoot, R.id.ivDragHandle, false) {
internal class MyViewHolder(viewRoot : View) :
DragItemAdapter.ViewHolder(viewRoot, R.id.ivDragHandle, false) {
val tvName : TextView
@ -157,10 +161,12 @@ class ActMutedWord : AppCompatActivity() {
}
// ドラッグ操作中のデータ
private inner class MyDragItem internal constructor(context : Context, layoutId : Int) : DragItem(context, layoutId) {
private inner class MyDragItem internal constructor(context : Context, layoutId : Int) :
DragItem(context, layoutId) {
override fun onBindDragView(clickedView : View, dragView : View) {
dragView.findViewById<TextView>(R.id.tvName).text = clickedView.findViewById<TextView>(R.id.tvName).text
dragView.findViewById<TextView>(R.id.tvName).text =
clickedView.findViewById<TextView>(R.id.tvName).text
dragView.findViewById<View>(R.id.item_layout).setBackgroundColor(
getAttributeColor(this@ActMutedWord, R.attr.list_item_bg_pressed_dragged)
@ -168,7 +174,8 @@ class ActMutedWord : AppCompatActivity() {
}
}
private inner class MyListAdapter internal constructor() : DragItemAdapter<MyItem, MyViewHolder>() {
private inner class MyListAdapter internal constructor() :
DragItemAdapter<MyItem, MyViewHolder>() {
init {
setHasStableIds(true)

View File

@ -70,10 +70,10 @@ class ActNickname : AppCompatActivity(), View.OnClickListener, ColorPickerDialog
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
val intent = intent
this.acct = intent.getStringExtra(EXTRA_ACCT)!!
this.acct = intent.getStringExtra(EXTRA_ACCT) !!
this.show_notification_sound = intent.getBooleanExtra(EXTRA_SHOW_NOTIFICATION_SOUND, false)
initUI()

View File

@ -13,7 +13,7 @@ class ActOSSLicense : AppCompatActivity() {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, true)
App1.setActivityTheme(this, noActionBar = true)
setContentView(R.layout.act_oss_license)
App1.initEdgeToEdge(this)

View File

@ -590,7 +590,7 @@ class ActPost : AppCompatActivity(),
var sv : String?
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, true)
App1.setActivityTheme(this, noActionBar = true)
app_state = App1.getAppState(this)
pref = app_state.pref

View File

@ -75,7 +75,7 @@ class ActText : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState : Bundle?) {
super.onCreate(savedInstanceState)
App1.setActivityTheme(this, false)
App1.setActivityTheme(this)
val intent = intent
@ -86,7 +86,7 @@ class ActText : AppCompatActivity(), View.OnClickListener {
if(savedInstanceState == null) {
val sv = intent.getStringExtra(EXTRA_TEXT) ?: ""
val content_start = intent.getIntExtra(EXTRA_CONTENT_START, 0)
val content_end = intent.getIntExtra(EXTRA_CONTENT_END, sv.length )
val content_end = intent.getIntExtra(EXTRA_CONTENT_END, sv.length)
etText.setText(sv)
// Android 9 以降ではフォーカスがないとsetSelectionできない

View File

@ -482,21 +482,22 @@ class App1 : Application() {
fun setActivityTheme(
activity : Activity,
bNoActionBar : Boolean,
forceThemeId : Int? = null
noActionBar : Boolean = false,
forceDark :Boolean = false
) {
prepare(activity.applicationContext)
val theme_idx = Pref.ipUiTheme(pref)
activity.setTheme(
forceThemeId ?: when(theme_idx) {
1 -> if(bNoActionBar) R.style.AppTheme_Dark_NoActionBar else R.style.AppTheme_Dark
else -> if(bNoActionBar) R.style.AppTheme_Light_NoActionBar else R.style.AppTheme_Light
if( forceDark || theme_idx ==1){
if(noActionBar) R.style.AppTheme_Dark_NoActionBar else R.style.AppTheme_Dark
}else{
if(noActionBar) R.style.AppTheme_Light_NoActionBar else R.style.AppTheme_Light
}
)
setStatusBarColor(activity)
setStatusBarColor(activity,forceDark=forceDark)
}
internal val CACHE_CONTROL = CacheControl.Builder()
@ -680,18 +681,23 @@ class App1 : Application() {
)
}
fun setStatusBarColor(activity : Activity) {
fun setStatusBarColor(activity : Activity,forceDark:Boolean=false ) {
activity.window?.apply {
// 古い端末ではナビゲーションバーのアイコン色を設定できないため
// メディアビューア画面ではステータスバーやナビゲーションバーの色を設定しない…
if( forceDark && Build.VERSION.SDK_INT < 26 ) return
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
var c = Pref.ipStatusBarColor(pref).notZero() ?: getAttributeColor(
activity,
R.attr.colorPrimaryDark
)
var c = when {
forceDark -> Color.BLACK
else -> Pref.ipStatusBarColor(pref).notZero()
?: getAttributeColor(activity,R.attr.colorPrimaryDark)
}
statusBarColor = c or Color.BLACK
if(Build.VERSION.SDK_INT >= 23) {
@ -705,7 +711,11 @@ class App1 : Application() {
}
}
c = Pref.ipNavigationBarColor(pref)
c = when {
forceDark -> Color.BLACK
else -> Pref.ipNavigationBarColor(pref)
}
if(c != 0) {
navigationBarColor = c or Color.BLACK