mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master'
This commit is contained in:
		| @@ -36,6 +36,7 @@ NewPipe does not use any Google framework libraries, or the YouTube API. It only | ||||
| * Open a video in Kodi | ||||
| * Show Next/Related videos | ||||
| * Search YouTube in a specific language | ||||
| * Orbot/Tor support (no streaming yet) | ||||
|  | ||||
| ### Coming Features | ||||
|  | ||||
|   | ||||
| @@ -8,8 +8,8 @@ android { | ||||
|         applicationId "org.schabi.newpipe" | ||||
|         minSdkVersion 15 | ||||
|         targetSdkVersion 23 | ||||
|         versionCode 10 | ||||
|         versionName "0.7.1" | ||||
|         versionCode 11 | ||||
|         versionName "0.7.2" | ||||
|     } | ||||
|     buildTypes { | ||||
|         release { | ||||
|   | ||||
| @@ -15,10 +15,13 @@ public class App extends Application { | ||||
|     @Override | ||||
|     public void onCreate() { | ||||
|         super.onCreate(); | ||||
|         // if Orbot is installed, then default to using Tor, the user can still override | ||||
|         if (OrbotHelper.requestStartTor(this)) { | ||||
|  | ||||
|         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); | ||||
|             configureTor(prefs.getBoolean(getString(R.string.useTor), true)); | ||||
|         if(prefs.getBoolean(getString(R.string.useTorKey), false)) { | ||||
|             OrbotHelper.requestStartTor(this); | ||||
|             configureTor(true); | ||||
|         } else { | ||||
|             configureTor(false); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,23 +1,23 @@ | ||||
| package org.schabi.newpipe; | ||||
|  | ||||
| import android.app.Notification; | ||||
|  | ||||
| import android.app.NotificationManager; | ||||
| import android.content.Context; | ||||
| import android.content.SharedPreferences; | ||||
| import android.graphics.drawable.BitmapDrawable; | ||||
| import android.graphics.drawable.Drawable; | ||||
| import android.os.AsyncTask; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.support.v4.app.NotificationCompat; | ||||
| import android.util.Log; | ||||
|  | ||||
| import java.io.BufferedInputStream; | ||||
| import java.io.BufferedReader; | ||||
| import java.io.File; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.io.InputStreamReader; | ||||
| import java.net.HttpURLConnection; | ||||
| import java.net.MalformedURLException; | ||||
| import java.net.URL; | ||||
| import java.net.UnknownHostException; | ||||
|  | ||||
| @@ -47,7 +47,6 @@ import info.guardianproject.netcipher.NetCipher; | ||||
|  | ||||
| public class Downloader { | ||||
|     public static final String TAG = "Downloader"; | ||||
|  | ||||
|     private static final String USER_AGENT = "Mozilla/5.0"; | ||||
|  | ||||
|     /**Download the text file at the supplied URL as in download(String), | ||||
| @@ -59,7 +58,7 @@ public class Downloader { | ||||
|         String ret = ""; | ||||
|         try { | ||||
|             URL url = new URL(siteUrl); | ||||
|             HttpsURLConnection con = NetCipher.getHttpsURLConnection(url); | ||||
|             HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); | ||||
|             con.setRequestProperty("Accept-Language", language); | ||||
|             ret = dl(con); | ||||
|         } | ||||
| @@ -68,8 +67,9 @@ public class Downloader { | ||||
|         } | ||||
|         return ret; | ||||
|     } | ||||
|  | ||||
|     /**Common functionality between download(String url) and download(String url, String language)*/ | ||||
|     private static String dl(HttpURLConnection con) throws IOException { | ||||
|     private static String dl(HttpsURLConnection con) throws IOException { | ||||
|         StringBuilder response = new StringBuilder(); | ||||
|  | ||||
|         try { | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| package org.schabi.newpipe; | ||||
|  | ||||
| import android.annotation.SuppressLint; | ||||
| import android.content.Context; | ||||
| import android.content.SharedPreferences; | ||||
| import android.content.res.Resources; | ||||
| @@ -22,7 +21,8 @@ public class Localization { | ||||
|     public static Locale getPreferredLocale(Context context) { | ||||
|         SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); | ||||
|  | ||||
|         String languageCode = sp.getString(String.valueOf(R.string.searchLanguage), "en"); | ||||
|         String languageCode = sp.getString(String.valueOf(R.string.searchLanguagePreference), | ||||
|                 context.getString(R.string.defaultLanguageItem)); | ||||
|  | ||||
|         if(languageCode.length() == 2) { | ||||
|             return new Locale(languageCode); | ||||
|   | ||||
| @@ -1,14 +1,19 @@ | ||||
| package org.schabi.newpipe; | ||||
|  | ||||
| import android.app.Activity; | ||||
| import android.app.SharedElementCallback; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.SharedPreferences; | ||||
| import android.content.res.Configuration; | ||||
| import android.os.Bundle; | ||||
| import android.preference.CheckBoxPreference; | ||||
| import android.preference.EditTextPreference; | ||||
| import android.preference.ListPreference; | ||||
| import android.preference.Preference; | ||||
| import android.preference.PreferenceActivity; | ||||
| import android.preference.PreferenceFragment; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.support.annotation.LayoutRes; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.v7.app.ActionBar; | ||||
| @@ -59,37 +64,90 @@ public class SettingsActivity extends PreferenceActivity { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public static class SettingsFragment extends PreferenceFragment { | ||||
|     public static class SettingsFragment extends PreferenceFragment{ | ||||
|         SharedPreferences.OnSharedPreferenceChangeListener prefListener; | ||||
|  | ||||
|         // get keys | ||||
|         String DEFAULT_RESOLUTION_PREFERENCE; | ||||
|         String DEFAULT_AUDIO_FORMAT_PREFERENCE; | ||||
|         String SEARCH_LANGUAGE_PREFERENCE; | ||||
|         String DOWNLOAD_PATH_PREFERENCE; | ||||
|         String USE_TOR_KEY; | ||||
|  | ||||
|         private ListPreference defaultResolutionPreference; | ||||
|         private ListPreference defaultAudioFormatPreference; | ||||
|         private ListPreference searchLanguagePreference; | ||||
|         private EditTextPreference downloadPathPreference; | ||||
|         private CheckBoxPreference useTorCheckBox; | ||||
|         private SharedPreferences defaultPreferences; | ||||
|  | ||||
|  | ||||
|         @Override | ||||
|         public void onCreate(Bundle savedInstanceState) { | ||||
|             super.onCreate(savedInstanceState); | ||||
|             addPreferencesFromResource(R.xml.settings_screen); | ||||
|  | ||||
|             // if Orbot is installed, then default to using Tor, the user can still override | ||||
|             useTorCheckBox = (CheckBoxPreference) findPreference(getString(R.string.useTor)); | ||||
|             final Activity activity = getActivity(); | ||||
|             final boolean useTor = OrbotHelper.isOrbotInstalled(activity); | ||||
|             useTorCheckBox.setDefaultValue(useTor); | ||||
|             useTorCheckBox.setChecked(useTor); | ||||
|             useTorCheckBox.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { | ||||
|  | ||||
|             defaultPreferences = PreferenceManager.getDefaultSharedPreferences(activity); | ||||
|  | ||||
|             // get keys | ||||
|             DEFAULT_RESOLUTION_PREFERENCE =getString(R.string.defaultResolutionPreference); | ||||
|             DEFAULT_AUDIO_FORMAT_PREFERENCE =getString(R.string.defaultAudioFormatPreference); | ||||
|             SEARCH_LANGUAGE_PREFERENCE =getString(R.string.searchLanguagePreference); | ||||
|             DOWNLOAD_PATH_PREFERENCE = getString(R.string.downloadPathPreference); | ||||
|             USE_TOR_KEY = getString(R.string.useTorKey); | ||||
|  | ||||
|             // get pref objects | ||||
|             defaultResolutionPreference = | ||||
|                     (ListPreference) findPreference(DEFAULT_RESOLUTION_PREFERENCE); | ||||
|             defaultAudioFormatPreference = | ||||
|                     (ListPreference) findPreference(DEFAULT_AUDIO_FORMAT_PREFERENCE); | ||||
|             searchLanguagePreference = | ||||
|                     (ListPreference) findPreference(SEARCH_LANGUAGE_PREFERENCE); | ||||
|             downloadPathPreference = | ||||
|                     (EditTextPreference) findPreference(DOWNLOAD_PATH_PREFERENCE); | ||||
|             useTorCheckBox = (CheckBoxPreference) findPreference(USE_TOR_KEY); | ||||
|  | ||||
|             prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() { | ||||
|                 @Override | ||||
|                 public boolean onPreferenceChange(Preference preference, Object o) { | ||||
|                     boolean useTor = (Boolean) o; | ||||
|                     if (useTor) { | ||||
|                         if (OrbotHelper.isOrbotInstalled(activity)) { | ||||
|                 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, | ||||
|                                                       String key) { | ||||
|                     Activity a = getActivity(); | ||||
|                     updateSummary(); | ||||
|  | ||||
|                     if (defaultPreferences.getBoolean(USE_TOR_KEY, false)) { | ||||
|                         if (OrbotHelper.isOrbotInstalled(a)) { | ||||
|                             App.configureTor(true); | ||||
|                             OrbotHelper.requestStartTor(a); | ||||
|                         } else { | ||||
|                             Intent intent = OrbotHelper.getOrbotInstallIntent(activity); | ||||
|                             activity.startActivityForResult(intent, REQUEST_INSTALL_ORBOT); | ||||
|                             Intent intent = OrbotHelper.getOrbotInstallIntent(a); | ||||
|                             a.startActivityForResult(intent, REQUEST_INSTALL_ORBOT); | ||||
|                         } | ||||
|                     } else { | ||||
|                         App.configureTor(false); | ||||
|                     } | ||||
|                     return true; | ||||
|                 } | ||||
|             }); | ||||
|             }; | ||||
|             defaultPreferences.registerOnSharedPreferenceChangeListener(prefListener); | ||||
|  | ||||
|             updateSummary(); | ||||
|         } | ||||
|  | ||||
|         // This is used to show the status of some preference in the description | ||||
|         private void updateSummary() { | ||||
|             defaultResolutionPreference.setSummary( | ||||
|                     defaultPreferences.getString(DEFAULT_RESOLUTION_PREFERENCE, | ||||
|                             getString(R.string.defaultResolutionListItem))); | ||||
|             defaultAudioFormatPreference.setSummary( | ||||
|                     defaultPreferences.getString(DEFAULT_AUDIO_FORMAT_PREFERENCE, | ||||
|                             getString(R.string.defaultAudioFormat))); | ||||
|             searchLanguagePreference.setSummary( | ||||
|                     defaultPreferences.getString(SEARCH_LANGUAGE_PREFERENCE, | ||||
|                             getString(R.string.defaultLanguageItem))); | ||||
|             downloadPathPreference.setSummary( | ||||
|                     defaultPreferences.getString(DOWNLOAD_PATH_PREFERENCE, | ||||
|                             getString(R.string.downloadLocationSummary))); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -99,8 +99,9 @@ public class VideoItemListFragment extends ListFragment { | ||||
|         public void run() { | ||||
|             try { | ||||
|                 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); | ||||
|                 String searchLanguageKey = getContext().getString(R.string.searchLanguage); | ||||
|                 String searchLanguage = sp.getString(searchLanguageKey, "en"); | ||||
|                 String searchLanguageKey = getContext().getString(R.string.searchLanguagePreference); | ||||
|                 String searchLanguage = sp.getString(searchLanguageKey, | ||||
|                         getString(R.string.defaultLanguageItem)); | ||||
|                 SearchEngine.Result result = engine.search(query, page, searchLanguage); | ||||
|                 Log.i(TAG, "language code passed:\""+searchLanguage+"\""); | ||||
|                 if(run) { | ||||
|   | ||||
| @@ -107,6 +107,7 @@ public abstract class VideoExtractor { | ||||
|     } | ||||
|  | ||||
|  | ||||
|     //todo: add licence field | ||||
|     protected abstract int getErrorCode(); | ||||
|     protected abstract String getErrorMessage(); | ||||
|     protected abstract String getVideoUrl(String videoId); | ||||
|   | ||||
| @@ -29,7 +29,8 @@ | ||||
|     </string-array> | ||||
|     <string name="defaultAudioFormat">m4a</string> | ||||
|     <string name="showNextVideo">show_next_video</string> | ||||
|     <string name="searchLanguage">search_language</string> | ||||
|     <string name="searchLanguagePreference">search_language</string> | ||||
|     <string name="useTorKey">use_tor</string> | ||||
|     <!-- TODO: scrape these programmatically, then store in a local cache --> | ||||
|     <!-- alternatively, load these from some local android data store --> | ||||
|     <string-array name='languageCodes'> | ||||
| @@ -111,6 +112,7 @@ | ||||
|         <item>ja</item> | ||||
|         <item>ko</item> | ||||
|     </string-array> | ||||
|     <string name="defaultLanguageItem">en</string> | ||||
|     <string-array name='languageNames'> | ||||
|         <item>Afrikaans</item> | ||||
|         <item>Azərbaycan</item> | ||||
|   | ||||
| @@ -43,11 +43,11 @@ | ||||
|             android:defaultValue="false" /> | ||||
|  | ||||
|         <ListPreference | ||||
|             android:key="@string/searchLanguage" | ||||
|             android:key="@string/searchLanguagePreference" | ||||
|             android:title="@string/searchLanguageTitle" | ||||
|             android:entries="@array/languageNames" | ||||
|             android:entryValues="@array/languageCodes" | ||||
|             android:defaultValue="en" /> | ||||
|             android:defaultValue="@string/defaultLanguageItem" /> | ||||
|  | ||||
|         <CheckBoxPreference | ||||
|             android:key="@string/showNextVideo" | ||||
| @@ -73,9 +73,10 @@ | ||||
|             android:defaultValue="false" /> | ||||
|  | ||||
|         <CheckBoxPreference | ||||
|             android:key="@string/useTor" | ||||
|             android:key="@string/useTorKey" | ||||
|             android:title="@string/useTor" | ||||
|             android:summary="@string/useTorSummary" /> | ||||
|             android:summary="@string/useTorSummary" | ||||
|             android:defaultValue="false"/> | ||||
|  | ||||
|     </PreferenceCategory> | ||||
| </PreferenceScreen> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Weblate
					Weblate