メディアビューアの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
|
||||
private lateinit var mediaList: ArrayList<TootAttachment>
|
||||
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) {
|
||||
super.onSaveInstanceState(outState)
|
||||
|
||||
|
@ -291,11 +350,15 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
internal fun load(state: Bundle? = null) {
|
||||
|
||||
exoPlayer.stop()
|
||||
viewBinding.pbvImage.visibility = View.GONE
|
||||
viewBinding.exoView.visibility = View.GONE
|
||||
viewBinding.tvError.visibility = View.GONE
|
||||
viewBinding.svDescription.visibility = View.GONE
|
||||
viewBinding.tvStatus.visibility = View.GONE
|
||||
|
||||
// いったんすべて隠す
|
||||
viewBinding.run {
|
||||
pbvImage.gone()
|
||||
exoView.gone()
|
||||
tvError.gone()
|
||||
svDescription.gone()
|
||||
tvStatus.gone()
|
||||
}
|
||||
|
||||
if (idx < 0 || idx >= mediaList.size) {
|
||||
showError(getString(R.string.media_attachment_empty))
|
||||
|
@ -304,40 +367,40 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
val ta = mediaList[idx]
|
||||
val description = ta.description
|
||||
if (showDescription && description?.isNotEmpty() == true) {
|
||||
viewBinding.svDescription.visibility = View.VISIBLE
|
||||
viewBinding.svDescription.visible()
|
||||
viewBinding.tvDescription.text = description
|
||||
}
|
||||
|
||||
when (ta.type) {
|
||||
TootAttachmentType.Unknown,
|
||||
-> showError(getString(R.string.media_attachment_type_error, ta.type.id))
|
||||
|
||||
TootAttachmentType.Unknown ->
|
||||
showError(getString(R.string.media_attachment_type_error, ta.type.id))
|
||||
|
||||
TootAttachmentType.Image ->
|
||||
loadBitmap(ta)
|
||||
TootAttachmentType.Image,
|
||||
-> loadBitmap(ta)
|
||||
|
||||
TootAttachmentType.Video,
|
||||
TootAttachmentType.GIFV,
|
||||
TootAttachmentType.Audio,
|
||||
->
|
||||
loadVideo(ta, state)
|
||||
-> loadVideo(ta, state)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showError(message: String) {
|
||||
viewBinding.exoView.visibility = View.GONE
|
||||
viewBinding.pbvImage.visibility = View.GONE
|
||||
viewBinding.tvError.visibility = View.VISIBLE
|
||||
viewBinding.tvError.text = message
|
||||
viewBinding.run {
|
||||
exoView.gone()
|
||||
pbvImage.gone()
|
||||
tvError.visible().text = message
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private fun loadVideo(ta: TootAttachment, state: Bundle? = null) {
|
||||
|
||||
viewBinding.cbMute.vg(true)
|
||||
if (viewBinding.cbMute.isChecked && lastVolume.isFinite()) {
|
||||
viewBinding.cbMute.visible().run {
|
||||
if (isChecked && lastVolume.isFinite()) {
|
||||
exoPlayer.volume = 0f
|
||||
}
|
||||
}
|
||||
|
||||
val url = ta.getLargeUrl(appPref)
|
||||
if (url == null) {
|
||||
|
@ -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(
|
||||
options: BitmapFactory.Options,
|
||||
data: ByteArray,
|
||||
|
@ -561,7 +568,11 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
@SuppressLint("StaticFieldLeak")
|
||||
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)
|
||||
if (urlList.isEmpty()) {
|
||||
|
@ -569,12 +580,6 @@ class ActMediaViewer : AppCompatActivity(), View.OnClickListener {
|
|||
return
|
||||
}
|
||||
|
||||
viewBinding.tvStatus.visibility = View.VISIBLE
|
||||
viewBinding.tvStatus.text = null
|
||||
|
||||
viewBinding.pbvImage.visibility = View.VISIBLE
|
||||
viewBinding.pbvImage.setBitmap(null)
|
||||
|
||||
launchMain {
|
||||
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) {
|
||||
if (!checkPermission()) return
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package jp.juggler.util
|
|||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.ContextWrapper
|
||||
import android.content.SharedPreferences
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
|
@ -71,12 +70,25 @@ fun View.showKeyboard() {
|
|||
}
|
||||
|
||||
// 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? {
|
||||
this?.visibility = if (visible) View.VISIBLE else View.GONE
|
||||
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? =
|
||||
try {
|
||||
val parser = resources.getLayout(R.layout.generate_params)
|
||||
|
|
|
@ -111,7 +111,10 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="12dp"
|
||||
android:text="@string/mute" />
|
||||
android:text="@string/mute"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
/>
|
||||
|
||||
</com.google.android.flexbox.FlexboxLayout>
|
||||
</LinearLayout>
|
||||
|
|
Loading…
Reference in New Issue