diff --git a/.idea/gradle.xml b/.idea/gradle.xml index bd4202cb3..0833b17cd 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -6,7 +6,7 @@ - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d1998103..1a3eaffb4 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/app.iml b/app/app.iml index 58221a4e6..eefc8deb7 100644 --- a/app/app.iml +++ b/app/app.iml @@ -92,12 +92,12 @@ + + + + - - - - \ No newline at end of file diff --git a/app/src/main/java/org/schabi/newpipe/Downloader.java b/app/src/main/java/org/schabi/newpipe/Downloader.java index 051dacaff..9b9afb32d 100644 --- a/app/src/main/java/org/schabi/newpipe/Downloader.java +++ b/app/src/main/java/org/schabi/newpipe/Downloader.java @@ -1,9 +1,12 @@ package org.schabi.newpipe; +import android.widget.Toast; + import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.net.UnknownHostException; /** * Created by Christian Schabesberger on 14.08.15. @@ -45,7 +48,13 @@ public class Downloader { response.append(inputLine); } in.close(); - } catch (Exception e) { + + } + catch(UnknownHostException uhe) {//thrown when there's no internet connection + uhe.printStackTrace(); + //Toast.makeText(getActivity(), uhe.getMessage(), Toast.LENGTH_LONG).show(); + } + catch (Exception e) { e.printStackTrace(); } return response.toString(); diff --git a/app/src/main/java/org/schabi/newpipe/StreamingService.java b/app/src/main/java/org/schabi/newpipe/StreamingService.java index 6c98f5fbc..e82a1db82 100644 --- a/app/src/main/java/org/schabi/newpipe/StreamingService.java +++ b/app/src/main/java/org/schabi/newpipe/StreamingService.java @@ -24,12 +24,12 @@ public interface StreamingService { class ServiceInfo { public String name = ""; } - ServiceInfo getServiceInfo(); - Class getExtractorClass(); - Class getSearchEngineClass(); + public ServiceInfo getServiceInfo(); + public Extractor getExtractorInstance(); + public SearchEngine getSearchEngineInstance(); - // When a VIEW_ACTION is caught this function will test if the url delivered within the calling - // Intent was meant to be watched with this Service. - // Return false if this service shall not allow to be callean through ACTIONs. + /**When a VIEW_ACTION is caught this function will test if the url delivered within the calling + Intent was meant to be watched with this Service. + Return false if this service shall not allow to be callean through ACTIONs.*/ boolean acceptUrl(String videoUrl); } diff --git a/app/src/main/java/org/schabi/newpipe/VideoInfo.java b/app/src/main/java/org/schabi/newpipe/VideoInfo.java index 5181b6d8b..9f44d36df 100644 --- a/app/src/main/java/org/schabi/newpipe/VideoInfo.java +++ b/app/src/main/java/org/schabi/newpipe/VideoInfo.java @@ -59,7 +59,7 @@ public class VideoInfo { public static final int VIDEO_AVAILABLE = 0x00; public static final int VIDEO_UNAVAILABLE = 0x01; - public static final int VIDEO_UNAVAILABLE_GEMA = 0x02; + public static final int VIDEO_UNAVAILABLE_GEMA = 0x02;//German DRM organisation; sound pretty draconian public static String getNameById(int id) { switch(id) { @@ -68,8 +68,7 @@ public class VideoInfo { case I_WEBM: return F_WEBM; case I_M4A: return F_M4A; case I_WEBMA: return F_WEBMA; - default: Log.e(TAG, "format not known: " + - Integer.toString(id) + "call the programmer he messed it up."); + default: formatNotKnown(id); } return ""; } @@ -81,8 +80,7 @@ public class VideoInfo { case I_WEBM: return C_WEBM; case I_M4A: return C_M4A; case I_WEBMA: return C_WEBMA; - default: Log.e(TAG, "format not known: " + - Integer.toString(id) + "call the programmer he messed it up."); + default: formatNotKnown(id); } return ""; } @@ -94,8 +92,7 @@ public class VideoInfo { case I_WEBM: return M_WEBM; case I_M4A: return M_M4A; case I_WEBMA: return M_WEBMA; - default: Log.e(TAG, "format not known: " + - Integer.toString(id) + "call the programmer he messed it up."); + default: formatNotKnown(id); } return ""; } @@ -109,6 +106,12 @@ public class VideoInfo { public String resolution = ""; } + protected static void formatNotKnown(int id) + { + Log.e(TAG, "format not known: \"" + + Integer.toString(id) + "\". Call the programmer, he messed it up!"); + } + public static class AudioStream { public AudioStream(String url, int format, int bandwidth, int samplingRate) { this.url = url; this.format = format; diff --git a/app/src/main/java/org/schabi/newpipe/VideoInfoItemViewCreator.java b/app/src/main/java/org/schabi/newpipe/VideoInfoItemViewCreator.java index 64db7d15d..e6618ddbf 100644 --- a/app/src/main/java/org/schabi/newpipe/VideoInfoItemViewCreator.java +++ b/app/src/main/java/org/schabi/newpipe/VideoInfoItemViewCreator.java @@ -61,7 +61,7 @@ public class VideoInfoItemViewCreator { if(!info.upload_date.isEmpty()) { holder.itemUploadDateView.setText(info.upload_date); } else { - //tewak if nececeary: This is a hack preventing to have a white space in the layout :P + //tweak if necessary: This is a hack to prevent having white space in the layout :P holder.itemUploadDateView.setText(info.view_count); } diff --git a/app/src/main/java/org/schabi/newpipe/VideoItemDetailActivity.java b/app/src/main/java/org/schabi/newpipe/VideoItemDetailActivity.java index 8f4416f76..3f7860594 100644 --- a/app/src/main/java/org/schabi/newpipe/VideoItemDetailActivity.java +++ b/app/src/main/java/org/schabi/newpipe/VideoItemDetailActivity.java @@ -29,6 +29,7 @@ import android.widget.Toast; * along with NewPipe. If not, see . */ +/***/ public class VideoItemDetailActivity extends AppCompatActivity { private static final String TAG = VideoItemDetailActivity.class.toString(); @@ -69,7 +70,7 @@ public class VideoItemDetailActivity extends AppCompatActivity { try { currentStreamingService = i; extractor = (Extractor) ServiceList.getService(i) - .getExtractorClass().newInstance(); + .getExtractorInstance(); } catch (Exception e) { e.printStackTrace(); } @@ -123,9 +124,9 @@ public class VideoItemDetailActivity extends AppCompatActivity { // activity, the Up button is shown. Use NavUtils to allow users // to navigate up one level in the application structure. For // more details, see the Navigation pattern on Android Design: - // + // http://developer.android.com/design/patterns/navigation.html#up-vs-back - // + Intent intent = new Intent(this, VideoItemListActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); NavUtils.navigateUpTo(this, intent); diff --git a/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java b/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java index 653aed1af..4bb30472c 100644 --- a/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/VideoItemDetailFragment.java @@ -79,16 +79,15 @@ public class VideoItemDetailFragment extends Fragment { private class ExtractorRunnable implements Runnable { private Handler h = new Handler(); - private Class extractorClass; + private Extractor extractor; private String videoUrl; - public ExtractorRunnable(String videoUrl, Class extractorClass, VideoItemDetailFragment f) { - this.extractorClass = extractorClass; + public ExtractorRunnable(String videoUrl, Extractor extractor, VideoItemDetailFragment f) { + this.extractor = extractor; this.videoUrl = videoUrl; } @Override public void run() { try { - Extractor extractor = (Extractor) extractorClass.newInstance(); VideoInfo videoInfo = extractor.getVideoInfo(videoUrl); h.post(new VideoResultReturnedRunnable(videoInfo)); if (videoInfo.videoAvailableStatus == VideoInfo.VIDEO_AVAILABLE) { @@ -170,7 +169,7 @@ public class VideoItemDetailFragment extends Fragment { } } catch (java.lang.NullPointerException e) { - // No god programm design i know. :/ + // Not good program design, I know. :/ Log.w(TAG, "updateThumbnail(): Fragment closed before thread ended work"); } } @@ -312,7 +311,7 @@ public class VideoItemDetailFragment extends Fragment { StreamingService streamingService = ServiceList.getService( getArguments().getInt(STREAMING_SERVICE)); extractorThread = new Thread(new ExtractorRunnable( - getArguments().getString(VIDEO_URL), streamingService.getExtractorClass(), this)); + getArguments().getString(VIDEO_URL), streamingService.getExtractorInstance(), this)); autoPlayEnabled = getArguments().getBoolean(AUTO_PLAY); extractorThread.start(); } catch (Exception e) { diff --git a/app/src/main/java/org/schabi/newpipe/VideoItemListActivity.java b/app/src/main/java/org/schabi/newpipe/VideoItemListActivity.java index 4caeec171..9cea4bee2 100644 --- a/app/src/main/java/org/schabi/newpipe/VideoItemListActivity.java +++ b/app/src/main/java/org/schabi/newpipe/VideoItemListActivity.java @@ -87,13 +87,11 @@ public class VideoItemListActivity extends AppCompatActivity super.onCreate(savedInstanceState); setContentView(R.layout.activity_videoitem_list); - listFragment = (VideoItemListFragment) - getSupportFragmentManager().findFragmentById(R.id.videoitem_list); - //-------- remove this line when multiservice support is implemented ---------- currentStreamingServiceId = ServiceList.getIdOfService("Youtube"); //----------------------------------------------------------------------------- - VideoItemListFragment listFragment = (VideoItemListFragment) getSupportFragmentManager() + + listFragment = (VideoItemListFragment) getSupportFragmentManager() .findFragmentById(R.id.videoitem_list); listFragment.setStreamingService(ServiceList.getService(currentStreamingServiceId)); diff --git a/app/src/main/java/org/schabi/newpipe/VideoItemListFragment.java b/app/src/main/java/org/schabi/newpipe/VideoItemListFragment.java index 950c29f54..4b83dd0a3 100644 --- a/app/src/main/java/org/schabi/newpipe/VideoItemListFragment.java +++ b/app/src/main/java/org/schabi/newpipe/VideoItemListFragment.java @@ -65,14 +65,14 @@ public class VideoItemListFragment extends ListFragment { } private class SearchRunnable implements Runnable { - private Class engineClass = null; + private SearchEngine engine; private String query; private int page; Handler h = new Handler(); private volatile boolean run = true; private int requestId; - public SearchRunnable(Class engineClass, String query, int page, int requestId) { - this.engineClass = engineClass; + public SearchRunnable(SearchEngine engine, String query, int page, int requestId) { + this.engine = engine; this.query = query; this.page = page; this.requestId = requestId; @@ -82,13 +82,6 @@ public class VideoItemListFragment extends ListFragment { } @Override public void run() { - SearchEngine engine = null; - try { - engine = (SearchEngine) engineClass.newInstance(); - } catch(Exception e) { - e.printStackTrace(); - return; - } try { SearchEngine.Result result = engine.search(query, page); if(run) { @@ -179,7 +172,7 @@ public class VideoItemListFragment extends ListFragment { private void startSearch(String query, int page) { currentRequestId++; terminateThreads(); - searchRunnable = new SearchRunnable(streamingService.getSearchEngineClass(), query, page, currentRequestId); + searchRunnable = new SearchRunnable(streamingService.getSearchEngineInstance(), query, page, currentRequestId); searchThread = new Thread(searchRunnable); searchThread.start(); } diff --git a/app/src/main/java/org/schabi/newpipe/youtube/YoutubeExtractor.java b/app/src/main/java/org/schabi/newpipe/youtube/YoutubeExtractor.java index 92a161c5b..47e00b2a9 100644 --- a/app/src/main/java/org/schabi/newpipe/youtube/YoutubeExtractor.java +++ b/app/src/main/java/org/schabi/newpipe/youtube/YoutubeExtractor.java @@ -50,7 +50,7 @@ public class YoutubeExtractor implements Extractor { private static final String TAG = YoutubeExtractor.class.toString(); // These lists only contain itag formats that are supported by the common Android Video player. - // How ever if you are heading for a list showing all itag formats lock at + // How ever if you are heading for a list showing all itag formats look at // https://github.com/rg3/youtube-dl/issues/1687 public static int resolveFormat(int itag) { diff --git a/app/src/main/java/org/schabi/newpipe/youtube/YoutubeService.java b/app/src/main/java/org/schabi/newpipe/youtube/YoutubeService.java index 3dca3811d..dd9fa4397 100644 --- a/app/src/main/java/org/schabi/newpipe/youtube/YoutubeService.java +++ b/app/src/main/java/org/schabi/newpipe/youtube/YoutubeService.java @@ -1,6 +1,9 @@ package org.schabi.newpipe.youtube; import org.schabi.newpipe.StreamingService; +import org.schabi.newpipe.Extractor; +import org.schabi.newpipe.SearchEngine; + /** * Created by Christian Schabesberger on 23.08.15. @@ -30,12 +33,12 @@ public class YoutubeService implements StreamingService { return serviceInfo; } @Override - public Class getExtractorClass() { - return YoutubeExtractor.class; + public Extractor getExtractorInstance() { + return (Extractor) new YoutubeExtractor(); } @Override - public Class getSearchEngineClass() { - return YoutubeSearchEngine.class; + public SearchEngine getSearchEngineInstance() { + return (SearchEngine) new YoutubeSearchEngine(); } @Override public boolean acceptUrl(String videoUrl) {