Skip to content

Commit

Permalink
Add toggle function
Browse files Browse the repository at this point in the history
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
  • Loading branch information
tobiasKaminsky authored and backportbot[bot] committed Nov 20, 2020
1 parent 44ae1bf commit b9ee062
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
41 changes: 37 additions & 4 deletions src/main/java/com/nextcloud/client/media/PlayerService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.ui.notifications.NotificationUtils
import com.owncloud.android.utils.ThemeUtils
import dagger.android.AndroidInjection
import java.util.Locale
import javax.inject.Inject

class PlayerService : Service() {
Expand All @@ -46,6 +47,7 @@ class PlayerService : Service() {
const val EXTRA_START_POSITION_MS = "START_POSITION_MS"
const val ACTION_PLAY = "PLAY"
const val ACTION_STOP = "STOP"
const val ACTION_TOGGLE = "TOGGLE"
const val ACTION_STOP_FILE = "STOP_FILE"
}

Expand Down Expand Up @@ -73,7 +75,7 @@ class PlayerService : Service() {
}

override fun onStop() {
stopForeground(true)
stopServiceAndRemoveNotification(null)
}

override fun onError(error: PlayerError) {
Expand All @@ -96,10 +98,20 @@ class PlayerService : Service() {
player = Player(applicationContext, clientFactory, playerListener, audioManager)
notificationBuilder = NotificationCompat.Builder(this)
notificationBuilder.color = ThemeUtils.primaryColor(this)

val stop = Intent(this, PlayerService::class.java)
stop.action = ACTION_STOP
val pendingStop = PendingIntent.getService(this, 0, stop, 0)
notificationBuilder.addAction(0, "STOP", pendingStop)
notificationBuilder.addAction(0, getString(R.string.player_stop).toUpperCase(Locale.getDefault()), pendingStop)

val toggle = Intent(this, PlayerService::class.java)
toggle.action = ACTION_TOGGLE
val pendingToggle = PendingIntent.getService(this, 0, toggle, 0)
notificationBuilder.addAction(
0,
getString(R.string.player_toggle).toUpperCase(Locale.getDefault()),
pendingToggle
)
}

override fun onBind(intent: Intent?): IBinder? {
Expand All @@ -111,10 +123,19 @@ class PlayerService : Service() {
ACTION_PLAY -> onActionPlay(intent)
ACTION_STOP -> onActionStop()
ACTION_STOP_FILE -> onActionStopFile(intent.extras)
ACTION_TOGGLE -> onActionToggle()
}
return START_NOT_STICKY
}

private fun onActionToggle() {
if (player.isPlaying) {
player.pause()
} else {
player.start()
}
}

private fun onActionPlay(intent: Intent) {
val user: User = intent.getParcelableExtra(EXTRA_USER) as User
val file: OCFile = intent.getParcelableExtra(EXTRA_FILE) as OCFile
Expand All @@ -125,12 +146,13 @@ class PlayerService : Service() {
}

private fun onActionStop() {
player.stop()
stopServiceAndRemoveNotification(null)
}

private fun onActionStopFile(args: Bundle?) {
val file: OCFile = args?.getParcelable(EXTRA_FILE) ?: throw IllegalArgumentException("Missing file argument")
player.stop(file)

stopServiceAndRemoveNotification(file)
}

private fun startForeground(currentFile: OCFile) {
Expand All @@ -148,4 +170,15 @@ class PlayerService : Service() {

startForeground(R.string.media_notif_ticker, notificationBuilder.build())
}

private fun stopServiceAndRemoveNotification(file: OCFile?) {
if (file == null) {
player.stop()
} else {
player.stop(file)
}

stopSelf()
stopForeground(true)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -317,14 +317,17 @@ public void onStart() {
Log_OC.v(TAG, "onStart");
OCFile file = getFile();
if (file != null) {
// bind to any existing player
mMediaPlayerServiceConnection.bind();

if (MimeTypeUtil.isAudio(file)) {
mMediaController.setMediaPlayer(mMediaPlayerServiceConnection);
mMediaPlayerServiceConnection.bind();
mMediaPlayerServiceConnection.start(user, file, mAutoplay, mSavedPlaybackPosition);
mMultiListContainer.setVisibility(View.GONE);
mPreviewContainer.setVisibility(View.VISIBLE);
} else if (MimeTypeUtil.isVideo(file)) {
if (mMediaPlayerServiceConnection.isConnected() && mMediaPlayerServiceConnection.isPlaying()) {
if (mMediaPlayerServiceConnection.isConnected()) {
// always stop player
stopAudio();
}
playVideo();
Expand Down

0 comments on commit b9ee062

Please sign in to comment.