From 5f7ee15d1e76489b8fc5f4f3df76e407f7709376 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Wed, 28 Sep 2016 13:09:42 +0900 Subject: [PATCH] Launch video player in single task mode (fixes #154) --- app/src/main/AndroidManifest.xml | 1 + .../newpipe/detail/ActionBarHandler.java | 3 + .../detail/VideoItemDetailActivity.java | 84 +++++++++++-------- 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5bae70262..447d01ddc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,6 +29,7 @@ videoStreams) { + if (defaultPreferences == null) + return 0; + String defaultResolution = defaultPreferences .getString(activity.getString(R.string.default_resolution_key), activity.getString(R.string.default_resolution_value)); diff --git a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java index 04649bf4d..2bbc6cb07 100644 --- a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java +++ b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java @@ -68,52 +68,66 @@ public class VideoItemDetailActivity extends AppCompatActivity { // http://developer.android.com/guide/components/fragments.html // - Bundle arguments = new Bundle(); if (savedInstanceState == null) { - // this means the video was called though another app - if (getIntent().getData() != null) { - videoUrl = getIntent().getData().toString(); - StreamingService[] serviceList = ServiceList.getServices(); - //StreamExtractor videoExtractor = null; - for (int i = 0; i < serviceList.length; i++) { - if (serviceList[i].getUrlIdHandlerInstance().acceptUrl(videoUrl)) { - arguments.putInt(VideoItemDetailFragment.STREAMING_SERVICE, i); - currentStreamingService = i; - //videoExtractor = ServiceList.getService(i).getExtractorInstance(); - break; - } - } - if(currentStreamingService == -1) { - Toast.makeText(this, R.string.url_not_supported_toast, Toast.LENGTH_LONG) - .show(); - } - //arguments.putString(VideoItemDetailFragment.VIDEO_URL, - // videoExtractor.getUrl(videoExtractor.getId(videoUrl)));//cleans URL - arguments.putString(VideoItemDetailFragment.VIDEO_URL, videoUrl); - - arguments.putBoolean(VideoItemDetailFragment.AUTO_PLAY, - PreferenceManager.getDefaultSharedPreferences(this) - .getBoolean(getString(R.string.autoplay_through_intent_key), false)); - } else { - videoUrl = getIntent().getStringExtra(VideoItemDetailFragment.VIDEO_URL); - currentStreamingService = getIntent().getIntExtra(VideoItemDetailFragment.STREAMING_SERVICE, -1); - arguments.putString(VideoItemDetailFragment.VIDEO_URL, videoUrl); - arguments.putInt(VideoItemDetailFragment.STREAMING_SERVICE, currentStreamingService); - arguments.putBoolean(VideoItemDetailFragment.AUTO_PLAY, false); - } - + handleIntent(getIntent()); } else { videoUrl = savedInstanceState.getString(VideoItemDetailFragment.VIDEO_URL); currentStreamingService = savedInstanceState.getInt(VideoItemDetailFragment.STREAMING_SERVICE); - arguments = savedInstanceState; + addFragment(savedInstanceState); } + } + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + setIntent(intent); + handleIntent(intent); + } + + private void handleIntent(Intent intent) { + Bundle arguments = new Bundle(); + // this means the video was called though another app + if (intent.getData() != null) { + videoUrl = intent.getData().toString(); + StreamingService[] serviceList = ServiceList.getServices(); + //StreamExtractor videoExtractor = null; + for (int i = 0; i < serviceList.length; i++) { + if (serviceList[i].getUrlIdHandlerInstance().acceptUrl(videoUrl)) { + arguments.putInt(VideoItemDetailFragment.STREAMING_SERVICE, i); + currentStreamingService = i; + //videoExtractor = ServiceList.getService(i).getExtractorInstance(); + break; + } + } + if(currentStreamingService == -1) { + Toast.makeText(this, R.string.url_not_supported_toast, Toast.LENGTH_LONG) + .show(); + } + //arguments.putString(VideoItemDetailFragment.VIDEO_URL, + // videoExtractor.getUrl(videoExtractor.getId(videoUrl)));//cleans URL + arguments.putString(VideoItemDetailFragment.VIDEO_URL, videoUrl); + + arguments.putBoolean(VideoItemDetailFragment.AUTO_PLAY, + PreferenceManager.getDefaultSharedPreferences(this) + .getBoolean(getString(R.string.autoplay_through_intent_key), false)); + } else { + videoUrl = intent.getStringExtra(VideoItemDetailFragment.VIDEO_URL); + currentStreamingService = intent.getIntExtra(VideoItemDetailFragment.STREAMING_SERVICE, -1); + arguments.putString(VideoItemDetailFragment.VIDEO_URL, videoUrl); + arguments.putInt(VideoItemDetailFragment.STREAMING_SERVICE, currentStreamingService); + arguments.putBoolean(VideoItemDetailFragment.AUTO_PLAY, false); + } + addFragment(arguments); + + } + + private void addFragment(final Bundle arguments) { // Create the detail fragment and add it to the activity // using a fragment transaction. fragment = new VideoItemDetailFragment(); fragment.setArguments(arguments); getSupportFragmentManager().beginTransaction() - .add(R.id.videoitem_detail_container, fragment) + .replace(R.id.videoitem_detail_container, fragment) .commit(); }