/* * Nextcloud Talk application * * @author Marcel Hibbe * Copyright (C) 2021 Marcel Hibbe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.nextcloud.talk.activities import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem import android.view.View import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider import autodagger.AutoInjector import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.SimpleExoPlayer import com.google.android.exoplayer2.ui.StyledPlayerView import com.nextcloud.talk.BuildConfig import com.nextcloud.talk.R import com.nextcloud.talk.application.NextcloudTalkApplication import java.io.File @AutoInjector(NextcloudTalkApplication::class) class FullScreenMediaActivity : AppCompatActivity(), Player.EventListener { private lateinit var path: String private lateinit var playerView: StyledPlayerView private lateinit var player: SimpleExoPlayer override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.menu_preview, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return if (item.itemId == R.id.share) { val shareUri = FileProvider.getUriForFile( this, BuildConfig.APPLICATION_ID, File(path) ) val shareIntent: Intent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_STREAM, shareUri) type = "video/*" addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) } startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to))) true } else { super.onOptionsItemSelected(item) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val fileName = intent.getStringExtra("FILE_NAME") val isAudioOnly = intent.getBooleanExtra("AUDIO_ONLY", false) path = applicationContext.cacheDir.absolutePath + "/" + fileName setContentView(R.layout.activity_full_screen_media) setSupportActionBar(findViewById(R.id.mediaview_toolbar)) supportActionBar?.setDisplayShowTitleEnabled(false) playerView = findViewById(R.id.player_view) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) playerView.showController() if (isAudioOnly) { playerView.controllerShowTimeoutMs = 0 } playerView.setControllerVisibilityListener { v -> if (v != 0) { hideSystemUI() supportActionBar?.hide() } else { showSystemUI() supportActionBar?.show() } } } override fun onStart() { super.onStart() initializePlayer() val mediaItem: MediaItem = MediaItem.fromUri(path) player.setMediaItem(mediaItem) player.prepare() player.play() } override fun onStop() { super.onStop() releasePlayer() } private fun initializePlayer() { player = SimpleExoPlayer.Builder(applicationContext).build() playerView.player = player player.playWhenReady = true player.addListener(this) } private fun releasePlayer() { player.release() } private fun hideSystemUI() { window.decorView.systemUiVisibility = ( View.SYSTEM_UI_FLAG_IMMERSIVE or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN ) } private fun showSystemUI() { window.decorView.systemUiVisibility = ( View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ) } }