diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 43ad229..6fa3b08 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="56" + android:versionName="2.5.1.2" > - + + + - \ No newline at end of file diff --git a/res/anim/right.xml b/res/anim/right.xml index 6c3fbf0..5634516 100644 --- a/res/anim/right.xml +++ b/res/anim/right.xml @@ -3,8 +3,8 @@ + android:interpolator="@android:anim/anticipate_overshoot_interpolator" + android:toXDelta="-2%p" android:duration="150" + /> \ No newline at end of file diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png index b7a46c4..91347fa 100644 Binary files a/res/drawable-hdpi/ic_launcher.png and b/res/drawable-hdpi/ic_launcher.png differ diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png index 81a92c6..e781abc 100644 Binary files a/res/drawable-xhdpi/ic_launcher.png and b/res/drawable-xhdpi/ic_launcher.png differ diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png index 7df2cf1..cf420bd 100644 Binary files a/res/drawable-xxhdpi/ic_launcher.png and b/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/res/layout/advanced_settings.xml b/res/layout/advanced_settings.xml index 8d4afd2..f8c4b90 100644 --- a/res/layout/advanced_settings.xml +++ b/res/layout/advanced_settings.xml @@ -394,6 +394,30 @@ android:layout_alignParentRight="true" android:layout_centerVertical="true"/> + + + + + + + - Lightning Google Paramètres @@ -13,47 +11,15 @@ Voir la version mobile Voir la version ordinateur Utiliser un User Agent personnalisé - Page d\'accueil + Au démarrage Les paramètres ne s\'appliqueront qu\'aux nouveaux onglets Activer le mode plein écran Activer JavaScript - Restaurer les onglets si ils sont perdus - Paramètres - Dossier de téléchargement - Paramètres avancés - Code source - Licence - github.com/anthonycr/Lightning-Browser - Apache License 2.0 - NewSettings - Paramètres - Version de l\'application - Effacer le cache en quittant - Activer la redistribution du texte - Bloquer les images - Permettre aux sites d\'ouvrir dans de nouvelles fenêtres - Activer les témoins - Importer les favoris du Navigateur Internet - Taille du texte - AdvancedSettings - Hello world! - (Recommandé) - (Les sites peuvent paraître étranges) - Moteur de recherche - Rechercher - Modifer l\'échelle de l\'écran - Charger les pages dans une vue d\'ensemble - Restorer les onglets perdus au démarrage - Historique - Ajouter favoris + History + Aj. Favoris Favoris Partager Paramètres - Onglet privé - Nouvel onglet - (Navigateur d\'origine introuvable) - (Navigateur d\'origine trouvé) - Cacher la barre de status en naviguant - Effacer lex témoins - - + Incognito tab + New tab + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index d775be7..4015c81 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -55,5 +55,6 @@ (Supported stock browser detected) Hide status bar while browsing Clear browser cookies + Enable back and foward gestures \ No newline at end of file diff --git a/src/acr/browser/barebones/activities/AdvancedSettingsActivity.java b/src/acr/browser/barebones/activities/AdvancedSettingsActivity.java index dfe5290..96a5b36 100644 --- a/src/acr/browser/barebones/activities/AdvancedSettingsActivity.java +++ b/src/acr/browser/barebones/activities/AdvancedSettingsActivity.java @@ -39,8 +39,8 @@ public class AdvancedSettingsActivity extends Activity { static final String preferences = "settings"; static SharedPreferences settings; static SharedPreferences.Editor edit; - static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15; - static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10, cb11; + static RelativeLayout r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16; + static CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10, cb11, cb12; static Context CONTEXT; Handler messageHandler; @@ -76,6 +76,8 @@ public class AdvancedSettingsActivity extends Activity { r13 = (RelativeLayout) findViewById(R.id.r13); r14 = (RelativeLayout) findViewById(R.id.r14); r15 = (RelativeLayout) findViewById(R.id.r15); + r16 = (RelativeLayout) findViewById(R.id.r16); + cb1 = (CheckBox) findViewById(R.id.cb1); cb2 = (CheckBox) findViewById(R.id.cb2); @@ -88,6 +90,7 @@ public class AdvancedSettingsActivity extends Activity { cb9 = (CheckBox) findViewById(R.id.cb9); cb10 = (CheckBox) findViewById(R.id.cb10); cb11 = (CheckBox) findViewById(R.id.cb11); + cb12 = (CheckBox) findViewById(R.id.cb12); cb1.setChecked(settings.getBoolean("passwords", true)); cb2.setChecked(settings.getBoolean("cache", false)); @@ -100,6 +103,7 @@ public class AdvancedSettingsActivity extends Activity { cb9.setChecked(settings.getBoolean("overviewmode", true)); cb10.setChecked(settings.getBoolean("restoreclosed", true)); cb11.setChecked(settings.getBoolean("hidestatus", false)); + cb12.setChecked(settings.getBoolean("gestures", true)); r1(r1); r2(r2); @@ -116,6 +120,7 @@ public class AdvancedSettingsActivity extends Activity { r13(r13); r14(r14); r15(r15); + r16(r16); cb1(cb1); cb2(cb2); cb3(cb3); @@ -127,6 +132,7 @@ public class AdvancedSettingsActivity extends Activity { cb9(cb9); cb10(cb10); cb11(cb11); + cb12(cb12); back(); TextView importBookmarks = (TextView)findViewById(R.id.isImportAvailable); @@ -311,6 +317,19 @@ public class AdvancedSettingsActivity extends Activity { }); } + + void cb12(CheckBox view) { + view.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + edit.putBoolean("gestures", isChecked); + edit.commit(); + } + + }); + } void r1(RelativeLayout view) { view.setOnClickListener(new OnClickListener() { @@ -531,6 +550,17 @@ public class AdvancedSettingsActivity extends Activity { }); } + void r16(RelativeLayout view) { + view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + cb12.setChecked(!cb12.isChecked()); + } + + }); + } + public void clearHistory() { CookieManager c = CookieManager.getInstance(); CookieSyncManager.createInstance(this); diff --git a/src/acr/browser/barebones/activities/BrowserActivity.java b/src/acr/browser/barebones/activities/BrowserActivity.java index 8d9f675..71eef7d 100644 --- a/src/acr/browser/barebones/activities/BrowserActivity.java +++ b/src/acr/browser/barebones/activities/BrowserActivity.java @@ -42,6 +42,7 @@ import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.location.LocationManager; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -95,240 +96,78 @@ import android.widget.TextView.OnEditorActionListener; @SuppressWarnings("deprecation") public class BrowserActivity extends Activity implements OnTouchListener { - public static void generateHistory(final CustomWebView view, - final Context context) { - - Thread history = new Thread(new Runnable() { - - @Override - public void run() { - String historyHtml = HistoryPageVariables.Heading; - Cursor historyCursor = null; - String[][] h = new String[50][3]; - - try { - SQLiteDatabase s = historyHandler.getReadableDatabase(); - historyCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - - handler.sendEmptyMessage(1); - - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } + public static class ClickHandler extends Handler { - try { - if (historyCursor != null) { - if (historyCursor.moveToLast()) { - // Variable for holding the retrieved URL - int urlColumn = historyCursor.getColumnIndex("url"); - int titleColumn = historyCursor - .getColumnIndex("title"); - // Reference to the the column containing the URL - int n = 0; - do { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + String url = null; + url = msg.getData().getString("url"); + handleLongClickOnBookmarks(url, msg.arg1); + } - h[n][0] = historyCursor.getString(urlColumn); - h[n][2] = h[n][0].substring(0, - Math.min(100, h[n][0].length())) - + "..."; - h[n][1] = historyCursor.getString(titleColumn); - historyHtml += (HistoryPageVariables.Part1 - + h[n][0] + HistoryPageVariables.Part2 - + h[n][1] + HistoryPageVariables.Part3 - + h[n][2] + HistoryPageVariables.Part4); - n++; - } while (n < 49 && historyCursor.moveToPrevious()); - } - } - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } + } - historyHtml += BookmarkPageVariables.End; - File historyWebPage = new File(context.getFilesDir(), - "history.html"); - try { - FileWriter hWriter = new FileWriter(historyWebPage, false); - hWriter.write(historyHtml); - hWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (uBar.isShown()) { - currentTabTitle.setText("History"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } + static class Handle extends Handler { - view.loadUrl("file://" + historyWebPage); + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 1: { + currentTab.loadUrl(getUrl.getText().toString()); + break; + } + case 2: { + // deleteTab(msg.arg1); + break; + } + case 3: { + currentTab.invalidate(); + break; } - - }); - history.run(); - } - - public static void setUrlText(String url) { - if (url != null) { - if (!url.startsWith("file://")) { - getUrl.setText(url); - } else { - getUrl.setText(""); } + super.handleMessage(msg); } - } - public static void removeView(CustomWebView view) { - if (!showFullScreen) { - view.startAnimation(fadeOut); - } - background.removeView(view); - uBar.bringToFront(); } - private static BrowserActivity ACTIVITY; - - - private static int index = 0; - public static void renameBookmark(String url){ - index = 0; - for(int n = 0; n tabList; + public static List tabList; // variables public static CustomWebView currentTab; public static TextView currentTabTitle; + public static MultiAutoCompleteTextView getUrl; public static TextView[] urlTitle; public static ProgressBar browserProgress; @@ -357,6 +196,7 @@ public class BrowserActivity extends Activity implements OnTouchListener { public static boolean isPhone = false; public static boolean showFullScreen = false; public static boolean noStockBrowser = true; + public static boolean gestures; public static SharedPreferences settings; public static SharedPreferences.Editor edit; public static String user; @@ -382,294 +222,155 @@ public class BrowserActivity extends Activity implements OnTouchListener { public static Drawable active; public static LinearLayout tabLayout; - public static String[] getArray(String input) { - return input.split(SEPARATOR); - } - - public static int newId() { - - Random n = new Random(); - int id = n.nextInt(); - - while (tabList.contains(id)) { - id = n.nextInt(); + // creates the tab and returns the ID of the view + public static int createTab(String theUrl, boolean display) { + int id = -1; + for (int n = 0; n < MAX_TABS; n++) { + if (main[n] == null) { + id = n; + break; + } } - return id; - } - - @SuppressWarnings("unused") - public static void setFavicon(int id, Bitmap favicon) { - Drawable icon; - icon = new BitmapDrawable(null, favicon); - icon.setBounds(0, 0, width / 2, height / 2); - if (icon != null) { - urlTitle[id].setCompoundDrawables(icon, null, exitTab, null); - } else { - urlTitle[id] - .setCompoundDrawables(webpageOther, null, exitTab, null); - } - - } - - void deleteTab(final int del) { - if (API >= 11) { - main[del].onPause(); - } - main[del].stopLoading(); - main[del].clearHistory(); - edit.putString("oldPage", urlToLoad[del][0]); - edit.commit(); - urlToLoad[del][0] = null; - urlToLoad[del][1] = null; - if (API < 16) { - urlTitle[del].setBackgroundDrawable(active); - } else { - urlTitle[del].setBackground(active); - } - - urlTitle[del].setPadding(leftPad, 0, rightPad, 0); - Animation yolo = AnimationUtils.loadAnimation(this, R.anim.down); - yolo.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - // urlTitle[del].setVisibility(View.GONE); - tabLayout.post(new Runnable() { - - @Override - public void run() { - tabLayout.removeView(urlTitle[del]); + if (id != -1) { + if (tabList.size() > 0) { + if (display) { + if (API < 16) { + currentTabTitle.setBackgroundDrawable(inactive); + } else { + currentTabTitle.setBackground(inactive); } - - }); - findNewView(del); - main[del] = null; + currentTabTitle.setPadding(leftPad, 0, rightPad, 0); + } } - - @Override - public void onAnimationRepeat(Animation animation) { + final TextView title = new TextView(CONTEXT); + title.setText("New Tab"); + if (display) { + if (API < 16) { + title.setBackgroundDrawable(active); + } else { + title.setBackground(active); + } + } else { + if (API < 16) { + title.setBackgroundDrawable(inactive); + } else { + title.setBackground(inactive); + } } + title.setSingleLine(true); + title.setGravity(Gravity.CENTER_VERTICAL); + title.setHeight(height32); + title.setWidth(pixels); + title.setPadding(leftPad, 0, rightPad, 0); + title.setId(id); + title.setGravity(Gravity.CENTER_VERTICAL); - @Override - public void onAnimationStart(Animation animation) { - } + title.setCompoundDrawables(webpageOther, null, exitTab, null); - }); - urlTitle[del].startAnimation(yolo); - uBar.bringToFront(); - } + Drawable[] drawables = title.getCompoundDrawables(); + bounds = drawables[2].getBounds(); + title.setOnTouchListener(ACTIVITY); + Animation holo = AnimationUtils.loadAnimation(CONTEXT, R.anim.up); + tabLayout.addView(title); + title.setVisibility(View.INVISIBLE); + holo.setAnimationListener(new AnimationListener() { - void findNewView(int id) { - int delete = tabList.indexOf(id); - int leftId = id; - boolean right = false, left = false; - if (id == currentId) { + @Override + public void onAnimationEnd(Animation animation) { + } - if (main[id].isShown()) { - removeView(main[id]); - } + @Override + public void onAnimationRepeat(Animation animation) { + } - if (tabList.size() > delete + 1) { - id = tabList.get(delete + 1); - if (urlTitle[id].isShown()) { - background.addView(main[id]); - main[id].setVisibility(View.VISIBLE); - uBar.bringToFront(); - if (API < 16) { - urlTitle[id].setBackgroundDrawable(active); - } else { - urlTitle[id].setBackground(active); - } - urlTitle[id].setPadding(leftPad, 0, rightPad, 0); - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - right = true; - if (main[id].getProgress() < 100) { - onProgressChanged(id, main[id].getProgress()); - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - } else { - onProgressChanged(id, main[id].getProgress()); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - // break; + @Override + public void onAnimationStart(Animation animation) { + title.setVisibility(View.VISIBLE); } - } - if (!right) { - if (delete > 0) { - leftId = tabList.get(delete - 1); - if (urlTitle[leftId].isShown()) { - background.addView(main[leftId]); - main[leftId].setVisibility(View.VISIBLE); - // uBar.bringToFront(); - if (API < 16) { - urlTitle[leftId].setBackgroundDrawable(active); - } else { - urlTitle[leftId].setBackground(active); - } - urlTitle[leftId].setPadding(leftPad, 0, rightPad, 0); - currentId = leftId; - currentTab = main[leftId]; - currentTabTitle = urlTitle[leftId]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - left = true; - if (main[leftId].getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } - // break; - } + }); + title.startAnimation(holo); + urlTitle[id] = title; - } + urlTitle[id].setText("New Tab"); + if (theUrl != null) { + main[id] = generateTab(id, theUrl, display); + } else { + main[id] = generateTab(id, homepage, display); } } else { - right = left = true; - } - tabList.remove(delete); - if (!(right || left)) { - finish(); + Utils.showToast(CONTEXT, "Max number of tabs reached"); } - uBar.bringToFront(); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + return id; } - @Override - public void onLowMemory() { - for (int n = 0; n < MAX_TABS; n++) { - if (n != currentId && main[n] != null) { - main[n].freeMemory(); + public static void deleteBookmark(String url) { + File book = new File(CONTEXT.getFilesDir(), "bookmarks"); + File bookUrl = new File(CONTEXT.getFilesDir(), "bookurl"); + int n = 0; + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl)); + while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { + if (!bUrl[n].equalsIgnoreCase(url)) { + bookWriter.write(bTitle[n]); + urlWriter.write(bUrl[n]); + bookWriter.newLine(); + urlWriter.newLine(); + } + n++; } + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { } - super.onLowMemory(); + for (int p = 0; p < MAX_BOOKMARKS; p++) { + bUrl[p] = null; + bTitle[p] = null; + } + try { + BufferedReader readBook = new BufferedReader(new FileReader(book)); + BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); + String t, u; + int z = 0; + while ((t = readBook.readLine()) != null + && (u = readUrl.readLine()) != null && z < MAX_BOOKMARKS) { + bUrl[z] = u; + bTitle[z] = t; + z++; + } + readBook.close(); + readUrl.close(); + } catch (IOException ignored) { + } + openBookmarks(CONTEXT, currentTab); } - void enter() { - getUrl.setOnKeyListener(new OnKeyListener() { + public static void generateHistory(final CustomWebView view, + final Context context) { + + Thread history = new Thread(new Runnable() { @Override - public boolean onKey(View arg0, int arg1, KeyEvent arg2) { + public void run() { + String historyHtml = HistoryPageVariables.Heading; + Cursor historyCursor = null; + String[][] h = new String[50][3]; - switch (arg1) { - case KeyEvent.KEYCODE_ENTER: - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), CONTEXT); - return true; - default: - break; - } - return false; - } + try { + SQLiteDatabase s = historyHandler.getReadableDatabase(); + historyCursor = s.query("history", // URI + // of + columns, // Which columns to return + null, // Which rows to return (all rows) + null, // Selection arguments (none) + null, null, null); - }); - getUrl.setOnEditorActionListener(new OnEditorActionListener() { - - @Override - public boolean onEditorAction(TextView arg0, int actionId, - KeyEvent arg2) { - if (actionId == EditorInfo.IME_ACTION_GO - || actionId == EditorInfo.IME_ACTION_DONE - || actionId == EditorInfo.IME_ACTION_NEXT - || actionId == EditorInfo.IME_ACTION_SEND - || actionId == EditorInfo.IME_ACTION_SEARCH - || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), CONTEXT); - return true; - } - return false; - } - - }); - } - - @SuppressLint("HandlerLeak") - void enterUrl() { - getUrl = (MultiAutoCompleteTextView) findViewById(R.id.enterUrl); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setTextColor(getResources().getColor(android.R.color.black)); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setBackgroundResource(R.drawable.book); - getUrl.setPadding(tenPad, 0, tenPad, 0); - final List> list = new ArrayList>(); - handler = new Handler() { - - @Override - public void handleMessage(Message msg) { - - switch (msg.what) { - case 1: { - SimpleAdapter adapter = new SimpleAdapter(CONTEXT, list, - R.layout.two_line_autocomplete, new String[] { - "title", "url" }, new int[] { R.id.title, - R.id.url }); - - getUrl.setAdapter(adapter); - - break; - } - case 2: { - - break; - } - } - } - }; - - Thread updateAutoComplete = new Thread(new Runnable() { - - @Override - public void run() { - - Cursor c = null; - Cursor managedCursor = null; - columns = new String[] { "url", "title" }; - try { - - bookmarks = Browser.BOOKMARKS_URI; - c = getContentResolver().query(bookmarks, columns, null, - null, null); - } catch (SQLiteException ignored) { - } catch (IllegalStateException ignored) { - } catch (NullPointerException ignored) { - } - - if (c != null) { - noStockBrowser = false; - Log.i("Browser", "detected AOSP browser"); - } else { - noStockBrowser = true; - Log.e("Browser", "did not detect AOSP browser"); - } - if (c != null) { - c.close(); - } - try { - - managedCursor = null; - SQLiteDatabase s = historyHandler.getReadableDatabase(); - managedCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); + handler.sendEmptyMessage(1); } catch (SQLiteException ignored) { } catch (NullPointerException ignored) { @@ -677,135 +378,101 @@ public class BrowserActivity extends Activity implements OnTouchListener { } try { - if (managedCursor != null) { - - if (managedCursor.moveToLast()) { - + if (historyCursor != null) { + if (historyCursor.moveToLast()) { // Variable for holding the retrieved URL - - int urlColumn = managedCursor.getColumnIndex("url"); - int titleColumn = managedCursor + int urlColumn = historyCursor.getColumnIndex("url"); + int titleColumn = historyCursor .getColumnIndex("title"); // Reference to the the column containing the URL + int n = 0; do { - String urlA = managedCursor - .getString(urlColumn); - String title = managedCursor - .getString(titleColumn); - Map map = new HashMap(); - map.put("title", title); - map.put("url", urlA); - list.add(map); - } while (managedCursor.moveToPrevious()); + + h[n][0] = historyCursor.getString(urlColumn); + h[n][2] = h[n][0].substring(0, + Math.min(100, h[n][0].length())) + + "..."; + h[n][1] = historyCursor.getString(titleColumn); + historyHtml += (HistoryPageVariables.Part1 + + h[n][0] + HistoryPageVariables.Part2 + + h[n][1] + HistoryPageVariables.Part3 + + h[n][2] + HistoryPageVariables.Part4); + n++; + } while (n < 49 && historyCursor.moveToPrevious()); } } - handler.sendEmptyMessage(1); } catch (SQLiteException ignored) { } catch (NullPointerException ignored) { } catch (IllegalStateException ignored) { } - managedCursor.close(); - } - - }); - try { - updateAutoComplete.start(); - } catch (NullPointerException ignored) { - } catch (SQLiteMisuseException ignored) { - } catch (IllegalStateException ignored) { - } - - getUrl.setThreshold(1); - getUrl.setTokenizer(new SpaceTokenizer()); - getUrl.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView arg0, View arg1, int arg2, - long arg3) { + historyHtml += BookmarkPageVariables.End; + File historyWebPage = new File(context.getFilesDir(), + "history.html"); try { - String url; - url = ((TextView) arg1.findViewById(R.id.url)).getText() - .toString(); - getUrl.setText(url); - searchTheWeb(url, CONTEXT); - url = null; + FileWriter hWriter = new FileWriter(historyWebPage, false); + hWriter.write(historyHtml); + hWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (uBar.isShown()) { + currentTabTitle.setText("History"); + setUrlText(""); getUrl.setPadding(tenPad, 0, tenPad, 0); - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - } catch (NullPointerException e) { - Log.e("Browser Error: ", - "NullPointerException on item click"); } + + view.loadUrl("file://" + historyWebPage); } }); - - getUrl.setSelectAllOnFocus(true); // allows edittext to select all when - // clicked + history.run(); } - void back() { - ImageView exit = (ImageView) findViewById(R.id.exit); - exit.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(exit); + public static CustomWebView generateTab(final int pageToView, String Url, + final boolean display) { + CustomWebView view = new CustomWebView(CONTEXT); + view.setId(pageToView); + view.setWebViewClient(new CustomWebViewClient(ACTIVITY)); + view.setWebChromeClient(new CustomChromeClient(ACTIVITY)); + if (API > 8) { + view.setDownloadListener(new CustomDownloadListener(ACTIVITY)); } - exit.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - if (currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - } - - } - - }); - exit.setOnLongClickListener(new OnLongClickListener() { - - @Override - public boolean onLongClick(View v) { - finish(); - return true; + if (display) { + if (currentId != -1) { + background.removeView(currentTab); } + background.addView(view); + view.requestFocus(); + currentId = pageToView; + currentTab = main[pageToView]; + currentTabTitle = urlTitle[pageToView]; + } + uBar.bringToFront(); + if (Url.contains("about:home")) { + goBookmarks(CONTEXT, view); + } else if (Url.contains("about:blank")) { + view.loadUrl(""); + } else { + searchTheWeb(Url, CONTEXT); - }); - + } + Log.i("Browser", "tab complete"); + return view; } - @Override - public void finish() { - background.clearDisappearingChildren(); - background.removeView(currentTab); - tabScroll.clearDisappearingChildren(); - if (settings.getBoolean("cache", false)) { - currentTab.clearCache(true); - Log.i("Lightning", "Cache Cleared"); - } - super.finish(); + public static String[] getArray(String input) { + return input.split(SEPARATOR); } - void forward() { - ImageView forward = (ImageView) findViewById(R.id.forward); - forward.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(forward); + public static void goBack(CustomWebView view) { + if (view.isShown() && view.canGoBack() && gestures) { + view.goBack(); } - forward.setOnClickListener(new OnClickListener() { + Animation left = AnimationUtils.loadAnimation(CONTEXT, R.anim.left); + background.startAnimation(left); - @Override - public void onClick(View v) { - if (currentTab.canGoForward()) { - currentTab.goForward(); - } - } - - }); } static void goBookmarks(Context context, CustomWebView view) { @@ -831,994 +498,1453 @@ public class BrowserActivity extends Activity implements OnTouchListener { openBookmarks(context, view); } - @SuppressLint("InlinedApi") - private void initialize() { + public static void goForward(CustomWebView view) { + if (view.isShown() && view.canGoForward() && gestures) { + view.goForward(); + } + Animation right = AnimationUtils.loadAnimation(CONTEXT, R.anim.right); + background.startAnimation(right); + } - tabList = new ArrayList(); - bUrl = new String[MAX_BOOKMARKS]; - bTitle = new String[MAX_BOOKMARKS]; - main = new CustomWebView[MAX_TABS]; - urlTitle = new TextView[MAX_TABS]; - urlToLoad = new String[MAX_TABS][2]; - fullScreen = false; - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - historyHandler = new DatabaseHandler(this); - cookieManager = CookieManager.getInstance(); - CookieSyncManager.createInstance(CONTEXT); - cookieManager.setAcceptCookie(settings.getBoolean("cookies", true)); + public static void handleLongClickOnBookmarks(final String clickedURL, + final int n) { + if (clickedURL != null) { - progressBar = (ProgressBar) findViewById(R.id.progressBar1); - browserProgress = (ProgressBar) findViewById(R.id.progressBar); - browserProgress.setVisibility(View.GONE); + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + renameBookmark(clickedURL); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + main[n].loadUrl(clickedURL); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + deleteBookmark(clickedURL); + break; + } + } + } + }; - if (API >= 11) { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ics_animation)); - } else { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ginger_animation)); + AlertDialog.Builder builder = new AlertDialog.Builder(CONTEXT); // dialog + builder.setMessage("What would you like to do with this bookmark?") + .setPositiveButton("Rename", dialogClickListener) + .setNegativeButton("Open", dialogClickListener) + .setNeutralButton("Delete", dialogClickListener).show(); } + } - showFullScreen = settings.getBoolean("fullscreen", false); - uBar = (RelativeLayout) findViewById(R.id.urlBar); - screen = (RelativeLayout) findViewById(R.id.background); - slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up); - slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down); - fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); - fadeOut.setDuration(250); - fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); - // mShortAnimationDuration = getResources().getInteger( - // android.R.integer.config_mediumAnimTime); - slideUp.setAnimationListener(new AnimationListener() { + public static int newId() { - @Override - public void onAnimationEnd(Animation arg0) { - uBar.setVisibility(View.GONE); - } + Random n = new Random(); + int id = n.nextInt(); - @Override - public void onAnimationRepeat(Animation arg0) { + while (tabList.contains(id)) { + id = n.nextInt(); + } + return id; + } + // new tab method, takes the id of the tab to be created and the url to load + public static int newTab(final String theUrl, final boolean display) { + Log.i("Browser", "making tab"); + homepage = settings.getString("home", HOMEPAGE); + int finalID = createTab(theUrl, display); + if (finalID != -1) { + tabList.add(finalID); + if (display) { + currentId = finalID; + currentTab = main[finalID]; + currentTabTitle = urlTitle[finalID]; } - @Override - public void onAnimationStart(Animation arg0) { + return finalID; + } else { + return 0; + } + } + public static void onCreateWindow(Message resultMsg) { + newTab("", true); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(currentTab); + resultMsg.sendToTarget(); + browserHandler.postDelayed(new Runnable() { + @Override + public void run() { + currentTab.loadUrl(getUrl.getText().toString()); } + }, 500); + } - }); - slideDown.setAnimationListener(new AnimationListener() { + public static void onHideCustomView(FrameLayout fullScreenContainer, + CustomViewCallback mCustomViewCallback, int orientation) { + FrameLayout screen = (FrameLayout) ACTIVITY.getWindow().getDecorView(); + screen.removeView(fullScreenContainer); + fullScreenContainer = null; + mCustomViewCallback.onCustomViewHidden(); + ACTIVITY.setRequestedOrientation(orientation); + background.addView(currentTab); + uBar.setVisibility(View.VISIBLE); + uBar.bringToFront(); + } - @Override - public void onAnimationEnd(Animation animation) { + + private static Message click; + public static boolean onLongClick() { + int n = currentId; + if(currentId == -1 || currentTab == null){ + return true; + } + final HitTestResult result = currentTab.getHitTestResult(); + if (currentTab.getUrl().contains( + "file://" + CONTEXT.getFilesDir() + "/bookmarks.html")) { + click = new Message(); + click.arg1 = n; + click.setTarget(new ClickHandler()); + currentTab.requestFocusNodeHref(click); - } + return true; + } else if (result != null) { + if (result.getExtra() != null) { + if (result.getType() == 5 && API > 8) { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + int num = currentId; + newTab(result.getExtra(), false); + // urlTitle[num].performClick(); + currentId = num; + currentTab = main[num]; + currentTabTitle = urlTitle[num]; + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + currentTab.loadUrl(result.getExtra()); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API > 8) { + String url = result.getExtra(); - @Override - public void onAnimationRepeat(Animation animation) { + Utils.downloadFile(CONTEXT, url, null, null); - } + } + break; + } + } + } + }; - @Override - public void onAnimationStart(Animation animation) { - uBar.setVisibility(View.VISIBLE); - } + AlertDialog.Builder builder = new AlertDialog.Builder( + CONTEXT); // dialog + builder.setMessage( + "What would you like to do with this image?") + .setPositiveButton("Open in New Tab", + dialogClickListener) + .setNegativeButton("Open Normally", + dialogClickListener) + .setNeutralButton("Download Image", + dialogClickListener).show(); - }); + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + int num = currentId; + newTab(result.getExtra(), false); + currentId = num; + currentTab = main[num]; + currentTabTitle = urlTitle[num]; + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + currentTab.loadUrl(result.getExtra()); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API < 11) { + android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ACTIVITY + .getSystemService(Context.CLIPBOARD_SERVICE); + clipboard.setText(result.getExtra()); + } else { + ClipboardManager clipboard = (ClipboardManager) ACTIVITY + .getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText( + "label", result.getExtra()); + clipboard.setPrimaryClip(clip); + } + break; + } + } + } + }; - RelativeLayout refreshLayout = (RelativeLayout) findViewById(R.id.refreshLayout); - refreshLayout.setBackgroundResource(R.drawable.button); + AlertDialog.Builder builder = new AlertDialog.Builder( + CONTEXT); // dialog + builder.setTitle(result.getExtra()) + .setMessage( + "What do you want to do with this link?") + .setPositiveButton("Open in New Tab", + dialogClickListener) + .setNegativeButton("Open Normally", + dialogClickListener) + .setNeutralButton("Copy link", dialogClickListener) + .show(); + } + } + return true; - // user agent - if (API < 17) { - user = new WebView(CONTEXT).getSettings().getUserAgentString(); } else { - user = WebSettings.getDefaultUserAgent(this); + return false; } + } - background = (FrameLayout) findViewById(R.id.holder); - defaultUser = user; // setting mobile user - // agent - switch (settings.getInt("search", 1)) { - case 1: - SEARCH = FinalVariables.GOOGLE_SEARCH; - break; - case 2: - SEARCH = FinalVariables.BING_SEARCH; - break; - case 3: - SEARCH = FinalVariables.YAHOO_SEARCH; - break; - case 4: - SEARCH = FinalVariables.STARTPAGE_SEARCH; - break; - case 5: - SEARCH = FinalVariables.DUCK_SEARCH; - break; - case 6: - SEARCH = FinalVariables.BAIDU_SEARCH; - break; - case 7: - SEARCH = FinalVariables.YANDEX_SEARCH; - break; - case 8: - SEARCH = FinalVariables.DUCK_LITE_SEARCH; - break; - } - - exitTab = getResources().getDrawable(R.drawable.stop); // user - // agent - homepage = settings.getString("home", HOMEPAGE); // initializing - // the - // stored - // homepage - // variable - - // initializing variables declared + public static void onPageFinished(WebView view, String url) { + if (view.isShown()) { + view.invalidate(); + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); - height = getResources().getDrawable(R.drawable.loading) - .getMinimumHeight(); - width = getResources().getDrawable(R.drawable.loading) - .getMinimumWidth(); + if (showFullScreen && uBar.isShown()) { + uBar.startAnimation(slideUp); + } + } + view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); + Log.i("Lightning", "Page Finished"); + loadTime = System.currentTimeMillis() - loadTime; + Log.i("Lightning", "Load Time: " + loadTime); + } - // hides keyboard so it doesn't default pop up - this.getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + + private static int numberPage; + public static void onPageStarted(WebView view, String url, Bitmap favicon) { + Log.i("Lightning", "Page Started"); + loadTime = System.currentTimeMillis(); + numberPage = view.getId(); - // opens icondatabase so that favicons can be stored - WebIconDatabase.getInstance().open( - getDir("icons", MODE_PRIVATE).getPath()); + if (url.startsWith("file://")) { + view.getSettings().setUseWideViewPort(false); + } else { + view.getSettings().setUseWideViewPort( + settings.getBoolean("wideviewport", true)); + } - // scroll view containing tabs - tabLayout = (LinearLayout) findViewById(R.id.tabLayout); - tabScroll = (HorizontalScrollView) findViewById(R.id.tabScroll); - tabScroll.setBackgroundColor(getResources().getColor(R.color.black)); - tabScroll.setHorizontalScrollBarEnabled(false); - if (API > 8) { - tabScroll.setOverScrollMode(View.OVER_SCROLL_NEVER); // disallow - // overscroll + if (view.isShown()) { + refresh.setVisibility(View.INVISIBLE); + progressBar.setVisibility(View.VISIBLE); + setUrlText(url); } - // image dimensions and initialization - final int dps = 175; - final float scale = getApplicationContext().getResources() - .getDisplayMetrics().density; - pixels = (int) (dps * scale + 0.5f); - leftPad = (int) (17 * scale + 0.5f); - rightPad = (int) (15 * scale + 0.5f); - height32 = (int) (32 * scale + 0.5f); - tenPad = (int) (10 * scale + 0.5f); + urlTitle[numberPage].setCompoundDrawables(webpageOther, null, exitTab, + null); + if (favicon != null) { + setFavicon(view.getId(), favicon); + } - webpageOther = getResources().getDrawable(R.drawable.webpage); - incognitoPage = getResources().getDrawable(R.drawable.incognito); - webpageOther.setBounds(0, 0, width / 2, height / 2); - incognitoPage.setBounds(0, 0, width / 2, height / 2); - exitTab.setBounds(0, 0, width * 2 / 3, height * 2 / 3); + getUrl.setPadding(tenPad, 0, tenPad, 0); + urlToLoad[numberPage][0] = url; - Thread startup = new Thread(new Runnable() { + if (!uBar.isShown() && showFullScreen) { + uBar.startAnimation(slideDown); + } + } - @Override - public void run() { - reopenOldTabs(); // restores old tabs or creates a new one + public static void onProgressChanged(int id, int progress) { + if (id == currentId) { + browserProgress.setProgress(progress); + if (progress < 100) { + browserProgress.setVisibility(View.VISIBLE); + } else { + browserProgress.setVisibility(View.GONE); } + } + } - }); - startup.run(); + public static void onReceivedTitle(int numberPage, String title) { + if (title != null && title.length() != 0) { + urlTitle[numberPage].setText(title); + urlToLoad[numberPage][1] = title; + Utils.updateHistory(CONTEXT, CONTEXT.getContentResolver(), + noStockBrowser, urlToLoad[numberPage][0], title); + } + } - // new tab button - ImageView newTab = (ImageView) findViewById(R.id.newTab); - newTab.setBackgroundResource(R.drawable.button); - newTab.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - newTab(homepage, true); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - }, 100L); + public static void onShowCustomView() { + background.removeView(currentTab); + uBar.setVisibility(View.GONE); + } - } - }); - newTab.setOnLongClickListener(new OnLongClickListener() { + static void openBookmarks(Context context, CustomWebView view) { + String bookmarkHtml = BookmarkPageVariables.Heading; - @Override - public boolean onLongClick(View v) { - if (settings.getString("oldPage", "").length() > 0) { - newTab(settings.getString("oldPage", ""), true); - edit.putString("oldPage", ""); - edit.commit(); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), - 0); - } - }, 100L); - } - return true; + for (int n = 0; n < MAX_BOOKMARKS; n++) { + if (bUrl[n] != null) { + bookmarkHtml += (BookmarkPageVariables.Part1 + bUrl[n] + + BookmarkPageVariables.Part2 + bUrl[n] + + BookmarkPageVariables.Part3 + bTitle[n] + BookmarkPageVariables.Part4); } + } + bookmarkHtml += BookmarkPageVariables.End; + File bookmarkWebPage = new File(context.getFilesDir(), "bookmarks.html"); + try { + FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); + bookWriter.write(bookmarkHtml); + bookWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + view.loadUrl("file://" + bookmarkWebPage); - }); - refresh = (ImageView) findViewById(R.id.refresh); - refreshLayout.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View arg0) { + if (uBar.isShown()) { + currentTabTitle.setText("Bookmarks"); + setUrlText(""); + getUrl.setPadding(tenPad, 0, tenPad, 0); + } - if (currentTab.getProgress() < 100) { - currentTab.stopLoading(); - } else { - currentTab.reload(); - } - } + } - }); + public static void openFileChooser(ValueCallback uploadMsg) { + mUploadMessage = uploadMsg; + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + i.setType("*/*"); + ACTIVITY.startActivityForResult( + Intent.createChooser(i, "File Chooser"), 1); + } - enterUrl(); - if (showFullScreen) { - toggleFullScreen(); + public static void reinitializeSettings() { + int size = tabList.size(); + cookieManager = CookieManager.getInstance(); + CookieSyncManager.createInstance(CONTEXT); + cookieManager.setAcceptCookie(settings.getBoolean("cookies", true)); + for (int n = 0; n < size; n++) { + main[tabList.get(n)].settingsInitialization(CONTEXT); } - browserHandler = new Handle(); - } - static class Handle extends Handler { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case 1: { - currentTab.loadUrl(getUrl.getText().toString()); - break; - } - case 2: { - // deleteTab(msg.arg1); - break; - } - case 3: { - currentTab.invalidate(); - break; - } + public static void renameBookmark(String url) { + index = 0; + for (int n = 0; n < MAX_BOOKMARKS; n++) { + if (bUrl[n] != null) { + if (bUrl[n].equalsIgnoreCase(url)) { + index = n; + break; + } } - super.handleMessage(msg); } - } - - void reopenOldTabs() { - Intent url = getIntent(); - String URL = url.getDataString(); - boolean oldTabs = false; + final AlertDialog.Builder homePicker = new AlertDialog.Builder(CONTEXT); + homePicker.setTitle("Rename Bookmark"); + final EditText getText = new EditText(CONTEXT); + getText.setText(bTitle[index]); - if (settings.getBoolean("savetabs", true)) { - if (URL != null) { - // opens a new tab with the url if its there - int n = newTab(URL, true); - main[n].resumeTimers(); - oldTabs = true; + homePicker.setView(getText); + homePicker.setPositiveButton("OK", + new DialogInterface.OnClickListener() { - } - boolean first = false; - for (String aMemoryURL : memoryURL) { - if (aMemoryURL.length() > 0) { - if (!first) { - int n = newTab("", !oldTabs); - main[n].resumeTimers(); - main[n].getSettings().setCacheMode( - WebSettings.LOAD_CACHE_ELSE_NETWORK); - main[n].loadUrl(aMemoryURL); - } else { - int n = newTab("", false); - main[n].getSettings().setCacheMode( - WebSettings.LOAD_CACHE_ELSE_NETWORK); - main[n].loadUrl(aMemoryURL); + @Override + public void onClick(DialogInterface dialog, int which) { + bTitle[index] = getText.getText().toString(); + File book = new File(CONTEXT.getFilesDir(), "bookmarks"); + File bookUrl = new File(CONTEXT.getFilesDir(), + "bookurl"); + int n = 0; + try { + BufferedWriter bookWriter = new BufferedWriter( + new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter( + new FileWriter(bookUrl)); + while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { + bookWriter.write(bTitle[n]); + urlWriter.write(bUrl[n]); + bookWriter.newLine(); + urlWriter.newLine(); + n++; + } + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + for (int p = 0; p < MAX_BOOKMARKS; p++) { + bUrl[p] = null; + bTitle[p] = null; + } + try { + BufferedReader readBook = new BufferedReader( + new FileReader(book)); + BufferedReader readUrl = new BufferedReader( + new FileReader(bookUrl)); + String t, u; + int z = 0; + while ((t = readBook.readLine()) != null + && (u = readUrl.readLine()) != null + && z < MAX_BOOKMARKS) { + bUrl[z] = u; + bTitle[z] = t; + z++; + } + readBook.close(); + readUrl.close(); + } catch (IOException ignored) { + } + openBookmarks(CONTEXT, currentTab); } - oldTabs = true; - } - - } + }); + homePicker.show(); - if (!oldTabs) { - int n = newTab(homepage, true); - main[n].resumeTimers(); - } - } else { - if (URL != null) { - // opens a new tab with the URL if its there - int n = newTab(URL, true); - main[n].resumeTimers(); + } - } else { - // otherwise it opens the home-page - int n = newTab(homepage, true); - main[n].resumeTimers(); + static void searchTheWeb(String query, Context context) { + query = query.trim(); + currentTab.stopLoading(); - } + if (query.startsWith("www.")) { + query = "http://" + query; + } else if (query.startsWith("ftp.")) { + query = "ftp://" + query; } - } - public static CustomWebView generateTab(final int pageToView, String Url, - final boolean display) { - CustomWebView view = new CustomWebView(CONTEXT); - view.setId(pageToView); - view.setWebViewClient(new CustomWebViewClient(ACTIVITY)); - view.setWebChromeClient(new CustomChromeClient(ACTIVITY)); - if (API > 8) { - view.setDownloadListener(new CustomDownloadListener(ACTIVITY)); - } + boolean containsPeriod = query.contains("."); + boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) && (query + .replace(".", "").length() >= 4)); + boolean aboutScheme = query.contains("about:"); + boolean validURL = (query.startsWith("ftp://") + || query.startsWith("http://") || query.startsWith("file://") || query + .startsWith("https://")) || isIPAddress; + boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); - if (display) { - if (currentId != -1) { - background.removeView(currentTab); - } - background.addView(view); - view.requestFocus(); - currentId = pageToView; - currentTab = main[pageToView]; - currentTabTitle = urlTitle[pageToView]; - } - uBar.bringToFront(); - if (Url.contains("about:home")) { - goBookmarks(CONTEXT, view); - } else if (Url.contains("about:blank")) { - view.loadUrl(""); + if (query.contains("about:home") || query.contains("about:bookmarks")) { + goBookmarks(context, currentTab); + } else if (query.contains("about:history")) { + generateHistory(currentTab, context); + } else if (isSearch) { + query.replaceAll(" ", "+"); + currentTab.loadUrl(SEARCH + query); + } else if (!validURL) { + currentTab.loadUrl("http://" + query); } else { - if (!Url.startsWith("http") && Url != "") { - Url = "http://" + Url; - } - view.loadUrl(Url); - + currentTab.loadUrl(query); } - Log.i("Browser", "tab complete"); - return view; - } - - private void newSettings() { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); } - // new tab method, takes the id of the tab to be created and the url to load - public static int newTab(final String theUrl, final boolean display) { - Log.i("Browser", "making tab"); - homepage = settings.getString("home", HOMEPAGE); - int finalID = createTab(theUrl, display); - if (finalID != -1) { - tabList.add(finalID); - if (display) { - currentId = finalID; - currentTab = main[finalID]; - currentTabTitle = urlTitle[finalID]; - } - - return finalID; + @SuppressWarnings("unused") + public static void setFavicon(int id, Bitmap favicon) { + Drawable icon; + icon = new BitmapDrawable(null, favicon); + icon.setBounds(0, 0, width / 2, height / 2); + if (icon != null) { + urlTitle[id].setCompoundDrawables(icon, null, exitTab, null); } else { - return 0; + urlTitle[id] + .setCompoundDrawables(webpageOther, null, exitTab, null); } + } - // creates the tab and returns the ID of the view - public static int createTab(String theUrl, boolean display) { - int id = -1; - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] == null) { - id = n; - break; - } - } - if (id != -1) { - if (id > 0) { - if (display) { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else { - currentTabTitle.setBackground(inactive); - } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - } - } - final TextView title = new TextView(CONTEXT); - title.setText("New Tab"); - if (display) { - if (API < 16) { - title.setBackgroundDrawable(active); - } else { - title.setBackground(active); - } + public static void setUrlText(String url) { + if (url != null) { + if (!url.startsWith("file://")) { + getUrl.setText(url); } else { - if (API < 16) { - title.setBackgroundDrawable(inactive); - } else { - title.setBackground(inactive); - } + getUrl.setText(""); } - title.setSingleLine(true); - title.setGravity(Gravity.CENTER_VERTICAL); - title.setHeight(height32); - title.setWidth(pixels); - title.setPadding(leftPad, 0, rightPad, 0); - title.setId(id); - title.setGravity(Gravity.CENTER_VERTICAL); - - title.setCompoundDrawables(webpageOther, null, exitTab, null); - - Drawable[] drawables = title.getCompoundDrawables(); - bounds = drawables[2].getBounds(); - title.setOnTouchListener(ACTIVITY); - Animation holo = AnimationUtils.loadAnimation(CONTEXT, R.anim.up); - tabLayout.addView(title); - title.setVisibility(View.INVISIBLE); - holo.setAnimationListener(new AnimationListener() { + } + } - @Override - public void onAnimationEnd(Animation animation) { - } + static void share() { + Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); - @Override - public void onAnimationRepeat(Animation animation) { - } + // set the type + shareIntent.setType("text/plain"); - @Override - public void onAnimationStart(Animation animation) { - title.setVisibility(View.VISIBLE); - } + // add a subject + shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, + urlToLoad[currentId][1]); - }); - title.startAnimation(holo); - urlTitle[id] = title; + // build the body of the message to be shared + String shareMessage = urlToLoad[currentId][0]; - urlTitle[id].setText("New Tab"); + // add the message + shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); - if (theUrl != null) { - main[id] = generateTab(id, theUrl, display); - } else { - main[id] = generateTab(id, homepage, display); - } + // start the chooser for sharing + CONTEXT.startActivity(Intent.createChooser(shareIntent, + "Share this page")); + } + public static void toggleFullScreen() { + showFullScreen = settings.getBoolean("fullscreen", false); + CustomWebView.showFullScreen = showFullScreen; + if (fullScreen) { + background.removeView(uBar); + screen.addView(uBar); + fullScreen = false; } else { - Utils.showToast(CONTEXT, "Max number of tabs reached"); + screen.removeView(uBar); + background.addView(uBar); + fullScreen = true; } - return id; } - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent intent) { - if (requestCode == 1) { - if (null == mUploadMessage) - return; - Uri result = intent == null || resultCode != RESULT_OK ? null - : intent.getData(); - mUploadMessage.onReceiveValue(result); - mUploadMessage = null; - + void back() { + ImageView exit = (ImageView) findViewById(R.id.exit); + exit.setBackgroundResource(R.drawable.button); + if (isPhone) { + RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); + relativeLayout1.removeView(exit); } - } + exit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if (currentTab.canGoBack()) { + currentTab.goBack(); + } else { + deleteTab(currentId); + } - @Override - public void onBackPressed() { - try { - if (showFullScreen && !uBar.isShown()) { - uBar.startAnimation(slideDown); } - if (currentTab.isShown() && currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - uBar.bringToFront(); + + }); + exit.setOnLongClickListener(new OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + finish(); + return true; } - } catch (NullPointerException ignored) { - } - return; - } - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (settings.getBoolean("textreflow", false)) { - currentTab.getSettings().setLayoutAlgorithm( - LayoutAlgorithm.NARROW_COLUMNS); - } else { - currentTab.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); - } + }); } - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); // displays main xml layout - CONTEXT = this; - ACTIVITY = this; - settings = getSharedPreferences("settings", 0); - edit = settings.edit(); - - if (settings.getBoolean("hidestatus", false)) { - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); + void deleteTab(final int del) { + if (API >= 11) { + main[del].onPause(); } - if (settings.getBoolean("savetabs", true)) { - String mem = settings.getString("memory", ""); - edit.putString("memory", ""); - memoryURL = new String[MAX_TABS]; - memoryURL = getArray(mem); + main[del].stopLoading(); + main[del].clearHistory(); + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + edit.putString("oldPage", urlToLoad[del][0]); + edit.commit(); + urlToLoad[del][0] = null; + urlToLoad[del][1] = null; + if (API < 16) { + urlTitle[del].setBackgroundDrawable(active); + } else { + urlTitle[del].setBackground(active); } - inactive = getResources().getDrawable(R.drawable.bg_inactive); - active = getResources().getDrawable(R.drawable.bg_press); - initialize(); // sets up random stuff - options(); // allows options to be opened - enter();// enter url bar - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); + urlTitle[del].setPadding(leftPad, 0, rightPad, 0); + Animation yolo = AnimationUtils.loadAnimation(this, R.anim.down); + yolo.setAnimationListener(new AnimationListener() { - float widthInInches = metrics.widthPixels / metrics.xdpi; - float heightInInches = metrics.heightPixels / metrics.ydpi; - double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) - + Math.pow(heightInInches, 2)); - // 0.5" buffer for 7" devices - isPhone = sizeInInches < 6.5; - forward();// forward button - back(); - if (settings.getInt("first", 0) == 0) { // This dialog alerts the user - // to some navigation - // techniques - String message = "1. Long-press back button to exit browser\n\n" - + "2. Swipe from left edge toward the right (---->) to go back\n\n" - + "3. Swipe from right edge toward the left (<----)to go forward\n\n" - + "4. Visit settings and advanced settings to change options\n\n" - + "5. Long-press on the new tab button to open the last closed tab"; + @Override + public void onAnimationEnd(Animation animation) { + // urlTitle[del].setVisibility(View.GONE); + tabLayout.post(new Runnable() { - Utils.createInformativeDialog(CONTEXT, "Browser Tips", message); - edit.putInt("first", 1); - edit.commit(); - } + @Override + public void run() { + tabLayout.removeView(urlTitle[del]); + } - } + }); + findNewView(del); + main[del] = null; + } - @Override - public boolean onCreateOptionsMenu(Menu menu) { + @Override + public void onAnimationRepeat(Animation animation) { + } - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.menu, menu); + @Override + public void onAnimationStart(Animation animation) { + } - return true; + }); + urlTitle[del].startAnimation(yolo); + uBar.bringToFront(); } - /* - * (non-Javadoc) - * - * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) - */ - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_SEARCH: { - getUrl.requestFocus(); - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - manager.showSoftInput(getUrl, 0); + void enter() { + getUrl.setOnKeyListener(new OnKeyListener() { - break; - } - case KeyEvent.KEYCODE_F5: { - currentTab.reload(); - } - case KeyEvent.KEYCODE_ESCAPE: { - currentTab.stopLoading(); - } - case KeyEvent.KEYCODE_TAB: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (!manager.isActive()) { - newTab(homepage, true); - } + @Override + public boolean onKey(View arg0, int arg1, KeyEvent arg2) { - } - case KeyEvent.KEYCODE_F12: { - finish(); - } - case KeyEvent.KEYCODE_F6: { - getUrl.selectAll(); - } - case KeyEvent.KEYCODE_F10: { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); - } - case KeyEvent.KEYCODE_F11: { - toggleFullScreen(); - } - case KeyEvent.KEYCODE_DEL: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (!manager.isActive()) { - currentTab.goBack(); + switch (arg1) { + case KeyEvent.KEYCODE_ENTER: + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + searchTheWeb(getUrl.getText().toString(), CONTEXT); + return true; + default: + break; + } + return false; } - } - } - return super.onKeyDown(keyCode, event); - } - @Override - public boolean onKeyLongPress(int keyCode, KeyEvent event) { + }); + getUrl.setOnEditorActionListener(new OnEditorActionListener() { - if (keyCode == KeyEvent.KEYCODE_BACK) { - if (!settings.getBoolean("restoreclosed", true)) { - for (int n = 0; n < MAX_TABS; n++) { - urlToLoad[n][0] = null; + @Override + public boolean onEditorAction(TextView arg0, int actionId, + KeyEvent arg2) { + if (actionId == EditorInfo.IME_ACTION_GO + || actionId == EditorInfo.IME_ACTION_DONE + || actionId == EditorInfo.IME_ACTION_NEXT + || actionId == EditorInfo.IME_ACTION_SEND + || actionId == EditorInfo.IME_ACTION_SEARCH + || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + searchTheWeb(getUrl.getText().toString(), CONTEXT); + return true; } + return false; } - finish(); - return true; - } else - return super.onKeyLongPress(keyCode, event); - } - - @Override - protected void onNewIntent(Intent intent) { - - String url = intent.getDataString(); - int id = -1; - int download = -1; - try { - id = intent.getExtras().getInt("acr.browser.barebones.Origin") - 1; - } catch (NullPointerException e) { - id = -1; - } - try { - download = intent.getExtras().getInt( - "acr.browser.barebones.Download"); - } catch (NullPointerException e) { - download = -1; - } - if (id >= 0) { - main[id].loadUrl(url); - } else if (download == 1) { - Utils.downloadFile(CONTEXT, url, null, null); - } else if (url != null) { - newTab(url, true); - } - super.onNewIntent(intent); + }); } - @Override - public boolean onOptionsItemSelected(MenuItem item) { + @SuppressLint("HandlerLeak") + void enterUrl() { + getUrl = (MultiAutoCompleteTextView) findViewById(R.id.enterUrl); + getUrl.setPadding(tenPad, 0, tenPad, 0); + getUrl.setTextColor(getResources().getColor(android.R.color.black)); + getUrl.setPadding(tenPad, 0, tenPad, 0); + getUrl.setBackgroundResource(R.drawable.book); + getUrl.setPadding(tenPad, 0, tenPad, 0); + final List> list = new ArrayList>(); + handler = new Handler() { - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, CONTEXT); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1].equals("Bookmarks")) { - Utils.addBookmark(CONTEXT, urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(CONTEXT, currentTab); - } else if (!urlToLoad[currentId][1].equals("Bookmarks")) { - goBookmarks(CONTEXT, currentTab); - } + @Override + public void handleMessage(Message msg) { - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - startActivity(new Intent(FinalVariables.INCOGNITO_INTENT)); - // newTab(number, homepage, true, true); - return true; - default: - return super.onOptionsItemSelected(item); - } - } + switch (msg.what) { + case 1: { + SimpleAdapter adapter = new SimpleAdapter(CONTEXT, list, + R.layout.two_line_autocomplete, new String[] { + "title", "url" }, new int[] { R.id.title, + R.id.url }); - @Override - protected void onPause() { + getUrl.setAdapter(adapter); - if (currentTab != null) { - if (API >= 11) { - currentTab.onPause(); - } - currentTab.pauseTimers(); - } - Thread remember = new Thread(new Runnable() { + break; + } + case 2: { - @Override - public void run() { - String s = ""; - for (int n = 0; n < MAX_TABS; n++) { - if (urlToLoad[n][0] != null) { - s = s + urlToLoad[n][0] + "|$|SEPARATOR|$|"; - } + break; + } } - edit.putString("memory", s); - edit.commit(); } - }); - remember.start(); - super.onPause(); - } - - @Override - protected void onResume() { - onProgressChanged(currentId, currentTab.getProgress()); - if (currentTab.getProgress() == 100) { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); + }; - } - if (API >= 11) { - currentTab.onResume(); - } - reinitializeSettings(); - currentTab.resumeTimers(); - if (settings.getBoolean("fullscreen", false) != fullScreen) { - toggleFullScreen(); - } - super.onResume(); - } + Thread updateAutoComplete = new Thread(new Runnable() { - static void openBookmarks(Context context, CustomWebView view) { - String bookmarkHtml = BookmarkPageVariables.Heading; + @Override + public void run() { - for (int n = 0; n < MAX_BOOKMARKS; n++) { - if (bUrl[n] != null) { - bookmarkHtml += (BookmarkPageVariables.Part1 + bUrl[n] - + BookmarkPageVariables.Part2 + bUrl[n] - + BookmarkPageVariables.Part3 + bTitle[n] + BookmarkPageVariables.Part4); - } - } - bookmarkHtml += BookmarkPageVariables.End; - File bookmarkWebPage = new File(context.getFilesDir(), "bookmarks.html"); - try { - FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); - bookWriter.write(bookmarkHtml); - bookWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - view.loadUrl("file://" + bookmarkWebPage); + Cursor c = null; + Cursor managedCursor = null; + columns = new String[] { "url", "title" }; + try { - if (uBar.isShown()) { - currentTabTitle.setText("Bookmarks"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } + bookmarks = Browser.BOOKMARKS_URI; + c = getContentResolver().query(bookmarks, columns, null, + null, null); + } catch (SQLiteException ignored) { + } catch (IllegalStateException ignored) { + } catch (NullPointerException ignored) { + } - } + if (c != null) { + noStockBrowser = false; + Log.i("Browser", "detected AOSP browser"); + } else { + noStockBrowser = true; + Log.e("Browser", "did not detect AOSP browser"); + } + if (c != null) { + c.close(); + } + try { - void options() { - ImageView options = (ImageView) findViewById(R.id.options); - options.setBackgroundResource(R.drawable.button); - options.setOnClickListener(new OnClickListener() { + managedCursor = null; + SQLiteDatabase s = historyHandler.getReadableDatabase(); + managedCursor = s.query("history", // URI + // of + columns, // Which columns to return + null, // Which rows to return (all rows) + null, // Selection arguments (none) + null, null, null); - @Override - public void onClick(View v) { + } catch (SQLiteException ignored) { + } catch (NullPointerException ignored) { + } catch (IllegalStateException ignored) { + } - if (API >= 11) { - PopupMenu menu = new PopupMenu(CONTEXT, v); - MenuInflater inflate = menu.getMenuInflater(); - inflate.inflate(R.menu.menu, menu.getMenu()); - menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { + try { + if (managedCursor != null) { - @Override - public boolean onMenuItemClick(MenuItem item) { + if (managedCursor.moveToLast()) { - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, CONTEXT); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - Utils.addBookmark(CONTEXT, - urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(CONTEXT, currentTab); - } else if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - goBookmarks(CONTEXT, currentTab); - } - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - startActivity(new Intent( - FinalVariables.INCOGNITO_INTENT)); - // newTab(number, homepage, true, true); - return true; - default: - return false; - } + // Variable for holding the retrieved URL + int urlColumn = managedCursor.getColumnIndex("url"); + int titleColumn = managedCursor + .getColumnIndex("title"); + // Reference to the the column containing the URL + do { + String urlA = managedCursor + .getString(urlColumn); + String title = managedCursor + .getString(titleColumn); + Map map = new HashMap(); + map.put("title", title); + map.put("url", urlA); + list.add(map); + } while (managedCursor.moveToPrevious()); } - - }); - menu.show(); - } else if (API < 11) { - - openOptionsMenu(); + } + handler.sendEmptyMessage(1); + } catch (SQLiteException ignored) { + } catch (NullPointerException ignored) { + } catch (IllegalStateException ignored) { } + managedCursor.close(); } }); - } - - static void share() { - Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); - - // set the type - shareIntent.setType("text/plain"); + try { + updateAutoComplete.start(); + } catch (NullPointerException ignored) { + } catch (SQLiteMisuseException ignored) { + } catch (IllegalStateException ignored) { + } - // add a subject - shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, - urlToLoad[currentId][1]); + getUrl.setThreshold(1); + getUrl.setTokenizer(new SpaceTokenizer()); + getUrl.setOnItemClickListener(new OnItemClickListener() { - // build the body of the message to be shared - String shareMessage = urlToLoad[currentId][0]; + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + try { + String url; + url = ((TextView) arg1.findViewById(R.id.url)).getText() + .toString(); + getUrl.setText(url); + searchTheWeb(url, CONTEXT); + url = null; + getUrl.setPadding(tenPad, 0, tenPad, 0); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + } catch (NullPointerException e) { + Log.e("Browser Error: ", + "NullPointerException on item click"); + } + } - // add the message - shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); + }); - // start the chooser for sharing - CONTEXT.startActivity(Intent.createChooser(shareIntent, - "Share this page")); + getUrl.setSelectAllOnFocus(true); // allows edittext to select all when + // clicked } - static void searchTheWeb(String query, Context context) { - query = query.trim(); - currentTab.stopLoading(); + void findNewView(int id) { + int delete = tabList.indexOf(id); + int leftId = id; + boolean right = false, left = false; + if (id == currentId) { - if (query.startsWith("www.")) { - query = "http://" + query; - } else if (query.startsWith("ftp.")) { - query = "ftp://" + query; - } + if (main[id].isShown()) { + main[id].startAnimation(fadeOut); + background.removeView(main[id]); + uBar.bringToFront(); + } - boolean containsPeriod = query.contains("."); - boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) && (query - .replace(".", "").length() >= 4)); - boolean aboutScheme = query.contains("about:"); - boolean validURL = (query.startsWith("ftp://") - || query.startsWith("http://") || query.startsWith("file://") || query - .startsWith("https://")) || isIPAddress; - boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); + if (tabList.size() > delete + 1) { + id = tabList.get(delete + 1); + if (urlTitle[id].isShown()) { + background.addView(main[id]); + main[id].setVisibility(View.VISIBLE); + uBar.bringToFront(); + if (API < 16) { + urlTitle[id].setBackgroundDrawable(active); + } else { + urlTitle[id].setBackground(active); + } + urlTitle[id].setPadding(leftPad, 0, rightPad, 0); + currentId = id; + currentTab = main[id]; + currentTabTitle = urlTitle[id]; + setUrlText(urlToLoad[currentId][0]); + getUrl.setPadding(tenPad, 0, tenPad, 0); + right = true; + if (main[id].getProgress() < 100) { + onProgressChanged(id, main[id].getProgress()); + refresh.setVisibility(View.INVISIBLE); + progressBar.setVisibility(View.VISIBLE); + } else { + onProgressChanged(id, main[id].getProgress()); + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + } + // break; + } - if (query.contains("about:home") || query.contains("about:bookmarks")) { - goBookmarks(context, currentTab); - } else if (query.contains("about:history")) { - generateHistory(currentTab, context); - } else if (isSearch) { - query.replaceAll(" ", "+"); - currentTab.loadUrl(SEARCH + query); - } else if (!validURL) { - currentTab.loadUrl("http://" + query); - } else { - currentTab.loadUrl(query); - } - } + } + if (!right) { + if (delete > 0) { + leftId = tabList.get(delete - 1); + if (urlTitle[leftId].isShown()) { + background.addView(main[leftId]); + main[leftId].setVisibility(View.VISIBLE); + // uBar.bringToFront(); + if (API < 16) { + urlTitle[leftId].setBackgroundDrawable(active); + } else { + urlTitle[leftId].setBackground(active); + } + urlTitle[leftId].setPadding(leftPad, 0, rightPad, 0); + currentId = leftId; + currentTab = main[leftId]; + currentTabTitle = urlTitle[leftId]; + setUrlText(urlToLoad[currentId][0]); + getUrl.setPadding(tenPad, 0, tenPad, 0); + left = true; + if (main[leftId].getProgress() < 100) { + refresh.setVisibility(View.INVISIBLE); + progressBar.setVisibility(View.VISIBLE); + onProgressChanged(leftId, + main[leftId].getProgress()); + } else { + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + onProgressChanged(leftId, + main[leftId].getProgress()); + } + // break; + } - public static void onPageFinished(WebView view, String url) { - if (view.isShown()) { - view.invalidate(); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); + } - if (showFullScreen && uBar.isShown()) { - uBar.startAnimation(slideUp); } - } - view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); - Log.i("Lightning", "Page Finished"); - loadTime = System.currentTimeMillis() - loadTime; - Log.i("Lightning", "Load Time: " + loadTime); - } - - public static void onPageStarted(WebView view, String url, Bitmap favicon) { - Log.i("Lightning", "Page Started"); - loadTime = System.currentTimeMillis(); - int numberPage = view.getId(); - if (url.startsWith("file://")) { - view.getSettings().setUseWideViewPort(false); } else { - view.getSettings().setUseWideViewPort( - settings.getBoolean("wideviewport", true)); + right = left = true; } - - if (view.isShown()) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - setUrlText(url); + tabList.remove(delete); + if (!(right || left)) { + finish(); } + uBar.bringToFront(); + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + } - urlTitle[numberPage].setCompoundDrawables(webpageOther, null, exitTab, - null); - if (favicon != null) { - setFavicon(view.getId(), favicon); + @Override + public void finish() { + background.clearDisappearingChildren(); + background.removeView(currentTab); + tabScroll.clearDisappearingChildren(); + if (settings.getBoolean("cache", false)) { + currentTab.clearCache(true); + Log.i("Lightning", "Cache Cleared"); } + super.finish(); + } - getUrl.setPadding(tenPad, 0, tenPad, 0); - urlToLoad[numberPage][0] = url; - - if (!uBar.isShown() && showFullScreen) { - uBar.startAnimation(slideDown); + void forward() { + ImageView forward = (ImageView) findViewById(R.id.forward); + forward.setBackgroundResource(R.drawable.button); + if (isPhone) { + RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); + relativeLayout1.removeView(forward); } - } + forward.setOnClickListener(new OnClickListener() { - public static void onCreateWindow(Message resultMsg) { - newTab("", true); - WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; - transport.setWebView(currentTab); - resultMsg.sendToTarget(); - browserHandler.postDelayed(new Runnable() { @Override - public void run() { - currentTab.loadUrl(getUrl.getText().toString()); + public void onClick(View v) { + if (currentTab.canGoForward()) { + currentTab.goForward(); + } } - }, 500); - } - public static void onShowCustomView() { - background.removeView(currentTab); - uBar.setVisibility(View.GONE); + }); } - public static void onHideCustomView(FrameLayout fullScreenContainer, - CustomViewCallback mCustomViewCallback, int orientation) { - FrameLayout screen = (FrameLayout) ACTIVITY.getWindow().getDecorView(); - screen.removeView(fullScreenContainer); - fullScreenContainer = null; - mCustomViewCallback.onCustomViewHidden(); - ACTIVITY.setRequestedOrientation(orientation); - background.addView(currentTab); - uBar.setVisibility(View.VISIBLE); - uBar.bringToFront(); - } + @SuppressLint("InlinedApi") + private void initialize() { - public static void onReceivedTitle(int numberPage, String title) { - if (title != null && title.length() != 0) { - urlTitle[numberPage].setText(title); - urlToLoad[numberPage][1] = title; - Utils.updateHistory(CONTEXT, CONTEXT.getContentResolver(), - noStockBrowser, urlToLoad[numberPage][0], title); - } - } + tabList = new ArrayList(); + bUrl = new String[MAX_BOOKMARKS]; + bTitle = new String[MAX_BOOKMARKS]; + main = new CustomWebView[MAX_TABS]; + urlTitle = new TextView[MAX_TABS]; + urlToLoad = new String[MAX_TABS][2]; + fullScreen = false; + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + historyHandler = new DatabaseHandler(this); + cookieManager = CookieManager.getInstance(); + CookieSyncManager.createInstance(CONTEXT); + cookieManager.setAcceptCookie(settings.getBoolean("cookies", true)); - public static void openFileChooser(ValueCallback uploadMsg) { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("*/*"); - ACTIVITY.startActivityForResult( - Intent.createChooser(i, "File Chooser"), 1); - } + progressBar = (ProgressBar) findViewById(R.id.progressBar1); + browserProgress = (ProgressBar) findViewById(R.id.progressBar); + browserProgress.setVisibility(View.GONE); - @Override - public boolean onTouch(View v, MotionEvent event) { - try { - id = v.getId(); - background.clearDisappearingChildren(); - boolean xPress = false; - int x = (int) event.getX(); - int y = (int) event.getY(); - Rect edge = new Rect(); + if (API >= 11) { + progressBar.setIndeterminateDrawable(getResources().getDrawable( + R.drawable.ics_animation)); + } else { + progressBar.setIndeterminateDrawable(getResources().getDrawable( + R.drawable.ginger_animation)); + } + + showFullScreen = settings.getBoolean("fullscreen", false); + uBar = (RelativeLayout) findViewById(R.id.urlBar); + screen = (RelativeLayout) findViewById(R.id.background); + slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up); + slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down); + fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); + fadeOut.setDuration(250); + fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); + // mShortAnimationDuration = getResources().getInteger( + // android.R.integer.config_mediumAnimTime); + slideUp.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationEnd(Animation arg0) { + uBar.setVisibility(View.GONE); + } + + @Override + public void onAnimationRepeat(Animation arg0) { + + } + + @Override + public void onAnimationStart(Animation arg0) { + + } + + }); + slideDown.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationEnd(Animation animation) { + + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + + @Override + public void onAnimationStart(Animation animation) { + uBar.setVisibility(View.VISIBLE); + } + + }); + + RelativeLayout refreshLayout = (RelativeLayout) findViewById(R.id.refreshLayout); + refreshLayout.setBackgroundResource(R.drawable.button); + + // user agent + if (API < 17) { + user = new WebView(CONTEXT).getSettings().getUserAgentString(); + } else { + user = WebSettings.getDefaultUserAgent(this); + } + + background = (FrameLayout) findViewById(R.id.holder); + defaultUser = user; // setting mobile user + // agent + switch (settings.getInt("search", 1)) { + case 1: + SEARCH = FinalVariables.GOOGLE_SEARCH; + break; + case 2: + SEARCH = FinalVariables.BING_SEARCH; + break; + case 3: + SEARCH = FinalVariables.YAHOO_SEARCH; + break; + case 4: + SEARCH = FinalVariables.STARTPAGE_SEARCH; + break; + case 5: + SEARCH = FinalVariables.DUCK_SEARCH; + break; + case 6: + SEARCH = FinalVariables.BAIDU_SEARCH; + break; + case 7: + SEARCH = FinalVariables.YANDEX_SEARCH; + break; + case 8: + SEARCH = FinalVariables.DUCK_LITE_SEARCH; + break; + } + + exitTab = getResources().getDrawable(R.drawable.stop); // user + // agent + homepage = settings.getString("home", HOMEPAGE); // initializing + // the + // stored + // homepage + // variable + + gestures = settings.getBoolean("gestures", true); + + // initializing variables declared + + height = getResources().getDrawable(R.drawable.loading) + .getMinimumHeight(); + width = getResources().getDrawable(R.drawable.loading) + .getMinimumWidth(); + + // hides keyboard so it doesn't default pop up + this.getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + + // opens icondatabase so that favicons can be stored + WebIconDatabase.getInstance().open( + getDir("icons", MODE_PRIVATE).getPath()); + + // scroll view containing tabs + tabLayout = (LinearLayout) findViewById(R.id.tabLayout); + tabScroll = (HorizontalScrollView) findViewById(R.id.tabScroll); + tabScroll.setBackgroundColor(getResources().getColor(R.color.black)); + tabScroll.setHorizontalScrollBarEnabled(false); + if (API > 8) { + tabScroll.setOverScrollMode(View.OVER_SCROLL_NEVER); // disallow + // overscroll + } + + // image dimensions and initialization + final int dps = 175; + final float scale = getApplicationContext().getResources() + .getDisplayMetrics().density; + pixels = (int) (dps * scale + 0.5f); + leftPad = (int) (17 * scale + 0.5f); + rightPad = (int) (15 * scale + 0.5f); + height32 = (int) (32 * scale + 0.5f); + tenPad = (int) (10 * scale + 0.5f); + + webpageOther = getResources().getDrawable(R.drawable.webpage); + incognitoPage = getResources().getDrawable(R.drawable.incognito); + webpageOther.setBounds(0, 0, width / 2, height / 2); + incognitoPage.setBounds(0, 0, width / 2, height / 2); + exitTab.setBounds(0, 0, width * 2 / 3, height * 2 / 3); + + Thread startup = new Thread(new Runnable() { + + @Override + public void run() { + reopenOldTabs(); // restores old tabs or creates a new one + } + + }); + startup.run(); + + // new tab button + ImageView newTab = (ImageView) findViewById(R.id.newTab); + newTab.setBackgroundResource(R.drawable.button); + newTab.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Handler click = new NewTabHandler(); + click.sendEmptyMessage(1); + tabScroll.postDelayed(new Runnable() { + @Override + public void run() { + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + } + }, 100L); + + } + }); + newTab.setOnLongClickListener(new OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + if (settings.getString("oldPage", "").length() > 0) { + newTab(settings.getString("oldPage", ""), true); + edit.putString("oldPage", ""); + edit.commit(); + tabScroll.postDelayed(new Runnable() { + @Override + public void run() { + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), + 0); + } + }, 100L); + } + return true; + } + + }); + refresh = (ImageView) findViewById(R.id.refresh); + refreshLayout.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + + if (currentTab.getProgress() < 100) { + currentTab.stopLoading(); + } else { + currentTab.reload(); + } + } + + }); + + enterUrl(); + if (showFullScreen) { + toggleFullScreen(); + } + browserHandler = new Handle(); + + } + + private void newSettings() { + startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, + Intent intent) { + if (requestCode == 1) { + if (null == mUploadMessage) + return; + Uri result = intent == null || resultCode != RESULT_OK ? null + : intent.getData(); + mUploadMessage.onReceiveValue(result); + mUploadMessage = null; + + } + } + + @Override + public void onBackPressed() { + try { + if (showFullScreen && !uBar.isShown()) { + uBar.startAnimation(slideDown); + } + if (currentTab.isShown() && currentTab.canGoBack()) { + currentTab.goBack(); + } else { + deleteTab(currentId); + uBar.bringToFront(); + } + } catch (NullPointerException ignored) { + } + return; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (settings.getBoolean("textreflow", false)) { + currentTab.getSettings().setLayoutAlgorithm( + LayoutAlgorithm.NARROW_COLUMNS); + } else { + currentTab.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); + } + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); // displays main xml layout + CONTEXT = this; + ACTIVITY = this; + settings = getSharedPreferences("settings", 0); + edit = settings.edit(); + + if (settings.getBoolean("hidestatus", false)) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + if (settings.getBoolean("savetabs", true)) { + String mem = settings.getString("memory", ""); + edit.putString("memory", ""); + memoryURL = new String[MAX_TABS]; + memoryURL = getArray(mem); + } + + try { + LocationManager locationManager = (LocationManager) CONTEXT + .getSystemService(Context.LOCATION_SERVICE); + if (locationManager.getAllProviders().contains( + LocationManager.GPS_PROVIDER)) { + DEVICE_HAS_GPS = true; + } + } catch (Exception ignored) { + DEVICE_HAS_GPS = false; + } + inactive = getResources().getDrawable(R.drawable.bg_inactive); + active = getResources().getDrawable(R.drawable.bg_press); + initialize(); // sets up random stuff + options(); // allows options to be opened + enter();// enter url bar + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + + float widthInInches = metrics.widthPixels / metrics.xdpi; + float heightInInches = metrics.heightPixels / metrics.ydpi; + double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) + + Math.pow(heightInInches, 2)); + // 0.5" buffer for 7" devices + isPhone = sizeInInches < 6.5; + forward();// forward button + back(); + if (settings.getInt("first", 0) == 0) { + // navigation tips + String message = "1. Long-press back button to exit browser\n\n" + + "2. Swipe from left edge toward the right (---->) to go back\n\n" + + "3. Swipe from right edge toward the left (<----)to go forward\n\n" + + "4. Visit settings and advanced settings to change options\n\n" + + "5. Long-press on the new tab button to open the last closed tab"; + + Utils.createInformativeDialog(CONTEXT, "Browser Tips", message); + edit.putInt("first", 1); + edit.commit(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu, menu); + + return true; + } + + /* + * (non-Javadoc) + * + * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_SEARCH: { + getUrl.requestFocus(); + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + manager.showSoftInput(getUrl, 0); + + break; + } + case KeyEvent.KEYCODE_F5: { + currentTab.reload(); + } + case KeyEvent.KEYCODE_ESCAPE: { + currentTab.stopLoading(); + } + case KeyEvent.KEYCODE_TAB: { + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (!manager.isActive()) { + newTab(homepage, true); + } + + } + case KeyEvent.KEYCODE_F12: { + finish(); + } + case KeyEvent.KEYCODE_F6: { + getUrl.selectAll(); + } + case KeyEvent.KEYCODE_F10: { + startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); + } + case KeyEvent.KEYCODE_F11: { + toggleFullScreen(); + } + case KeyEvent.KEYCODE_DEL: { + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (!manager.isActive()) { + currentTab.goBack(); + } + } + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onKeyLongPress(int keyCode, KeyEvent event) { + + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (!settings.getBoolean("restoreclosed", true)) { + for (int n = 0; n < MAX_TABS; n++) { + urlToLoad[n][0] = null; + } + } + finish(); + return true; + } else + return super.onKeyLongPress(keyCode, event); + } + + @Override + public void onLowMemory() { + for (int n = 0; n < MAX_TABS; n++) { + if (n != currentId && main[n] != null) { + main[n].freeMemory(); + } + } + super.onLowMemory(); + } + + @Override + protected void onNewIntent(Intent intent) { + + String url = intent.getDataString(); + int id = -1; + int download = -1; + try { + id = intent.getExtras().getInt("acr.browser.barebones.Origin") - 1; + } catch (NullPointerException e) { + id = -1; + } + try { + download = intent.getExtras().getInt( + "acr.browser.barebones.Download"); + } catch (NullPointerException e) { + download = -1; + } + if (id >= 0) { + main[id].loadUrl(url); + } else if (download == 1) { + Utils.downloadFile(CONTEXT, url, null, null); + } else if (url != null) { + newTab(url, true); + } + + super.onNewIntent(intent); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + switch (item.getItemId()) { + case R.id.history: + generateHistory(currentTab, CONTEXT); + return true; + case R.id.bookmark: + if (urlToLoad[currentId][1] != null) { + if (!urlToLoad[currentId][1].equals("Bookmarks")) { + Utils.addBookmark(CONTEXT, urlToLoad[currentId][1], + urlToLoad[currentId][0]); + } + } + return true; + case R.id.settings: + newSettings(); + return true; + case R.id.allBookmarks: + if (urlToLoad[currentId][1] == null) { + goBookmarks(CONTEXT, currentTab); + } else if (!urlToLoad[currentId][1].equals("Bookmarks")) { + goBookmarks(CONTEXT, currentTab); + } + + return true; + case R.id.share: + share(); + return true; + case R.id.incognito: + startActivity(new Intent(FinalVariables.INCOGNITO_INTENT)); + // newTab(number, homepage, true, true); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected void onPause() { + + if (currentTab != null) { + if (API >= 11) { + currentTab.onPause(); + } + currentTab.pauseTimers(); + } + Thread remember = new Thread(new Runnable() { + + @Override + public void run() { + String s = ""; + for (int n = 0; n < MAX_TABS; n++) { + if (urlToLoad[n][0] != null) { + s = s + urlToLoad[n][0] + "|$|SEPARATOR|$|"; + } + } + edit.putString("memory", s); + edit.commit(); + } + }); + remember.start(); + super.onPause(); + } + + @Override + protected void onResume() { + super.onResume(); + if (currentTab != null) { + onProgressChanged(currentId, currentTab.getProgress()); + if (currentTab.getProgress() == 100) { + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + + } + if (API >= 11) { + currentTab.onResume(); + } + } + gestures = settings.getBoolean("gestures", true); + reinitializeSettings(); + currentTab.resumeTimers(); + if (settings.getBoolean("fullscreen", false) != fullScreen) { + toggleFullScreen(); + } + + } + + private int x; + private int y; + private boolean xPress; + private Rect edge; + + @Override + public boolean onTouch(View v, MotionEvent event) { + try { + id = v.getId(); + background.clearDisappearingChildren(); + xPress = false; + x = (int) event.getX(); + y = (int) event.getY(); + edge = new Rect(); v.getDrawingRect(edge); currentTabTitle.setPadding(leftPad, 0, rightPad, 0); if (event.getAction() == MotionEvent.ACTION_DOWN) { @@ -1871,248 +1997,157 @@ public class BrowserActivity extends Activity implements OnTouchListener { } uBar.bringToFront(); - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - if (API < 16) { - currentTabTitle.setBackgroundDrawable(active); - } else if (API > 15) { - currentTabTitle.setBackground(active); - } - if (currentTab.getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - - progressBar.setVisibility(View.VISIBLE); - - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - onProgressChanged(currentId, currentTab.getProgress()); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - currentTab.invalidate(); - } - } - - } - uBar.bringToFront(); - v.setPadding(leftPad, 0, rightPad, 0); - } catch (Exception e) { - e.printStackTrace(); - Log.e("Lightning Error", "Well we dun messed up"); - } - return true; - } - - public static class ClickHandler extends Handler { - - /* - * (non-Javadoc) - * - * @see android.os.Handler#handleMessage(android.os.Message) - */ - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - String url = null; - url = msg.getData().getString("url"); - handleLongClickOnBookmarks(url, msg.arg1); - } - - } - - public static boolean onLongClick() { - int n = currentId; - final HitTestResult result = currentTab.getHitTestResult(); - - if (currentTab.getUrl().contains( - "file://" + CONTEXT.getFilesDir() + "/bookmarks.html")) { - Message message = new Message(); - message.arg1 = n; - message.setTarget(new ClickHandler()); - currentTab.requestFocusNodeHref(message); - - return true; - } else if (result != null) { - if (result.getExtra() != null) { - if (result.getType() == 5 && API > 8) { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - // urlTitle[num].performClick(); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - currentTab.loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - if (API > 8) { - String url = result.getExtra(); + currentId = id; + currentTab = main[id]; + currentTabTitle = urlTitle[id]; + setUrlText(urlToLoad[currentId][0]); + getUrl.setPadding(tenPad, 0, tenPad, 0); + if (API < 16) { + currentTabTitle.setBackgroundDrawable(active); + } else if (API > 15) { + currentTabTitle.setBackground(active); + } + if (currentTab.getProgress() < 100) { + refresh.setVisibility(View.INVISIBLE); - Utils.downloadFile(CONTEXT, url, null, null); + progressBar.setVisibility(View.VISIBLE); - } - break; - } - } + } else { + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); } - }; + onProgressChanged(currentId, currentTab.getProgress()); + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + currentTab.invalidate(); + } + } - AlertDialog.Builder builder = new AlertDialog.Builder( - CONTEXT); // dialog - builder.setMessage( - "What would you like to do with this image?") - .setPositiveButton("Open in New Tab", - dialogClickListener) - .setNegativeButton("Open Normally", - dialogClickListener) - .setNeutralButton("Download Image", - dialogClickListener).show(); + } + uBar.bringToFront(); + v.setPadding(leftPad, 0, rightPad, 0); + } catch (Exception e) { + e.printStackTrace(); + Log.e("Lightning Error", "Well we dun messed up"); + } + return true; + } + + void options() { + ImageView options = (ImageView) findViewById(R.id.options); + options.setBackgroundResource(R.drawable.button); + options.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if (API >= 11) { + PopupMenu menu = new PopupMenu(CONTEXT, v); + MenuInflater inflate = menu.getMenuInflater(); + inflate.inflate(R.menu.menu, menu.getMenu()); + menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { - } else { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - currentTab.loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { + public boolean onMenuItemClick(MenuItem item) { - if (API < 11) { - android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ACTIVITY - .getSystemService(Context.CLIPBOARD_SERVICE); - clipboard.setText(result.getExtra()); - } else { - ClipboardManager clipboard = (ClipboardManager) ACTIVITY - .getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText( - "label", result.getExtra()); - clipboard.setPrimaryClip(clip); + switch (item.getItemId()) { + case R.id.history: + generateHistory(currentTab, CONTEXT); + return true; + case R.id.bookmark: + if (urlToLoad[currentId][1] != null) { + if (!urlToLoad[currentId][1] + .equals("Bookmarks")) { + Utils.addBookmark(CONTEXT, + urlToLoad[currentId][1], + urlToLoad[currentId][0]); + } } - break; - } + return true; + case R.id.settings: + newSettings(); + return true; + case R.id.allBookmarks: + if (urlToLoad[currentId][1] == null) { + goBookmarks(CONTEXT, currentTab); + } else if (!urlToLoad[currentId][1] + .equals("Bookmarks")) { + goBookmarks(CONTEXT, currentTab); + } + return true; + case R.id.share: + share(); + return true; + case R.id.incognito: + startActivity(new Intent( + FinalVariables.INCOGNITO_INTENT)); + // newTab(number, homepage, true, true); + return true; + default: + return false; } + } - }; - AlertDialog.Builder builder = new AlertDialog.Builder( - CONTEXT); // dialog - builder.setTitle(result.getExtra()) - .setMessage( - "What do you want to do with this link?") - .setPositiveButton("Open in New Tab", - dialogClickListener) - .setNegativeButton("Open Normally", - dialogClickListener) - .setNeutralButton("Copy link", dialogClickListener) - .show(); + }); + menu.show(); + } else if (API < 11) { + + openOptionsMenu(); } } - return true; - } else { - return false; - } + }); } - public static void handleLongClickOnBookmarks(final String clickedURL, - final int n) { - if (clickedURL != null) { + void reopenOldTabs() { + Intent url = getIntent(); + String URL = url.getDataString(); + boolean oldTabs = false; - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - renameBookmark(clickedURL); - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - main[n].loadUrl(clickedURL); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - deleteBookmark(clickedURL); - break; - } + if (settings.getBoolean("savetabs", true)) { + if (URL != null) { + // opens a new tab with the url if its there + int n = newTab(URL, true); + main[n].resumeTimers(); + oldTabs = true; + + } + boolean first = false; + for (String aMemoryURL : memoryURL) { + if (aMemoryURL.length() > 0) { + if (!first) { + int n = newTab("", !oldTabs); + main[n].resumeTimers(); + main[n].getSettings().setCacheMode( + WebSettings.LOAD_CACHE_ELSE_NETWORK); + main[n].loadUrl(aMemoryURL); + } else { + int n = newTab("", false); + main[n].getSettings().setCacheMode( + WebSettings.LOAD_CACHE_ELSE_NETWORK); + main[n].loadUrl(aMemoryURL); } + oldTabs = true; } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(CONTEXT); // dialog - builder.setMessage("What would you like to do with this bookmark?") - .setPositiveButton("Rename", dialogClickListener) - .setNegativeButton("Open", dialogClickListener) - .setNeutralButton("Delete", dialogClickListener).show(); - } - } - - public static void goBack(CustomWebView view) { - if (view.isShown() && view.canGoBack()) { - view.goBack(); - } - Animation left = AnimationUtils.loadAnimation(CONTEXT, R.anim.left); - background.startAnimation(left); - } - - public static void goForward(CustomWebView view) { - if (view.isShown() && view.canGoForward()) { - view.goForward(); - } - Animation right = AnimationUtils.loadAnimation(CONTEXT, R.anim.right); - background.startAnimation(right); - } + } - public static void onProgressChanged(int id, int progress) { - if (id == currentId) { - browserProgress.setProgress(progress); - if (progress < 100) { - browserProgress.setVisibility(View.VISIBLE); - } else { - browserProgress.setVisibility(View.GONE); + if (!oldTabs) { + int n = newTab(homepage, true); + main[n].resumeTimers(); } - } - } + } else { + if (URL != null) { + // opens a new tab with the URL if its there + int n = newTab(URL, true); + main[n].resumeTimers(); - public static void reinitializeSettings() { - int size = tabList.size(); - for (int n = 0; n < size; n++) { - main[tabList.get(n)].settingsInitialization(CONTEXT); - } - } + } else { + // otherwise it opens the home-page + int n = newTab(homepage, true); + main[n].resumeTimers(); - public static void toggleFullScreen() { - showFullScreen = settings.getBoolean("fullscreen", false); - CustomWebView.showFullScreen = showFullScreen; - if (fullScreen) { - background.removeView(uBar); - screen.addView(uBar); - fullScreen = false; - } else { - screen.removeView(uBar); - background.addView(uBar); - fullScreen = true; + } } } } \ No newline at end of file diff --git a/src/acr/browser/barebones/activities/IncognitoModeActivity.java b/src/acr/browser/barebones/activities/IncognitoModeActivity.java index d4c4348..9ec96ab 100644 --- a/src/acr/browser/barebones/activities/IncognitoModeActivity.java +++ b/src/acr/browser/barebones/activities/IncognitoModeActivity.java @@ -78,6 +78,7 @@ import android.webkit.WebView; import android.webkit.WebView.HitTestResult; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; +import android.widget.EditText; import android.widget.FrameLayout; import android.widget.HorizontalScrollView; import android.widget.ImageView; @@ -94,167 +95,77 @@ import android.widget.TextView.OnEditorActionListener; @SuppressWarnings("deprecation") public class IncognitoModeActivity extends Activity implements OnTouchListener { - public static void generateHistory(final IncognitoWebView view, - final Context context) { - - Thread history = new Thread(new Runnable() { - - @Override - public void run() { - String historyHtml = HistoryPageVariables.Heading; - Cursor historyCursor = null; - String[][] h = new String[50][3]; - - try { - SQLiteDatabase s = historyHandler.getReadableDatabase(); - historyCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - - handler.sendEmptyMessage(1); - - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } + public static class ClickHandler extends Handler { - try { - if (historyCursor != null) { - if (historyCursor.moveToLast()) { - // Variable for holding the retrieved URL - int urlColumn = historyCursor.getColumnIndex("url"); - int titleColumn = historyCursor - .getColumnIndex("title"); - // Reference to the the column containing the URL - int n = 0; - do { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + String url = null; + url = msg.getData().getString("url"); + handleLongClickOnBookmarks(url, msg.arg1); + } - h[n][0] = historyCursor.getString(urlColumn); - h[n][2] = h[n][0].substring(0, - Math.min(100, h[n][0].length())) - + "..."; - h[n][1] = historyCursor.getString(titleColumn); - historyHtml += (HistoryPageVariables.Part1 - + h[n][0] + HistoryPageVariables.Part2 - + h[n][1] + HistoryPageVariables.Part3 - + h[n][2] + HistoryPageVariables.Part4); - n++; - } while (n < 49 && historyCursor.moveToPrevious()); - } - } - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { - } + } - historyHtml += BookmarkPageVariables.End; - File historyWebPage = new File(context.getFilesDir(), - "history.html"); - try { - FileWriter hWriter = new FileWriter(historyWebPage, false); - hWriter.write(historyHtml); - hWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - if (uBar.isShown()) { - currentTabTitle.setText("History"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } + static class Handle extends Handler { - view.loadUrl("file://" + historyWebPage); + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 1: { + currentTab.loadUrl(getUrl.getText().toString()); + break; + } + case 2: { + // deleteTab(msg.arg1); + break; + } + case 3: { + currentTab.invalidate(); + break; } - - }); - history.run(); - } - - public static void setUrlText(String url) { - if (url != null) { - if (!url.startsWith("file://")) { - getUrl.setText(url); - } else { - getUrl.setText(""); } + super.handleMessage(msg); } - } - public static void removeView(WebView view) { - if (!showFullScreen) { - view.startAnimation(fadeOut); - } - background.removeView(view); - uBar.bringToFront(); } - private static IncognitoModeActivity ACTIVITY; + static class NewTabHandler extends Handler { - public static void deleteBookmark(String url) { - File book = new File(CONTEXT.getFilesDir(), "bookmarks"); - File bookUrl = new File(CONTEXT.getFilesDir(), "bookurl"); - int n = 0; - try { - BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); - BufferedWriter urlWriter = new BufferedWriter(new FileWriter( - bookUrl)); - while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { - if (!bUrl[n].equalsIgnoreCase(url)) { - bookWriter.write(bTitle[n]); - urlWriter.write(bUrl[n]); - bookWriter.newLine(); - urlWriter.newLine(); - } - n++; - } - bookWriter.close(); - urlWriter.close(); - } catch (FileNotFoundException e) { - } catch (IOException e) { - } - for (int p = 0; p < MAX_BOOKMARKS; p++) { - bUrl[p] = null; - bTitle[p] = null; - } - try { - BufferedReader readBook = new BufferedReader(new FileReader(book)); - BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); - String t, u; - int z = 0; - while ((t = readBook.readLine()) != null - && (u = readUrl.readLine()) != null && z < MAX_BOOKMARKS) { - bUrl[z] = u; - bTitle[z] = t; - z++; + @Override + public void handleMessage(Message msg) { + if (msg.what == 1) { + newTab(homepage, true); } - readBook.close(); - readUrl.close(); - } catch (IOException ignored) { + super.handleMessage(msg); } - openBookmarks(CONTEXT, currentTab); + } - // variables + private static IncognitoModeActivity ACTIVITY; + + private static int index = 0; // constants public static final int MAX_TABS = FinalVariables.MAX_TABS; + public static final int MAX_BOOKMARKS = FinalVariables.MAX_BOOKMARKS; + + // variables + public static final boolean PAID_VERSION = FinalVariables.PAID_VERSION; public static final String HOMEPAGE = FinalVariables.HOMEPAGE; public static final int API = FinalVariables.API; public static final String SEPARATOR = "\\|\\$\\|SEPARATOR\\|\\$\\|"; - // semi constants public static Context CONTEXT; public static String SEARCH; - public static List tabList; + public static List tabList; // variables public static IncognitoWebView currentTab; public static TextView currentTabTitle; + public static MultiAutoCompleteTextView getUrl; public static TextView[] urlTitle; public static ProgressBar browserProgress; @@ -267,7 +178,6 @@ public class IncognitoModeActivity extends Activity implements OnTouchListener { public static ImageView refresh; public static ProgressBar progressBar; public static String defaultUser; - public static Drawable webpageOther; public static Drawable incognitoPage; public static Drawable exitTab; public static long loadTime = 0; @@ -286,7 +196,6 @@ public class IncognitoModeActivity extends Activity implements OnTouchListener { public static SharedPreferences settings; public static SharedPreferences.Editor edit; public static String user; - public static String[] memoryURL; public static String[] bUrl; public static String[] bTitle; public static String[] columns; @@ -307,433 +216,251 @@ public class IncognitoModeActivity extends Activity implements OnTouchListener { public static Drawable inactive; public static Drawable active; public static LinearLayout tabLayout; - - public static String[] getArray(String input) { - return input.split(SEPARATOR); - } - - public static int newId(){ - - Random n = new Random(); - int id = n.nextInt(); - - while(tabList.contains(id)){ - id = n.nextInt(); - } - return id; - } - - - @SuppressWarnings("unused") - public static void setFavicon(int id, Bitmap favicon) { - Drawable icon = null; - icon = new BitmapDrawable(null, favicon); - icon.setBounds(0, 0, width / 2, height / 2); - if (icon != null) { - urlTitle[id].setCompoundDrawables(incognitoPage, null, exitTab, null); - } else { - urlTitle[id] - .setCompoundDrawables(incognitoPage, null, exitTab, null); - } - icon = null; - - } - - void deleteTab(final int del) { - if (API >= 11) { - main[del].onPause(); - } - main[del].stopLoading(); - main[del].clearHistory(); - edit.putString("oldPage", urlToLoad[del][0]); - edit.commit(); - urlToLoad[del][0] = null; - urlToLoad[del][1] = null; - if (API < 16) { - urlTitle[del].setBackgroundDrawable(active); - } else { - urlTitle[del].setBackground(active); + // creates the tab and returns the ID of the view + public static int createTab(String theUrl, boolean display) { + int id = -1; + for (int n = 0; n < MAX_TABS; n++) { + if (main[n] == null) { + id = n; + break; + } } - - urlTitle[del].setPadding(leftPad, 0, rightPad, 0); - Animation yolo = AnimationUtils.loadAnimation(this, R.anim.down); - yolo.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { - // urlTitle[del].setVisibility(View.GONE); - tabLayout.post(new Runnable() { - - @Override - public void run() { - tabLayout.removeView(urlTitle[del]); + if (id != -1) { + if (tabList.size() > 0) { + if (display) { + if (API < 16) { + currentTabTitle.setBackgroundDrawable(inactive); + } else { + currentTabTitle.setBackground(inactive); } - - }); - findNewView(del); - main[del] = null; + currentTabTitle.setPadding(leftPad, 0, rightPad, 0); + } } - - @Override - public void onAnimationRepeat(Animation animation) { + final TextView title = new TextView(CONTEXT); + title.setText("New Tab"); + if (display) { + if (API < 16) { + title.setBackgroundDrawable(active); + } else { + title.setBackground(active); + } + } else { + if (API < 16) { + title.setBackgroundDrawable(inactive); + } else { + title.setBackground(inactive); + } } + title.setSingleLine(true); + title.setGravity(Gravity.CENTER_VERTICAL); + title.setHeight(height32); + title.setWidth(pixels); + title.setPadding(leftPad, 0, rightPad, 0); + title.setId(id); + title.setGravity(Gravity.CENTER_VERTICAL); - @Override - public void onAnimationStart(Animation animation) { - } + title.setCompoundDrawables(incognitoPage, null, exitTab, null); - }); - urlTitle[del].startAnimation(yolo); - uBar.bringToFront(); - } + Drawable[] drawables = title.getCompoundDrawables(); + bounds = drawables[2].getBounds(); + title.setOnTouchListener(ACTIVITY); + Animation holo = AnimationUtils.loadAnimation(CONTEXT, R.anim.up); + tabLayout.addView(title); + title.setVisibility(View.INVISIBLE); + holo.setAnimationListener(new AnimationListener() { - void findNewView(int id) { - int delete = tabList.indexOf(id); - int leftId = id; - boolean right = false, left = false; - if (id == currentId) { + @Override + public void onAnimationEnd(Animation animation) { + } - if (main[id].isShown()) { - removeView(main[id]); - } + @Override + public void onAnimationRepeat(Animation animation) { + } - if (tabList.size() > delete + 1) { - id = tabList.get(delete + 1); - if (urlTitle[id].isShown()) { - background.addView(main[id]); - main[id].setVisibility(View.VISIBLE); - uBar.bringToFront(); - if (API < 16) { - urlTitle[id].setBackgroundDrawable(active); - } else { - urlTitle[id].setBackground(active); - } - urlTitle[id].setPadding(leftPad, 0, rightPad, 0); - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - right = true; - if (main[id].getProgress() < 100) { - onProgressChanged(id, main[id].getProgress()); - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - } else { - onProgressChanged(id, main[id].getProgress()); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - } - // break; + @Override + public void onAnimationStart(Animation animation) { + title.setVisibility(View.VISIBLE); } - } - if (!right) { - // for (; leftId >= 0; leftId--) { - if (delete > 0) { - leftId = tabList.get(delete - 1); - if (urlTitle[leftId].isShown()) { - background.addView(main[leftId]); - main[leftId].setVisibility(View.VISIBLE); - // uBar.bringToFront(); - if (API < 16) { - urlTitle[leftId].setBackgroundDrawable(active); - } else { - urlTitle[leftId].setBackground(active); - } - urlTitle[leftId].setPadding(leftPad, 0, rightPad, 0); - currentId = leftId; - currentTab = main[leftId]; - currentTabTitle = urlTitle[leftId]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - left = true; - if (main[leftId].getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); - onProgressChanged(leftId, - main[leftId].getProgress()); - } - // break; - } + }); + title.startAnimation(holo); + urlTitle[id] = title; - } + urlTitle[id].setText("New Tab"); + if (theUrl != null) { + main[id] = generateTab(id, theUrl, display); + } else { + main[id] = generateTab(id, homepage, display); } } else { - right = left = true; - } - tabList.remove(delete); - if (!(right || left)) { - finish(); - } - uBar.bringToFront(); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - - @Override - public void onLowMemory() { - for (int n = 0; n < MAX_TABS; n++) { - if (n != currentId && main[n] != null) { - main[n].freeMemory(); - } + Utils.showToast(CONTEXT, "Max number of tabs reached"); } - super.onLowMemory(); + return id; } - - void enter() { - getUrl.setOnKeyListener(new OnKeyListener() { - - @Override - public boolean onKey(View arg0, int arg1, KeyEvent arg2) { - - switch (arg1) { - case KeyEvent.KEYCODE_ENTER: - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), CONTEXT); - return true; - default: - break; + public static void deleteBookmark(String url) { + File book = new File(CONTEXT.getFilesDir(), "bookmarks"); + File bookUrl = new File(CONTEXT.getFilesDir(), "bookurl"); + int n = 0; + try { + BufferedWriter bookWriter = new BufferedWriter(new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter(new FileWriter( + bookUrl)); + while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { + if (!bUrl[n].equalsIgnoreCase(url)) { + bookWriter.write(bTitle[n]); + urlWriter.write(bUrl[n]); + bookWriter.newLine(); + urlWriter.newLine(); } - return false; + n++; } - - }); - getUrl.setOnEditorActionListener(new OnEditorActionListener() { - - @Override - public boolean onEditorAction(TextView arg0, int actionId, - KeyEvent arg2) { - if (actionId == EditorInfo.IME_ACTION_GO - || actionId == EditorInfo.IME_ACTION_DONE - || actionId == EditorInfo.IME_ACTION_NEXT - || actionId == EditorInfo.IME_ACTION_SEND - || actionId == EditorInfo.IME_ACTION_SEARCH - || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - searchTheWeb(getUrl.getText().toString(), CONTEXT); - return true; - } - return false; + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + for (int p = 0; p < MAX_BOOKMARKS; p++) { + bUrl[p] = null; + bTitle[p] = null; + } + try { + BufferedReader readBook = new BufferedReader(new FileReader(book)); + BufferedReader readUrl = new BufferedReader(new FileReader(bookUrl)); + String t, u; + int z = 0; + while ((t = readBook.readLine()) != null + && (u = readUrl.readLine()) != null && z < MAX_BOOKMARKS) { + bUrl[z] = u; + bTitle[z] = t; + z++; } - - }); + readBook.close(); + readUrl.close(); + } catch (IOException ignored) { + } + openBookmarks(CONTEXT, currentTab); } - @SuppressLint("HandlerLeak") - void enterUrl() { - getUrl = (MultiAutoCompleteTextView) findViewById(R.id.enterUrl); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setTextColor(getResources().getColor(android.R.color.black)); - getUrl.setPadding(tenPad, 0, tenPad, 0); - getUrl.setBackgroundResource(R.drawable.book); - getUrl.setPadding(tenPad, 0, tenPad, 0); - final List> list = new ArrayList>(); - handler = new Handler() { - - @Override - public void handleMessage(Message msg) { - - switch (msg.what) { - case 1: { - SimpleAdapter adapter = new SimpleAdapter(CONTEXT, list, - R.layout.two_line_autocomplete, new String[] { - "title", "url" }, new int[] { R.id.title, - R.id.url }); - - getUrl.setAdapter(adapter); - - break; - } - case 2: { - - break; - } - } - } - }; + public static void generateHistory(final IncognitoWebView view, + final Context context) { - Thread updateAutoComplete = new Thread(new Runnable() { + Thread history = new Thread(new Runnable() { @Override public void run() { + String historyHtml = HistoryPageVariables.Heading; + Cursor historyCursor = null; + String[][] h = new String[50][3]; - Cursor c = null; - Cursor managedCursor = null; - columns = new String[] { "url", "title" }; try { + SQLiteDatabase s = historyHandler.getReadableDatabase(); + historyCursor = s.query("history", // URI + // of + columns, // Which columns to return + null, // Which rows to return (all rows) + null, // Selection arguments (none) + null, null, null); + + handler.sendEmptyMessage(1); - bookmarks = Browser.BOOKMARKS_URI; - c = getContentResolver().query(bookmarks, columns, null, - null, null); } catch (SQLiteException ignored) { - } catch (IllegalStateException ignored) { } catch (NullPointerException ignored) { - } - - if (c != null) { - noStockBrowser = false; - Log.i("Browser", "detected AOSP browser"); - } else { - noStockBrowser = true; - Log.e("Browser", "did not detect AOSP browser"); - } - if (c != null) { - c.close(); - } - try { - - managedCursor = null; - SQLiteDatabase s = historyHandler.getReadableDatabase(); - managedCursor = s.query("history", // URI - // of - columns, // Which columns to return - null, // Which rows to return (all rows) - null, // Selection arguments (none) - null, null, null); - - } catch (SQLiteException ignored) { - } catch (NullPointerException ignored) { - } catch (IllegalStateException ignored) { + } catch (IllegalStateException ignored) { } try { - if (managedCursor != null) { - - if (managedCursor.moveToLast()) { - + if (historyCursor != null) { + if (historyCursor.moveToLast()) { // Variable for holding the retrieved URL - - int urlColumn = managedCursor.getColumnIndex("url"); - int titleColumn = managedCursor + int urlColumn = historyCursor.getColumnIndex("url"); + int titleColumn = historyCursor .getColumnIndex("title"); // Reference to the the column containing the URL + int n = 0; do { - String urlA = managedCursor - .getString(urlColumn); - String title = managedCursor - .getString(titleColumn); - Map map = new HashMap(); - map.put("title", title); - map.put("url", urlA); - list.add(map); - } while (managedCursor.moveToPrevious()); + + h[n][0] = historyCursor.getString(urlColumn); + h[n][2] = h[n][0].substring(0, + Math.min(100, h[n][0].length())) + + "..."; + h[n][1] = historyCursor.getString(titleColumn); + historyHtml += (HistoryPageVariables.Part1 + + h[n][0] + HistoryPageVariables.Part2 + + h[n][1] + HistoryPageVariables.Part3 + + h[n][2] + HistoryPageVariables.Part4); + n++; + } while (n < 49 && historyCursor.moveToPrevious()); } } - handler.sendEmptyMessage(1); } catch (SQLiteException ignored) { } catch (NullPointerException ignored) { } catch (IllegalStateException ignored) { } - managedCursor.close(); - } - - }); - try { - updateAutoComplete.start(); - } catch (NullPointerException ignored) { - } catch (SQLiteMisuseException ignored) { - } catch (IllegalStateException ignored) { - } - - getUrl.setThreshold(1); - getUrl.setTokenizer(new SpaceTokenizer()); - getUrl.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView arg0, View arg1, int arg2, - long arg3) { + historyHtml += BookmarkPageVariables.End; + File historyWebPage = new File(context.getFilesDir(), + "history.html"); try { - String url; - url = ((TextView) arg1.findViewById(R.id.url)).getText() - .toString(); - getUrl.setText(url); - searchTheWeb(url, CONTEXT); - url = null; + FileWriter hWriter = new FileWriter(historyWebPage, false); + hWriter.write(historyHtml); + hWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + if (uBar.isShown()) { + currentTabTitle.setText("History"); + setUrlText(""); getUrl.setPadding(tenPad, 0, tenPad, 0); - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); - } catch (NullPointerException e) { - Log.e("Browser Error: ", - "NullPointerException on item click"); } + + view.loadUrl("file://" + historyWebPage); } }); - - getUrl.setSelectAllOnFocus(true); // allows edittext to select all when - // clicked + history.run(); } - void back() { - ImageView exit = (ImageView) findViewById(R.id.exit); - exit.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(exit); + public static IncognitoWebView generateTab(final int pageToView, String Url, + final boolean display) { + IncognitoWebView view = new IncognitoWebView(CONTEXT); + view.setId(pageToView); + view.setWebViewClient(new IncognitoWebViewClient(ACTIVITY)); + view.setWebChromeClient(new IncognitoChromeClient(ACTIVITY)); + if (API > 8) { + view.setDownloadListener(new IncognitoDownloadListener(ACTIVITY)); } - exit.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - - if (currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - } - - } - }); - exit.setOnLongClickListener(new OnLongClickListener() { - - @Override - public boolean onLongClick(View v) { - finish(); - return true; + if (display) { + if (currentId != -1) { + background.removeView(currentTab); } - - }); - - } - - @Override - public void finish() { - background.clearDisappearingChildren(); - tabScroll.clearDisappearingChildren(); - if (settings.getBoolean("cache", false)) { - currentTab.clearCache(true); - Log.i("Lightning", "Cache Cleared"); + background.addView(view); + view.requestFocus(); + currentId = pageToView; + currentTab = main[pageToView]; + currentTabTitle = urlTitle[pageToView]; } - super.finish(); + uBar.bringToFront(); + if (Url.contains("about:home")) { + goBookmarks(CONTEXT, view); + } else if (Url.contains("about:blank")) { + view.loadUrl(""); + } else { + searchTheWeb(Url, CONTEXT); + } + Log.i("Browser", "tab complete"); + return view; } - void forward() { - ImageView forward = (ImageView) findViewById(R.id.forward); - forward.setBackgroundResource(R.drawable.button); - if (isPhone) { - RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); - relativeLayout1.removeView(forward); + public static void goBack(IncognitoWebView view) { + if (view.isShown() && view.canGoBack()) { + view.goBack(); } - forward.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - if (currentTab.canGoForward()) { - currentTab.goForward(); - } - } + Animation left = AnimationUtils.loadAnimation(CONTEXT, R.anim.left); + background.startAnimation(left); - }); } static void goBookmarks(Context context, IncognitoWebView view) { @@ -759,1284 +486,1566 @@ public class IncognitoModeActivity extends Activity implements OnTouchListener { openBookmarks(context, view); } - @SuppressLint("InlinedApi") - private void initialize() { + public static void goForward(IncognitoWebView view) { + if (view.isShown() && view.canGoForward()) { + view.goForward(); + } + Animation right = AnimationUtils.loadAnimation(CONTEXT, R.anim.right); + background.startAnimation(right); + } - tabList = new ArrayList(); - bUrl = new String[MAX_BOOKMARKS]; - bTitle = new String[MAX_BOOKMARKS]; - main = new IncognitoWebView[MAX_TABS]; - urlTitle = new TextView[MAX_TABS]; - urlToLoad = new String[MAX_TABS][2]; - fullScreen = false; - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - historyHandler = new DatabaseHandler(this); - cookieManager = CookieManager.getInstance(); - CookieSyncManager.createInstance(CONTEXT); - cookieManager.setAcceptCookie(false); + public static void handleLongClickOnBookmarks(final String clickedURL, + final int n) { + if (clickedURL != null) { - progressBar = (ProgressBar) findViewById(R.id.progressBar1); - browserProgress = (ProgressBar) findViewById(R.id.progressBar); - browserProgress.setVisibility(View.GONE); + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + renameBookmark(clickedURL); + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + main[n].loadUrl(clickedURL); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + deleteBookmark(clickedURL); + break; + } + } + } + }; - if (API >= 11) { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ics_animation)); - } else { - progressBar.setIndeterminateDrawable(getResources().getDrawable( - R.drawable.ginger_animation)); + AlertDialog.Builder builder = new AlertDialog.Builder(CONTEXT); // dialog + builder.setMessage("What would you like to do with this bookmark?") + .setPositiveButton("Rename", dialogClickListener) + .setNegativeButton("Open", dialogClickListener) + .setNeutralButton("Delete", dialogClickListener).show(); } + } - showFullScreen = settings.getBoolean("fullscreen", false); - uBar = (RelativeLayout) findViewById(R.id.urlBar); - screen = (RelativeLayout) findViewById(R.id.background); - slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up); - slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down); - fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); - fadeOut.setDuration(250); - fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); - // mShortAnimationDuration = getResources().getInteger( - // android.R.integer.config_mediumAnimTime); - slideUp.setAnimationListener(new AnimationListener() { + public static int newId() { - @Override - public void onAnimationEnd(Animation arg0) { - uBar.setVisibility(View.GONE); - } + Random n = new Random(); + int id = n.nextInt(); - @Override - public void onAnimationRepeat(Animation arg0) { + while (tabList.contains(id)) { + id = n.nextInt(); + } + return id; + } + // new tab method, takes the id of the tab to be created and the url to load + public static int newTab(final String theUrl, final boolean display) { + Log.i("Browser", "making tab"); + homepage = settings.getString("home", HOMEPAGE); + int finalID = createTab(theUrl, display); + if (finalID != -1) { + tabList.add(finalID); + if (display) { + currentId = finalID; + currentTab = main[finalID]; + currentTabTitle = urlTitle[finalID]; } - @Override - public void onAnimationStart(Animation arg0) { + return finalID; + } else { + return 0; + } + } + public static void onCreateWindow(Message resultMsg) { + newTab("", true); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(currentTab); + resultMsg.sendToTarget(); + browserHandler.postDelayed(new Runnable() { + @Override + public void run() { + currentTab.loadUrl(getUrl.getText().toString()); } + }, 500); + } - }); - slideDown.setAnimationListener(new AnimationListener() { - - @Override - public void onAnimationEnd(Animation animation) { + public static void onHideCustomView(FrameLayout fullScreenContainer, + CustomViewCallback mCustomViewCallback, int orientation) { + FrameLayout screen = (FrameLayout) ACTIVITY.getWindow().getDecorView(); + screen.removeView(fullScreenContainer); + fullScreenContainer = null; + mCustomViewCallback.onCustomViewHidden(); + ACTIVITY.setRequestedOrientation(orientation); + background.addView(currentTab); + uBar.setVisibility(View.VISIBLE); + uBar.bringToFront(); + } - } + private static Message click; + public static boolean onLongClick() { + int n = currentId; + if(currentId == -1 || currentTab == null){ + return true; + } + final HitTestResult result = currentTab.getHitTestResult(); - @Override - public void onAnimationRepeat(Animation animation) { + if (currentTab.getUrl().contains( + "file://" + CONTEXT.getFilesDir() + "/bookmarks.html")) { + click = new Message(); + click.arg1 = n; + click.setTarget(new ClickHandler()); + currentTab.requestFocusNodeHref(click); - } + return true; + } else if (result != null) { + if (result.getExtra() != null) { + if (result.getType() == 5 && API > 8) { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + int num = currentId; + newTab(result.getExtra(), false); + // urlTitle[num].performClick(); + currentId = num; + currentTab = main[num]; + currentTabTitle = urlTitle[num]; + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + currentTab.loadUrl(result.getExtra()); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API > 8) { + String url = result.getExtra(); - @Override - public void onAnimationStart(Animation animation) { - uBar.setVisibility(View.VISIBLE); - } + Utils.downloadFile(CONTEXT, url, null, null); - }); + } + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + CONTEXT); // dialog + builder.setMessage( + "What would you like to do with this image?") + .setPositiveButton("Open in New Tab", + dialogClickListener) + .setNegativeButton("Open Normally", + dialogClickListener) + .setNeutralButton("Download Image", + dialogClickListener).show(); - RelativeLayout refreshLayout = (RelativeLayout) findViewById(R.id.refreshLayout); - refreshLayout.setBackgroundResource(R.drawable.button); + } else { + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + int num = currentId; + newTab(result.getExtra(), false); + currentId = num; + currentTab = main[num]; + currentTabTitle = urlTitle[num]; + break; + } + case DialogInterface.BUTTON_NEGATIVE: { + currentTab.loadUrl(result.getExtra()); + break; + } + case DialogInterface.BUTTON_NEUTRAL: { + if (API < 11) { + android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ACTIVITY + .getSystemService(Context.CLIPBOARD_SERVICE); + clipboard.setText(result.getExtra()); + } else { + ClipboardManager clipboard = (ClipboardManager) ACTIVITY + .getSystemService(CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText( + "label", result.getExtra()); + clipboard.setPrimaryClip(clip); + } + break; + } + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder( + CONTEXT); // dialog + builder.setTitle(result.getExtra()) + .setMessage( + "What do you want to do with this link?") + .setPositiveButton("Open in New Tab", + dialogClickListener) + .setNegativeButton("Open Normally", + dialogClickListener) + .setNeutralButton("Copy link", dialogClickListener) + .show(); + } + } + return true; - // user agent - if (API < 17) { - user = new WebView(CONTEXT).getSettings().getUserAgentString(); } else { - user = WebSettings.getDefaultUserAgent(this); + return false; } + } - background = (FrameLayout) findViewById(R.id.holder); - defaultUser = user; // setting mobile user - // agent - switch (settings.getInt("search", 1)) { - case 1: - SEARCH = FinalVariables.GOOGLE_SEARCH; - break; - case 2: - SEARCH = FinalVariables.BING_SEARCH; - break; - case 3: - SEARCH = FinalVariables.YAHOO_SEARCH; - break; - case 4: - SEARCH = FinalVariables.STARTPAGE_SEARCH; - break; - case 5: - SEARCH = FinalVariables.DUCK_SEARCH; - break; - case 6: - SEARCH = FinalVariables.BAIDU_SEARCH; - break; - case 7: - SEARCH = FinalVariables.YANDEX_SEARCH; - break; - case 8: - SEARCH = FinalVariables.DUCK_LITE_SEARCH; - break; + public static void onPageFinished(WebView view, String url) { + if (view.isShown()) { + view.invalidate(); + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + + if (showFullScreen && uBar.isShown()) { + uBar.startAnimation(slideUp); + } } + view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); + Log.i("Lightning", "Page Finished"); + loadTime = System.currentTimeMillis() - loadTime; + Log.i("Lightning", "Load Time: " + loadTime); + } - exitTab = getResources().getDrawable(R.drawable.stop); // user - // agent - homepage = settings.getString("home", HOMEPAGE); // initializing - // the - // stored - // homepage - // variable + private static int numberPage; + public static void onPageStarted(WebView view, String url, Bitmap favicon) { + Log.i("Lightning", "Page Started"); + loadTime = System.currentTimeMillis(); + numberPage = view.getId(); - // initializing variables declared + if (url.startsWith("file://")) { + view.getSettings().setUseWideViewPort(false); + } else { + view.getSettings().setUseWideViewPort( + settings.getBoolean("wideviewport", true)); + } - height = getResources().getDrawable(R.drawable.loading) - .getMinimumHeight(); - width = getResources().getDrawable(R.drawable.loading) - .getMinimumWidth(); + if (view.isShown()) { + refresh.setVisibility(View.INVISIBLE); + progressBar.setVisibility(View.VISIBLE); + setUrlText(url); + } - // hides keyboard so it doesn't default pop up - this.getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + urlTitle[numberPage].setCompoundDrawables(incognitoPage, null, exitTab, + null); + if (favicon != null) { + setFavicon(view.getId(), favicon); + } - // opens icondatabase so that favicons can be stored - WebIconDatabase.getInstance().open( - getDir("icons", MODE_PRIVATE).getPath()); + getUrl.setPadding(tenPad, 0, tenPad, 0); + urlToLoad[numberPage][0] = url; - // scroll view containing tabs - tabLayout = (LinearLayout) findViewById(R.id.tabLayout); - tabScroll = (HorizontalScrollView) findViewById(R.id.tabScroll); - tabScroll.setBackgroundColor(getResources().getColor(R.color.black)); - tabScroll.setHorizontalScrollBarEnabled(false); - if (API > 8) { - tabScroll.setOverScrollMode(View.OVER_SCROLL_NEVER); // disallow - // overscroll + if (!uBar.isShown() && showFullScreen) { + uBar.startAnimation(slideDown); } + } - // image dimensions and initialization - final int dps = 175; - final float scale = getApplicationContext().getResources() - .getDisplayMetrics().density; - pixels = (int) (dps * scale + 0.5f); - leftPad = (int) (17 * scale + 0.5f); - rightPad = (int) (15 * scale + 0.5f); - height32 = (int) (32 * scale + 0.5f); - tenPad = (int) (10 * scale + 0.5f); + public static void onProgressChanged(int id, int progress) { + if (id == currentId) { + browserProgress.setProgress(progress); + if (progress < 100) { + browserProgress.setVisibility(View.VISIBLE); + } else { + browserProgress.setVisibility(View.GONE); + } + } + } - webpageOther = getResources().getDrawable(R.drawable.webpage); - incognitoPage = getResources().getDrawable(R.drawable.incognito); - webpageOther.setBounds(0, 0, width / 2, height / 2); - incognitoPage.setBounds(0, 0, width / 2, height / 2); - exitTab.setBounds(0, 0, width * 2 / 3, height * 2 / 3); + public static void onReceivedTitle(int numberPage, String title) { + if (title != null && title.length() != 0) { + urlTitle[numberPage].setText(title); + urlToLoad[numberPage][1] = title; + } + } - Thread startup = new Thread(new Runnable() { + public static void onShowCustomView() { + background.removeView(currentTab); + uBar.setVisibility(View.GONE); + } - @Override - public void run() { - reopenOldTabs(); // restores old tabs or creates a new one + static void openBookmarks(Context context, IncognitoWebView view) { + String bookmarkHtml = BookmarkPageVariables.Heading; + + for (int n = 0; n < MAX_BOOKMARKS; n++) { + if (bUrl[n] != null) { + bookmarkHtml += (BookmarkPageVariables.Part1 + bUrl[n] + + BookmarkPageVariables.Part2 + bUrl[n] + + BookmarkPageVariables.Part3 + bTitle[n] + BookmarkPageVariables.Part4); } + } + bookmarkHtml += BookmarkPageVariables.End; + File bookmarkWebPage = new File(context.getFilesDir(), "bookmarks.html"); + try { + FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); + bookWriter.write(bookmarkHtml); + bookWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + view.loadUrl("file://" + bookmarkWebPage); - }); - startup.run(); + if (uBar.isShown()) { + currentTabTitle.setText("Bookmarks"); + setUrlText(""); + getUrl.setPadding(tenPad, 0, tenPad, 0); + } - // new tab button - ImageView newTab = (ImageView) findViewById(R.id.newTab); - newTab.setBackgroundResource(R.drawable.button); - newTab.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - newTab(homepage, true); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - } - }, 100L); - - } - }); - newTab.setOnLongClickListener(new OnLongClickListener() { + } - @Override - public boolean onLongClick(View v) { - if (settings.getString("oldPage", "").length() > 0) { - newTab(settings.getString("oldPage", ""), true); - edit.putString("oldPage", ""); - edit.commit(); - tabScroll.postDelayed(new Runnable() { - @Override - public void run() { - tabScroll.smoothScrollTo( - currentTabTitle.getLeft(), 0); - } - }, 100L); - } - return true; - } + public static void openFileChooser(ValueCallback uploadMsg) { + mUploadMessage = uploadMsg; + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + i.setType("*/*"); + ACTIVITY.startActivityForResult( + Intent.createChooser(i, "File Chooser"), 1); + } - }); - refresh = (ImageView) findViewById(R.id.refresh); - refreshLayout.setOnClickListener(new OnClickListener() { + public static void reinitializeSettings() { + int size = tabList.size(); + for (int n = 0; n < size; n++) { + main[tabList.get(n)].settingsInitialization(CONTEXT); + } + } - @Override - public void onClick(View arg0) { - if (currentTab.getProgress() < 100) { - currentTab.stopLoading(); - } else { - currentTab.reload(); + public static void renameBookmark(String url) { + index = 0; + for (int n = 0; n < MAX_BOOKMARKS; n++) { + if (bUrl[n] != null) { + if (bUrl[n].equalsIgnoreCase(url)) { + index = n; + break; } } + } - }); + final AlertDialog.Builder homePicker = new AlertDialog.Builder(CONTEXT); + homePicker.setTitle("Rename Bookmark"); + final EditText getText = new EditText(CONTEXT); + getText.setText(bTitle[index]); - enterUrl(); - if (showFullScreen) { - toggleFullScreen(); - } - browserHandler = new Handle(); + homePicker.setView(getText); + homePicker.setPositiveButton("OK", + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + bTitle[index] = getText.getText().toString(); + File book = new File(CONTEXT.getFilesDir(), "bookmarks"); + File bookUrl = new File(CONTEXT.getFilesDir(), + "bookurl"); + int n = 0; + try { + BufferedWriter bookWriter = new BufferedWriter( + new FileWriter(book)); + BufferedWriter urlWriter = new BufferedWriter( + new FileWriter(bookUrl)); + while (bUrl[n] != null && n < (MAX_BOOKMARKS - 1)) { + bookWriter.write(bTitle[n]); + urlWriter.write(bUrl[n]); + bookWriter.newLine(); + urlWriter.newLine(); + n++; + } + bookWriter.close(); + urlWriter.close(); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } + for (int p = 0; p < MAX_BOOKMARKS; p++) { + bUrl[p] = null; + bTitle[p] = null; + } + try { + BufferedReader readBook = new BufferedReader( + new FileReader(book)); + BufferedReader readUrl = new BufferedReader( + new FileReader(bookUrl)); + String t, u; + int z = 0; + while ((t = readBook.readLine()) != null + && (u = readUrl.readLine()) != null + && z < MAX_BOOKMARKS) { + bUrl[z] = u; + bTitle[z] = t; + z++; + } + readBook.close(); + readUrl.close(); + } catch (IOException ignored) { + } + openBookmarks(CONTEXT, currentTab); + } + }); + homePicker.show(); } - static class Handle extends Handler { + static void searchTheWeb(String query, Context context) { + query = query.trim(); + currentTab.stopLoading(); - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case 1: { - currentTab.loadUrl(getUrl.getText().toString()); - break; - } - case 2: { - // deleteTab(msg.arg1); - break; - } - case 3: { - currentTab.invalidate(); - break; - } - } - super.handleMessage(msg); + if (query.startsWith("www.")) { + query = "http://" + query; + } else if (query.startsWith("ftp.")) { + query = "ftp://" + query; } + boolean containsPeriod = query.contains("."); + boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) && (query + .replace(".", "").length() >= 4)); + boolean aboutScheme = query.contains("about:"); + boolean validURL = (query.startsWith("ftp://") + || query.startsWith("http://") || query.startsWith("file://") || query + .startsWith("https://")) || isIPAddress; + boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); + + if (query.contains("about:home") || query.contains("about:bookmarks")) { + goBookmarks(context, currentTab); + } else if (query.contains("about:history")) { + generateHistory(currentTab, context); + } else if (isSearch) { + query.replaceAll(" ", "+"); + currentTab.loadUrl(SEARCH + query); + } else if (!validURL) { + currentTab.loadUrl("http://" + query); + } else { + currentTab.loadUrl(query); + } } - void reopenOldTabs() { - Intent url = getIntent(); - String URL = url.getDataString(); - boolean oldTabs = false; + public static void setFavicon(int id, Bitmap favicon) { + Drawable icon; + icon = new BitmapDrawable(null, favicon); + icon.setBounds(0, 0, width / 2, height / 2); + urlTitle[id] + .setCompoundDrawables(incognitoPage, null, exitTab, null); + - if (settings.getBoolean("savetabs", true)) { - if (URL != null) { - // opens a new tab with the url if its there - int n = newTab(URL, true); - main[n].resumeTimers(); - oldTabs = true; + } + public static void setUrlText(String url) { + if (url != null) { + if (!url.startsWith("file://")) { + getUrl.setText(url); + } else { + getUrl.setText(""); } - boolean first = false; - for (String aMemoryURL : memoryURL) { - if (aMemoryURL.length() > 0) { - if (!first) { - int n = newTab("", !oldTabs); - main[n].resumeTimers(); - main[n].getSettings().setCacheMode( - WebSettings.LOAD_CACHE_ELSE_NETWORK); - main[n].loadUrl(aMemoryURL); - } else { - int n = newTab("", false); - main[n].getSettings().setCacheMode( - WebSettings.LOAD_CACHE_ELSE_NETWORK); - main[n].loadUrl(aMemoryURL); - } - oldTabs = true; - } + } + } - } + static void share() { + Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); - if (!oldTabs) { - int n = newTab(homepage, true); - main[n].resumeTimers(); - } - } else { - if (URL != null) { - // opens a new tab with the URL if its there - int n = newTab(URL, true); - main[n].resumeTimers(); + // set the type + shareIntent.setType("text/plain"); - } else { - // otherwise it opens the home-page - int n = newTab(homepage, true); - main[n].resumeTimers(); + // add a subject + shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, + urlToLoad[currentId][1]); - } + // build the body of the message to be shared + String shareMessage = urlToLoad[currentId][0]; + + // add the message + shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); + + // start the chooser for sharing + CONTEXT.startActivity(Intent.createChooser(shareIntent, + "Share this page")); + } + + public static void toggleFullScreen() { + showFullScreen = settings.getBoolean("fullscreen", false); + IncognitoWebView.showFullScreen = showFullScreen; + if (fullScreen) { + background.removeView(uBar); + screen.addView(uBar); + fullScreen = false; + } else { + screen.removeView(uBar); + background.addView(uBar); + fullScreen = true; } } - public static IncognitoWebView generateTab(final int pageToView, String Url, - final boolean display) { - IncognitoWebView view = new IncognitoWebView(CONTEXT); - view.setId(pageToView); - view.setWebViewClient(new IncognitoWebViewClient(ACTIVITY)); - view.setWebChromeClient(new IncognitoChromeClient(ACTIVITY)); - if (API > 8) { - view.setDownloadListener(new IncognitoDownloadListener(ACTIVITY)); + void back() { + ImageView exit = (ImageView) findViewById(R.id.exit); + exit.setBackgroundResource(R.drawable.button); + if (isPhone) { + RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); + relativeLayout1.removeView(exit); } + exit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + if (currentTab.canGoBack()) { + currentTab.goBack(); + } else { + deleteTab(currentId); + } - if (display) { - if (currentId != -1) { - background.removeView(currentTab); } - background.addView(view); - view.requestFocus(); - currentId = pageToView; - currentTab = main[pageToView]; - currentTabTitle = urlTitle[pageToView]; - } - uBar.bringToFront(); - if (Url.contains("about:home")) { - goBookmarks(CONTEXT, view); - } else if (Url.contains("about:blank")) { - view.loadUrl(""); - } else { - if (!Url.startsWith("http") && Url != "") { - Url = "http://" + Url; + + }); + exit.setOnLongClickListener(new OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + finish(); + return true; } - view.loadUrl(Url); - } - Log.i("Browser", "tab complete"); - return view; - } + }); - private void newSettings() { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); } - // new tab method, takes the id of the tab to be created and the url to load - public static int newTab(final String theUrl, final boolean display) { - Log.i("Browser", "making tab"); - homepage = settings.getString("home", HOMEPAGE); - int finalID = createTab(theUrl, display); - if (finalID != -1) { - tabList.add(finalID); - if (display) { - currentId = finalID; - currentTab = main[finalID]; - currentTabTitle = urlTitle[finalID]; - } - - return finalID; - } else { - return 0; + void deleteTab(final int del) { + if (API >= 11) { + main[del].onPause(); } - } - - //creates the tab and returns the ID of the view - public static int createTab(String theUrl, boolean display) { - int id = -1; - for (int n = 0; n < MAX_TABS; n++) { - if (main[n] == null) { - id = n; - break; - } + main[del].stopLoading(); + main[del].clearHistory(); + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + edit.putString("oldPage", urlToLoad[del][0]); + edit.commit(); + urlToLoad[del][0] = null; + urlToLoad[del][1] = null; + if (API < 16) { + urlTitle[del].setBackgroundDrawable(active); + } else { + urlTitle[del].setBackground(active); } - if (id != -1) { - if (id > 0) { - if (display) { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else { - currentTabTitle.setBackground(inactive); + + urlTitle[del].setPadding(leftPad, 0, rightPad, 0); + Animation yolo = AnimationUtils.loadAnimation(this, R.anim.down); + yolo.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationEnd(Animation animation) { + // urlTitle[del].setVisibility(View.GONE); + tabLayout.post(new Runnable() { + + @Override + public void run() { + tabLayout.removeView(urlTitle[del]); } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - } + + }); + findNewView(del); + main[del] = null; } - final TextView title = new TextView(CONTEXT); - title.setText("New Tab"); - if (display) { - if (API < 16) { - title.setBackgroundDrawable(active); - } else { - title.setBackground(active); - } - } else { - if (API < 16) { - title.setBackgroundDrawable(inactive); - } else { - title.setBackground(inactive); - } + + @Override + public void onAnimationRepeat(Animation animation) { } - title.setSingleLine(true); - title.setGravity(Gravity.CENTER_VERTICAL); - title.setHeight(height32); - title.setWidth(pixels); - title.setPadding(leftPad, 0, rightPad, 0); - title.setId(id); - title.setGravity(Gravity.CENTER_VERTICAL); - title.setCompoundDrawables(incognitoPage, null, exitTab, null); + @Override + public void onAnimationStart(Animation animation) { + } - Drawable[] drawables = title.getCompoundDrawables(); - bounds = drawables[2].getBounds(); - title.setOnTouchListener(ACTIVITY); - Animation holo = AnimationUtils.loadAnimation(CONTEXT, R.anim.up); - tabLayout.addView(title); - title.setVisibility(View.INVISIBLE); - holo.setAnimationListener(new AnimationListener() { + }); + urlTitle[del].startAnimation(yolo); + uBar.bringToFront(); + } - @Override - public void onAnimationEnd(Animation animation) { - } + void enter() { + getUrl.setOnKeyListener(new OnKeyListener() { - @Override - public void onAnimationRepeat(Animation animation) { - } + @Override + public boolean onKey(View arg0, int arg1, KeyEvent arg2) { - @Override - public void onAnimationStart(Animation animation) { - title.setVisibility(View.VISIBLE); + switch (arg1) { + case KeyEvent.KEYCODE_ENTER: + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + searchTheWeb(getUrl.getText().toString(), CONTEXT); + return true; + default: + break; } + return false; + } - }); - title.startAnimation(holo); - urlTitle[id] = title; - - urlTitle[id].setText("New Tab"); + }); + getUrl.setOnEditorActionListener(new OnEditorActionListener() { - if (theUrl != null) { - main[id] = generateTab(id, theUrl, display); - } else { - main[id] = generateTab(id, homepage, display); + @Override + public boolean onEditorAction(TextView arg0, int actionId, + KeyEvent arg2) { + if (actionId == EditorInfo.IME_ACTION_GO + || actionId == EditorInfo.IME_ACTION_DONE + || actionId == EditorInfo.IME_ACTION_NEXT + || actionId == EditorInfo.IME_ACTION_SEND + || actionId == EditorInfo.IME_ACTION_SEARCH + || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + searchTheWeb(getUrl.getText().toString(), CONTEXT); + return true; + } + return false; } - } else { - Utils.showToast(CONTEXT, "Max number of tabs reached"); - } - return id; + }); } - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent intent) { - if (requestCode == 1) { - if (null == mUploadMessage) - return; - Uri result = intent == null || resultCode != RESULT_OK ? null - : intent.getData(); - mUploadMessage.onReceiveValue(result); - mUploadMessage = null; + @SuppressLint("HandlerLeak") + void enterUrl() { + getUrl = (MultiAutoCompleteTextView) findViewById(R.id.enterUrl); + getUrl.setPadding(tenPad, 0, tenPad, 0); + getUrl.setTextColor(getResources().getColor(android.R.color.black)); + getUrl.setPadding(tenPad, 0, tenPad, 0); + getUrl.setBackgroundResource(R.drawable.book); + getUrl.setPadding(tenPad, 0, tenPad, 0); + final List> list = new ArrayList>(); + handler = new Handler() { - } - } + @Override + public void handleMessage(Message msg) { - @Override - public void onBackPressed() { - try { - if (showFullScreen && !uBar.isShown()) { - uBar.startAnimation(slideDown); - } - if (currentTab.isShown() && currentTab.canGoBack()) { - currentTab.goBack(); - } else { - deleteTab(currentId); - uBar.bringToFront(); - } - } catch (NullPointerException ignored) { - } - return; - } + switch (msg.what) { + case 1: { + SimpleAdapter adapter = new SimpleAdapter(CONTEXT, list, + R.layout.two_line_autocomplete, new String[] { + "title", "url" }, new int[] { R.id.title, + R.id.url }); - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (settings.getBoolean("textreflow", false)) { - currentTab.getSettings().setLayoutAlgorithm( - LayoutAlgorithm.NARROW_COLUMNS); - } else { - currentTab.getSettings().setLayoutAlgorithm( - LayoutAlgorithm.NORMAL); - } + getUrl.setAdapter(adapter); - } + break; + } + case 2: { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); // displays main xml layout - CONTEXT = this; - ACTIVITY = this; - settings = getSharedPreferences("settings", 0); - edit = settings.edit(); + break; + } + } + } + }; - if (settings.getBoolean("hidestatus", false)) { - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - if (settings.getBoolean("savetabs", true)) { - String mem = settings.getString("memory", ""); - edit.putString("memory", ""); - memoryURL = new String[MAX_TABS]; - memoryURL = getArray(mem); - } + Thread updateAutoComplete = new Thread(new Runnable() { - inactive = getResources().getDrawable(R.drawable.bg_inactive); - active = getResources().getDrawable(R.drawable.bg_press); - initialize(); // sets up random stuff - options(); // allows options to be opened - enter();// enter url bar - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); + @Override + public void run() { - float widthInInches = metrics.widthPixels / metrics.xdpi; - float heightInInches = metrics.heightPixels / metrics.ydpi; - double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) - + Math.pow(heightInInches, 2)); - // 0.5" buffer for 7" devices - isPhone = sizeInInches < 6.5; - forward();// forward button - back(); - if (settings.getInt("first", 0) == 0) { // This dialog alerts the user - // to some navigation - // techniques - String message = "1. Long-press back button to exit browser\n\n" - + "2. Swipe from left edge toward the right (---->) to go back\n\n" - + "3. Swipe from right edge toward the left (<----)to go forward\n\n" - + "4. Visit settings and advanced settings to change options\n\n" - + "5. Long-press on the new tab button to open the last closed tab"; - - Utils.createInformativeDialog(CONTEXT, "Browser Tips", message); - edit.putInt("first", 1); - edit.commit(); - } + Cursor c = null; + Cursor managedCursor = null; + columns = new String[] { "url", "title" }; + try { - } + bookmarks = Browser.BOOKMARKS_URI; + c = getContentResolver().query(bookmarks, columns, null, + null, null); + } catch (SQLiteException ignored) { + } catch (IllegalStateException ignored) { + } catch (NullPointerException ignored) { + } - @Override - public boolean onCreateOptionsMenu(Menu menu) { + if (c != null) { + noStockBrowser = false; + Log.i("Browser", "detected AOSP browser"); + } else { + noStockBrowser = true; + Log.e("Browser", "did not detect AOSP browser"); + } + if (c != null) { + c.close(); + } + try { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.incognito_menu, menu); + managedCursor = null; + SQLiteDatabase s = historyHandler.getReadableDatabase(); + managedCursor = s.query("history", // URI + // of + columns, // Which columns to return + null, // Which rows to return (all rows) + null, // Selection arguments (none) + null, null, null); - return true; - } + } catch (SQLiteException ignored) { + } catch (NullPointerException ignored) { + } catch (IllegalStateException ignored) { + } - /* - * (non-Javadoc) - * - * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) - */ - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - switch (keyCode) { - case KeyEvent.KEYCODE_SEARCH: { - getUrl.requestFocus(); - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - manager.showSoftInput(getUrl, 0); - - break; - } - case KeyEvent.KEYCODE_F5: { - currentTab.reload(); - } - case KeyEvent.KEYCODE_ESCAPE: { - currentTab.stopLoading(); - } - case KeyEvent.KEYCODE_TAB: { - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if(!manager.isActive()){ - newTab(homepage, true); + try { + if (managedCursor != null) { + + if (managedCursor.moveToLast()) { + + // Variable for holding the retrieved URL + + int urlColumn = managedCursor.getColumnIndex("url"); + int titleColumn = managedCursor + .getColumnIndex("title"); + // Reference to the the column containing the URL + do { + String urlA = managedCursor + .getString(urlColumn); + String title = managedCursor + .getString(titleColumn); + Map map = new HashMap(); + map.put("title", title); + map.put("url", urlA); + list.add(map); + } while (managedCursor.moveToPrevious()); + } + } + handler.sendEmptyMessage(1); + } catch (SQLiteException ignored) { + } catch (NullPointerException ignored) { + } catch (IllegalStateException ignored) { + } + managedCursor.close(); } - - } - case KeyEvent.KEYCODE_F12: { - finish(); - } - case KeyEvent.KEYCODE_F6:{ - getUrl.selectAll(); - } - case KeyEvent.KEYCODE_F10: { - startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); - } - case KeyEvent.KEYCODE_F11:{ - toggleFullScreen(); + + }); + try { + updateAutoComplete.start(); + } catch (NullPointerException ignored) { + } catch (SQLiteMisuseException ignored) { + } catch (IllegalStateException ignored) { } - case KeyEvent.KEYCODE_DEL:{ - InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if(!manager.isActive()){ - currentTab.goBack(); + + getUrl.setThreshold(1); + getUrl.setTokenizer(new SpaceTokenizer()); + getUrl.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + try { + String url; + url = ((TextView) arg1.findViewById(R.id.url)).getText() + .toString(); + getUrl.setText(url); + searchTheWeb(url, CONTEXT); + url = null; + getUrl.setPadding(tenPad, 0, tenPad, 0); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(getUrl.getWindowToken(), 0); + } catch (NullPointerException e) { + Log.e("Browser Error: ", + "NullPointerException on item click"); + } } + + }); + + getUrl.setSelectAllOnFocus(true); // allows edittext to select all when + // clicked + } + + void findNewView(int id) { + int delete = tabList.indexOf(id); + int leftId = id; + boolean right = false, left = false; + if (id == currentId) { + + if (main[id].isShown()) { + main[id].startAnimation(fadeOut); + background.removeView(main[id]); + uBar.bringToFront(); + } + + if (tabList.size() > delete + 1) { + id = tabList.get(delete + 1); + if (urlTitle[id].isShown()) { + background.addView(main[id]); + main[id].setVisibility(View.VISIBLE); + uBar.bringToFront(); + if (API < 16) { + urlTitle[id].setBackgroundDrawable(active); + } else { + urlTitle[id].setBackground(active); + } + urlTitle[id].setPadding(leftPad, 0, rightPad, 0); + currentId = id; + currentTab = main[id]; + currentTabTitle = urlTitle[id]; + setUrlText(urlToLoad[currentId][0]); + getUrl.setPadding(tenPad, 0, tenPad, 0); + right = true; + if (main[id].getProgress() < 100) { + onProgressChanged(id, main[id].getProgress()); + refresh.setVisibility(View.INVISIBLE); + progressBar.setVisibility(View.VISIBLE); + } else { + onProgressChanged(id, main[id].getProgress()); + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + } + // break; + } + + } + if (!right) { + if (delete > 0) { + leftId = tabList.get(delete - 1); + if (urlTitle[leftId].isShown()) { + background.addView(main[leftId]); + main[leftId].setVisibility(View.VISIBLE); + // uBar.bringToFront(); + if (API < 16) { + urlTitle[leftId].setBackgroundDrawable(active); + } else { + urlTitle[leftId].setBackground(active); + } + urlTitle[leftId].setPadding(leftPad, 0, rightPad, 0); + currentId = leftId; + currentTab = main[leftId]; + currentTabTitle = urlTitle[leftId]; + setUrlText(urlToLoad[currentId][0]); + getUrl.setPadding(tenPad, 0, tenPad, 0); + left = true; + if (main[leftId].getProgress() < 100) { + refresh.setVisibility(View.INVISIBLE); + progressBar.setVisibility(View.VISIBLE); + onProgressChanged(leftId, + main[leftId].getProgress()); + } else { + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + onProgressChanged(leftId, + main[leftId].getProgress()); + } + // break; + } + + } + + } + + } else { + right = left = true; } + tabList.remove(delete); + if (!(right || left)) { + finish(); } - return super.onKeyDown(keyCode, event); + uBar.bringToFront(); + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); } @Override - public boolean onKeyLongPress(int keyCode, KeyEvent event) { + public void finish() { + background.clearDisappearingChildren(); + background.removeView(currentTab); + tabScroll.clearDisappearingChildren(); + if (settings.getBoolean("cache", false)) { + currentTab.clearCache(true); + Log.i("Lightning", "Cache Cleared"); + } + super.finish(); + } - if (keyCode == KeyEvent.KEYCODE_BACK) { - if (!settings.getBoolean("restoreclosed", true)) { - for (int n = 0; n < MAX_TABS; n++) { - urlToLoad[n][0] = null; + void forward() { + ImageView forward = (ImageView) findViewById(R.id.forward); + forward.setBackgroundResource(R.drawable.button); + if (isPhone) { + RelativeLayout relativeLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1); + relativeLayout1.removeView(forward); + } + forward.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (currentTab.canGoForward()) { + currentTab.goForward(); } } - finish(); - return true; - } else - return super.onKeyLongPress(keyCode, event); + + }); } - @Override - protected void onNewIntent(Intent intent) { + @SuppressLint("InlinedApi") + private void initialize() { - String url = intent.getDataString(); - int id = -1; - int download = -1; - try { - id = intent.getExtras().getInt("acr.browser.barebones.Origin") - 1; - } catch (NullPointerException e) { - id = -1; + tabList = new ArrayList(); + bUrl = new String[MAX_BOOKMARKS]; + bTitle = new String[MAX_BOOKMARKS]; + main = new IncognitoWebView[MAX_TABS]; + urlTitle = new TextView[MAX_TABS]; + urlToLoad = new String[MAX_TABS][2]; + fullScreen = false; + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + historyHandler = new DatabaseHandler(this); + cookieManager = CookieManager.getInstance(); + CookieSyncManager.createInstance(CONTEXT); + cookieManager.setAcceptCookie(false); + + progressBar = (ProgressBar) findViewById(R.id.progressBar1); + browserProgress = (ProgressBar) findViewById(R.id.progressBar); + browserProgress.setVisibility(View.GONE); + + if (API >= 11) { + progressBar.setIndeterminateDrawable(getResources().getDrawable( + R.drawable.ics_animation)); + } else { + progressBar.setIndeterminateDrawable(getResources().getDrawable( + R.drawable.ginger_animation)); } - try { - download = intent.getExtras().getInt( - "acr.browser.barebones.Download"); - } catch (NullPointerException e) { - download = -1; + + showFullScreen = settings.getBoolean("fullscreen", false); + uBar = (RelativeLayout) findViewById(R.id.urlBar); + screen = (RelativeLayout) findViewById(R.id.background); + slideUp = AnimationUtils.loadAnimation(this, R.anim.slide_up); + slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down); + fadeOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); + fadeOut.setDuration(250); + fadeIn = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); + // mShortAnimationDuration = getResources().getInteger( + // android.R.integer.config_mediumAnimTime); + slideUp.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationEnd(Animation arg0) { + uBar.setVisibility(View.GONE); + } + + @Override + public void onAnimationRepeat(Animation arg0) { + + } + + @Override + public void onAnimationStart(Animation arg0) { + + } + + }); + slideDown.setAnimationListener(new AnimationListener() { + + @Override + public void onAnimationEnd(Animation animation) { + + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + + @Override + public void onAnimationStart(Animation animation) { + uBar.setVisibility(View.VISIBLE); + } + + }); + + RelativeLayout refreshLayout = (RelativeLayout) findViewById(R.id.refreshLayout); + refreshLayout.setBackgroundResource(R.drawable.button); + + // user agent + if (API < 17) { + user = new WebView(CONTEXT).getSettings().getUserAgentString(); + } else { + user = WebSettings.getDefaultUserAgent(this); } - if (id >= 0) { - main[id].loadUrl(url); - } else if (download == 1) { - Utils.downloadFile(CONTEXT, url, null, null); - } else if (url != null) { - newTab(url, true); + + background = (FrameLayout) findViewById(R.id.holder); + defaultUser = user; // setting mobile user + // agent + switch (settings.getInt("search", 1)) { + case 1: + SEARCH = FinalVariables.GOOGLE_SEARCH; + break; + case 2: + SEARCH = FinalVariables.BING_SEARCH; + break; + case 3: + SEARCH = FinalVariables.YAHOO_SEARCH; + break; + case 4: + SEARCH = FinalVariables.STARTPAGE_SEARCH; + break; + case 5: + SEARCH = FinalVariables.DUCK_SEARCH; + break; + case 6: + SEARCH = FinalVariables.BAIDU_SEARCH; + break; + case 7: + SEARCH = FinalVariables.YANDEX_SEARCH; + break; + case 8: + SEARCH = FinalVariables.DUCK_LITE_SEARCH; + break; } - super.onNewIntent(intent); - } + exitTab = getResources().getDrawable(R.drawable.stop); // user + // agent + homepage = settings.getString("home", HOMEPAGE); // initializing + // the + // stored + // homepage + // variable + + // initializing variables declared - @Override - public boolean onOptionsItemSelected(MenuItem item) { + height = getResources().getDrawable(R.drawable.loading) + .getMinimumHeight(); + width = getResources().getDrawable(R.drawable.loading) + .getMinimumWidth(); - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, CONTEXT); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1].equals("Bookmarks")) { - Utils.addBookmark(CONTEXT, urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(CONTEXT, currentTab); - } else if (!urlToLoad[currentId][1].equals("Bookmarks")) { - goBookmarks(CONTEXT, currentTab); - } + // hides keyboard so it doesn't default pop up + this.getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - newTab(homepage, true); - return true; - default: - return super.onOptionsItemSelected(item); + // opens icondatabase so that favicons can be stored + WebIconDatabase.getInstance().open( + getDir("icons", MODE_PRIVATE).getPath()); + + // scroll view containing tabs + tabLayout = (LinearLayout) findViewById(R.id.tabLayout); + tabScroll = (HorizontalScrollView) findViewById(R.id.tabScroll); + tabScroll.setBackgroundColor(getResources().getColor(R.color.black)); + tabScroll.setHorizontalScrollBarEnabled(false); + if (API > 8) { + tabScroll.setOverScrollMode(View.OVER_SCROLL_NEVER); // disallow + // overscroll } - } - @Override - protected void onPause() { + // image dimensions and initialization + final int dps = 175; + final float scale = getApplicationContext().getResources() + .getDisplayMetrics().density; + pixels = (int) (dps * scale + 0.5f); + leftPad = (int) (17 * scale + 0.5f); + rightPad = (int) (15 * scale + 0.5f); + height32 = (int) (32 * scale + 0.5f); + tenPad = (int) (10 * scale + 0.5f); - if (currentTab != null) { - if (API >= 11) { - currentTab.onPause(); - } - currentTab.pauseTimers(); - } - Thread remember = new Thread(new Runnable() { + incognitoPage = getResources().getDrawable(R.drawable.incognito); + incognitoPage.setBounds(0, 0, width / 2, height / 2); + exitTab.setBounds(0, 0, width * 2 / 3, height * 2 / 3); + + Thread startup = new Thread(new Runnable() { @Override public void run() { - String s = ""; - for (int n = 0; n < MAX_TABS; n++) { - if (urlToLoad[n][0] != null) { - s = s + urlToLoad[n][0] + "|$|SEPARATOR|$|"; - } - } - edit.putString("memory", s); - edit.commit(); + reopenOldTabs(); // restores old tabs or creates a new one } - }); - remember.start(); - super.onPause(); - } - @Override - protected void onResume() { - onProgressChanged(currentId, currentTab.getProgress()); - if (currentTab.getProgress() == 100) { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); + }); + startup.run(); - } - if (API >= 11) { - currentTab.onResume(); - } - reinitializeSettings(); - currentTab.resumeTimers(); - if(settings.getBoolean("fullscreen", false)!=fullScreen){ - toggleFullScreen(); - } - super.onResume(); - } + // new tab button + ImageView newTab = (ImageView) findViewById(R.id.newTab); + newTab.setBackgroundResource(R.drawable.button); + newTab.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Handler click = new NewTabHandler(); + click.sendEmptyMessage(1); + tabScroll.postDelayed(new Runnable() { + @Override + public void run() { + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + } + }, 100L); - static void openBookmarks(Context context, IncognitoWebView view) { - String bookmarkHtml = BookmarkPageVariables.Heading; + } + }); + newTab.setOnLongClickListener(new OnLongClickListener() { - for (int n = 0; n < MAX_BOOKMARKS; n++) { - if (bUrl[n] != null) { - bookmarkHtml += (BookmarkPageVariables.Part1 + bUrl[n] - + BookmarkPageVariables.Part2 + bUrl[n] - + BookmarkPageVariables.Part3 + bTitle[n] + BookmarkPageVariables.Part4); + @Override + public boolean onLongClick(View v) { + if (settings.getString("oldPage", "").length() > 0) { + newTab(settings.getString("oldPage", ""), true); + edit.putString("oldPage", ""); + edit.commit(); + tabScroll.postDelayed(new Runnable() { + @Override + public void run() { + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), + 0); + } + }, 100L); + } + return true; } - } - bookmarkHtml += BookmarkPageVariables.End; - File bookmarkWebPage = new File(context.getFilesDir(), "bookmarks.html"); - try { - FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); - bookWriter.write(bookmarkHtml); - bookWriter.close(); - } catch (IOException e) { - e.printStackTrace(); - } - view.loadUrl("file://" + bookmarkWebPage); - if (uBar.isShown()) { - currentTabTitle.setText("Bookmarks"); - setUrlText(""); - getUrl.setPadding(tenPad, 0, tenPad, 0); - } + }); + refresh = (ImageView) findViewById(R.id.refresh); + refreshLayout.setOnClickListener(new OnClickListener() { - } + @Override + public void onClick(View arg0) { - void options() { - ImageView options = (ImageView) findViewById(R.id.options); - options.setBackgroundResource(R.drawable.button); - options.setOnClickListener(new OnClickListener() { + if (currentTab.getProgress() < 100) { + currentTab.stopLoading(); + } else { + currentTab.reload(); + } + } - @Override - public void onClick(View v) { + }); - if (API >= 11) { - PopupMenu menu = new PopupMenu(CONTEXT, v); - MenuInflater inflate = menu.getMenuInflater(); - inflate.inflate(R.menu.incognito_menu, menu.getMenu()); - menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { + enterUrl(); + if (showFullScreen) { + toggleFullScreen(); + } + browserHandler = new Handle(); - @Override - public boolean onMenuItemClick(MenuItem item) { + } - switch (item.getItemId()) { - case R.id.history: - generateHistory(currentTab, CONTEXT); - return true; - case R.id.bookmark: - if (urlToLoad[currentId][1] != null) { - if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - Utils.addBookmark(CONTEXT, - urlToLoad[currentId][1], - urlToLoad[currentId][0]); - } - } - return true; - case R.id.settings: - newSettings(); - return true; - case R.id.allBookmarks: - if (urlToLoad[currentId][1] == null) { - goBookmarks(CONTEXT, currentTab); - } else if (!urlToLoad[currentId][1] - .equals("Bookmarks")) { - goBookmarks(CONTEXT, currentTab); - } - return true; - case R.id.share: - share(); - return true; - case R.id.incognito: - newTab(homepage,true); - return true; - default: - return false; - } + private void newSettings() { + startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); + } - } + @Override + protected void onActivityResult(int requestCode, int resultCode, + Intent intent) { + if (requestCode == 1) { + if (null == mUploadMessage) + return; + Uri result = intent == null || resultCode != RESULT_OK ? null + : intent.getData(); + mUploadMessage.onReceiveValue(result); + mUploadMessage = null; - }); - menu.show(); - } else if (API < 11) { + } + } - openOptionsMenu(); - } + @Override + public void onBackPressed() { + try { + if (showFullScreen && !uBar.isShown()) { + uBar.startAnimation(slideDown); + } + if (currentTab.isShown() && currentTab.canGoBack()) { + currentTab.goBack(); + } else { + deleteTab(currentId); + uBar.bringToFront(); } + } catch (NullPointerException ignored) { + } + return; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (settings.getBoolean("textreflow", false)) { + currentTab.getSettings().setLayoutAlgorithm( + LayoutAlgorithm.NARROW_COLUMNS); + } else { + currentTab.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); + } - }); } - static void share() { - Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); // displays main xml layout + CONTEXT = this; + ACTIVITY = this; + settings = getSharedPreferences("settings", 0); + edit = settings.edit(); - // set the type - shareIntent.setType("text/plain"); + if (settings.getBoolean("hidestatus", false)) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + inactive = getResources().getDrawable(R.drawable.bg_inactive); + active = getResources().getDrawable(R.drawable.bg_press); + initialize(); // sets up random stuff + options(); // allows options to be opened + enter();// enter url bar + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); - // add a subject - shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, - urlToLoad[currentId][1]); + float widthInInches = metrics.widthPixels / metrics.xdpi; + float heightInInches = metrics.heightPixels / metrics.ydpi; + double sizeInInches = Math.sqrt(Math.pow(widthInInches, 2) + + Math.pow(heightInInches, 2)); + // 0.5" buffer for 7" devices + isPhone = sizeInInches < 6.5; + forward();// forward button + back(); + if (settings.getInt("firstIncognito", 0) == 0) { + // navigation tips + String message = "Incognito Mode keeps you safe while browsing the internet." + + " History is not saved, Cookies are disabled, and Location access is " + + "disabled to ensure as best we can that you are not being tracked. " + + "Happy Browsing!"; + + Utils.createInformativeDialog(CONTEXT, "About Incognito", message); + edit.putInt("first", 1); + edit.commit(); + } + } - // build the body of the message to be shared - String shareMessage = urlToLoad[currentId][0]; + @Override + public boolean onCreateOptionsMenu(Menu menu) { - // add the message - shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.incognito_menu, menu); - // start the chooser for sharing - CONTEXT.startActivity(Intent.createChooser(shareIntent, - "Share this page")); + return true; } - static void searchTheWeb(String query, Context context) { - query = query.trim(); - currentTab.stopLoading(); + /* + * (non-Javadoc) + * + * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + switch (keyCode) { + case KeyEvent.KEYCODE_SEARCH: { + getUrl.requestFocus(); + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + manager.showSoftInput(getUrl, 0); - if (query.startsWith("www.")) { - query = "http://" + query; - } else if (query.startsWith("ftp.")) { - query = "ftp://" + query; + break; } + case KeyEvent.KEYCODE_F5: { + currentTab.reload(); + } + case KeyEvent.KEYCODE_ESCAPE: { + currentTab.stopLoading(); + } + case KeyEvent.KEYCODE_TAB: { + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (!manager.isActive()) { + newTab(homepage, true); + } - boolean containsPeriod = query.contains("."); - boolean isIPAddress = (TextUtils.isDigitsOnly(query.replace(".", "")) && (query - .replace(".", "").length() >= 4)); - boolean aboutScheme = query.contains("about:"); - boolean validURL = (query.startsWith("ftp://") - || query.startsWith("http://") || query.startsWith("file://") || query - .startsWith("https://")) || isIPAddress; - boolean isSearch = ((query.contains(" ") || !containsPeriod) && !aboutScheme); - - if (query.contains("about:home") || query.contains("about:bookmarks")) { - goBookmarks(context, currentTab); - } else if (query.contains("about:history")) { - generateHistory(currentTab, context); - } else if (isSearch) { - query.replaceAll(" ", "+"); - currentTab.loadUrl(SEARCH + query); - } else if (!validURL) { - currentTab.loadUrl("http://" + query); - } else { - currentTab.loadUrl(query); } + case KeyEvent.KEYCODE_F12: { + finish(); + } + case KeyEvent.KEYCODE_F6: { + getUrl.selectAll(); + } + case KeyEvent.KEYCODE_F10: { + startActivity(new Intent(FinalVariables.SETTINGS_INTENT)); + } + case KeyEvent.KEYCODE_F11: { + toggleFullScreen(); + } + case KeyEvent.KEYCODE_DEL: { + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (!manager.isActive()) { + currentTab.goBack(); + } + } + } + return super.onKeyDown(keyCode, event); } - public static void onPageFinished(WebView view, String url) { - if (view.isShown()) { - view.invalidate(); - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); + @Override + public boolean onKeyLongPress(int keyCode, KeyEvent event) { - if (showFullScreen && uBar.isShown()) { - uBar.startAnimation(slideUp); + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (!settings.getBoolean("restoreclosed", true)) { + for (int n = 0; n < MAX_TABS; n++) { + urlToLoad[n][0] = null; + } } - } - view.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); - Log.i("Lightning", "Page Finished"); - loadTime = System.currentTimeMillis() - loadTime; - Log.i("Lightning", "Load Time: " + loadTime); + finish(); + return true; + } else + return super.onKeyLongPress(keyCode, event); } - - - public static void onPageStarted(WebView view, String url, Bitmap favicon) { - Log.i("Lightning", "Page Started"); - loadTime = System.currentTimeMillis(); - int numberPage = view.getId(); - if (url.startsWith("file://")) { - view.getSettings().setUseWideViewPort(false); - } else { - view.getSettings().setUseWideViewPort( - settings.getBoolean("wideviewport", true)); + @Override + public void onLowMemory() { + for (int n = 0; n < MAX_TABS; n++) { + if (n != currentId && main[n] != null) { + main[n].freeMemory(); + } } + super.onLowMemory(); + } - if (view.isShown()) { - refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); - setUrlText(url); - } + @Override + protected void onNewIntent(Intent intent) { - urlTitle[numberPage].setCompoundDrawables(incognitoPage, null, exitTab, - null); - if (favicon != null) { - setFavicon(view.getId(), favicon); + String url = intent.getDataString(); + int id = -1; + int download = -1; + try { + id = intent.getExtras().getInt("acr.browser.barebones.Origin") - 1; + } catch (NullPointerException e) { + id = -1; } - - getUrl.setPadding(tenPad, 0, tenPad, 0); - urlToLoad[numberPage][0] = url; - - if (!uBar.isShown() && showFullScreen) { - uBar.startAnimation(slideDown); + try { + download = intent.getExtras().getInt( + "acr.browser.barebones.Download"); + } catch (NullPointerException e) { + download = -1; + } + if (id >= 0) { + main[id].loadUrl(url); + } else if (download == 1) { + Utils.downloadFile(CONTEXT, url, null, null); + } else if (url != null) { + newTab(url, true); } - } - public static void onCreateWindow(Message resultMsg) { - newTab("", true); - WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; - transport.setWebView(currentTab); - resultMsg.sendToTarget(); - browserHandler.postDelayed(new Runnable() { - @Override - public void run() { - currentTab.loadUrl(getUrl.getText().toString()); - } - }, 500); + super.onNewIntent(intent); } - public static void onShowCustomView() { - background.removeView(currentTab); - uBar.setVisibility(View.GONE); - } + @Override + public boolean onOptionsItemSelected(MenuItem item) { - public static void onHideCustomView(FrameLayout fullScreenContainer, - CustomViewCallback mIncognitoViewCallback, int orientation) { - FrameLayout screen = (FrameLayout) ACTIVITY.getWindow().getDecorView(); - screen.removeView(fullScreenContainer); - fullScreenContainer = null; - mIncognitoViewCallback.onCustomViewHidden(); - ACTIVITY.setRequestedOrientation(orientation); - background.addView(currentTab); - uBar.setVisibility(View.VISIBLE); - uBar.bringToFront(); + switch (item.getItemId()) { + case R.id.history: + generateHistory(currentTab, CONTEXT); + return true; + case R.id.bookmark: + if (urlToLoad[currentId][1] != null) { + if (!urlToLoad[currentId][1].equals("Bookmarks")) { + Utils.addBookmark(CONTEXT, urlToLoad[currentId][1], + urlToLoad[currentId][0]); + } + } + return true; + case R.id.settings: + newSettings(); + return true; + case R.id.allBookmarks: + if (urlToLoad[currentId][1] == null) { + goBookmarks(CONTEXT, currentTab); + } else if (!urlToLoad[currentId][1].equals("Bookmarks")) { + goBookmarks(CONTEXT, currentTab); + } + + return true; + case R.id.share: + share(); + return true; + case R.id.incognito: + newTab(homepage, true); + return true; + default: + return super.onOptionsItemSelected(item); + } } - public static void onReceivedTitle(int numberPage, String title) { - if (title != null && title.length() != 0) { - urlTitle[numberPage].setText(title); - urlToLoad[numberPage][1] = title; + @Override + protected void onPause() { + + if (currentTab != null) { + if (API >= 11) { + currentTab.onPause(); + } + currentTab.pauseTimers(); } + super.onPause(); } - public static void openFileChooser(ValueCallback uploadMsg) { - mUploadMessage = uploadMsg; - Intent i = new Intent(Intent.ACTION_GET_CONTENT); - i.addCategory(Intent.CATEGORY_OPENABLE); - i.setType("*/*"); - ACTIVITY.startActivityForResult( - Intent.createChooser(i, "File Chooser"), 1); + @Override + protected void onResume() { + super.onResume(); + onProgressChanged(currentId, currentTab.getProgress()); + if (currentTab.getProgress() == 100) { + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + + } + if (API >= 11) { + currentTab.onResume(); + } + reinitializeSettings(); + currentTab.resumeTimers(); + if (settings.getBoolean("fullscreen", false) != fullScreen) { + toggleFullScreen(); + } + } + private int x; + private int y; + private Rect edge; + private boolean xPress; + @Override public boolean onTouch(View v, MotionEvent event) { - try{ - id = v.getId(); - background.clearDisappearingChildren(); - boolean xPress = false; - int x = (int) event.getX(); - int y = (int) event.getY(); - Rect edge = new Rect(); - v.getDrawingRect(edge); - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - if (event.getAction() == MotionEvent.ACTION_DOWN) { - timeTabPressed = System.currentTimeMillis(); - } else if (event.getAction() == MotionEvent.ACTION_UP) { - - if ((System.currentTimeMillis() - timeTabPressed) > 1000) { - xPress = true; - } + try { + id = v.getId(); + background.clearDisappearingChildren(); + xPress = false; + x = (int) event.getX(); + y = (int) event.getY(); + edge = new Rect(); + v.getDrawingRect(edge); + currentTabTitle.setPadding(leftPad, 0, rightPad, 0); + if (event.getAction() == MotionEvent.ACTION_DOWN) { + timeTabPressed = System.currentTimeMillis(); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + + if ((System.currentTimeMillis() - timeTabPressed) > 1000) { + xPress = true; + } - if (x >= (edge.right - bounds.width() - v.getPaddingRight() - 10 * 3 / 2) - && x <= (edge.right - v.getPaddingRight() + 10 * 3 / 2) - && y >= (v.getPaddingTop() - 10 / 2) - && y <= (v.getHeight() - v.getPaddingBottom() + 10 / 2)) { - xPress = true; - } - if (id == currentId) { - if (xPress) { - deleteTab(id); - uBar.bringToFront(); + if (x >= (edge.right - bounds.width() - v.getPaddingRight() - 10 * 3 / 2) + && x <= (edge.right - v.getPaddingRight() + 10 * 3 / 2) + && y >= (v.getPaddingTop() - 10 / 2) + && y <= (v.getHeight() - v.getPaddingBottom() + 10 / 2)) { + xPress = true; } - } else if (id != currentId) { - if (xPress) { - deleteTab(id); - } else { - if (API < 16) { - currentTabTitle.setBackgroundDrawable(inactive); - } else if (API > 15) { - currentTabTitle.setBackground(inactive); - } - currentTabTitle.setPadding(leftPad, 0, rightPad, 0); - if (!showFullScreen) { - background.addView(main[id]); - main[id].startAnimation(fadeIn); - currentTab.startAnimation(fadeOut); - background.removeView(currentTab); + if (id == currentId) { + if (xPress) { + deleteTab(id); uBar.bringToFront(); - } else if (API >= 12) { - main[id].setAlpha(0f); - background.addView(main[id]); - try { - main[id].animate().alpha(1f).setDuration(250); - } catch (NullPointerException ignored) { + } + } else if (id != currentId) { + if (xPress) { + deleteTab(id); + } else { + if (API < 16) { + currentTabTitle.setBackgroundDrawable(inactive); + } else if (API > 15) { + currentTabTitle.setBackground(inactive); + } + currentTabTitle.setPadding(leftPad, 0, rightPad, 0); + if (!showFullScreen) { + background.addView(main[id]); + main[id].startAnimation(fadeIn); + currentTab.startAnimation(fadeOut); + background.removeView(currentTab); + uBar.bringToFront(); + } else if (API >= 12) { + main[id].setAlpha(0f); + background.addView(main[id]); + try { + main[id].animate().alpha(1f).setDuration(250); + } catch (NullPointerException ignored) { + } + background.removeView(currentTab); + uBar.bringToFront(); + } else { + background.removeView(currentTab); + background.addView(main[id]); } - background.removeView(currentTab); uBar.bringToFront(); - } else { - background.removeView(currentTab); - background.addView(main[id]); - } - uBar.bringToFront(); - currentId = id; - currentTab = main[id]; - currentTabTitle = urlTitle[id]; - setUrlText(urlToLoad[currentId][0]); - getUrl.setPadding(tenPad, 0, tenPad, 0); - if (API < 16) { - currentTabTitle.setBackgroundDrawable(active); - } else if (API > 15) { - currentTabTitle.setBackground(active); - } - if (currentTab.getProgress() < 100) { - refresh.setVisibility(View.INVISIBLE); + currentId = id; + currentTab = main[id]; + currentTabTitle = urlTitle[id]; + setUrlText(urlToLoad[currentId][0]); + getUrl.setPadding(tenPad, 0, tenPad, 0); + if (API < 16) { + currentTabTitle.setBackgroundDrawable(active); + } else if (API > 15) { + currentTabTitle.setBackground(active); + } + if (currentTab.getProgress() < 100) { + refresh.setVisibility(View.INVISIBLE); - progressBar.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.VISIBLE); - } else { - progressBar.setVisibility(View.GONE); - refresh.setVisibility(View.VISIBLE); + } else { + progressBar.setVisibility(View.GONE); + refresh.setVisibility(View.VISIBLE); + } + onProgressChanged(currentId, currentTab.getProgress()); + tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); + currentTab.invalidate(); } - onProgressChanged(currentId, currentTab.getProgress()); - tabScroll.smoothScrollTo(currentTabTitle.getLeft(), 0); - currentTab.invalidate(); } - } - } - uBar.bringToFront(); - v.setPadding(leftPad, 0, rightPad, 0); - } - catch(Exception e){ + } + uBar.bringToFront(); + v.setPadding(leftPad, 0, rightPad, 0); + } catch (Exception e) { e.printStackTrace(); Log.e("Lightning Error", "Well we dun messed up"); } return true; } - public static class ClickHandler extends Handler { - - /* - * (non-Javadoc) - * - * @see android.os.Handler#handleMessage(android.os.Message) - */ - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - String url = null; - url = msg.getData().getString("url"); - handleLongClickOnBookmarks(url, msg.arg1); - } - - } - - public static boolean onLongClick() { - final int n = currentId; - final HitTestResult result = main[n].getHitTestResult(); - - if (main[n].getUrl().contains( - "file://" + CONTEXT.getFilesDir() + "/bookmarks.html")) { + void options() { + ImageView options = (ImageView) findViewById(R.id.options); + options.setBackgroundResource(R.drawable.button); + options.setOnClickListener(new OnClickListener() { - Message message = new Message(); - message.arg1 = n; - message.setTarget(new ClickHandler()); - main[n].requestFocusNodeHref(message); + @Override + public void onClick(View v) { - return true; - } else if (result != null) { - if(result.getExtra()!=null){ - if (result.getType() == 5 && API > 8) { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - // urlTitle[num].performClick(); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - main[n].loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - if (API > 8) { - String url = result.getExtra(); + if (API >= 11) { + PopupMenu menu = new PopupMenu(CONTEXT, v); + MenuInflater inflate = menu.getMenuInflater(); + inflate.inflate(R.menu.incognito_menu, menu.getMenu()); + menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { - Utils.downloadFile(CONTEXT, url, null, null); + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.history: + generateHistory(currentTab, CONTEXT); + return true; + case R.id.bookmark: + if (urlToLoad[currentId][1] != null) { + if (!urlToLoad[currentId][1] + .equals("Bookmarks")) { + Utils.addBookmark(CONTEXT, + urlToLoad[currentId][1], + urlToLoad[currentId][0]); + } + } + return true; + case R.id.settings: + newSettings(); + return true; + case R.id.allBookmarks: + if (urlToLoad[currentId][1] == null) { + goBookmarks(CONTEXT, currentTab); + } else if (!urlToLoad[currentId][1] + .equals("Bookmarks")) { + goBookmarks(CONTEXT, currentTab); + } + return true; + case R.id.share: + share(); + return true; + case R.id.incognito: + newTab(homepage, true); + return true; + default: + return false; } - break; - } - } - } - }; - AlertDialog.Builder builder = new AlertDialog.Builder(CONTEXT); // dialog - builder.setMessage("What would you like to do with this image?") - .setPositiveButton("Open in New Tab", - dialogClickListener) - .setNegativeButton("Open Normally", dialogClickListener) - .setNeutralButton("Download Image", dialogClickListener) - .show(); - - } else { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(result.getExtra(), false); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; } - case DialogInterface.BUTTON_NEGATIVE: { - main[n].loadUrl(result.getExtra()); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - - if (API < 11) { - android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ACTIVITY - .getSystemService(Context.CLIPBOARD_SERVICE); - clipboard.setText(result.getExtra()); - } else { - ClipboardManager clipboard = (ClipboardManager) ACTIVITY - .getSystemService(CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("label", - result.getExtra()); - clipboard.setPrimaryClip(clip); - } - break; - } - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(CONTEXT); // dialog - builder.setTitle(result.getExtra()) - .setMessage("What do you want to do with this link?") - .setPositiveButton("Open in New Tab", - dialogClickListener) - .setNegativeButton("Open Normally", dialogClickListener) - .setNeutralButton("Copy link", dialogClickListener) - .show(); - } - } - return true; - - } else { - return false; - } - } - public static void handleLongClickOnBookmarks(final String clickedURL, - final int n) { - if (clickedURL != null) { + }); + menu.show(); + } else if (API < 11) { - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - int num = currentId; - newTab(clickedURL, false); - currentId = num; - currentTab = main[num]; - currentTabTitle = urlTitle[num]; - break; - } - case DialogInterface.BUTTON_NEGATIVE: { - main[n].loadUrl(clickedURL); - break; - } - case DialogInterface.BUTTON_NEUTRAL: { - deleteBookmark(clickedURL); - break; - } - } + openOptionsMenu(); } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(CONTEXT); // dialog - builder.setMessage("What would you like to do with this bookmark?") - .setPositiveButton("Open in New Tab", dialogClickListener) - .setNegativeButton("Open Normally", dialogClickListener) - .setNeutralButton("Delete", dialogClickListener).show(); - } - } - - public static void goBack(IncognitoWebView view) { - if (view.isShown() && view.canGoBack()) { - view.goBack(); - } - Animation left = AnimationUtils.loadAnimation(CONTEXT, R.anim.left); - background.startAnimation(left); - - } + } - public static void goForward(IncognitoWebView view) { - if (view.isShown() && view.canGoForward()) { - view.goForward(); - } - Animation right = AnimationUtils.loadAnimation(CONTEXT, R.anim.right); - background.startAnimation(right); + }); } - public static void onProgressChanged(int id, int progress) { - if (id == currentId) { - browserProgress.setProgress(progress); - if (progress < 100) { - browserProgress.setVisibility(View.VISIBLE); - } else { - browserProgress.setVisibility(View.GONE); - } - } - } - - public static void reinitializeSettings(){ - for(int n = 0; n < tabList.size(); n++){ - main[tabList.get(n)].settingsInitialization(CONTEXT); - } - } - - public static void toggleFullScreen(){ - showFullScreen = settings.getBoolean("fullscreen", false); - IncognitoWebView.showFullScreen = showFullScreen; - if(fullScreen){ - background.removeView(uBar); - screen.addView(uBar); - fullScreen = false; - }else{ - screen.removeView(uBar); - background.addView(uBar); - fullScreen = true; + void reopenOldTabs() { + Intent url = getIntent(); + String URL = url.getDataString(); + if (URL != null) { + // opens a new tab with the URL if its there + int n = newTab(URL, true); + main[n].resumeTimers(); + } else { + // otherwise it opens the home-page + int n = newTab(homepage, true); + main[n].resumeTimers(); } + } } \ No newline at end of file diff --git a/src/acr/browser/barebones/customwebview/CustomWebView.java b/src/acr/browser/barebones/customwebview/CustomWebView.java index bf81a4d..6e26ccb 100644 --- a/src/acr/browser/barebones/customwebview/CustomWebView.java +++ b/src/acr/browser/barebones/customwebview/CustomWebView.java @@ -21,12 +21,12 @@ import android.webkit.WebSettings.PluginState; import android.webkit.WebSettings.RenderPriority; public final class CustomWebView extends WebView { - private boolean first = false; static final int API = FinalVariables.API; public static boolean showFullScreen;; final View uBar = BrowserActivity.uBar; final Animation slideUp = BrowserActivity.slideUp; final Animation slideDown = BrowserActivity.slideDown; + final boolean DEVICE_HAS_GPS = BrowserActivity.DEVICE_HAS_GPS; static Context CONTEXT; static String defaultUser; public WebSettings settings; @@ -157,10 +157,14 @@ public final class CustomWebView extends WebView { } } - settings.setGeolocationEnabled(preferences - .getBoolean("location", false)); - settings.setGeolocationDatabasePath(context.getFilesDir() - .getAbsolutePath()); + if (DEVICE_HAS_GPS) { + settings.setGeolocationEnabled(preferences.getBoolean("location", + false)); + settings.setGeolocationDatabasePath(context.getFilesDir() + .getAbsolutePath()); + } else { + settings.setGeolocationEnabled(false); + } settings.setUseWideViewPort(preferences .getBoolean("wideviewport", true)); settings.setLoadWithOverviewMode(preferences.getBoolean("overviewmode", @@ -175,18 +179,16 @@ public final class CustomWebView extends WebView { settings.setBlockNetworkImage(preferences.getBoolean("blockimages", false)); settings.setLoadsImagesAutomatically(true); - + switch (preferences.getInt("agentchoose", 1)) { case 1: getSettings().setUserAgentString(defaultUser); break; case 2: - getSettings().setUserAgentString( - FinalVariables.DESKTOP_USER_AGENT); + getSettings().setUserAgentString(FinalVariables.DESKTOP_USER_AGENT); break; case 3: - getSettings().setUserAgentString( - FinalVariables.MOBILE_USER_AGENT); + getSettings().setUserAgentString(FinalVariables.MOBILE_USER_AGENT); break; case 4: getSettings().setUserAgentString( @@ -215,6 +217,14 @@ public final class CustomWebView extends WebView { private class CustomGestureListener extends SimpleOnGestureListener { final int SWIPE_THRESHOLD = 100; final int SWIPE_VELOCITY_THRESHOLD = 100; + DisplayMetrics metrics; + WindowManager wm; + Display display; + Point size; + int width; + float diffY; + float diffX; + boolean first = false; @Override public boolean onDown(MotionEvent e) { @@ -225,7 +235,11 @@ public final class CustomWebView extends WebView { @Override public void onLongPress(MotionEvent e) { if (BrowserActivity.currentId != -1) { - BrowserActivity.onLongClick(); + try { + BrowserActivity.onLongClick(); + } catch (NullPointerException ignored) { + ignored.printStackTrace(); + } } super.onLongPress(e); } @@ -251,24 +265,23 @@ public final class CustomWebView extends WebView { float velocityY) { try { - int width; if (API < 13) { - DisplayMetrics metrics = CONTEXT.getResources() + metrics = CONTEXT.getResources() .getDisplayMetrics(); width = metrics.widthPixels; } else { - WindowManager wm = (WindowManager) CONTEXT + wm = (WindowManager) CONTEXT .getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); - Point size = new Point(); + display = wm.getDefaultDisplay(); + size = new Point(); display.getSize(size); width = size.x; } - if ((width - e1.getX() < width / 12) - || (e1.getX() < width / 12)) { - float diffY = e2.getY() - e1.getY(); - float diffX = e2.getX() - e1.getX(); + if ((width - e1.getX() <= width / 15) + || (e1.getX() <= width / 15)) { + diffY = e2.getY() - e1.getY(); + diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { @@ -287,5 +300,5 @@ public final class CustomWebView extends WebView { return super.onFling(e1, e2, velocityX, velocityY); } } - + } diff --git a/src/acr/browser/barebones/customwebview/IncognitoWebView.java b/src/acr/browser/barebones/customwebview/IncognitoWebView.java index 6e6d931..37be1ab 100644 --- a/src/acr/browser/barebones/customwebview/IncognitoWebView.java +++ b/src/acr/browser/barebones/customwebview/IncognitoWebView.java @@ -21,7 +21,6 @@ import android.webkit.WebSettings.PluginState; import android.webkit.WebSettings.RenderPriority; public final class IncognitoWebView extends WebView { - private boolean first = false; static final int API = FinalVariables.API; public static boolean showFullScreen;; final View uBar = IncognitoModeActivity.uBar; @@ -157,10 +156,7 @@ public final class IncognitoWebView extends WebView { } } - settings.setGeolocationEnabled(preferences - .getBoolean("location", false)); - settings.setGeolocationDatabasePath(context.getFilesDir() - .getAbsolutePath()); + settings.setGeolocationEnabled(false); settings.setUseWideViewPort(preferences .getBoolean("wideviewport", true)); settings.setLoadWithOverviewMode(preferences.getBoolean("overviewmode", @@ -175,18 +171,16 @@ public final class IncognitoWebView extends WebView { settings.setBlockNetworkImage(preferences.getBoolean("blockimages", false)); settings.setLoadsImagesAutomatically(true); - + switch (preferences.getInt("agentchoose", 1)) { case 1: getSettings().setUserAgentString(defaultUser); break; case 2: - getSettings().setUserAgentString( - FinalVariables.DESKTOP_USER_AGENT); + getSettings().setUserAgentString(FinalVariables.DESKTOP_USER_AGENT); break; case 3: - getSettings().setUserAgentString( - FinalVariables.MOBILE_USER_AGENT); + getSettings().setUserAgentString(FinalVariables.MOBILE_USER_AGENT); break; case 4: getSettings().setUserAgentString( @@ -215,6 +209,14 @@ public final class IncognitoWebView extends WebView { private class CustomGestureListener extends SimpleOnGestureListener { final int SWIPE_THRESHOLD = 100; final int SWIPE_VELOCITY_THRESHOLD = 100; + DisplayMetrics metrics; + WindowManager wm; + Display display; + Point size; + int width; + float diffY; + float diffX; + boolean first = false; @Override public boolean onDown(MotionEvent e) { @@ -225,7 +227,11 @@ public final class IncognitoWebView extends WebView { @Override public void onLongPress(MotionEvent e) { if (IncognitoModeActivity.currentId != -1) { - IncognitoModeActivity.onLongClick(); + try { + IncognitoModeActivity.onLongClick(); + } catch (NullPointerException ig) { + ig.printStackTrace(); + } } super.onLongPress(e); } @@ -251,31 +257,32 @@ public final class IncognitoWebView extends WebView { float velocityY) { try { - int width; if (API < 13) { - DisplayMetrics metrics = CONTEXT.getResources() + metrics = CONTEXT.getResources() .getDisplayMetrics(); width = metrics.widthPixels; } else { - WindowManager wm = (WindowManager) CONTEXT + wm = (WindowManager) CONTEXT .getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); - Point size = new Point(); + display = wm.getDefaultDisplay(); + size = new Point(); display.getSize(size); width = size.x; } - if ((width - e1.getX() < width / 12) - || (e1.getX() < width / 12)) { - float diffY = e2.getY() - e1.getY(); - float diffX = e2.getX() - e1.getX(); + if ((width - e1.getX() <= width / 15) + || (e1.getX() <= width / 15)) { + diffY = e2.getY() - e1.getY(); + diffX = e2.getX() - e1.getX(); if (Math.abs(diffX) > Math.abs(diffY)) { if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { if (diffX > 0) { - IncognitoModeActivity.goBack(IncognitoWebView.this); + IncognitoModeActivity + .goBack(IncognitoWebView.this); } else { - IncognitoModeActivity.goForward(IncognitoWebView.this); + IncognitoModeActivity + .goForward(IncognitoWebView.this); } } } diff --git a/src/acr/browser/barebones/databases/DatabaseHandler.java b/src/acr/browser/barebones/databases/DatabaseHandler.java index c04543a..09ad535 100644 --- a/src/acr/browser/barebones/databases/DatabaseHandler.java +++ b/src/acr/browser/barebones/databases/DatabaseHandler.java @@ -81,6 +81,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { cursor.moveToFirst(); String m = cursor.getString(0); cursor.close(); + db.close(); // return item return m; } @@ -117,10 +118,11 @@ public class DatabaseHandler extends SQLiteOpenHelper { ContentValues values = new ContentValues(); values.put(KEY_URL, item.getUrl()); values.put(KEY_TITLE, item.getTitle()); - - // updating row - return db.update(TABLE_HISTORY, values, KEY_ID + " = ?", + int n = db.update(TABLE_HISTORY, values, KEY_ID + " = ?", new String[] { String.valueOf(item.getID()) }); + // updating row + db.close(); + return n; } // Deleting single item diff --git a/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java b/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java index 9e025c2..c31a2fb 100644 --- a/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java +++ b/src/acr/browser/barebones/incognitoclasses/IncognitoChromeClient.java @@ -140,6 +140,7 @@ public class IncognitoChromeClient extends WebChromeClient { mCustomView.setKeepScreenOn(false); mCustomView = null; IncognitoModeActivity.onHideCustomView(fullScreenContainer, mCustomViewCallback, orientation); + super.onHideCustomView(); } @Override @@ -174,7 +175,7 @@ public class IncognitoChromeClient extends WebChromeClient { mCustomView = view; mCustomViewCallback = callback; browserActivity.setRequestedOrientation(requestedOrientation); - + super.onShowCustomView(view, requestedOrientation, callback); } @Override @@ -198,6 +199,7 @@ public class IncognitoChromeClient extends WebChromeClient { mCustomView = view; mCustomViewCallback = callback; browserActivity.setRequestedOrientation(browserActivity.getRequestedOrientation()); + super.onShowCustomView(view, callback); } public void openFileChooser(ValueCallback uploadMsg) { diff --git a/src/acr/browser/barebones/utilities/FinalVariables.java b/src/acr/browser/barebones/utilities/FinalVariables.java index e59417c..25a3d0d 100644 --- a/src/acr/browser/barebones/utilities/FinalVariables.java +++ b/src/acr/browser/barebones/utilities/FinalVariables.java @@ -15,9 +15,9 @@ public class FinalVariables { public static final String GOOGLE_SEARCH = "https://www.google.com/search?client=lightning&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/?q="; + public static final String DUCK_LITE_SEARCH = "https://duckduckgo.com/lite/?t=lightning&q="; public static final String STARTPAGE_SEARCH = "https://startpage.com/do/metasearch.pl?language=english&cat=web&query="; - public static final String HOMEPAGE = "https://www.google.com/"; + public static final String HOMEPAGE = "https://duckduckgo.com"; 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"; diff --git a/src/acr/browser/barebones/utilities/Utils.java b/src/acr/browser/barebones/utilities/Utils.java index 86797b8..d99e6f3 100644 --- a/src/acr/browser/barebones/utilities/Utils.java +++ b/src/acr/browser/barebones/utilities/Utils.java @@ -10,7 +10,6 @@ import java.io.IOException; import acr.browser.barebones.databases.DatabaseHandler; import acr.browser.barebones.databases.HistoryItem; -import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.DownloadManager; @@ -28,13 +27,15 @@ import android.os.Environment; import android.provider.Browser; import android.util.Log; import android.webkit.URLUtil; -import android.widget.EditText; import android.widget.Toast; public class Utils { public static DatabaseHandler historyHandler; public static SQLiteDatabase history; + public static Cursor cursor; + public static StringBuilder sb; + public static Runnable update; public static void createInformativeDialog(Context context, String title, String message) { @@ -92,7 +93,7 @@ public class Utils { public static void updateHistory(final Context context, final ContentResolver content, final boolean noStockBrowser, final String url, final String title) { - Runnable update = new Runnable() { + update = new Runnable() { @Override public void run() { if (!noStockBrowser) { @@ -102,11 +103,11 @@ public class Utils { } } try { - StringBuilder sb = new StringBuilder("url" + " = "); + sb = new StringBuilder("url" + " = "); DatabaseUtils.appendEscapedSQLString(sb, url); historyHandler = new DatabaseHandler(context); history = historyHandler.getReadableDatabase(); - Cursor cursor = history.query("history", new String[] { + cursor = history.query("history", new String[] { "id", "url", "title" }, sb.toString(), null, null, null, null); if (!cursor.moveToFirst()) { @@ -140,30 +141,26 @@ public class Utils { public static void downloadFile(final Context context, final String url, final String contentDisposition, final String mimetype) { try { - Thread downloader = new Thread(new Runnable() { - @SuppressLint("InlinedApi") - @Override - public void run() { - DownloadManager download = (DownloadManager) context - .getSystemService(Context.DOWNLOAD_SERVICE); - Uri nice = Uri.parse(url); - DownloadManager.Request it = new DownloadManager.Request( - nice); - String fileName = URLUtil.guessFileName(url, - contentDisposition, mimetype); - if (FinalVariables.API >= 11) { - it.allowScanningByMediaScanner(); - it.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); - } - String location = context.getSharedPreferences("settings", - 0).getString("download", - Environment.DIRECTORY_DOWNLOADS); - it.setDestinationInExternalPublicDir(location, fileName); - Log.i("Barebones", "Downloading" + fileName); - download.enqueue(it); - } - }); - downloader.run(); + DownloadManager download = (DownloadManager) context + .getSystemService(Context.DOWNLOAD_SERVICE); + Uri nice = Uri.parse(url); + DownloadManager.Request it = new DownloadManager.Request( + nice); + String fileName = URLUtil.guessFileName(url, + contentDisposition, mimetype); + it.setTitle(fileName); + it.setDescription(url); + if (FinalVariables.API >= 11) { + it.allowScanningByMediaScanner(); + it.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); + } + String location = context.getSharedPreferences("settings", + 0).getString("download", + Environment.DIRECTORY_DOWNLOADS); + it.setDestinationInExternalPublicDir(location, fileName); + Log.i("Barebones", "Downloading" + fileName); + download.enqueue(it); + } catch (NullPointerException e) { Log.e("Barebones", "Problem downloading"); Toast.makeText(context, "Error Downloading File", diff --git a/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java b/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java index b816588..df8cabc 100644 --- a/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java +++ b/src/acr/browser/barebones/webviewclasses/CustomChromeClient.java @@ -140,6 +140,7 @@ public class CustomChromeClient extends WebChromeClient { mCustomView.setKeepScreenOn(false); mCustomView = null; BrowserActivity.onHideCustomView(fullScreenContainer, mCustomViewCallback, orientation); + super.onHideCustomView(); } @Override @@ -174,7 +175,7 @@ public class CustomChromeClient extends WebChromeClient { mCustomView = view; mCustomViewCallback = callback; browserActivity.setRequestedOrientation(requestedOrientation); - + super.onShowCustomView(view, requestedOrientation, callback); } @Override @@ -198,6 +199,7 @@ public class CustomChromeClient extends WebChromeClient { mCustomView = view; mCustomViewCallback = callback; browserActivity.setRequestedOrientation(browserActivity.getRequestedOrientation()); + super.onShowCustomView(view, callback); } public void openFileChooser(ValueCallback uploadMsg) {