diff --git a/res/layout/search.xml b/res/layout/search.xml index 3bfa575..a2dd47d 100644 --- a/res/layout/search.xml +++ b/res/layout/search.xml @@ -21,7 +21,7 @@ android:layout_height="wrap_content" android:background="@null" android:gravity="left|center_vertical" - android:hint="@+string/search_hint" + android:hint="@string/search_hint" android:imeOptions="actionGo" android:inputType="textUri" android:paddingBottom="1dp" diff --git a/res/layout/tab_drawer.xml b/res/layout/tab_drawer.xml index 7811f05..c1b963b 100644 --- a/res/layout/tab_drawer.xml +++ b/res/layout/tab_drawer.xml @@ -1,5 +1,5 @@ - @@ -49,14 +48,13 @@ android:id="@+id/view" android:layout_width="fill_parent" android:layout_height="1dp" - android:layout_below="@+id/new_tab_button" android:background="@color/gray_list_bg" /> @@ -119,4 +115,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/acr/browser/lightning/AnimatedProgressBar.java b/src/acr/browser/lightning/AnimatedProgressBar.java index 95b61be..fbe1663 100644 --- a/src/acr/browser/lightning/AnimatedProgressBar.java +++ b/src/acr/browser/lightning/AnimatedProgressBar.java @@ -61,7 +61,7 @@ public class AnimatedProgressBar extends LinearLayout { * @param attrs is the attribute set passed by the constructor */ private void init(final Context context, AttributeSet attrs) { - this.setLayerType(LAYER_TYPE_HARDWARE, null); + this.setLayerType(LAYER_TYPE_NONE, null); TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AnimatedProgressBar, 0, 0); int backgroundColor; int progressColor; diff --git a/src/acr/browser/lightning/BookmarkManager.java b/src/acr/browser/lightning/BookmarkManager.java index 9904000..6bba8dc 100644 --- a/src/acr/browser/lightning/BookmarkManager.java +++ b/src/acr/browser/lightning/BookmarkManager.java @@ -360,10 +360,9 @@ public class BookmarkManager { if (file == null) { return; } - File bookmarksImport = file; List list = new ArrayList(); try { - BufferedReader bookmarksReader = new BufferedReader(new FileReader(bookmarksImport)); + BufferedReader bookmarksReader = new BufferedReader(new FileReader(file)); String line; int number = 0; while ((line = bookmarksReader.readLine()) != null) { diff --git a/src/acr/browser/lightning/BrowserActivity.java b/src/acr/browser/lightning/BrowserActivity.java index 72cd860..70901af 100644 --- a/src/acr/browser/lightning/BrowserActivity.java +++ b/src/acr/browser/lightning/BrowserActivity.java @@ -77,7 +77,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl private DrawerLayout mDrawerLayout; private ListView mDrawerListLeft; - private RelativeLayout mDrawerLeft; + private LinearLayout mDrawerLeft; private LinearLayout mDrawerRight; private ListView mDrawerListRight; private RelativeLayout mNewTab; @@ -171,15 +171,20 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl // mProgressBar.setVisibility(View.GONE); // TODO mNewTab = (RelativeLayout) findViewById(R.id.new_tab_button); - mDrawerLeft = (RelativeLayout) findViewById(R.id.left_drawer); + mDrawerLeft = (LinearLayout) findViewById(R.id.left_drawer); + mDrawerLeft.setLayerType(View.LAYER_TYPE_HARDWARE, null); // Drawer + // stutters + // otherwise mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerListLeft = (ListView) findViewById(R.id.left_drawer_list); mDrawerListLeft.setDivider(null); mDrawerListLeft.setDividerHeight(0); mDrawerRight = (LinearLayout) findViewById(R.id.right_drawer); + mDrawerRight.setLayerType(View.LAYER_TYPE_HARDWARE, null); mDrawerListRight = (ListView) findViewById(R.id.right_drawer_list); mDrawerListRight.setDivider(null); mDrawerListRight.setDividerHeight(0); + setNavigationDrawerWidth(); mDrawerLayout.setDrawerListener(new DrawerLocker()); @@ -232,6 +237,11 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl mArrowDrawable = new DrawerArrowDrawable(this); mArrowImage = (ImageView) mActionBar.getCustomView().findViewById(R.id.arrow); + mArrowImage.setLayerType(View.LAYER_TYPE_HARDWARE, null); // Use a + // hardware + // layer for + // the + // animation mArrowImage.setImageDrawable(mArrowDrawable); LinearLayout arrowButton = (LinearLayout) mActionBar.getCustomView().findViewById( R.id.arrow_button); @@ -399,17 +409,22 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl @Override public void onFocusChange(View v, final boolean hasFocus) { if (!hasFocus && mCurrentView != null) { - if (mCurrentView != null) { - if (mCurrentView.getProgress() < 100) { - setIsLoading(); - } else { - setIsFinishedLoading(); - } + if (mCurrentView.getProgress() < 100) { + setIsLoading(); + } else { + setIsFinishedLoading(); } updateUrl(mCurrentView.getUrl(), true); } else if (hasFocus) { - updateUrl(mCurrentView.getUrl(), false); - mSearch.selectAll(); + String url = mCurrentView.getUrl(); + if (url == null || url.startsWith(Constants.FILE)) { + mSearch.setText(""); + } else { + mSearch.setText(url); + } + ((AutoCompleteTextView) v).selectAll(); // Hack to make sure + // the text gets + // selected mIcon = mCopyIcon; mSearch.setCompoundDrawables(null, null, mCopyIcon, null); } @@ -578,8 +593,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl if (mCurrentView != null) { if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl() - .toString()); + ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl()); clipboard.setPrimaryClip(clip); Utils.showToast(mContext, mContext.getResources().getString(R.string.message_link_copied)); @@ -653,7 +667,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl .setNegativeButton(R.string.no, dialogClickListener).show(); return true; - } else if (oh.isOrbotInstalled() & useProxy == true) { + } else if (oh.isOrbotInstalled() & useProxy) { initializeTor(); return true; } else { @@ -691,19 +705,23 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl .getLayoutParams(); params.width = maxWidth; mDrawerLeft.setLayoutParams(params); + mDrawerLeft.requestLayout(); DrawerLayout.LayoutParams paramsRight = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerRight .getLayoutParams(); paramsRight.width = maxWidth; mDrawerRight.setLayoutParams(paramsRight); + mDrawerRight.requestLayout(); } else { DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerLeft .getLayoutParams(); params.width = width; mDrawerLeft.setLayoutParams(params); + mDrawerLeft.requestLayout(); DrawerLayout.LayoutParams paramsRight = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerRight .getLayoutParams(); paramsRight.width = width; mDrawerRight.setLayoutParams(paramsRight); + mDrawerRight.requestLayout(); } } @@ -729,7 +747,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl } if (mPreferences.getBoolean(PreferenceConstants.RESTORE_LOST_TABS, true)) { String mem = mPreferences.getString(PreferenceConstants.URL_MEMORY, ""); - mEditPrefs.putString(PreferenceConstants.URL_MEMORY, ""); + mEditPrefs.putString(PreferenceConstants.URL_MEMORY, "").apply(); String[] array = Utils.getArray(mem); int count = 0; for (int n = 0; n < array.length; n++) { @@ -899,8 +917,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl if (mCurrentView != null) { if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl() - .toString()); + ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl()); clipboard.setPrimaryClip(clip); Utils.showToast(mContext, mContext.getResources().getString(R.string.message_link_copied)); @@ -1006,6 +1023,31 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl }); } + private void showCloseDialog(final int position) { + AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + ArrayAdapter adapter = new ArrayAdapter<>(mContext, + android.R.layout.simple_dropdown_item_1line); + adapter.add(mContext.getString(R.string.close_tab)); + adapter.add(mContext.getString(R.string.close_all_tabs)); + builder.setAdapter(adapter, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case 0: + deleteTab(position); + break; + case 1: + closeBrowser(); + break; + default: + break; + } + } + }); + builder.show(); + } + /** * The click listener for ListView in the navigation drawer */ @@ -1025,28 +1067,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl @Override public boolean onItemLongClick(AdapterView arg0, View arg1, final int position, long arg3) { - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - ArrayAdapter adapter = new ArrayAdapter<>(mContext, - android.R.layout.simple_dropdown_item_1line); - adapter.add(mContext.getString(R.string.close_tab)); - adapter.add(mContext.getString(R.string.close_all_tabs)); - builder.setAdapter(adapter, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case 0: - deleteTab(position); - break; - case 1: - closeBrowser(); - break; - default: - break; - } - } - }); - builder.show(); + showCloseDialog(position); return true; } } @@ -1339,10 +1360,8 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl Log.d(Constants.TAG, "Cookies Cleared"); } - if (reference != null) { - reference.pauseTimers(); - reference.onDestroy(); - } + reference.pauseTimers(); + reference.onDestroy(); mCurrentView = null; mTitleAdapter.notifyDataSetChanged(); finish(); @@ -1362,33 +1381,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { - if (mPreferences.getBoolean(PreferenceConstants.CLEAR_CACHE_EXIT, false) - && mCurrentView != null && !isIncognito()) { - mCurrentView.clearCache(true); - Log.d(Constants.TAG, "Cache Cleared"); - - } - if (mPreferences.getBoolean(PreferenceConstants.CLEAR_HISTORY_EXIT, false) - && !isIncognito()) { - clearHistory(); - Log.d(Constants.TAG, "History Cleared"); - - } - if (mPreferences.getBoolean(PreferenceConstants.CLEAR_COOKIES_EXIT, false) - && !isIncognito()) { - clearCookies(); - Log.d(Constants.TAG, "Cookies Cleared"); - - } - mCurrentView = null; - for (int n = 0; n < mWebViews.size(); n++) { - if (mWebViews.get(n) != null) { - mWebViews.get(n).onDestroy(); - } - } - mWebViews.clear(); - mTitleAdapter.notifyDataSetChanged(); - finish(); + showCloseDialog(mDrawerListLeft.getCheckedItemPosition()); } return true; } @@ -1502,8 +1495,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl s = s + mWebViews.get(n).getUrl() + "|$|SEPARATOR|$|"; } } - mEditPrefs.putString(PreferenceConstants.URL_MEMORY, s); - mEditPrefs.commit(); + mEditPrefs.putString(PreferenceConstants.URL_MEMORY, s).commit(); } } @@ -1822,8 +1814,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl } } catch (Exception e) { - } finally { - + e.printStackTrace(); } } else { // if it exists, retrieve it from the cache @@ -1850,6 +1841,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl } } catch (Exception e) { + e.printStackTrace(); } } if (mIcon == null) { @@ -1878,7 +1870,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl @Override public void updateUrl(String url, boolean shortUrl) { - if (url == null) { + if (url == null || mSearch == null || mSearch.hasFocus()) { return; } if (shortUrl) { @@ -1940,7 +1932,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl } } try { - if (mHistoryHandler == null && !mHistoryHandler.isOpen()) { + if (mHistoryHandler == null || !mHistoryHandler.isOpen()) { mHistoryHandler = new HistoryDatabaseHandler(mContext); } mHistoryHandler.visitHistoryItem(url, title); diff --git a/src/acr/browser/lightning/HistoryDatabaseHandler.java b/src/acr/browser/lightning/HistoryDatabaseHandler.java index 749b184..9341527 100644 --- a/src/acr/browser/lightning/HistoryDatabaseHandler.java +++ b/src/acr/browser/lightning/HistoryDatabaseHandler.java @@ -57,11 +57,7 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { } public boolean isOpen() { - if (mDatabase != null) { - return mDatabase.isOpen(); - } else { - return false; - } + return mDatabase != null && mDatabase.isOpen(); } @Override @@ -184,10 +180,8 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { ContentValues values = new ContentValues(); values.put(KEY_URL, item.getUrl()); values.put(KEY_TITLE, item.getTitle()); - int n = mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?", + return mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?", new String[] { String.valueOf(item.getId()) }); - // updating row - return n; } // Getting items Count diff --git a/src/acr/browser/lightning/HistoryItem.java b/src/acr/browser/lightning/HistoryItem.java index 2b5c770..e106508 100644 --- a/src/acr/browser/lightning/HistoryItem.java +++ b/src/acr/browser/lightning/HistoryItem.java @@ -140,11 +140,7 @@ public class HistoryItem implements Comparable { if (!mTitle.equals(that.mTitle)) { return false; } - if (!mUrl.equals(that.mUrl)) { - return false; - } - - return true; + return mUrl.equals(that.mUrl); } @Override diff --git a/src/acr/browser/lightning/IntentUtils.java b/src/acr/browser/lightning/IntentUtils.java index 7652839..e43f275 100644 --- a/src/acr/browser/lightning/IntentUtils.java +++ b/src/acr/browser/lightning/IntentUtils.java @@ -19,8 +19,6 @@ public class IntentUtils { private Activity mActivity; - private BrowserController mController; - static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile("(?i)" + // switch on case insensitive matching "(" @@ -29,8 +27,7 @@ public class IntentUtils { + ")" + "(.*)"); public IntentUtils(BrowserController controller) { - mController = controller; - mActivity = mController.getActivity(); + mActivity = controller.getActivity(); } public boolean startActivityForUrl(WebView tab, String url) { @@ -69,6 +66,7 @@ public class IntentUtils { return true; } } catch (ActivityNotFoundException ex) { + ex.printStackTrace(); } return false; } diff --git a/src/acr/browser/lightning/LightningView.java b/src/acr/browser/lightning/LightningView.java index edadd03..e0dde12 100644 --- a/src/acr/browser/lightning/LightningView.java +++ b/src/acr/browser/lightning/LightningView.java @@ -90,14 +90,13 @@ public class LightningView { if (API > 15) { mWebView.setBackground(null); mWebView.getRootView().setBackground(null); - } else { + } else if (mWebView.getRootView() != null) { mWebView.getRootView().setBackgroundDrawable(null); } mWebView.setWillNotCacheDrawing(false); mWebView.setAlwaysDrawnWithCacheEnabled(true); mWebView.setScrollbarFadingEnabled(true); mWebView.setSaveEnabled(true); - mWebView.setWebChromeClient(new LightningChromeClient(activity)); mWebView.setWebViewClient(new LightningWebClient(activity)); mWebView.setDownloadListener(new LightningDownloadListener(activity)); @@ -395,9 +394,6 @@ public class LightningView { if (API > 16) { settings.setMediaPlaybackRequiresUserGesture(true); } - if (API < 19) { - settings.setDatabasePath(context.getCacheDir() + "/databases"); - } if (API >= Build.VERSION_CODES.LOLLIPOP && !mBrowserController.isIncognito()) { settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); } else if (API >= Build.VERSION_CODES.LOLLIPOP) { @@ -411,20 +407,24 @@ public class LightningView { settings.setDomStorageEnabled(false); } settings.setAppCacheEnabled(true); - settings.setAppCachePath(context.getCacheDir().toString()); settings.setCacheMode(WebSettings.LOAD_DEFAULT); - settings.setGeolocationDatabasePath(context.getFilesDir().toString()); - settings.setAllowFileAccess(true); settings.setDatabaseEnabled(true); settings.setSupportZoom(true); settings.setBuiltInZoomControls(true); settings.setDisplayZoomControls(false); settings.setAllowContentAccess(true); + settings.setAllowFileAccess(true); settings.setDefaultTextEncodingName("utf-8"); if (API > 16) { settings.setAllowFileAccessFromFileURLs(false); settings.setAllowUniversalAccessFromFileURLs(false); } + + settings.setAppCachePath(context.getDir("appcache", 0).getPath()); + settings.setGeolocationDatabasePath(context.getDir("geolocation", 0).getPath()); + if (API < Build.VERSION_CODES.KITKAT) { + settings.setDatabasePath(context.getDir("databases", 0).getPath()); + } } public boolean isShown() { @@ -471,11 +471,11 @@ public class LightningView { } public void setNormalRendering() { - mWebView.setLayerType(View.LAYER_TYPE_NONE, mPaint); + mWebView.setLayerType(View.LAYER_TYPE_NONE, null); } public void setSoftwareRendering() { - mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, mPaint); + mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } public void setColorMode(int mode) { @@ -483,6 +483,9 @@ public class LightningView { switch (mode) { case 0: mPaint.setColorFilter(null); + // setSoftwareRendering(); // Some devices get segfaults + // in the WebView with Hardware Acceleration enabled, + // the only fix is to disable hardware rendering setNormalRendering(); mInvertPage = false; break; @@ -652,6 +655,16 @@ public class LightningView { mActivity = context; } + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + if (mAdBlock.isAd(request.getUrl().getHost())) { + ByteArrayInputStream EMPTY = new ByteArrayInputStream("".getBytes()); + return new WebResourceResponse("text/plain", "utf-8", EMPTY); + } + + return super.shouldInterceptRequest(view, request); + } + @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (mAdBlock.isAd(url)) { @@ -766,7 +779,7 @@ public class LightningView { public void onPageFinished(WebView view, String url) { if (view.isShown()) { mBrowserController.updateUrl(url, true); - view.invalidate(); + view.postInvalidate(); } if (view.getTitle() == null || view.getTitle().isEmpty()) { mTitle.setTitle(mActivity.getString(R.string.untitled)); @@ -785,7 +798,6 @@ public class LightningView { mBrowserController.updateUrl(url, false); mBrowserController.showActionBar(); } - mTitle.setFavicon(mWebpageBitmap); mBrowserController.update(); } diff --git a/src/acr/browser/lightning/MainActivity.java b/src/acr/browser/lightning/MainActivity.java index 7045026..a391219 100644 --- a/src/acr/browser/lightning/MainActivity.java +++ b/src/acr/browser/lightning/MainActivity.java @@ -36,7 +36,6 @@ public class MainActivity extends BrowserActivity { @Override public synchronized void initializeTabs() { - super.initializeTabs(); restoreOrNewTab(); // if incognito mode use newTab(null, true); instead } diff --git a/src/acr/browser/lightning/SearchAdapter.java b/src/acr/browser/lightning/SearchAdapter.java index 1b14acf..eb4610c 100644 --- a/src/acr/browser/lightning/SearchAdapter.java +++ b/src/acr/browser/lightning/SearchAdapter.java @@ -162,13 +162,10 @@ public class SearchAdapter extends BaseAdapter implements Filterable { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); - if (constraint == null) { + if (constraint == null || constraint.toString() == null) { return results; } String query = constraint.toString().toLowerCase(Locale.getDefault()); - if (query == null) { - return results; - } if (mUseGoogle && !mIncognito && !mIsExecuting) { new RetrieveSearchSuggestions().execute(query); } @@ -269,11 +266,10 @@ public class SearchAdapter extends BaseAdapter implements Filterable { try { download.close(); } catch (IOException e) { - return filter; + e.printStackTrace(); } } } - return filter; }