Remove ugly bitmap sharing and improvements
- Now it is just using the ImageLoader to load the image, and better yet, it already have cache implemented in it - Improve MainActivity intent handler - Improve utils classes
This commit is contained in:
parent
18b038d8e4
commit
932cb1d19c
|
@ -20,10 +20,6 @@ package org.schabi.newpipe;
|
||||||
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Singleton:
|
* Singleton:
|
||||||
* Used to send data between certain Activity/Services within the same process.
|
* Used to send data between certain Activity/Services within the same process.
|
||||||
|
@ -39,8 +35,5 @@ public class ActivityCommunicator {
|
||||||
return activityCommunicator;
|
return activityCommunicator;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Thumbnail send from VideoItemDetailFragment to BackgroundPlayer
|
|
||||||
public volatile Bitmap backgroundPlayerThumbnail;
|
|
||||||
|
|
||||||
public volatile Class returnActivity;
|
public volatile Class returnActivity;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ import org.schabi.newpipe.util.PermissionHelper;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
import org.schabi.newpipe.util.ThemeHelper;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements OnItemSelectedListener {
|
public class MainActivity extends AppCompatActivity implements OnItemSelectedListener {
|
||||||
private static final String TAG = MainActivity.class.toString();
|
//private static final String TAG = "MainActivity";
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Activity's LifeCycle
|
// Activity's LifeCycle
|
||||||
|
@ -57,12 +57,23 @@ public class MainActivity extends AppCompatActivity implements OnItemSelectedLis
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
||||||
if (savedInstanceState == null) initFragments();
|
|
||||||
|
if (getSupportFragmentManager() != null && getSupportFragmentManager().getBackStackEntryCount() == 0) {
|
||||||
|
initFragments();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onNewIntent(Intent intent) {
|
protected void onNewIntent(Intent intent) {
|
||||||
|
if (intent != null) {
|
||||||
|
// Return if launched from a launcher (e.g. Nova Launcher, Pixel Launcher ...)
|
||||||
|
// to not destroy the already created backstack
|
||||||
|
String action = intent.getAction();
|
||||||
|
if ((action != null && action.equals(Intent.ACTION_MAIN)) && intent.hasCategory(Intent.CATEGORY_LAUNCHER)) return;
|
||||||
|
}
|
||||||
|
|
||||||
super.onNewIntent(intent);
|
super.onNewIntent(intent);
|
||||||
|
setIntent(intent);
|
||||||
handleIntent(intent);
|
handleIntent(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,33 +8,57 @@ import org.schabi.newpipe.MainActivity;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
|
import org.schabi.newpipe.extractor.stream_info.AudioStream;
|
||||||
import org.schabi.newpipe.extractor.stream_info.StreamInfo;
|
import org.schabi.newpipe.extractor.stream_info.StreamInfo;
|
||||||
import org.schabi.newpipe.fragments.OnItemSelectedListener;
|
import org.schabi.newpipe.fragments.OnItemSelectedListener;
|
||||||
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
||||||
import org.schabi.newpipe.player.AbstractPlayer;
|
import org.schabi.newpipe.player.BackgroundPlayer;
|
||||||
|
import org.schabi.newpipe.player.BasePlayer;
|
||||||
|
import org.schabi.newpipe.player.VideoPlayer;
|
||||||
|
|
||||||
@SuppressWarnings({"unused", "WeakerAccess"})
|
@SuppressWarnings({"unused", "WeakerAccess"})
|
||||||
public class NavigationHelper {
|
public class NavigationHelper {
|
||||||
|
|
||||||
public static Intent getOpenPlayerIntent(Context context, Class targetClazz, StreamInfo info, int selectedStreamIndex) {
|
public static Intent getOpenVideoPlayerIntent(Context context, Class targetClazz, StreamInfo info, int selectedStreamIndex) {
|
||||||
return new Intent(context, targetClazz)
|
Intent mIntent = new Intent(context, targetClazz)
|
||||||
.putExtra(AbstractPlayer.VIDEO_TITLE, info.title)
|
.putExtra(BasePlayer.VIDEO_TITLE, info.title)
|
||||||
.putExtra(AbstractPlayer.VIDEO_URL, info.webpage_url)
|
.putExtra(BasePlayer.VIDEO_URL, info.webpage_url)
|
||||||
.putExtra(AbstractPlayer.CHANNEL_NAME, info.uploader)
|
.putExtra(BasePlayer.VIDEO_THUMBNAIL_URL, info.thumbnail_url)
|
||||||
.putExtra(AbstractPlayer.INDEX_SEL_VIDEO_STREAM, selectedStreamIndex)
|
.putExtra(BasePlayer.CHANNEL_NAME, info.uploader)
|
||||||
.putExtra(AbstractPlayer.VIDEO_STREAMS_LIST, Utils.getSortedStreamVideosList(context, info.video_streams, info.video_only_streams, false))
|
.putExtra(VideoPlayer.INDEX_SEL_VIDEO_STREAM, selectedStreamIndex)
|
||||||
.putExtra(AbstractPlayer.VIDEO_ONLY_AUDIO_STREAM, Utils.getHighestQualityAudio(info.audio_streams));
|
.putExtra(VideoPlayer.VIDEO_STREAMS_LIST, Utils.getSortedStreamVideosList(context, info.video_streams, info.video_only_streams, false))
|
||||||
|
.putExtra(VideoPlayer.VIDEO_ONLY_AUDIO_STREAM, Utils.getHighestQualityAudio(info.audio_streams));
|
||||||
|
if (info.start_position > 0) mIntent.putExtra(BasePlayer.START_POSITION, info.start_position * 1000);
|
||||||
|
return mIntent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Intent getOpenPlayerIntent(Context context, Class targetClazz, AbstractPlayer instance) {
|
|
||||||
|
public static Intent getOpenVideoPlayerIntent(Context context, Class targetClazz, VideoPlayer instance) {
|
||||||
return new Intent(context, targetClazz)
|
return new Intent(context, targetClazz)
|
||||||
.putExtra(AbstractPlayer.VIDEO_TITLE, instance.getVideoTitle())
|
.putExtra(BasePlayer.VIDEO_TITLE, instance.getVideoTitle())
|
||||||
.putExtra(AbstractPlayer.VIDEO_URL, instance.getVideoUrl())
|
.putExtra(BasePlayer.VIDEO_URL, instance.getVideoUrl())
|
||||||
.putExtra(AbstractPlayer.CHANNEL_NAME, instance.getChannelName())
|
.putExtra(BasePlayer.VIDEO_THUMBNAIL_URL, instance.getVideoThumbnailUrl())
|
||||||
.putExtra(AbstractPlayer.INDEX_SEL_VIDEO_STREAM, instance.getSelectedStreamIndex())
|
.putExtra(BasePlayer.CHANNEL_NAME, instance.getChannelName())
|
||||||
.putExtra(AbstractPlayer.VIDEO_STREAMS_LIST, instance.getVideoStreamsList())
|
.putExtra(VideoPlayer.INDEX_SEL_VIDEO_STREAM, instance.getSelectedStreamIndex())
|
||||||
.putExtra(AbstractPlayer.VIDEO_ONLY_AUDIO_STREAM, instance.getAudioStream())
|
.putExtra(VideoPlayer.VIDEO_STREAMS_LIST, instance.getVideoStreamsList())
|
||||||
.putExtra(AbstractPlayer.START_POSITION, ((int) instance.getPlayer().getCurrentPosition()));
|
.putExtra(VideoPlayer.VIDEO_ONLY_AUDIO_STREAM, instance.getAudioStream())
|
||||||
|
.putExtra(BasePlayer.START_POSITION, ((int) instance.getPlayer().getCurrentPosition()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Intent getOpenBackgroundPlayerIntent(Context context, StreamInfo info) {
|
||||||
|
return getOpenBackgroundPlayerIntent(context, info, info.audio_streams.get(Utils.getPreferredAudioFormat(context, info.audio_streams)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Intent getOpenBackgroundPlayerIntent(Context context, StreamInfo info, AudioStream audioStream) {
|
||||||
|
Intent mIntent = new Intent(context, BackgroundPlayer.class)
|
||||||
|
.putExtra(BasePlayer.VIDEO_TITLE, info.title)
|
||||||
|
.putExtra(BasePlayer.VIDEO_URL, info.webpage_url)
|
||||||
|
.putExtra(BasePlayer.VIDEO_THUMBNAIL_URL, info.thumbnail_url)
|
||||||
|
.putExtra(BasePlayer.CHANNEL_NAME, info.uploader)
|
||||||
|
.putExtra(BasePlayer.CHANNEL_NAME, info.uploader)
|
||||||
|
.putExtra(BackgroundPlayer.AUDIO_STREAM, audioStream);
|
||||||
|
if (info.start_position > 0) mIntent.putExtra(BasePlayer.START_POSITION, info.start_position * 1000);
|
||||||
|
return mIntent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -136,13 +136,19 @@ public class Utils {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int highestQualityIndex = 0;
|
||||||
|
|
||||||
|
// Try to find a audio stream with the preferred format
|
||||||
|
for (int i = 0; i < audioStreams.size(); i++) if (audioStreams.get(i).format == preferredFormat) highestQualityIndex = i;
|
||||||
|
|
||||||
|
// Try to find a audio stream with the highest bitrate and preferred format
|
||||||
for (int i = 0; i < audioStreams.size(); i++) {
|
for (int i = 0; i < audioStreams.size(); i++) {
|
||||||
if (audioStreams.get(i).format == preferredFormat) {
|
AudioStream audioStream = audioStreams.get(i);
|
||||||
return i;
|
if (audioStream.avgBitrate > audioStreams.get(highestQualityIndex).avgBitrate
|
||||||
}
|
&& audioStream.format == preferredFormat) highestQualityIndex = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return highestQualityIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -191,14 +197,13 @@ public class Utils {
|
||||||
}
|
}
|
||||||
return getSortedStreamVideosList(preferredFormat, showHigherResolutions, videoStreams, videoOnlyStreams, ascendingOrder);
|
return getSortedStreamVideosList(preferredFormat, showHigherResolutions, videoStreams, videoOnlyStreams, ascendingOrder);
|
||||||
}
|
}
|
||||||
//show_higher_resolutions_key
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Join the two lists of video streams (video_only and normal videos), and sort them according with preferred format
|
* Join the two lists of video streams (video_only and normal videos), and sort them according with preferred format
|
||||||
* chosen by the user
|
* chosen by the user
|
||||||
*
|
*
|
||||||
* @param preferredFormat format to give preference
|
* @param preferredFormat format to give preference
|
||||||
* @param showHigherResolutions
|
* @param showHigherResolutions show >1080p resolutions
|
||||||
* @param videoStreams normal videos list
|
* @param videoStreams normal videos list
|
||||||
* @param videoOnlyStreams video only stream list
|
* @param videoOnlyStreams video only stream list
|
||||||
* @param ascendingOrder true -> smallest to greatest | false -> greatest to smallest @return the sorted list
|
* @param ascendingOrder true -> smallest to greatest | false -> greatest to smallest @return the sorted list
|
||||||
|
|
Loading…
Reference in New Issue