diff --git a/app/src/main/java/org/schabi/newpipe/ChannelActivity.java b/app/src/main/java/org/schabi/newpipe/ChannelActivity.java index df26ddb76..52cf680b6 100644 --- a/app/src/main/java/org/schabi/newpipe/ChannelActivity.java +++ b/app/src/main/java/org/schabi/newpipe/ChannelActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; @@ -30,10 +31,10 @@ import org.schabi.newpipe.info_list.InfoListAdapter; import org.schabi.newpipe.report.ErrorActivity; import org.schabi.newpipe.settings.SettingsActivity; import org.schabi.newpipe.util.NavStack; - import java.io.IOException; - import static android.os.Build.VERSION.SDK_INT; +import org.schabi.newpipe.util.ThemeHelper; + /** * Copyright (C) Christian Schabesberger 2016 @@ -53,7 +54,7 @@ import static android.os.Build.VERSION.SDK_INT; * along with NewPipe. If not, see . */ -public class ChannelActivity extends ThemableActivity { +public class ChannelActivity extends AppCompatActivity { private static final String TAG = ChannelActivity.class.toString(); private View rootView = null; @@ -81,7 +82,7 @@ public class ChannelActivity extends ThemableActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + ThemeHelper.setTheme(this, true); setContentView(R.layout.activity_channel); rootView = findViewById(android.R.id.content); diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index b7375fd16..eb9fd313c 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -2,19 +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.util.Log; +import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; - import org.schabi.newpipe.download.DownloadActivity; 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. @@ -36,13 +34,15 @@ 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; private static final String TAG = MainActivity.class.toString(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ThemeHelper.setTheme(this, true); setContentView(R.layout.activity_main); setVolumeControlStream(AudioManager.STREAM_MUSIC); mainFragment = getSupportFragmentManager() @@ -53,7 +53,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/detail/VideoItemDetailActivity.java b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java index 261e219cf..bb040d9da 100644 --- a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java +++ b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailActivity.java @@ -6,24 +6,22 @@ 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.report.ErrorActivity; import org.schabi.newpipe.util.NavStack; +import org.schabi.newpipe.util.ThemeHelper; import java.util.Collection; import java.util.HashSet; -import static android.os.Build.VERSION.SDK_INT; /** @@ -44,7 +42,7 @@ import static android.os.Build.VERSION.SDK_INT; * 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 @@ -60,8 +58,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. @@ -211,33 +237,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/detail/VideoItemDetailFragment.java b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java index 4407d08d9..fe68d2d73 100644 --- a/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/detail/VideoItemDetailFragment.java @@ -33,6 +33,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; + import com.google.android.exoplayer.util.Util; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; @@ -62,6 +63,7 @@ import org.schabi.newpipe.util.NavStack; import org.schabi.newpipe.util.PermissionHelper; import static android.app.Activity.RESULT_OK; +import static com.nononsenseapps.filepicker.R.styleable.AlertDialog; import static org.schabi.newpipe.ReCaptchaActivity.RECAPTCHA_REQUEST; 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 3c80e3be0..61e0a12b7 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 e95a5e710..c15042de8 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,14 @@ 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; @@ -35,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; @@ -66,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; @@ -134,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"; @@ -144,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; @@ -243,9 +184,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(); @@ -335,13 +293,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) { @@ -478,6 +429,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() { @@ -497,8 +498,6 @@ public class ErrorActivity extends ThemableActivity { } } - - private class IpRageReturnRunnable implements Runnable { String ipRange; public IpRageReturnRunnable(String ipRange) { @@ -514,13 +513,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 c4eae1baf..d6af888fb 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/SettingsFragment.java @@ -48,8 +48,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 +58,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..af9458579 100644 --- a/app/src/main/res/drawable/splash_screen.xml +++ b/app/src/main/res/drawable/splash_screen.xml @@ -1,9 +1,6 @@ - - @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/styles.xml b/app/src/main/res/values/styles.xml index a6a25f2d3..606da4eb0 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 + + + +