Restore consistency in code formatting
* remove all trailing spaces * some files used spaces instead of tabs like the rest of codebase - fixed * make use of IDE "optimize import" feature * make use of IDE "auto format" feature to fix some missing spaces here and there
This commit is contained in:
parent
23c1d05b06
commit
005e75fc8d
@ -1,5 +1,9 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.AssetManager;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -8,14 +12,12 @@ import java.net.URI;
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.res.AssetManager;
|
|
||||||
|
|
||||||
public class AdBlock {
|
public class AdBlock {
|
||||||
|
|
||||||
private static TreeMap<String, Integer> mAdBlockMap = null;
|
private static TreeMap<String, Integer> mAdBlockMap = null;
|
||||||
|
|
||||||
private SharedPreferences mPreferences;
|
private SharedPreferences mPreferences;
|
||||||
|
|
||||||
private boolean mBlockAds = false;
|
private boolean mBlockAds = false;
|
||||||
|
|
||||||
public AdBlock(Context context) {
|
public AdBlock(Context context) {
|
||||||
@ -88,5 +90,4 @@ public class AdBlock {
|
|||||||
}
|
}
|
||||||
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,27 +3,21 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Message;
|
|
||||||
import android.provider.Browser;
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.provider.Browser;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.webkit.CookieManager;
|
import android.view.WindowManager;
|
||||||
import android.webkit.CookieSyncManager;
|
import android.webkit.*;
|
||||||
import android.webkit.WebIconDatabase;
|
|
||||||
import android.webkit.WebView;
|
|
||||||
import android.webkit.WebViewDatabase;
|
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
@ -34,15 +28,22 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
|
|
||||||
// mPreferences variables
|
// mPreferences variables
|
||||||
private static final int API = android.os.Build.VERSION.SDK_INT;
|
private static final int API = android.os.Build.VERSION.SDK_INT;
|
||||||
|
|
||||||
private static SharedPreferences mPreferences;
|
private static SharedPreferences mPreferences;
|
||||||
|
|
||||||
private static SharedPreferences.Editor mEditPrefs;
|
private static SharedPreferences.Editor mEditPrefs;
|
||||||
|
|
||||||
private static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11,
|
private static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11,
|
||||||
r12, r13, r14, r15, rIncognitoCookies, rClearCache,
|
r12, r13, r14, r15, rIncognitoCookies, rClearCache,
|
||||||
rSearchSuggestions, rClearHistoryExit, rClearCookiesExit;
|
rSearchSuggestions, rClearHistoryExit, rClearCookiesExit;
|
||||||
|
|
||||||
private static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10,
|
private static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10,
|
||||||
cb11, cbIncognitoCookies, cbSearchSuggestions, cbClearHistoryExit, cbClearCookiesExit;
|
cb11, cbIncognitoCookies, cbSearchSuggestions, cbClearHistoryExit, cbClearCookiesExit;
|
||||||
|
|
||||||
private static Context mContext;
|
private static Context mContext;
|
||||||
|
|
||||||
private boolean mSystemBrowser;
|
private boolean mSystemBrowser;
|
||||||
|
|
||||||
private Handler messageHandler;
|
private Handler messageHandler;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -199,18 +200,18 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
@Override
|
@Override
|
||||||
public void handleMessage(Message msg) {
|
public void handleMessage(Message msg) {
|
||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
case 1:
|
case 1:
|
||||||
Utils.showToast(
|
Utils.showToast(
|
||||||
mContext,
|
mContext,
|
||||||
mContext.getResources().getString(
|
mContext.getResources().getString(
|
||||||
R.string.message_clear_history));
|
R.string.message_clear_history));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
Utils.showToast(
|
Utils.showToast(
|
||||||
mContext,
|
mContext,
|
||||||
mContext.getResources().getString(
|
mContext.getResources().getString(
|
||||||
R.string.message_cookies_cleared));
|
R.string.message_cookies_cleared));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
super.handleMessage(msg);
|
super.handleMessage(msg);
|
||||||
}
|
}
|
||||||
@ -244,7 +245,7 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void cbClearHistoryExit(CheckBox view) {
|
void cbClearHistoryExit(CheckBox view) {
|
||||||
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
||||||
|
|
||||||
@ -258,6 +259,7 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void cbClearCookiesExit(CheckBox view) {
|
void cbClearCookiesExit(CheckBox view) {
|
||||||
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
||||||
|
|
||||||
@ -408,9 +410,9 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void cbSearchSuggestions(CheckBox view){
|
void cbSearchSuggestions(CheckBox view) {
|
||||||
view.setOnCheckedChangeListener(new OnCheckedChangeListener(){
|
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView,
|
public void onCheckedChanged(CompoundButton buttonView,
|
||||||
@ -418,7 +420,7 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
mEditPrefs.putBoolean(PreferenceConstants.GOOGLE_SEARCH_SUGGESTIONS, isChecked);
|
mEditPrefs.putBoolean(PreferenceConstants.GOOGLE_SEARCH_SUGGESTIONS, isChecked);
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +447,7 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void rClearHistoryExit(RelativeLayout view) {
|
void rClearHistoryExit(RelativeLayout view) {
|
||||||
view.setOnClickListener(new OnClickListener() {
|
view.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
@ -469,7 +471,7 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void r3(RelativeLayout view) {
|
void r3(RelativeLayout view) {
|
||||||
view.setOnClickListener(new OnClickListener() {
|
view.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
@ -690,15 +692,15 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rSearchSuggestions(RelativeLayout view){
|
void rSearchSuggestions(RelativeLayout view) {
|
||||||
view.setOnClickListener(new OnClickListener(){
|
view.setOnClickListener(new OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View arg0) {
|
public void onClick(View arg0) {
|
||||||
cbSearchSuggestions.setChecked(!cbSearchSuggestions.isChecked());
|
cbSearchSuggestions.setChecked(!cbSearchSuggestions.isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -810,8 +812,8 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
public void importFromStockBrowser() {
|
public void importFromStockBrowser() {
|
||||||
if (mSystemBrowser) {
|
if (mSystemBrowser) {
|
||||||
try {
|
try {
|
||||||
String[] proj = new String[] { Browser.BookmarkColumns.TITLE,
|
String[] proj = new String[]{Browser.BookmarkColumns.TITLE,
|
||||||
Browser.BookmarkColumns.URL };
|
Browser.BookmarkColumns.URL};
|
||||||
// use 0 for history, 1 for bookmarks
|
// use 0 for history, 1 for bookmarks
|
||||||
String sel = Browser.BookmarkColumns.BOOKMARK + " = 1";
|
String sel = Browser.BookmarkColumns.BOOKMARK + " = 1";
|
||||||
Cursor mCur;
|
Cursor mCur;
|
||||||
@ -846,4 +848,4 @@ public class AdvancedSettingsActivity extends Activity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,18 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
public class BookmarkPageVariables {
|
public class BookmarkPageVariables {
|
||||||
|
|
||||||
public static final String Heading = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta content=\"en-us\" http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>"
|
public static final String Heading = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta content=\"en-us\" http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>"
|
||||||
+ BrowserApp.getAppContext().getString(R.string.action_bookmarks)
|
+ BrowserApp.getAppContext().getString(R.string.action_bookmarks)
|
||||||
+ "</title></head><style>body { background: #e1e1e1; max-width:100%; min-height:100%;}#content {width:100%; max-width:800px; margin:0 auto; text-align:center;}.box { vertical-align:middle;text-align:center;position:relative; display: inline-block; height: 100px; width: 100px; margin: 10px; background-color:#fff;box-shadow: 0px 3px rgba( 0, 0, 0, 0.1 );font-family: Arial;color: #444;font-size: 12px;-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;}.stuff {height: 100px; width: 100px;vertical-align:middle;text-align:center; display: table-cell;}p.ellipses {width:90px; white-space: nowrap; overflow: hidden;text-align:center;margin:auto; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis;}.box a { width: 100%; height: 100%; position: absolute; left: 0; top: 0;}</style><body> <div id=\"content\">";
|
+ "</title></head><style>body { background: #e1e1e1; max-width:100%; min-height:100%;}#content {width:100%; max-width:800px; margin:0 auto; text-align:center;}.box { vertical-align:middle;text-align:center;position:relative; display: inline-block; height: 100px; width: 100px; margin: 10px; background-color:#fff;box-shadow: 0px 3px rgba( 0, 0, 0, 0.1 );font-family: Arial;color: #444;font-size: 12px;-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;}.stuff {height: 100px; width: 100px;vertical-align:middle;text-align:center; display: table-cell;}p.ellipses {width:90px; white-space: nowrap; overflow: hidden;text-align:center;margin:auto; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis;}.box a { width: 100%; height: 100%; position: absolute; left: 0; top: 0;}</style><body> <div id=\"content\">";
|
||||||
|
|
||||||
public static final String Part1 = "<div class=\"box\"><a href=\"";
|
public static final String Part1 = "<div class=\"box\"><a href=\"";
|
||||||
|
|
||||||
public static final String Part2 = "\" ></a><div class=\"stuff\" ><img height=\"20\" width=\"20\" src='http://www.google.com/s2/favicons?domain=";
|
public static final String Part2 = "\" ></a><div class=\"stuff\" ><img height=\"20\" width=\"20\" src='http://www.google.com/s2/favicons?domain=";
|
||||||
|
|
||||||
public static final String Part3 = "' /><p class=\"ellipses\">";
|
public static final String Part3 = "' /><p class=\"ellipses\">";
|
||||||
|
|
||||||
public static final String Part4 = "</p></div></div>";
|
public static final String Part4 = "</p></div></div>";
|
||||||
|
|
||||||
public static final String End = "</div></body></html>";
|
public static final String End = "</div></body></html>";
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,7 @@ import android.webkit.WebChromeClient.CustomViewCallback;
|
|||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
public interface BrowserController {
|
public interface BrowserController {
|
||||||
|
|
||||||
public void updateUrl(String title);
|
public void updateUrl(String title);
|
||||||
|
|
||||||
public void updateProgress(int n);
|
public void updateProgress(int n);
|
||||||
@ -22,30 +23,30 @@ public interface BrowserController {
|
|||||||
public void openFileChooser(ValueCallback<Uri> uploadMsg);
|
public void openFileChooser(ValueCallback<Uri> uploadMsg);
|
||||||
|
|
||||||
public void update();
|
public void update();
|
||||||
|
|
||||||
public void onLongPress();
|
public void onLongPress();
|
||||||
|
|
||||||
public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback);
|
public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback);
|
||||||
|
|
||||||
public void onHideCustomView();
|
public void onHideCustomView();
|
||||||
|
|
||||||
public Bitmap getDefaultVideoPoster();
|
public Bitmap getDefaultVideoPoster();
|
||||||
|
|
||||||
public View getVideoLoadingProgressView();
|
public View getVideoLoadingProgressView();
|
||||||
|
|
||||||
public void onCreateWindow(boolean isUserGesture, Message resultMsg);
|
public void onCreateWindow(boolean isUserGesture, Message resultMsg);
|
||||||
|
|
||||||
public Activity getActivity();
|
public Activity getActivity();
|
||||||
|
|
||||||
public void hideActionBar();
|
public void hideActionBar();
|
||||||
|
|
||||||
public void showActionBar();
|
public void showActionBar();
|
||||||
|
|
||||||
public void longClickPage(String url);
|
public void longClickPage(String url);
|
||||||
|
|
||||||
public void openBookmarkPage(WebView view);
|
public void openBookmarkPage(WebView view);
|
||||||
|
|
||||||
public boolean isActionBarShowing();
|
public boolean isActionBarShowing();
|
||||||
|
|
||||||
public void closeEmptyTab();
|
public void closeEmptyTab();
|
||||||
}
|
}
|
||||||
|
@ -27,5 +27,4 @@ public class ClickHandler extends Handler {
|
|||||||
url = msg.getData().getString("url");
|
url = msg.getData().getString("url");
|
||||||
mBrowserController.longClickPage(url);
|
mBrowserController.longClickPage(url);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
@ -10,30 +10,52 @@ public class Constants {
|
|||||||
public Constants() {
|
public Constants() {
|
||||||
// TODO Auto-generated constructor stub
|
// TODO Auto-generated constructor stub
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String DESKTOP_USER_AGENT = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/20 Safari/537.17";
|
public static final String DESKTOP_USER_AGENT = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/20 Safari/537.17";
|
||||||
|
|
||||||
public static final String MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; U; Android 4.2; en-us; Nexus 4 Build/JOP24G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
|
public static final String MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; U; Android 4.2; en-us; Nexus 4 Build/JOP24G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
|
||||||
|
|
||||||
public static final int API = android.os.Build.VERSION.SDK_INT;
|
public static final int API = android.os.Build.VERSION.SDK_INT;
|
||||||
|
|
||||||
public static final String YAHOO_SEARCH = "http://search.yahoo.com/search?p=";
|
public static final String YAHOO_SEARCH = "http://search.yahoo.com/search?p=";
|
||||||
|
|
||||||
public static final String GOOGLE_SEARCH = "https://www.google.com/search?client=lightning&ie=UTF-8&oe=UTF-8&q=";
|
public static final String GOOGLE_SEARCH = "https://www.google.com/search?client=lightning&ie=UTF-8&oe=UTF-8&q=";
|
||||||
|
|
||||||
public static final String BING_SEARCH = "http://www.bing.com/search?q=";
|
public static final String BING_SEARCH = "http://www.bing.com/search?q=";
|
||||||
|
|
||||||
public static final String DUCK_SEARCH = "https://duckduckgo.com/?t=lightning&q=";
|
public static final String DUCK_SEARCH = "https://duckduckgo.com/?t=lightning&q=";
|
||||||
|
|
||||||
public static final String DUCK_LITE_SEARCH = "https://duckduckgo.com/lite/?t=lightning&q=";
|
public static final String DUCK_LITE_SEARCH = "https://duckduckgo.com/lite/?t=lightning&q=";
|
||||||
|
|
||||||
public static final String STARTPAGE_MOBILE_SEARCH = "https://startpage.com/do/m/mobilesearch?language=english&query=";
|
public static final String STARTPAGE_MOBILE_SEARCH = "https://startpage.com/do/m/mobilesearch?language=english&query=";
|
||||||
|
|
||||||
public static final String STARTPAGE_SEARCH = "https://startpage.com/do/search?language=english&query=";
|
public static final String STARTPAGE_SEARCH = "https://startpage.com/do/search?language=english&query=";
|
||||||
|
|
||||||
public static final String ANDROID_SEARCH = "http://www.androidsearchresult.com/search.pg?aff=olb&keyword=";
|
public static final String ANDROID_SEARCH = "http://www.androidsearchresult.com/search.pg?aff=olb&keyword=";
|
||||||
|
|
||||||
public static final String HOMEPAGE = "about:home";
|
public static final String HOMEPAGE = "about:home";
|
||||||
|
|
||||||
public static final String BAIDU_SEARCH = "http://www.baidu.com/s?wd=";
|
public static final String BAIDU_SEARCH = "http://www.baidu.com/s?wd=";
|
||||||
|
|
||||||
public static final String YANDEX_SEARCH = "http://yandex.ru/yandsearch?lr=21411&text=";
|
public static final String YANDEX_SEARCH = "http://yandex.ru/yandsearch?lr=21411&text=";
|
||||||
|
|
||||||
public static final String ADVANCED_SETTINGS_INTENT = "android.intent.action.ADVANCED_SETTINGS";
|
public static final String ADVANCED_SETTINGS_INTENT = "android.intent.action.ADVANCED_SETTINGS";
|
||||||
|
|
||||||
public static final String LICENSE_INTENT = "android.intent.action.LICENSE";
|
public static final String LICENSE_INTENT = "android.intent.action.LICENSE";
|
||||||
public static final String SETTINGS_INTENT = "android.intent.action.SETTINGS";
|
|
||||||
|
public static final String SETTINGS_INTENT = "android.intent.action.SETTINGS";
|
||||||
|
|
||||||
public static final String INCOGNITO_INTENT = "android.intent.action.INCOGNITO";
|
public static final String INCOGNITO_INTENT = "android.intent.action.INCOGNITO";
|
||||||
|
|
||||||
public static final String EXTERNAL_STORAGE = Environment.getExternalStorageDirectory().toString();
|
public static final String EXTERNAL_STORAGE = Environment.getExternalStorageDirectory().toString();
|
||||||
|
|
||||||
public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|";
|
public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|";
|
||||||
|
|
||||||
public static final String HTTP = "http://";
|
public static final String HTTP = "http://";
|
||||||
|
|
||||||
public static final String HTTPS = "https://";
|
public static final String HTTPS = "https://";
|
||||||
|
|
||||||
public static final String FILE = "file://";
|
public static final String FILE = "file://";
|
||||||
|
|
||||||
public static final String TAG = "Lightning";
|
public static final String TAG = "Lightning";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,15 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class DatabaseHandler extends SQLiteOpenHelper {
|
public class DatabaseHandler extends SQLiteOpenHelper {
|
||||||
|
|
||||||
// All Static variables
|
// All Static variables
|
||||||
@ -26,8 +26,11 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
// HistoryItems Table Columns names
|
// HistoryItems Table Columns names
|
||||||
public static final String KEY_ID = "id";
|
public static final String KEY_ID = "id";
|
||||||
|
|
||||||
public static final String KEY_URL = "url";
|
public static final String KEY_URL = "url";
|
||||||
|
|
||||||
public static final String KEY_TITLE = "title";
|
public static final String KEY_TITLE = "title";
|
||||||
|
|
||||||
public static SQLiteDatabase mDatabase;
|
public static SQLiteDatabase mDatabase;
|
||||||
|
|
||||||
public DatabaseHandler(Context context) {
|
public DatabaseHandler(Context context) {
|
||||||
@ -54,18 +57,20 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
// Create tables again
|
// Create tables again
|
||||||
onCreate(db);
|
onCreate(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOpen(){
|
public boolean isOpen() {
|
||||||
if(mDatabase != null)
|
if (mDatabase != null) {
|
||||||
return mDatabase.isOpen();
|
return mDatabase.isOpen();
|
||||||
else
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void close() {
|
public synchronized void close() {
|
||||||
if(mDatabase != null)
|
if (mDatabase != null) {
|
||||||
mDatabase.close();
|
mDatabase.close();
|
||||||
|
}
|
||||||
super.close();
|
super.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,8 +80,9 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
public synchronized void delete(String url) {
|
public synchronized void delete(String url) {
|
||||||
String n = getHistoryItem(url);
|
String n = getHistoryItem(url);
|
||||||
if(n != null)
|
if (n != null) {
|
||||||
deleteHistoryItem(n);
|
deleteHistoryItem(n);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adding new item
|
// Adding new item
|
||||||
@ -90,8 +96,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
// Getting single item
|
// Getting single item
|
||||||
String getHistoryItem(String url) {
|
String getHistoryItem(String url) {
|
||||||
Cursor cursor = mDatabase.query(TABLE_HISTORY, new String[] { KEY_ID, KEY_URL,
|
Cursor cursor = mDatabase.query(TABLE_HISTORY, new String[]{KEY_ID, KEY_URL,
|
||||||
KEY_TITLE }, KEY_URL + "=?", new String[] { url }, null, null,
|
KEY_TITLE}, KEY_URL + "=?", new String[]{url}, null, null,
|
||||||
null, null);
|
null, null);
|
||||||
String m = null;
|
String m = null;
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
@ -103,11 +109,11 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
// return item
|
// return item
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<HistoryItem> findItemsContaining(String search) {
|
public List<HistoryItem> findItemsContaining(String search) {
|
||||||
List<HistoryItem> itemList = new ArrayList<HistoryItem>();
|
List<HistoryItem> itemList = new ArrayList<HistoryItem>();
|
||||||
//select query
|
//select query
|
||||||
String selectQuery = "SELECT * FROM " +TABLE_HISTORY +" WHERE "+KEY_TITLE+" LIKE '%" + search + "%'";
|
String selectQuery = "SELECT * FROM " + TABLE_HISTORY + " WHERE " + KEY_TITLE + " LIKE '%" + search + "%'";
|
||||||
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
|
Cursor cursor = mDatabase.rawQuery(selectQuery, null);
|
||||||
|
|
||||||
// looping through all rows and adding to list
|
// looping through all rows and adding to list
|
||||||
@ -126,7 +132,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
// return item list
|
// return item list
|
||||||
return itemList;
|
return itemList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<HistoryItem> getLastHundredItems() {
|
public List<HistoryItem> getLastHundredItems() {
|
||||||
List<HistoryItem> itemList = new ArrayList<HistoryItem>();
|
List<HistoryItem> itemList = new ArrayList<HistoryItem>();
|
||||||
String selectQuery = "SELECT * FROM " + TABLE_HISTORY;
|
String selectQuery = "SELECT * FROM " + TABLE_HISTORY;
|
||||||
@ -175,7 +181,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
values.put(KEY_URL, item.getUrl());
|
values.put(KEY_URL, item.getUrl());
|
||||||
values.put(KEY_TITLE, item.getTitle());
|
values.put(KEY_TITLE, item.getTitle());
|
||||||
int n = mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?",
|
int n = mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?",
|
||||||
new String[] { String.valueOf(item.getId()) });
|
new String[]{String.valueOf(item.getId())});
|
||||||
// updating row
|
// updating row
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -183,7 +189,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
// Deleting single item
|
// Deleting single item
|
||||||
public synchronized void deleteHistoryItem(String id) {
|
public synchronized void deleteHistoryItem(String id) {
|
||||||
mDatabase.delete(TABLE_HISTORY, KEY_ID + " = ?",
|
mDatabase.delete(TABLE_HISTORY, KEY_ID + " = ?",
|
||||||
new String[] { String.valueOf(id) });
|
new String[]{String.valueOf(id)});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getting items Count
|
// Getting items Count
|
||||||
@ -195,5 +201,4 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
|||||||
// return count
|
// return count
|
||||||
return cursor.getCount();
|
return cursor.getCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.DownloadManager;
|
import android.app.DownloadManager;
|
||||||
@ -27,189 +25,191 @@ import android.widget.Toast;
|
|||||||
*/
|
*/
|
||||||
public class DownloadHandler {
|
public class DownloadHandler {
|
||||||
|
|
||||||
|
private static final String LOGTAG = "DLHandler";
|
||||||
|
|
||||||
private static final String LOGTAG = "DLHandler";
|
private static Activity mActivity;
|
||||||
private static Activity mActivity;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the host application a download should be done, or that
|
* Notify the host application a download should be done, or that the data should be streamed if a streaming viewer
|
||||||
* the data should be streamed if a streaming viewer is available.
|
* is available.
|
||||||
* @param activity Activity requesting the download.
|
*
|
||||||
* @param url The full url to the content that should be downloaded
|
* @param activity Activity requesting the download.
|
||||||
* @param userAgent User agent of the downloading application.
|
* @param url The full url to the content that should be downloaded
|
||||||
* @param contentDisposition Content-disposition http header, if present.
|
* @param userAgent User agent of the downloading application.
|
||||||
* @param mimetype The mimetype of the content reported by the server
|
* @param contentDisposition Content-disposition http header, if present.
|
||||||
* @param privateBrowsing If the request is coming from a private browsing tab.
|
* @param mimetype The mimetype of the content reported by the server
|
||||||
*/
|
* @param privateBrowsing If the request is coming from a private browsing tab.
|
||||||
public static void onDownloadStart(Activity activity, String url,
|
*/
|
||||||
String userAgent, String contentDisposition, String mimetype,
|
public static void onDownloadStart(Activity activity, String url,
|
||||||
boolean privateBrowsing) {
|
String userAgent, String contentDisposition, String mimetype,
|
||||||
mActivity = activity;
|
boolean privateBrowsing) {
|
||||||
// if we're dealing wih A/V content that's not explicitly marked
|
mActivity = activity;
|
||||||
// for download, check if it's streamable.
|
// if we're dealing wih A/V content that's not explicitly marked
|
||||||
if (contentDisposition == null
|
// for download, check if it's streamable.
|
||||||
|| !contentDisposition.regionMatches(
|
if (contentDisposition == null
|
||||||
true, 0, "attachment", 0, 10)) {
|
|| !contentDisposition.regionMatches(
|
||||||
// query the package manager to see if there's a registered handler
|
true, 0, "attachment", 0, 10)) {
|
||||||
// that matches.
|
// query the package manager to see if there's a registered handler
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
// that matches.
|
||||||
intent.setDataAndType(Uri.parse(url), mimetype);
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.setDataAndType(Uri.parse(url), mimetype);
|
||||||
ResolveInfo info = activity.getPackageManager().resolveActivity(intent,
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
PackageManager.MATCH_DEFAULT_ONLY);
|
ResolveInfo info = activity.getPackageManager().resolveActivity(intent,
|
||||||
if (info != null) {
|
PackageManager.MATCH_DEFAULT_ONLY);
|
||||||
ComponentName myName = activity.getComponentName();
|
if (info != null) {
|
||||||
// If we resolved to ourselves, we don't want to attempt to
|
ComponentName myName = activity.getComponentName();
|
||||||
// load the url only to try and download it again.
|
// If we resolved to ourselves, we don't want to attempt to
|
||||||
if (!myName.getPackageName().equals(
|
// load the url only to try and download it again.
|
||||||
info.activityInfo.packageName)
|
if (!myName.getPackageName().equals(
|
||||||
|| !myName.getClassName().equals(
|
info.activityInfo.packageName)
|
||||||
info.activityInfo.name)) {
|
|| !myName.getClassName().equals(
|
||||||
// someone (other than us) knows how to handle this mime
|
info.activityInfo.name)) {
|
||||||
// type with this scheme, don't download.
|
// someone (other than us) knows how to handle this mime
|
||||||
try {
|
// type with this scheme, don't download.
|
||||||
activity.startActivity(intent);
|
try {
|
||||||
return;
|
activity.startActivity(intent);
|
||||||
} catch (ActivityNotFoundException ex) {
|
return;
|
||||||
// Best behavior is to fall back to a download in this
|
} catch (ActivityNotFoundException ex) {
|
||||||
// case
|
// Best behavior is to fall back to a download in this
|
||||||
}
|
// case
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onDownloadStartNoStream(activity, url, userAgent, contentDisposition,
|
}
|
||||||
mimetype, privateBrowsing);
|
onDownloadStartNoStream(activity, url, userAgent, contentDisposition,
|
||||||
}
|
mimetype, privateBrowsing);
|
||||||
|
}
|
||||||
|
|
||||||
// This is to work around the fact that java.net.URI throws Exceptions
|
// This is to work around the fact that java.net.URI throws Exceptions
|
||||||
// instead of just encoding URL's properly
|
// instead of just encoding URL's properly
|
||||||
// Helper method for onDownloadStartNoStream
|
// Helper method for onDownloadStartNoStream
|
||||||
private static String encodePath(String path) {
|
private static String encodePath(String path) {
|
||||||
char[] chars = path.toCharArray();
|
char[] chars = path.toCharArray();
|
||||||
|
|
||||||
boolean needed = false;
|
boolean needed = false;
|
||||||
for (char c : chars) {
|
for (char c : chars) {
|
||||||
if (c == '[' || c == ']' || c == '|') {
|
if (c == '[' || c == ']' || c == '|') {
|
||||||
needed = true;
|
needed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (needed == false) {
|
if (needed == false) {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder("");
|
StringBuilder sb = new StringBuilder("");
|
||||||
for (char c : chars) {
|
for (char c : chars) {
|
||||||
if (c == '[' || c == ']' || c == '|') {
|
if (c == '[' || c == ']' || c == '|') {
|
||||||
sb.append('%');
|
sb.append('%');
|
||||||
sb.append(Integer.toHexString(c));
|
sb.append(Integer.toHexString(c));
|
||||||
} else {
|
} else {
|
||||||
sb.append(c);
|
sb.append(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify the host application a download should be done, even if there
|
* Notify the host application a download should be done, even if there is a streaming viewer available for thise
|
||||||
* is a streaming viewer available for thise type.
|
* type.
|
||||||
* @param activity Activity requesting the download.
|
*
|
||||||
* @param url The full url to the content that should be downloaded
|
* @param activity Activity requesting the download.
|
||||||
* @param userAgent User agent of the downloading application.
|
* @param url The full url to the content that should be downloaded
|
||||||
* @param contentDisposition Content-disposition http header, if present.
|
* @param userAgent User agent of the downloading application.
|
||||||
* @param mimetype The mimetype of the content reported by the server
|
* @param contentDisposition Content-disposition http header, if present.
|
||||||
* @param privateBrowsing If the request is coming from a private browsing tab.
|
* @param mimetype The mimetype of the content reported by the server
|
||||||
*/
|
* @param privateBrowsing If the request is coming from a private browsing tab.
|
||||||
/*package */ static void onDownloadStartNoStream(Activity activity,
|
*/
|
||||||
String url, String userAgent, String contentDisposition,
|
/*package */
|
||||||
String mimetype, boolean privateBrowsing) {
|
static void onDownloadStartNoStream(Activity activity,
|
||||||
|
String url, String userAgent, String contentDisposition,
|
||||||
|
String mimetype, boolean privateBrowsing) {
|
||||||
|
|
||||||
String filename = URLUtil.guessFileName(url,
|
String filename = URLUtil.guessFileName(url,
|
||||||
contentDisposition, mimetype);
|
contentDisposition, mimetype);
|
||||||
|
|
||||||
// Check to see if we have an SDCard
|
// Check to see if we have an SDCard
|
||||||
String status = Environment.getExternalStorageState();
|
String status = Environment.getExternalStorageState();
|
||||||
if (!status.equals(Environment.MEDIA_MOUNTED)) {
|
if (!status.equals(Environment.MEDIA_MOUNTED)) {
|
||||||
int title;
|
int title;
|
||||||
String msg;
|
String msg;
|
||||||
|
|
||||||
// Check to see if the SDCard is busy, same as the music app
|
// Check to see if the SDCard is busy, same as the music app
|
||||||
if (status.equals(Environment.MEDIA_SHARED)) {
|
if (status.equals(Environment.MEDIA_SHARED)) {
|
||||||
msg = activity.getString(R.string.download_sdcard_busy_dlg_msg);
|
msg = activity.getString(R.string.download_sdcard_busy_dlg_msg);
|
||||||
title = R.string.download_sdcard_busy_dlg_title;
|
title = R.string.download_sdcard_busy_dlg_title;
|
||||||
} else {
|
} else {
|
||||||
msg = activity.getString(R.string.download_no_sdcard_dlg_msg, filename);
|
msg = activity.getString(R.string.download_no_sdcard_dlg_msg, filename);
|
||||||
title = R.string.download_no_sdcard_dlg_title;
|
title = R.string.download_no_sdcard_dlg_title;
|
||||||
}
|
}
|
||||||
|
|
||||||
new AlertDialog.Builder(activity)
|
new AlertDialog.Builder(activity)
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setIcon(android.R.drawable.ic_dialog_alert)
|
.setIcon(android.R.drawable.ic_dialog_alert)
|
||||||
.setMessage(msg)
|
.setMessage(msg)
|
||||||
.setPositiveButton(R.string.action_ok, null)
|
.setPositiveButton(R.string.action_ok, null)
|
||||||
.show();
|
.show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// java.net.URI is a lot stricter than KURL so we have to encode some
|
// java.net.URI is a lot stricter than KURL so we have to encode some
|
||||||
// extra characters. Fix for b 2538060 and b 1634719
|
// extra characters. Fix for b 2538060 and b 1634719
|
||||||
WebAddress webAddress;
|
WebAddress webAddress;
|
||||||
try {
|
try {
|
||||||
webAddress = new WebAddress(url);
|
webAddress = new WebAddress(url);
|
||||||
webAddress.setPath(encodePath(webAddress.getPath()));
|
webAddress.setPath(encodePath(webAddress.getPath()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// This only happens for very bad urls, we want to chatch the
|
// This only happens for very bad urls, we want to chatch the
|
||||||
// exception here
|
// exception here
|
||||||
Log.e(LOGTAG, "Exception trying to parse url:" + url);
|
Log.e(LOGTAG, "Exception trying to parse url:" + url);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String addressString = webAddress.toString();
|
String addressString = webAddress.toString();
|
||||||
Uri uri = Uri.parse(addressString);
|
Uri uri = Uri.parse(addressString);
|
||||||
final DownloadManager.Request request;
|
final DownloadManager.Request request;
|
||||||
try {
|
try {
|
||||||
request = new DownloadManager.Request(uri);
|
request = new DownloadManager.Request(uri);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
Toast.makeText(activity, R.string.cannot_download, Toast.LENGTH_SHORT).show();
|
Toast.makeText(activity, R.string.cannot_download, Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
request.setMimeType(mimetype);
|
request.setMimeType(mimetype);
|
||||||
// set downloaded file destination to /sdcard/Download.
|
// set downloaded file destination to /sdcard/Download.
|
||||||
// or, should it be set to one of several Environment.DIRECTORY* dirs depending on mimetype?
|
// or, should it be set to one of several Environment.DIRECTORY* dirs depending on mimetype?
|
||||||
|
|
||||||
String location = mActivity.getSharedPreferences(PreferenceConstants.PREFERENCES, 0)
|
String location = mActivity.getSharedPreferences(PreferenceConstants.PREFERENCES, 0)
|
||||||
.getString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS);
|
.getString(PreferenceConstants.DOWNLOAD_DIRECTORY, Environment.DIRECTORY_DOWNLOADS);
|
||||||
request.setDestinationInExternalPublicDir(location, filename);
|
request.setDestinationInExternalPublicDir(location, filename);
|
||||||
// let this downloaded file be scanned by MediaScanner - so that it can
|
// let this downloaded file be scanned by MediaScanner - so that it can
|
||||||
// show up in Gallery app, for example.
|
// show up in Gallery app, for example.
|
||||||
request.allowScanningByMediaScanner();
|
request.allowScanningByMediaScanner();
|
||||||
request.setDescription(webAddress.getHost());
|
request.setDescription(webAddress.getHost());
|
||||||
// XXX: Have to use the old url since the cookies were stored using the
|
// XXX: Have to use the old url since the cookies were stored using the
|
||||||
// old percent-encoded url.
|
// old percent-encoded url.
|
||||||
String cookies = CookieManager.getInstance().getCookie(url);
|
String cookies = CookieManager.getInstance().getCookie(url);
|
||||||
request.addRequestHeader("cookie", cookies);
|
request.addRequestHeader("cookie", cookies);
|
||||||
request.setNotificationVisibility(
|
request.setNotificationVisibility(
|
||||||
DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||||
if (mimetype == null) {
|
if (mimetype == null) {
|
||||||
if (TextUtils.isEmpty(addressString)) {
|
if (TextUtils.isEmpty(addressString)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// We must have long pressed on a link or image to download it. We
|
// We must have long pressed on a link or image to download it. We
|
||||||
// are not sure of the mimetype in this case, so do a head request
|
// are not sure of the mimetype in this case, so do a head request
|
||||||
new FetchUrlMimeType(activity, request, addressString, cookies,
|
new FetchUrlMimeType(activity, request, addressString, cookies,
|
||||||
userAgent).start();
|
userAgent).start();
|
||||||
} else {
|
} else {
|
||||||
final DownloadManager manager
|
final DownloadManager manager
|
||||||
= (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
|
= (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||||
new Thread("Browser download") {
|
new Thread("Browser download") {
|
||||||
public void run() {
|
public void run() {
|
||||||
manager.enqueue(request);
|
manager.enqueue(request);
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
}
|
}
|
||||||
Toast.makeText(activity, R.string.download_pending, Toast.LENGTH_SHORT)
|
Toast.makeText(activity, R.string.download_pending, Toast.LENGTH_SHORT)
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
@ -3,107 +3,105 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
|
|
||||||
import org.apache.http.Header;
|
|
||||||
import org.apache.http.HttpResponse;
|
|
||||||
import org.apache.http.client.methods.HttpHead;
|
|
||||||
import android.app.DownloadManager;
|
import android.app.DownloadManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.http.AndroidHttpClient;
|
import android.net.http.AndroidHttpClient;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.webkit.MimeTypeMap;
|
import android.webkit.MimeTypeMap;
|
||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
|
import org.apache.http.Header;
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.client.methods.HttpHead;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is used to pull down the http headers of a given URL so that
|
* This class is used to pull down the http headers of a given URL so that we can analyse the mimetype and make any
|
||||||
* we can analyse the mimetype and make any correction needed before we give
|
* correction needed before we give the URL to the download manager. This operation is needed when the user long-clicks
|
||||||
* the URL to the download manager.
|
* on a link or image and we don't know the mimetype. If the user just clicks on the link, we will do the same steps of
|
||||||
* This operation is needed when the user long-clicks on a link or image and
|
* correcting the mimetype down in android.os.webkit.LoadListener rather than handling it here.
|
||||||
* we don't know the mimetype. If the user just clicks on the link, we will
|
|
||||||
* do the same steps of correcting the mimetype down in
|
|
||||||
* android.os.webkit.LoadListener rather than handling it here.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
class FetchUrlMimeType extends Thread {
|
class FetchUrlMimeType extends Thread {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private DownloadManager.Request mRequest;
|
|
||||||
private String mUri;
|
|
||||||
private String mCookies;
|
|
||||||
private String mUserAgent;
|
|
||||||
|
|
||||||
public FetchUrlMimeType(Context context, DownloadManager.Request request,
|
private DownloadManager.Request mRequest;
|
||||||
String uri, String cookies, String userAgent) {
|
|
||||||
mContext = context.getApplicationContext();
|
|
||||||
mRequest = request;
|
|
||||||
mUri = uri;
|
|
||||||
mCookies = cookies;
|
|
||||||
mUserAgent = userAgent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
private String mUri;
|
||||||
public void run() {
|
|
||||||
// User agent is likely to be null, though the AndroidHttpClient
|
|
||||||
// seems ok with that.
|
|
||||||
AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent);
|
|
||||||
|
|
||||||
HttpHead request = new HttpHead(mUri);
|
|
||||||
|
|
||||||
if (mCookies != null && mCookies.length() > 0) {
|
private String mCookies;
|
||||||
request.addHeader("Cookie", mCookies);
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpResponse response;
|
private String mUserAgent;
|
||||||
String mimeType = null;
|
|
||||||
String contentDisposition = null;
|
|
||||||
try {
|
|
||||||
response = client.execute(request);
|
|
||||||
// We could get a redirect here, but if we do lets let
|
|
||||||
// the download manager take care of it, and thus trust that
|
|
||||||
// the server sends the right mimetype
|
|
||||||
if (response.getStatusLine().getStatusCode() == 200) {
|
|
||||||
Header header = response.getFirstHeader("Content-Type");
|
|
||||||
if (header != null) {
|
|
||||||
mimeType = header.getValue();
|
|
||||||
final int semicolonIndex = mimeType.indexOf(';');
|
|
||||||
if (semicolonIndex != -1) {
|
|
||||||
mimeType = mimeType.substring(0, semicolonIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition");
|
|
||||||
if (contentDispositionHeader != null) {
|
|
||||||
contentDisposition = contentDispositionHeader.getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException ex) {
|
|
||||||
request.abort();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
request.abort();
|
|
||||||
} finally {
|
|
||||||
client.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mimeType != null) {
|
public FetchUrlMimeType(Context context, DownloadManager.Request request,
|
||||||
if (mimeType.equalsIgnoreCase("text/plain") ||
|
String uri, String cookies, String userAgent) {
|
||||||
mimeType.equalsIgnoreCase("application/octet-stream")) {
|
mContext = context.getApplicationContext();
|
||||||
String newMimeType =
|
mRequest = request;
|
||||||
MimeTypeMap.getSingleton().getMimeTypeFromExtension(
|
mUri = uri;
|
||||||
MimeTypeMap.getFileExtensionFromUrl(mUri));
|
mCookies = cookies;
|
||||||
if (newMimeType != null) {
|
mUserAgent = userAgent;
|
||||||
mRequest.setMimeType(newMimeType);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
String filename = URLUtil.guessFileName(mUri, contentDisposition,
|
|
||||||
mimeType);
|
|
||||||
mRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start the download
|
@Override
|
||||||
DownloadManager manager = (DownloadManager) mContext.getSystemService(
|
public void run() {
|
||||||
Context.DOWNLOAD_SERVICE);
|
// User agent is likely to be null, though the AndroidHttpClient
|
||||||
manager.enqueue(mRequest);
|
// seems ok with that.
|
||||||
}
|
AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent);
|
||||||
|
|
||||||
|
HttpHead request = new HttpHead(mUri);
|
||||||
|
|
||||||
|
if (mCookies != null && mCookies.length() > 0) {
|
||||||
|
request.addHeader("Cookie", mCookies);
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpResponse response;
|
||||||
|
String mimeType = null;
|
||||||
|
String contentDisposition = null;
|
||||||
|
try {
|
||||||
|
response = client.execute(request);
|
||||||
|
// We could get a redirect here, but if we do lets let
|
||||||
|
// the download manager take care of it, and thus trust that
|
||||||
|
// the server sends the right mimetype
|
||||||
|
if (response.getStatusLine().getStatusCode() == 200) {
|
||||||
|
Header header = response.getFirstHeader("Content-Type");
|
||||||
|
if (header != null) {
|
||||||
|
mimeType = header.getValue();
|
||||||
|
final int semicolonIndex = mimeType.indexOf(';');
|
||||||
|
if (semicolonIndex != -1) {
|
||||||
|
mimeType = mimeType.substring(0, semicolonIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition");
|
||||||
|
if (contentDispositionHeader != null) {
|
||||||
|
contentDisposition = contentDispositionHeader.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
request.abort();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
request.abort();
|
||||||
|
} finally {
|
||||||
|
client.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mimeType != null) {
|
||||||
|
if (mimeType.equalsIgnoreCase("text/plain") ||
|
||||||
|
mimeType.equalsIgnoreCase("application/octet-stream")) {
|
||||||
|
String newMimeType =
|
||||||
|
MimeTypeMap.getSingleton().getMimeTypeFromExtension(
|
||||||
|
MimeTypeMap.getFileExtensionFromUrl(mUri));
|
||||||
|
if (newMimeType != null) {
|
||||||
|
mRequest.setMimeType(newMimeType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String filename = URLUtil.guessFileName(mUri, contentDisposition,
|
||||||
|
mimeType);
|
||||||
|
mRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start the download
|
||||||
|
DownloadManager manager = (DownloadManager) mContext.getSystemService(
|
||||||
|
Context.DOWNLOAD_SERVICE);
|
||||||
|
manager.enqueue(mRequest);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,13 @@ public class HistoryItem implements Comparable<HistoryItem> {
|
|||||||
|
|
||||||
// private variables
|
// private variables
|
||||||
private int mId;
|
private int mId;
|
||||||
|
|
||||||
private String mUrl;
|
private String mUrl;
|
||||||
|
|
||||||
private String mTitle;
|
private String mTitle;
|
||||||
|
|
||||||
private Bitmap mBitmap;
|
private Bitmap mBitmap;
|
||||||
|
|
||||||
private int mImageId;
|
private int mImageId;
|
||||||
|
|
||||||
// Empty constructor
|
// Empty constructor
|
||||||
@ -33,21 +37,21 @@ public class HistoryItem implements Comparable<HistoryItem> {
|
|||||||
this.mTitle = title;
|
this.mTitle = title;
|
||||||
this.mBitmap = null;
|
this.mBitmap = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// constructor
|
// constructor
|
||||||
public HistoryItem(String url, String title, int imageId) {
|
public HistoryItem(String url, String title, int imageId) {
|
||||||
this.mUrl = url;
|
this.mUrl = url;
|
||||||
this.mTitle = title;
|
this.mTitle = title;
|
||||||
this.mBitmap = null;
|
this.mBitmap = null;
|
||||||
this.mImageId = imageId;
|
this.mImageId = imageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// getting ID
|
// getting ID
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return this.mId;
|
return this.mId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getImageId(){
|
public int getImageId() {
|
||||||
return this.mImageId;
|
return this.mImageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,8 +59,8 @@ public class HistoryItem implements Comparable<HistoryItem> {
|
|||||||
public void setID(int id) {
|
public void setID(int id) {
|
||||||
this.mId = id;
|
this.mId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setImageId(int id){
|
public void setImageId(int id) {
|
||||||
this.mImageId = id;
|
this.mImageId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,5 +101,4 @@ public class HistoryItem implements Comparable<HistoryItem> {
|
|||||||
public int compareTo(HistoryItem another) {
|
public int compareTo(HistoryItem another) {
|
||||||
return mTitle.compareTo(another.mTitle);
|
return mTitle.compareTo(another.mTitle);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
@ -4,12 +4,18 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
public class HistoryPageVariables {
|
public class HistoryPageVariables {
|
||||||
|
|
||||||
public static final String Heading = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta content=\"en-us\" http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>"
|
public static final String Heading = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta content=\"en-us\" http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>"
|
||||||
+ BrowserApp.getAppContext().getString(R.string.action_history)
|
+ BrowserApp.getAppContext().getString(R.string.action_history)
|
||||||
+ "</title></head><style>body { background: #e1e1e1;}.box { vertical-align:middle;position:relative; display: block; margin: 10px;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:5px; background-color:#fff;box-shadow: 0px 3px rgba( 0, 0, 0, 0.1 );font-family: Arial;color: #444;font-size: 12px;-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;}.box a { width: 100%; height: 100%; position: absolute; left: 0; top: 0;}.black {color: black;font-size: 15px;font-family: Arial; white-space: nowrap; overflow: hidden;margin:auto; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis;}.font {color: gray;font-size: 10px;font-family: Arial; white-space: nowrap; overflow: hidden;margin:auto; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis;}</style><body><div id=\"content\">";
|
+ "</title></head><style>body { background: #e1e1e1;}.box { vertical-align:middle;position:relative; display: block; margin: 10px;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:5px; background-color:#fff;box-shadow: 0px 3px rgba( 0, 0, 0, 0.1 );font-family: Arial;color: #444;font-size: 12px;-moz-border-radius: 2px;-webkit-border-radius: 2px;border-radius: 2px;}.box a { width: 100%; height: 100%; position: absolute; left: 0; top: 0;}.black {color: black;font-size: 15px;font-family: Arial; white-space: nowrap; overflow: hidden;margin:auto; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis;}.font {color: gray;font-size: 10px;font-family: Arial; white-space: nowrap; overflow: hidden;margin:auto; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis;}</style><body><div id=\"content\">";
|
||||||
|
|
||||||
public static final String Part1 = "<div class=\"box\"><a href=\"";
|
public static final String Part1 = "<div class=\"box\"><a href=\"";
|
||||||
|
|
||||||
public static final String Part2 = "\"></a><p class=\"black\">";
|
public static final String Part2 = "\"></a><p class=\"black\">";
|
||||||
|
|
||||||
public static final String Part3 = "</p><p class=\"font\">";
|
public static final String Part3 = "</p><p class=\"font\">";
|
||||||
|
|
||||||
public static final String Part4 = "</p></div></div>";
|
public static final String Part4 = "</p></div></div>";
|
||||||
|
|
||||||
public static final String End = "</div></body></html>";
|
public static final String End = "</div></body></html>";
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
public class HomepageVariables {
|
public class HomepageVariables {
|
||||||
|
|
||||||
public static final String HEAD = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta content=\"en-us\" http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0\"><title>"
|
public static final String HEAD = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta content=\"en-us\" http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0\"><title>"
|
||||||
+ BrowserApp.getAppContext().getString(R.string.home)
|
+ BrowserApp.getAppContext().getString(R.string.home)
|
||||||
+ "</title></head>"
|
+ "</title></head>"
|
||||||
|
@ -10,6 +10,7 @@ import android.webkit.CookieSyncManager;
|
|||||||
public class IncognitoActivity extends BrowserActivity {
|
public class IncognitoActivity extends BrowserActivity {
|
||||||
|
|
||||||
SharedPreferences mPreferences;
|
SharedPreferences mPreferences;
|
||||||
|
|
||||||
CookieManager mCookieManager;
|
CookieManager mCookieManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -73,7 +74,4 @@ public class IncognitoActivity extends BrowserActivity {
|
|||||||
closeDrawers();
|
closeDrawers();
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -15,10 +10,17 @@ import android.net.Uri;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class IntentUtils {
|
public class IntentUtils {
|
||||||
|
|
||||||
private Activity mActivity;
|
private Activity mActivity;
|
||||||
|
|
||||||
private BrowserController mController;
|
private BrowserController mController;
|
||||||
|
|
||||||
static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile("(?i)"
|
static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile("(?i)"
|
||||||
+ // switch on case insensitive matching
|
+ // switch on case insensitive matching
|
||||||
"("
|
"("
|
||||||
@ -72,8 +74,7 @@ public class IntentUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search for intent handlers that are specific to this URL aka, specialized
|
* Search for intent handlers that are specific to this URL aka, specialized apps like google maps or youtube
|
||||||
* apps like google maps or youtube
|
|
||||||
*/
|
*/
|
||||||
private boolean isSpecializedHandlerAvailable(Intent intent) {
|
private boolean isSpecializedHandlerAvailable(Intent intent) {
|
||||||
PackageManager pm = mActivity.getPackageManager();
|
PackageManager pm = mActivity.getPackageManager();
|
||||||
|
@ -31,15 +31,15 @@ public class LicenseActivity extends Activity implements View.OnClickListener {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
case R.id.browserLicense:
|
case R.id.browserLicense:
|
||||||
actionView("http://www.mozilla.org/MPL/2.0/");
|
actionView("http://www.mozilla.org/MPL/2.0/");
|
||||||
break;
|
break;
|
||||||
case R.id.licenseAOSP:
|
case R.id.licenseAOSP:
|
||||||
actionView("http://www.apache.org/licenses/LICENSE-2.0");
|
actionView("http://www.apache.org/licenses/LICENSE-2.0");
|
||||||
break;
|
break;
|
||||||
case R.id.licenseHosts:
|
case R.id.licenseHosts:
|
||||||
actionView("http://hosts-file.net/");
|
actionView("http://hosts-file.net/");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,5 +54,4 @@ public class LicenseActivity extends Activity implements View.OnClickListener {
|
|||||||
finish();
|
finish();
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,13 @@ import android.webkit.DownloadListener;
|
|||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
|
|
||||||
public class LightningDownloadListener implements DownloadListener {
|
public class LightningDownloadListener implements DownloadListener {
|
||||||
|
|
||||||
private Activity mActivity;
|
private Activity mActivity;
|
||||||
LightningDownloadListener(Activity activity){
|
|
||||||
|
LightningDownloadListener(Activity activity) {
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDownloadStart(final String url, final String userAgent,
|
public void onDownloadStart(final String url, final String userAgent,
|
||||||
final String contentDisposition, final String mimetype,
|
final String contentDisposition, final String mimetype,
|
||||||
@ -26,13 +28,12 @@ public class LightningDownloadListener implements DownloadListener {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
switch (which) {
|
switch (which) {
|
||||||
case DialogInterface.BUTTON_POSITIVE: {
|
case DialogInterface.BUTTON_POSITIVE:
|
||||||
DownloadHandler.onDownloadStart(mActivity, url, userAgent, contentDisposition, mimetype, false);
|
DownloadHandler.onDownloadStart(mActivity, url, userAgent, contentDisposition, mimetype, false);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case DialogInterface.BUTTON_NEGATIVE: {
|
case DialogInterface.BUTTON_NEGATIVE:
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -45,8 +46,6 @@ public class LightningDownloadListener implements DownloadListener {
|
|||||||
.setNegativeButton(mActivity.getResources().getString(R.string.action_cancel), dialogClickListener)
|
.setNegativeButton(mActivity.getResources().getString(R.string.action_cancel), dialogClickListener)
|
||||||
.show();
|
.show();
|
||||||
Log.i(Constants.TAG, "Downloading" + fileName);
|
Log.i(Constants.TAG, "Downloading" + fileName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,28 +4,10 @@
|
|||||||
|
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.InetSocketAddress;
|
|
||||||
import java.net.Proxy;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
import org.apache.http.util.ByteArrayBuffer;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.*;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.net.MailTo;
|
import android.net.MailTo;
|
||||||
@ -33,7 +15,6 @@ import android.net.Uri;
|
|||||||
import android.net.http.SslError;
|
import android.net.http.SslError;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.text.method.PasswordTransformationMethod;
|
import android.text.method.PasswordTransformationMethod;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.GestureDetector;
|
import android.view.GestureDetector;
|
||||||
@ -42,39 +23,50 @@ import android.view.MotionEvent;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnTouchListener;
|
import android.view.View.OnTouchListener;
|
||||||
import android.webkit.CookieManager;
|
import android.webkit.CookieManager;
|
||||||
import android.webkit.GeolocationPermissions;
|
import android.webkit.*;
|
||||||
import android.webkit.HttpAuthHandler;
|
|
||||||
import android.webkit.SslErrorHandler;
|
|
||||||
import android.webkit.ValueCallback;
|
|
||||||
import android.webkit.WebChromeClient;
|
|
||||||
import android.webkit.WebResourceResponse;
|
|
||||||
import android.webkit.WebSettings;
|
|
||||||
import android.webkit.WebSettings.LayoutAlgorithm;
|
import android.webkit.WebSettings.LayoutAlgorithm;
|
||||||
import android.webkit.WebSettings.PluginState;
|
import android.webkit.WebSettings.PluginState;
|
||||||
import android.webkit.WebView;
|
|
||||||
import android.webkit.WebViewClient;
|
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.VideoView;
|
import android.widget.VideoView;
|
||||||
|
import org.apache.http.util.ByteArrayBuffer;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
public class LightningView {
|
public class LightningView {
|
||||||
|
|
||||||
private Title mTitle;
|
private Title mTitle;
|
||||||
|
|
||||||
private WebView mWebView;
|
private WebView mWebView;
|
||||||
|
|
||||||
private BrowserController mBrowserController;
|
private BrowserController mBrowserController;
|
||||||
|
|
||||||
private GestureDetector mGestureDetector;
|
private GestureDetector mGestureDetector;
|
||||||
|
|
||||||
private Activity mActivity;
|
private Activity mActivity;
|
||||||
|
|
||||||
private WebSettings mSettings;
|
private WebSettings mSettings;
|
||||||
|
|
||||||
private static int API = android.os.Build.VERSION.SDK_INT;
|
private static int API = android.os.Build.VERSION.SDK_INT;
|
||||||
|
|
||||||
private static String mHomepage;
|
private static String mHomepage;
|
||||||
|
|
||||||
private static String mDefaultUserAgent;
|
private static String mDefaultUserAgent;
|
||||||
|
|
||||||
private static Bitmap mWebpageBitmap;
|
private static Bitmap mWebpageBitmap;
|
||||||
|
|
||||||
private static SharedPreferences mPreferences;
|
private static SharedPreferences mPreferences;
|
||||||
|
|
||||||
private static boolean mWideViewPort;
|
private static boolean mWideViewPort;
|
||||||
|
|
||||||
private static AdBlock mAdBlock;
|
private static AdBlock mAdBlock;
|
||||||
|
|
||||||
private CookieManager mCookieManager;
|
private CookieManager mCookieManager;
|
||||||
|
|
||||||
private boolean isForgroundTab = false;
|
private boolean isForgroundTab = false;
|
||||||
|
|
||||||
private IntentUtils mIntentUtils = null;
|
private IntentUtils mIntentUtils = null;
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
@ -122,7 +114,9 @@ public class LightningView {
|
|||||||
mWebView.setOnTouchListener(new OnTouchListener() {
|
mWebView.setOnTouchListener(new OnTouchListener() {
|
||||||
|
|
||||||
float mLocation = 0;
|
float mLocation = 0;
|
||||||
|
|
||||||
float mY = 0;
|
float mY = 0;
|
||||||
|
|
||||||
int mAction = 0;
|
int mAction = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -172,85 +166,85 @@ public class LightningView {
|
|||||||
String home = "";
|
String home = "";
|
||||||
home = HomepageVariables.HEAD;
|
home = HomepageVariables.HEAD;
|
||||||
switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) {
|
switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) {
|
||||||
case 0:
|
case 0:
|
||||||
// CUSTOM SEARCH
|
// CUSTOM SEARCH
|
||||||
home = home + "file:///android_asset/lightning.png";
|
home = home + "file:///android_asset/lightning.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home
|
home = home
|
||||||
+ mPreferences.getString(PreferenceConstants.SEARCH_URL,
|
+ mPreferences.getString(PreferenceConstants.SEARCH_URL,
|
||||||
Constants.GOOGLE_SEARCH);
|
Constants.GOOGLE_SEARCH);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// GOOGLE_SEARCH;
|
// GOOGLE_SEARCH;
|
||||||
home = home + "file:///android_asset/google.png";
|
home = home + "file:///android_asset/google.png";
|
||||||
// + "https://www.google.com/images/srpr/logo11w.png";
|
// + "https://www.google.com/images/srpr/logo11w.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.GOOGLE_SEARCH;
|
home = home + Constants.GOOGLE_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// ANDROID SEARCH;
|
// ANDROID SEARCH;
|
||||||
home = home + "file:///android_asset/lightning.png";
|
home = home + "file:///android_asset/lightning.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.ANDROID_SEARCH;
|
home = home + Constants.ANDROID_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// BING_SEARCH;
|
// BING_SEARCH;
|
||||||
home = home + "file:///android_asset/bing.png";
|
home = home + "file:///android_asset/bing.png";
|
||||||
// +
|
// +
|
||||||
// "http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Bing_logo_%282013%29.svg/500px-Bing_logo_%282013%29.svg.png";
|
// "http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Bing_logo_%282013%29.svg/500px-Bing_logo_%282013%29.svg.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.BING_SEARCH;
|
home = home + Constants.BING_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// YAHOO_SEARCH;
|
// YAHOO_SEARCH;
|
||||||
home = home + "file:///android_asset/yahoo.png";
|
home = home + "file:///android_asset/yahoo.png";
|
||||||
// +
|
// +
|
||||||
// "http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Yahoo%21_logo.svg/799px-Yahoo%21_logo.svg.png";
|
// "http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Yahoo%21_logo.svg/799px-Yahoo%21_logo.svg.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.YAHOO_SEARCH;
|
home = home + Constants.YAHOO_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
// STARTPAGE_SEARCH;
|
// STARTPAGE_SEARCH;
|
||||||
home = home + "file:///android_asset/startpage.png";
|
home = home + "file:///android_asset/startpage.png";
|
||||||
// + "https://startpage.com/graphics/startp_logo.gif";
|
// + "https://startpage.com/graphics/startp_logo.gif";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.STARTPAGE_SEARCH;
|
home = home + Constants.STARTPAGE_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
// STARTPAGE_MOBILE
|
// STARTPAGE_MOBILE
|
||||||
home = home + "file:///android_asset/startpage.png";
|
home = home + "file:///android_asset/startpage.png";
|
||||||
// + "https://startpage.com/graphics/startp_logo.gif";
|
// + "https://startpage.com/graphics/startp_logo.gif";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.STARTPAGE_MOBILE_SEARCH;
|
home = home + Constants.STARTPAGE_MOBILE_SEARCH;
|
||||||
case 7:
|
case 7:
|
||||||
// DUCK_SEARCH;
|
// DUCK_SEARCH;
|
||||||
home = home + "file:///android_asset/duckduckgo.png";
|
home = home + "file:///android_asset/duckduckgo.png";
|
||||||
// + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
// + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.DUCK_SEARCH;
|
home = home + Constants.DUCK_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
// DUCK_LITE_SEARCH;
|
// DUCK_LITE_SEARCH;
|
||||||
home = home + "file:///android_asset/duckduckgo.png";
|
home = home + "file:///android_asset/duckduckgo.png";
|
||||||
// + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
// + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.DUCK_LITE_SEARCH;
|
home = home + Constants.DUCK_LITE_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
// BAIDU_SEARCH;
|
// BAIDU_SEARCH;
|
||||||
home = home + "file:///android_asset/baidu.png";
|
home = home + "file:///android_asset/baidu.png";
|
||||||
// + "http://www.baidu.com/img/bdlogo.gif";
|
// + "http://www.baidu.com/img/bdlogo.gif";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.BAIDU_SEARCH;
|
home = home + Constants.BAIDU_SEARCH;
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
// YANDEX_SEARCH;
|
// YANDEX_SEARCH;
|
||||||
home = home + "file:///android_asset/yandex.png";
|
home = home + "file:///android_asset/yandex.png";
|
||||||
// +
|
// +
|
||||||
// "http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Yandex.svg/600px-Yandex.svg.png";
|
// "http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Yandex.svg/600px-Yandex.svg.png";
|
||||||
home = home + HomepageVariables.MIDDLE;
|
home = home + HomepageVariables.MIDDLE;
|
||||||
home = home + Constants.YANDEX_SEARCH;
|
home = home + Constants.YANDEX_SEARCH;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,40 +279,39 @@ public class LightningView {
|
|||||||
if (API < 19) {
|
if (API < 19) {
|
||||||
switch (mPreferences.getInt(
|
switch (mPreferences.getInt(
|
||||||
PreferenceConstants.ADOBE_FLASH_SUPPORT, 0)) {
|
PreferenceConstants.ADOBE_FLASH_SUPPORT, 0)) {
|
||||||
case 0:
|
case 0:
|
||||||
mSettings.setPluginState(PluginState.OFF);
|
mSettings.setPluginState(PluginState.OFF);
|
||||||
break;
|
break;
|
||||||
case 1: {
|
case 1:
|
||||||
mSettings.setPluginState(PluginState.ON_DEMAND);
|
mSettings.setPluginState(PluginState.ON_DEMAND);
|
||||||
break;
|
break;
|
||||||
}
|
case 2:
|
||||||
case 2: {
|
mSettings.setPluginState(PluginState.ON);
|
||||||
mSettings.setPluginState(PluginState.ON);
|
break;
|
||||||
break;
|
default:
|
||||||
}
|
break;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mPreferences.getInt(PreferenceConstants.USER_AGENT, 1)) {
|
switch (mPreferences.getInt(PreferenceConstants.USER_AGENT, 1)) {
|
||||||
case 1:
|
case 1:
|
||||||
if (API > 16)
|
if (API > 16) {
|
||||||
mSettings.setUserAgentString(WebSettings
|
mSettings.setUserAgentString(WebSettings
|
||||||
.getDefaultUserAgent(context));
|
.getDefaultUserAgent(context));
|
||||||
else
|
} else {
|
||||||
mSettings.setUserAgentString(mDefaultUserAgent);
|
mSettings.setUserAgentString(mDefaultUserAgent);
|
||||||
break;
|
}
|
||||||
case 2:
|
break;
|
||||||
mSettings.setUserAgentString(Constants.DESKTOP_USER_AGENT);
|
case 2:
|
||||||
break;
|
mSettings.setUserAgentString(Constants.DESKTOP_USER_AGENT);
|
||||||
case 3:
|
break;
|
||||||
mSettings.setUserAgentString(Constants.MOBILE_USER_AGENT);
|
case 3:
|
||||||
break;
|
mSettings.setUserAgentString(Constants.MOBILE_USER_AGENT);
|
||||||
case 4:
|
break;
|
||||||
mSettings.setUserAgentString(mPreferences.getString(
|
case 4:
|
||||||
PreferenceConstants.USER_AGENT_STRING, mDefaultUserAgent));
|
mSettings.setUserAgentString(mPreferences.getString(
|
||||||
break;
|
PreferenceConstants.USER_AGENT_STRING, mDefaultUserAgent));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPreferences.getBoolean(PreferenceConstants.SAVE_PASSWORDS, false)) {
|
if (mPreferences.getBoolean(PreferenceConstants.SAVE_PASSWORDS, false)) {
|
||||||
@ -350,25 +343,25 @@ public class LightningView {
|
|||||||
mSettings.setLoadWithOverviewMode(mPreferences.getBoolean(
|
mSettings.setLoadWithOverviewMode(mPreferences.getBoolean(
|
||||||
PreferenceConstants.OVERVIEW_MODE, true));
|
PreferenceConstants.OVERVIEW_MODE, true));
|
||||||
switch (mPreferences.getInt(PreferenceConstants.TEXT_SIZE, 3)) {
|
switch (mPreferences.getInt(PreferenceConstants.TEXT_SIZE, 3)) {
|
||||||
case 1:
|
case 1:
|
||||||
mSettings.setTextZoom(200);
|
mSettings.setTextZoom(200);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mSettings.setTextZoom(150);
|
mSettings.setTextZoom(150);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mSettings.setTextZoom(100);
|
mSettings.setTextZoom(100);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mSettings.setTextZoom(75);
|
mSettings.setTextZoom(75);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
mSettings.setTextZoom(50);
|
mSettings.setTextZoom(50);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint({ "SetJavaScriptEnabled", "NewApi" })
|
@SuppressLint({"SetJavaScriptEnabled", "NewApi"})
|
||||||
public void initializeSettings(WebSettings settings, Context context) {
|
public void initializeSettings(WebSettings settings, Context context) {
|
||||||
if (API < 18) {
|
if (API < 18) {
|
||||||
settings.setAppCacheMaxSize(Long.MAX_VALUE);
|
settings.setAppCacheMaxSize(Long.MAX_VALUE);
|
||||||
@ -403,20 +396,23 @@ public class LightningView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShown() {
|
public boolean isShown() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
return mWebView.isShown();
|
return mWebView.isShown();
|
||||||
else
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void onPause() {
|
public synchronized void onPause() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
mWebView.onPause();
|
mWebView.onPause();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void onResume() {
|
public synchronized void onResume() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
mWebView.onResume();
|
mWebView.onResume();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIsForgroundTab(boolean isForground) {
|
public void setIsForgroundTab(boolean isForground) {
|
||||||
@ -456,8 +452,9 @@ public class LightningView {
|
|||||||
|
|
||||||
public void requestFocus() {
|
public void requestFocus() {
|
||||||
if (mWebView != null) {
|
if (mWebView != null) {
|
||||||
if (!mWebView.hasFocus())
|
if (!mWebView.hasFocus()) {
|
||||||
mWebView.requestFocus();
|
mWebView.requestFocus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,8 +505,9 @@ public class LightningView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void goBack() {
|
public synchronized void goBack() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
mWebView.goBack();
|
mWebView.goBack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserAgent() {
|
public String getUserAgent() {
|
||||||
@ -521,8 +519,9 @@ public class LightningView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void goForward() {
|
public synchronized void goForward() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
mWebView.goForward();
|
mWebView.goForward();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canGoBack() {
|
public boolean canGoBack() {
|
||||||
@ -550,13 +549,15 @@ public class LightningView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void loadUrl(String url) {
|
public synchronized void loadUrl(String url) {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
mWebView.loadUrl(url);
|
mWebView.loadUrl(url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void invalidate() {
|
public synchronized void invalidate() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
mWebView.invalidate();
|
mWebView.invalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
@ -564,10 +565,11 @@ public class LightningView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
||||||
if (mWebView != null)
|
if (mWebView != null) {
|
||||||
return mWebView.getUrl();
|
return mWebView.getUrl();
|
||||||
else
|
} else {
|
||||||
return "";
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LightningWebClient extends WebViewClient {
|
public class LightningWebClient extends WebViewClient {
|
||||||
@ -593,11 +595,13 @@ public class LightningView {
|
|||||||
PreferenceConstants.USE_PROXY, false);
|
PreferenceConstants.USE_PROXY, false);
|
||||||
boolean mDoLeakHardening = false;
|
boolean mDoLeakHardening = false;
|
||||||
|
|
||||||
if (!useProxy)
|
if (!useProxy) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (!mDoLeakHardening)
|
if (!mDoLeakHardening) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// now we are going to proxy!
|
// now we are going to proxy!
|
||||||
try {
|
try {
|
||||||
@ -636,13 +640,15 @@ public class LightningView {
|
|||||||
|
|
||||||
if (cEnc == null && ctArray.length > 1) {
|
if (cEnc == null && ctArray.length > 1) {
|
||||||
cEnc = ctArray[1];
|
cEnc = ctArray[1];
|
||||||
if (cEnc.indexOf('=') != -1)
|
if (cEnc.indexOf('=') != -1) {
|
||||||
cEnc = cEnc.split("=")[1].trim();
|
cEnc = cEnc.split("=")[1].trim();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connLen <= 0)
|
if (connLen <= 0) {
|
||||||
connLen = 2048;
|
connLen = 2048;
|
||||||
|
}
|
||||||
|
|
||||||
if (cType != null && cType.startsWith("text")) {
|
if (cType != null && cType.startsWith("text")) {
|
||||||
InputStream fStream = null;
|
InputStream fStream = null;
|
||||||
@ -683,9 +689,9 @@ public class LightningView {
|
|||||||
}/**
|
}/**
|
||||||
* else if (mDoLeakHardening) { WebResourceResponse response =
|
* else if (mDoLeakHardening) { WebResourceResponse response =
|
||||||
* new WebResourceResponse( cType, cEnc, conn.getInputStream());
|
* new WebResourceResponse( cType, cEnc, conn.getInputStream());
|
||||||
*
|
*
|
||||||
* return response;
|
* return response;
|
||||||
*
|
*
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
else {
|
else {
|
||||||
@ -880,7 +886,7 @@ public class LightningView {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mIntentUtils.startActivityForUrl(mWebView, url);
|
return mIntentUtils.startActivityForUrl(mWebView, url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1043,8 +1049,11 @@ public class LightningView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class Title {
|
public class Title {
|
||||||
|
|
||||||
private Bitmap mFavicon;
|
private Bitmap mFavicon;
|
||||||
|
|
||||||
private String mTitle;
|
private String mTitle;
|
||||||
|
|
||||||
private Bitmap mDefaultIcon;
|
private Bitmap mDefaultIcon;
|
||||||
|
|
||||||
public Title(Context context) {
|
public Title(Context context) {
|
||||||
|
@ -10,6 +10,7 @@ import android.webkit.CookieSyncManager;
|
|||||||
public class MainActivity extends BrowserActivity {
|
public class MainActivity extends BrowserActivity {
|
||||||
|
|
||||||
SharedPreferences mPreferences;
|
SharedPreferences mPreferences;
|
||||||
|
|
||||||
CookieManager mCookieManager;
|
CookieManager mCookieManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -72,7 +73,4 @@ public class MainActivity extends BrowserActivity {
|
|||||||
closeDrawers();
|
closeDrawers();
|
||||||
moveTaskToBack(true);
|
moveTaskToBack(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,38 +4,70 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
public class PreferenceConstants {
|
public class PreferenceConstants {
|
||||||
|
|
||||||
public static final String ADOBE_FLASH_SUPPORT = "enableflash";
|
public static final String ADOBE_FLASH_SUPPORT = "enableflash";
|
||||||
|
|
||||||
public static final String BLOCK_ADS = "AdBlock";
|
public static final String BLOCK_ADS = "AdBlock";
|
||||||
|
|
||||||
public static final String BLOCK_IMAGES = "blockimages";
|
public static final String BLOCK_IMAGES = "blockimages";
|
||||||
|
|
||||||
public static final String CLEAR_CACHE_EXIT = "cache";
|
public static final String CLEAR_CACHE_EXIT = "cache";
|
||||||
|
|
||||||
public static final String COOKIES = "cookies";
|
public static final String COOKIES = "cookies";
|
||||||
|
|
||||||
public static final String DOWNLOAD_DIRECTORY = "download";
|
public static final String DOWNLOAD_DIRECTORY = "download";
|
||||||
|
|
||||||
public static final String FULL_SCREEN = "fullscreen";
|
public static final String FULL_SCREEN = "fullscreen";
|
||||||
|
|
||||||
public static final String HIDE_STATUS_BAR = "hidestatus";
|
public static final String HIDE_STATUS_BAR = "hidestatus";
|
||||||
|
|
||||||
public static final String HOMEPAGE = "home";
|
public static final String HOMEPAGE = "home";
|
||||||
|
|
||||||
public static final String INCOGNITO_COOKIES = "incognitocookies";
|
public static final String INCOGNITO_COOKIES = "incognitocookies";
|
||||||
|
|
||||||
public static final String JAVASCRIPT = "java";
|
public static final String JAVASCRIPT = "java";
|
||||||
|
|
||||||
public static final String LOCATION = "location";
|
public static final String LOCATION = "location";
|
||||||
|
|
||||||
public static final String OVERVIEW_MODE = "overviewmode";
|
public static final String OVERVIEW_MODE = "overviewmode";
|
||||||
|
|
||||||
public static final String POPUPS = "newwindows";
|
public static final String POPUPS = "newwindows";
|
||||||
|
|
||||||
public static final String PREFERENCES = "settings";
|
public static final String PREFERENCES = "settings";
|
||||||
|
|
||||||
public static final String RESTORE_LOST_TABS = "restoreclosed";
|
public static final String RESTORE_LOST_TABS = "restoreclosed";
|
||||||
|
|
||||||
public static final String SAVE_PASSWORDS = "passwords";
|
public static final String SAVE_PASSWORDS = "passwords";
|
||||||
|
|
||||||
public static final String SEARCH = "search";
|
public static final String SEARCH = "search";
|
||||||
|
|
||||||
public static final String SEARCH_URL = "searchurl";
|
public static final String SEARCH_URL = "searchurl";
|
||||||
|
|
||||||
public static final String SYSTEM_BROWSER_PRESENT = "SystemBrowser";
|
public static final String SYSTEM_BROWSER_PRESENT = "SystemBrowser";
|
||||||
|
|
||||||
public static final String TEXT_REFLOW = "textreflow";
|
public static final String TEXT_REFLOW = "textreflow";
|
||||||
|
|
||||||
public static final String TEXT_SIZE = "textsize";
|
public static final String TEXT_SIZE = "textsize";
|
||||||
|
|
||||||
public static final String URL_MEMORY = "memory";
|
public static final String URL_MEMORY = "memory";
|
||||||
|
|
||||||
public static final String USE_WIDE_VIEWPORT = "wideviewport";
|
public static final String USE_WIDE_VIEWPORT = "wideviewport";
|
||||||
|
|
||||||
public static final String USER_AGENT = "agentchoose";
|
public static final String USER_AGENT = "agentchoose";
|
||||||
|
|
||||||
public static final String USER_AGENT_STRING = "userAgentString";
|
public static final String USER_AGENT_STRING = "userAgentString";
|
||||||
|
|
||||||
public static final String GOOGLE_SEARCH_SUGGESTIONS = "GoogleSearchSuggestions";
|
public static final String GOOGLE_SEARCH_SUGGESTIONS = "GoogleSearchSuggestions";
|
||||||
|
|
||||||
public static final String CLEAR_HISTORY_EXIT = "clearHistoryExit";
|
public static final String CLEAR_HISTORY_EXIT = "clearHistoryExit";
|
||||||
|
|
||||||
public static final String CLEAR_COOKIES_EXIT = "clearCookiesExit";
|
public static final String CLEAR_COOKIES_EXIT = "clearCookiesExit";
|
||||||
|
|
||||||
public static final String USE_PROXY = "useProxy";
|
public static final String USE_PROXY = "useProxy";
|
||||||
|
|
||||||
public static final String USE_PROXY_HOST = "useProxyHost";
|
public static final String USE_PROXY_HOST = "useProxyHost";
|
||||||
|
|
||||||
public static final String USE_PROXY_PORT = "useProxyPort";
|
public static final String USE_PROXY_PORT = "useProxyPort";
|
||||||
|
|
||||||
public static final String INITIAL_CHECK_FOR_TOR = "checkForTor";
|
public static final String INITIAL_CHECK_FOR_TOR = "checkForTor";
|
||||||
}
|
}
|
||||||
|
@ -8,84 +8,92 @@ import java.util.LinkedList;
|
|||||||
|
|
||||||
public class ReplacingInputStream extends FilterInputStream {
|
public class ReplacingInputStream extends FilterInputStream {
|
||||||
|
|
||||||
LinkedList<Integer> inQueue = new LinkedList<Integer>();
|
LinkedList<Integer> inQueue = new LinkedList<Integer>();
|
||||||
LinkedList<Integer> outQueue = new LinkedList<Integer>();
|
|
||||||
final byte[] search, replacement;
|
|
||||||
|
|
||||||
protected ReplacingInputStream(InputStream in, byte[] search,
|
LinkedList<Integer> outQueue = new LinkedList<Integer>();
|
||||||
byte[] replacement) {
|
|
||||||
super(in);
|
|
||||||
this.search = search;
|
|
||||||
this.replacement = replacement;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isMatchFound() {
|
final byte[] search, replacement;
|
||||||
Iterator<Integer> inIter = inQueue.iterator();
|
|
||||||
for (int i = 0; i < search.length; i++)
|
|
||||||
if (!inIter.hasNext() || search[i] != inIter.next())
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readAhead() throws IOException {
|
protected ReplacingInputStream(InputStream in, byte[] search,
|
||||||
// Work up some look-ahead.
|
byte[] replacement) {
|
||||||
while (inQueue.size() < search.length) {
|
super(in);
|
||||||
int next = super.read();
|
this.search = search;
|
||||||
inQueue.offer(next);
|
this.replacement = replacement;
|
||||||
if (next == -1)
|
}
|
||||||
break;
|
|
||||||
}
|
private boolean isMatchFound() {
|
||||||
}
|
Iterator<Integer> inIter = inQueue.iterator();
|
||||||
|
for (int i = 0; i < search.length; i++) {
|
||||||
|
if (!inIter.hasNext() || search[i] != inIter.next()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readAhead() throws IOException {
|
||||||
|
// Work up some look-ahead.
|
||||||
|
while (inQueue.size() < search.length) {
|
||||||
|
int next = super.read();
|
||||||
|
inQueue.offer(next);
|
||||||
|
if (next == -1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read() throws IOException {
|
public int read() throws IOException {
|
||||||
|
|
||||||
// Next byte already determined.
|
// Next byte already determined.
|
||||||
if (outQueue.isEmpty()) {
|
if (outQueue.isEmpty()) {
|
||||||
|
|
||||||
readAhead();
|
readAhead();
|
||||||
|
|
||||||
if (isMatchFound()) {
|
if (isMatchFound()) {
|
||||||
for (int i = 0; i < search.length; i++)
|
for (int i = 0; i < search.length; i++) {
|
||||||
inQueue.remove();
|
inQueue.remove();
|
||||||
|
}
|
||||||
|
|
||||||
for (byte b : replacement)
|
for (byte b : replacement) {
|
||||||
outQueue.offer((int) b);
|
outQueue.offer((int) b);
|
||||||
} else
|
}
|
||||||
outQueue.add(inQueue.remove());
|
} else {
|
||||||
}
|
outQueue.add(inQueue.remove());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return outQueue.remove();
|
return outQueue.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns false. REFilterInputStream does not support mark() and
|
* Returns false. REFilterInputStream does not support mark() and reset() methods.
|
||||||
* reset() methods.
|
*/
|
||||||
*/
|
public boolean markSupported() {
|
||||||
public boolean markSupported() {
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/** Reads from the stream into the provided array.
|
/**
|
||||||
* @throws IOException */
|
* Reads from the stream into the provided array.
|
||||||
public int read(byte[] b, int off, int len) throws IOException {
|
*/
|
||||||
int i;
|
public int read(byte[] b, int off, int len) throws IOException {
|
||||||
int ok = 0;
|
int i;
|
||||||
while (len-- > 0) {
|
int ok = 0;
|
||||||
i = read();
|
while (len-- > 0) {
|
||||||
if (i == -1) return (ok == 0) ? -1 : ok;
|
i = read();
|
||||||
b[off++] = (byte) i;
|
if (i == -1) {
|
||||||
ok++;
|
return (ok == 0) ? -1 : ok;
|
||||||
}
|
}
|
||||||
return ok;
|
b[off++] = (byte) i;
|
||||||
}
|
ok++;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(byte[] buffer) throws IOException {
|
public int read(byte[] buffer) throws IOException {
|
||||||
|
|
||||||
return read(buffer, 0, buffer.length);
|
return read(buffer, 0, buffer.length);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -1,19 +1,5 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
|
||||||
import org.xmlpull.v1.XmlPullParserFactory;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
@ -24,23 +10,41 @@ import android.os.AsyncTask;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.*;
|
||||||
import android.widget.Filter;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import android.widget.Filterable;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
import android.widget.ImageView;
|
import org.xmlpull.v1.XmlPullParserFactory;
|
||||||
import android.widget.TextView;
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class SearchAdapter extends BaseAdapter implements Filterable {
|
public class SearchAdapter extends BaseAdapter implements Filterable {
|
||||||
|
|
||||||
private List<HistoryItem> mHistory;
|
private List<HistoryItem> mHistory;
|
||||||
|
|
||||||
private List<HistoryItem> mBookmarks;
|
private List<HistoryItem> mBookmarks;
|
||||||
|
|
||||||
private List<HistoryItem> mSuggestions;
|
private List<HistoryItem> mSuggestions;
|
||||||
|
|
||||||
private List<HistoryItem> mFilteredList;
|
private List<HistoryItem> mFilteredList;
|
||||||
|
|
||||||
private List<HistoryItem> mAllBookmarks;
|
private List<HistoryItem> mAllBookmarks;
|
||||||
|
|
||||||
private DatabaseHandler mDatabaseHandler;
|
private DatabaseHandler mDatabaseHandler;
|
||||||
|
|
||||||
private SharedPreferences mPreferences;
|
private SharedPreferences mPreferences;
|
||||||
|
|
||||||
private boolean mUseGoogle = true;
|
private boolean mUseGoogle = true;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
private boolean mIncognito = false;
|
private boolean mIncognito = false;
|
||||||
|
|
||||||
public SearchAdapter(Context context, boolean incognito) {
|
public SearchAdapter(Context context, boolean incognito) {
|
||||||
@ -114,33 +118,33 @@ public class SearchAdapter extends BaseAdapter implements Filterable {
|
|||||||
|
|
||||||
int imageId = R.drawable.ic_bookmark;
|
int imageId = R.drawable.ic_bookmark;
|
||||||
switch (web.getImageId()) {
|
switch (web.getImageId()) {
|
||||||
case R.drawable.ic_bookmark: {
|
case R.drawable.ic_bookmark: {
|
||||||
if (!mIncognito) {
|
if (!mIncognito) {
|
||||||
imageId = R.drawable.ic_bookmark;
|
imageId = R.drawable.ic_bookmark;
|
||||||
} else {
|
} else {
|
||||||
holder.mTitle.setTextColor(Color.WHITE);
|
holder.mTitle.setTextColor(Color.WHITE);
|
||||||
imageId = R.drawable.ic_bookmark_dark;
|
imageId = R.drawable.ic_bookmark_dark;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
case R.drawable.ic_search: {
|
||||||
}
|
if (!mIncognito) {
|
||||||
case R.drawable.ic_search: {
|
imageId = R.drawable.ic_search;
|
||||||
if (!mIncognito) {
|
} else {
|
||||||
imageId = R.drawable.ic_search;
|
holder.mTitle.setTextColor(Color.WHITE);
|
||||||
} else {
|
imageId = R.drawable.ic_search_dark;
|
||||||
holder.mTitle.setTextColor(Color.WHITE);
|
}
|
||||||
imageId = R.drawable.ic_search_dark;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
case R.drawable.ic_history: {
|
||||||
}
|
if (!mIncognito) {
|
||||||
case R.drawable.ic_history: {
|
imageId = R.drawable.ic_history;
|
||||||
if (!mIncognito) {
|
} else {
|
||||||
imageId = R.drawable.ic_history;
|
holder.mTitle.setTextColor(Color.WHITE);
|
||||||
} else {
|
imageId = R.drawable.ic_history_dark;
|
||||||
holder.mTitle.setTextColor(Color.WHITE);
|
}
|
||||||
imageId = R.drawable.ic_history_dark;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.mImage.setImageDrawable(mContext.getResources().getDrawable(
|
holder.mImage.setImageDrawable(mContext.getResources().getDrawable(
|
||||||
@ -235,8 +239,11 @@ public class SearchAdapter extends BaseAdapter implements Filterable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class SuggestionHolder {
|
private class SuggestionHolder {
|
||||||
|
|
||||||
ImageView mImage;
|
ImageView mImage;
|
||||||
|
|
||||||
TextView mTitle;
|
TextView mTitle;
|
||||||
|
|
||||||
TextView mUrl;
|
TextView mUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,5 +396,4 @@ public class SearchAdapter extends BaseAdapter implements Filterable {
|
|||||||
|
|
||||||
return filteredList;
|
return filteredList;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import info.guardianproject.onionkit.ui.OrbotHelper;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@ -20,36 +16,47 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.CheckBox;
|
import android.view.WindowManager;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.*;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
import android.widget.EditText;
|
import info.guardianproject.onionkit.ui.OrbotHelper;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.RelativeLayout;
|
|
||||||
import android.widget.Switch;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
public class SettingsActivity extends Activity {
|
public class SettingsActivity extends Activity {
|
||||||
|
|
||||||
private static int API = android.os.Build.VERSION.SDK_INT;
|
private static int API = android.os.Build.VERSION.SDK_INT;
|
||||||
|
|
||||||
private static SharedPreferences.Editor mEditPrefs;
|
private static SharedPreferences.Editor mEditPrefs;
|
||||||
|
|
||||||
private static int mAgentChoice;
|
private static int mAgentChoice;
|
||||||
|
|
||||||
private static String mHomepage;
|
private static String mHomepage;
|
||||||
|
|
||||||
private static TextView mAgentTextView;
|
private static TextView mAgentTextView;
|
||||||
|
|
||||||
private static TextView mDownloadTextView;
|
private static TextView mDownloadTextView;
|
||||||
|
|
||||||
private static int mEasterEggCounter = 0;
|
private static int mEasterEggCounter = 0;
|
||||||
|
|
||||||
private static String mSearchUrl;
|
private static String mSearchUrl;
|
||||||
|
|
||||||
private static String mDownloadLocation;
|
private static String mDownloadLocation;
|
||||||
|
|
||||||
private static TextView mHomepageText;
|
private static TextView mHomepageText;
|
||||||
|
|
||||||
private static SharedPreferences mPreferences;
|
private static SharedPreferences mPreferences;
|
||||||
|
|
||||||
private static TextView mSearchText;
|
private static TextView mSearchText;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
private Activity mActivity;
|
private Activity mActivity;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -90,38 +97,38 @@ public class SettingsActivity extends Activity {
|
|||||||
mSearchText = (TextView) findViewById(R.id.searchText);
|
mSearchText = (TextView) findViewById(R.id.searchText);
|
||||||
|
|
||||||
switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) {
|
switch (mPreferences.getInt(PreferenceConstants.SEARCH, 1)) {
|
||||||
case 0:
|
case 0:
|
||||||
mSearchText.setText(getResources().getString(R.string.custom_url));
|
mSearchText.setText(getResources().getString(R.string.custom_url));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
mSearchText.setText("Google");
|
mSearchText.setText("Google");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mSearchText.setText("Android Search");
|
mSearchText.setText("Android Search");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mSearchText.setText("Bing");
|
mSearchText.setText("Bing");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mSearchText.setText("Yahoo");
|
mSearchText.setText("Yahoo");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
mSearchText.setText("StartPage");
|
mSearchText.setText("StartPage");
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
mSearchText.setText("StartPage (Mobile)");
|
mSearchText.setText("StartPage (Mobile)");
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
mSearchText.setText("DuckDuckGo");
|
mSearchText.setText("DuckDuckGo");
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
mSearchText.setText("DuckDuckGo Lite");
|
mSearchText.setText("DuckDuckGo Lite");
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
mSearchText.setText("Baidu");
|
mSearchText.setText("Baidu");
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
mSearchText.setText("Yandex");
|
mSearchText.setText("Yandex");
|
||||||
}
|
}
|
||||||
|
|
||||||
mAgentTextView = (TextView) findViewById(R.id.agentText);
|
mAgentTextView = (TextView) findViewById(R.id.agentText);
|
||||||
@ -175,21 +182,21 @@ public class SettingsActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (mAgentChoice) {
|
switch (mAgentChoice) {
|
||||||
case 1:
|
case 1:
|
||||||
mAgentTextView.setText(getResources().getString(
|
mAgentTextView.setText(getResources().getString(
|
||||||
R.string.agent_default));
|
R.string.agent_default));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mAgentTextView.setText(getResources().getString(
|
mAgentTextView.setText(getResources().getString(
|
||||||
R.string.agent_desktop));
|
R.string.agent_desktop));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mAgentTextView.setText(getResources().getString(
|
mAgentTextView.setText(getResources().getString(
|
||||||
R.string.agent_mobile));
|
R.string.agent_mobile));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mAgentTextView.setText(getResources().getString(
|
mAgentTextView.setText(getResources().getString(
|
||||||
R.string.agent_custom));
|
R.string.agent_custom));
|
||||||
}
|
}
|
||||||
RelativeLayout r1, r2, r3, r4, r5, licenses;
|
RelativeLayout r1, r2, r3, r4, r5, licenses;
|
||||||
r1 = (RelativeLayout) findViewById(R.id.setR1);
|
r1 = (RelativeLayout) findViewById(R.id.setR1);
|
||||||
@ -268,7 +275,7 @@ public class SettingsActivity extends Activity {
|
|||||||
"Google", "Android Search", "Bing", "Yahoo",
|
"Google", "Android Search", "Bing", "Yahoo",
|
||||||
"StartPage", "StartPage (Mobile)",
|
"StartPage", "StartPage (Mobile)",
|
||||||
"DuckDuckGo (Privacy)", "DuckDuckGo Lite (Privacy)",
|
"DuckDuckGo (Privacy)", "DuckDuckGo Lite (Privacy)",
|
||||||
"Baidu (Chinese)", "Yandex (Russian)" };
|
"Baidu (Chinese)", "Yandex (Russian)"};
|
||||||
|
|
||||||
int n = mPreferences.getInt(PreferenceConstants.SEARCH, 1);
|
int n = mPreferences.getInt(PreferenceConstants.SEARCH, 1);
|
||||||
|
|
||||||
@ -282,38 +289,38 @@ public class SettingsActivity extends Activity {
|
|||||||
which);
|
which);
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
switch (which) {
|
switch (which) {
|
||||||
case 0:
|
case 0:
|
||||||
searchUrlPicker();
|
searchUrlPicker();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
mSearchText.setText("Google");
|
mSearchText.setText("Google");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mSearchText.setText("Android Search");
|
mSearchText.setText("Android Search");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mSearchText.setText("Bing");
|
mSearchText.setText("Bing");
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mSearchText.setText("Yahoo");
|
mSearchText.setText("Yahoo");
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
mSearchText.setText("StartPage");
|
mSearchText.setText("StartPage");
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
mSearchText.setText("StartPage (Mobile)");
|
mSearchText.setText("StartPage (Mobile)");
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
mSearchText.setText("DuckDuckGo");
|
mSearchText.setText("DuckDuckGo");
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
mSearchText.setText("DuckDuckGo Lite");
|
mSearchText.setText("DuckDuckGo Lite");
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
mSearchText.setText("Baidu");
|
mSearchText.setText("Baidu");
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
mSearchText.setText("Yandex");
|
mSearchText.setText("Yandex");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -345,7 +352,7 @@ public class SettingsActivity extends Activity {
|
|||||||
getSearchUrl.setText(mSearchUrl);
|
getSearchUrl.setText(mSearchUrl);
|
||||||
urlPicker.setView(getSearchUrl);
|
urlPicker.setView(getSearchUrl);
|
||||||
urlPicker.setPositiveButton(getResources()
|
urlPicker.setPositiveButton(getResources()
|
||||||
.getString(R.string.action_ok),
|
.getString(R.string.action_ok),
|
||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -483,8 +490,9 @@ public class SettingsActivity extends Activity {
|
|||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
ApplicationInfo ai = pm.getApplicationInfo(
|
ApplicationInfo ai = pm.getApplicationInfo(
|
||||||
"com.adobe.flashplayer", 0);
|
"com.adobe.flashplayer", 0);
|
||||||
if (ai != null)
|
if (ai != null) {
|
||||||
flashInstalled = true;
|
flashInstalled = true;
|
||||||
|
}
|
||||||
} catch (NameNotFoundException e) {
|
} catch (NameNotFoundException e) {
|
||||||
flashInstalled = false;
|
flashInstalled = false;
|
||||||
}
|
}
|
||||||
@ -570,14 +578,14 @@ public class SettingsActivity extends Activity {
|
|||||||
}
|
}
|
||||||
}).setOnCancelListener(new OnCancelListener() {
|
}).setOnCancelListener(new OnCancelListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCancel(DialogInterface dialog) {
|
public void onCancel(DialogInterface dialog) {
|
||||||
mEditPrefs.putInt(
|
mEditPrefs.putInt(
|
||||||
PreferenceConstants.ADOBE_FLASH_SUPPORT, 0);
|
PreferenceConstants.ADOBE_FLASH_SUPPORT, 0);
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
AlertDialog alert = builder.create();
|
AlertDialog alert = builder.create();
|
||||||
alert.show();
|
alert.show();
|
||||||
}
|
}
|
||||||
@ -611,8 +619,9 @@ public class SettingsActivity extends Activity {
|
|||||||
PackageManager pm = getPackageManager();
|
PackageManager pm = getPackageManager();
|
||||||
ApplicationInfo ai = pm.getApplicationInfo(
|
ApplicationInfo ai = pm.getApplicationInfo(
|
||||||
"com.adobe.flashplayer", 0);
|
"com.adobe.flashplayer", 0);
|
||||||
if (ai != null)
|
if (ai != null) {
|
||||||
flashInstalled = true;
|
flashInstalled = true;
|
||||||
|
}
|
||||||
} catch (NameNotFoundException e) {
|
} catch (NameNotFoundException e) {
|
||||||
flashInstalled = false;
|
flashInstalled = false;
|
||||||
}
|
}
|
||||||
@ -674,23 +683,23 @@ public class SettingsActivity extends Activity {
|
|||||||
which + 1);
|
which + 1);
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
switch (which + 1) {
|
switch (which + 1) {
|
||||||
case 1:
|
case 1:
|
||||||
mAgentTextView.setText(getResources()
|
mAgentTextView.setText(getResources()
|
||||||
.getString(R.string.agent_default));
|
.getString(R.string.agent_default));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mAgentTextView.setText(getResources()
|
mAgentTextView.setText(getResources()
|
||||||
.getString(R.string.agent_desktop));
|
.getString(R.string.agent_desktop));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mAgentTextView.setText(getResources()
|
mAgentTextView.setText(getResources()
|
||||||
.getString(R.string.agent_mobile));
|
.getString(R.string.agent_mobile));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mAgentTextView.setText(getResources()
|
mAgentTextView.setText(getResources()
|
||||||
.getString(R.string.agent_custom));
|
.getString(R.string.agent_custom));
|
||||||
agentPicker();
|
agentPicker();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -774,21 +783,21 @@ public class SettingsActivity extends Activity {
|
|||||||
int which) {
|
int which) {
|
||||||
|
|
||||||
switch (which + 1) {
|
switch (which + 1) {
|
||||||
case 1:
|
case 1:
|
||||||
mEditPrefs
|
mEditPrefs
|
||||||
.putString(
|
.putString(
|
||||||
PreferenceConstants.DOWNLOAD_DIRECTORY,
|
PreferenceConstants.DOWNLOAD_DIRECTORY,
|
||||||
Environment.DIRECTORY_DOWNLOADS);
|
Environment.DIRECTORY_DOWNLOADS);
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
mDownloadTextView
|
mDownloadTextView
|
||||||
.setText(Constants.EXTERNAL_STORAGE
|
.setText(Constants.EXTERNAL_STORAGE
|
||||||
+ "/"
|
+ "/"
|
||||||
+ Environment.DIRECTORY_DOWNLOADS);
|
+ Environment.DIRECTORY_DOWNLOADS);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
downPicker();
|
downPicker();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -921,37 +930,37 @@ public class SettingsActivity extends Activity {
|
|||||||
int which) {
|
int which) {
|
||||||
|
|
||||||
switch (which + 1) {
|
switch (which + 1) {
|
||||||
case 1:
|
case 1:
|
||||||
mEditPrefs.putString(
|
mEditPrefs.putString(
|
||||||
PreferenceConstants.HOMEPAGE,
|
PreferenceConstants.HOMEPAGE,
|
||||||
"about:home");
|
"about:home");
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
mHomepageText
|
mHomepageText
|
||||||
.setText(getResources().getString(
|
.setText(getResources().getString(
|
||||||
R.string.action_homepage));
|
R.string.action_homepage));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mEditPrefs.putString(
|
mEditPrefs.putString(
|
||||||
PreferenceConstants.HOMEPAGE,
|
PreferenceConstants.HOMEPAGE,
|
||||||
"about:blank");
|
"about:blank");
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
mHomepageText.setText(getResources()
|
mHomepageText.setText(getResources()
|
||||||
.getString(R.string.action_blank));
|
.getString(R.string.action_blank));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mEditPrefs.putString(
|
mEditPrefs.putString(
|
||||||
PreferenceConstants.HOMEPAGE,
|
PreferenceConstants.HOMEPAGE,
|
||||||
"about:bookmarks");
|
"about:bookmarks");
|
||||||
mEditPrefs.commit();
|
mEditPrefs.commit();
|
||||||
mHomepageText.setText(getResources()
|
mHomepageText.setText(getResources()
|
||||||
.getString(
|
.getString(
|
||||||
R.string.action_bookmarks));
|
R.string.action_bookmarks));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
homePicker();
|
homePicker();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -4,14 +4,12 @@
|
|||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
public class SettingsController {
|
public class SettingsController {
|
||||||
|
|
||||||
static boolean clearHistory = false;
|
static boolean clearHistory = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The purpose of this class is so that
|
* The purpose of this class is so that I can clear the dropdown history in the main activities if the user selects
|
||||||
* I can clear the dropdown history in the main
|
* to clear the history from the disk in advanced settings
|
||||||
* activities if the user selects to clear the
|
|
||||||
* history from the disk in advanced settings
|
|
||||||
* @param choice
|
|
||||||
*/
|
*/
|
||||||
static void setClearHistory(boolean choice) {
|
static void setClearHistory(boolean choice) {
|
||||||
clearHistory = choice;
|
clearHistory = choice;
|
||||||
@ -19,7 +17,6 @@ public class SettingsController {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* return the choice
|
* return the choice
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
static boolean getClearHistory() {
|
static boolean getClearHistory() {
|
||||||
if (clearHistory) {
|
if (clearHistory) {
|
||||||
|
@ -40,7 +40,7 @@ public class SpaceTokenizer implements Tokenizer {
|
|||||||
@Override
|
@Override
|
||||||
public CharSequence terminateToken(CharSequence text) {
|
public CharSequence terminateToken(CharSequence text) {
|
||||||
//int i = text.length();
|
//int i = text.length();
|
||||||
if(text.charAt(text.length()-1) != ' '){
|
if (text.charAt(text.length() - 1) != ' ') {
|
||||||
text = text + " ";
|
text = text + " ";
|
||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
|
@ -3,18 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -24,19 +12,26 @@ import android.util.Log;
|
|||||||
import android.webkit.URLUtil;
|
import android.webkit.URLUtil;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
public static void downloadFile(final Activity activity, final String url, final String userAgent, final String contentDisposition, final boolean privateBrowsing){
|
public static void downloadFile(final Activity activity, final String url, final String userAgent,
|
||||||
|
final String contentDisposition, final boolean privateBrowsing) {
|
||||||
String fileName = URLUtil.guessFileName(url, null,
|
String fileName = URLUtil.guessFileName(url, null,
|
||||||
null);
|
null);
|
||||||
DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null, privateBrowsing);
|
DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null, privateBrowsing);
|
||||||
Log.i(Constants.TAG, "Downloading" + fileName);
|
Log.i(Constants.TAG, "Downloading" + fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized void addBookmark(Context context, String title, String url) {
|
public static synchronized void addBookmark(Context context, String title, String url) {
|
||||||
File book = new File(context.getFilesDir(), "bookmarks");
|
File book = new File(context.getFilesDir(), "bookmarks");
|
||||||
File bookUrl = new File(context.getFilesDir(), "bookurl");
|
File bookUrl = new File(context.getFilesDir(), "bookurl");
|
||||||
if((title.equals("Bookmarks")||title.equals("History"))&& url.startsWith("file://")){
|
if ((title.equals("Bookmarks") || title.equals("History")) && url.startsWith("file://")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -71,48 +66,46 @@ public class Utils {
|
|||||||
} catch (NullPointerException ignored) {
|
} catch (NullPointerException ignored) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Intent newEmailIntent(Context context, String address,
|
public static Intent newEmailIntent(Context context, String address,
|
||||||
String subject, String body, String cc) {
|
String subject, String body, String cc) {
|
||||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||||
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address });
|
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{address});
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, body);
|
intent.putExtra(Intent.EXTRA_TEXT, body);
|
||||||
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
|
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
|
||||||
intent.putExtra(Intent.EXTRA_CC, cc);
|
intent.putExtra(Intent.EXTRA_CC, cc);
|
||||||
intent.setType("message/rfc822");
|
intent.setType("message/rfc822");
|
||||||
return intent;
|
return intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void createInformativeDialog(Context context, String title,
|
public static void createInformativeDialog(Context context, String title,
|
||||||
String message) {
|
String message) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
builder.setTitle(title);
|
builder.setTitle(title);
|
||||||
builder.setMessage(message).setCancelable(true)
|
builder.setMessage(message).setCancelable(true)
|
||||||
.setPositiveButton(context.getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() {
|
.setPositiveButton(context.getResources().getString(R.string.action_ok),
|
||||||
@Override
|
new DialogInterface.OnClickListener() {
|
||||||
public void onClick(DialogInterface dialog, int id) {
|
@Override
|
||||||
}
|
public void onClick(DialogInterface dialog, int id) {
|
||||||
});
|
}
|
||||||
|
});
|
||||||
AlertDialog alert = builder.create();
|
AlertDialog alert = builder.create();
|
||||||
alert.show();
|
alert.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showToast(Context context, String message) {
|
public static void showToast(Context context, String message) {
|
||||||
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of pixels corresponding to the passed density pixels
|
* Returns the number of pixels corresponding to the passed density pixels
|
||||||
* @param context
|
|
||||||
* @param densityPixels
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public static int convertToDensityPixels(Context context, int densityPixels) {
|
public static int convertToDensityPixels(Context context, int densityPixels) {
|
||||||
float scale = context.getResources().getDisplayMetrics().density;
|
float scale = context.getResources().getDisplayMetrics().density;
|
||||||
int pixels = (int) (densityPixels * scale + 0.5f);
|
int pixels = (int) (densityPixels * scale + 0.5f);
|
||||||
return pixels;
|
return pixels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getDomainName(String url) {
|
public static String getDomainName(String url) {
|
||||||
URI uri;
|
URI uri;
|
||||||
try {
|
try {
|
||||||
@ -126,7 +119,7 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
return domain.startsWith("www.") ? domain.substring(4) : domain;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<HistoryItem> getBookmarks(Context context) {
|
public static List<HistoryItem> getBookmarks(Context context) {
|
||||||
List<HistoryItem> bookmarks = new ArrayList<HistoryItem>();
|
List<HistoryItem> bookmarks = new ArrayList<HistoryItem>();
|
||||||
File bookUrl = new File(context.getFilesDir(),
|
File bookUrl = new File(context.getFilesDir(),
|
||||||
@ -148,11 +141,11 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
return bookmarks;
|
return bookmarks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String[] getArray(String input) {
|
public static String[] getArray(String input) {
|
||||||
return input.split("\\|\\$\\|SEPARATOR\\|\\$\\|");
|
return input.split("\\|\\$\\|SEPARATOR\\|\\$\\|");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void trimCache(Context context) {
|
public static void trimCache(Context context) {
|
||||||
try {
|
try {
|
||||||
File dir = context.getCacheDir();
|
File dir = context.getCacheDir();
|
||||||
@ -164,7 +157,7 @@ public class Utils {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean deleteDir(File dir) {
|
public static boolean deleteDir(File dir) {
|
||||||
if (dir != null && dir.isDirectory()) {
|
if (dir != null && dir.isDirectory()) {
|
||||||
String[] children = dir.list();
|
String[] children = dir.list();
|
||||||
|
@ -3,167 +3,179 @@
|
|||||||
*/
|
*/
|
||||||
package acr.browser.lightning;
|
package acr.browser.lightning;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import static android.util.Patterns.GOOD_IRI_CHAR;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static android.util.Patterns.GOOD_IRI_CHAR;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
*
|
*
|
||||||
* Web Address Parser
|
* Web Address Parser
|
||||||
*
|
*
|
||||||
* This is called WebAddress, rather than URL or URI, because it
|
* This is called WebAddress, rather than URL or URI, because it attempts to parse the stuff that a user will actually
|
||||||
* attempts to parse the stuff that a user will actually type into a
|
* type into a browser address widget.
|
||||||
* browser address widget.
|
|
||||||
*
|
*
|
||||||
* Unlike java.net.uri, this parser will not choke on URIs missing
|
* Unlike java.net.uri, this parser will not choke on URIs missing schemes. It will only throw a ParseException if the
|
||||||
* schemes. It will only throw a ParseException if the input is
|
* input is really hosed.
|
||||||
* really hosed.
|
|
||||||
*
|
*
|
||||||
* If given an https scheme but no port, fills in port
|
* If given an https scheme but no port, fills in port
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class WebAddress {
|
public class WebAddress {
|
||||||
|
|
||||||
private String mScheme;
|
private String mScheme;
|
||||||
private String mHost;
|
|
||||||
private int mPort;
|
|
||||||
private String mPath;
|
|
||||||
private String mAuthInfo;
|
|
||||||
|
|
||||||
static final int MATCH_GROUP_SCHEME = 1;
|
private String mHost;
|
||||||
static final int MATCH_GROUP_AUTHORITY = 2;
|
|
||||||
static final int MATCH_GROUP_HOST = 3;
|
|
||||||
static final int MATCH_GROUP_PORT = 4;
|
|
||||||
static final int MATCH_GROUP_PATH = 5;
|
|
||||||
|
|
||||||
static Pattern sAddressPattern = Pattern.compile(
|
private int mPort;
|
||||||
/* scheme */ "(?:(http|https|file)\\:\\/\\/)?" +
|
|
||||||
|
private String mPath;
|
||||||
|
|
||||||
|
private String mAuthInfo;
|
||||||
|
|
||||||
|
static final int MATCH_GROUP_SCHEME = 1;
|
||||||
|
|
||||||
|
static final int MATCH_GROUP_AUTHORITY = 2;
|
||||||
|
|
||||||
|
static final int MATCH_GROUP_HOST = 3;
|
||||||
|
|
||||||
|
static final int MATCH_GROUP_PORT = 4;
|
||||||
|
|
||||||
|
static final int MATCH_GROUP_PATH = 5;
|
||||||
|
|
||||||
|
static Pattern sAddressPattern = Pattern.compile(
|
||||||
|
/* scheme */ "(?:(http|https|file)\\:\\/\\/)?" +
|
||||||
/* authority */ "(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" +
|
/* authority */ "(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" +
|
||||||
/* host */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" +
|
/* host */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" +
|
||||||
/* port */ "(?:\\:([0-9]*))?" +
|
/* port */ "(?:\\:([0-9]*))?" +
|
||||||
/* path */ "(\\/?[^#]*)?" +
|
/* path */ "(\\/?[^#]*)?" +
|
||||||
/* anchor */ ".*", Pattern.CASE_INSENSITIVE);
|
/* anchor */ ".*", Pattern.CASE_INSENSITIVE);
|
||||||
|
|
||||||
/** parses given uriString.
|
/**
|
||||||
* @throws Exception */
|
* parses given uriString.
|
||||||
public WebAddress(String address) throws Exception {
|
*/
|
||||||
if (address == null) {
|
public WebAddress(String address) throws Exception {
|
||||||
throw new NullPointerException();
|
if (address == null) {
|
||||||
}
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
|
||||||
// android.util.Log.d(LOGTAG, "WebAddress: " + address);
|
// android.util.Log.d(LOGTAG, "WebAddress: " + address);
|
||||||
|
|
||||||
mScheme = "";
|
mScheme = "";
|
||||||
mHost = "";
|
mHost = "";
|
||||||
mPort = -1;
|
mPort = -1;
|
||||||
mPath = "/";
|
mPath = "/";
|
||||||
mAuthInfo = "";
|
mAuthInfo = "";
|
||||||
|
|
||||||
Matcher m = sAddressPattern.matcher(address);
|
Matcher m = sAddressPattern.matcher(address);
|
||||||
String t;
|
String t;
|
||||||
if (m.matches()) {
|
if (m.matches()) {
|
||||||
t = m.group(MATCH_GROUP_SCHEME);
|
t = m.group(MATCH_GROUP_SCHEME);
|
||||||
if (t != null) mScheme = t.toLowerCase(Locale.ROOT);
|
if (t != null) {
|
||||||
t = m.group(MATCH_GROUP_AUTHORITY);
|
mScheme = t.toLowerCase(Locale.ROOT);
|
||||||
if (t != null) mAuthInfo = t;
|
}
|
||||||
t = m.group(MATCH_GROUP_HOST);
|
t = m.group(MATCH_GROUP_AUTHORITY);
|
||||||
if (t != null) mHost = t;
|
if (t != null) {
|
||||||
t = m.group(MATCH_GROUP_PORT);
|
mAuthInfo = t;
|
||||||
if (t != null && t.length() > 0) {
|
}
|
||||||
// The ':' character is not returned by the regex.
|
t = m.group(MATCH_GROUP_HOST);
|
||||||
try {
|
if (t != null) {
|
||||||
mPort = Integer.parseInt(t);
|
mHost = t;
|
||||||
} catch (NumberFormatException ex) {
|
}
|
||||||
throw new Exception();
|
t = m.group(MATCH_GROUP_PORT);
|
||||||
}
|
if (t != null && t.length() > 0) {
|
||||||
}
|
// The ':' character is not returned by the regex.
|
||||||
t = m.group(MATCH_GROUP_PATH);
|
try {
|
||||||
if (t != null && t.length() > 0) {
|
mPort = Integer.parseInt(t);
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t = m.group(MATCH_GROUP_PATH);
|
||||||
|
if (t != null && t.length() > 0) {
|
||||||
/* handle busted myspace frontpage redirect with
|
/* handle busted myspace frontpage redirect with
|
||||||
missing initial "/" */
|
missing initial "/" */
|
||||||
if (t.charAt(0) == '/') {
|
if (t.charAt(0) == '/') {
|
||||||
mPath = t;
|
mPath = t;
|
||||||
} else {
|
} else {
|
||||||
mPath = "/" + t;
|
mPath = "/" + t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// nothing found... outa here
|
// nothing found... outa here
|
||||||
throw new Exception();
|
throw new Exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get port from scheme or scheme from port, if necessary and
|
/* Get port from scheme or scheme from port, if necessary and
|
||||||
possible */
|
possible */
|
||||||
if (mPort == 443 && mScheme.equals("")) {
|
if (mPort == 443 && mScheme.equals("")) {
|
||||||
mScheme = "https";
|
mScheme = "https";
|
||||||
} else if (mPort == -1) {
|
} else if (mPort == -1) {
|
||||||
if (mScheme.equals("https"))
|
if (mScheme.equals("https")) {
|
||||||
mPort = 443;
|
mPort = 443;
|
||||||
else
|
} else {
|
||||||
mPort = 80; // default
|
mPort = 80; // default
|
||||||
}
|
}
|
||||||
if (mScheme.equals("")) mScheme = "http";
|
}
|
||||||
}
|
if (mScheme.equals("")) {
|
||||||
|
mScheme = "http";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
String port = "";
|
String port = "";
|
||||||
if ((mPort != 443 && mScheme.equals("https")) ||
|
if ((mPort != 443 && mScheme.equals("https")) ||
|
||||||
(mPort != 80 && mScheme.equals("http"))) {
|
(mPort != 80 && mScheme.equals("http"))) {
|
||||||
port = ":" + Integer.toString(mPort);
|
port = ":" + Integer.toString(mPort);
|
||||||
}
|
}
|
||||||
String authInfo = "";
|
String authInfo = "";
|
||||||
if (mAuthInfo.length() > 0) {
|
if (mAuthInfo.length() > 0) {
|
||||||
authInfo = mAuthInfo + "@";
|
authInfo = mAuthInfo + "@";
|
||||||
}
|
}
|
||||||
|
|
||||||
return mScheme + "://" + authInfo + mHost + port + mPath;
|
return mScheme + "://" + authInfo + mHost + port + mPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setScheme(String scheme) {
|
public void setScheme(String scheme) {
|
||||||
mScheme = scheme;
|
mScheme = scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getScheme() {
|
public String getScheme() {
|
||||||
return mScheme;
|
return mScheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHost(String host) {
|
public void setHost(String host) {
|
||||||
mHost = host;
|
mHost = host;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getHost() {
|
public String getHost() {
|
||||||
return mHost;
|
return mHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPort(int port) {
|
public void setPort(int port) {
|
||||||
mPort = port;
|
mPort = port;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPort() {
|
public int getPort() {
|
||||||
return mPort;
|
return mPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPath(String path) {
|
public void setPath(String path) {
|
||||||
mPath = path;
|
mPath = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPath() {
|
public String getPath() {
|
||||||
return mPath;
|
return mPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAuthInfo(String authInfo) {
|
public void setAuthInfo(String authInfo) {
|
||||||
mAuthInfo = authInfo;
|
mAuthInfo = authInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAuthInfo() {
|
public String getAuthInfo() {
|
||||||
return mAuthInfo;
|
return mAuthInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user