From c58a9768c212d8446c36167977530d41cd727be8 Mon Sep 17 00:00:00 2001 From: Stevan Medic Date: Tue, 24 Apr 2018 23:34:50 +0200 Subject: [PATCH] Improvements --- .idea/compiler.xml | 22 - .idea/copyright/profiles_settings.xml | 3 - .idea/encodings.xml | 6 - .idea/gradle.xml | 3 +- .idea/misc.xml | 9 +- app/build.gradle | 49 +- app/libs/picasso-2.5.2.jar | Bin 120459 -> 0 bytes .../smedic/tubtub/BackgroundAudioService.java | 1001 ++++++++--------- .../tubtub/adapters/PlaylistsAdapter.java | 4 +- .../smedic/tubtub/adapters/VideosAdapter.java | 5 +- build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 12 files changed, 539 insertions(+), 571 deletions(-) delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/copyright/profiles_settings.xml delete mode 100644 .idea/encodings.xml delete mode 100644 app/libs/picasso-2.5.2.jar diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 96cc43e..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0e23f8e..7ac24c7 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,9 +3,8 @@ - + diff --git a/app/build.gradle b/app/build.gradle index b6342f0..744a333 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId "com.smedic.tubtub" minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 12 versionName "2.1" } @@ -18,7 +18,7 @@ android { def file = output.outputFile def appId = android.defaultConfig.applicationId def fileName = appId + "-" + variant.buildType.name + "-" + defaultConfig.versionName + ".apk" - output.outputFile = new File(file.parent, fileName) + //output.outputFile = new File(file.parent, fileName) } } } @@ -32,7 +32,7 @@ android { def file = output.outputFile def appId = android.defaultConfig.applicationId def fileName = appId + "-" + variant.buildType.name +".apk" - output.outputFile = new File(file.parent, fileName) + //output.outputFile = new File(file.parent, fileName) } } } @@ -43,23 +43,24 @@ android { dependencies { provided fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' - compile(name: 'color_picker_library-release', ext: 'aar') - compile 'com.android.support:appcompat-v7' - compile 'com.android.support:design:25.2.0' - compile 'com.android.support:support-v4:25.2.0' - compile 'com.android.support:recyclerview-v7:25.2.0' - compile 'com.google.android.gms:play-services-auth:10.2.0' - compile files('libs/google-api-client-android-1.21.0.jar') - compile files('libs/google-http-client-android-1.21.0.jar') - compile files('libs/google-api-client-1.21.0.jar') - compile files('libs/google-http-client-1.21.0.jar') - compile files('libs/google-http-client-jackson2-1.21.0.jar') - compile files('libs/google-oauth-client-1.21.0.jar') - compile files('libs/jackson-core-2.1.3.jar') - compile files('libs/google-api-services-youtube-v3-rev160-1.21.0.jar') - compile files('libs/picasso-2.5.2.jar') - compile 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT' - compile 'pub.devrel:easypermissions:0.3.0' - compile 'com.facebook.network.connectionclass:connectionclass:1.0.1' //this lib include jsr501 - compile 'com.android.support:cardview-v7:25.2.0' + implementation(name: 'color_picker_library-release', ext: 'aar') + implementation 'com.android.support:appcompat-v7' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support:support-v4:27.1.1' + implementation 'com.android.support:recyclerview-v7:27.1.1' + implementation 'com.google.android.gms:play-services-auth:15.0.0' + implementation files('libs/google-api-client-android-1.21.0.jar') + implementation files('libs/google-http-client-android-1.21.0.jar') + implementation files('libs/google-api-client-1.21.0.jar') + implementation files('libs/google-http-client-1.21.0.jar') + implementation files('libs/google-http-client-jackson2-1.21.0.jar') + implementation files('libs/google-oauth-client-1.21.0.jar') + implementation files('libs/jackson-core-2.1.3.jar') + implementation files('libs/google-api-services-youtube-v3-rev160-1.21.0.jar') + implementation 'com.github.bumptech.glide:glide:4.7.1' + annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1' + implementation 'com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT' + implementation 'pub.devrel:easypermissions:1.2.0' + implementation 'com.facebook.network.connectionclass:connectionclass:1.0.1' //this lib include jsr501 + implementation 'com.android.support:cardview-v7:27.1.1' } diff --git a/app/libs/picasso-2.5.2.jar b/app/libs/picasso-2.5.2.jar deleted file mode 100644 index 6acbaa14dc6f599948cd96f2c9b00336cf6b22ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120459 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 a4P+(Yf#nAjlm_qz_BIrh#c9wfsQ&{XRbz7i diff --git a/app/src/main/java/com/smedic/tubtub/BackgroundAudioService.java b/app/src/main/java/com/smedic/tubtub/BackgroundAudioService.java index 124414b..0671b6a 100644 --- a/app/src/main/java/com/smedic/tubtub/BackgroundAudioService.java +++ b/app/src/main/java/com/smedic/tubtub/BackgroundAudioService.java @@ -21,30 +21,34 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.IBinder; import android.os.PowerManager; import android.os.RemoteException; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.NotificationCompat; import android.support.v4.media.RatingCompat; +import android.support.v4.media.app.NotificationCompat.MediaStyle; import android.support.v4.media.session.MediaControllerCompat; import android.support.v4.media.session.MediaSessionCompat; -import android.support.v7.app.NotificationCompat; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import android.util.SparseArray; import android.widget.Toast; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.target.Target; +import com.bumptech.glide.request.transition.Transition; import com.facebook.network.connectionclass.ConnectionClassManager; import com.facebook.network.connectionclass.ConnectionQuality; import com.facebook.network.connectionclass.DeviceBandwidthSampler; import com.smedic.tubtub.model.ItemType; import com.smedic.tubtub.model.YouTubeVideo; import com.smedic.tubtub.utils.Config; -import com.squareup.picasso.Picasso; -import com.squareup.picasso.Target; import java.io.IOException; import java.util.ArrayList; @@ -58,504 +62,495 @@ * Created by Stevan Medic on 9.3.16.. */ public class BackgroundAudioService extends Service implements MediaPlayer.OnCompletionListener, - MediaPlayer.OnPreparedListener { - - private static final String TAG = "SMEDIC service"; - - public static final String ACTION_PLAY = "action_play"; - public static final String ACTION_PAUSE = "action_pause"; - public static final String ACTION_NEXT = "action_next"; - public static final String ACTION_PREVIOUS = "action_previous"; - public static final String ACTION_STOP = "action_stop"; - - private MediaPlayer mMediaPlayer; - private MediaSessionCompat mSession; - private MediaControllerCompat mController; - - private ItemType mediaType = ItemType.YOUTUBE_MEDIA_NONE; - - private YouTubeVideo videoItem; - - private boolean isStarting = false; - private int currentSongIndex = 0; - - private ArrayList youTubeVideos; - - private NotificationCompat.Builder builder = null; - - private DeviceBandwidthSampler deviceBandwidthSampler; - private ConnectionQuality connectionQuality = ConnectionQuality.MODERATE; - - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public void onCreate() { - super.onCreate(); - videoItem = new YouTubeVideo(); - mMediaPlayer = new MediaPlayer(); - mMediaPlayer.setOnCompletionListener(this); - mMediaPlayer.setOnPreparedListener(this); - initMediaSessions(); - initPhoneCallListener(); - deviceBandwidthSampler = DeviceBandwidthSampler.getInstance(); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - handleIntent(intent); - return super.onStartCommand(intent, flags, startId); - } - - private void initPhoneCallListener() { - PhoneStateListener phoneStateListener = new PhoneStateListener() { - @Override - public void onCallStateChanged(int state, String incomingNumber) { - if (state == TelephonyManager.CALL_STATE_RINGING) { - //Incoming call: Pause music - pauseVideo(); - } else if (state == TelephonyManager.CALL_STATE_IDLE) { - //Not in call: Play music - Log.d(TAG, "onCallStateChanged: "); - resumeVideo(); - } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) { - //A call is dialing, active or on hold - } - super.onCallStateChanged(state, incomingNumber); - } - }; - - TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); - if (mgr != null) { - mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - } - - /** - * Handles intent (player options play/pause/stop...) - * - * @param intent - */ - private void handleIntent(Intent intent) { - if (intent == null || intent.getAction() == null) - return; - String action = intent.getAction(); - if (action.equalsIgnoreCase(ACTION_PLAY)) { - handleMedia(intent); - mController.getTransportControls().play(); - } else if (action.equalsIgnoreCase(ACTION_PAUSE)) { - mController.getTransportControls().pause(); - } else if (action.equalsIgnoreCase(ACTION_PREVIOUS)) { - mController.getTransportControls().skipToPrevious(); - } else if (action.equalsIgnoreCase(ACTION_NEXT)) { - mController.getTransportControls().skipToNext(); - } else if (action.equalsIgnoreCase(ACTION_STOP)) { - mController.getTransportControls().stop(); - } - } - - /** - * Handles media - playlists and videos sent from fragments - * - * @param intent - */ - private void handleMedia(Intent intent) { - ItemType intentMediaType = ItemType.YOUTUBE_MEDIA_NONE; - if (intent.getSerializableExtra(Config.YOUTUBE_TYPE) != null) { - intentMediaType = (ItemType) intent.getSerializableExtra(Config.YOUTUBE_TYPE); - } - switch (intentMediaType) { - case YOUTUBE_MEDIA_NONE: //video is paused,so no new playback requests should be processed - mMediaPlayer.start(); - break; - case YOUTUBE_MEDIA_TYPE_VIDEO: - mediaType = ItemType.YOUTUBE_MEDIA_TYPE_VIDEO; - videoItem = (YouTubeVideo) intent.getSerializableExtra(Config.YOUTUBE_TYPE_VIDEO); - if (videoItem.getId() != null) { - playVideo(); - } - break; - case YOUTUBE_MEDIA_TYPE_PLAYLIST: //new playlist playback request - mediaType = ItemType.YOUTUBE_MEDIA_TYPE_PLAYLIST; - youTubeVideos = (ArrayList) intent.getSerializableExtra(Config.YOUTUBE_TYPE_PLAYLIST); - int startPosition = intent.getIntExtra(Config.YOUTUBE_TYPE_PLAYLIST_VIDEO_POS, 0); - videoItem = youTubeVideos.get(startPosition); - currentSongIndex = startPosition; - playVideo(); - break; - default: - Log.d(TAG, "Unknown command"); - break; - } - } - - /** - * Initializes media sessions and receives media events - */ - private void initMediaSessions() { - // Make sure the media player will acquire a wake-lock while playing. If we don't do - // that, the CPU might go to sleep while the song is playing, causing playback to stop. - // - // Remember that to use this, we have to declare the android.permission.WAKE_LOCK - // permission in AndroidManifest.xml. - mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); - - PendingIntent buttonReceiverIntent = PendingIntent.getBroadcast( - getApplicationContext(), - 0, - new Intent(Intent.ACTION_MEDIA_BUTTON), - PendingIntent.FLAG_UPDATE_CURRENT - ); - - mSession = new MediaSessionCompat(getApplicationContext(), "simple player session", - null, buttonReceiverIntent); - - try { - mController = new MediaControllerCompat(getApplicationContext(), mSession.getSessionToken()); - - mSession.setCallback( - new MediaSessionCompat.Callback() { - @Override - public void onPlay() { - super.onPlay(); - buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); - } - - @Override - public void onPause() { - - super.onPause(); - pauseVideo(); - buildNotification(generateAction(android.R.drawable.ic_media_play, "Play", ACTION_PLAY)); - } - - @Override - public void onSkipToNext() { - super.onSkipToNext(); - if (!isStarting) { - playNext(); - } - buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); - } - - @Override - public void onSkipToPrevious() { - super.onSkipToPrevious(); - if (!isStarting) { - playPrevious(); - } - buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); - } - - @Override - public void onStop() { - super.onStop(); - stopPlayer(); - //remove notification and stop service - NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancel(1); - Intent intent = new Intent(getApplicationContext(), BackgroundAudioService.class); - stopService(intent); - } - - @Override - public void onSetRating(RatingCompat rating) { - super.onSetRating(rating); - } - } - ); - } catch (RemoteException re) { - re.printStackTrace(); - } - } - - /** - * Builds notification panel with buttons and info on it - * - * @param action Action to be applied - */ - - private void buildNotification(NotificationCompat.Action action) { - - final NotificationCompat.MediaStyle style = new NotificationCompat.MediaStyle(); - - Intent intent = new Intent(getApplicationContext(), BackgroundAudioService.class); - intent.setAction(ACTION_STOP); - PendingIntent stopPendingIntent = PendingIntent.getService(getApplicationContext(), 1, intent, 0); - - Intent clickIntent = new Intent(this, MainActivity.class); - clickIntent.setAction(Intent.ACTION_MAIN); - clickIntent.addCategory(Intent.CATEGORY_LAUNCHER); - PendingIntent clickPendingIntent = PendingIntent.getActivity(this, 0, clickIntent, 0); - - builder = new NotificationCompat.Builder(this); - builder.setSmallIcon(R.mipmap.ic_launcher); - builder.setContentTitle(videoItem.getTitle()); - builder.setContentInfo(videoItem.getDuration()); - builder.setShowWhen(false); - builder.setContentIntent(clickPendingIntent); - builder.setDeleteIntent(stopPendingIntent); - builder.setOngoing(false); - builder.setSubText(videoItem.getViewCount()); - builder.setStyle(style); - - //load bitmap for largeScreen - if (videoItem.getThumbnailURL() != null && !videoItem.getThumbnailURL().isEmpty()) { - Picasso.with(this) - .load(videoItem.getThumbnailURL()) - .into(target); - } - - builder.addAction(generateAction(android.R.drawable.ic_media_previous, "Previous", ACTION_PREVIOUS)); - builder.addAction(action); - builder.addAction(generateAction(android.R.drawable.ic_media_next, "Next", ACTION_NEXT)); - style.setShowActionsInCompactView(0, 1, 2); - - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(1, builder.build()); - - } - - /** - * Field which handles image loading - */ - private Target target = new Target() { - - @Override - public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { - updateNotificationLargeIcon(bitmap); - } - - @Override - public void onBitmapFailed(Drawable drawable) { - Log.d(TAG, "Load bitmap... failed"); - } - - @Override - public void onPrepareLoad(Drawable drawable) { - } - }; - - /** - * Updates only large icon in notification panel when bitmap is decoded - * - * @param bitmap - */ - private void updateNotificationLargeIcon(Bitmap bitmap) { - builder.setLargeIcon(bitmap); - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(1, builder.build()); - } - - /** - * Generates specific action with parameters below - * - * @param icon - * @param title - * @param intentAction - * @return - */ - private NotificationCompat.Action generateAction(int icon, String title, String intentAction) { - Intent intent = new Intent(getApplicationContext(), BackgroundAudioService.class); - intent.setAction(intentAction); - PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 1, intent, 0); - return new NotificationCompat.Action.Builder(icon, title, pendingIntent).build(); - } - - /** - * Plays next video in playlist - */ - private void playNext() { - //if media type is video not playlist, just loop it - if (mediaType == ItemType.YOUTUBE_MEDIA_TYPE_VIDEO) { - seekVideo(0); - restartVideo(); - return; - } - - if (youTubeVideos.size() > currentSongIndex + 1) { - currentSongIndex++; - } else { //play 1st song - currentSongIndex = 0; - } - - videoItem = youTubeVideos.get(currentSongIndex); - playVideo(); - } - - /** - * Plays previous video in playlist - */ - private void playPrevious() { - //if media type is video not playlist, just loop it - if (mediaType == ItemType.YOUTUBE_MEDIA_TYPE_VIDEO) { - restartVideo(); - return; - } - - if (currentSongIndex - 1 >= 0) { - currentSongIndex--; - } else { //play last song - currentSongIndex = youTubeVideos.size() - 1; - } - videoItem = youTubeVideos.get(youTubeVideos.size() - 1); - playVideo(); - } - - /** - * Plays video - */ - private void playVideo() { - isStarting = true; - extractUrlAndPlay(); - } - - /** - * Pauses video - */ - private void pauseVideo() { - if (mMediaPlayer.isPlaying()) { - mMediaPlayer.pause(); - } - } - - /** - * Resumes video - */ - private void resumeVideo() { - if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { - mMediaPlayer.start(); - } - } - - /** - * Restarts video - */ - private void restartVideo() { - mMediaPlayer.start(); - } - - /** - * Seeks to specific time - * - * @param seekTo - */ - private void seekVideo(int seekTo) { - mMediaPlayer.seekTo(seekTo); - } - - /** - * Stops video - */ - private void stopPlayer() { - mMediaPlayer.stop(); - mMediaPlayer.release(); - mMediaPlayer = null; - } - - /** - * Get the best available audio stream - *

- * Itags: - * 141 - mp4a - stereo, 44.1 KHz 256 Kbps - * 251 - webm - stereo, 48 KHz 160 Kbps - * 140 - mp4a - stereo, 44.1 KHz 128 Kbps - * 17 - mp4 - stereo, 44.1 KHz 96-100 Kbps - * - * @param ytFiles Array of available streams - * @return Audio stream with highest bitrate - */ - private YtFile getBestStream(SparseArray ytFiles) { - - connectionQuality = ConnectionClassManager.getInstance().getCurrentBandwidthQuality(); - int[] itags = new int[]{251, 141, 140, 17}; - - if (connectionQuality != null && connectionQuality != ConnectionQuality.UNKNOWN) { - switch (connectionQuality) { - case POOR: - itags = new int[]{17, 140, 251, 141}; - break; - case MODERATE: - itags = new int[]{251, 141, 140, 17}; - break; - case GOOD: - case EXCELLENT: - itags = new int[]{141, 251, 140, 17}; - break; - } - } - - if (ytFiles.get(itags[0]) != null) { - return ytFiles.get(itags[0]); - } else if (ytFiles.get(itags[1]) != null) { - return ytFiles.get(itags[1]); - } else if (ytFiles.get(itags[2]) != null) { - return ytFiles.get(itags[2]); - } - return ytFiles.get(itags[3]); - } - - /** - * Extracts link from youtube video ID, so mediaPlayer can play it - */ - private void extractUrlAndPlay() { - String youtubeLink = Config.YOUTUBE_BASE_URL + videoItem.getId(); - deviceBandwidthSampler.startSampling(); - - new YouTubeExtractor(this) { - @Override - protected void onExtractionComplete(SparseArray ytFiles, VideoMeta videoMeta) { - if (ytFiles == null) { - // Something went wrong we got no urls. Always check this. - Toast.makeText(YTApplication.getAppContext(), R.string.failed_playback, - Toast.LENGTH_SHORT).show(); - return; - } - deviceBandwidthSampler.stopSampling(); - YtFile ytFile = getBestStream(ytFiles); - try { - if (mMediaPlayer != null) { - mMediaPlayer.reset(); - mMediaPlayer.setDataSource(ytFile.getUrl()); - mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); - mMediaPlayer.prepare(); - mMediaPlayer.start(); - - Toast.makeText(YTApplication.getAppContext(), videoItem.getTitle(), Toast.LENGTH_SHORT).show(); - } - } catch (IOException io) { - io.printStackTrace(); - } - } - }.execute(youtubeLink); - } - - @Override - public void onTaskRemoved(Intent rootIntent) { - NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - mNotificationManager.cancel(1); - } - - @Override - public void onCompletion(MediaPlayer _mediaPlayer) { - if (mediaType == ItemType.YOUTUBE_MEDIA_TYPE_PLAYLIST) { - playNext(); - buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); - } else { - restartVideo(); - } - } - - @Override - public void onPrepared(MediaPlayer mp) { - isStarting = false; - } + MediaPlayer.OnPreparedListener { + + private static final String TAG = "SMEDIC service"; + + public static final String ACTION_PLAY = "action_play"; + public static final String ACTION_PAUSE = "action_pause"; + public static final String ACTION_NEXT = "action_next"; + public static final String ACTION_PREVIOUS = "action_previous"; + public static final String ACTION_STOP = "action_stop"; + + private static YouTubeExtractor youTubeExtractor; + private MediaPlayer mMediaPlayer; + private MediaSessionCompat mSession; + private MediaControllerCompat mController; + + private ItemType mediaType = ItemType.YOUTUBE_MEDIA_NONE; + + private YouTubeVideo videoItem; + + private boolean isStarting = false; + private int currentSongIndex = 0; + + private ArrayList youTubeVideos; + + private NotificationCompat.Builder builder = null; + + private DeviceBandwidthSampler deviceBandwidthSampler; + private ConnectionQuality connectionQuality = ConnectionQuality.MODERATE; + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + videoItem = new YouTubeVideo(); + mMediaPlayer = new MediaPlayer(); + mMediaPlayer.setOnCompletionListener(this); + mMediaPlayer.setOnPreparedListener(this); + initMediaSessions(); + initPhoneCallListener(); + deviceBandwidthSampler = DeviceBandwidthSampler.getInstance(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + handleIntent(intent); + return super.onStartCommand(intent, flags, startId); + } + + private void initPhoneCallListener() { + PhoneStateListener phoneStateListener = new PhoneStateListener() { + @Override + public void onCallStateChanged(int state, String incomingNumber) { + if (state == TelephonyManager.CALL_STATE_RINGING) { + //Incoming call: Pause music + pauseVideo(); + } else if (state == TelephonyManager.CALL_STATE_IDLE) { + //Not in call: Play music + Log.d(TAG, "onCallStateChanged: "); + resumeVideo(); + } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) { + //A call is dialing, active or on hold + } + super.onCallStateChanged(state, incomingNumber); + } + }; + + TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); + if (mgr != null) { + mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + /** + * Handles intent (player options play/pause/stop...) + * + * @param intent + */ + private void handleIntent(Intent intent) { + if (intent == null || intent.getAction() == null) + return; + String action = intent.getAction(); + if (action.equalsIgnoreCase(ACTION_PLAY)) { + handleMedia(intent); + mController.getTransportControls().play(); + } else if (action.equalsIgnoreCase(ACTION_PAUSE)) { + mController.getTransportControls().pause(); + } else if (action.equalsIgnoreCase(ACTION_PREVIOUS)) { + mController.getTransportControls().skipToPrevious(); + } else if (action.equalsIgnoreCase(ACTION_NEXT)) { + mController.getTransportControls().skipToNext(); + } else if (action.equalsIgnoreCase(ACTION_STOP)) { + mController.getTransportControls().stop(); + } + } + + /** + * Handles media - playlists and videos sent from fragments + * + * @param intent + */ + private void handleMedia(Intent intent) { + ItemType intentMediaType = ItemType.YOUTUBE_MEDIA_NONE; + if (intent.getSerializableExtra(Config.YOUTUBE_TYPE) != null) { + intentMediaType = (ItemType) intent.getSerializableExtra(Config.YOUTUBE_TYPE); + } + switch (intentMediaType) { + case YOUTUBE_MEDIA_NONE: //video is paused,so no new playback requests should be processed + mMediaPlayer.start(); + break; + case YOUTUBE_MEDIA_TYPE_VIDEO: + mediaType = ItemType.YOUTUBE_MEDIA_TYPE_VIDEO; + videoItem = (YouTubeVideo) intent.getSerializableExtra(Config.YOUTUBE_TYPE_VIDEO); + if (videoItem.getId() != null) { + playVideo(); + } + break; + case YOUTUBE_MEDIA_TYPE_PLAYLIST: //new playlist playback request + mediaType = ItemType.YOUTUBE_MEDIA_TYPE_PLAYLIST; + youTubeVideos = (ArrayList) intent.getSerializableExtra(Config.YOUTUBE_TYPE_PLAYLIST); + int startPosition = intent.getIntExtra(Config.YOUTUBE_TYPE_PLAYLIST_VIDEO_POS, 0); + videoItem = youTubeVideos.get(startPosition); + currentSongIndex = startPosition; + playVideo(); + break; + default: + Log.d(TAG, "Unknown command"); + break; + } + } + + /** + * Initializes media sessions and receives media events + */ + private void initMediaSessions() { + // Make sure the media player will acquire a wake-lock while playing. If we don't do + // that, the CPU might go to sleep while the song is playing, causing playback to stop. + // + // Remember that to use this, we have to declare the android.permission.WAKE_LOCK + // permission in AndroidManifest.xml. + mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); + + PendingIntent buttonReceiverIntent = PendingIntent.getBroadcast( + getApplicationContext(), + 0, + new Intent(Intent.ACTION_MEDIA_BUTTON), + PendingIntent.FLAG_UPDATE_CURRENT + ); + + mSession = new MediaSessionCompat(getApplicationContext(), "simple player session", + null, buttonReceiverIntent); + + try { + mController = new MediaControllerCompat(getApplicationContext(), mSession.getSessionToken()); + + mSession.setCallback( + new MediaSessionCompat.Callback() { + @Override + public void onPlay() { + super.onPlay(); + buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); + } + + @Override + public void onPause() { + + super.onPause(); + pauseVideo(); + buildNotification(generateAction(android.R.drawable.ic_media_play, "Play", ACTION_PLAY)); + } + + @Override + public void onSkipToNext() { + super.onSkipToNext(); + if (!isStarting) { + playNext(); + } + buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); + } + + @Override + public void onSkipToPrevious() { + super.onSkipToPrevious(); + if (!isStarting) { + playPrevious(); + } + buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); + } + + @Override + public void onStop() { + super.onStop(); + stopPlayer(); + //remove notification and stop service + NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancel(1); + Intent intent = new Intent(getApplicationContext(), BackgroundAudioService.class); + stopService(intent); + } + + @Override + public void onSetRating(RatingCompat rating) { + super.onSetRating(rating); + } + } + ); + } catch (RemoteException re) { + re.printStackTrace(); + } + } + + /** + * Builds notification panel with buttons and info on it + * + * @param action Action to be applied + */ + + private void buildNotification(NotificationCompat.Action action) { + + final MediaStyle style = new MediaStyle(); + + Intent intent = new Intent(getApplicationContext(), BackgroundAudioService.class); + intent.setAction(ACTION_STOP); + PendingIntent stopPendingIntent = PendingIntent.getService(getApplicationContext(), 1, intent, 0); + + Intent clickIntent = new Intent(this, MainActivity.class); + clickIntent.setAction(Intent.ACTION_MAIN); + clickIntent.addCategory(Intent.CATEGORY_LAUNCHER); + PendingIntent clickPendingIntent = PendingIntent.getActivity(this, 0, clickIntent, 0); + + builder = new NotificationCompat.Builder(this, "1"); + builder.setSmallIcon(R.mipmap.ic_launcher); + builder.setContentTitle(videoItem.getTitle()); + builder.setContentInfo(videoItem.getDuration()); + builder.setShowWhen(false); + builder.setContentIntent(clickPendingIntent); + builder.setDeleteIntent(stopPendingIntent); + builder.setOngoing(false); + builder.setSubText(videoItem.getViewCount()); + builder.setStyle(style); + + //load bitmap for largeScreen + if (videoItem.getThumbnailURL() != null && !videoItem.getThumbnailURL().isEmpty()) { + Glide.with(getApplicationContext()).asBitmap().load(videoItem.getThumbnailURL()).into(target); + } + + builder.addAction(generateAction(android.R.drawable.ic_media_previous, "Previous", ACTION_PREVIOUS)); + builder.addAction(action); + builder.addAction(generateAction(android.R.drawable.ic_media_next, "Next", ACTION_NEXT)); + style.setShowActionsInCompactView(0, 1, 2); + + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(1, builder.build()); + + } + + /** + * Field which handles image loading + */ + private Target target = new SimpleTarget() { + @Override + public void onResourceReady(@NonNull Bitmap bitmap, @Nullable Transition transition) { + updateNotificationLargeIcon(bitmap); + } + }; + + /** + * Updates only large icon in notification panel when bitmap is decoded + * + * @param bitmap + */ + private void updateNotificationLargeIcon(Bitmap bitmap) { + builder.setLargeIcon(bitmap); + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(1, builder.build()); + } + + /** + * Generates specific action with parameters below + * + * @param icon + * @param title + * @param intentAction + * @return + */ + private NotificationCompat.Action generateAction(int icon, String title, String intentAction) { + Intent intent = new Intent(getApplicationContext(), BackgroundAudioService.class); + intent.setAction(intentAction); + PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 1, intent, 0); + return new NotificationCompat.Action.Builder(icon, title, pendingIntent).build(); + } + + /** + * Plays next video in playlist + */ + private void playNext() { + //if media type is video not playlist, just loop it + if (mediaType == ItemType.YOUTUBE_MEDIA_TYPE_VIDEO) { + seekVideo(0); + restartVideo(); + return; + } + + if (youTubeVideos.size() > currentSongIndex + 1) { + currentSongIndex++; + } else { //play 1st song + currentSongIndex = 0; + } + + videoItem = youTubeVideos.get(currentSongIndex); + playVideo(); + } + + /** + * Plays previous video in playlist + */ + private void playPrevious() { + //if media type is video not playlist, just loop it + if (mediaType == ItemType.YOUTUBE_MEDIA_TYPE_VIDEO) { + restartVideo(); + return; + } + + if (currentSongIndex - 1 >= 0) { + currentSongIndex--; + } else { //play last song + currentSongIndex = youTubeVideos.size() - 1; + } + videoItem = youTubeVideos.get(youTubeVideos.size() - 1); + playVideo(); + } + + /** + * Plays video + */ + private void playVideo() { + isStarting = true; + extractUrlAndPlay(); + } + + /** + * Pauses video + */ + private void pauseVideo() { + if (mMediaPlayer.isPlaying()) { + mMediaPlayer.pause(); + } + } + + /** + * Resumes video + */ + private void resumeVideo() { + if (mMediaPlayer != null && mMediaPlayer.isPlaying()) { + mMediaPlayer.start(); + } + } + + /** + * Restarts video + */ + private void restartVideo() { + mMediaPlayer.start(); + } + + /** + * Seeks to specific time + * + * @param seekTo + */ + private void seekVideo(int seekTo) { + mMediaPlayer.seekTo(seekTo); + } + + /** + * Stops video + */ + private void stopPlayer() { + mMediaPlayer.stop(); + mMediaPlayer.release(); + mMediaPlayer = null; + } + + /** + * Get the best available audio stream + *

+ * Itags: + * 141 - mp4a - stereo, 44.1 KHz 256 Kbps + * 251 - webm - stereo, 48 KHz 160 Kbps + * 140 - mp4a - stereo, 44.1 KHz 128 Kbps + * 17 - mp4 - stereo, 44.1 KHz 96-100 Kbps + * + * @param ytFiles Array of available streams + * @return Audio stream with highest bitrate + */ + private YtFile getBestStream(SparseArray ytFiles) { + + connectionQuality = ConnectionClassManager.getInstance().getCurrentBandwidthQuality(); + int[] itags = new int[]{251, 141, 140, 17}; + + if (connectionQuality != null && connectionQuality != ConnectionQuality.UNKNOWN) { + switch (connectionQuality) { + case POOR: + itags = new int[]{17, 140, 251, 141}; + break; + case MODERATE: + itags = new int[]{251, 141, 140, 17}; + break; + case GOOD: + case EXCELLENT: + itags = new int[]{141, 251, 140, 17}; + break; + } + } + + if (ytFiles.get(itags[0]) != null) { + return ytFiles.get(itags[0]); + } else if (ytFiles.get(itags[1]) != null) { + return ytFiles.get(itags[1]); + } else if (ytFiles.get(itags[2]) != null) { + return ytFiles.get(itags[2]); + } + return ytFiles.get(itags[3]); + } + + /** + * Extracts link from youtube video ID, so mediaPlayer can play it + */ + private void extractUrlAndPlay() { + String youtubeLink = Config.YOUTUBE_BASE_URL + videoItem.getId(); + deviceBandwidthSampler.startSampling(); + + youTubeExtractor = new YouTubeExtractor(this) { + @Override + protected void onExtractionComplete(SparseArray ytFiles, VideoMeta videoMeta) { + if (ytFiles == null) { + // Something went wrong we got no urls. Always check this. + Toast.makeText(YTApplication.getAppContext(), R.string.failed_playback, + Toast.LENGTH_SHORT).show(); + return; + } + deviceBandwidthSampler.stopSampling(); + YtFile ytFile = getBestStream(ytFiles); + try { + if (mMediaPlayer != null) { + mMediaPlayer.reset(); + mMediaPlayer.setDataSource(ytFile.getUrl()); + mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + mMediaPlayer.prepare(); + mMediaPlayer.start(); + + Toast.makeText(YTApplication.getAppContext(), videoItem.getTitle(), Toast.LENGTH_SHORT).show(); + } + } catch (IOException io) { + io.printStackTrace(); + } + } + }; + + youTubeExtractor.execute(youtubeLink); + } + + @Override + public void onTaskRemoved(Intent rootIntent) { + NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + mNotificationManager.cancel(1); + } + + @Override + public void onCompletion(MediaPlayer _mediaPlayer) { + if (mediaType == ItemType.YOUTUBE_MEDIA_TYPE_PLAYLIST) { + playNext(); + buildNotification(generateAction(android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE)); + } else { + restartVideo(); + } + } + + @Override + public void onPrepared(MediaPlayer mp) { + isStarting = false; + } } \ No newline at end of file diff --git a/app/src/main/java/com/smedic/tubtub/adapters/PlaylistsAdapter.java b/app/src/main/java/com/smedic/tubtub/adapters/PlaylistsAdapter.java index 5466132..8a3b865 100644 --- a/app/src/main/java/com/smedic/tubtub/adapters/PlaylistsAdapter.java +++ b/app/src/main/java/com/smedic/tubtub/adapters/PlaylistsAdapter.java @@ -12,10 +12,10 @@ import android.widget.ImageView; import android.widget.TextView; +import com.bumptech.glide.Glide; import com.smedic.tubtub.R; import com.smedic.tubtub.interfaces.ItemEventsListener; import com.smedic.tubtub.model.YouTubePlaylist; -import com.squareup.picasso.Picasso; import java.util.List; @@ -45,7 +45,7 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @Override public void onBindViewHolder(ViewHolder holder, int position) { final YouTubePlaylist playlist = playlists.get(position); - Picasso.with(context).load(playlist.getThumbnailURL()).into(holder.thumbnail); + Glide.with(context).load(playlist.getThumbnailURL()).into(holder.thumbnail); holder.title.setText(playlist.getTitle()); String videosNumberText = context.getString(R.string.number_of_videos) + String.valueOf(playlist.getNumberOfVideos()); holder.videosNumber.setText(videosNumberText); diff --git a/app/src/main/java/com/smedic/tubtub/adapters/VideosAdapter.java b/app/src/main/java/com/smedic/tubtub/adapters/VideosAdapter.java index 5b63bcd..2fc2411 100644 --- a/app/src/main/java/com/smedic/tubtub/adapters/VideosAdapter.java +++ b/app/src/main/java/com/smedic/tubtub/adapters/VideosAdapter.java @@ -25,12 +25,12 @@ import android.widget.ImageView; import android.widget.TextView; +import com.bumptech.glide.Glide; import com.smedic.tubtub.R; import com.smedic.tubtub.database.YouTubeSqlDb; import com.smedic.tubtub.interfaces.ItemEventsListener; import com.smedic.tubtub.model.YouTubeVideo; import com.smedic.tubtub.utils.Config; -import com.squareup.picasso.Picasso; import java.util.List; @@ -70,7 +70,8 @@ public void onBindViewHolder(ViewHolder holder, final int position) { itemChecked[position] = false; } - Picasso.with(context).load(video.getThumbnailURL()).into(holder.thumbnail); + Glide.with(context).load(video.getThumbnailURL()).into(holder.thumbnail); + holder.title.setText(video.getTitle()); holder.duration.setText(video.getDuration()); holder.viewCount.setText(video.getViewCount()); diff --git a/build.gradle b/build.gradle index 9655b66..f2ceeb3 100644 --- a/build.gradle +++ b/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -18,6 +19,7 @@ allprojects { dirs 'libs' } maven { url "https://jitpack.io" } + google() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 88711e8..0f7e181 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Oct 11 23:09:57 CEST 2017 +#Tue Apr 24 22:50:40 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip