Merge branch 'license-dialog' of https://github.com/TobiGr/NewPipe into license

This commit is contained in:
Christian Schabesberger 2017-10-29 10:28:52 +01:00
commit 736d9fe450
6 changed files with 127 additions and 35 deletions

View file

@ -15,9 +15,9 @@ Version 2, June 1991
</p> </p>
<pre> <pre>
Copyright (C) 1989, 1991 Free Software Foundation, Inc. Copyright (C) 1989, 1991 Free Software Foundation, Inc.<br/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA<br/>
<br/>
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
</pre> </pre>

View file

@ -4,6 +4,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Mozilla Public License, version 2.0</title> <title>Mozilla Public License, version 2.0</title>
</head>
<body> <body>
<h1 id="mozilla-public-license-version-2.0">Mozilla Public License<br>Version 2.0</h1> <h1 id="mozilla-public-license-version-2.0">Mozilla Public License<br>Version 2.0</h1>
<h2 id="definitions">1. Definitions</h2> <h2 id="definitions">1. Definitions</h2>

View file

@ -51,6 +51,10 @@ public class License implements Parcelable {
return abbreviation; return abbreviation;
} }
public String getFilename() {
return filename;
}
@Override @Override
public int describeContents() { public int describeContents() {
return 0; return 0;

View file

@ -1,22 +1,13 @@
package org.schabi.newpipe.about; package org.schabi.newpipe.about;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog; import android.view.*;
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.widget.TextView; import android.widget.TextView;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import java.util.Arrays; import java.util.Arrays;
@ -48,25 +39,7 @@ public class LicenseFragment extends Fragment {
* @param license the license to show * @param license the license to show
*/ */
public static void showLicense(Context context, License license) { public static void showLicense(Context context, License license) {
if(context == null) { new LicenseFragmentHelper().execute(context, license);
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();
} }
@Override @Override
@ -111,7 +84,6 @@ public class LicenseFragment extends Fragment {
}); });
softwareComponentsView.addView(componentView); softwareComponentsView.addView(componentView);
registerForContextMenu(componentView); registerForContextMenu(componentView);
} }
return rootView; return rootView;
} }

View file

@ -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<Object, Void, Integer> {
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("</head>");
webViewData = insert[0] + "<style type=\"text/css\">"
+ getLicenseStylesheet(context) + "</style></head>"
+ 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);
}
}

View file

@ -10,6 +10,8 @@
<color name="light_ripple_color">#48868686</color> <color name="light_ripple_color">#48868686</color>
<color name="light_contrast_background_color">#1fa6a6a6</color> <color name="light_contrast_background_color">#1fa6a6a6</color>
<color name="light_shadow_start_color">#5a000000</color> <color name="light_shadow_start_color">#5a000000</color>
<color name="light_license_background_color">#ffffff</color>
<color name="light_license_text_color">#212121</color>
<!-- Dark Theme --> <!-- Dark Theme -->
<color name="dark_background_color">#222222</color> <color name="dark_background_color">#222222</color>
@ -20,6 +22,8 @@
<color name="dark_ripple_color">#48ffffff</color> <color name="dark_ripple_color">#48ffffff</color>
<color name="dark_contrast_background_color">#1f717171</color> <color name="dark_contrast_background_color">#1f717171</color>
<color name="dark_shadow_start_color">#82000000</color> <color name="dark_shadow_start_color">#82000000</color>
<color name="dark_license_background_color">#424242</color>
<color name="dark_license_text_color">#ffffff</color>
<!-- Black Theme --> <!-- Black Theme -->
<color name="black_background_color">#000</color> <color name="black_background_color">#000</color>
@ -37,8 +41,8 @@
<color name="subscribe_background_color">#e53935</color> <color name="subscribe_background_color">#e53935</color>
<color name="subscribe_text_color">#fff</color> <color name="subscribe_text_color">#fff</color>
<color name="subscribed_background_color">#d6d6d6</color>d <color name="subscribed_background_color">#d6d6d6</color>
<color name="subscribed_text_color">#717171</color>d <color name="subscribed_text_color">#717171</color>
<!-- GigaGet theme --> <!-- GigaGet theme -->
<color name="bluegray">#607D8B</color> <color name="bluegray">#607D8B</color>