Fix charset issue.
Move Java I/O related methods to separate thread.
This commit is contained in:
parent
74bda719a6
commit
0040ee5cb6
|
@ -1,22 +1,15 @@
|
||||||
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.*;
|
||||||
import android.webkit.WebView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.util.ThemeHelper;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
@ -46,70 +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);
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
wv.loadData(webViewData, "text/html", "utf-8");
|
|
||||||
|
|
||||||
alert.setView(wv);
|
|
||||||
alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
dialog.dismiss();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
alert.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getLicenseStylesheet(Context context) {
|
|
||||||
return "body{padding:12px 15px;margin:0;background:#"
|
|
||||||
+ getHexRGBColor(context,(ThemeHelper.isLightThemeSelected(context))
|
|
||||||
? R.color.light_license_background_color
|
|
||||||
: R.color.dark_license_background_color)
|
|
||||||
+ ";color:#"
|
|
||||||
+ getHexRGBColor(context,(ThemeHelper.isLightThemeSelected(context))
|
|
||||||
? R.color.light_license_text_color
|
|
||||||
: R.color.dark_license_text_color) + ";}"
|
|
||||||
+ "a[href]{color:#"
|
|
||||||
+ getHexRGBColor(context,(ThemeHelper.isLightThemeSelected(context))
|
|
||||||
? 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -154,7 +84,6 @@ public class LicenseFragment extends Fragment {
|
||||||
});
|
});
|
||||||
softwareComponentsView.addView(componentView);
|
softwareComponentsView.addView(componentView);
|
||||||
registerForContextMenu(componentView);
|
registerForContextMenu(componentView);
|
||||||
|
|
||||||
}
|
}
|
||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue