Merge branch 'dev' into patch-7

This commit is contained in:
Christian Schabesberger 2018-10-06 18:16:10 +02:00 committed by GitHub
commit 6a35494ef1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
119 changed files with 420 additions and 688 deletions

View File

@ -106,7 +106,7 @@ public class App extends Application {
// https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling // https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling
RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() { RxJavaPlugins.setErrorHandler(new Consumer<Throwable>() {
@Override @Override
public void accept(@NonNull Throwable throwable) throws Exception { public void accept(@NonNull Throwable throwable) {
Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : " + Log.e(TAG, "RxJavaPlugins.ErrorHandler called with -> : " +
"throwable = [" + throwable.getClass().getName() + "]"); "throwable = [" + throwable.getClass().getName() + "]");

View File

@ -12,14 +12,12 @@ import android.view.View;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import com.squareup.leakcanary.RefWatcher; import com.squareup.leakcanary.RefWatcher;
import org.schabi.newpipe.report.UserAction;
import icepick.Icepick; import icepick.Icepick;
import icepick.State; import icepick.State;
public abstract class BaseFragment extends Fragment { public abstract class BaseFragment extends Fragment {
protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode()); protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
protected boolean DEBUG = MainActivity.DEBUG; protected final boolean DEBUG = MainActivity.DEBUG;
protected AppCompatActivity activity; protected AppCompatActivity activity;
public static final ImageLoader imageLoader = ImageLoader.getInstance(); public static final ImageLoader imageLoader = ImageLoader.getInstance();

View File

@ -43,7 +43,7 @@ public class Downloader implements org.schabi.newpipe.extractor.Downloader {
private static Downloader instance; private static Downloader instance;
private String mCookies; private String mCookies;
private OkHttpClient client; private final OkHttpClient client;
private Downloader(OkHttpClient.Builder builder) { private Downloader(OkHttpClient.Builder builder) {
this.client = builder this.client = builder

View File

@ -23,7 +23,6 @@ package org.schabi.newpipe;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -66,8 +65,6 @@ import org.schabi.newpipe.util.ServiceHelper;
import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.StateSaver;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import static org.schabi.newpipe.extractor.InfoItem.InfoType.PLAYLIST;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity"; private static final String TAG = "MainActivity";
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release"); public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");

View File

@ -85,7 +85,7 @@ public class ReCaptchaActivity extends AppCompatActivity {
} }
private class ReCaptchaWebViewClient extends WebViewClient { private class ReCaptchaWebViewClient extends WebViewClient {
private Activity context; private final Activity context;
private String mCookies; private String mCookies;
ReCaptchaWebViewClient(Activity ctx) { ReCaptchaWebViewClient(Activity ctx) {

View File

@ -1,7 +1,6 @@
package org.schabi.newpipe; package org.schabi.newpipe;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.FragmentManager;
import android.app.IntentService; import android.app.IntentService;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
@ -13,7 +12,6 @@ import android.preference.PreferenceManager;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
@ -38,7 +36,6 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfo; import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.extractor.stream.VideoStream;
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.helper.PlayerHelper;
import org.schabi.newpipe.player.playqueue.ChannelPlayQueue; import org.schabi.newpipe.player.playqueue.ChannelPlayQueue;
import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueue;
@ -51,14 +48,12 @@ import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.ThemeHelper; import org.schabi.newpipe.util.ThemeHelper;
import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Observer;
import icepick.Icepick; import icepick.Icepick;
import icepick.State; import icepick.State;
@ -86,7 +81,7 @@ public class RouterActivity extends AppCompatActivity {
protected int selectedPreviously = -1; protected int selectedPreviously = -1;
protected String currentUrl; protected String currentUrl;
protected CompositeDisposable disposables = new CompositeDisposable(); protected final CompositeDisposable disposables = new CompositeDisposable();
private boolean selectionIsDownload = false; private boolean selectionIsDownload = false;
@ -184,12 +179,16 @@ public class RouterActivity extends AppCompatActivity {
if (selectedChoiceKey.equals(alwaysAskKey)) { if (selectedChoiceKey.equals(alwaysAskKey)) {
final List<AdapterChoiceItem> choices = getChoicesForService(currentService, currentLinkType); final List<AdapterChoiceItem> choices = getChoicesForService(currentService, currentLinkType);
if (choices.size() == 1) { switch (choices.size()) {
handleChoice(choices.get(0).key); case 1:
} else if (choices.size() == 0) { handleChoice(choices.get(0).key);
handleChoice(showInfoKey); break;
} else { case 0:
showDialog(choices); handleChoice(showInfoKey);
break;
default:
showDialog(choices);
break;
} }
} else if (selectedChoiceKey.equals(showInfoKey)) { } else if (selectedChoiceKey.equals(showInfoKey)) {
handleChoice(showInfoKey); handleChoice(showInfoKey);

View File

@ -4,7 +4,6 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.webkit.WebView; import android.webkit.WebView;
@ -17,7 +16,7 @@ import java.lang.ref.WeakReference;
public class LicenseFragmentHelper extends AsyncTask<Object, Void, Integer> { public class LicenseFragmentHelper extends AsyncTask<Object, Void, Integer> {
WeakReference<Activity> weakReference; final WeakReference<Activity> weakReference;
private License license; private License license;
public LicenseFragmentHelper(@Nullable Activity activity) { public LicenseFragmentHelper(@Nullable Activity activity) {
@ -78,18 +77,18 @@ public class LicenseFragmentHelper extends AsyncTask<Object, Void, Integer> {
throw new NullPointerException("license is null"); throw new NullPointerException("license is null");
} }
String licenseContent = ""; StringBuilder licenseContent = new StringBuilder();
String webViewData; String webViewData;
try { try {
BufferedReader in = new BufferedReader(new InputStreamReader(context.getAssets().open(license.getFilename()), "UTF-8")); BufferedReader in = new BufferedReader(new InputStreamReader(context.getAssets().open(license.getFilename()), "UTF-8"));
String str; String str;
while ((str = in.readLine()) != null) { while ((str = in.readLine()) != null) {
licenseContent += str; licenseContent.append(str);
} }
in.close(); in.close();
// split the HTML file and insert the stylesheet into the HEAD of the file // split the HTML file and insert the stylesheet into the HEAD of the file
String[] insert = licenseContent.split("</head>"); String[] insert = licenseContent.toString().split("</head>");
webViewData = insert[0] + "<style type=\"text/css\">" webViewData = insert[0] + "<style type=\"text/css\">"
+ getLicenseStylesheet(context) + "</style></head>" + getLicenseStylesheet(context) + "</style></head>"
+ insert[1]; + insert[1];

View File

@ -30,7 +30,7 @@ public interface BasicDAO<Entity> {
/* Deletes */ /* Deletes */
@Delete @Delete
int delete(final Entity entity); void delete(final Entity entity);
@Delete @Delete
int delete(final Collection<Entity> entities); int delete(final Collection<Entity> entities);
@ -42,5 +42,5 @@ public interface BasicDAO<Entity> {
int update(final Entity entity); int update(final Entity entity);
@Update @Update
int update(final Collection<Entity> entities); void update(final Collection<Entity> entities);
} }

View File

@ -4,7 +4,6 @@ import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Query; import android.arch.persistence.room.Query;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.schabi.newpipe.database.BasicDAO;
import org.schabi.newpipe.database.history.model.SearchHistoryEntry; import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
import java.util.List; import java.util.List;

View File

@ -5,7 +5,6 @@ import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Query; import android.arch.persistence.room.Query;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import org.schabi.newpipe.database.BasicDAO;
import org.schabi.newpipe.database.history.model.StreamHistoryEntry; import org.schabi.newpipe.database.history.model.StreamHistoryEntry;
import org.schabi.newpipe.database.stream.StreamStatisticsEntry; import org.schabi.newpipe.database.stream.StreamStatisticsEntry;
import org.schabi.newpipe.database.history.model.StreamHistoryEntity; import org.schabi.newpipe.database.history.model.StreamHistoryEntity;

View File

@ -2,7 +2,6 @@ package org.schabi.newpipe.database.playlist.dao;
import android.arch.persistence.room.Dao; import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Query; import android.arch.persistence.room.Query;
import android.arch.persistence.room.Transaction;
import org.schabi.newpipe.database.BasicDAO; import org.schabi.newpipe.database.BasicDAO;
import org.schabi.newpipe.database.playlist.model.PlaylistEntity; import org.schabi.newpipe.database.playlist.model.PlaylistEntity;
@ -12,7 +11,6 @@ import java.util.List;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_ID; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_ID;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_NAME;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_TABLE; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_TABLE;
@Dao @Dao

View File

@ -8,7 +8,6 @@ import org.schabi.newpipe.database.BasicDAO;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity; import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import java.util.List; import java.util.List;

View File

@ -5,8 +5,6 @@ import android.arch.persistence.room.Entity;
import android.arch.persistence.room.Index; import android.arch.persistence.room.Index;
import android.arch.persistence.room.PrimaryKey; import android.arch.persistence.room.PrimaryKey;
import java.util.Date;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_NAME; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_NAME;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_TABLE; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_TABLE;

View File

@ -6,7 +6,6 @@ import android.arch.persistence.room.Ignore;
import android.arch.persistence.room.Index; import android.arch.persistence.room.Index;
import android.arch.persistence.room.PrimaryKey; import android.arch.persistence.room.PrimaryKey;
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.playlist.PlaylistLocalItem; import org.schabi.newpipe.database.playlist.PlaylistLocalItem;
import org.schabi.newpipe.extractor.playlist.PlaylistInfo; import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.Constants;

View File

@ -10,7 +10,6 @@ import org.schabi.newpipe.database.BasicDAO;
import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity; import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity;
import org.schabi.newpipe.database.stream.model.StreamEntity; import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.database.history.model.StreamHistoryEntity; import org.schabi.newpipe.database.history.model.StreamHistoryEntity;
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -23,7 +22,6 @@ import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_SERVI
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE; import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE;
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_URL; import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_URL;
import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_HISTORY_TABLE; import static org.schabi.newpipe.database.history.model.StreamHistoryEntity.STREAM_HISTORY_TABLE;
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_STATE_TABLE;
@Dao @Dao
public abstract class StreamDAO implements BasicDAO<StreamEntity> { public abstract class StreamDAO implements BasicDAO<StreamEntity> {

View File

@ -28,11 +28,11 @@ public class DeleteDownloadManager {
private static final String KEY_STATE = "delete_manager_state"; private static final String KEY_STATE = "delete_manager_state";
private View mView; private final View mView;
private HashSet<String> mPendingMap; private final HashSet<String> mPendingMap;
private List<Disposable> mDisposableList; private final List<Disposable> mDisposableList;
private DownloadManager mDownloadManager; private DownloadManager mDownloadManager;
private PublishSubject<DownloadMission> publishSubject = PublishSubject.create(); private final PublishSubject<DownloadMission> publishSubject = PublishSubject.create();
DeleteDownloadManager(Activity activity) { DeleteDownloadManager(Activity activity) {
mPendingMap = new HashSet<>(); mPendingMap = new HashSet<>();

View File

@ -55,7 +55,7 @@ public class DownloadDialog extends DialogFragment implements RadioGroup.OnCheck
private StreamItemAdapter<AudioStream> audioStreamsAdapter; private StreamItemAdapter<AudioStream> audioStreamsAdapter;
private StreamItemAdapter<VideoStream> videoStreamsAdapter; private StreamItemAdapter<VideoStream> videoStreamsAdapter;
private CompositeDisposable disposables = new CompositeDisposable(); private final CompositeDisposable disposables = new CompositeDisposable();
private EditText nameEditText; private EditText nameEditText;
private Spinner streamsSpinner; private Spinner streamsSpinner;

View File

@ -32,7 +32,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
import icepick.State; import icepick.State;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import static org.schabi.newpipe.util.AnimationUtils.animateView; import static org.schabi.newpipe.util.AnimationUtils.animateView;

View File

@ -2,7 +2,6 @@ package org.schabi.newpipe.fragments;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View File

@ -3,9 +3,9 @@ package org.schabi.newpipe.fragments.detail;
import java.io.Serializable; import java.io.Serializable;
class StackItem implements Serializable { class StackItem implements Serializable {
private int serviceId; private final int serviceId;
private String title; private String title;
private String url; private final String url;
StackItem(int serviceId, String url, String title) { StackItem(int serviceId, String url, String title) {
this.serviceId = serviceId; this.serviceId = serviceId;

View File

@ -760,7 +760,7 @@ public class VideoDetailFragment
* Stack that contains the "navigation history".<br> * Stack that contains the "navigation history".<br>
* The peek is the current video. * The peek is the current video.
*/ */
protected LinkedList<StackItem> stack = new LinkedList<>(); protected final LinkedList<StackItem> stack = new LinkedList<>();
public void clearHistory() { public void clearHistory() {
stack.clear(); stack.clear();

View File

@ -8,9 +8,6 @@ import android.view.View;
import org.schabi.newpipe.extractor.ListExtractor; import org.schabi.newpipe.extractor.ListExtractor;
import org.schabi.newpipe.extractor.ListInfo; import org.schabi.newpipe.extractor.ListInfo;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.Constants;
import java.util.Queue; import java.util.Queue;
@ -19,7 +16,6 @@ import icepick.State;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
public abstract class BaseListInfoFragment<I extends ListInfo> public abstract class BaseListInfoFragment<I extends ListInfo>

View File

@ -68,7 +68,7 @@ import static org.schabi.newpipe.util.AnimationUtils.animateView;
public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> { public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
private CompositeDisposable disposables = new CompositeDisposable(); private final CompositeDisposable disposables = new CompositeDisposable();
private Disposable subscribeButtonMonitor; private Disposable subscribeButtonMonitor;
private SubscriptionService subscriptionService; private SubscriptionService subscriptionService;
@ -90,8 +90,6 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
private MenuItem menuRssButton; private MenuItem menuRssButton;
private boolean mIsVisibleToUser = false;
public static ChannelFragment getInstance(int serviceId, String url, String name) { public static ChannelFragment getInstance(int serviceId, String url, String name) {
ChannelFragment instance = new ChannelFragment(); ChannelFragment instance = new ChannelFragment();
instance.setInitialData(serviceId, url, name); instance.setInitialData(serviceId, url, name);
@ -105,7 +103,6 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
@Override @Override
public void setUserVisibleHint(boolean isVisibleToUser) { public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser); super.setUserVisibleHint(isVisibleToUser);
mIsVisibleToUser = isVisibleToUser;
if(activity != null if(activity != null
&& useAsFrontPage && useAsFrontPage
&& isVisibleToUser) { && isVisibleToUser) {

View File

@ -5,7 +5,6 @@ import android.preference.PreferenceManager;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -19,8 +18,6 @@ import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.kiosk.KioskInfo; import org.schabi.newpipe.extractor.kiosk.KioskInfo;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory; import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
import org.schabi.newpipe.fragments.list.BaseListInfoFragment; import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.ExtractorHelper; import org.schabi.newpipe.util.ExtractorHelper;

View File

@ -20,7 +20,6 @@ import android.widget.TextView;
import org.reactivestreams.Subscriber; import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription; import org.reactivestreams.Subscription;
import org.schabi.newpipe.App;
import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity; import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
@ -30,7 +29,6 @@ import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.playlist.PlaylistInfo; import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandler;
import org.schabi.newpipe.fragments.list.BaseListInfoFragment; import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
import org.schabi.newpipe.info_list.InfoItemDialog; import org.schabi.newpipe.info_list.InfoItemDialog;
import org.schabi.newpipe.local.playlist.RemotePlaylistManager; import org.schabi.newpipe.local.playlist.RemotePlaylistManager;

View File

@ -122,12 +122,11 @@ public class SearchFragment
private String nextPageUrl; private String nextPageUrl;
private String contentCountry; private String contentCountry;
private boolean isSuggestionsEnabled = true; private boolean isSuggestionsEnabled = true;
private boolean isSearchHistoryEnabled = true;
private PublishSubject<String> suggestionPublisher = PublishSubject.create(); private final PublishSubject<String> suggestionPublisher = PublishSubject.create();
private Disposable searchDisposable; private Disposable searchDisposable;
private Disposable suggestionDisposable; private Disposable suggestionDisposable;
private CompositeDisposable disposables = new CompositeDisposable(); private final CompositeDisposable disposables = new CompositeDisposable();
private SuggestionListAdapter suggestionListAdapter; private SuggestionListAdapter suggestionListAdapter;
private HistoryRecordManager historyRecordManager; private HistoryRecordManager historyRecordManager;
@ -173,7 +172,7 @@ public class SearchFragment
suggestionListAdapter = new SuggestionListAdapter(activity); suggestionListAdapter = new SuggestionListAdapter(activity);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
isSearchHistoryEnabled = preferences.getBoolean(getString(R.string.enable_search_history_key), true); boolean isSearchHistoryEnabled = preferences.getBoolean(getString(R.string.enable_search_history_key), true);
suggestionListAdapter.setShowSuggestionHistory(isSearchHistoryEnabled); suggestionListAdapter.setShowSuggestionHistory(isSearchHistoryEnabled);
historyRecordManager = new HistoryRecordManager(context); historyRecordManager = new HistoryRecordManager(context);

View File

@ -45,7 +45,7 @@ public class InfoItemBuilder {
private static final String TAG = InfoItemBuilder.class.toString(); private static final String TAG = InfoItemBuilder.class.toString();
private final Context context; private final Context context;
private ImageLoader imageLoader = ImageLoader.getInstance(); private final ImageLoader imageLoader = ImageLoader.getInstance();
private OnClickGesture<StreamInfoItem> onStreamSelectedListener; private OnClickGesture<StreamInfoItem> onStreamSelectedListener;
private OnClickGesture<ChannelInfoItem> onChannelSelectedListener; private OnClickGesture<ChannelInfoItem> onChannelSelectedListener;

View File

@ -5,7 +5,6 @@ import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;

View File

@ -33,7 +33,7 @@ public class LocalItemBuilder {
private static final String TAG = LocalItemBuilder.class.toString(); private static final String TAG = LocalItemBuilder.class.toString();
private final Context context; private final Context context;
private ImageLoader imageLoader = ImageLoader.getInstance(); private final ImageLoader imageLoader = ImageLoader.getInstance();
private OnClickGesture<LocalItem> onSelectedListener; private OnClickGesture<LocalItem> onSelectedListener;

View File

@ -58,7 +58,7 @@ public abstract class PlaylistDialog extends DialogFragment implements StateSave
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void readFrom(@NonNull Queue<Object> savedObjects) throws Exception { public void readFrom(@NonNull Queue<Object> savedObjects) {
streamEntities = (List<StreamEntity>) savedObjects.poll(); streamEntities = (List<StreamEntity>) savedObjects.poll();
} }

View File

@ -36,8 +36,6 @@ import io.reactivex.MaybeObserver;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Predicate;
public class FeedFragment extends BaseListFragment<List<SubscriptionEntity>, Void> { public class FeedFragment extends BaseListFragment<List<SubscriptionEntity>, Void> {

View File

@ -1,7 +1,6 @@
package org.schabi.newpipe.local.history; package org.schabi.newpipe.local.history;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;

View File

@ -45,7 +45,6 @@ import java.util.List;
import io.reactivex.Flowable; import io.reactivex.Flowable;
import io.reactivex.Maybe; import io.reactivex.Maybe;
import io.reactivex.Scheduler;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;

View File

@ -21,7 +21,6 @@ import org.schabi.newpipe.R;
import org.schabi.newpipe.database.LocalItem; import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.stream.StreamStatisticsEntry; import org.schabi.newpipe.database.stream.StreamStatisticsEntry;
import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.fragments.list.BaseListFragment;
import org.schabi.newpipe.local.BaseLocalListFragment; import org.schabi.newpipe.local.BaseLocalListFragment;
import org.schabi.newpipe.info_list.InfoItemDialog; import org.schabi.newpipe.info_list.InfoItemDialog;
import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueue;
@ -57,7 +56,7 @@ public class StatisticsPlaylistFragment
/* Used for independent events */ /* Used for independent events */
private Subscription databaseSubscription; private Subscription databaseSubscription;
private HistoryRecordManager recordManager; private HistoryRecordManager recordManager;
private CompositeDisposable disposables = new CompositeDisposable(); private final CompositeDisposable disposables = new CompositeDisposable();
private enum StatisticSortMode { private enum StatisticSortMode {
LAST_PLAYED, LAST_PLAYED,

View File

@ -16,7 +16,6 @@ import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.content.LocalBroadcastManager; import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -40,7 +39,6 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor; import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor;
import org.schabi.newpipe.fragments.BaseStateFragment; import org.schabi.newpipe.fragments.BaseStateFragment;
import org.schabi.newpipe.info_list.InfoListAdapter; import org.schabi.newpipe.info_list.InfoListAdapter;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService; import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService;
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService; import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService;
@ -81,7 +79,6 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
protected Parcelable itemsListState; protected Parcelable itemsListState;
private InfoListAdapter infoListAdapter; private InfoListAdapter infoListAdapter;
private View headerRootLayout;
private View whatsNewItemListHeader; private View whatsNewItemListHeader;
private View importExportListHeader; private View importExportListHeader;
@ -291,6 +288,7 @@ public class SubscriptionFragment extends BaseStateFragment<List<SubscriptionEnt
itemsList = rootView.findViewById(R.id.items_list); itemsList = rootView.findViewById(R.id.items_list);
itemsList.setLayoutManager(new LinearLayoutManager(activity)); itemsList.setLayoutManager(new LinearLayoutManager(activity));
View headerRootLayout;
infoListAdapter.setHeader(headerRootLayout = activity.getLayoutInflater().inflate(R.layout.subscription_header, itemsList, false)); infoListAdapter.setHeader(headerRootLayout = activity.getLayoutInflater().inflate(R.layout.subscription_header, itemsList, false));
whatsNewItemListHeader = headerRootLayout.findViewById(R.id.whats_new); whatsNewItemListHeader = headerRootLayout.findViewById(R.id.whats_new);
importExportListHeader = headerRootLayout.findViewById(R.id.import_export); importExportListHeader = headerRootLayout.findViewById(R.id.import_export);

View File

@ -55,10 +55,10 @@ public class SubscriptionService {
private static final int SUBSCRIPTION_DEBOUNCE_INTERVAL = 500; private static final int SUBSCRIPTION_DEBOUNCE_INTERVAL = 500;
private static final int SUBSCRIPTION_THREAD_POOL_SIZE = 4; private static final int SUBSCRIPTION_THREAD_POOL_SIZE = 4;
private AppDatabase db; private final AppDatabase db;
private Flowable<List<SubscriptionEntity>> subscription; private final Flowable<List<SubscriptionEntity>> subscription;
private Scheduler subscriptionScheduler; private final Scheduler subscriptionScheduler;
private SubscriptionService(Context context) { private SubscriptionService(Context context) {
db = NewPipeDatabase.getInstance(context.getApplicationContext()); db = NewPipeDatabase.getInstance(context.getApplicationContext());
@ -116,7 +116,7 @@ public class SubscriptionService {
public Completable updateChannelInfo(final ChannelInfo info) { public Completable updateChannelInfo(final ChannelInfo info) {
final Function<List<SubscriptionEntity>, CompletableSource> update = new Function<List<SubscriptionEntity>, CompletableSource>() { final Function<List<SubscriptionEntity>, CompletableSource> update = new Function<List<SubscriptionEntity>, CompletableSource>() {
@Override @Override
public CompletableSource apply(@NonNull List<SubscriptionEntity> subscriptionEntities) throws Exception { public CompletableSource apply(@NonNull List<SubscriptionEntity> subscriptionEntities) {
if (DEBUG) Log.d(TAG, "updateChannelInfo() called with: subscriptionEntities = [" + subscriptionEntities + "]"); if (DEBUG) Log.d(TAG, "updateChannelInfo() called with: subscriptionEntities = [" + subscriptionEntities + "]");
if (subscriptionEntities.size() == 1) { if (subscriptionEntities.size() == 1) {
SubscriptionEntity subscription = subscriptionEntities.get(0); SubscriptionEntity subscription = subscriptionEntities.get(0);

View File

@ -58,8 +58,8 @@ public abstract class BaseImportExportService extends Service {
protected NotificationCompat.Builder notificationBuilder; protected NotificationCompat.Builder notificationBuilder;
protected SubscriptionService subscriptionService; protected SubscriptionService subscriptionService;
protected CompositeDisposable disposables = new CompositeDisposable(); protected final CompositeDisposable disposables = new CompositeDisposable();
protected PublishProcessor<String> notificationUpdater = PublishProcessor.create(); protected final PublishProcessor<String> notificationUpdater = PublishProcessor.create();
@Nullable @Nullable
@Override @Override
@ -90,9 +90,9 @@ public abstract class BaseImportExportService extends Service {
private static final int NOTIFICATION_SAMPLING_PERIOD = 2500; private static final int NOTIFICATION_SAMPLING_PERIOD = 2500;
protected AtomicInteger currentProgress = new AtomicInteger(-1); protected final AtomicInteger currentProgress = new AtomicInteger(-1);
protected AtomicInteger maxProgress = new AtomicInteger(-1); protected final AtomicInteger maxProgress = new AtomicInteger(-1);
protected ImportExportEventListener eventListener = new ImportExportEventListener() { protected final ImportExportEventListener eventListener = new ImportExportEventListener() {
@Override @Override
public void onSizeReceived(int size) { public void onSizeReceived(int size) {
maxProgress.set(size); maxProgress.set(size);
@ -187,13 +187,13 @@ public abstract class BaseImportExportService extends Service {
protected Toast toast; protected Toast toast;
protected void showToast(@StringRes int message) { protected void showToast(@StringRes int message) {
showToast(getString(message), Toast.LENGTH_SHORT); showToast(getString(message));
} }
protected void showToast(String message, int duration) { protected void showToast(String message) {
if (toast != null) toast.cancel(); if (toast != null) toast.cancel();
toast = Toast.makeText(this, message, duration); toast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
toast.show(); toast.show();
} }

View File

@ -144,12 +144,16 @@ public class SubscriptionsImportService extends BaseImportExportService {
showToast(R.string.import_ongoing); showToast(R.string.import_ongoing);
Flowable<List<SubscriptionItem>> flowable = null; Flowable<List<SubscriptionItem>> flowable = null;
if (currentMode == CHANNEL_URL_MODE) { switch (currentMode) {
flowable = importFromChannelUrl(); case CHANNEL_URL_MODE:
} else if (currentMode == INPUT_STREAM_MODE) { flowable = importFromChannelUrl();
flowable = importFromInputStream(); break;
} else if (currentMode == PREVIOUS_EXPORT_MODE) { case INPUT_STREAM_MODE:
flowable = importFromPreviousExport(); flowable = importFromInputStream();
break;
case PREVIOUS_EXPORT_MODE:
flowable = importFromPreviousExport();
break;
} }
if (flowable == null) { if (flowable == null) {

View File

@ -230,7 +230,8 @@ public abstract class BasePlayer implements
int sizeBeforeAppend = playQueue.size(); int sizeBeforeAppend = playQueue.size();
playQueue.append(queue.getStreams()); playQueue.append(queue.getStreams());
if (intent.getBooleanExtra(SELECT_ON_APPEND, false) && if ((intent.getBooleanExtra(SELECT_ON_APPEND, false) ||
getCurrentState() == STATE_COMPLETED) &&
queue.getStreams().size() > 0) { queue.getStreams().size() > 0) {
playQueue.setIndex(sizeBeforeAppend); playQueue.setIndex(sizeBeforeAppend);
} }

View File

@ -175,6 +175,10 @@ public final class MainVideoPlayer extends AppCompatActivity
setLandscape(lastOrientationWasLandscape); setLandscape(lastOrientationWasLandscape);
} }
final int lastResizeMode = defaultPreferences.getInt(
getString(R.string.last_resize_mode), AspectRatioFrameLayout.RESIZE_MODE_FIT);
playerImpl.setResizeMode(lastResizeMode);
// Upon going in or out of multiwindow mode, isInMultiWindow will always be false, // Upon going in or out of multiwindow mode, isInMultiWindow will always be false,
// since the first onResume needs to restore the player. // since the first onResume needs to restore the player.
// Subsequent onResume calls while multiwindow mode remains the same and the player is // Subsequent onResume calls while multiwindow mode remains the same and the player is
@ -705,14 +709,27 @@ public final class MainVideoPlayer extends AppCompatActivity
@Override @Override
protected int nextResizeMode(int currentResizeMode) { protected int nextResizeMode(int currentResizeMode) {
final int newResizeMode;
switch (currentResizeMode) { switch (currentResizeMode) {
case AspectRatioFrameLayout.RESIZE_MODE_FIT: case AspectRatioFrameLayout.RESIZE_MODE_FIT:
return AspectRatioFrameLayout.RESIZE_MODE_FILL; newResizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL;
break;
case AspectRatioFrameLayout.RESIZE_MODE_FILL: case AspectRatioFrameLayout.RESIZE_MODE_FILL:
return AspectRatioFrameLayout.RESIZE_MODE_ZOOM; newResizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM;
break;
default: default:
return AspectRatioFrameLayout.RESIZE_MODE_FIT; newResizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT;
break;
} }
storeResizeMode(newResizeMode);
return newResizeMode;
}
private void storeResizeMode(@AspectRatioFrameLayout.ResizeMode int resizeMode) {
defaultPreferences.edit()
.putInt(getString(R.string.last_resize_mode), resizeMode)
.apply();
} }
@Override @Override

View File

@ -114,7 +114,6 @@ public final class PopupVideoPlayer extends Service {
private View closeOverlayView; private View closeOverlayView;
private FloatingActionButton closeOverlayButton; private FloatingActionButton closeOverlayButton;
private WindowManager.LayoutParams closeOverlayLayoutParams;
private int tossFlingVelocity; private int tossFlingVelocity;
@ -248,7 +247,7 @@ public final class PopupVideoPlayer extends Service {
final int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE final int flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
closeOverlayLayoutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams closeOverlayLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
layoutParamType, layoutParamType,
flags, flags,

View File

@ -137,16 +137,16 @@ public abstract class VideoPlayer extends BasePlayer
private TextView captionTextView; private TextView captionTextView;
private ValueAnimator controlViewAnimator; private ValueAnimator controlViewAnimator;
private Handler controlsVisibilityHandler = new Handler(); private final Handler controlsVisibilityHandler = new Handler();
boolean isSomePopupMenuVisible = false; boolean isSomePopupMenuVisible = false;
private int qualityPopupMenuGroupId = 69; private final int qualityPopupMenuGroupId = 69;
private PopupMenu qualityPopupMenu; private PopupMenu qualityPopupMenu;
private int playbackSpeedPopupMenuGroupId = 79; private final int playbackSpeedPopupMenuGroupId = 79;
private PopupMenu playbackSpeedPopupMenu; private PopupMenu playbackSpeedPopupMenu;
private int captionPopupMenuGroupId = 89; private final int captionPopupMenuGroupId = 89;
private PopupMenu captionPopupMenu; private PopupMenu captionPopupMenu;
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -683,12 +683,17 @@ public abstract class VideoPlayer extends BasePlayer
if (getAspectRatioFrameLayout() != null) { if (getAspectRatioFrameLayout() != null) {
final int currentResizeMode = getAspectRatioFrameLayout().getResizeMode(); final int currentResizeMode = getAspectRatioFrameLayout().getResizeMode();
final int newResizeMode = nextResizeMode(currentResizeMode); final int newResizeMode = nextResizeMode(currentResizeMode);
getAspectRatioFrameLayout().setResizeMode(newResizeMode); setResizeMode(newResizeMode);
getResizeView().setText(PlayerHelper.resizeTypeOf(context, newResizeMode));
} }
} }
protected void setResizeMode(@AspectRatioFrameLayout.ResizeMode final int resizeMode) {
getAspectRatioFrameLayout().setResizeMode(resizeMode);
getResizeView().setText(PlayerHelper.resizeTypeOf(context, resizeMode));
}
protected abstract int nextResizeMode(@AspectRatioFrameLayout.ResizeMode final int resizeMode); protected abstract int nextResizeMode(@AspectRatioFrameLayout.ResizeMode final int resizeMode);
/*////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////////
// SeekBar Listener // SeekBar Listener
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/

View File

@ -116,7 +116,7 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener,
private void onAudioFocusGain() { private void onAudioFocusGain() {
Log.d(TAG, "onAudioFocusGain() called"); Log.d(TAG, "onAudioFocusGain() called");
player.setVolume(DUCK_AUDIO_TO); player.setVolume(DUCK_AUDIO_TO);
animateAudio(DUCK_AUDIO_TO, 1f, DUCK_DURATION); animateAudio(DUCK_AUDIO_TO, 1f);
if (PlayerHelper.isResumeAfterAudioFocusGain(context)) { if (PlayerHelper.isResumeAfterAudioFocusGain(context)) {
player.setPlayWhenReady(true); player.setPlayWhenReady(true);
@ -131,13 +131,13 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener,
private void onAudioFocusLossCanDuck() { private void onAudioFocusLossCanDuck() {
Log.d(TAG, "onAudioFocusLossCanDuck() called"); Log.d(TAG, "onAudioFocusLossCanDuck() called");
// Set the volume to 1/10 on ducking // Set the volume to 1/10 on ducking
animateAudio(player.getVolume(), DUCK_AUDIO_TO, DUCK_DURATION); animateAudio(player.getVolume(), DUCK_AUDIO_TO);
} }
private void animateAudio(final float from, final float to, int duration) { private void animateAudio(final float from, final float to) {
ValueAnimator valueAnimator = new ValueAnimator(); ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setFloatValues(from, to); valueAnimator.setFloatValues(from, to);
valueAnimator.setDuration(duration); valueAnimator.setDuration(AudioReactor.DUCK_DURATION);
valueAnimator.addListener(new AnimatorListenerAdapter() { valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override @Override
public void onAnimationStart(Animator animation) { public void onAnimationStart(Animator animation) {

View File

@ -4,12 +4,9 @@ import android.content.Context;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log; import android.util.Log;
import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSource; import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSource;
import com.google.android.exoplayer2.upstream.FileDataSource; import com.google.android.exoplayer2.upstream.FileDataSource;
import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.upstream.cache.CacheDataSink; import com.google.android.exoplayer2.upstream.cache.CacheDataSink;
@ -17,8 +14,6 @@ import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor; import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor;
import com.google.android.exoplayer2.upstream.cache.SimpleCache; import com.google.android.exoplayer2.upstream.cache.SimpleCache;
import org.schabi.newpipe.Downloader;
import java.io.File; import java.io.File;
/* package-private */ class CacheFactory implements DataSource.Factory { /* package-private */ class CacheFactory implements DataSource.Factory {

View File

@ -66,25 +66,15 @@ public class PlaybackParameterDialog extends DialogFragment {
private double stepSize = DEFAULT_STEP; private double stepSize = DEFAULT_STEP;
@Nullable private SeekBar tempoSlider; @Nullable private SeekBar tempoSlider;
@Nullable private TextView tempoMinimumText;
@Nullable private TextView tempoMaximumText;
@Nullable private TextView tempoCurrentText; @Nullable private TextView tempoCurrentText;
@Nullable private TextView tempoStepDownText; @Nullable private TextView tempoStepDownText;
@Nullable private TextView tempoStepUpText; @Nullable private TextView tempoStepUpText;
@Nullable private SeekBar pitchSlider; @Nullable private SeekBar pitchSlider;
@Nullable private TextView pitchMinimumText;
@Nullable private TextView pitchMaximumText;
@Nullable private TextView pitchCurrentText; @Nullable private TextView pitchCurrentText;
@Nullable private TextView pitchStepDownText; @Nullable private TextView pitchStepDownText;
@Nullable private TextView pitchStepUpText; @Nullable private TextView pitchStepUpText;
@Nullable private TextView stepSizeOnePercentText;
@Nullable private TextView stepSizeFivePercentText;
@Nullable private TextView stepSizeTenPercentText;
@Nullable private TextView stepSizeTwentyFivePercentText;
@Nullable private TextView stepSizeOneHundredPercentText;
@Nullable private CheckBox unhookingCheckbox; @Nullable private CheckBox unhookingCheckbox;
@Nullable private CheckBox skipSilenceCheckbox; @Nullable private CheckBox skipSilenceCheckbox;
@ -181,8 +171,8 @@ public class PlaybackParameterDialog extends DialogFragment {
private void setupTempoControl(@NonNull View rootView) { private void setupTempoControl(@NonNull View rootView) {
tempoSlider = rootView.findViewById(R.id.tempoSeekbar); tempoSlider = rootView.findViewById(R.id.tempoSeekbar);
tempoMinimumText = rootView.findViewById(R.id.tempoMinimumText); TextView tempoMinimumText = rootView.findViewById(R.id.tempoMinimumText);
tempoMaximumText = rootView.findViewById(R.id.tempoMaximumText); TextView tempoMaximumText = rootView.findViewById(R.id.tempoMaximumText);
tempoCurrentText = rootView.findViewById(R.id.tempoCurrentText); tempoCurrentText = rootView.findViewById(R.id.tempoCurrentText);
tempoStepUpText = rootView.findViewById(R.id.tempoStepUp); tempoStepUpText = rootView.findViewById(R.id.tempoStepUp);
tempoStepDownText = rootView.findViewById(R.id.tempoStepDown); tempoStepDownText = rootView.findViewById(R.id.tempoStepDown);
@ -203,8 +193,8 @@ public class PlaybackParameterDialog extends DialogFragment {
private void setupPitchControl(@NonNull View rootView) { private void setupPitchControl(@NonNull View rootView) {
pitchSlider = rootView.findViewById(R.id.pitchSeekbar); pitchSlider = rootView.findViewById(R.id.pitchSeekbar);
pitchMinimumText = rootView.findViewById(R.id.pitchMinimumText); TextView pitchMinimumText = rootView.findViewById(R.id.pitchMinimumText);
pitchMaximumText = rootView.findViewById(R.id.pitchMaximumText); TextView pitchMaximumText = rootView.findViewById(R.id.pitchMaximumText);
pitchCurrentText = rootView.findViewById(R.id.pitchCurrentText); pitchCurrentText = rootView.findViewById(R.id.pitchCurrentText);
pitchStepDownText = rootView.findViewById(R.id.pitchStepDown); pitchStepDownText = rootView.findViewById(R.id.pitchStepDown);
pitchStepUpText = rootView.findViewById(R.id.pitchStepUp); pitchStepUpText = rootView.findViewById(R.id.pitchStepUp);
@ -247,11 +237,11 @@ public class PlaybackParameterDialog extends DialogFragment {
} }
private void setupStepSizeSelector(@NonNull final View rootView) { private void setupStepSizeSelector(@NonNull final View rootView) {
stepSizeOnePercentText = rootView.findViewById(R.id.stepSizeOnePercent); TextView stepSizeOnePercentText = rootView.findViewById(R.id.stepSizeOnePercent);
stepSizeFivePercentText = rootView.findViewById(R.id.stepSizeFivePercent); TextView stepSizeFivePercentText = rootView.findViewById(R.id.stepSizeFivePercent);
stepSizeTenPercentText = rootView.findViewById(R.id.stepSizeTenPercent); TextView stepSizeTenPercentText = rootView.findViewById(R.id.stepSizeTenPercent);
stepSizeTwentyFivePercentText = rootView.findViewById(R.id.stepSizeTwentyFivePercent); TextView stepSizeTwentyFivePercentText = rootView.findViewById(R.id.stepSizeTwentyFivePercent);
stepSizeOneHundredPercentText = rootView.findViewById(R.id.stepSizeOneHundredPercent); TextView stepSizeOneHundredPercentText = rootView.findViewById(R.id.stepSizeOneHundredPercent);
if (stepSizeOnePercentText != null) { if (stepSizeOnePercentText != null) {
stepSizeOnePercentText.setText(getPercentString(STEP_ONE_PERCENT_VALUE)); stepSizeOnePercentText.setText(getPercentString(STEP_ONE_PERCENT_VALUE));

View File

@ -203,7 +203,7 @@ public class PlayerHelper {
@NonNull @NonNull
public static SeekParameters getSeekParameters(@NonNull final Context context) { public static SeekParameters getSeekParameters(@NonNull final Context context) {
return isUsingInexactSeek(context, false) ? return isUsingInexactSeek(context) ?
SeekParameters.CLOSEST_SYNC : SeekParameters.EXACT; SeekParameters.CLOSEST_SYNC : SeekParameters.EXACT;
} }
@ -318,8 +318,8 @@ public class PlayerHelper {
return getPreferences(context).getBoolean(context.getString(R.string.popup_remember_size_pos_key), b); return getPreferences(context).getBoolean(context.getString(R.string.popup_remember_size_pos_key), b);
} }
private static boolean isUsingInexactSeek(@NonNull final Context context, final boolean b) { private static boolean isUsingInexactSeek(@NonNull final Context context) {
return getPreferences(context).getBoolean(context.getString(R.string.use_inexact_seek_key), b); return getPreferences(context).getBoolean(context.getString(R.string.use_inexact_seek_key), false);
} }
private static boolean isAutoQueueEnabled(@NonNull final Context context, final boolean b) { private static boolean isAutoQueueEnabled(@NonNull final Context context, final boolean b) {

View File

@ -79,7 +79,7 @@ public class PlayQueueNavigator implements MediaSessionConnector.QueueNavigator
private void publishFloatingQueueWindow() { private void publishFloatingQueueWindow() {
if (callback.getQueueSize() == 0) { if (callback.getQueueSize() == 0) {
mediaSession.setQueue(Collections.<MediaSessionCompat.QueueItem>emptyList()); mediaSession.setQueue(Collections.emptyList());
activeQueueItemId = MediaSessionCompat.QueueItem.UNKNOWN_ID; activeQueueItemId = MediaSessionCompat.QueueItem.UNKNOWN_ID;
return; return;
} }

View File

@ -8,7 +8,7 @@ import org.schabi.newpipe.player.mediasession.MediaSessionCallback;
import org.schabi.newpipe.player.playqueue.PlayQueueItem; import org.schabi.newpipe.player.playqueue.PlayQueueItem;
public class BasePlayerMediaSession implements MediaSessionCallback { public class BasePlayerMediaSession implements MediaSessionCallback {
private BasePlayer player; private final BasePlayer player;
public BasePlayerMediaSession(final BasePlayer player) { public BasePlayerMediaSession(final BasePlayer player) {
this.player = player; this.player = player;

View File

@ -4,7 +4,6 @@ import android.support.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
@ -12,7 +11,6 @@ import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.FixedTrackSelection; import com.google.android.exoplayer2.trackselection.FixedTrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util;
/** /**
* This class allows irregular text language labels for use when selecting text captions and * This class allows irregular text language labels for use when selecting text captions and
@ -55,7 +53,7 @@ public class CustomTrackSelector extends DefaultTrackSelector {
/** @see DefaultTrackSelector#selectTextTrack(TrackGroupArray, int[][], Parameters) */ /** @see DefaultTrackSelector#selectTextTrack(TrackGroupArray, int[][], Parameters) */
@Override @Override
protected TrackSelection selectTextTrack(TrackGroupArray groups, int[][] formatSupport, protected TrackSelection selectTextTrack(TrackGroupArray groups, int[][] formatSupport,
Parameters params) throws ExoPlaybackException { Parameters params) {
TrackGroup selectedGroup = null; TrackGroup selectedGroup = null;
int selectedTrackIndex = 0; int selectedTrackIndex = 0;
int selectedTrackScore = 0; int selectedTrackScore = 0;

View File

@ -335,7 +335,7 @@ public class MediaSourceManager {
private void loadImmediate() { private void loadImmediate() {
if (DEBUG) Log.d(TAG, "MediaSource - loadImmediate() called"); if (DEBUG) Log.d(TAG, "MediaSource - loadImmediate() called");
final ItemsToLoad itemsToLoad = getItemsToLoad(playQueue, WINDOW_SIZE); final ItemsToLoad itemsToLoad = getItemsToLoad(playQueue);
if (itemsToLoad == null) return; if (itemsToLoad == null) return;
// Evict the previous items being loaded to free up memory, before start loading new ones // Evict the previous items being loaded to free up memory, before start loading new ones
@ -472,8 +472,7 @@ public class MediaSourceManager {
// Manager Helpers // Manager Helpers
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
@Nullable @Nullable
private static ItemsToLoad getItemsToLoad(@NonNull final PlayQueue playQueue, private static ItemsToLoad getItemsToLoad(@NonNull final PlayQueue playQueue) {
final int windowSize) {
// The current item has higher priority // The current item has higher priority
final int currentIndex = playQueue.getIndex(); final int currentIndex = playQueue.getIndex();
final PlayQueueItem currentItem = playQueue.getItem(currentIndex); final PlayQueueItem currentItem = playQueue.getItem(currentIndex);
@ -482,8 +481,8 @@ public class MediaSourceManager {
// The rest are just for seamless playback // The rest are just for seamless playback
// Although timeline is not updated prior to the current index, these sources are still // Although timeline is not updated prior to the current index, these sources are still
// loaded into the cache for faster retrieval at a potentially later time. // loaded into the cache for faster retrieval at a potentially later time.
final int leftBound = Math.max(0, currentIndex - windowSize); final int leftBound = Math.max(0, currentIndex - MediaSourceManager.WINDOW_SIZE);
final int rightLimit = currentIndex + windowSize + 1; final int rightLimit = currentIndex + MediaSourceManager.WINDOW_SIZE + 1;
final int rightBound = Math.min(playQueue.size(), rightLimit); final int rightBound = Math.min(playQueue.size(), rightLimit);
final Set<PlayQueueItem> neighbors = new ArraySet<>( final Set<PlayQueueItem> neighbors = new ArraySet<>(
playQueue.getStreams().subList(leftBound,rightBound)); playQueue.getStreams().subList(leftBound,rightBound));

View File

@ -8,8 +8,6 @@ import com.google.android.exoplayer2.source.MediaSource;
import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.player.playqueue.PlayQueueItem; import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import java.util.List;
public interface PlaybackListener { public interface PlaybackListener {
/** /**

View File

@ -19,14 +19,14 @@ abstract class AbstractInfoPlayQueue<T extends ListInfo, U extends InfoItem> ext
boolean isInitial; boolean isInitial;
boolean isComplete; boolean isComplete;
int serviceId; final int serviceId;
String baseUrl; final String baseUrl;
String nextUrl; String nextUrl;
transient Disposable fetchReactor; transient Disposable fetchReactor;
AbstractInfoPlayQueue(final U item) { AbstractInfoPlayQueue(final U item) {
this(item.getServiceId(), item.getUrl(), null, Collections.<StreamInfoItem>emptyList(), 0); this(item.getServiceId(), item.getUrl(), null, Collections.emptyList(), 0);
} }
AbstractInfoPlayQueue(final int serviceId, AbstractInfoPlayQueue(final int serviceId,

View File

@ -5,10 +5,8 @@ import android.text.TextUtils;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.util.ImageDisplayConstants; import org.schabi.newpipe.util.ImageDisplayConstants;
import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.Localization;

View File

@ -6,8 +6,6 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.info_list.holder.InfoItemHolder;
/** /**
* Created by Christian Schabesberger on 01.08.16. * Created by Christian Schabesberger on 01.08.16.

View File

@ -5,7 +5,6 @@ import android.support.annotation.NonNull;
import org.acra.collector.CrashReportData; import org.acra.collector.CrashReportData;
import org.acra.sender.ReportSender; import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderException;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
/* /*
@ -31,7 +30,7 @@ import org.schabi.newpipe.R;
public class AcraReportSender implements ReportSender { public class AcraReportSender implements ReportSender {
@Override @Override
public void send(@NonNull Context context, @NonNull CrashReportData report) throws ReportSenderException { public void send(@NonNull Context context, @NonNull CrashReportData report) {
ErrorActivity.reportError(context, report, ErrorActivity.reportError(context, report,
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,"none", ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,"none",
"App crash, UI failure", R.string.app_ui_crash)); "App crash, UI failure", R.string.app_ui_crash));

View File

@ -3,7 +3,6 @@ package org.schabi.newpipe.report;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color; import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
@ -46,7 +45,6 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.Vector; import java.util.Vector;
import java.util.concurrent.atomic.AtomicBoolean;
/* /*
* Created by Christian Schabesberger on 24.10.15. * Created by Christian Schabesberger on 24.10.15.
@ -81,12 +79,7 @@ public class ErrorActivity extends AppCompatActivity {
private ErrorInfo errorInfo; private ErrorInfo errorInfo;
private Class returnActivity; private Class returnActivity;
private String currentTimeStamp; private String currentTimeStamp;
// views
private TextView errorView;
private EditText userCommentBox; private EditText userCommentBox;
private Button reportButton;
private TextView infoView;
private TextView errorMessageView;
public static void reportUiError(final AppCompatActivity activity, final Throwable el) { public static void reportUiError(final AppCompatActivity activity, final Throwable el) {
reportError(activity, el, activity.getClass(), null, reportError(activity, el, activity.getClass(), null,
@ -194,11 +187,11 @@ public class ErrorActivity extends AppCompatActivity {
actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayShowTitleEnabled(true);
} }
reportButton = findViewById(R.id.errorReportButton); Button reportButton = findViewById(R.id.errorReportButton);
userCommentBox = findViewById(R.id.errorCommentBox); userCommentBox = findViewById(R.id.errorCommentBox);
errorView = findViewById(R.id.errorView); TextView errorView = findViewById(R.id.errorView);
infoView = findViewById(R.id.errorInfosView); TextView infoView = findViewById(R.id.errorInfosView);
errorMessageView = findViewById(R.id.errorMessageView); TextView errorMessageView = findViewById(R.id.errorMessageView);
ActivityCommunicator ac = ActivityCommunicator.getCommunicator(); ActivityCommunicator ac = ActivityCommunicator.getCommunicator();
returnActivity = ac.returnActivity; returnActivity = ac.returnActivity;
@ -281,15 +274,14 @@ public class ErrorActivity extends AppCompatActivity {
} }
private String formErrorText(String[] el) { private String formErrorText(String[] el) {
String text = ""; StringBuilder text = new StringBuilder();
if (el != null) { if (el != null) {
for (String e : el) { for (String e : el) {
text += "-------------------------------------\n" text.append("-------------------------------------\n").append(e);
+ e;
} }
} }
text += "-------------------------------------"; text.append("-------------------------------------");
return text; return text.toString();
} }
/** /**

View File

@ -6,7 +6,6 @@ import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.util.Log;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.Constants;
@ -49,7 +48,7 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment {
return super.onPreferenceTreeClick(preference); return super.onPreferenceTreeClick(preference);
} }
private Preference.OnPreferenceChangeListener themePreferenceChange = new Preference.OnPreferenceChangeListener() { private final Preference.OnPreferenceChangeListener themePreferenceChange = new Preference.OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
defaultPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, true).apply(); defaultPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, true).apply();

View File

@ -13,7 +13,7 @@ import org.schabi.newpipe.MainActivity;
public abstract class BasePreferenceFragment extends PreferenceFragmentCompat { public abstract class BasePreferenceFragment extends PreferenceFragmentCompat {
protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode()); protected final String TAG = getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
protected boolean DEBUG = MainActivity.DEBUG; protected final boolean DEBUG = MainActivity.DEBUG;
protected SharedPreferences defaultPreferences; protected SharedPreferences defaultPreferences;

View File

@ -9,8 +9,6 @@ import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
@ -19,12 +17,9 @@ import com.nononsenseapps.filepicker.Utils;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.FilePickerActivityHelper; import org.schabi.newpipe.util.FilePickerActivityHelper;
import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.ZipHelper; import org.schabi.newpipe.util.ZipHelper;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
@ -47,7 +42,6 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
private static final int REQUEST_IMPORT_PATH = 8945; private static final int REQUEST_IMPORT_PATH = 8945;
private static final int REQUEST_EXPORT_PATH = 30945; private static final int REQUEST_EXPORT_PATH = 30945;
private String homeDir;
private File databasesDir; private File databasesDir;
private File newpipe_db; private File newpipe_db;
private File newpipe_db_journal; private File newpipe_db_journal;
@ -81,7 +75,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
homeDir = getActivity().getApplicationInfo().dataDir; String homeDir = getActivity().getApplicationInfo().dataDir;
databasesDir = new File(homeDir + "/databases"); databasesDir = new File(homeDir + "/databases");
newpipe_db = new File(homeDir + "/databases/newpipe.db"); newpipe_db = new File(homeDir + "/databases/newpipe.db");
newpipe_db_journal = new File(homeDir + "/databases/newpipe.db-journal"); newpipe_db_journal = new File(homeDir + "/databases/newpipe.db-journal");
@ -193,7 +187,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
} finally { } finally {
try { try {
zipFile.close(); zipFile.close();
} catch (Exception e){} } catch (Exception ignored){}
} }
try { try {
@ -254,17 +248,17 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
String key = entry.getKey(); String key = entry.getKey();
if (v instanceof Boolean) if (v instanceof Boolean)
prefEdit.putBoolean(key, ((Boolean) v).booleanValue()); prefEdit.putBoolean(key, (Boolean) v);
else if (v instanceof Float) else if (v instanceof Float)
prefEdit.putFloat(key, ((Float) v).floatValue()); prefEdit.putFloat(key, (Float) v);
else if (v instanceof Integer) else if (v instanceof Integer)
prefEdit.putInt(key, ((Integer) v).intValue()); prefEdit.putInt(key, (Integer) v);
else if (v instanceof Long) else if (v instanceof Long)
prefEdit.putLong(key, ((Long) v).longValue()); prefEdit.putLong(key, (Long) v);
else if (v instanceof String) else if (v instanceof String)
prefEdit.putString(key, ((String) v)); prefEdit.putString(key, ((String) v));
} }
prefEdit.commit(); prefEdit.apply();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
@ -286,13 +280,12 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
// Error // Error
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
protected boolean onError(Throwable e) { protected void onError(Throwable e) {
final Activity activity = getActivity(); final Activity activity = getActivity();
ErrorActivity.reportError(activity, e, ErrorActivity.reportError(activity, e,
activity.getClass(), activity.getClass(),
null, null,
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
"none", "", R.string.app_ui_crash)); "none", "", R.string.app_ui_crash));
return true;
} }
} }

View File

@ -1,29 +1,20 @@
package org.schabi.newpipe.settings; package org.schabi.newpipe.settings;
import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.InfoCache; import org.schabi.newpipe.util.InfoCache;
import java.util.ArrayList;
import java.util.Collection;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.disposables.Disposables;
public class HistorySettingsFragment extends BasePreferenceFragment { public class HistorySettingsFragment extends BasePreferenceFragment {
private String cacheWipeKey; private String cacheWipeKey;

View File

@ -51,9 +51,7 @@ import io.reactivex.schedulers.Schedulers;
*/ */
public class SelectChannelFragment extends DialogFragment { public class SelectChannelFragment extends DialogFragment {
private SelectChannelAdapter channelAdapter; private final ImageLoader imageLoader = ImageLoader.getInstance();
private SubscriptionService subscriptionService;
private ImageLoader imageLoader = ImageLoader.getInstance();
private ProgressBar progressBar; private ProgressBar progressBar;
private TextView emptyView; private TextView emptyView;
@ -89,9 +87,9 @@ public class SelectChannelFragment extends DialogFragment {
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.select_channel_fragment, container, false); View v = inflater.inflate(R.layout.select_channel_fragment, container, false);
recyclerView = (RecyclerView) v.findViewById(R.id.items_list); recyclerView = v.findViewById(R.id.items_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
channelAdapter = new SelectChannelAdapter(); SelectChannelAdapter channelAdapter = new SelectChannelAdapter();
recyclerView.setAdapter(channelAdapter); recyclerView.setAdapter(channelAdapter);
progressBar = v.findViewById(R.id.progressBar); progressBar = v.findViewById(R.id.progressBar);
@ -101,7 +99,7 @@ public class SelectChannelFragment extends DialogFragment {
emptyView.setVisibility(View.GONE); emptyView.setVisibility(View.GONE);
subscriptionService = SubscriptionService.getInstance(getContext()); SubscriptionService subscriptionService = SubscriptionService.getInstance(getContext());
subscriptionService.getSubscription().toObservable() subscriptionService.getSubscription().toObservable()
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -203,9 +201,9 @@ public class SelectChannelFragment extends DialogFragment {
thumbnailView = v.findViewById(R.id.itemThumbnailView); thumbnailView = v.findViewById(R.id.itemThumbnailView);
titleView = v.findViewById(R.id.itemTitleView); titleView = v.findViewById(R.id.itemTitleView);
} }
public View view; public final View view;
public CircleImageView thumbnailView; public final CircleImageView thumbnailView;
public TextView titleView; public final TextView titleView;
} }
} }
@ -213,14 +211,13 @@ public class SelectChannelFragment extends DialogFragment {
// Error // Error
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
protected boolean onError(Throwable e) { protected void onError(Throwable e) {
final Activity activity = getActivity(); final Activity activity = getActivity();
ErrorActivity.reportError(activity, e, ErrorActivity.reportError(activity, e,
activity.getClass(), activity.getClass(),
null, null,
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
"none", "", R.string.app_ui_crash)); "none", "", R.string.app_ui_crash));
return true;
} }

View File

@ -75,7 +75,7 @@ public class SelectKioskFragment extends DialogFragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.select_kiosk_fragment, container, false); View v = inflater.inflate(R.layout.select_kiosk_fragment, container, false);
recyclerView = (RecyclerView) v.findViewById(R.id.items_list); recyclerView = v.findViewById(R.id.items_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
try { try {
selectKioskAdapter = new SelectKioskAdapter(); selectKioskAdapter = new SelectKioskAdapter();
@ -112,13 +112,13 @@ public class SelectKioskFragment extends DialogFragment {
public Entry (int i, int si, String ki, String kn){ public Entry (int i, int si, String ki, String kn){
icon = i; serviceId=si; kioskId=ki; kioskName = kn; icon = i; serviceId=si; kioskId=ki; kioskName = kn;
} }
int icon; final int icon;
int serviceId; final int serviceId;
String kioskId; final String kioskId;
String kioskName; final String kioskName;
} }
private List<Entry> kioskList = new Vector<>(); private final List<Entry> kioskList = new Vector<>();
public SelectKioskAdapter() public SelectKioskAdapter()
throws Exception { throws Exception {
@ -157,9 +157,9 @@ public class SelectKioskFragment extends DialogFragment {
thumbnailView = v.findViewById(R.id.itemThumbnailView); thumbnailView = v.findViewById(R.id.itemThumbnailView);
titleView = v.findViewById(R.id.itemTitleView); titleView = v.findViewById(R.id.itemTitleView);
} }
public View view; public final View view;
public ImageView thumbnailView; public final ImageView thumbnailView;
public TextView titleView; public final TextView titleView;
} }
public void onBindViewHolder(SelectKioskItemHolder holder, final int position) { public void onBindViewHolder(SelectKioskItemHolder holder, final int position) {
@ -179,13 +179,12 @@ public class SelectKioskFragment extends DialogFragment {
// Error // Error
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
protected boolean onError(Throwable e) { protected void onError(Throwable e) {
final Activity activity = getActivity(); final Activity activity = getActivity();
ErrorActivity.reportError(activity, e, ErrorActivity.reportError(activity, e,
activity.getClass(), activity.getClass(),
null, null,
ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
"none", "", R.string.app_ui_crash)); "none", "", R.string.app_ui_crash));
return true;
} }
} }

View File

@ -183,7 +183,7 @@ public final class ExtractorHelper {
cache.removeInfo(serviceId, url); cache.removeInfo(serviceId, url);
load = loadFromNetwork; load = loadFromNetwork;
} else { } else {
load = Maybe.concat(ExtractorHelper.<I>loadFromCache(serviceId, url), load = Maybe.concat(ExtractorHelper.loadFromCache(serviceId, url),
loadFromNetwork.toMaybe()) loadFromNetwork.toMaybe())
.firstElement() //Take the first valid .firstElement() //Take the first valid
.toSingle(); .toSingle();

View File

@ -28,9 +28,6 @@ import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.extractor.Info; import org.schabi.newpipe.extractor.Info;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
public final class InfoCache { public final class InfoCache {
@ -58,7 +55,7 @@ public final class InfoCache {
public Info getFromKey(int serviceId, @NonNull String url) { public Info getFromKey(int serviceId, @NonNull String url) {
if (DEBUG) Log.d(TAG, "getFromKey() called with: serviceId = [" + serviceId + "], url = [" + url + "]"); if (DEBUG) Log.d(TAG, "getFromKey() called with: serviceId = [" + serviceId + "], url = [" + url + "]");
synchronized (lruCache) { synchronized (lruCache) {
return getInfo(lruCache, keyOf(serviceId, url)); return getInfo(keyOf(serviceId, url));
} }
} }
@ -89,7 +86,7 @@ public final class InfoCache {
public void trimCache() { public void trimCache() {
if (DEBUG) Log.d(TAG, "trimCache() called"); if (DEBUG) Log.d(TAG, "trimCache() called");
synchronized (lruCache) { synchronized (lruCache) {
removeStaleCache(lruCache); removeStaleCache();
lruCache.trimToSize(TRIM_CACHE_TO); lruCache.trimToSize(TRIM_CACHE_TO);
} }
} }
@ -105,23 +102,22 @@ public final class InfoCache {
return serviceId + url; return serviceId + url;
} }
private static void removeStaleCache(@NonNull final LruCache<String, CacheData> cache) { private static void removeStaleCache() {
for (Map.Entry<String, CacheData> entry : cache.snapshot().entrySet()) { for (Map.Entry<String, CacheData> entry : InfoCache.lruCache.snapshot().entrySet()) {
final CacheData data = entry.getValue(); final CacheData data = entry.getValue();
if (data != null && data.isExpired()) { if (data != null && data.isExpired()) {
cache.remove(entry.getKey()); InfoCache.lruCache.remove(entry.getKey());
} }
} }
} }
@Nullable @Nullable
private static Info getInfo(@NonNull final LruCache<String, CacheData> cache, private static Info getInfo(@NonNull final String key) {
@NonNull final String key) { final CacheData data = InfoCache.lruCache.get(key);
final CacheData data = cache.get(key);
if (data == null) return null; if (data == null) return null;
if (data.isExpired()) { if (data.isExpired()) {
cache.remove(key); InfoCache.lruCache.remove(key);
return null; return null;
} }

View File

@ -204,7 +204,7 @@ public final class ListHelper {
*/ */
private static void sortStreamList(List<VideoStream> videoStreams, final boolean ascendingOrder) { private static void sortStreamList(List<VideoStream> videoStreams, final boolean ascendingOrder) {
Collections.sort(videoStreams, (o1, o2) -> { Collections.sort(videoStreams, (o1, o2) -> {
int result = compareVideoStreamResolution(o1, o2, VIDEO_FORMAT_QUALITY_RANKING); int result = compareVideoStreamResolution(o1, o2);
return result == 0 ? 0 : (ascendingOrder ? result : -result); return result == 0 ? 0 : (ascendingOrder ? result : -result);
}); });
} }
@ -399,8 +399,7 @@ public final class ListHelper {
} }
// Compares the quality of two video streams. // Compares the quality of two video streams.
private static int compareVideoStreamResolution(VideoStream streamA, VideoStream streamB, private static int compareVideoStreamResolution(VideoStream streamA, VideoStream streamB) {
List<MediaFormat> formatRanking) {
if (streamA == null) { if (streamA == null) {
return -1; return -1;
} }
@ -414,7 +413,7 @@ public final class ListHelper {
} }
// Same bitrate and format // Same bitrate and format
return formatRanking.indexOf(streamA.getFormat()) - formatRanking.indexOf(streamB.getFormat()); return ListHelper.VIDEO_FORMAT_QUALITY_RANKING.indexOf(streamA.getFormat()) - ListHelper.VIDEO_FORMAT_QUALITY_RANKING.indexOf(streamB.getFormat());
} }

View File

@ -26,7 +26,6 @@ import org.schabi.newpipe.download.DownloadActivity;
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.exceptions.ExtractionException; import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.search.SearchExtractor;
import org.schabi.newpipe.extractor.stream.AudioStream; import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.Stream; import org.schabi.newpipe.extractor.stream.Stream;
import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfo;

View File

@ -21,7 +21,6 @@ package org.schabi.newpipe.util;
import android.content.Context; import android.content.Context;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;

View File

@ -31,7 +31,7 @@ import us.shandian.giga.util.Utility;
public class StreamItemAdapter<T extends Stream> extends BaseAdapter { public class StreamItemAdapter<T extends Stream> extends BaseAdapter {
private final Context context; private final Context context;
private StreamSizeWrapper<T> streamsWrapper; private final StreamSizeWrapper<T> streamsWrapper;
private final boolean showIconNoAudio; private final boolean showIconNoAudio;
public StreamItemAdapter(Context context, StreamSizeWrapper<T> streamsWrapper, boolean showIconNoAudio) { public StreamItemAdapter(Context context, StreamSizeWrapper<T> streamsWrapper, boolean showIconNoAudio) {
@ -124,7 +124,7 @@ public class StreamItemAdapter<T extends Stream> extends BaseAdapter {
public static class StreamSizeWrapper<T extends Stream> implements Serializable { public static class StreamSizeWrapper<T extends Stream> implements Serializable {
private static final StreamSizeWrapper<Stream> EMPTY = new StreamSizeWrapper<>(Collections.emptyList()); private static final StreamSizeWrapper<Stream> EMPTY = new StreamSizeWrapper<>(Collections.emptyList());
private final List<T> streamsList; private final List<T> streamsList;
private long[] streamSizes; private final long[] streamSizes;
public StreamSizeWrapper(List<T> streamsList) { public StreamSizeWrapper(List<T> streamsList) {
this.streamsList = streamsList; this.streamsList = streamsList;

View File

@ -56,7 +56,6 @@ public class ZipHelper {
/** /**
* This will extract data from Zipfiles. * This will extract data from Zipfiles.
* Caution this will override the original file. * Caution this will override the original file.
* @param inZip The ZipOutputStream where the data is stored in
* @param file The path of the file on the disk where the data should be extracted to. * @param file The path of the file on the disk where the data should be extracted to.
* @param name The path of the file inside the zip. * @param name The path of the file inside the zip.
* @return will return true if the file was found within the zip file * @return will return true if the file was found within the zip file

View File

@ -81,7 +81,7 @@ public class CollapsibleView extends LinearLayout {
private int targetHeight = -1; private int targetHeight = -1;
private ValueAnimator currentAnimator; private ValueAnimator currentAnimator;
private List<StateListener> listeners = new ArrayList<>(); private final List<StateListener> listeners = new ArrayList<>();
/** /**
* This method recalculates the height of this view so it <b>must</b> be called when * This method recalculates the height of this view so it <b>must</b> be called when

View File

@ -123,7 +123,7 @@ public class DownloadManagerImpl implements DownloadManager {
Collections.sort(missions, new Comparator<DownloadMission>() { Collections.sort(missions, new Comparator<DownloadMission>() {
@Override @Override
public int compare(DownloadMission o1, DownloadMission o2) { public int compare(DownloadMission o1, DownloadMission o2) {
return Long.valueOf(o1.timestamp).compareTo(o2.timestamp); return Long.compare(o1.timestamp, o2.timestamp);
} }
}); });
} }

View File

@ -67,8 +67,8 @@ public class DownloadMission implements Serializable {
public long done; public long done;
public int threadCount = 3; public int threadCount = 3;
public int finishCount; public int finishCount;
private List<Long> threadPositions = new ArrayList<Long>(); private final List<Long> threadPositions = new ArrayList<>();
public final Map<Long, Boolean> blockState = new HashMap<Long, Boolean>(); public final Map<Long, Boolean> blockState = new HashMap<>();
public boolean running; public boolean running;
public boolean finished; public boolean finished;
public boolean fallback; public boolean fallback;
@ -77,7 +77,7 @@ public class DownloadMission implements Serializable {
public transient boolean recovered; public transient boolean recovered;
private transient ArrayList<WeakReference<MissionListener>> mListeners = new ArrayList<WeakReference<MissionListener>>(); private transient ArrayList<WeakReference<MissionListener>> mListeners = new ArrayList<>();
private transient boolean mWritingToFile; private transient boolean mWritingToFile;
private static final int NO_IDENTIFIER = -1; private static final int NO_IDENTIFIER = -1;
@ -232,7 +232,7 @@ public class DownloadMission implements Serializable {
public synchronized void addListener(MissionListener listener) { public synchronized void addListener(MissionListener listener) {
Handler handler = new Handler(Looper.getMainLooper()); Handler handler = new Handler(Looper.getMainLooper());
MissionListener.handlerStore.put(listener, handler); MissionListener.handlerStore.put(listener, handler);
mListeners.add(new WeakReference<MissionListener>(listener)); mListeners.add(new WeakReference<>(listener));
} }
public synchronized void removeListener(MissionListener listener) { public synchronized void removeListener(MissionListener listener) {

View File

@ -92,7 +92,7 @@ public class DownloadRunnable implements Runnable {
// A server may be ignoring the range request // A server may be ignoring the range request
if (conn.getResponseCode() != 206) { if (conn.getResponseCode() != 206) {
mMission.errCode = DownloadMission.ERROR_SERVER_UNSUPPORTED; mMission.errCode = DownloadMission.ERROR_SERVER_UNSUPPORTED;
notifyError(DownloadMission.ERROR_SERVER_UNSUPPORTED); notifyError();
if (DEBUG) { if (DEBUG) {
Log.e(TAG, mId + ":Unsupported " + conn.getResponseCode()); Log.e(TAG, mId + ":Unsupported " + conn.getResponseCode());
@ -161,9 +161,9 @@ public class DownloadRunnable implements Runnable {
} }
} }
private void notifyError(final int err) { private void notifyError() {
synchronized (mMission) { synchronized (mMission) {
mMission.notifyError(err); mMission.notifyError(DownloadMission.ERROR_SERVER_UNSUPPORTED);
mMission.pause(); mMission.pause();
} }
} }

View File

@ -56,7 +56,7 @@ public class DownloadManagerService extends Service {
private DownloadDataSource mDataSource; private DownloadDataSource mDataSource;
private MissionListener missionListener = new MissionListener(); private final MissionListener missionListener = new MissionListener();
private void notifyMediaScanner(DownloadMission mission) { private void notifyMediaScanner(DownloadMission mission) {

View File

@ -306,12 +306,12 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
public DownloadMission mission; public DownloadMission mission;
public int position; public int position;
public TextView status; public final TextView status;
public ImageView icon; public final ImageView icon;
public TextView name; public final TextView name;
public TextView size; public final TextView size;
public View bkg; public final View bkg;
public ImageView menu; public final ImageView menu;
public ProgressDrawable progress; public ProgressDrawable progress;
public MissionObserver observer; public MissionObserver observer;
@ -332,8 +332,8 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
} }
static class MissionObserver implements DownloadMission.MissionListener { static class MissionObserver implements DownloadMission.MissionListener {
private MissionAdapter mAdapter; private final MissionAdapter mAdapter;
private ViewHolder mHolder; private final ViewHolder mHolder;
public MissionObserver(MissionAdapter adapter, ViewHolder holder) { public MissionObserver(MissionAdapter adapter, ViewHolder holder) {
mAdapter = adapter; mAdapter = adapter;
@ -365,7 +365,7 @@ public class MissionAdapter extends RecyclerView.Adapter<MissionAdapter.ViewHold
private static class ChecksumTask extends AsyncTask<String, Void, String> { private static class ChecksumTask extends AsyncTask<String, Void, String> {
ProgressDialog prog; ProgressDialog prog;
WeakReference<Activity> weakReference; final WeakReference<Activity> weakReference;
ChecksumTask(@NonNull Activity activity) { ChecksumTask(@NonNull Activity activity) {
weakReference = new WeakReference<>(activity); weakReference = new WeakReference<>(activity);

View File

@ -12,7 +12,8 @@ import android.support.v4.content.ContextCompat;
public class ProgressDrawable extends Drawable { public class ProgressDrawable extends Drawable {
private float mProgress; private float mProgress;
private int mBackgroundColor, mForegroundColor; private final int mBackgroundColor;
private final int mForegroundColor;
public ProgressDrawable(Context context, @ColorRes int background, @ColorRes int foreground) { public ProgressDrawable(Context context, @ColorRes int background, @ColorRes int foreground) {
this(ContextCompat.getColor(context, background), ContextCompat.getColor(context, foreground)); this(ContextCompat.getColor(context, background), ContextCompat.getColor(context, foreground));

View File

@ -16,6 +16,8 @@ import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -44,7 +46,7 @@ public abstract class MissionsFragment extends Fragment {
private DeleteDownloadManager mDeleteDownloadManager; private DeleteDownloadManager mDeleteDownloadManager;
private Disposable mDeleteDisposable; private Disposable mDeleteDisposable;
private ServiceConnection mConnection = new ServiceConnection() { private final ServiceConnection mConnection = new ServiceConnection() {
@Override @Override
public void onServiceConnected(ComponentName name, IBinder binder) { public void onServiceConnected(ComponentName name, IBinder binder) {
@ -144,17 +146,21 @@ public abstract class MissionsFragment extends Fragment {
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public void onPrepareOptionsMenu(Menu menu) {
return super.onOptionsItemSelected(item); mSwitch = menu.findItem(R.id.switch_mode);
super.onPrepareOptionsMenu(menu);
}
/*switch (item.getItemId()) { @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.switch_mode: case R.id.switch_mode:
mLinear = !mLinear; mLinear = !mLinear;
updateList(); updateList();
return true; return true;
default: default:
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
}*/ }
} }
public void notifyChange() { public void notifyChange() {

View File

@ -11,9 +11,7 @@ import android.widget.Toast;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -198,7 +196,7 @@ public class Utility {
while ((len = i.read(buf)) != -1) { while ((len = i.read(buf)) != -1) {
md.update(buf, 0, len); md.update(buf, 0, len);
} }
} catch (IOException e) { } catch (IOException ignored) {
} }

View File

@ -16,7 +16,8 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/colorPrimary" android:background="?attr/colorPrimary"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/background_header" /> android:src="@drawable/background_header"
android:contentDescription="TODO" />
<ImageView <ImageView
android:id="@+id/drawer_header_np_nude_view" android:id="@+id/drawer_header_np_nude_view"
@ -26,7 +27,8 @@
android:layout_marginStart="30dp" android:layout_marginStart="30dp"
android:layout_marginTop="30dp" android:layout_marginTop="30dp"
android:src="@drawable/np_logo_nude_shadow" /> android:src="@drawable/np_logo_nude_shadow"
android:contentDescription="TODO" />
<TextView <TextView
android:id="@+id/drawer_header_np_text_view" android:id="@+id/drawer_header_np_text_view"
@ -38,7 +40,7 @@
android:layout_toRightOf="@id/drawer_header_np_nude_view" android:layout_toRightOf="@id/drawer_header_np_nude_view"
android:gravity="center" android:gravity="center"
android:text="@string/app_name" android:text="@string/app_name"
android:textSize="30dp" android:textSize="30sp"
android:textColor="@color/drawer_header_font_color" android:textColor="@color/drawer_header_font_color"
android:textStyle="bold|italic" /> android:textStyle="bold|italic" />
@ -50,7 +52,7 @@
android:layout_alignStart="@id/drawer_header_np_text_view" android:layout_alignStart="@id/drawer_header_np_text_view"
android:layout_below="@id/drawer_header_np_text_view" android:layout_below="@id/drawer_header_np_text_view"
android:text="YouTube" android:text="YouTube"
android:textSize="18dp" android:textSize="18sp"
android:textColor="@color/drawer_header_font_color" android:textColor="@color/drawer_header_font_color"
android:textStyle="italic" /> android:textStyle="italic" />
@ -66,6 +68,7 @@
android:paddingBottom="20dp" android:paddingBottom="20dp"
android:paddingEnd="20dp" android:paddingEnd="20dp"
android:paddingRight="20dp" android:paddingRight="20dp"
android:src="@drawable/ic_arrow_down_white" /> android:src="@drawable/ic_arrow_down_white"
android:contentDescription="TODO" />
</RelativeLayout> </RelativeLayout>

View File

@ -114,7 +114,8 @@
<EditText <EditText
android:id="@+id/errorCommentBox" android:id="@+id/errorCommentBox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"
android:inputType="" />
<Button <Button
android:id="@+id/errorReportButton" android:id="@+id/errorReportButton"

View File

@ -16,7 +16,8 @@ android:focusable="true">
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/colorPrimary" android:background="?attr/colorPrimary"
android:src="@drawable/background_header" android:src="@drawable/background_header"
android:scaleType="centerCrop"/> android:scaleType="centerCrop"
android:contentDescription="TODO" />
<ImageView <ImageView
android:id="@+id/drawer_header_np_nude_view" android:id="@+id/drawer_header_np_nude_view"
@ -26,7 +27,8 @@ android:focusable="true">
android:layout_width="70dp" android:layout_width="70dp"
android:layout_height="70dp" android:layout_height="70dp"
android:src="@drawable/np_logo_nude_shadow"/> android:src="@drawable/np_logo_nude_shadow"
android:contentDescription="TODO" />
<TextView <TextView
android:id="@+id/drawer_header_np_text_view" android:id="@+id/drawer_header_np_text_view"
@ -38,7 +40,7 @@ android:focusable="true">
android:layout_alignTop="@id/drawer_header_np_nude_view" android:layout_alignTop="@id/drawer_header_np_nude_view"
android:layout_alignBottom="@id/drawer_header_np_nude_view" android:layout_alignBottom="@id/drawer_header_np_nude_view"
android:gravity="center" android:gravity="center"
android:textSize="30dp" android:textSize="30sp"
android:textColor="@color/drawer_header_font_color" android:textColor="@color/drawer_header_font_color"
android:textStyle="bold|italic"/> android:textStyle="bold|italic"/>
@ -50,7 +52,7 @@ android:focusable="true">
android:layout_below="@id/drawer_header_np_text_view" android:layout_below="@id/drawer_header_np_text_view"
android:layout_alignLeft="@id/drawer_header_np_text_view" android:layout_alignLeft="@id/drawer_header_np_text_view"
android:layout_alignStart="@id/drawer_header_np_text_view" android:layout_alignStart="@id/drawer_header_np_text_view"
android:textSize="18dp" android:textSize="18sp"
android:textColor="@color/drawer_header_font_color" android:textColor="@color/drawer_header_font_color"
android:textStyle="italic"/> android:textStyle="italic"/>
@ -66,6 +68,7 @@ android:focusable="true">
android:paddingBottom="20dp" android:paddingBottom="20dp"
android:paddingRight="20dp" android:paddingRight="20dp"
android:src="@drawable/ic_arrow_down_white" android:src="@drawable/ic_arrow_down_white"
android:paddingEnd="20dp" /> android:paddingEnd="20dp"
android:contentDescription="TODO" />
</RelativeLayout> </RelativeLayout>

View File

@ -21,7 +21,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
app:srcCompat="@mipmap/ic_launcher" /> app:srcCompat="@mipmap/ic_launcher"
android:contentDescription="TODO" />
<TextView <TextView
android:id="@+id/app_name" android:id="@+id/app_name"

View File

@ -10,7 +10,8 @@
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="8dp"> android:paddingTop="8dp"
android:focusable="true">
<TextView <TextView
android:id="@+id/info" android:id="@+id/info"

View File

@ -7,7 +7,8 @@
android:paddingRight="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"
android:orientation="vertical" android:orientation="vertical"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:clickable="true"> android:clickable="true"
android:focusable="true">
<TextView <TextView
android:id="@+id/name" android:id="@+id/name"

View File

@ -38,7 +38,8 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginRight="1dp" android:layout_marginRight="1dp"
android:src="@drawable/ic_menu_more" android:src="@drawable/ic_menu_more"
android:scaleType="centerInside"/> android:scaleType="centerInside"
android:contentDescription="TODO" />
</RelativeLayout> </RelativeLayout>
@ -50,7 +51,8 @@
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:scaleType="fitXY" android:scaleType="fitXY"
android:gravity="center" android:gravity="center"
android:padding="10dp"/> android:padding="10dp"
android:contentDescription="TODO" />
<TextView <TextView
android:id="@+id/item_name" android:id="@+id/item_name"

View File

@ -9,7 +9,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_margin="2dp" android:layout_margin="2dp"
android:background="@color/bluegray"> android:background="@color/bluegray">
<ImageView <ImageView
android:id="@+id/item_icon" android:id="@+id/item_icon"
android:layout_width="72dp" android:layout_width="72dp"
@ -17,66 +17,60 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:scaleType="fitXY" android:scaleType="fitXY"
android:gravity="center" android:gravity="center"
android:padding="15dp"/> android:padding="15dp"
android:contentDescription="TODO" />
<LinearLayout
android:id="@+id/item_name_and_size" <TextView
android:id="@+id/item_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/item_more"
android:layout_toRightOf="@id/item_icon" android:layout_toRightOf="@id/item_icon"
android:layout_toLeftOf="@+id/item_status" android:ellipsize="end"
android:layout_centerVertical="true" android:padding="6dp"
android:orientation="vertical"> android:text="XXX.xx"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
<TextView <TextView
android:id="@+id/item_name" android:id="@+id/item_size"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="6dp" android:layout_toRightOf="@id/item_icon"
android:singleLine="true" android:layout_below="@+id/item_name"
android:ellipsize="end" android:padding="6dp"
android:text="XXX.xx" android:singleLine="true"
android:textSize="16sp" android:text="100.00MB"
android:textStyle="bold" android:textSize="12sp"
android:textColor="@color/white"/> android:textColor="@color/white"/>
<TextView
android:id="@+id/item_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/item_name"
android:padding="6dp"
android:singleLine="true"
android:text="100.00MB"
android:textSize="12sp"
android:textColor="@color/white"/>
</LinearLayout>
<TextView <TextView
android:id="@+id/item_status" android:id="@+id/item_status"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/item_more" android:layout_below="@+id/item_name"
android:layout_centerVertical="true"
android:layout_marginLeft="6dp" android:layout_marginLeft="6dp"
android:layout_marginRight="6dp" android:layout_marginRight="5dp"
android:layout_toLeftOf="@+id/item_more"
android:layout_toRightOf="@id/item_size"
android:padding="6dp"
android:singleLine="true" android:singleLine="true"
android:text="0%" android:text="0%"
android:textSize="20sp" android:textColor="@color/white"
android:textColor="@color/white"/> android:textSize="12sp" />
<ImageView <ImageView
style="?attr/buttonBarButtonStyle" style="?attr/buttonBarButtonStyle"
android:id="@+id/item_more" android:id="@+id/item_more"
android:layout_width="36dp" android:layout_width="49dp"
android:layout_height="36dp" android:layout_height="49dp"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginRight="4dp" android:layout_marginRight="4dp"
android:src="@drawable/ic_menu_more" android:src="@drawable/ic_menu_more"
android:scaleType="centerInside"/> android:scaleType="centerInside"
android:contentDescription="TODO" />
</RelativeLayout> </RelativeLayout>

View File

@ -6,7 +6,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:padding="5dp"> android:padding="5dp"
android:focusable="true">
<de.hdodenhof.circleimageview.CircleImageView <de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/itemThumbnailView" android:id="@+id/itemThumbnailView"

View File

@ -6,7 +6,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:padding="5dp"> android:padding="5dp"
android:focusable="true">
<ImageView <ImageView
android:id="@+id/itemThumbnailView" android:id="@+id/itemThumbnailView"
@ -17,7 +18,8 @@
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_marginRight="5dp" android:layout_marginRight="5dp"
android:src="@drawable/service" android:src="@drawable/service"
tools:ignore="RtlHardcoded"/> tools:ignore="RtlHardcoded"
android:contentDescription="TODO" />
<TextView <TextView
android:id="@+id/itemTitleView" android:id="@+id/itemTitleView"

View File

@ -5,4 +5,7 @@
<item android:id="@+id/action_settings" <item android:id="@+id/action_settings"
app:showAsAction="never" app:showAsAction="never"
android:title="@string/settings"/> android:title="@string/settings"/>
<item android:id="@+id/switch_mode"
app:showAsAction="ifRoom"
android:title="@string/switch_view"/>
</menu> </menu>

View File

@ -7,16 +7,16 @@
android:id="@+id/toggleOrientation" android:id="@+id/toggleOrientation"
android:icon="@drawable/ic_screen_rotation_white" android:icon="@drawable/ic_screen_rotation_white"
android:title="@string/toggle_orientation" android:title="@string/toggle_orientation"
app:showAsAction="always|withText" /> app:showAsAction="ifRoom|withText" />
<item <item
android:id="@+id/switchPopup" android:id="@+id/switchPopup"
android:icon="@drawable/ic_fullscreen_exit_white" android:icon="@drawable/ic_fullscreen_exit_white"
android:title="@string/switch_to_popup" android:title="@string/switch_to_popup"
app:showAsAction="always|withText" /> app:showAsAction="ifRoom|withText" />
<item <item
android:id="@+id/switchBackground" android:id="@+id/switchBackground"
android:icon="?audio" android:icon="?audio"
android:title="@string/switch_to_background" android:title="@string/switch_to_background"
app:showAsAction="always|withText" /> app:showAsAction="ifRoom|withText" />
</menu> </menu>

View File

@ -111,7 +111,7 @@
<string name="msg_url_malform">Hibás URL vagy nincs internet</string> <string name="msg_url_malform">Hibás URL vagy nincs internet</string>
<string name="msg_running">NewPipe letöltés folyamatban</string> <string name="msg_running">NewPipe letöltés folyamatban</string>
<string name="msg_running_detail">Katt a részletekért</string> <string name="msg_running_detail">Katt a részletekért</string>
<string name="msg_wait">Kérlek várj...</string> <string name="msg_wait">Kérlek várj</string>
<string name="msg_copied">Vágólapra másolva.</string> <string name="msg_copied">Vágólapra másolva.</string>
<string name="no_available_dir">Kérlek válassz egy létező könyvtárat a letöltésekhez.</string> <string name="no_available_dir">Kérlek válassz egy létező könyvtárat a letöltésekhez.</string>

View File

@ -414,7 +414,7 @@
\n \n
\n만약 모르신다면, 다음을 참고하세요: \n만약 모르신다면, 다음을 참고하세요:
\n \n
\n1. 모바일 환경이시면 브라우저 설정에서 데스크탑 모드를 활성화해주세요. Chrome 모바일에서는 오른쪽 ... 클릭시 아래쪽에 있습니다. \n1. 모바일 환경이시면 브라우저 설정에서 데스크탑 모드를 활성화해주세요. Chrome 모바일에서는 오른쪽 클릭시 아래쪽에 있습니다.
\n2. 이 주소로 가세요: %1$s \n2. 이 주소로 가세요: %1$s
\n3. 로그인이 필요하면 하세요. \n3. 로그인이 필요하면 하세요.
\n4. 리디렉트된 곳의 URL을 복사하세요. (이 URL이 당신의 프로필 URL 입니다)</string> \n4. 리디렉트된 곳의 URL을 복사하세요. (이 URL이 당신의 프로필 URL 입니다)</string>

View File

@ -105,6 +105,8 @@
<string name="last_orientation_landscape_key" translatable="false">last_orientation_landscape_key</string> <string name="last_orientation_landscape_key" translatable="false">last_orientation_landscape_key</string>
<string name="last_resize_mode" translatable="false">last_resize_mode</string>
<!-- DEBUG ONLY --> <!-- DEBUG ONLY -->
<string name="debug_pref_screen_key" translatable="false">debug_pref_screen_key</string> <string name="debug_pref_screen_key" translatable="false">debug_pref_screen_key</string>
<string name="allow_heap_dumping_key" translatable="false">allow_heap_dumping_key</string> <string name="allow_heap_dumping_key" translatable="false">allow_heap_dumping_key</string>

View File

@ -517,5 +517,6 @@
<string name="minimize_on_exit_none_description">None</string> <string name="minimize_on_exit_none_description">None</string>
<string name="minimize_on_exit_background_description">Minimize to background player</string> <string name="minimize_on_exit_background_description">Minimize to background player</string>
<string name="minimize_on_exit_popup_description">Minimize to popup player</string> <string name="minimize_on_exit_popup_description">Minimize to popup player</string>
<string name="switch_view">Switch View</string>
</resources> </resources>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <paths>
<external-path name="external_files" path="."/> <external-path name="external_files" path="."/>
<root-path name="external_files" path="/storage/" /> <root-path name="external_files" path="/storage/" />
</paths> </paths>

View File

@ -27,7 +27,7 @@ public class ImportExportJsonHelperTest {
} }
@Test @Test
public void testInvalidSource() throws Exception { public void testInvalidSource() {
List<String> invalidList = Arrays.asList( List<String> invalidList = Arrays.asList(
"{}", "{}",
"", "",

View File

@ -15,7 +15,7 @@ import static org.junit.Assert.assertNull;
*/ */
public class ErrorActivityTest { public class ErrorActivityTest {
@Test @Test
public void getReturnActivity() throws Exception { public void getReturnActivity() {
Class<? extends Activity> returnActivity; Class<? extends Activity> returnActivity;
returnActivity = ErrorActivity.getReturnActivity(MainActivity.class); returnActivity = ErrorActivity.getReturnActivity(MainActivity.class);
assertEquals(MainActivity.class, returnActivity); assertEquals(MainActivity.class, returnActivity);

View File

@ -45,7 +45,7 @@ public class ListHelperTest {
new VideoStream("", MediaFormat.MPEG_4, /**/ "1080p60", true)); new VideoStream("", MediaFormat.MPEG_4, /**/ "1080p60", true));
@Test @Test
public void getSortedStreamVideosListTest() throws Exception { public void getSortedStreamVideosListTest() {
List<VideoStream> result = ListHelper.getSortedStreamVideosList(MediaFormat.MPEG_4, true, videoStreamsTestList, videoOnlyStreamsTestList, true); List<VideoStream> result = ListHelper.getSortedStreamVideosList(MediaFormat.MPEG_4, true, videoStreamsTestList, videoOnlyStreamsTestList, true);
List<String> expected = Arrays.asList("144p", "240p", "360p", "480p", "720p", "720p60", "1080p", "1080p60", "1440p60", "2160p", "2160p60"); List<String> expected = Arrays.asList("144p", "240p", "360p", "480p", "720p", "720p60", "1080p", "1080p60", "1440p60", "2160p", "2160p60");
@ -67,7 +67,7 @@ public class ListHelperTest {
} }
@Test @Test
public void getSortedStreamVideosExceptHighResolutionsTest() throws Exception { public void getSortedStreamVideosExceptHighResolutionsTest() {
//////////////////////////////////// ////////////////////////////////////
// Don't show Higher resolutions // // Don't show Higher resolutions //
////////////////////////////////// //////////////////////////////////
@ -79,7 +79,7 @@ public class ListHelperTest {
} }
@Test @Test
public void getDefaultResolutionTest() throws Exception { public void getDefaultResolutionTest() {
List<VideoStream> testList = Arrays.asList( List<VideoStream> testList = Arrays.asList(
new VideoStream("", MediaFormat.MPEG_4, /**/ "720p"), new VideoStream("", MediaFormat.MPEG_4, /**/ "720p"),
new VideoStream("", MediaFormat.v3GPP, /**/ "240p"), new VideoStream("", MediaFormat.v3GPP, /**/ "240p"),
@ -130,7 +130,7 @@ public class ListHelperTest {
} }
@Test @Test
public void getHighestQualityAudioFormatTest() throws Exception { public void getHighestQualityAudioFormatTest() {
AudioStream stream = audioStreamsTestList.get(ListHelper.getHighestQualityAudioIndex(MediaFormat.M4A, audioStreamsTestList)); AudioStream stream = audioStreamsTestList.get(ListHelper.getHighestQualityAudioIndex(MediaFormat.M4A, audioStreamsTestList));
assertEquals(320, stream.average_bitrate); assertEquals(320, stream.average_bitrate);
assertEquals(MediaFormat.M4A, stream.getFormat()); assertEquals(MediaFormat.M4A, stream.getFormat());
@ -145,7 +145,7 @@ public class ListHelperTest {
} }
@Test @Test
public void getHighestQualityAudioFormatPreferredAbsent() throws Exception { public void getHighestQualityAudioFormatPreferredAbsent() {
////////////////////////////////////////// //////////////////////////////////////////
// Doesn't contain the preferred format // // Doesn't contain the preferred format //
@ -186,13 +186,13 @@ public class ListHelperTest {
} }
@Test @Test
public void getHighestQualityAudioNull() throws Exception { public void getHighestQualityAudioNull() {
assertEquals(-1, ListHelper.getHighestQualityAudioIndex(null, null)); assertEquals(-1, ListHelper.getHighestQualityAudioIndex(null, null));
assertEquals(-1, ListHelper.getHighestQualityAudioIndex(null, new ArrayList<AudioStream>())); assertEquals(-1, ListHelper.getHighestQualityAudioIndex(null, new ArrayList<>()));
} }
@Test @Test
public void getLowestQualityAudioFormatTest() throws Exception { public void getLowestQualityAudioFormatTest() {
AudioStream stream = audioStreamsTestList.get(ListHelper.getMostCompactAudioIndex(MediaFormat.M4A, audioStreamsTestList)); AudioStream stream = audioStreamsTestList.get(ListHelper.getMostCompactAudioIndex(MediaFormat.M4A, audioStreamsTestList));
assertEquals(128, stream.average_bitrate); assertEquals(128, stream.average_bitrate);
assertEquals(MediaFormat.M4A, stream.getFormat()); assertEquals(MediaFormat.M4A, stream.getFormat());
@ -207,7 +207,7 @@ public class ListHelperTest {
} }
@Test @Test
public void getLowestQualityAudioFormatPreferredAbsent() throws Exception { public void getLowestQualityAudioFormatPreferredAbsent() {
////////////////////////////////////////// //////////////////////////////////////////
// Doesn't contain the preferred format // // Doesn't contain the preferred format //
@ -250,13 +250,13 @@ public class ListHelperTest {
} }
@Test @Test
public void getLowestQualityAudioNull() throws Exception { public void getLowestQualityAudioNull() {
assertEquals(-1, ListHelper.getMostCompactAudioIndex(null, null)); assertEquals(-1, ListHelper.getMostCompactAudioIndex(null, null));
assertEquals(-1, ListHelper.getMostCompactAudioIndex(null, new ArrayList<AudioStream>())); assertEquals(-1, ListHelper.getMostCompactAudioIndex(null, new ArrayList<>()));
} }
@Test @Test
public void getVideoDefaultStreamIndexCombinations() throws Exception { public void getVideoDefaultStreamIndexCombinations() {
List<VideoStream> testList = Arrays.asList( List<VideoStream> testList = Arrays.asList(
new VideoStream("", MediaFormat.MPEG_4, /**/ "1080p"), new VideoStream("", MediaFormat.MPEG_4, /**/ "1080p"),
new VideoStream("", MediaFormat.MPEG_4, /**/ "720p60"), new VideoStream("", MediaFormat.MPEG_4, /**/ "720p60"),

View File

@ -11,25 +11,25 @@ public class QuadraticSliderStrategyTest {
private final SliderStrategy.Quadratic standard = private final SliderStrategy.Quadratic standard =
new SliderStrategy.Quadratic(0f, 100f, 50f, STEP); new SliderStrategy.Quadratic(0f, 100f, 50f, STEP);
@Test @Test
public void testLeftBound() throws Exception { public void testLeftBound() {
assertEquals(standard.progressOf(0), 0); assertEquals(standard.progressOf(0), 0);
assertEquals(standard.valueOf(0), 0f, DELTA); assertEquals(standard.valueOf(0), 0f, DELTA);
} }
@Test @Test
public void testCenter() throws Exception { public void testCenter() {
assertEquals(standard.progressOf(50), 50); assertEquals(standard.progressOf(50), 50);
assertEquals(standard.valueOf(50), 50f, DELTA); assertEquals(standard.valueOf(50), 50f, DELTA);
} }
@Test @Test
public void testRightBound() throws Exception { public void testRightBound() {
assertEquals(standard.progressOf(100), 100); assertEquals(standard.progressOf(100), 100);
assertEquals(standard.valueOf(100), 100f, DELTA); assertEquals(standard.valueOf(100), 100f, DELTA);
} }
@Test @Test
public void testLeftRegion() throws Exception { public void testLeftRegion() {
final int leftProgress = standard.progressOf(25); final int leftProgress = standard.progressOf(25);
final double leftValue = standard.valueOf(25); final double leftValue = standard.valueOf(25);
assertTrue(leftProgress > 0 && leftProgress < 50); assertTrue(leftProgress > 0 && leftProgress < 50);
@ -37,7 +37,7 @@ public class QuadraticSliderStrategyTest {
} }
@Test @Test
public void testRightRegion() throws Exception { public void testRightRegion() {
final int leftProgress = standard.progressOf(75); final int leftProgress = standard.progressOf(75);
final double leftValue = standard.valueOf(75); final double leftValue = standard.valueOf(75);
assertTrue(leftProgress > 50 && leftProgress < 100); assertTrue(leftProgress > 50 && leftProgress < 100);
@ -45,7 +45,7 @@ public class QuadraticSliderStrategyTest {
} }
@Test @Test
public void testConversion() throws Exception { public void testConversion() {
assertEquals(standard.progressOf(standard.valueOf(0)), 0); assertEquals(standard.progressOf(standard.valueOf(0)), 0);
assertEquals(standard.progressOf(standard.valueOf(25)), 25); assertEquals(standard.progressOf(standard.valueOf(25)), 25);
assertEquals(standard.progressOf(standard.valueOf(50)), 50); assertEquals(standard.progressOf(standard.valueOf(50)), 50);
@ -54,7 +54,7 @@ public class QuadraticSliderStrategyTest {
} }
@Test @Test
public void testReverseConversion() throws Exception { public void testReverseConversion() {
// Need a larger delta since step size / granularity is too small and causes // Need a larger delta since step size / granularity is too small and causes
// floating point round-off errors during conversion // floating point round-off errors during conversion
final float largeDelta = 1f; final float largeDelta = 1f;
@ -67,7 +67,7 @@ public class QuadraticSliderStrategyTest {
} }
@Test @Test
public void testQuadraticPropertyLeftRegion() throws Exception { public void testQuadraticPropertyLeftRegion() {
final double differenceCloserToCenter = final double differenceCloserToCenter =
Math.abs(standard.valueOf(40) - standard.valueOf(45)); Math.abs(standard.valueOf(40) - standard.valueOf(45));
final double differenceFurtherFromCenter = final double differenceFurtherFromCenter =
@ -76,7 +76,7 @@ public class QuadraticSliderStrategyTest {
} }
@Test @Test
public void testQuadraticPropertyRightRegion() throws Exception { public void testQuadraticPropertyRightRegion() {
final double differenceCloserToCenter = final double differenceCloserToCenter =
Math.abs(standard.valueOf(75) - standard.valueOf(70)); Math.abs(standard.valueOf(75) - standard.valueOf(70));
final double differenceFurtherFromCenter = final double differenceFurtherFromCenter =

View File

@ -42,12 +42,12 @@ public class DownloadManagerImplTest {
missions.add(generateFinishedDownloadMission()); missions.add(generateFinishedDownloadMission());
} }
when(downloadDataSource.loadMissions()).thenReturn(new ArrayList<>(missions)); when(downloadDataSource.loadMissions()).thenReturn(new ArrayList<>(missions));
downloadManager = new DownloadManagerImpl(new ArrayList<String>(), downloadDataSource); downloadManager = new DownloadManagerImpl(new ArrayList<>(), downloadDataSource);
} }
@Test(expected = NullPointerException.class) @Test(expected = NullPointerException.class)
public void testConstructorWithNullAsDownloadDataSource() { public void testConstructorWithNullAsDownloadDataSource() {
new DownloadManagerImpl(new ArrayList<String>(), null); new DownloadManagerImpl(new ArrayList<>(), null);
} }
@ -84,7 +84,7 @@ public class DownloadManagerImplTest {
downloadDataSource = mock(DownloadDataSource.class); downloadDataSource = mock(DownloadDataSource.class);
when(downloadDataSource.loadMissions()).thenReturn(new ArrayList<>(missions)); when(downloadDataSource.loadMissions()).thenReturn(new ArrayList<>(missions));
downloadManager = new DownloadManagerImpl(new ArrayList<String>(), downloadDataSource); downloadManager = new DownloadManagerImpl(new ArrayList<>(), downloadDataSource);
verify(downloadDataSource, times(1)).loadMissions(); verify(downloadDataSource, times(1)).loadMissions();
assertEquals(50, downloadManager.getCount()); assertEquals(50, downloadManager.getCount());
@ -110,7 +110,7 @@ public class DownloadManagerImplTest {
} }
@Test @Test
public void resumeMission() throws Exception { public void resumeMission() {
DownloadMission mission = missions.get(0); DownloadMission mission = missions.get(0);
mission.running = true; mission.running = true;
verify(mission, never()).start(); verify(mission, never()).start();
@ -122,7 +122,7 @@ public class DownloadManagerImplTest {
} }
@Test @Test
public void pauseMission() throws Exception { public void pauseMission() {
DownloadMission mission = missions.get(0); DownloadMission mission = missions.get(0);
mission.running = false; mission.running = false;
downloadManager.pauseMission(0); downloadManager.pauseMission(0);
@ -133,7 +133,7 @@ public class DownloadManagerImplTest {
} }
@Test @Test
public void deleteMission() throws Exception { public void deleteMission() {
DownloadMission mission = missions.get(0); DownloadMission mission = missions.get(0);
assertEquals(mission, downloadManager.getMission(0)); assertEquals(mission, downloadManager.getMission(0));
downloadManager.deleteMission(0); downloadManager.deleteMission(0);
@ -143,18 +143,18 @@ public class DownloadManagerImplTest {
} }
@Test(expected = RuntimeException.class) @Test(expected = RuntimeException.class)
public void getMissionWithNegativeIndex() throws Exception { public void getMissionWithNegativeIndex() {
downloadManager.getMission(-1); downloadManager.getMission(-1);
} }
@Test @Test
public void getMission() throws Exception { public void getMission() {
assertSame(missions.get(0), downloadManager.getMission(0)); assertSame(missions.get(0), downloadManager.getMission(0));
assertSame(missions.get(1), downloadManager.getMission(1)); assertSame(missions.get(1), downloadManager.getMission(1));
} }
@Test @Test
public void sortByTimestamp() throws Exception { public void sortByTimestamp() {
ArrayList<DownloadMission> downloadMissions = new ArrayList<>(); ArrayList<DownloadMission> downloadMissions = new ArrayList<>();
DownloadMission mission = new DownloadMission(); DownloadMission mission = new DownloadMission();
mission.timestamp = 0; mission.timestamp = 0;

Some files were not shown because too many files have changed in this diff Show More