From 8654705e9bb4ab7756c98319c768f376e39b5dac Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Wed, 22 Feb 2017 12:12:39 +0100 Subject: [PATCH 01/20] Change T to K --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 11e9e97b2..b0db9a2e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -152,7 +152,7 @@ videos subscriber views - T + K M B From 50ed962a8286648eaff2657c2f65258c9208e0d8 Mon Sep 17 00:00:00 2001 From: Mauricio Colli Date: Sat, 25 Feb 2017 15:34:45 -0300 Subject: [PATCH 02/20] Add necessary strings --- app/src/main/res/values/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b0db9a2e1..f90b3bb3e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -86,6 +86,8 @@ Error report All Channel + Yes + Later Error @@ -155,6 +157,7 @@ K M B + Restart Start @@ -183,6 +186,7 @@ Please wait… Copied to clipboard. Please select an available download directory. + You have to restart the application to apply the theme.\n\nDo you want to restart now? MD5 From f8d9e0fa60022f93a84988b5ffcda5b08b5340f0 Mon Sep 17 00:00:00 2001 From: Mauricio Colli Date: Sat, 25 Feb 2017 15:36:31 -0300 Subject: [PATCH 03/20] Implement restart dialog --- .../newpipe/settings/SettingsFragment.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java index a6466daf9..48940138e 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java @@ -1,27 +1,27 @@ package org.schabi.newpipe.settings; import android.app.Activity; -import android.app.ListActivity; import android.content.ClipData; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; +import android.support.v7.app.AlertDialog; import com.nononsenseapps.filepicker.FilePickerActivity; import org.schabi.newpipe.App; +import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; import java.util.ArrayList; -import java.util.Objects; import info.guardianproject.netcipher.proxy.OrbotHelper; @@ -141,6 +141,23 @@ public class SettingsFragment extends PreferenceFragment { String theme = sharedPreferences.getString(THEME, "Light"); themePreference.setSummary(theme); + + new AlertDialog.Builder(activity) + .setTitle(R.string.restart_title) + .setMessage(R.string.msg_restart) + .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intentToMain = new Intent(activity, MainActivity.class); + intentToMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + activity.startActivity(intentToMain); + + activity.finish(); + Runtime.getRuntime().exit(0); + } + }) + .setNegativeButton(R.string.later, null) + .create().show(); } updateSummary(); } From 6ec393699eef298018cf3aa6e04b3db5c2b7f6dc Mon Sep 17 00:00:00 2001 From: Mauricio Colli Date: Sat, 25 Feb 2017 16:04:10 -0300 Subject: [PATCH 04/20] Check if selected theme it's not the current --- .../newpipe/settings/SettingsFragment.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java index 48940138e..c4eae1baf 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java @@ -98,6 +98,8 @@ public class SettingsFragment extends PreferenceFragment downloadPathAudioPreference = findPreference(DOWNLOAD_PATH_AUDIO_PREFERENCE); themePreference = findPreference(THEME); + final String currentTheme = defaultPreferences.getString(THEME, "Light"); + prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, @@ -139,25 +141,27 @@ public class SettingsFragment extends PreferenceFragment } else if (key == THEME) { - String theme = sharedPreferences.getString(THEME, "Light"); - themePreference.setSummary(theme); + String selectedTheme = sharedPreferences.getString(THEME, "Light"); + themePreference.setSummary(selectedTheme); - new AlertDialog.Builder(activity) - .setTitle(R.string.restart_title) - .setMessage(R.string.msg_restart) - .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Intent intentToMain = new Intent(activity, MainActivity.class); - intentToMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - activity.startActivity(intentToMain); + if(!selectedTheme.equals(currentTheme)) { // If it's not the current theme + new AlertDialog.Builder(activity) + .setTitle(R.string.restart_title) + .setMessage(R.string.msg_restart) + .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intentToMain = new Intent(activity, MainActivity.class); + intentToMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + activity.startActivity(intentToMain); - activity.finish(); - Runtime.getRuntime().exit(0); - } - }) - .setNegativeButton(R.string.later, null) - .create().show(); + activity.finish(); + Runtime.getRuntime().exit(0); + } + }) + .setNegativeButton(R.string.later, null) + .create().show(); + } } updateSummary(); } From 319d769233f8c3ba55edf38c77f7b659f7d0bf6f Mon Sep 17 00:00:00 2001 From: Mauricio Colli Date: Sat, 25 Feb 2017 18:14:32 -0300 Subject: [PATCH 05/20] Change video Id The previous wasn't working --- .../youtube/youtube/YoutubeStreamUrlIdHandlerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/test/java/org/schabi/newpipe/extractor/services/youtube/youtube/YoutubeStreamUrlIdHandlerTest.java b/app/src/test/java/org/schabi/newpipe/extractor/services/youtube/youtube/YoutubeStreamUrlIdHandlerTest.java index 79bb5d88e..67746ade3 100644 --- a/app/src/test/java/org/schabi/newpipe/extractor/services/youtube/youtube/YoutubeStreamUrlIdHandlerTest.java +++ b/app/src/test/java/org/schabi/newpipe/extractor/services/youtube/youtube/YoutubeStreamUrlIdHandlerTest.java @@ -111,9 +111,9 @@ public class YoutubeStreamUrlIdHandlerTest { assertTrue(urlIdHandler.acceptUrl("vnd.youtube:jZViOEv90dI")); - String sharedId = "7JIArTByb3E"; + String sharedId = "8A940MXKFmQ"; assertTrue(urlIdHandler.acceptUrl("vnd.youtube://www.youtube.com/shared?ci=" + sharedId + "&feature=twitter-deep-link")); assertTrue(urlIdHandler.acceptUrl("vnd.youtube://www.youtube.com/shared?ci=" + sharedId )); - assertTrue(urlIdHandler.acceptUrl("https://www.youtube.com/shared?ci=7JIArTByb3E")); + assertTrue(urlIdHandler.acceptUrl("https://www.youtube.com/shared?ci=" + sharedId)); } } \ No newline at end of file From 07f6d0f14975aa7c0e5eddf441337754f80ef824 Mon Sep 17 00:00:00 2001 From: Mauricio Colli Date: Sat, 25 Feb 2017 18:15:50 -0300 Subject: [PATCH 06/20] Fix bug lower case id This method was passing the lowercase url --- .../services/youtube/YoutubeStreamUrlIdHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java b/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java index 355da0402..0d52612da 100644 --- a/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java +++ b/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java @@ -15,7 +15,6 @@ import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLDecoder; -import java.util.regex.Matcher; /** * Created by Christian Schabesberger on 02.02.16. @@ -149,12 +148,14 @@ public class YoutubeStreamUrlIdHandler implements UrlIdHandler { @Override public boolean acceptUrl(String videoUrl) { + String originalUrl = videoUrl; + videoUrl = videoUrl.toLowerCase(); if(videoUrl.contains("youtube") || videoUrl.contains("youtu.be")) { // bad programming I know try { - getId(videoUrl); + getId(originalUrl); return true; } catch (Exception e) { return false; From 2ccae841d6611f3975a8f1ede44466560870518b Mon Sep 17 00:00:00 2001 From: Mauricio Colli Date: Sun, 26 Feb 2017 07:47:13 -0300 Subject: [PATCH 07/20] Change variable names For a better understanding of what is going on --- .../services/youtube/YoutubeStreamUrlIdHandler.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java b/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java index 0d52612da..055cd5970 100644 --- a/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java +++ b/app/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamUrlIdHandler.java @@ -148,14 +148,12 @@ public class YoutubeStreamUrlIdHandler implements UrlIdHandler { @Override public boolean acceptUrl(String videoUrl) { - String originalUrl = videoUrl; - - videoUrl = videoUrl.toLowerCase(); - if(videoUrl.contains("youtube") || - videoUrl.contains("youtu.be")) { + String lowercaseUrl = videoUrl.toLowerCase(); + if(lowercaseUrl.contains("youtube") || + lowercaseUrl.contains("youtu.be")) { // bad programming I know try { - getId(originalUrl); + getId(videoUrl); return true; } catch (Exception e) { return false; From 89e70626eb3a8d7d91cb7ee33829c7ba0b94743b Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Sun, 26 Feb 2017 21:38:02 +0100 Subject: [PATCH 08/20] update support framework --- app/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 62cd8dc7b..127a065a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,10 +32,10 @@ android { dependencies { testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.1.1' - compile 'com.android.support:support-v4:25.1.1' - compile 'com.android.support:design:25.1.1' - compile 'com.android.support:recyclerview-v7:25.1.1' + compile 'com.android.support:appcompat-v7:25.2.0' + compile 'com.android.support:support-v4:25.2.0' + compile 'com.android.support:design:25.2.0' + compile 'com.android.support:recyclerview-v7:25.2.0' compile 'org.jsoup:jsoup:1.8.3' compile 'org.mozilla:rhino:1.7.7' compile 'info.guardianproject.netcipher:netcipher:1.2' From d17496f7207b6d4475e1d122aecef3fd6bc0a301 Mon Sep 17 00:00:00 2001 From: 59436419 Date: Mon, 27 Feb 2017 17:25:15 +0530 Subject: [PATCH 09/20] Improved code for changing theme --- app/build.gradle | 8 +- .../org/schabi/newpipe/ChannelActivity.java | 15 +- .../java/org/schabi/newpipe/MainActivity.java | 8 +- .../org/schabi/newpipe/ThemableActivity.java | 19 --- .../detail/VideoItemDetailActivity.java | 61 +++---- .../newpipe/download/DownloadActivity.java | 19 +-- .../schabi/newpipe/report/ErrorActivity.java | 155 +++++++++--------- .../newpipe/settings/SettingsActivity.java | 20 +-- .../newpipe/settings/SettingsFragment.java | 8 +- .../org/schabi/newpipe/util/ThemeHelper.java | 31 ++++ .../main/res/drawable-v21/splash_screen.xml | 12 ++ app/src/main/res/drawable/splash_screen.xml | 2 +- app/src/main/res/values-de/strings.xml | 78 ++++----- app/src/main/res/values-es/strings.xml | 78 ++++----- app/src/main/res/values-id/strings.xml | 78 ++++----- app/src/main/res/values-it/strings.xml | 78 ++++----- app/src/main/res/values-ja/strings.xml | 78 ++++----- app/src/main/res/values-nl/strings.xml | 78 ++++----- app/src/main/res/values-pt/strings.xml | 78 ++++----- app/src/main/res/values-sk/strings.xml | 78 ++++----- app/src/main/res/values-sr/strings.xml | 78 ++++----- app/src/main/res/values/settings_keys.xml | 2 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 9 + 24 files changed, 538 insertions(+), 534 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/ThemableActivity.java create mode 100644 app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java create mode 100644 app/src/main/res/drawable-v21/splash_screen.xml diff --git a/app/build.gradle b/app/build.gradle index 488012afc..a64e72496 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,10 +32,10 @@ android { dependencies { testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.1.1' - compile 'com.android.support:support-v4:25.1.1' - compile 'com.android.support:design:25.1.1' - compile 'com.android.support:recyclerview-v7:25.1.1' + compile 'com.android.support:appcompat-v7:25.1.0' + compile 'com.android.support:support-v4:25.1.0' + compile 'com.android.support:design:25.1.0' + compile 'com.android.support:recyclerview-v7:25.1.0' compile 'org.jsoup:jsoup:1.8.3' compile 'org.mozilla:rhino:1.7.7' compile 'info.guardianproject.netcipher:netcipher:1.2' diff --git a/app/src/main/java/org/schabi/newpipe/ChannelActivity.java b/app/src/main/java/org/schabi/newpipe/ChannelActivity.java index e64605218..86f902ea6 100644 --- a/app/src/main/java/org/schabi/newpipe/ChannelActivity.java +++ b/app/src/main/java/org/schabi/newpipe/ChannelActivity.java @@ -4,7 +4,6 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; -import android.preference.PreferenceManager; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; @@ -30,9 +29,9 @@ import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.info_list.InfoListAdapter; import org.schabi.newpipe.report.ErrorActivity; +import org.schabi.newpipe.util.ThemeHelper; import java.io.IOException; -import java.util.Objects; /** * Copyright (C) Christian Schabesberger 2016 @@ -55,13 +54,11 @@ import java.util.Objects; public class ChannelActivity extends AppCompatActivity { - private static final String TAG = ChannelActivity.class.toString(); - private View rootView = null; - // intent const public static final String CHANNEL_URL = "channel_url"; public static final String SERVICE_ID = "service_id"; - + private static final String TAG = ChannelActivity.class.toString(); + private View rootView = null; private int serviceId = -1; private String channelUrl = ""; private int pageNumber = 0; @@ -73,12 +70,8 @@ public class ChannelActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { - if (PreferenceManager.getDefaultSharedPreferences(this) - .getString("theme", getResources().getString(R.string.light_theme_title)). - equals(getResources().getString(R.string.dark_theme_title))) { - setTheme(R.style.DarkTheme_NoActionBar); - } super.onCreate(savedInstanceState); + ThemeHelper.setTheme(this, false); setContentView(R.layout.activity_channel); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); rootView = findViewById(R.id.rootView); diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index 3621603de..a4cf408ab 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -2,15 +2,17 @@ package org.schabi.newpipe; import android.content.Intent; import android.media.AudioManager; +import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.NavUtils; -import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import org.schabi.newpipe.settings.SettingsActivity; import org.schabi.newpipe.util.PermissionHelper; +import org.schabi.newpipe.util.ThemeHelper; /** * Created by Christian Schabesberger on 02.08.16. @@ -32,13 +34,14 @@ import org.schabi.newpipe.util.PermissionHelper; * along with NewPipe. If not, see . */ -public class MainActivity extends ThemableActivity { +public class MainActivity extends AppCompatActivity { private Fragment mainFragment = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ThemeHelper.setTheme(this, true); setContentView(R.layout.activity_main); setVolumeControlStream(AudioManager.STREAM_MUSIC); mainFragment = getSupportFragmentManager() @@ -49,7 +52,6 @@ public class MainActivity extends ThemableActivity { public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.main_menu, menu); return true; } diff --git a/app/src/main/java/org/schabi/newpipe/ThemableActivity.java b/app/src/main/java/org/schabi/newpipe/ThemableActivity.java deleted file mode 100644 index 81789ec1c..000000000 --- a/app/src/main/java/org/schabi/newpipe/ThemableActivity.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.schabi.newpipe; - -import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.v7.app.AppCompatActivity; - -public class ThemableActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (PreferenceManager.getDefaultSharedPreferences(this) - .getString("theme", getResources().getString(R.string.light_theme_title)). - equals(getResources().getString(R.string.dark_theme_title))) { - setTheme(R.style.DarkTheme); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java index 354f0b47d..1acf05258 100644 --- a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java +++ b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java @@ -5,17 +5,17 @@ import android.media.AudioManager; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.NavUtils; +import android.support.v7.app.AppCompatActivity; import android.util.Log; -import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import org.schabi.newpipe.App; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; -import org.schabi.newpipe.ThemableActivity; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.util.ThemeHelper; import java.util.Collection; import java.util.HashSet; @@ -39,7 +39,7 @@ import java.util.HashSet; * along with NewPipe. If not, see . */ -public class VideoItemDetailActivity extends ThemableActivity { +public class VideoItemDetailActivity extends AppCompatActivity { /** * Removes invisible separators (\p{Z}) and punctuation characters including @@ -55,8 +55,36 @@ public class VideoItemDetailActivity extends ThemableActivity { private String videoUrl; private int currentStreamingService = -1; + private static String removeHeadingGibberish(final String input) { + int start = 0; + for (int i = input.indexOf("://") - 1; i >= 0; i--) { + if (!input.substring(i, i + 1).matches("\\p{L}")) { + start = i + 1; + break; + } + } + return input.substring(start, input.length()); + } + + private static String trim(final String input) { + if (input == null || input.length() < 1) { + return input; + } else { + String output = input; + while (output.length() > 0 && output.substring(0, 1).matches(REGEX_REMOVE_FROM_URL)) { + output = output.substring(1); + } + while (output.length() > 0 + && output.substring(output.length() - 1, output.length()).matches(REGEX_REMOVE_FROM_URL)) { + output = output.substring(0, output.length() - 1); + } + return output; + } + } + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ThemeHelper.setTheme(this, true); setContentView(R.layout.activity_videoitem_detail); setVolumeControlStream(AudioManager.STREAM_MUSIC); // Show the Up button in the action bar. @@ -193,33 +221,6 @@ public class VideoItemDetailActivity extends ThemableActivity { return result.toArray(new String[result.size()]); } - private static String removeHeadingGibberish(final String input) { - int start = 0; - for (int i = input.indexOf("://") - 1; i >= 0; i--) { - if (!input.substring(i, i + 1).matches("\\p{L}")) { - start = i + 1; - break; - } - } - return input.substring(start, input.length()); - } - - private static String trim(final String input) { - if (input == null || input.length() < 1) { - return input; - } else { - String output = input; - while (output.length() > 0 && output.substring(0, 1).matches(REGEX_REMOVE_FROM_URL)) { - output = output.substring(1); - } - while (output.length() > 0 - && output.substring(output.length() - 1, output.length()).matches(REGEX_REMOVE_FROM_URL)) { - output = output.substring(0, output.length() - 1); - } - return output; - } - } - private int getServiceIdByUrl(String url) { StreamingService[] serviceList = NewPipe.getServices(); int service = -1; diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java index 2cf8cedc9..68fd68b63 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java @@ -3,18 +3,15 @@ package org.schabi.newpipe.download; import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.FragmentTransaction; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.ServiceConnection; import android.content.SharedPreferences; import android.os.Bundle; -import android.os.IBinder; import android.preference.PreferenceManager; import android.support.v4.app.NavUtils; import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -28,32 +25,28 @@ import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; -import org.schabi.newpipe.ThemableActivity; -import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.R; +import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.settings.NewPipeSettings; import org.schabi.newpipe.settings.SettingsActivity; +import org.schabi.newpipe.util.ThemeHelper; import java.io.File; import java.util.Vector; -import us.shandian.giga.get.DownloadManager; import us.shandian.giga.service.DownloadManagerService; import us.shandian.giga.ui.fragment.AllMissionsFragment; import us.shandian.giga.ui.fragment.MissionsFragment; import us.shandian.giga.util.CrashHandler; import us.shandian.giga.util.Utility; -public class DownloadActivity extends ThemableActivity implements AdapterView.OnItemClickListener{ +public class DownloadActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { public static final String INTENT_DOWNLOAD = "us.shandian.giga.intent.DOWNLOAD"; public static final String INTENT_LIST = "us.shandian.giga.intent.LIST"; - - private static final String TAG = DownloadActivity.class.toString(); public static final String THREADS = "threads"; - - + private static final String TAG = DownloadActivity.class.toString(); private MissionsFragment mFragment; @@ -72,9 +65,9 @@ public class DownloadActivity extends ThemableActivity implements AdapterView.On startService(i); super.onCreate(savedInstanceState); + ThemeHelper.setTheme(this, true); setContentView(R.layout.activity_downloader); - //noinspection ConstantConditions // its ok if this fails, we will catch that error later, and send it as report diff --git a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java index 039ed8eaa..e79f796a6 100644 --- a/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/report/ErrorActivity.java @@ -1,5 +1,3 @@ - - package org.schabi.newpipe.report; import android.app.Activity; @@ -8,14 +6,15 @@ import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Build; +import android.os.Bundle; +import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; import android.preference.PreferenceManager; import android.support.design.widget.Snackbar; import android.support.v4.app.NavUtils; import android.support.v7.app.ActionBar; -import android.os.Bundle; -import android.os.Handler; +import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; @@ -34,8 +33,8 @@ import org.schabi.newpipe.BuildConfig; import org.schabi.newpipe.Downloader; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; -import org.schabi.newpipe.ThemableActivity; import org.schabi.newpipe.extractor.Parser; +import org.schabi.newpipe.util.ThemeHelper; import java.io.PrintWriter; import java.io.StringWriter; @@ -65,65 +64,12 @@ import java.util.Vector; * along with NewPipe. If not, see . */ -public class ErrorActivity extends ThemableActivity { - public static class ErrorInfo implements Parcelable { - public int userAction; - public String request; - public String serviceName; - public int message; - - public static ErrorInfo make(int userAction, String serviceName, String request, int message) { - ErrorInfo info = new ErrorInfo(); - info.userAction = userAction; - info.serviceName = serviceName; - info.request = request; - info.message = message; - return info; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(this.userAction); - dest.writeString(this.request); - dest.writeString(this.serviceName); - dest.writeInt(this.message); - } - - public ErrorInfo() { - } - - protected ErrorInfo(Parcel in) { - this.userAction = in.readInt(); - this.request = in.readString(); - this.serviceName = in.readString(); - this.message = in.readInt(); - } - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - @Override - public ErrorInfo createFromParcel(Parcel source) { - return new ErrorInfo(source); - } - - @Override - public ErrorInfo[] newArray(int size) { - return new ErrorInfo[size]; - } - }; - } - +public class ErrorActivity extends AppCompatActivity { // LOG TAGS public static final String TAG = ErrorActivity.class.toString(); - // BUNDLE TAGS public static final String ERROR_INFO = "error_info"; public static final String ERROR_LIST = "error_list"; - // MESSAGE ID public static final int SEARCHED = 0; public static final int REQUESTED_STREAM = 1; @@ -133,7 +79,6 @@ public class ErrorActivity extends ThemableActivity { public static final int LOAD_IMAGE = 5; public static final int UI_ERROR = 6; public static final int REQUESTED_CHANNEL = 7; - // MESSAGE STRING public static final String SEARCHED_STRING = "searched"; public static final String REQUESTED_STREAM_STRING = "requested stream"; @@ -143,17 +88,14 @@ public class ErrorActivity extends ThemableActivity { public static final String LOAD_IMAGE_STRING = "load image"; public static final String UI_ERROR_STRING = "ui error"; public static final String REQUESTED_CHANNEL_STRING = "requested channel"; - public static final String ERROR_EMAIL_ADDRESS = "crashreport@newpipe.schabi.org"; public static final String ERROR_EMAIL_SUBJECT = "Exception in NewPipe " + BuildConfig.VERSION_NAME; - + Thread globIpRangeThread; private String[] errorList; private ErrorInfo errorInfo; private Class returnActivity; private String currentTimeStamp; private String globIpRange; - Thread globIpRangeThread; - // views private TextView errorView; private EditText userCommentBox; @@ -238,9 +180,26 @@ public class ErrorActivity extends ThemableActivity { context.startActivity(intent); } + private static String getStackTrace(final Throwable throwable) { + final StringWriter sw = new StringWriter(); + final PrintWriter pw = new PrintWriter(sw, true); + throwable.printStackTrace(pw); + return sw.getBuffer().toString(); + } + + // errorList to StringList + private static String[] elToSl(List stackTraces) { + String[] out = new String[stackTraces.size()]; + for (int i = 0; i < stackTraces.size(); i++) { + out[i] = getStackTrace(stackTraces.get(i)); + } + return out; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ThemeHelper.setTheme(this, true); setContentView(R.layout.activity_error); Intent intent = getIntent(); @@ -325,13 +284,6 @@ public class ErrorActivity extends ThemableActivity { return false; } - private static String getStackTrace(final Throwable throwable) { - final StringWriter sw = new StringWriter(); - final PrintWriter pw = new PrintWriter(sw, true); - throwable.printStackTrace(pw); - return sw.getBuffer().toString(); - } - private String formErrorText(String[] el) { String text = ""; if(el != null) { @@ -468,6 +420,56 @@ public class ErrorActivity extends ThemableActivity { return df.format(new Date()); } + public static class ErrorInfo implements Parcelable { + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public ErrorInfo createFromParcel(Parcel source) { + return new ErrorInfo(source); + } + + @Override + public ErrorInfo[] newArray(int size) { + return new ErrorInfo[size]; + } + }; + public int userAction; + public String request; + public String serviceName; + public int message; + + public ErrorInfo() { + } + + protected ErrorInfo(Parcel in) { + this.userAction = in.readInt(); + this.request = in.readString(); + this.serviceName = in.readString(); + this.message = in.readInt(); + } + + public static ErrorInfo make(int userAction, String serviceName, String request, int message) { + ErrorInfo info = new ErrorInfo(); + info.userAction = userAction; + info.serviceName = serviceName; + info.request = request; + info.message = message; + return info; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(this.userAction); + dest.writeString(this.request); + dest.writeString(this.serviceName); + dest.writeInt(this.message); + } + } + private class IpRagneRequester implements Runnable { Handler h = new Handler(); public void run() { @@ -487,8 +489,6 @@ public class ErrorActivity extends ThemableActivity { } } - - private class IpRageReturnRunnable implements Runnable { String ipRange; public IpRageReturnRunnable(String ipRange) { @@ -504,13 +504,4 @@ public class ErrorActivity extends ThemableActivity { } } } - - // errorList to StringList - private static String[] elToSl(List stackTraces) { - String[] out = new String[stackTraces.size()]; - for(int i = 0; i < stackTraces.size(); i++) { - out[i] = getStackTrace(stackTraces.get(i)); - } - return out; - } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java index 7765f9653..1ad2747a7 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsActivity.java @@ -5,7 +5,6 @@ import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceActivity; -import android.preference.PreferenceManager; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.v7.app.ActionBar; @@ -16,8 +15,7 @@ import android.view.View; import android.view.ViewGroup; import org.schabi.newpipe.R; - -import java.util.Objects; +import org.schabi.newpipe.util.ThemeHelper; /** @@ -41,16 +39,16 @@ import java.util.Objects; */ public class SettingsActivity extends PreferenceActivity { - private AppCompatDelegate mDelegate = null; SettingsFragment f = new SettingsFragment(); + private AppCompatDelegate mDelegate = null; + + public static void initSettings(Context context) { + NewPipeSettings.initSettings(context); + } @Override protected void onCreate(Bundle savedInstanceBundle) { - if (PreferenceManager.getDefaultSharedPreferences(this) - .getString("theme", getResources().getString(R.string.light_theme_title)). - equals(getResources().getString(R.string.dark_theme_title))) { - setTheme(R.style.DarkTheme); - } + ThemeHelper.setTheme(this, true); getDelegate().installViewFactory(); getDelegate().onCreate(savedInstanceBundle); super.onCreate(savedInstanceBundle); @@ -156,8 +154,4 @@ public class SettingsActivity extends PreferenceActivity { } return true; } - - public static void initSettings(Context context) { - NewPipeSettings.initSettings(context); - } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java index a6466daf9..206d989e4 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java @@ -1,14 +1,12 @@ package org.schabi.newpipe.settings; import android.app.Activity; -import android.app.ListActivity; import android.content.ClipData; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; @@ -21,7 +19,6 @@ import org.schabi.newpipe.App; import org.schabi.newpipe.R; import java.util.ArrayList; -import java.util.Objects; import info.guardianproject.netcipher.proxy.OrbotHelper; @@ -48,8 +45,8 @@ import info.guardianproject.netcipher.proxy.OrbotHelper; public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { + public static final int REQUEST_INSTALL_ORBOT = 0x1234; SharedPreferences.OnSharedPreferenceChangeListener prefListener; - // get keys String DEFAULT_RESOLUTION_PREFERENCE; String DEFAULT_AUDIO_FORMAT_PREFERENCE; @@ -58,9 +55,6 @@ public class SettingsFragment extends PreferenceFragment String DOWNLOAD_PATH_AUDIO_PREFERENCE; String USE_TOR_KEY; String THEME; - - public static final int REQUEST_INSTALL_ORBOT = 0x1234; - private ListPreference defaultResolutionPreference; private ListPreference defaultAudioFormatPreference; private ListPreference searchLanguagePreference; diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java new file mode 100644 index 000000000..a4fdb72f7 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java @@ -0,0 +1,31 @@ +package org.schabi.newpipe.util; + +import android.content.Context; +import android.preference.PreferenceManager; + +import org.schabi.newpipe.R; + +public class ThemeHelper { + + public static void setTheme(Context context, boolean mode) { + // mode is true for normal theme, false for no action bar theme. + + String themeKey = context.getString(R.string.theme_key); + //String lightTheme = context.getResources().getString(R.string.light_theme_title); + String darkTheme = context.getResources().getString(R.string.dark_theme_title); + String blackTheme = context.getResources().getString(R.string.black_theme_title); + + String sp = PreferenceManager.getDefaultSharedPreferences(context) + .getString(themeKey, context.getResources().getString(R.string.light_theme_title)); + + if (mode) { + if (sp.equals(darkTheme)) context.setTheme(R.style.DarkTheme); + else if (sp.equals(blackTheme)) context.setTheme(R.style.BlackTheme); + else context.setTheme(R.style.AppTheme); + } else { + if (sp.equals(darkTheme)) context.setTheme(R.style.DarkTheme_NoActionBar); + else if (sp.equals(blackTheme)) context.setTheme(R.style.BlackTheme_NoActionBar); + else context.setTheme(R.style.AppTheme_NoActionBar); + } + } +} diff --git a/app/src/main/res/drawable-v21/splash_screen.xml b/app/src/main/res/drawable-v21/splash_screen.xml new file mode 100644 index 000000000..34a890727 --- /dev/null +++ b/app/src/main/res/drawable-v21/splash_screen.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_screen.xml b/app/src/main/res/drawable/splash_screen.xml index e049c2941..c016189ac 100644 --- a/app/src/main/res/drawable/splash_screen.xml +++ b/app/src/main/res/drawable/splash_screen.xml @@ -2,7 +2,7 @@ + android:drawable="windowBackground"/> @string/light_theme_title @string/dark_theme_title + @string/black_theme_title @string/light_theme_title @string/dark_theme_title + @string/black_theme_title default_audio_format diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 66204d0c8..ec05f2ca3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,7 @@ Light Dark Black + Theme will be applied on next launch. Download diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2339c12a5..22cc59274 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -49,6 +49,10 @@ @drawable/ic_rss_feed_black_24dp + + + +