メディアビューアのcbMuteを静止画の場合はgoneにする
This commit is contained in:
parent
8cec86b2ef
commit
dac4ed79c2
|
@ -89,6 +89,8 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DownloadHistory(val time: Long, val url: String)
|
||||||
|
|
||||||
internal var idx: Int = 0
|
internal var idx: Int = 0
|
||||||
private lateinit var mediaList: ArrayList<TootAttachment>
|
private lateinit var mediaList: ArrayList<TootAttachment>
|
||||||
private lateinit var serviceType: ServiceType
|
private lateinit var serviceType: ServiceType
|
||||||
|
@ -155,6 +157,63 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private val mediaSourceEventListener = object : MediaSourceEventListener {
|
||||||
|
override fun onLoadStarted(
|
||||||
|
windowIndex: Int,
|
||||||
|
mediaPeriodId: MediaSource.MediaPeriodId?,
|
||||||
|
loadEventInfo: LoadEventInfo,
|
||||||
|
mediaLoadData: MediaLoadData,
|
||||||
|
) {
|
||||||
|
log.d("onLoadStarted")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDownstreamFormatChanged(
|
||||||
|
windowIndex: Int,
|
||||||
|
mediaPeriodId: MediaSource.MediaPeriodId?,
|
||||||
|
mediaLoadData: MediaLoadData,
|
||||||
|
) {
|
||||||
|
log.d("onDownstreamFormatChanged")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUpstreamDiscarded(
|
||||||
|
windowIndex: Int,
|
||||||
|
mediaPeriodId: MediaSource.MediaPeriodId,
|
||||||
|
mediaLoadData: MediaLoadData,
|
||||||
|
) {
|
||||||
|
log.d("onUpstreamDiscarded")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadCompleted(
|
||||||
|
windowIndex: Int,
|
||||||
|
mediaPeriodId: MediaSource.MediaPeriodId?,
|
||||||
|
loadEventInfo: LoadEventInfo,
|
||||||
|
mediaLoadData: MediaLoadData,
|
||||||
|
) {
|
||||||
|
log.d("onLoadCompleted")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadCanceled(
|
||||||
|
windowIndex: Int,
|
||||||
|
mediaPeriodId: MediaSource.MediaPeriodId?,
|
||||||
|
loadEventInfo: LoadEventInfo,
|
||||||
|
mediaLoadData: MediaLoadData,
|
||||||
|
) {
|
||||||
|
log.d("onLoadCanceled")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadError(
|
||||||
|
windowIndex: Int,
|
||||||
|
mediaPeriodId: MediaSource.MediaPeriodId?,
|
||||||
|
loadEventInfo: LoadEventInfo,
|
||||||
|
mediaLoadData: MediaLoadData,
|
||||||
|
error: IOException,
|
||||||
|
wasCanceled: Boolean,
|
||||||
|
) {
|
||||||
|
showError(error.withCaption("load error."))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
super.onSaveInstanceState(outState)
|
super.onSaveInstanceState(outState)
|
||||||
|
|
||||||
|
@ -291,11 +350,15 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
internal fun load(state: Bundle? = null) {
|
internal fun load(state: Bundle? = null) {
|
||||||
|
|
||||||
exoPlayer.stop()
|
exoPlayer.stop()
|
||||||
viewBinding.pbvImage.visibility = View.GONE
|
|
||||||
viewBinding.exoView.visibility = View.GONE
|
// いったんすべて隠す
|
||||||
viewBinding.tvError.visibility = View.GONE
|
viewBinding.run {
|
||||||
viewBinding.svDescription.visibility = View.GONE
|
pbvImage.gone()
|
||||||
viewBinding.tvStatus.visibility = View.GONE
|
exoView.gone()
|
||||||
|
tvError.gone()
|
||||||
|
svDescription.gone()
|
||||||
|
tvStatus.gone()
|
||||||
|
}
|
||||||
|
|
||||||
if (idx < 0 || idx >= mediaList.size) {
|
if (idx < 0 || idx >= mediaList.size) {
|
||||||
showError(getString(R.string.media_attachment_empty))
|
showError(getString(R.string.media_attachment_empty))
|
||||||
|
@ -304,39 +367,39 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
val ta = mediaList[idx]
|
val ta = mediaList[idx]
|
||||||
val description = ta.description
|
val description = ta.description
|
||||||
if (showDescription && description?.isNotEmpty() == true) {
|
if (showDescription && description?.isNotEmpty() == true) {
|
||||||
viewBinding.svDescription.visibility = View.VISIBLE
|
viewBinding.svDescription.visible()
|
||||||
viewBinding.tvDescription.text = description
|
viewBinding.tvDescription.text = description
|
||||||
}
|
}
|
||||||
|
|
||||||
when (ta.type) {
|
when (ta.type) {
|
||||||
|
TootAttachmentType.Unknown,
|
||||||
|
-> showError(getString(R.string.media_attachment_type_error, ta.type.id))
|
||||||
|
|
||||||
TootAttachmentType.Unknown ->
|
TootAttachmentType.Image,
|
||||||
showError(getString(R.string.media_attachment_type_error, ta.type.id))
|
-> loadBitmap(ta)
|
||||||
|
|
||||||
TootAttachmentType.Image ->
|
|
||||||
loadBitmap(ta)
|
|
||||||
|
|
||||||
TootAttachmentType.Video,
|
TootAttachmentType.Video,
|
||||||
TootAttachmentType.GIFV,
|
TootAttachmentType.GIFV,
|
||||||
TootAttachmentType.Audio,
|
TootAttachmentType.Audio,
|
||||||
->
|
-> loadVideo(ta, state)
|
||||||
loadVideo(ta, state)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showError(message: String) {
|
private fun showError(message: String) {
|
||||||
viewBinding.exoView.visibility = View.GONE
|
viewBinding.run {
|
||||||
viewBinding.pbvImage.visibility = View.GONE
|
exoView.gone()
|
||||||
viewBinding.tvError.visibility = View.VISIBLE
|
pbvImage.gone()
|
||||||
viewBinding.tvError.text = message
|
tvError.visible().text = message
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private fun loadVideo(ta: TootAttachment, state: Bundle? = null) {
|
private fun loadVideo(ta: TootAttachment, state: Bundle? = null) {
|
||||||
|
|
||||||
viewBinding.cbMute.vg(true)
|
viewBinding.cbMute.visible().run {
|
||||||
if (viewBinding.cbMute.isChecked && lastVolume.isFinite()) {
|
if (isChecked && lastVolume.isFinite()) {
|
||||||
exoPlayer.volume = 0f
|
exoPlayer.volume = 0f
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val url = ta.getLargeUrl(appPref)
|
val url = ta.getLargeUrl(appPref)
|
||||||
|
@ -369,62 +432,6 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mediaSourceEventListener = object : MediaSourceEventListener {
|
|
||||||
override fun onLoadStarted(
|
|
||||||
windowIndex: Int,
|
|
||||||
mediaPeriodId: MediaSource.MediaPeriodId?,
|
|
||||||
loadEventInfo: LoadEventInfo,
|
|
||||||
mediaLoadData: MediaLoadData,
|
|
||||||
) {
|
|
||||||
log.d("onLoadStarted")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDownstreamFormatChanged(
|
|
||||||
windowIndex: Int,
|
|
||||||
mediaPeriodId: MediaSource.MediaPeriodId?,
|
|
||||||
mediaLoadData: MediaLoadData,
|
|
||||||
) {
|
|
||||||
log.d("onDownstreamFormatChanged")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUpstreamDiscarded(
|
|
||||||
windowIndex: Int,
|
|
||||||
mediaPeriodId: MediaSource.MediaPeriodId,
|
|
||||||
mediaLoadData: MediaLoadData,
|
|
||||||
) {
|
|
||||||
log.d("onUpstreamDiscarded")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadCompleted(
|
|
||||||
windowIndex: Int,
|
|
||||||
mediaPeriodId: MediaSource.MediaPeriodId?,
|
|
||||||
loadEventInfo: LoadEventInfo,
|
|
||||||
mediaLoadData: MediaLoadData,
|
|
||||||
) {
|
|
||||||
log.d("onLoadCompleted")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadCanceled(
|
|
||||||
windowIndex: Int,
|
|
||||||
mediaPeriodId: MediaSource.MediaPeriodId?,
|
|
||||||
loadEventInfo: LoadEventInfo,
|
|
||||||
mediaLoadData: MediaLoadData,
|
|
||||||
) {
|
|
||||||
log.d("onLoadCanceled")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadError(
|
|
||||||
windowIndex: Int,
|
|
||||||
mediaPeriodId: MediaSource.MediaPeriodId?,
|
|
||||||
loadEventInfo: LoadEventInfo,
|
|
||||||
mediaLoadData: MediaLoadData,
|
|
||||||
error: IOException,
|
|
||||||
wasCanceled: Boolean,
|
|
||||||
) {
|
|
||||||
showError(error.withCaption("load error."))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun decodeBitmap(
|
private fun decodeBitmap(
|
||||||
options: BitmapFactory.Options,
|
options: BitmapFactory.Options,
|
||||||
data: ByteArray,
|
data: ByteArray,
|
||||||
|
@ -561,7 +568,11 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private fun loadBitmap(ta: TootAttachment) {
|
private fun loadBitmap(ta: TootAttachment) {
|
||||||
|
|
||||||
viewBinding.cbMute.visibility = View.INVISIBLE
|
viewBinding.run {
|
||||||
|
cbMute.gone()
|
||||||
|
tvStatus.visible().text = null
|
||||||
|
pbvImage.visible().setBitmap(null)
|
||||||
|
}
|
||||||
|
|
||||||
val urlList = ta.getLargeUrlList(appPref)
|
val urlList = ta.getLargeUrlList(appPref)
|
||||||
if (urlList.isEmpty()) {
|
if (urlList.isEmpty()) {
|
||||||
|
@ -569,12 +580,6 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
viewBinding.tvStatus.visibility = View.VISIBLE
|
|
||||||
viewBinding.tvStatus.text = null
|
|
||||||
|
|
||||||
viewBinding.pbvImage.visibility = View.VISIBLE
|
|
||||||
viewBinding.pbvImage.setBitmap(null)
|
|
||||||
|
|
||||||
launchMain {
|
launchMain {
|
||||||
val options = BitmapFactory.Options()
|
val options = BitmapFactory.Options()
|
||||||
|
|
||||||
|
@ -620,8 +625,6 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DownloadHistory(val time: Long, val url: String)
|
|
||||||
|
|
||||||
private fun download(ta: TootAttachmentLike) {
|
private fun download(ta: TootAttachmentLike) {
|
||||||
if (!checkPermission()) return
|
if (!checkPermission()) return
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ package jp.juggler.util
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.ContextWrapper
|
import android.content.ContextWrapper
|
||||||
import android.content.SharedPreferences
|
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
@ -71,12 +70,25 @@ fun View.showKeyboard() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// set visibility VISIBLE or GONE
|
// set visibility VISIBLE or GONE
|
||||||
// return true if visible
|
// return this or null
|
||||||
|
// レシーバがnullableなのはplatform typeによるnull例外を避ける目的
|
||||||
fun <T : View> T?.vg(visible: Boolean): T? {
|
fun <T : View> T?.vg(visible: Boolean): T? {
|
||||||
this?.visibility = if (visible) View.VISIBLE else View.GONE
|
this?.visibility = if (visible) View.VISIBLE else View.GONE
|
||||||
return if (visible) this else null
|
return if (visible) this else null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set visibility VISIBLE or INVISIBLE
|
||||||
|
// return this or null
|
||||||
|
// レシーバがnullableなのはplatform typeによるnull例外を避ける目的
|
||||||
|
fun <T : View> T?.visibleOrInvisible(visible: Boolean): T? {
|
||||||
|
this?.visibility = if (visible) View.VISIBLE else View.INVISIBLE
|
||||||
|
return if (visible) this else null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T : View> T.visible(): T = apply { visibility = View.VISIBLE }
|
||||||
|
fun <T : View> T.invisible(): T = apply { visibility = View.INVISIBLE }
|
||||||
|
fun <T : View> T.gone(): T = apply { visibility = View.GONE }
|
||||||
|
|
||||||
fun ViewGroup.generateLayoutParamsEx(): ViewGroup.LayoutParams? =
|
fun ViewGroup.generateLayoutParamsEx(): ViewGroup.LayoutParams? =
|
||||||
try {
|
try {
|
||||||
val parser = resources.getLayout(R.layout.generate_params)
|
val parser = resources.getLayout(R.layout.generate_params)
|
||||||
|
@ -274,8 +286,8 @@ private fun AppCompatActivity.setNavigationBarColorCompat(@ColorInt c: Int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var TextView.textOrGone :CharSequence?
|
var TextView.textOrGone: CharSequence?
|
||||||
get() = text
|
get() = text
|
||||||
set(value){
|
set(value) {
|
||||||
vg(value?.isNotEmpty() ==true)?.text = value
|
vg(value?.isNotEmpty() == true)?.text = value
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,10 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="48dp"
|
android:layout_height="48dp"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:text="@string/mute" />
|
android:text="@string/mute"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible"
|
||||||
|
/>
|
||||||
|
|
||||||
</com.google.android.flexbox.FlexboxLayout>
|
</com.google.android.flexbox.FlexboxLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
Loading…
Reference in New Issue