1 package expo.modules.av.player; 2 3 import android.os.Bundle; 4 import androidx.annotation.NonNull; 5 import android.widget.MediaController; 6 7 public class PlayerDataControl implements MediaController.MediaPlayerControl { 8 private final PlayerData mPlayerData; 9 PlayerDataControl(final @NonNull PlayerData playerData)10 public PlayerDataControl(final @NonNull PlayerData playerData) { 11 mPlayerData = playerData; 12 } 13 14 @Override start()15 public void start() { 16 final Bundle map = new Bundle(); 17 map.putBoolean(PlayerData.STATUS_SHOULD_PLAY_KEY_PATH, true); 18 mPlayerData.setStatus(map, null); 19 } 20 21 @Override pause()22 public void pause() { 23 final Bundle map = new Bundle(); 24 map.putBoolean(PlayerData.STATUS_SHOULD_PLAY_KEY_PATH, false); 25 mPlayerData.setStatus(map, null); 26 } 27 28 @Override getDuration()29 public int getDuration() { 30 final Bundle status = mPlayerData.getStatus(); 31 return (status.getBoolean(PlayerData.STATUS_IS_LOADED_KEY_PATH) 32 && status.containsKey(PlayerData.STATUS_DURATION_MILLIS_KEY_PATH)) 33 ? status.getInt(PlayerData.STATUS_DURATION_MILLIS_KEY_PATH) : 0; 34 } 35 36 @Override getCurrentPosition()37 public int getCurrentPosition() { 38 final Bundle status = mPlayerData.getStatus(); 39 return status.getBoolean(PlayerData.STATUS_IS_LOADED_KEY_PATH) 40 ? status.getInt(PlayerData.STATUS_POSITION_MILLIS_KEY_PATH) : 0; 41 } 42 43 @Override seekTo(final int msec)44 public void seekTo(final int msec) { 45 final Bundle map = new Bundle(); 46 map.putDouble(PlayerData.STATUS_POSITION_MILLIS_KEY_PATH, (double) msec); 47 mPlayerData.setStatus(map, null); 48 } 49 50 @Override isPlaying()51 public boolean isPlaying() { 52 final Bundle status = mPlayerData.getStatus(); 53 return status.getBoolean(PlayerData.STATUS_IS_LOADED_KEY_PATH) 54 && status.getBoolean(PlayerData.STATUS_IS_PLAYING_KEY_PATH); 55 } 56 57 @Override getBufferPercentage()58 public int getBufferPercentage() { 59 final Bundle status = mPlayerData.getStatus(); 60 if (status.getBoolean(PlayerData.STATUS_IS_LOADED_KEY_PATH) 61 && status.containsKey(PlayerData.STATUS_DURATION_MILLIS_KEY_PATH) 62 && status.containsKey(PlayerData.STATUS_PLAYABLE_DURATION_MILLIS_KEY_PATH)) { 63 final double duration = status.getInt(PlayerData.STATUS_DURATION_MILLIS_KEY_PATH); 64 final double playableDuration = status.getInt(PlayerData.STATUS_PLAYABLE_DURATION_MILLIS_KEY_PATH); 65 return (int) (playableDuration / duration * 100.0); 66 } else { 67 return 0; 68 } 69 } 70 71 @Override canPause()72 public boolean canPause() { 73 return true; 74 } 75 76 @Override canSeekBackward()77 public boolean canSeekBackward() { 78 return true; 79 } 80 81 @Override canSeekForward()82 public boolean canSeekForward() { 83 return true; 84 } 85 86 @Override getAudioSessionId()87 public int getAudioSessionId() { 88 return mPlayerData.getAudioSessionId(); 89 } 90 isFullscreen()91 public boolean isFullscreen() { 92 return mPlayerData.isPresentedFullscreen(); 93 } 94 toggleFullscreen()95 public void toggleFullscreen() { 96 mPlayerData.toggleFullscreen(); 97 } 98 } 99