Updated ProxyUtils to automatically start TOR when needed, more abstraction of BrowserActivity, other cleanup
This commit is contained in:
parent
aa21657875
commit
e35b368d50
@ -93,6 +93,7 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/palette-v7/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.0/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/net.i2p.android/client/0.7/jars" />
|
||||
@ -115,6 +116,7 @@
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" exported="" name="client-0.7" level="project" />
|
||||
<orderEntry type="library" exported="" name="palette-v7-22.2.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="design-22.2.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="support-v4-22.2.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="support-annotations-22.2.0" level="project" />
|
||||
<orderEntry type="library" exported="" name="appcompat-v7-22.2.0" level="project" />
|
||||
|
@ -46,6 +46,7 @@ android {
|
||||
dependencies {
|
||||
compile 'com.android.support:palette-v7:22.2.0'
|
||||
compile 'com.android.support:appcompat-v7:22.2.0'
|
||||
compile 'com.android.support:design:22.2.0'
|
||||
compile 'org.jsoup:jsoup:1.8.1'
|
||||
|
||||
// Only Lightning Plus needs the proxy libraries
|
||||
|
@ -117,7 +117,7 @@ public class ProxyUtils {
|
||||
|
||||
case Constants.PROXY_ORBOT:
|
||||
if (!OrbotHelper.isOrbotRunning(activity))
|
||||
OrbotHelper.requestShowOrbotStart(activity);
|
||||
OrbotHelper.requestStartTor(activity);
|
||||
host = "localhost";
|
||||
port = 8118;
|
||||
break;
|
||||
|
@ -139,7 +139,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
|
||||
// List
|
||||
private final List<LightningView> mWebViewList = new ArrayList<>();
|
||||
private List<HistoryItem> mBookmarkList;
|
||||
private final List<HistoryItem> mBookmarkList = new ArrayList<>();
|
||||
private LightningView mCurrentView;
|
||||
private WebView mWebView;
|
||||
|
||||
@ -164,8 +164,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
private Activity mActivity;
|
||||
|
||||
// Primatives
|
||||
private boolean mSystemBrowser = false, mIsNewIntent = false, mFullScreen, mColorMode,
|
||||
mDarkTheme;
|
||||
private boolean mSystemBrowser = false, mIsNewIntent = false, mFullScreen, mColorMode, mDarkTheme;
|
||||
private int mOriginalOrientation, mBackgroundColor, mIdGenerator;
|
||||
private String mSearchText, mUntitledTitle, mHomepage, mCameraPhotoPath;
|
||||
|
||||
@ -200,6 +199,8 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
|
||||
public abstract void updateHistory(final String title, final String url);
|
||||
|
||||
abstract void updateCookiePreference();
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -318,7 +319,8 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
@Override
|
||||
public void run() {
|
||||
mBookmarkManager = BookmarkManager.getInstance(mActivity.getApplicationContext());
|
||||
mBookmarkList = mBookmarkManager.getBookmarks(true);
|
||||
mBookmarkList.clear();
|
||||
mBookmarkList.addAll(mBookmarkManager.getBookmarks(true));
|
||||
if (mBookmarkList.size() == 0 && mPreferences.getDefaultBookmarks()) {
|
||||
for (String[] array : BookmarkManager.DEFAULT_BOOKMARKS) {
|
||||
HistoryItem bookmark = new HistoryItem(array[0], array[1]);
|
||||
@ -715,13 +717,6 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
mProxyUtils.updateProxySettings(this);
|
||||
}
|
||||
|
||||
/*
|
||||
* Override this if class overrides BrowserActivity
|
||||
*/
|
||||
void updateCookiePreference() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_ENTER) {
|
||||
@ -803,7 +798,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
if (mCurrentView != null && !mCurrentView.getUrl().startsWith(Constants.FILE)) {
|
||||
HistoryItem bookmark = new HistoryItem(mCurrentView.getUrl(),
|
||||
mCurrentView.getTitle());
|
||||
if (mBookmarkManager.addBookmark(bookmark) && mBookmarkList != null) {
|
||||
if (mBookmarkManager.addBookmark(bookmark)) {
|
||||
mBookmarkList.add(bookmark);
|
||||
Collections.sort(mBookmarkList, new SortIgnoreCase());
|
||||
notifyBookmarkDataSetChanged();
|
||||
@ -829,8 +824,6 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
* adapter doesn't always change when notifyDataChanged gets called.
|
||||
*/
|
||||
private void notifyBookmarkDataSetChanged() {
|
||||
mBookmarkAdapter.clear();
|
||||
mBookmarkAdapter.addAll(mBookmarkList);
|
||||
mBookmarkAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@ -1111,8 +1104,10 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
url = intent.getDataString();
|
||||
}
|
||||
int num = 0;
|
||||
String source = null;
|
||||
if (intent != null && intent.getExtras() != null) {
|
||||
num = intent.getExtras().getInt(getPackageName() + ".Origin");
|
||||
source = intent.getExtras().getString("SOURCE");
|
||||
}
|
||||
if (num == 1) {
|
||||
mCurrentView.loadUrl(url);
|
||||
@ -1122,7 +1117,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
url = null;
|
||||
}
|
||||
newTab(url, true);
|
||||
mIsNewIntent = true;
|
||||
mIsNewIntent = (source == null);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1403,19 +1398,17 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse
|
||||
if (mCurrentView != null) {
|
||||
mCurrentView.resumeTimers();
|
||||
mCurrentView.onResume();
|
||||
|
||||
mHistoryDatabase = HistoryDatabase.getInstance(getApplicationContext());
|
||||
mBookmarkList = mBookmarkManager.getBookmarks(true);
|
||||
notifyBookmarkDataSetChanged();
|
||||
}
|
||||
mHistoryDatabase = HistoryDatabase.getInstance(getApplicationContext());
|
||||
mBookmarkList.clear();
|
||||
mBookmarkList.addAll(mBookmarkManager.getBookmarks(true));
|
||||
notifyBookmarkDataSetChanged();
|
||||
initializePreferences();
|
||||
if (mWebViewList != null) {
|
||||
for (int n = 0; n < mWebViewList.size(); n++) {
|
||||
if (mWebViewList.get(n) != null) {
|
||||
mWebViewList.get(n).initializePreferences(this);
|
||||
} else {
|
||||
mWebViewList.remove(n);
|
||||
}
|
||||
for (int n = 0; n < mWebViewList.size(); n++) {
|
||||
if (mWebViewList.get(n) != null) {
|
||||
mWebViewList.get(n).initializePreferences(this);
|
||||
} else {
|
||||
mWebViewList.remove(n);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,6 @@ public class IncognitoActivity extends BrowserActivity {
|
||||
CookieSyncManager.createInstance(this);
|
||||
}
|
||||
cookieManager.setAcceptCookie(PreferenceManager.getInstance().getIncognitoCookiesEnabled());
|
||||
super.updateCookiePreference();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -20,7 +20,6 @@ public class MainActivity extends BrowserActivity {
|
||||
CookieSyncManager.createInstance(this);
|
||||
}
|
||||
cookieManager.setAcceptCookie(PreferenceManager.getInstance().getCookiesEnabled());
|
||||
super.updateCookiePreference();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -143,7 +143,7 @@ public class DisplaySettingsFragment extends PreferenceFragment implements Prefe
|
||||
|
||||
private void themePicker() {
|
||||
AlertDialog.Builder picker = new AlertDialog.Builder(mActivity);
|
||||
picker.setTitle(getResources().getString(R.string.url_contents));
|
||||
picker.setTitle(getResources().getString(R.string.theme));
|
||||
|
||||
int n = mPreferences.getUseTheme();
|
||||
picker.setSingleChoiceItems(mThemeOptions, n, new DialogInterface.OnClickListener() {
|
||||
|
@ -17,9 +17,11 @@ import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.os.Environment;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.webkit.URLUtil;
|
||||
import android.widget.Toast;
|
||||
|
||||
@ -37,139 +39,146 @@ import acr.browser.lightning.download.DownloadHandler;
|
||||
|
||||
public final class Utils {
|
||||
|
||||
private Utils() {
|
||||
}
|
||||
private Utils() {
|
||||
}
|
||||
|
||||
public static void downloadFile(final Activity activity, final String url,
|
||||
public static void downloadFile(final Activity activity, final String url,
|
||||
final String userAgent, final String contentDisposition) {
|
||||
String fileName = URLUtil.guessFileName(url, null, null);
|
||||
DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null
|
||||
String fileName = URLUtil.guessFileName(url, null, null);
|
||||
DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null
|
||||
);
|
||||
Log.i(Constants.TAG, "Downloading" + fileName);
|
||||
}
|
||||
Log.i(Constants.TAG, "Downloading" + fileName);
|
||||
}
|
||||
|
||||
public static Intent newEmailIntent(String address, String subject,
|
||||
public static Intent newEmailIntent(String address, String subject,
|
||||
String body, String cc) {
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address });
|
||||
intent.putExtra(Intent.EXTRA_TEXT, body);
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
|
||||
intent.putExtra(Intent.EXTRA_CC, cc);
|
||||
intent.setType("message/rfc822");
|
||||
return intent;
|
||||
}
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{address});
|
||||
intent.putExtra(Intent.EXTRA_TEXT, body);
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
|
||||
intent.putExtra(Intent.EXTRA_CC, cc);
|
||||
intent.setType("message/rfc822");
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static void createInformativeDialog(Context context, String title, String message) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setTitle(title);
|
||||
builder.setMessage(message)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(context.getResources().getString(R.string.action_ok),
|
||||
public static void createInformativeDialog(Context context, String title, String message) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setTitle(title);
|
||||
builder.setMessage(message)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(context.getResources().getString(R.string.action_ok),
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
}
|
||||
|
||||
public static void showToast(Context context, String message) {
|
||||
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
public static void showToast(Context context, String message) {
|
||||
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public static void showToast(Context context, @StringRes int resource) {
|
||||
Toast.makeText(context, resource, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of pixels corresponding to the passed density pixels
|
||||
*/
|
||||
public static int convertDpToPixels(int dp) {
|
||||
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
|
||||
return (int) (dp * metrics.density + 0.5f);
|
||||
}
|
||||
public static void showSnackBar(View view, String message) {
|
||||
Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public static String getDomainName(String url) {
|
||||
boolean ssl = url.startsWith(Constants.HTTPS);
|
||||
int index = url.indexOf('/', 8);
|
||||
if (index != -1) {
|
||||
url = url.substring(0, index);
|
||||
}
|
||||
public static void showSnackBar(View view, @StringRes int resource) {
|
||||
Snackbar.make(view, resource, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
URI uri;
|
||||
String domain = null;
|
||||
try {
|
||||
uri = new URI(url);
|
||||
domain = uri.getHost();
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
/**
|
||||
* Returns the number of pixels corresponding to the passed density pixels
|
||||
*/
|
||||
public static int convertDpToPixels(int dp) {
|
||||
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
|
||||
return (int) (dp * metrics.density + 0.5f);
|
||||
}
|
||||
|
||||
if (domain == null || domain.isEmpty()) {
|
||||
return url;
|
||||
}
|
||||
if (ssl)
|
||||
return Constants.HTTPS + domain;
|
||||
else
|
||||
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
||||
}
|
||||
public static String getDomainName(String url) {
|
||||
boolean ssl = url.startsWith(Constants.HTTPS);
|
||||
int index = url.indexOf('/', 8);
|
||||
if (index != -1) {
|
||||
url = url.substring(0, index);
|
||||
}
|
||||
|
||||
public static String getProtocol(String url) {
|
||||
int index = url.indexOf('/');
|
||||
return url.substring(0, index + 2);
|
||||
}
|
||||
URI uri;
|
||||
String domain = null;
|
||||
try {
|
||||
uri = new URI(url);
|
||||
domain = uri.getHost();
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
public static String[] getArray(String input) {
|
||||
return input.split(Constants.SEPARATOR);
|
||||
}
|
||||
if (domain == null || domain.isEmpty()) {
|
||||
return url;
|
||||
}
|
||||
if (ssl)
|
||||
return Constants.HTTPS + domain;
|
||||
else
|
||||
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
||||
}
|
||||
|
||||
public static void trimCache(Context context) {
|
||||
try {
|
||||
File dir = context.getCacheDir();
|
||||
public static String getProtocol(String url) {
|
||||
int index = url.indexOf('/');
|
||||
return url.substring(0, index + 2);
|
||||
}
|
||||
|
||||
if (dir != null && dir.isDirectory()) {
|
||||
deleteDir(dir);
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
public static String[] getArray(String input) {
|
||||
return input.split(Constants.SEPARATOR);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
public static void trimCache(Context context) {
|
||||
try {
|
||||
File dir = context.getCacheDir();
|
||||
|
||||
public static boolean deleteDir(File dir) {
|
||||
if (dir != null && dir.isDirectory()) {
|
||||
String[] children = dir.list();
|
||||
for (String aChildren : children) {
|
||||
boolean success = deleteDir(new File(dir, aChildren));
|
||||
if (!success) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// The directory is now empty so delete it
|
||||
return dir != null && dir.delete();
|
||||
}
|
||||
if (dir != null && dir.isDirectory()) {
|
||||
deleteDir(dir);
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
|
||||
/**
|
||||
* Creates and returns a new favicon which is the same as the provided
|
||||
* favicon but with horizontal or vertical padding of 4dp
|
||||
*
|
||||
* @param bitmap
|
||||
* is the bitmap to pad.
|
||||
* @return the padded bitmap.
|
||||
*/
|
||||
public static Bitmap padFavicon(Bitmap bitmap) {
|
||||
int padding = Utils.convertDpToPixels(4);
|
||||
}
|
||||
}
|
||||
|
||||
Bitmap paddedBitmap = Bitmap.createBitmap(bitmap.getWidth() + padding, bitmap.getHeight()
|
||||
+ padding, Bitmap.Config.ARGB_8888);
|
||||
public static boolean deleteDir(File dir) {
|
||||
if (dir != null && dir.isDirectory()) {
|
||||
String[] children = dir.list();
|
||||
for (String aChildren : children) {
|
||||
boolean success = deleteDir(new File(dir, aChildren));
|
||||
if (!success) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// The directory is now empty so delete it
|
||||
return dir != null && dir.delete();
|
||||
}
|
||||
|
||||
Canvas canvas = new Canvas(paddedBitmap);
|
||||
canvas.drawARGB(0x00, 0x00, 0x00, 0x00); // this represents white color
|
||||
canvas.drawBitmap(bitmap, padding / 2, padding / 2, new Paint(Paint.FILTER_BITMAP_FLAG));
|
||||
/**
|
||||
* Creates and returns a new favicon which is the same as the provided
|
||||
* favicon but with horizontal or vertical padding of 4dp
|
||||
*
|
||||
* @param bitmap is the bitmap to pad.
|
||||
* @return the padded bitmap.
|
||||
*/
|
||||
public static Bitmap padFavicon(Bitmap bitmap) {
|
||||
int padding = Utils.convertDpToPixels(4);
|
||||
|
||||
return paddedBitmap;
|
||||
}
|
||||
Bitmap paddedBitmap = Bitmap.createBitmap(bitmap.getWidth() + padding, bitmap.getHeight()
|
||||
+ padding, Bitmap.Config.ARGB_8888);
|
||||
|
||||
Canvas canvas = new Canvas(paddedBitmap);
|
||||
canvas.drawARGB(0x00, 0x00, 0x00, 0x00); // this represents white color
|
||||
canvas.drawBitmap(bitmap, padding / 2, padding / 2, new Paint(Paint.FILTER_BITMAP_FLAG));
|
||||
|
||||
return paddedBitmap;
|
||||
}
|
||||
|
||||
public static boolean isColorTooDark(int color) {
|
||||
final byte RED_CHANNEL = 16;
|
||||
@ -185,71 +194,71 @@ public final class Utils {
|
||||
return gray < 0x727272;
|
||||
}
|
||||
|
||||
public static int mixTwoColors(int color1, int color2, float amount) {
|
||||
final byte ALPHA_CHANNEL = 24;
|
||||
final byte RED_CHANNEL = 16;
|
||||
final byte GREEN_CHANNEL = 8;
|
||||
//final byte BLUE_CHANNEL = 0;
|
||||
public static int mixTwoColors(int color1, int color2, float amount) {
|
||||
final byte ALPHA_CHANNEL = 24;
|
||||
final byte RED_CHANNEL = 16;
|
||||
final byte GREEN_CHANNEL = 8;
|
||||
//final byte BLUE_CHANNEL = 0;
|
||||
|
||||
final float inverseAmount = 1.0f - amount;
|
||||
final float inverseAmount = 1.0f - amount;
|
||||
|
||||
int r = ((int) (((float) (color1 >> RED_CHANNEL & 0xff) * amount) + ((float) (color2 >> RED_CHANNEL & 0xff) * inverseAmount))) & 0xff;
|
||||
int g = ((int) (((float) (color1 >> GREEN_CHANNEL & 0xff) * amount) + ((float) (color2 >> GREEN_CHANNEL & 0xff) * inverseAmount))) & 0xff;
|
||||
int b = ((int) (((float) (color1 & 0xff) * amount) + ((float) (color2 & 0xff) * inverseAmount))) & 0xff;
|
||||
int r = ((int) (((float) (color1 >> RED_CHANNEL & 0xff) * amount) + ((float) (color2 >> RED_CHANNEL & 0xff) * inverseAmount))) & 0xff;
|
||||
int g = ((int) (((float) (color1 >> GREEN_CHANNEL & 0xff) * amount) + ((float) (color2 >> GREEN_CHANNEL & 0xff) * inverseAmount))) & 0xff;
|
||||
int b = ((int) (((float) (color1 & 0xff) * amount) + ((float) (color2 & 0xff) * inverseAmount))) & 0xff;
|
||||
|
||||
return 0xff << ALPHA_CHANNEL | r << RED_CHANNEL | g << GREEN_CHANNEL | b;
|
||||
}
|
||||
return 0xff << ALPHA_CHANNEL | r << RED_CHANNEL | g << GREEN_CHANNEL | b;
|
||||
}
|
||||
|
||||
@SuppressLint("SimpleDateFormat")
|
||||
public static File createImageFile() throws IOException {
|
||||
// Create an image file name
|
||||
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
|
||||
String imageFileName = "JPEG_" + timeStamp + "_";
|
||||
File storageDir = Environment
|
||||
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
|
||||
return File.createTempFile(imageFileName, /* prefix */
|
||||
".jpg", /* suffix */
|
||||
storageDir /* directory */
|
||||
);
|
||||
}
|
||||
@SuppressLint("SimpleDateFormat")
|
||||
public static File createImageFile() throws IOException {
|
||||
// Create an image file name
|
||||
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
|
||||
String imageFileName = "JPEG_" + timeStamp + "_";
|
||||
File storageDir = Environment
|
||||
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
|
||||
return File.createTempFile(imageFileName, /* prefix */
|
||||
".jpg", /* suffix */
|
||||
storageDir /* directory */
|
||||
);
|
||||
}
|
||||
|
||||
public static boolean isFlashInstalled(Context context) {
|
||||
try {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
ApplicationInfo ai = pm.getApplicationInfo("com.adobe.flashplayer", 0);
|
||||
if (ai != null) {
|
||||
return true;
|
||||
}
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static boolean isFlashInstalled(Context context) {
|
||||
try {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
ApplicationInfo ai = pm.getApplicationInfo("com.adobe.flashplayer", 0);
|
||||
if (ai != null) {
|
||||
return true;
|
||||
}
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Bitmap getWebpageBitmap(Resources resources, boolean dark) {
|
||||
if (dark) {
|
||||
if (mWebIconDark == null) {
|
||||
mWebIconDark = BitmapFactory.decodeResource(resources, R.drawable.ic_webpage_dark);
|
||||
}
|
||||
return mWebIconDark;
|
||||
} else {
|
||||
if (mWebIconLight == null) {
|
||||
mWebIconLight = BitmapFactory.decodeResource(resources, R.drawable.ic_webpage);
|
||||
}
|
||||
return mWebIconLight;
|
||||
}
|
||||
}
|
||||
public static Bitmap getWebpageBitmap(Resources resources, boolean dark) {
|
||||
if (dark) {
|
||||
if (mWebIconDark == null) {
|
||||
mWebIconDark = BitmapFactory.decodeResource(resources, R.drawable.ic_webpage_dark);
|
||||
}
|
||||
return mWebIconDark;
|
||||
} else {
|
||||
if (mWebIconLight == null) {
|
||||
mWebIconLight = BitmapFactory.decodeResource(resources, R.drawable.ic_webpage);
|
||||
}
|
||||
return mWebIconLight;
|
||||
}
|
||||
}
|
||||
|
||||
private static Bitmap mWebIconLight;
|
||||
private static Bitmap mWebIconDark;
|
||||
private static Bitmap mWebIconLight;
|
||||
private static Bitmap mWebIconDark;
|
||||
|
||||
public static void close(Closeable closeable) {
|
||||
if (closeable == null)
|
||||
return;
|
||||
try {
|
||||
closeable.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
public static void close(Closeable closeable) {
|
||||
if (closeable == null)
|
||||
return;
|
||||
try {
|
||||
closeable.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -53,7 +53,7 @@
|
||||
<string name="stock_browser_unavailable">No stock browser detected</string>
|
||||
<string name="stock_browser_available">Supported stock browser detected</string>
|
||||
<string name="fullScreenOption">Hide status bar while browsing</string>
|
||||
<string name="clear_cookies">Clear browser cookies</string>
|
||||
<string name="clear_cookies">Clear Browser Cookies</string>
|
||||
<string name="dialog_image">What would you like to do with this image?</string>
|
||||
<string name="action_download">Download</string>
|
||||
<string name="action_open">Open</string>
|
||||
@ -110,7 +110,7 @@
|
||||
<string name="action_auto">Auto</string>
|
||||
<string name="action_follow_me">Contact Me</string>
|
||||
<string name="url_twitter">twitter.com/RestainoAnthony</string>
|
||||
<string name="clear_cache">Clear cache</string>
|
||||
<string name="clear_cache">Clear Cache</string>
|
||||
<string name="message_cache_cleared">Cache Cleared</string>
|
||||
<string name="message_import">Bookmarks Were Imported</string>
|
||||
<string name="message_clear_history">History Cleared</string>
|
||||
|
@ -3,58 +3,86 @@
|
||||
|
||||
<PreferenceCategory android:title="@string/settings_about">
|
||||
<Preference
|
||||
android:title="@string/action_follow_me"
|
||||
android:summary="@string/url_twitter">
|
||||
android:summary="@string/url_twitter"
|
||||
android:title="@string/action_follow_me">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://twitter.com/RestainoAnthony" />
|
||||
android:data="http://twitter.com/RestainoAnthony">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
<Preference
|
||||
android:title="@string/version"
|
||||
android:key="pref_version" />
|
||||
android:key="pref_version"
|
||||
android:title="@string/version" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/licenses">
|
||||
<Preference
|
||||
android:title="@string/app_name"
|
||||
android:summary="@string/mpl_license">
|
||||
android:summary="@string/mpl_license"
|
||||
android:title="@string/app_name">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://www.mozilla.org/MPL/2.0/" />
|
||||
android:data="http://www.mozilla.org/MPL/2.0/">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
<Preference
|
||||
android:title="@string/android_open_source_project"
|
||||
android:summary="@string/apache">
|
||||
android:summary="@string/apache"
|
||||
android:title="@string/android_open_source_project">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://www.apache.org/licenses/LICENSE-2.0" />
|
||||
android:data="http://www.apache.org/licenses/LICENSE-2.0">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
<Preference
|
||||
android:title="@string/hphosts_ad_server_list"
|
||||
android:summary="@string/freeware">
|
||||
android:summary="@string/freeware"
|
||||
android:title="@string/hphosts_ad_server_list">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://hosts-file.net/" />
|
||||
android:data="http://hosts-file.net/">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
<Preference
|
||||
android:title="@string/library_netcipher"
|
||||
android:summary="@string/license_gnu">
|
||||
android:summary="@string/license_gnu"
|
||||
android:title="@string/library_netcipher">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://www.gnu.org/licenses/lgpl.html" />
|
||||
android:data="http://www.gnu.org/licenses/lgpl.html">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
<Preference
|
||||
android:title="@string/snacktory"
|
||||
android:summary="@string/apache">
|
||||
android:summary="@string/apache"
|
||||
android:title="@string/snacktory">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://www.apache.org/licenses/LICENSE-2.0" />
|
||||
android:data="http://www.apache.org/licenses/LICENSE-2.0">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
<Preference
|
||||
android:title="@string/jsoup"
|
||||
android:summary="@string/mit_license">
|
||||
android:summary="@string/mit_license"
|
||||
android:title="@string/jsoup">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://jsoup.org/license" />
|
||||
android:data="http://jsoup.org/license">
|
||||
<extra
|
||||
android:name="SOURCE"
|
||||
android:value="SELF" />
|
||||
</intent>
|
||||
</Preference>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
Loading…
x
Reference in New Issue
Block a user