diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9b9b0a9..7e0481e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,6 +47,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java
index 2ffe1ee..5fa828d 100644
--- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java
+++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java
@@ -403,7 +403,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
updateUrl(currentView.getUrl(), true);
} else if (hasFocus && currentView != null) {
String url = currentView.getUrl();
- if (url.startsWith(Constants.FILE)) {
+ if (UrlUtils.isSpecialUrl(url)) {
mSearch.setText("");
} else {
mSearch.setText(url);
@@ -691,7 +691,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
overridePendingTransition(R.anim.slide_up_in, R.anim.fade_out_scale);
return true;
case R.id.action_share:
- if (currentView != null && !currentView.getUrl().startsWith(Constants.FILE)) {
+ if (currentView != null && !UrlUtils.isSpecialUrl(currentView.getUrl())) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, currentView.getTitle());
@@ -703,7 +703,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
openBookmarks();
return true;
case R.id.action_copy:
- if (currentView != null && !currentView.getUrl().startsWith(Constants.FILE)) {
+ if (currentView != null && !UrlUtils.isSpecialUrl(currentView.getUrl())) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", currentView.getUrl());
clipboard.setPrimaryClip(clip);
@@ -717,7 +717,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
openHistory();
return true;
case R.id.action_add_bookmark:
- if (currentView != null && !currentView.getUrl().startsWith(Constants.FILE)) {
+ if (currentView != null && !UrlUtils.isSpecialUrl(currentView.getUrl())) {
mEventBus.post(new BrowserEvents.AddBookmark(currentView.getTitle(),
currentView.getUrl()));
}
@@ -893,24 +893,38 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
void handleNewIntent(Intent intent) {
- String url = null;
+ final String url;
if (intent != null) {
url = intent.getDataString();
+ } else {
+ url = null;
}
int num = 0;
- String source = null;
+ final String source;
if (intent != null && intent.getExtras() != null) {
num = intent.getExtras().getInt(getPackageName() + ".Origin");
source = intent.getExtras().getString("SOURCE");
+ } else {
+ source = null;
}
if (num == 1) {
loadUrlInCurrentView(url);
} else if (url != null) {
if (url.startsWith(Constants.FILE)) {
- Utils.showSnackbar(this, R.string.message_blocked_local);
- url = null;
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setCancelable(true)
+ .setMessage(R.string.message_blocked_local)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(R.string.action_open, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ newTab(url, true);
+ }
+ })
+ .show();
+ } else {
+ newTab(url, true);
}
- newTab(url, true);
mIsNewIntent = (source == null);
}
}
@@ -986,7 +1000,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
int current = tabsManager.positionOf(currentTab);
- if (!tabToDelete.getUrl().startsWith(Constants.FILE) && !isIncognito()) {
+ if (!UrlUtils.isSpecialUrl(tabToDelete.getUrl()) && !isIncognito()) {
mPreferences.setSavedUrl(tabToDelete.getUrl());
}
final boolean isShown = tabToDelete.isShown();
@@ -1014,7 +1028,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
tabsManager.deleteTab(position);
}
} else {
- if (currentTab != null && (currentTab.getUrl().startsWith(Constants.FILE)
+ if (currentTab != null && (UrlUtils.isSpecialUrl(currentTab.getUrl())
|| currentTab.getUrl().equals(mHomepage))) {
closeActivity();
} else {
@@ -1273,7 +1287,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
}
final LightningView currentTab = tabsManager.getCurrentTab();
mEventBus.post(new BrowserEvents.CurrentPageUrl(url));
- if (shortUrl && !url.startsWith(Constants.FILE)) {
+ if (shortUrl && !UrlUtils.isSpecialUrl(url)) {
switch (mPreferences.getUrlBoxContentChoice()) {
case 0: // Default, show only the domain
url = url.replaceFirst(Constants.HTTP, "");
@@ -1292,7 +1306,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
break;
}
} else {
- if (url.startsWith(Constants.FILE)) {
+ if (UrlUtils.isSpecialUrl(url)) {
url = "";
}
mSearch.setText(url);
@@ -1320,7 +1334,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements
}
}
};
- if (!url.startsWith(Constants.FILE)) {
+ if (!UrlUtils.isSpecialUrl(url)) {
new Thread(update).start();
}
}
diff --git a/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java b/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java
index 1355844..1399d40 100644
--- a/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java
+++ b/app/src/main/java/acr/browser/lightning/constant/BookmarkPage.java
@@ -24,7 +24,7 @@ public final class BookmarkPage {
"\n" +
"\n" +
"\n" +
- "\n" +
+ "\n" +
"" +
BrowserApp.getAppContext().getString(R.string.action_bookmarks) +
"\n" +
diff --git a/app/src/main/java/acr/browser/lightning/utils/UrlUtils.java b/app/src/main/java/acr/browser/lightning/utils/UrlUtils.java
index 1e02907..f45b2d8 100644
--- a/app/src/main/java/acr/browser/lightning/utils/UrlUtils.java
+++ b/app/src/main/java/acr/browser/lightning/utils/UrlUtils.java
@@ -21,6 +21,9 @@ import android.webkit.URLUtil;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import acr.browser.lightning.constant.Constants;
+import acr.browser.lightning.constant.HistoryPage;
+
/**
* Utility methods for Url manipulation
*/
@@ -145,4 +148,12 @@ public class UrlUtils {
}
return inUrl;
}
+
+ /**
+ * Returns whether the given url is the bookmarks/history page or a normal website
+ */
+ public static boolean isSpecialUrl(String url) {
+ return url != null && url.startsWith(Constants.FILE)
+ && (url.endsWith(Constants.BOOKMARKS_FILENAME) || url.endsWith(HistoryPage.FILENAME));
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/acr/browser/lightning/view/LightningView.java b/app/src/main/java/acr/browser/lightning/view/LightningView.java
index 3df86b3..15e741a 100644
--- a/app/src/main/java/acr/browser/lightning/view/LightningView.java
+++ b/app/src/main/java/acr/browser/lightning/view/LightningView.java
@@ -52,6 +52,7 @@ import acr.browser.lightning.download.LightningDownloadListener;
import acr.browser.lightning.preference.PreferenceManager;
import acr.browser.lightning.utils.ProxyUtils;
import acr.browser.lightning.utils.ThemeUtils;
+import acr.browser.lightning.utils.UrlUtils;
import acr.browser.lightning.utils.Utils;
public class LightningView {
@@ -615,7 +616,7 @@ public class LightningView {
private void longClickPage(final String url) {
final WebView.HitTestResult result = mWebView.getHitTestResult();
String currentUrl = mWebView.getUrl();
- if (currentUrl != null && currentUrl.startsWith(Constants.FILE)) {
+ if (currentUrl != null && UrlUtils.isSpecialUrl(currentUrl)) {
if (currentUrl.endsWith(HistoryPage.FILENAME)) {
if (url != null) {
mBookmarksDialogBuilder.showLongPressedHistoryLinkDialog(mActivity, url);