crash fix

This commit is contained in:
Yuriy Liskov
2020-10-06 01:35:01 +03:00
parent 6afdcf0537
commit bb5d2b7458
5 changed files with 59 additions and 44 deletions
@@ -5,6 +5,7 @@ import android.os.Handler;
import android.os.Looper;
import com.liskovsoft.mediaserviceinterfaces.MediaItemManager;
import com.liskovsoft.mediaserviceinterfaces.MediaService;
import com.liskovsoft.mediaserviceinterfaces.data.MediaItem;
import com.liskovsoft.mediaserviceinterfaces.data.MediaItemMetadata;
import com.liskovsoft.sharedutils.helpers.KeyHelpers;
import com.liskovsoft.sharedutils.helpers.MessageHelpers;
@@ -22,6 +23,7 @@ import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
import java.util.List;
import java.util.concurrent.Callable;
public class PlayerUiManager extends PlayerEventListenerHelper implements MetadataListener {
private static final String TAG = PlayerUiManager.class.getSimpleName();
@@ -163,7 +165,9 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada
@Override
public void onSubscribeClicked(boolean subscribed) {
if (mController.getVideo() == null) {
Video video = mController.getVideo();
if (video == null || video.mediaItem == null) {
Log.e(TAG, "Seems that video isn't initialized yet. Cancelling...");
return;
}
@@ -174,9 +178,9 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada
Observable<Void> observable;
if (subscribed) {
observable = mediaItemManager.subscribeObserve(mController.getVideo().mediaItem);
observable = mediaItemManager.subscribeObserve(video.mediaItem);
} else {
observable = mediaItemManager.unsubscribeObserve(mController.getVideo().mediaItem);
observable = mediaItemManager.unsubscribeObserve(video.mediaItem);
}
observable
@@ -186,7 +190,9 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada
@Override
public void onThumbsDownClicked(boolean thumbsDown) {
if (mController.getVideo() == null) {
Video video = mController.getVideo();
if (video == null || video.mediaItem == null) {
Log.e(TAG, "Seems that video isn't initialized yet. Cancelling...");
return;
}
@@ -197,9 +203,9 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada
Observable<Void> observable;
if (thumbsDown) {
observable = mediaItemManager.setDislikeObserve(mController.getVideo().mediaItem);
observable = mediaItemManager.setDislikeObserve(video.mediaItem);
} else {
observable = mediaItemManager.removeDislikeObserve(mController.getVideo().mediaItem);
observable = mediaItemManager.removeDislikeObserve(video.mediaItem);
}
observable
@@ -209,7 +215,9 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada
@Override
public void onThumbsUpClicked(boolean thumbsUp) {
if (mController.getVideo() == null) {
Video video = mController.getVideo();
if (video == null || video.mediaItem == null) {
Log.e(TAG, "Seems that video isn't initialized yet. Cancelling...");
return;
}
@@ -220,9 +228,9 @@ public class PlayerUiManager extends PlayerEventListenerHelper implements Metada
Observable<Void> observable;
if (thumbsUp) {
observable = mediaItemManager.setLikeObserve(mController.getVideo().mediaItem);
observable = mediaItemManager.setLikeObserve(video.mediaItem);
} else {
observable = mediaItemManager.removeLikeObserve(mController.getVideo().mediaItem);
observable = mediaItemManager.removeLikeObserve(video.mediaItem);
}
observable
@@ -64,7 +64,7 @@ public abstract class LeanbackActivity extends FragmentActivity {
protected void onResume() {
super.onResume();
// While entering/exiting PIP mode only Pause/Resume is called
// PIP fix: While entering/exiting PIP mode only Pause/Resume is called
mModeSyncManager.restore(this);
@@ -72,18 +72,6 @@ public abstract class LeanbackActivity extends FragmentActivity {
mViewManager.addTop(this);
}
//@Override
//public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
// super.onPictureInPictureModeChanged(isInPictureInPictureMode);
//
// // While entering/exiting PIP mode only Pause/Resume is called
//
// if (!isInPictureInPictureMode) {
// mModeSyncManager.restore(this);
// mViewManager.addTop(this); // user makes pip activity fullscreen
// }
//}
@Override
protected void onStop() {
super.onStop();
@@ -76,26 +76,38 @@ public class PlaybackActivity extends LeanbackActivity {
// More: https://medium.com/s23nyc-tech/drop-in-android-video-exoplayer2-with-picture-in-picture-e2d4f8c1eb30
@SuppressWarnings("deprecation")
private void enterPIPMode() {
Log.d(TAG, "Entering PIP mode...");
// NOTE: When exiting PIP mode onPause is called immediately after onResume
if (Build.VERSION.SDK_INT >= 24 && getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
//videoPosition = player.currentPosition
//playerView.useController = false
if (Build.VERSION.SDK_INT >= 26) {
PictureInPictureParams.Builder params = new PictureInPictureParams.Builder();
enterPictureInPictureMode(params.build());
} else {
enterPictureInPictureMode();
// Also, avoid enter pip on stop!
// More info: https://developer.android.com/guide/topics/ui/picture-in-picture#continuing_playback
if (wannaEnterToPIP()) {
Log.d(TAG, "Entering PIP mode...");
try {
if (Build.VERSION.SDK_INT >= 26) {
PictureInPictureParams.Builder params = new PictureInPictureParams.Builder();
enterPictureInPictureMode(params.build());
} else {
enterPictureInPictureMode();
}
} catch (Exception e) {
// Device doesn't support picture-in-picture mode
Log.e(TAG, e.getMessage());
}
}
}
private boolean wannaEnterToPIP() {
boolean pipIsSupported = Build.VERSION.SDK_INT >= 24 && getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
return pipIsSupported && !isInPictureInPictureMode() && mPlaybackFragment.isPIPEnabled();
}
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode);
mPlaybackFragment.blockEngine(isInPictureInPictureMode);
mPlaybackFragment.restartEngine();
}
@@ -107,14 +119,16 @@ public class PlaybackActivity extends LeanbackActivity {
// More info: https://developer.android.com/guide/topics/ui/picture-in-picture#continuing_playback
// User pressed back.
if (wannaEnterToPIP()) {
enterPIPMode();
}
enterPIPMode();
super.finish();
}
private boolean wannaEnterToPIP() {
return !isInPictureInPictureMode() && mPlaybackFragment.isPIPEnabled();
public boolean isInPIPMode() {
if (Build.VERSION.SDK_INT < 24) {
return false;
}
return isInPictureInPictureMode();
}
}
@@ -490,11 +490,14 @@ public class PlaybackFragment extends VideoSupportFragment implements PlaybackVi
@Override
public boolean isInPIPMode() {
if (getActivity() == null) {
PlaybackActivity playbackActivity = (PlaybackActivity) getActivity();
if (playbackActivity == null) {
return false;
}
return getActivity().isInPictureInPictureMode();
// Old api fix
return playbackActivity.isInPIPMode();
}
@Override
@@ -131,9 +131,11 @@ public class AppSettingsFragment extends LeanbackSettingsFragment
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(mExtractedContext);
screen.setTitle(mTitle);
for (SettingsCategory category : mCategories) {
if (category.items != null) {
screen.addPreference(mManager.createPreference(category));
if (mCategories != null) {
for (SettingsCategory category : mCategories) {
if (category.items != null) {
screen.addPreference(mManager.createPreference(category));
}
}
}
@@ -144,7 +146,7 @@ public class AppSettingsFragment extends LeanbackSettingsFragment
private void setSingleListAsRoot(PreferenceScreen screen) {
// auto expand single list preference
if (mCategories.size() == 1) {
if (mCategories.size() == 1 && screen.getPreferenceCount() > 0) {
onDisplayPreferenceDialog(screen.getPreference(0));
getFragmentManager().addOnBackStackChangedListener(() -> {