Browse Source

Merge branch 'master' into travis-ci

master
Miłosz Sieradzki 11 years ago
parent
commit
c03acc0f44
  1. 2
      res/layout/advanced_settings.xml
  2. 7
      res/values-de/strings.xml
  3. 25
      src/acr/browser/lightning/AdBlock.java
  4. 165
      src/acr/browser/lightning/AdvancedSettingsActivity.java
  5. 6
      src/acr/browser/lightning/BookmarkPageVariables.java
  6. 303
      src/acr/browser/lightning/BrowserActivity.java
  7. 1
      src/acr/browser/lightning/BrowserController.java
  8. 1
      src/acr/browser/lightning/ClickHandler.java
  9. 24
      src/acr/browser/lightning/Constants.java
  10. 33
      src/acr/browser/lightning/DatabaseHandler.java
  11. 18
      src/acr/browser/lightning/DownloadHandler.java
  12. 109
      src/acr/browser/lightning/FetchMimeUrlType.java
  13. 107
      src/acr/browser/lightning/FetchUrlMimeType.java
  14. 9
      src/acr/browser/lightning/HistoryItem.java
  15. 6
      src/acr/browser/lightning/HistoryPageVariables.java
  16. 1
      src/acr/browser/lightning/HomepageVariables.java
  17. 4
      src/acr/browser/lightning/IncognitoActivity.java
  18. 19
      src/acr/browser/lightning/IntentUtils.java
  19. 1
      src/acr/browser/lightning/LicenseActivity.java
  20. 13
      src/acr/browser/lightning/LightningDownloadListener.java
  21. 111
      src/acr/browser/lightning/LightningView.java
  22. 4
      src/acr/browser/lightning/MainActivity.java
  23. 32
      src/acr/browser/lightning/PreferenceConstants.java
  24. 34
      src/acr/browser/lightning/ReplacingInputStream.java
  25. 46
      src/acr/browser/lightning/SearchAdapter.java
  26. 95
      src/acr/browser/lightning/SettingsActivity.java
  27. 9
      src/acr/browser/lightning/SettingsController.java
  28. 2
      src/acr/browser/lightning/SpaceTokenizer.java
  29. 31
      src/acr/browser/lightning/Utils.java
  30. 82
      src/acr/browser/lightning/WebAddress.java

2
res/layout/advanced_settings.xml

@ -625,8 +625,6 @@ @@ -625,8 +625,6 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:paddingLeft="10dp"
android:paddingRight="30dp"
android:text="@string/google_suggestions"

7
res/values-de/strings.xml

@ -158,6 +158,13 @@ @@ -158,6 +158,13 @@
<string name="powered_by_google">Unterstützt durch Google</string>
<string name="title_adblock">Werbeblocker</string>
<string name="message_adblock">Der Werbeblocker ist nur in Lightning Browser+ verfügbar und kann im Google Play Store gekauft werden!</string>
<string name="enable_orbot">Orbot aktivieren</string>
<string name="use_tor_prompt">Orbot ist installiert. Soll Tor verwendet werden?</string>
<string name="install_orbot">Um Tor verwenden zu können, muss Orbot installiert sein!</string>
<string name="yes">Ja</string>
<string name="no">Nein</string>
<string name="clear_cookies_exit">Cookies beim Beenden löschen</string>
<string name="clear_history_exit">Verlauf beim Beenden löschen</string>
<string name="folder_default">Standard</string>
<string name="folder_custom">Andere</string>
</resources>

25
src/acr/browser/lightning/AdBlock.java

