diff --git a/app/src/main/assets/gpl_2.html b/app/src/main/assets/gpl_2.html index 37d578a69..0e1b8827e 100644 --- a/app/src/main/assets/gpl_2.html +++ b/app/src/main/assets/gpl_2.html @@ -15,9 +15,9 @@ Version 2, June 1991

-Copyright (C) 1989, 1991 Free Software Foundation, Inc.  
-51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
diff --git a/app/src/main/assets/mpl2.html b/app/src/main/assets/mpl2.html index 5009391a0..5e988a70c 100644 --- a/app/src/main/assets/mpl2.html +++ b/app/src/main/assets/mpl2.html @@ -4,6 +4,7 @@ Mozilla Public License, version 2.0 +

Mozilla Public License
Version 2.0

1. Definitions

diff --git a/app/src/main/java/org/schabi/newpipe/about/License.java b/app/src/main/java/org/schabi/newpipe/about/License.java index 312ad5087..e51e1d0f1 100644 --- a/app/src/main/java/org/schabi/newpipe/about/License.java +++ b/app/src/main/java/org/schabi/newpipe/about/License.java @@ -50,6 +50,10 @@ public class License implements Parcelable { public String getAbbreviation() { return abbreviation; } + + public String getFilename() { + return filename; + } @Override public int describeContents() { diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java index 8b0e67d18..4400cac53 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java @@ -1,22 +1,13 @@ package org.schabi.newpipe.about; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.WebView; +import android.view.*; import android.widget.TextView; - import org.schabi.newpipe.R; import java.util.Arrays; @@ -48,25 +39,7 @@ public class LicenseFragment extends Fragment { * @param license the license to show */ public static void showLicense(Context context, License license) { - if(context == null) { - throw new NullPointerException("context is null"); - } - if(license == null) { - throw new NullPointerException("license is null"); - } - AlertDialog.Builder alert = new AlertDialog.Builder(context); - alert.setTitle(license.getName()); - - WebView wv = new WebView(context); - wv.loadUrl(license.getContentUri().toString()); - alert.setView(wv); - alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - alert.show(); + new LicenseFragmentHelper().execute(context, license); } @Override @@ -111,7 +84,6 @@ public class LicenseFragment extends Fragment { }); softwareComponentsView.addView(componentView); registerForContextMenu(componentView); - } return rootView; } diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java new file mode 100644 index 000000000..726e97ec2 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java @@ -0,0 +1,111 @@ +package org.schabi.newpipe.about; + +import android.content.Context; +import android.content.DialogInterface; +import android.os.AsyncTask; +import android.support.v7.app.AlertDialog; +import android.webkit.WebView; +import org.schabi.newpipe.R; +import org.schabi.newpipe.util.ThemeHelper; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class LicenseFragmentHelper extends AsyncTask { + + private Context context; + private License license; + + @Override + protected Integer doInBackground(Object... objects) { + context = (Context) objects[0]; + license = (License) objects[1]; + return 1; + } + + @Override + protected void onPostExecute(Integer result){ + String webViewData = getFormattedLicense(context, license); + AlertDialog.Builder alert = new AlertDialog.Builder(context); + alert.setTitle(license.getName()); + + WebView wv = new WebView(context); + wv.loadData(webViewData, "text/html; charset=UTF-8", null); + + alert.setView(wv); + alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + alert.show(); + } + + /** + * @param context the context to use + * @param license the license + * @return String which contains a HTML formatted license page styled according to the context's theme + */ + public static String getFormattedLicense(Context context, License license) { + if(context == null) { + throw new NullPointerException("context is null"); + } + if(license == null) { + throw new NullPointerException("license is null"); + } + + String licenseContent = ""; + String webViewData; + try { + BufferedReader in = new BufferedReader(new InputStreamReader(context.getAssets().open(license.getFilename()), "UTF-8")); + String str; + while ((str = in.readLine()) != null) { + licenseContent += str; + } + in.close(); + + // split the HTML file and insert the stylesheet into the HEAD of the file + String[] insert = licenseContent.split(""); + webViewData = insert[0] + "" + + insert[1]; + } catch (Exception e) { + throw new NullPointerException("could not get license file:" + getLicenseStylesheet(context)); + } + return webViewData; + } + + /** + * + * @param context + * @return String which is a CSS stylesheet according to the context's theme + */ + public static String getLicenseStylesheet(Context context) { + boolean isLightTheme = ThemeHelper.isLightThemeSelected(context); + return "body{padding:12px 15px;margin:0;background:#" + + getHexRGBColor(context, isLightTheme + ? R.color.light_license_background_color + : R.color.dark_license_background_color) + + ";color:#" + + getHexRGBColor(context, isLightTheme + ? R.color.light_license_text_color + : R.color.dark_license_text_color) + ";}" + + "a[href]{color:#" + + getHexRGBColor(context, isLightTheme + ? R.color.light_youtube_primary_color + : R.color.dark_youtube_primary_color) + ";}" + + "pre{white-space: pre-wrap;}"; + } + + /** + * Cast R.color to a hexadecimal color value + * @param context the context to use + * @param color the color number from R.color + * @return a six characters long String with hexadecimal RGB values + */ + public static String getHexRGBColor(Context context, int color) { + return context.getResources().getString(color).substring(3); + } + +} diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9f8a41bc5..3008f68ee 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,6 +10,8 @@ #48868686 #1fa6a6a6 #5a000000 + #ffffff + #212121 #222222 @@ -20,6 +22,8 @@ #48ffffff #1f717171 #82000000 + #424242 + #ffffff #000 @@ -37,8 +41,8 @@ #e53935 #fff - #d6d6d6d - #717171d + #d6d6d6 + #717171 #607D8B