@ -1,28 +1,28 @@ @@ -1,28 +1,28 @@
package acr.browser.lightning;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetManager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.SortedMap;
import java.util.TreeMap;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetManager;
public class AdBlock {
private static TreeMap<String, Integer> mAdBlockMap = null;
private static SortedMap<String, Integer> mAdBlockMap =
new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
private SharedPreferences mPreferences;
private boolean mBlockAds = false;
private boolean mBlockAds;
public AdBlock(Context context) {
if (mAdBlockMap == null) {
mAdBlockMap = new TreeMap<String, Integer>(
String.CASE_INSENSITIVE_ORDER);
}
if (mAdBlockMap.isEmpty()) {
fillSearchTree(context);
}
@ -66,7 +66,7 @@ public class AdBlock { @@ -66,7 +66,7 @@ public class AdBlock {
if (!mBlockAds) {
return false;
}
String domain = "";
String domain;
try {
domain = getDomainName(url);
} catch (URISyntaxException e) {
@ -77,7 +77,7 @@ public class AdBlock { @@ -77,7 +77,7 @@ public class AdBlock {
}
private static String getDomainName(String url) throws URISyntaxException {
int index = url.indexOf("/", 8);
int index = url.indexOf('/', 8);
if (index != -1) {
url = url.substring(0, index);
}
@ -88,5 +88,4 @@ public class AdBlock { @@ -88,5 +88,4 @@ public class AdBlock {
}
return domain.startsWith("www.") ? domain.substring(4) : domain;
}
}

165
src/acr/browser/lightning/AdvancedSettingsActivity.java

@ -3,27 +3,22 @@ @@ -3,27 +3,22 @@
*/
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.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
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.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebIconDatabase;
import android.webkit.WebView;
import android.webkit.WebViewDatabase;
import android.view.WindowManager;
import android.webkit.*;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
@ -34,34 +29,44 @@ public class AdvancedSettingsActivity extends Activity { @@ -34,34 +29,44 @@ public class AdvancedSettingsActivity extends Activity {
// mPreferences variables
private static final int API = android.os.Build.VERSION.SDK_INT;
private static SharedPreferences mPreferences;
private static SharedPreferences.Editor mEditPrefs;
private static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11,
r12, r13, r14, r15, rIncognitoCookies, rClearCache,
rSearchSuggestions, rClearHistoryExit, rClearCookiesExit;
private static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10,
private SharedPreferences mPreferences;
private SharedPreferences.Editor mEditPrefs;
private CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10,
cb11, cbIncognitoCookies, cbSearchSuggestions, cbClearHistoryExit, cbClearCookiesExit;
private static Context mContext;
private Context mContext;
private boolean mSystemBrowser;
private Handler messageHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.advanced_settings);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
mPreferences = getSharedPreferences(PreferenceConstants.PREFERENCES, 0);
if (mPreferences.getBoolean(PreferenceConstants.HIDE_STATUS_BAR, false)) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
// TODO WARNING: SharedPreferences.edit() without a corresponding commit() or apply() call
mEditPrefs = mPreferences.edit();
mSystemBrowser = mPreferences.getBoolean(
PreferenceConstants.SYSTEM_BROWSER_PRESENT, false);
mContext = this;
initialize();
}
@Override
@ -70,7 +75,11 @@ public class AdvancedSettingsActivity extends Activity { @@ -70,7 +75,11 @@ public class AdvancedSettingsActivity extends Activity {
return true;
}
void initialize() {
private void initialize() {
RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11,
r12, r13, r14, r15, rIncognitoCookies, rClearCache,
rSearchSuggestions, rClearHistoryExit, rClearCookiesExit;
r1 = (RelativeLayout) findViewById(R.id.r1);
r2 = (RelativeLayout) findViewById(R.id.r2);
@ -194,7 +203,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -194,7 +203,7 @@ public class AdvancedSettingsActivity extends Activity {
messageHandler = new MessageHandler();
}
static class MessageHandler extends Handler {
private class MessageHandler extends Handler {
@Override
public void handleMessage(Message msg) {
@ -214,10 +223,9 @@ public class AdvancedSettingsActivity extends Activity { @@ -214,10 +223,9 @@ public class AdvancedSettingsActivity extends Activity {
}
super.handleMessage(msg);
}
}
static void cb1(CheckBox view) {
private void cb1(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -231,7 +239,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -231,7 +239,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb2(CheckBox view) {
private void cb2(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -245,7 +253,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -245,7 +253,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cbClearHistoryExit(CheckBox view) {
private void cbClearHistoryExit(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -258,7 +266,8 @@ public class AdvancedSettingsActivity extends Activity { @@ -258,7 +266,8 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cbClearCookiesExit(CheckBox view) {
private void cbClearCookiesExit(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -272,7 +281,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -272,7 +281,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb3(CheckBox view) {
private void cb3(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -286,7 +295,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -286,7 +295,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb4(CheckBox view) {
private void cb4(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -299,7 +308,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -299,7 +308,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb5(CheckBox view) {
private void cb5(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -313,7 +322,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -313,7 +322,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb6(CheckBox view) {
private void cb6(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -326,7 +335,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -326,7 +335,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb7(CheckBox view) {
private void cb7(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -339,7 +348,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -339,7 +348,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb8(CheckBox view) {
private void cb8(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -353,7 +362,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -353,7 +362,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb9(CheckBox view) {
private void cb9(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -367,7 +376,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -367,7 +376,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb10(CheckBox view) {
private void cb10(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -381,7 +390,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -381,7 +390,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cb11(CheckBox view) {
private void cb11(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -395,7 +404,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -395,7 +404,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cbIncognitoCookies(CheckBox view) {
private void cbIncognitoCookies(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
@ -409,8 +418,8 @@ public class AdvancedSettingsActivity extends Activity { @@ -409,8 +418,8 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void cbSearchSuggestions(CheckBox view){
view.setOnCheckedChangeListener(new OnCheckedChangeListener(){
private void cbSearchSuggestions(CheckBox view) {
view.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
@ -422,7 +431,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -422,7 +431,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r1(RelativeLayout view) {
private void r1(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -434,7 +443,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -434,7 +443,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r2(RelativeLayout view) {
private void r2(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -446,7 +455,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -446,7 +455,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void rClearHistoryExit(RelativeLayout view) {
private void rClearHistoryExit(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -458,7 +467,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -458,7 +467,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void rClearCookiesExit(RelativeLayout view) {
private void rClearCookiesExit(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -470,7 +479,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -470,7 +479,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r3(RelativeLayout view) {
private void r3(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -482,7 +491,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -482,7 +491,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r4(RelativeLayout view) {
private void r4(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -500,7 +509,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -500,7 +509,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r5(RelativeLayout view) {
private void r5(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -512,7 +521,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -512,7 +521,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r6(RelativeLayout view) {
private void r6(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -524,7 +533,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -524,7 +533,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r7(RelativeLayout view) {
private void r7(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -536,7 +545,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -536,7 +545,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r8(RelativeLayout view) {
private void r8(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -584,7 +593,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -584,7 +593,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r11(RelativeLayout view) {
private void r11(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -597,7 +606,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -597,7 +606,7 @@ public class AdvancedSettingsActivity extends Activity {
}
void r12(RelativeLayout view) {
private void r12(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -609,7 +618,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -609,7 +618,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r13(RelativeLayout view) {
private void r13(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -620,7 +629,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -620,7 +629,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r14(RelativeLayout view) {
private void r14(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -631,7 +640,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -631,7 +640,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void r15(RelativeLayout view) {
private void r15(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -678,7 +687,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -678,7 +687,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void rIncognitoCookies(RelativeLayout view) {
private void rIncognitoCookies(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -691,8 +700,8 @@ public class AdvancedSettingsActivity extends Activity { @@ -691,8 +700,8 @@ public class AdvancedSettingsActivity extends Activity {
}
void rSearchSuggestions(RelativeLayout view){
view.setOnClickListener(new OnClickListener(){
private void rSearchSuggestions(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
@ -702,7 +711,7 @@ public class AdvancedSettingsActivity extends Activity { @@ -702,7 +711,7 @@ public class AdvancedSettingsActivity extends Activity {
});
}
void rClearCache(RelativeLayout view) {
private void rClearCache(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -723,11 +732,10 @@ public class AdvancedSettingsActivity extends Activity { @@ -723,11 +732,10 @@ public class AdvancedSettingsActivity extends Activity {
getResources().getString(R.string.message_cache_cleared));
}
@SuppressWarnings("deprecation")
public void clearHistory() {
AdvancedSettingsActivity.this
.deleteDatabase(DatabaseHandler.DATABASE_NAME);
WebViewDatabase m = WebViewDatabase
.getInstance(AdvancedSettingsActivity.this);
deleteDatabase(DatabaseHandler.DATABASE_NAME);
WebViewDatabase m = WebViewDatabase.getInstance(this);
m.clearFormData();
m.clearHttpAuthUsernamePassword();
if (API < 18) {
@ -737,11 +745,11 @@ public class AdvancedSettingsActivity extends Activity { @@ -737,11 +745,11 @@ public class AdvancedSettingsActivity extends Activity {
if (mSystemBrowser) {
try {
Browser.clearHistory(getContentResolver());
} catch (NullPointerException ignored) {
} catch (Exception ignored) {
}
}
SettingsController.setClearHistory(true);
Utils.trimCache(AdvancedSettingsActivity.this);
Utils.trimCache(this);
messageHandler.sendEmptyMessage(1);
}
@ -752,21 +760,23 @@ public class AdvancedSettingsActivity extends Activity { @@ -752,21 +760,23 @@ public class AdvancedSettingsActivity extends Activity {
messageHandler.sendEmptyMessage(2);
}
void r9(RelativeLayout view) {
private void r9(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
importFromStockBrowser();
} catch (Exception e) {
// ignored exception
// TODO add logging
}
}
});
}
void r10(RelativeLayout view) {
private void r10(RelativeLayout view) {
view.setOnClickListener(new OnClickListener() {
@Override
@ -809,20 +819,18 @@ public class AdvancedSettingsActivity extends Activity { @@ -809,20 +819,18 @@ public class AdvancedSettingsActivity extends Activity {
public void importFromStockBrowser() {
if (mSystemBrowser) {
try {
String[] proj = new String[] { Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.URL };
String[] proj = new String[]{Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.URL};
// use 0 for history, 1 for bookmarks
String sel = Browser.BookmarkColumns.BOOKMARK + " = 1";
Cursor mCur;
mCur = getContentResolver().query(Browser.BOOKMARKS_URI, proj,
sel, null, null);
String title = "";
String url = "";
String title, url;
int number = 0;
if (mCur.moveToFirst() && mCur.getCount() > 0) {
while (mCur.isAfterLast() == false) {
while (!mCur.isAfterLast()) {
number++;
title = mCur.getString(mCur
.getColumnIndex(Browser.BookmarkColumns.TITLE));
@ -837,13 +845,10 @@ public class AdvancedSettingsActivity extends Activity { @@ -837,13 +845,10 @@ public class AdvancedSettingsActivity extends Activity {
}
Utils.showToast(mContext, number + " "
+ getResources().getString(R.string.message_import));
} catch (NullPointerException ignored) {
}
} else {
Utils.createInformativeDialog(mContext,
getResources().getString(R.string.title_error),
getResources().getString(R.string.dialog_import_error));
}
}
}

6
src/acr/browser/lightning/BookmarkPageVariables.java

@ -4,12 +4,18 @@ @@ -4,12 +4,18 @@
package acr.browser.lightning;
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>"
+ 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\">";
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 Part3 = "' /><p class=\"ellipses\">";
public static final String Part4 = "</p></div></div>";
public static final String End = "</div></body></html>";
}

303
src/acr/browser/lightning/BrowserActivity.java

@ -4,38 +4,10 @@ @@ -4,38 +4,10 @@
package acr.browser.lightning;
import info.guardianproject.onionkit.ui.OrbotHelper;
import info.guardianproject.onionkit.web.WebkitProxy;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.*;
import android.content.res.Configuration;
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
@ -64,96 +36,131 @@ import android.support.v4.widget.DrawerLayout; @@ -64,96 +36,131 @@ import android.support.v4.widget.DrawerLayout;
import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.*;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.ValueCallback;
import android.webkit.WebViewDatabase;
import android.webkit.*;
import android.webkit.WebChromeClient.CustomViewCallback;
import android.webkit.WebIconDatabase;
import android.webkit.WebView;
import android.webkit.WebView.HitTestResult;
import android.widget.AdapterView;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.VideoView;
import info.guardianproject.onionkit.ui.OrbotHelper;
import info.guardianproject.onionkit.web.WebkitProxy;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.*;
public class BrowserActivity extends Activity implements BrowserController {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private RelativeLayout mDrawer;
private LinearLayout mDrawerRight;
private ListView mDrawerListRight;
private RelativeLayout mNewTab;
private ActionBarDrawerToggle mDrawerToggle;
private List<LightningView> mWebViews = new ArrayList<LightningView>();
private List<Integer> mIdList = new ArrayList<Integer>();
private LightningView mCurrentView;
private int mIdGenerator;
private LightningViewAdapter mTitleAdapter;
private List<HistoryItem> mBookmarkList;
private BookmarkViewAdapter mBookmarkAdapter;
private AutoCompleteTextView mSearch;
private ClickHandler mClickHandler;
private ProgressBar mProgress;
private boolean mSystemBrowser = false;
private ValueCallback<Uri> mUploadMessage;
private View mCustomView;
private int mOriginalOrientation;
private int mActionBarSize;
private ActionBar mActionBar;
private boolean mFullScreen;
private FrameLayout mBrowserFrame;
private FullscreenHolder mFullscreenContainer;
private CustomViewCallback mCustomViewCallback;
private final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
private Bitmap mDefaultVideoPoster;
private View mVideoProgressView;
private DatabaseHandler mHistoryHandler;
private SQLiteDatabase mHistoryDatabase;
private SharedPreferences mPreferences;
private SharedPreferences.Editor mEditPrefs;
private Context mContext;
private Bitmap mWebpageBitmap;
private String mSearchText;
private Activity mActivity;
private CookieManager mCookieManager;
private final int API = android.os.Build.VERSION.SDK_INT;
private Drawable mDeleteIcon;
private Drawable mRefreshIcon;
private Drawable mCopyIcon;
private Drawable mIcon;
private int mActionBarSizeDp;
private int mNumberIconColor;
private String mHomepage;
private boolean mIsNewIntent = false;
private VideoView mVideoView;
private static SearchAdapter mSearchAdapter;
private boolean isIncognito = false;
@Override
@ -203,7 +210,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -203,7 +210,7 @@ public class BrowserActivity extends Activity implements BrowserController {
mActionBar = getActionBar();
final TypedArray styledAttributes = mContext.getTheme()
.obtainStyledAttributes(
new int[] { android.R.attr.actionBarSize });
new int[]{android.R.attr.actionBarSize});
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
if (pixelsToDp(mActionBarSize) < 48) {
mActionBarSize = getDp(48);
@ -518,8 +525,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -518,8 +525,9 @@ public class BrowserActivity extends Activity implements BrowserController {
public void initializeTor() {
OrbotHelper oh = new OrbotHelper(this);
if (!oh.isOrbotRunning())
if (!oh.isOrbotRunning()) {
oh.requestOrbotStart(this);
}
WebkitProxy wkp = new WebkitProxy();
try {
@ -720,15 +728,17 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -720,15 +728,17 @@ public class BrowserActivity extends Activity implements BrowserController {
return true;
case R.id.action_back:
if (mCurrentView != null) {
if (mCurrentView.canGoBack())
if (mCurrentView.canGoBack()) {
mCurrentView.goBack();
}
}
return true;
case R.id.action_forward:
if (mCurrentView != null) {
if (mCurrentView.canGoForward())
if (mCurrentView.canGoForward()) {
mCurrentView.goForward();
}
}
return true;
case R.id.action_new_tab:
newTab(null, true);
@ -786,8 +796,8 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -786,8 +796,8 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* refreshes the underlying list of the Bookmark adapter since the bookmark
* adapter doesn't always change when notifyDataChanged gets called.
* refreshes the underlying list of the Bookmark adapter since the bookmark adapter doesn't always change when
* notifyDataChanged gets called.
*/
private void notifyBookmarkDataSetChanged() {
mBookmarkAdapter.clear();
@ -796,8 +806,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -796,8 +806,7 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* method that shows a dialog asking what string the user wishes to search
* for. It highlights the text entered.
* method that shows a dialog asking what string the user wishes to search for. It highlights the text entered.
*/
private void findInPage() {
final AlertDialog.Builder finder = new AlertDialog.Builder(mActivity);
@ -820,9 +829,12 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -820,9 +829,12 @@ public class BrowserActivity extends Activity implements BrowserController {
finder.show();
}
/** The click listener for ListView in the navigation drawer */
/**
* The click listener for ListView in the navigation drawer
*/
private class DrawerItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
@ -831,9 +843,12 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -831,9 +843,12 @@ public class BrowserActivity extends Activity implements BrowserController {
}
}
/** long click listener for Navigation Drawer */
/**
* long click listener for Navigation Drawer
*/
private class DrawerItemLongClickListener implements
ListView.OnItemLongClickListener {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
@ -844,6 +859,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -844,6 +859,7 @@ public class BrowserActivity extends Activity implements BrowserController {
private class BookmarkItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
@ -864,6 +880,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -864,6 +880,7 @@ public class BrowserActivity extends Activity implements BrowserController {
private class BookmarkItemLongClickListener implements
ListView.OnItemLongClickListener {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
final int position, long arg3) {
@ -913,11 +930,10 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -913,11 +930,10 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* Takes in the id of which bookmark was selected and shows a dialog that
* allows the user to rename and change the url of the bookmark
* Takes in the id of which bookmark was selected and shows a dialog that allows the user to rename and change the
* url of the bookmark
*
* @param id
* which id in the list was chosen
* @param id which id in the list was chosen
*/
public synchronized void editBookmark(final int id) {
final AlertDialog.Builder homePicker = new AlertDialog.Builder(
@ -989,11 +1005,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -989,11 +1005,9 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* displays the WebView contained in the LightningView Also handles the
* removal of previous views
* displays the WebView contained in the LightningView Also handles the removal of previous views
*
* @param view
* the LightningView to show
* @param view the LightningView to show
*/
private synchronized void showTab(LightningView view) {
if (view == null) {
@ -1037,8 +1051,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1037,8 +1051,9 @@ public class BrowserActivity extends Activity implements BrowserController {
url = intent.getDataString();
}
int num = 0;
if (intent != null && intent.getExtras() != null)
if (intent != null && intent.getExtras() != null) {
num = intent.getExtras().getInt(getPackageName() + ".Origin");
}
if (num == 1) {
mCurrentView.loadUrl(url);
} else if (url != null) {
@ -1085,8 +1100,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1085,8 +1100,7 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
* When using the ActionBarDrawerToggle, you must call it during onPostCreate() and onConfigurationChanged()...
*/
@Override
@ -1224,9 +1238,10 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1224,9 +1238,10 @@ public class BrowserActivity extends Activity implements BrowserController {
}
mCurrentView = null;
for (int n = 0; n < mWebViews.size(); n++) {
if (mWebViews.get(n) != null)
if (mWebViews.get(n) != null) {
mWebViews.get(n).onDestroy();
}
}
mWebViews.clear();
mTitleAdapter.notifyDataSetChanged();
finish();
@ -1297,13 +1312,15 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1297,13 +1312,15 @@ public class BrowserActivity extends Activity implements BrowserController {
mCurrentView.onPause();
}
if (mHistoryDatabase != null) {
if (mHistoryDatabase.isOpen())
if (mHistoryDatabase.isOpen()) {
mHistoryDatabase.close();
}
}
if (mHistoryHandler != null) {
if (mHistoryHandler.isOpen())
if (mHistoryHandler.isOpen()) {
mHistoryHandler.close();
}
}
}
@ -1325,13 +1342,15 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1325,13 +1342,15 @@ public class BrowserActivity extends Activity implements BrowserController {
protected void onDestroy() {
Log.i(Constants.TAG, "onDestroy");
if (mHistoryDatabase != null) {
if (mHistoryDatabase.isOpen())
if (mHistoryDatabase.isOpen()) {
mHistoryDatabase.close();
}
}
if (mHistoryHandler != null) {
if (mHistoryHandler.isOpen())
if (mHistoryHandler.isOpen()) {
mHistoryHandler.close();
}
}
super.onDestroy();
}
@ -1380,8 +1399,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1380,8 +1399,7 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* searches the web for the query fixing any and all problems with the input
* checks if it is a search, url, etc.
* searches the web for the query fixing any and all problems with the input checks if it is a search, url, etc.
*/
void searchTheWeb(String query) {
if (query.equals("")) {
@ -1467,7 +1485,6 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1467,7 +1485,6 @@ public class BrowserActivity extends Activity implements BrowserController {
/**
* converts the int num into density pixels
*
* @param num
* @return density pixels
*/
private int getDp(int num) {
@ -1493,8 +1510,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1493,8 +1510,9 @@ public class BrowserActivity extends Activity implements BrowserController {
paint.setAntiAlias(true);
paint.setStyle(Style.FILL);
paint.setColor(mNumberIconColor);
if (number > 99)
if (number > 99) {
number = 99;
}
// pixels, 36 dp
if (mActionBarSizeDp < 50) {
if (number > 9) {
@ -1524,7 +1542,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1524,7 +1542,9 @@ public class BrowserActivity extends Activity implements BrowserController {
public class LightningViewAdapter extends ArrayAdapter<LightningView> {
Context context;
int layoutResourceId;
List<LightningView> data = null;
public LightningViewAdapter(Context context, int layoutResourceId,
@ -1578,8 +1598,11 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1578,8 +1598,11 @@ public class BrowserActivity extends Activity implements BrowserController {
}
class LightningViewHolder {
TextView txtTitle;
ImageView favicon;
ImageView exit;
}
}
@ -1587,7 +1610,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1587,7 +1610,9 @@ public class BrowserActivity extends Activity implements BrowserController {
public class BookmarkViewAdapter extends ArrayAdapter<HistoryItem> {
Context context;
int layoutResourceId;
List<HistoryItem> data = null;
public BookmarkViewAdapter(Context context, int layoutResourceId,
@ -1628,7 +1653,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1628,7 +1653,9 @@ public class BrowserActivity extends Activity implements BrowserController {
}
class BookmarkViewHolder {
TextView txtTitle;
ImageView favicon;
}
}
@ -1646,7 +1673,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1646,7 +1673,9 @@ public class BrowserActivity extends Activity implements BrowserController {
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
HistoryItem mWeb;
public DownloadImageTask(ImageView bmImage, HistoryItem web) {
@ -1729,8 +1758,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1729,8 +1758,9 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void updateUrl(String url) {
if (url == null)
if (url == null) {
return;
}
url = url.replaceFirst(Constants.HTTP, "");
if (url.startsWith(Constants.FILE)) {
url = "";
@ -1741,8 +1771,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1741,8 +1771,9 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void updateProgress(int n) {
if (!mProgress.isShown())
if (!mProgress.isShown()) {
mProgress.setVisibility(View.VISIBLE);
}
mProgress.setProgress(n);
if (n == 100) {
mProgress.setVisibility(View.INVISIBLE);
@ -1788,8 +1819,8 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1788,8 +1819,8 @@ public class BrowserActivity extends Activity implements BrowserController {
.getReadableDatabase();
}
Cursor cursor = mHistoryDatabase.query(
DatabaseHandler.TABLE_HISTORY, new String[] { "id",
"url", "title" }, sb.toString(), null,
DatabaseHandler.TABLE_HISTORY, new String[]{"id",
"url", "title"}, sb.toString(), null,
null, null, null);
if (!cursor.moveToFirst()) {
mHistoryHandler.addHistoryItem(new HistoryItem(url,
@ -1821,20 +1852,19 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1821,20 +1852,19 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* 1, 2, 3, testing... is there a system browser that has some nice
* bookmarks for us?
* 1, 2, 3, testing... is there a system browser that has some nice bookmarks for us?
*/
public boolean isSystemBrowserAvailable() {
return mSystemBrowser;
}
/**
* 1, 2, 3, testing... is there a system browser that has some nice
* bookmarks for us? helper method for isSystemBrowserAvailable
* 1, 2, 3, testing... is there a system browser that has some nice bookmarks for us? helper method for
* isSystemBrowserAvailable
*/
public boolean getSystemBrowser() {
Cursor c = null;
String[] columns = new String[] { "url", "title" };
String[] columns = new String[]{"url", "title"};
boolean browserFlag = false;
try {
@ -1863,8 +1893,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1863,8 +1893,7 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* method to generate search suggestions for the AutoCompleteTextView from
* previously searched URLs
* method to generate search suggestions for the AutoCompleteTextView from previously searched URLs
*/
private void initializeSearchSuggestions(final AutoCompleteTextView getUrl) {
@ -1936,8 +1965,6 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -1936,8 +1965,6 @@ public class BrowserActivity extends Activity implements BrowserController {
/**
* returns a list of HistoryItems
*
* @return
*/
private List<HistoryItem> getLatestHistory() {
DatabaseHandler historyHandler = new DatabaseHandler(mContext);
@ -2096,8 +2123,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2096,8 +2123,9 @@ public class BrowserActivity extends Activity implements BrowserController {
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == 1) {
if (null == mUploadMessage)
if (null == mUploadMessage) {
return;
}
Uri result = intent == null || resultCode != RESULT_OK ? null
: intent.getData();
mUploadMessage.onReceiveValue(result);
@ -2156,8 +2184,9 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2156,8 +2184,9 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void onHideCustomView() {
if (mCustomView == null || mCustomViewCallback == null
|| mCurrentView == null)
|| mCurrentView == null) {
return;
}
Log.i(Constants.TAG, "onHideCustomView");
mCurrentView.setVisibility(View.VISIBLE);
mCustomView.setKeepScreenOn(false);
@ -2203,8 +2232,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2203,8 +2232,7 @@ public class BrowserActivity extends Activity implements BrowserController {
/**
* turns on fullscreen mode in the app
*
* @param enabled
* whether to enable fullscreen or not
* @param enabled whether to enable fullscreen or not
*/
public void setFullscreen(boolean enabled) {
Window win = getWindow();
@ -2330,15 +2358,15 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2330,15 +2358,15 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
case DialogInterface.BUTTON_POSITIVE:
newTab(url, false);
break;
}
case DialogInterface.BUTTON_NEGATIVE: {
case DialogInterface.BUTTON_NEGATIVE:
mCurrentView.loadUrl(url);
break;
}
case DialogInterface.BUTTON_NEUTRAL: {
case DialogInterface.BUTTON_NEUTRAL:
if (API > 8) {
Utils.downloadFile(mActivity, url,
mCurrentView.getUserAgent(),
@ -2347,7 +2375,6 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2347,7 +2375,6 @@ public class BrowserActivity extends Activity implements BrowserController {
break;
}
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
@ -2374,24 +2401,22 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2374,24 +2401,22 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
case DialogInterface.BUTTON_POSITIVE:
newTab(url, false);
break;
}
case DialogInterface.BUTTON_NEGATIVE: {
case DialogInterface.BUTTON_NEGATIVE:
mCurrentView.loadUrl(url);
break;
}
case DialogInterface.BUTTON_NEUTRAL: {
case DialogInterface.BUTTON_NEUTRAL:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label",
url);
clipboard.setPrimaryClip(clip);
break;
}
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
@ -2418,15 +2443,15 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2418,15 +2443,15 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
case DialogInterface.BUTTON_POSITIVE:
newTab(url, false);
break;
}
case DialogInterface.BUTTON_NEGATIVE: {
case DialogInterface.BUTTON_NEGATIVE:
mCurrentView.loadUrl(url);
break;
}
case DialogInterface.BUTTON_NEUTRAL: {
case DialogInterface.BUTTON_NEUTRAL:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", url);
clipboard.setPrimaryClip(clip);
@ -2434,7 +2459,6 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2434,7 +2459,6 @@ public class BrowserActivity extends Activity implements BrowserController {
break;
}
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); // dialog
@ -2461,15 +2485,15 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2461,15 +2485,15 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
case DialogInterface.BUTTON_POSITIVE:
newTab(newUrl, false);
break;
}
case DialogInterface.BUTTON_NEGATIVE: {
case DialogInterface.BUTTON_NEGATIVE:
mCurrentView.loadUrl(newUrl);
break;
}
case DialogInterface.BUTTON_NEUTRAL: {
case DialogInterface.BUTTON_NEUTRAL:
if (API > 8) {
Utils.downloadFile(mActivity, newUrl,
mCurrentView.getUserAgent(),
@ -2478,7 +2502,6 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2478,7 +2502,6 @@ public class BrowserActivity extends Activity implements BrowserController {
break;
}
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
@ -2505,15 +2528,15 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2505,15 +2528,15 @@ public class BrowserActivity extends Activity implements BrowserController {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
case DialogInterface.BUTTON_POSITIVE:
newTab(newUrl, false);
break;
}
case DialogInterface.BUTTON_NEGATIVE: {
case DialogInterface.BUTTON_NEGATIVE:
mCurrentView.loadUrl(newUrl);
break;
}
case DialogInterface.BUTTON_NEUTRAL: {
case DialogInterface.BUTTON_NEUTRAL:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label",
newUrl);
@ -2522,7 +2545,6 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2522,7 +2545,6 @@ public class BrowserActivity extends Activity implements BrowserController {
break;
}
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
@ -2552,9 +2574,8 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2552,9 +2574,8 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* This method lets the search bar know that the page is currently loading
* and that it should display the stop icon to indicate to the user that
* pressing it stops the page from loading
* This method lets the search bar know that the page is currently loading and that it should display the stop icon
* to indicate to the user that pressing it stops the page from loading
*/
public void setIsLoading() {
if (!mSearch.hasFocus()) {
@ -2564,8 +2585,7 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2564,8 +2585,7 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* This tells the search bar that the page is finished loading and it should
* display the refresh icon
* This tells the search bar that the page is finished loading and it should display the refresh icon
*/
public void setIsFinishedLoading() {
if (!mSearch.hasFocus()) {
@ -2575,8 +2595,8 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2575,8 +2595,8 @@ public class BrowserActivity extends Activity implements BrowserController {
}
/**
* handle presses on the refresh icon in the search bar, if the page is
* loading, stop the page, if it is done loading refresh the page.
* handle presses on the refresh icon in the search bar, if the page is loading, stop the page, if it is done
* loading refresh the page.
*
* See setIsFinishedLoading and setIsLoading for displaying the correct icon
*/
@ -2612,5 +2632,4 @@ public class BrowserActivity extends Activity implements BrowserController { @@ -2612,5 +2632,4 @@ public class BrowserActivity extends Activity implements BrowserController {
}
}
}

1
src/acr/browser/lightning/BrowserController.java

@ -13,6 +13,7 @@ import android.webkit.WebChromeClient.CustomViewCallback; @@ -13,6 +13,7 @@ import android.webkit.WebChromeClient.CustomViewCallback;
import android.webkit.WebView;
public interface BrowserController {
public void updateUrl(String title);
public void updateProgress(int n);

1
src/acr/browser/lightning/ClickHandler.java

@ -27,5 +27,4 @@ public class ClickHandler extends Handler { @@ -27,5 +27,4 @@ public class ClickHandler extends Handler {
url = msg.getData().getString("url");
mBrowserController.longClickPage(url);
}
}

24
src/acr/browser/lightning/Constants.java

@ -12,28 +12,50 @@ public class Constants { @@ -12,28 +12,50 @@ public class Constants {
}
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 int API = android.os.Build.VERSION.SDK_INT;
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 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_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_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 HOMEPAGE = "about:home";
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 ADVANCED_SETTINGS_INTENT = "android.intent.action.ADVANCED_SETTINGS";
public static final String LICENSE_INTENT = "android.intent.action.LICENSE";
public static final String SETTINGS_INTENT = "android.intent.action.SETTINGS";
public static final String INCOGNITO_INTENT = "android.intent.action.INCOGNITO";
public static final String EXTERNAL_STORAGE = Environment.getExternalStorageDirectory().toString();
public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|";
public static final String HTTP = "http://";
public static final String HTTPS = "https://";
public static final String FILE = "file://";
public static final String TAG = "Lightning";
public static final String TAG = "Lightning";
}

33
src/acr/browser/lightning/DatabaseHandler.java

@ -3,15 +3,15 @@ @@ -3,15 +3,15 @@
*/
package acr.browser.lightning;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
@ -26,8 +26,11 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -26,8 +26,11 @@ public class DatabaseHandler extends SQLiteOpenHelper {
// HistoryItems Table Columns names
public static final String KEY_ID = "id";
public static final String KEY_URL = "url";
public static final String KEY_TITLE = "title";
public static SQLiteDatabase mDatabase;
public DatabaseHandler(Context context) {
@ -55,17 +58,19 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -55,17 +58,19 @@ public class DatabaseHandler extends SQLiteOpenHelper {
onCreate(db);
}
public boolean isOpen(){
if(mDatabase != null)
public boolean isOpen() {
if (mDatabase != null) {
return mDatabase.isOpen();
else
} else {
return false;
}
}
@Override
public synchronized void close() {
if(mDatabase != null)
if (mDatabase != null) {
mDatabase.close();
}
super.close();
}
@ -75,9 +80,10 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -75,9 +80,10 @@ public class DatabaseHandler extends SQLiteOpenHelper {
public synchronized void delete(String url) {
String n = getHistoryItem(url);
if(n != null)
if (n != null) {
deleteHistoryItem(n);
}
}
// Adding new item
public synchronized void addHistoryItem(HistoryItem item) {
@ -90,8 +96,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -90,8 +96,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
// Getting single item
String getHistoryItem(String url) {
Cursor cursor = mDatabase.query(TABLE_HISTORY, new String[] { KEY_ID, KEY_URL,
KEY_TITLE }, KEY_URL + "=?", new String[] { url }, null, null,
Cursor cursor = mDatabase.query(TABLE_HISTORY, new String[]{KEY_ID, KEY_URL,
KEY_TITLE}, KEY_URL + "=?", new String[]{url}, null, null,
null, null);
String m = null;
if (cursor != null) {
@ -107,7 +113,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -107,7 +113,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
public List<HistoryItem> findItemsContaining(String search) {
List<HistoryItem> itemList = new ArrayList<HistoryItem>();
//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);
// looping through all rows and adding to list
@ -175,7 +181,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -175,7 +181,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
values.put(KEY_URL, item.getUrl());
values.put(KEY_TITLE, item.getTitle());
int n = mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?",
new String[] { String.valueOf(item.getId()) });
new String[]{String.valueOf(item.getId())});
// updating row
return n;
}
@ -183,7 +189,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -183,7 +189,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
// Deleting single item
public synchronized void deleteHistoryItem(String id) {
mDatabase.delete(TABLE_HISTORY, KEY_ID + " = ?",
new String[] { String.valueOf(id) });
new String[]{String.valueOf(id)});
}
// Getting items Count
@ -195,5 +201,4 @@ public class DatabaseHandler extends SQLiteOpenHelper { @@ -195,5 +201,4 @@ public class DatabaseHandler extends SQLiteOpenHelper {
// return count
return cursor.getCount();
}
}

18
src/acr/browser/lightning/DownloadHandler.java

@ -3,8 +3,6 @@ @@ -3,8 +3,6 @@
*/
package acr.browser.lightning;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DownloadManager;
@ -27,13 +25,14 @@ import android.widget.Toast; @@ -27,13 +25,14 @@ import android.widget.Toast;
*/
public class DownloadHandler {
private static final String LOGTAG = "DLHandler";
private static Activity mActivity;
/**
* Notify the host application a download should be done, or that
* the data should be streamed if a streaming viewer is available.
* Notify the host application a download should be done, or that the data should be streamed if a streaming viewer
* is available.
*
* @param activity Activity requesting the download.
* @param url The full url to the content that should be downloaded
* @param userAgent User agent of the downloading application.
@ -112,8 +111,9 @@ public class DownloadHandler { @@ -112,8 +111,9 @@ public class DownloadHandler {
}
/**
* Notify the host application a download should be done, even if there
* is a streaming viewer available for thise type.
* Notify the host application a download should be done, even if there is a streaming viewer available for thise
* type.
*
* @param activity Activity requesting the download.
* @param url The full url to the content that should be downloaded
* @param userAgent User agent of the downloading application.
@ -121,7 +121,8 @@ public class DownloadHandler { @@ -121,7 +121,8 @@ public class DownloadHandler {
* @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,
/*package */
static void onDownloadStartNoStream(Activity activity,
String url, String userAgent, String contentDisposition,
String mimetype, boolean privateBrowsing) {
@ -211,5 +212,4 @@ public class DownloadHandler { @@ -211,5 +212,4 @@ public class DownloadHandler {
Toast.makeText(activity, R.string.download_pending, Toast.LENGTH_SHORT)
.show();
}
}

109
src/acr/browser/lightning/FetchMimeUrlType.java

@ -1,109 +0,0 @@ @@ -1,109 +0,0 @@
/*
* Copyright 2014 A.C.R. Development
*/
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.content.Context;
import android.net.http.AndroidHttpClient;
import android.os.Environment;
import android.webkit.MimeTypeMap;
import android.webkit.URLUtil;
import java.io.IOException;
/**
* This class is used to pull down the http headers of a given URL so that
* we can analyse the mimetype and make any correction needed before we give
* the URL to the download manager.
* This operation is needed when the user long-clicks 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 correcting the mimetype down in
* android.os.webkit.LoadListener rather than handling it here.
*
*/
class FetchUrlMimeType extends Thread {
private Context mContext;
private DownloadManager.Request mRequest;
private String mUri;
private String mCookies;
private String mUserAgent;
public FetchUrlMimeType(Context context, DownloadManager.Request request,
String uri, String cookies, String userAgent) {
mContext = context.getApplicationContext();
mRequest = request;
mUri = uri;
mCookies = cookies;
mUserAgent = userAgent;
}
@Override
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) {
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);
}
}

107
src/acr/browser/lightning/FetchUrlMimeType.java

@ -0,0 +1,107 @@ @@ -0,0 +1,107 @@
/*
* Copyright 2014 A.C.R. Development
*/
package acr.browser.lightning;
import android.app.DownloadManager;
import android.content.Context;
import android.net.http.AndroidHttpClient;
import android.os.Environment;
import android.webkit.MimeTypeMap;
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;
/**
* This class is used to pull down the http headers of a given URL so that we can analyse the mimetype and make any
* correction needed before we give the URL to the download manager. This operation is needed when the user long-clicks
* 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
* correcting the mimetype down in android.os.webkit.LoadListener rather than handling it here.
*/
public class FetchUrlMimeType extends Thread {
private Context mContext;
private DownloadManager.Request mRequest;
private String mUri;
private String mCookies;
private String mUserAgent;
public FetchUrlMimeType(Context context, DownloadManager.Request request,
String uri, String cookies, String userAgent) {
mContext = context.getApplicationContext();
mRequest = request;
mUri = uri;
mCookies = cookies;
mUserAgent = userAgent;
}
@Override
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) {
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
src/acr/browser/lightning/HistoryItem.java

@ -9,9 +9,13 @@ public class HistoryItem implements Comparable<HistoryItem> { @@ -9,9 +9,13 @@ public class HistoryItem implements Comparable<HistoryItem> {
// private variables
private int mId;
private String mUrl;
private String mTitle;
private Bitmap mBitmap;
private int mImageId;
// Empty constructor
@ -47,7 +51,7 @@ public class HistoryItem implements Comparable<HistoryItem> { @@ -47,7 +51,7 @@ public class HistoryItem implements Comparable<HistoryItem> {
return this.mId;
}
public int getImageId(){
public int getImageId() {
return this.mImageId;
}
@ -56,7 +60,7 @@ public class HistoryItem implements Comparable<HistoryItem> { @@ -56,7 +60,7 @@ public class HistoryItem implements Comparable<HistoryItem> {
this.mId = id;
}
public void setImageId(int id){
public void setImageId(int id) {
this.mImageId = id;
}
@ -97,5 +101,4 @@ public class HistoryItem implements Comparable<HistoryItem> { @@ -97,5 +101,4 @@ public class HistoryItem implements Comparable<HistoryItem> {
public int compareTo(HistoryItem another) {
return mTitle.compareTo(another.mTitle);
}
}

6
src/acr/browser/lightning/HistoryPageVariables.java

@ -4,12 +4,18 @@ @@ -4,12 +4,18 @@
package acr.browser.lightning;
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>"
+ 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\">";
public static final String Part1 = "<div class=\"box\"><a href=\"";
public static final String Part2 = "\"></a><p class=\"black\">";
public static final String Part3 = "</p><p class=\"font\">";
public static final String Part4 = "</p></div></div>";
public static final String End = "</div></body></html>";
}

1
src/acr/browser/lightning/HomepageVariables.java

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
package acr.browser.lightning;
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>"
+ BrowserApp.getAppContext().getString(R.string.home)
+ "</title></head>"

4
src/acr/browser/lightning/IncognitoActivity.java

@ -10,6 +10,7 @@ import android.webkit.CookieSyncManager; @@ -10,6 +10,7 @@ import android.webkit.CookieSyncManager;
public class IncognitoActivity extends BrowserActivity {
SharedPreferences mPreferences;
CookieManager mCookieManager;
@Override
@ -73,7 +74,4 @@ public class IncognitoActivity extends BrowserActivity { @@ -73,7 +74,4 @@ public class IncognitoActivity extends BrowserActivity {
closeDrawers();
finish();
}
}

19
src/acr/browser/lightning/IntentUtils.java

@ -1,10 +1,5 @@ @@ -1,10 +1,5 @@
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.content.ActivityNotFoundException;
import android.content.Intent;
@ -15,10 +10,17 @@ import android.net.Uri; @@ -15,10 +10,17 @@ import android.net.Uri;
import android.util.Log;
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 {
private Activity mActivity;
private BrowserController mController;
static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile("(?i)"
+ // switch on case insensitive matching
"("
@ -72,8 +74,7 @@ public class IntentUtils { @@ -72,8 +74,7 @@ public class IntentUtils {
}
/**
* Search for intent handlers that are specific to this URL aka, specialized
* apps like google maps or youtube
* Search for intent handlers that are specific to this URL aka, specialized apps like google maps or youtube
*/
private boolean isSpecializedHandlerAvailable(Intent intent) {
PackageManager pm = mActivity.getPackageManager();
@ -89,6 +90,10 @@ public class IntentUtils { @@ -89,6 +90,10 @@ public class IntentUtils {
// Error on the side of staying in the browser, ignore
continue;
}
// NOTICE: Use of && instead of || will cause the browser
// to launch a new intent for every URL, using OR only
// launches a new one if there is a non-browser app that
// can handle it.
if (filter.countDataAuthorities() == 0
|| filter.countDataPaths() == 0) {
// Generic handler, skip

1
src/acr/browser/lightning/LicenseActivity.java

@ -54,5 +54,4 @@ public class LicenseActivity extends Activity implements View.OnClickListener { @@ -54,5 +54,4 @@ public class LicenseActivity extends Activity implements View.OnClickListener {
finish();
return super.onOptionsItemSelected(item);
}
}

13
src/acr/browser/lightning/LightningDownloadListener.java

@ -11,8 +11,10 @@ import android.webkit.DownloadListener; @@ -11,8 +11,10 @@ import android.webkit.DownloadListener;
import android.webkit.URLUtil;
public class LightningDownloadListener implements DownloadListener {
private Activity mActivity;
LightningDownloadListener(Activity activity){
LightningDownloadListener(Activity activity) {
mActivity = activity;
}
@ -26,15 +28,14 @@ public class LightningDownloadListener implements DownloadListener { @@ -26,15 +28,14 @@ public class LightningDownloadListener implements DownloadListener {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
case DialogInterface.BUTTON_POSITIVE:
DownloadHandler.onDownloadStart(mActivity, url, userAgent, contentDisposition, mimetype, false);
break;
}
case DialogInterface.BUTTON_NEGATIVE: {
case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); // dialog
@ -47,6 +48,4 @@ public class LightningDownloadListener implements DownloadListener { @@ -47,6 +48,4 @@ public class LightningDownloadListener implements DownloadListener {
Log.i(Constants.TAG, "Downloading" + fileName);
}
}

111
src/acr/browser/lightning/LightningView.java

@ -4,28 +4,10 @@ @@ -4,28 +4,10 @@
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.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.*;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.MailTo;
@ -33,7 +15,6 @@ import android.net.Uri; @@ -33,7 +15,6 @@ import android.net.Uri;
import android.net.http.SslError;
import android.os.Message;
import android.text.InputType;
import android.text.TextUtils;
import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.GestureDetector;
@ -42,39 +23,50 @@ import android.view.MotionEvent; @@ -42,39 +23,50 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.webkit.CookieManager;
import android.webkit.GeolocationPermissions;
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.*;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.VideoView;
import org.apache.http.util.ByteArrayBuffer;
import java.io.*;
import java.net.*;
public class LightningView {
private Title mTitle;
private WebView mWebView;
private BrowserController mBrowserController;
private GestureDetector mGestureDetector;
private Activity mActivity;
private WebSettings mSettings;
private static int API = android.os.Build.VERSION.SDK_INT;
private static String mHomepage;
private static String mDefaultUserAgent;
private static Bitmap mWebpageBitmap;
private static SharedPreferences mPreferences;
private static boolean mWideViewPort;
private static AdBlock mAdBlock;
private CookieManager mCookieManager;
private boolean isForgroundTab = false;
private IntentUtils mIntentUtils = null;
@SuppressLint("NewApi")
@ -122,7 +114,9 @@ public class LightningView { @@ -122,7 +114,9 @@ public class LightningView {
mWebView.setOnTouchListener(new OnTouchListener() {
float mLocation = 0;
float mY = 0;
int mAction = 0;
@Override
@ -288,14 +282,12 @@ public class LightningView { @@ -288,14 +282,12 @@ public class LightningView {
case 0:
mSettings.setPluginState(PluginState.OFF);
break;
case 1: {
case 1:
mSettings.setPluginState(PluginState.ON_DEMAND);
break;
}
case 2: {
case 2:
mSettings.setPluginState(PluginState.ON);
break;
}
default:
break;
}
@ -303,11 +295,12 @@ public class LightningView { @@ -303,11 +295,12 @@ public class LightningView {
switch (mPreferences.getInt(PreferenceConstants.USER_AGENT, 1)) {
case 1:
if (API > 16)
if (API > 16) {
mSettings.setUserAgentString(WebSettings
.getDefaultUserAgent(context));
else
} else {
mSettings.setUserAgentString(mDefaultUserAgent);
}
break;
case 2:
mSettings.setUserAgentString(Constants.DESKTOP_USER_AGENT);
@ -368,7 +361,7 @@ public class LightningView { @@ -368,7 +361,7 @@ public class LightningView {
}
}
@SuppressLint({ "SetJavaScriptEnabled", "NewApi" })
@SuppressLint({"SetJavaScriptEnabled", "NewApi"})
public void initializeSettings(WebSettings settings, Context context) {
if (API < 18) {
settings.setAppCacheMaxSize(Long.MAX_VALUE);
@ -403,21 +396,24 @@ public class LightningView { @@ -403,21 +396,24 @@ public class LightningView {
}
public boolean isShown() {
if (mWebView != null)
if (mWebView != null) {
return mWebView.isShown();
else
} else {
return false;
}
}
public synchronized void onPause() {
if (mWebView != null)
if (mWebView != null) {
mWebView.onPause();
}
}
public synchronized void onResume() {
if (mWebView != null)
if (mWebView != null) {
mWebView.onResume();
}
}
public void setIsForgroundTab(boolean isForground) {
isForgroundTab = isForground;
@ -456,10 +452,11 @@ public class LightningView { @@ -456,10 +452,11 @@ public class LightningView {
public void requestFocus() {
if (mWebView != null) {
if (!mWebView.hasFocus())
if (!mWebView.hasFocus()) {
mWebView.requestFocus();
}
}
}
public void setVisibility(int visible) {
if (mWebView != null) {
@ -508,9 +505,10 @@ public class LightningView { @@ -508,9 +505,10 @@ public class LightningView {
}
public synchronized void goBack() {
if (mWebView != null)
if (mWebView != null) {
mWebView.goBack();
}
}
public String getUserAgent() {
if (mWebView != null) {
@ -521,9 +519,10 @@ public class LightningView { @@ -521,9 +519,10 @@ public class LightningView {
}
public synchronized void goForward() {
if (mWebView != null)
if (mWebView != null) {
mWebView.goForward();
}
}
public boolean canGoBack() {
if (mWebView != null) {
@ -550,25 +549,28 @@ public class LightningView { @@ -550,25 +549,28 @@ public class LightningView {
}
public synchronized void loadUrl(String url) {
if (mWebView != null)
if (mWebView != null) {
mWebView.loadUrl(url);
}
}
public synchronized void invalidate() {
if (mWebView != null)
if (mWebView != null) {
mWebView.invalidate();
}
}
public String getTitle() {
return mTitle.getTitle();
}
public String getUrl() {
if (mWebView != null)
if (mWebView != null) {
return mWebView.getUrl();
else
} else {
return "";
}
}
public class LightningWebClient extends WebViewClient {
@ -593,11 +595,13 @@ public class LightningView { @@ -593,11 +595,13 @@ public class LightningView {
PreferenceConstants.USE_PROXY, false);
boolean mDoLeakHardening = false;
if (!useProxy)
if (!useProxy) {
return null;
}
if (!mDoLeakHardening)
if (!mDoLeakHardening) {
return null;
}
// now we are going to proxy!
try {
@ -636,13 +640,15 @@ public class LightningView { @@ -636,13 +640,15 @@ public class LightningView {
if (cEnc == null && ctArray.length > 1) {
cEnc = ctArray[1];
if (cEnc.indexOf('=') != -1)
if (cEnc.indexOf('=') != -1) {
cEnc = cEnc.split("=")[1].trim();
}
}
}
if (connLen <= 0)
if (connLen <= 0) {
connLen = 2048;
}
if (cType != null && cType.startsWith("text")) {
InputStream fStream = null;
@ -1043,8 +1049,11 @@ public class LightningView { @@ -1043,8 +1049,11 @@ public class LightningView {
}
public class Title {
private Bitmap mFavicon;
private String mTitle;
private Bitmap mDefaultIcon;
public Title(Context context) {

4
src/acr/browser/lightning/MainActivity.java

@ -10,6 +10,7 @@ import android.webkit.CookieSyncManager; @@ -10,6 +10,7 @@ import android.webkit.CookieSyncManager;
public class MainActivity extends BrowserActivity {
SharedPreferences mPreferences;
CookieManager mCookieManager;
@Override
@ -72,7 +73,4 @@ public class MainActivity extends BrowserActivity { @@ -72,7 +73,4 @@ public class MainActivity extends BrowserActivity {
closeDrawers();
moveTaskToBack(true);
}
}

32
src/acr/browser/lightning/PreferenceConstants.java

@ -4,38 +4,70 @@ @@ -4,38 +4,70 @@
package acr.browser.lightning;
public class PreferenceConstants {
public static final String ADOBE_FLASH_SUPPORT = "enableflash";
public static final String BLOCK_ADS = "AdBlock";
public static final String BLOCK_IMAGES = "blockimages";
public static final String CLEAR_CACHE_EXIT = "cache";
public static final String COOKIES = "cookies";
public static final String DOWNLOAD_DIRECTORY = "download";
public static final String FULL_SCREEN = "fullscreen";
public static final String HIDE_STATUS_BAR = "hidestatus";
public static final String HOMEPAGE = "home";
public static final String INCOGNITO_COOKIES = "incognitocookies";
public static final String JAVASCRIPT = "java";
public static final String LOCATION = "location";
public static final String OVERVIEW_MODE = "overviewmode";
public static final String POPUPS = "newwindows";
public static final String PREFERENCES = "settings";
public static final String RESTORE_LOST_TABS = "restoreclosed";
public static final String SAVE_PASSWORDS = "passwords";
public static final String SEARCH = "search";
public static final String SEARCH_URL = "searchurl";
public static final String SYSTEM_BROWSER_PRESENT = "SystemBrowser";
public static final String TEXT_REFLOW = "textreflow";
public static final String TEXT_SIZE = "textsize";
public static final String URL_MEMORY = "memory";
public static final String USE_WIDE_VIEWPORT = "wideviewport";
public static final String USER_AGENT = "agentchoose";
public static final String USER_AGENT_STRING = "userAgentString";
public static final String GOOGLE_SEARCH_SUGGESTIONS = "GoogleSearchSuggestions";
public static final String CLEAR_HISTORY_EXIT = "clearHistoryExit";
public static final String CLEAR_COOKIES_EXIT = "clearCookiesExit";
public static final String USE_PROXY = "useProxy";
public static final String USE_PROXY_HOST = "useProxyHost";
public static final String USE_PROXY_PORT = "useProxyPort";
public static final String INITIAL_CHECK_FOR_TOR = "checkForTor";
}

34
src/acr/browser/lightning/ReplacingInputStream.java

@ -9,7 +9,9 @@ import java.util.LinkedList; @@ -9,7 +9,9 @@ import java.util.LinkedList;
public class ReplacingInputStream extends FilterInputStream {
LinkedList<Integer> inQueue = new LinkedList<Integer>();
LinkedList<Integer> outQueue = new LinkedList<Integer>();
final byte[] search, replacement;
protected ReplacingInputStream(InputStream in, byte[] search,
@ -21,9 +23,11 @@ public class ReplacingInputStream extends FilterInputStream { @@ -21,9 +23,11 @@ public class ReplacingInputStream extends FilterInputStream {
private boolean isMatchFound() {
Iterator<Integer> inIter = inQueue.iterator();
for (int i = 0; i < search.length; i++)
if (!inIter.hasNext() || search[i] != inIter.next())
for (int i = 0; i < search.length; i++) {
if (!inIter.hasNext() || search[i] != inIter.next()) {
return false;
}
}
return true;
}
@ -32,10 +36,11 @@ public class ReplacingInputStream extends FilterInputStream { @@ -32,10 +36,11 @@ public class ReplacingInputStream extends FilterInputStream {
while (inQueue.size() < search.length) {
int next = super.read();
inQueue.offer(next);
if (next == -1)
if (next == -1) {
break;
}
}
}
@Override
@ -47,34 +52,39 @@ public class ReplacingInputStream extends FilterInputStream { @@ -47,34 +52,39 @@ public class ReplacingInputStream extends FilterInputStream {
readAhead();
if (isMatchFound()) {
for (int i = 0; i < search.length; i++)
for (int i = 0; i < search.length; i++) {
inQueue.remove();
}
for (byte b : replacement)
for (byte b : replacement) {
outQueue.offer((int) b);
} else
}
} else {
outQueue.add(inQueue.remove());
}
}
return outQueue.remove();
}
/**
* Returns false. REFilterInputStream does not support mark() and
* reset() methods.
* Returns false. REFilterInputStream does not support mark() and reset() methods.
*/
public boolean markSupported() {
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;
int ok = 0;
while (len-- > 0) {
i = read();
if (i == -1) return (ok == 0) ? -1 : ok;
if (i == -1) {
return (ok == 0) ? -1 : ok;
}
b[off++] = (byte) i;
ok++;
}
@ -86,6 +96,4 @@ public class ReplacingInputStream extends FilterInputStream { @@ -86,6 +96,4 @@ public class ReplacingInputStream extends FilterInputStream {
return read(buffer, 0, buffer.length);
}
}

46
src/acr/browser/lightning/SearchAdapter.java

@ -1,19 +1,5 @@ @@ -1,19 +1,5 @@
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.content.Context;
import android.content.SharedPreferences;
@ -24,23 +10,41 @@ import android.os.AsyncTask; @@ -24,23 +10,41 @@ import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.*;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
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 {
private List<HistoryItem> mHistory;
private List<HistoryItem> mBookmarks;
private List<HistoryItem> mSuggestions;
private List<HistoryItem> mFilteredList;
private List<HistoryItem> mAllBookmarks;
private DatabaseHandler mDatabaseHandler;
private SharedPreferences mPreferences;
private boolean mUseGoogle = true;
private Context mContext;
private boolean mIncognito = false;
public SearchAdapter(Context context, boolean incognito) {
@ -235,8 +239,11 @@ public class SearchAdapter extends BaseAdapter implements Filterable { @@ -235,8 +239,11 @@ public class SearchAdapter extends BaseAdapter implements Filterable {
}
private class SuggestionHolder {
ImageView mImage;
TextView mTitle;
TextView mUrl;
}
@ -389,5 +396,4 @@ public class SearchAdapter extends BaseAdapter implements Filterable { @@ -389,5 +396,4 @@ public class SearchAdapter extends BaseAdapter implements Filterable {
return filteredList;
}
}

95
src/acr/browser/lightning/SettingsActivity.java

@ -3,11 +3,8 @@ @@ -3,11 +3,8 @@
*/
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.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
@ -20,36 +17,45 @@ import android.content.pm.PackageInfo; @@ -20,36 +17,45 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.util.TypedValue;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.view.WindowManager;
import android.widget.*;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import info.guardianproject.onionkit.ui.OrbotHelper;
public class SettingsActivity extends Activity {
private static int API = android.os.Build.VERSION.SDK_INT;
private static SharedPreferences.Editor mEditPrefs;
private static int mAgentChoice;
private static String mHomepage;
private static TextView mAgentTextView;
private static TextView mDownloadTextView;
private static int mEasterEggCounter = 0;
private static String mSearchUrl;
private static String mDownloadLocation;
private static TextView mHomepageText;
private static SharedPreferences mPreferences;
private static TextView mSearchText;
private SharedPreferences.Editor mEditPrefs;
private int mAgentChoice;
private String mHomepage;
private TextView mAgentTextView;
private TextView mDownloadTextView;
private int mEasterEggCounter;
private String mDownloadLocation;
private TextView mHomepageText;
private SharedPreferences mPreferences;
private TextView mSearchText;
private Context mContext;
private Activity mActivity;
@Override
@ -70,8 +76,12 @@ public class SettingsActivity extends Activity { @@ -70,8 +76,12 @@ public class SettingsActivity extends Activity {
@SuppressLint("NewApi")
public void init() {
// mPreferences storage
getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
mPreferences = getSharedPreferences(PreferenceConstants.PREFERENCES, 0);
if (mPreferences.getBoolean(PreferenceConstants.HIDE_STATUS_BAR, false)) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
@ -144,7 +154,7 @@ public class SettingsActivity extends Activity { @@ -144,7 +154,7 @@ public class SettingsActivity extends Activity {
PreferenceConstants.DOWNLOAD_DIRECTORY,
Environment.DIRECTORY_DOWNLOADS);
mDownloadTextView.setText(Constants.EXTERNAL_STORAGE + "/"
mDownloadTextView.setText(Constants.EXTERNAL_STORAGE + '/'
+ mDownloadLocation);
String code = "HOLO";
@ -154,7 +164,7 @@ public class SettingsActivity extends Activity { @@ -154,7 +164,7 @@ public class SettingsActivity extends Activity {
getPackageName(), 0);
code = p.versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
// TODO add logging
e.printStackTrace();
}
@ -268,7 +278,7 @@ public class SettingsActivity extends Activity { @@ -268,7 +278,7 @@ public class SettingsActivity extends Activity {
"Google", "Android Search", "Bing", "Yahoo",
"StartPage", "StartPage (Mobile)",
"DuckDuckGo (Privacy)", "DuckDuckGo Lite (Privacy)",
"Baidu (Chinese)", "Yandex (Russian)" };
"Baidu (Chinese)", "Yandex (Russian)"};
int n = mPreferences.getInt(PreferenceConstants.SEARCH, 1);
@ -334,13 +344,12 @@ public class SettingsActivity extends Activity { @@ -334,13 +344,12 @@ public class SettingsActivity extends Activity {
}
public void searchUrlPicker() {
final AlertDialog.Builder urlPicker = new AlertDialog.Builder(
SettingsActivity.this);
final AlertDialog.Builder urlPicker = new AlertDialog.Builder(this);
urlPicker.setTitle(getResources().getString(R.string.custom_url));
final EditText getSearchUrl = new EditText(SettingsActivity.this);
final EditText getSearchUrl = new EditText(this);
mSearchUrl = mPreferences.getString(PreferenceConstants.SEARCH_URL,
String mSearchUrl = mPreferences.getString(PreferenceConstants.SEARCH_URL,
Constants.GOOGLE_SEARCH);
getSearchUrl.setText(mSearchUrl);
urlPicker.setView(getSearchUrl);
@ -483,8 +492,9 @@ public class SettingsActivity extends Activity { @@ -483,8 +492,9 @@ public class SettingsActivity extends Activity {
PackageManager pm = getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(
"com.adobe.flashplayer", 0);
if (ai != null)
if (ai != null) {
flashInstalled = true;
}
} catch (NameNotFoundException e) {
flashInstalled = false;
}
@ -611,8 +621,9 @@ public class SettingsActivity extends Activity { @@ -611,8 +621,9 @@ public class SettingsActivity extends Activity {
PackageManager pm = getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(
"com.adobe.flashplayer", 0);
if (ai != null)
if (ai != null) {
flashInstalled = true;
}
} catch (NameNotFoundException e) {
flashInstalled = false;
}
@ -728,7 +739,7 @@ public class SettingsActivity extends Activity { @@ -728,7 +739,7 @@ public class SettingsActivity extends Activity {
agentStringPicker.setTitle(getResources().getString(
R.string.title_user_agent));
final EditText getAgent = new EditText(SettingsActivity.this);
final EditText getAgent = new EditText(this);
agentStringPicker.setView(getAgent);
agentStringPicker.setPositiveButton(
getResources().getString(R.string.action_ok),
@ -759,7 +770,7 @@ public class SettingsActivity extends Activity { @@ -759,7 +770,7 @@ public class SettingsActivity extends Activity {
mDownloadLocation = mPreferences.getString(
PreferenceConstants.DOWNLOAD_DIRECTORY,
Environment.DIRECTORY_DOWNLOADS);
int n = -1;
int n;
if (mDownloadLocation.contains(Environment.DIRECTORY_DOWNLOADS)) {
n = 1;
} else {
@ -782,7 +793,7 @@ public class SettingsActivity extends Activity { @@ -782,7 +793,7 @@ public class SettingsActivity extends Activity {
mEditPrefs.commit();
mDownloadTextView
.setText(Constants.EXTERNAL_STORAGE
+ "/"
+ '/'
+ Environment.DIRECTORY_DOWNLOADS);
break;
case 2:
@ -813,7 +824,7 @@ public class SettingsActivity extends Activity { @@ -813,7 +824,7 @@ public class SettingsActivity extends Activity {
mActivity);
homePicker.setTitle(getResources().getString(
R.string.title_custom_homepage));
final EditText getHome = new EditText(SettingsActivity.this);
final EditText getHome = new EditText(this);
mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE,
Constants.HOMEPAGE);
if (!mHomepage.startsWith("about:")) {
@ -845,7 +856,7 @@ public class SettingsActivity extends Activity { @@ -845,7 +856,7 @@ public class SettingsActivity extends Activity {
LinearLayout layout = new LinearLayout(this);
downLocationPicker.setTitle(getResources().getString(
R.string.title_download_location));
final EditText getDownload = new EditText(SettingsActivity.this);
final EditText getDownload = new EditText(this);
getDownload.setBackgroundResource(0);
mDownloadLocation = mPreferences.getString(
PreferenceConstants.DOWNLOAD_DIRECTORY,
@ -864,7 +875,7 @@ public class SettingsActivity extends Activity { @@ -864,7 +875,7 @@ public class SettingsActivity extends Activity {
TextView v = new TextView(this);
v.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
v.setTextColor(Color.DKGRAY);
v.setText(Constants.EXTERNAL_STORAGE + "/");
v.setText(Constants.EXTERNAL_STORAGE + '/');
v.setPadding(padding, padding, 0, padding);
layout.addView(v);
layout.addView(getDownload);
@ -887,7 +898,7 @@ public class SettingsActivity extends Activity { @@ -887,7 +898,7 @@ public class SettingsActivity extends Activity {
PreferenceConstants.DOWNLOAD_DIRECTORY, text);
mEditPrefs.commit();
mDownloadTextView.setText(Constants.EXTERNAL_STORAGE
+ "/" + text);
+ '/' + text);
}
});
downLocationPicker.show();
@ -902,7 +913,7 @@ public class SettingsActivity extends Activity { @@ -902,7 +913,7 @@ public class SettingsActivity extends Activity {
picker.setTitle(getResources().getString(R.string.home));
mHomepage = mPreferences.getString(
PreferenceConstants.HOMEPAGE, Constants.HOMEPAGE);
int n = -1;
int n;
if (mHomepage.contains("about:home")) {
n = 1;
} else if (mHomepage.contains("about:blank")) {

9
src/acr/browser/lightning/SettingsController.java

@ -4,14 +4,12 @@ @@ -4,14 +4,12 @@
package acr.browser.lightning;
public class SettingsController {
static boolean clearHistory = false;
/**
* The purpose of this class is so that
* I can clear the dropdown history in the main
* activities if the user selects to clear the
* history from the disk in advanced settings
* @param choice
* The purpose of this class is so that I can clear the dropdown history in the main activities if the user selects
* to clear the history from the disk in advanced settings
*/
static void setClearHistory(boolean choice) {
clearHistory = choice;
@ -19,7 +17,6 @@ public class SettingsController { @@ -19,7 +17,6 @@ public class SettingsController {
/**
* return the choice
* @return
*/
static boolean getClearHistory() {
if (clearHistory) {

2
src/acr/browser/lightning/SpaceTokenizer.java

@ -40,7 +40,7 @@ public class SpaceTokenizer implements Tokenizer { @@ -40,7 +40,7 @@ public class SpaceTokenizer implements Tokenizer {
@Override
public CharSequence terminateToken(CharSequence text) {
//int i = text.length();
if(text.charAt(text.length()-1) != ' '){
if (text.charAt(text.length() - 1) != ' ') {
text = text + " ";
}
return text;

31
src/acr/browser/lightning/Utils.java

@ -3,18 +3,6 @@ @@ -3,18 +3,6 @@
*/
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.AlertDialog;
import android.content.Context;
@ -24,9 +12,16 @@ import android.util.Log; @@ -24,9 +12,16 @@ import android.util.Log;
import android.webkit.URLUtil;
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 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,
null);
DownloadHandler.onDownloadStart(activity, url, userAgent, contentDisposition, null, privateBrowsing);
@ -36,7 +31,7 @@ public class Utils { @@ -36,7 +31,7 @@ public class Utils {
public static synchronized void addBookmark(Context context, String title, String url) {
File book = new File(context.getFilesDir(), "bookmarks");
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;
}
try {
@ -75,7 +70,7 @@ public class Utils { @@ -75,7 +70,7 @@ public class Utils {
public static Intent newEmailIntent(Context context, String address,
String subject, String body, String cc) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address });
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{address});
intent.putExtra(Intent.EXTRA_TEXT, body);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_CC, cc);
@ -88,7 +83,8 @@ public class Utils { @@ -88,7 +83,8 @@ public class Utils {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setMessage(message).setCancelable(true)
.setPositiveButton(context.getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() {
.setPositiveButton(context.getResources().getString(R.string.action_ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
@ -103,9 +99,6 @@ public class Utils { @@ -103,9 +99,6 @@ public class Utils {
/**
* Returns the number of pixels corresponding to the passed density pixels
* @param context
* @param densityPixels
* @return
*/
public static int convertToDensityPixels(Context context, int densityPixels) {
float scale = context.getResources().getDisplayMetrics().density;

82
src/acr/browser/lightning/WebAddress.java

@ -3,55 +3,59 @@ @@ -3,55 +3,59 @@
*/
package acr.browser.lightning;
import static android.util.Patterns.GOOD_IRI_CHAR;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static android.util.Patterns.GOOD_IRI_CHAR;
/**
* {@hide}
*
* Web Address Parser
*
* This is called WebAddress, rather than URL or URI, because it
* attempts to parse the stuff that a user will actually type into a
* browser address widget.
* This is called WebAddress, rather than URL or URI, because it attempts to
* parse the stuff that a user will actually type into a browser address widget.
*
* Unlike java.net.uri, this parser will not choke on URIs missing
* schemes. It will only throw a ParseException if the input is
* really hosed.
* Unlike java.net.uri, this parser will not choke on URIs missing schemes. It
* will only throw a ParseException if the input is really hosed.
*
* If given an https scheme but no port, fills in port
*
*/
public class WebAddress {
private String mScheme;
private String mHost;
private int mPort;
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$_.+!*'(),;?&=]+)?)@)?" +
/* host */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" +
/* port */ "(?:\\:([0-9]*))?" +
/* path */ "(\\/?[^#]*)?" +
/* anchor */ ".*", Pattern.CASE_INSENSITIVE);
static final int MATCH_GROUP_PATH = 5;
/** parses given uriString.
* @throws Exception */
static Pattern sAddressPattern = Pattern
.compile(
/* scheme */"(?:(http|https|file)\\:\\/\\/)?" +
/* authority */"(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" +
/* host */"([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" +
/* port */"(?:\\:([0-9]*))?" +
/* path */"(\\/?[^#]*)?" +
/* anchor */".*", Pattern.CASE_INSENSITIVE);
/**
* parses given uriString.
*/
public WebAddress(String address) throws Exception {
if (address == null) {
throw new NullPointerException();
@ -69,11 +73,17 @@ public class WebAddress { @@ -69,11 +73,17 @@ public class WebAddress {
String t;
if (m.matches()) {
t = m.group(MATCH_GROUP_SCHEME);
if (t != null) mScheme = t.toLowerCase(Locale.ROOT);
if (t != null) {
mScheme = t.toLowerCase(Locale.ROOT);
}
t = m.group(MATCH_GROUP_AUTHORITY);
if (t != null) mAuthInfo = t;
if (t != null) {
mAuthInfo = t;
}
t = m.group(MATCH_GROUP_HOST);
if (t != null) mHost = t;
if (t != null) {
mHost = t;
}
t = m.group(MATCH_GROUP_PORT);
if (t != null && t.length() > 0) {
// The ':' character is not returned by the regex.
@ -85,8 +95,10 @@ public class WebAddress { @@ -85,8 +95,10 @@ public class WebAddress {
}
t = m.group(MATCH_GROUP_PATH);
if (t != null && t.length() > 0) {
/* handle busted myspace frontpage redirect with
missing initial "/" */
/*
* handle busted myspace frontpage redirect with missing initial
* "/"
*/
if (t.charAt(0) == '/') {
mPath = t;
} else {
@ -99,24 +111,28 @@ public class WebAddress { @@ -99,24 +111,28 @@ public class WebAddress {
throw new Exception();
}
/* Get port from scheme or scheme from port, if necessary and
possible */
/*
* Get port from scheme or scheme from port, if necessary and possible
*/
if (mPort == 443 && mScheme.equals("")) {
mScheme = "https";
} else if (mPort == -1) {
if (mScheme.equals("https"))
if (mScheme.equals("https")) {
mPort = 443;
else
} else {
mPort = 80; // default
}
if (mScheme.equals("")) mScheme = "http";
}
if (mScheme.equals("")) {
mScheme = "http";
}
}
@Override
public String toString() {
String port = "";
if ((mPort != 443 && mScheme.equals("https")) ||
(mPort != 80 && mScheme.equals("http"))) {
if ((mPort != 443 && mScheme.equals("https"))
|| (mPort != 80 && mScheme.equals("http"))) {
port = ":" + Integer.toString(mPort);
}
String authInfo = "";

Loading…
Cancel
Save