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 34a4161..2756320 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -61,7 +61,6 @@ import android.view.animation.Animation; import android.view.animation.Transformation; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; -import android.webkit.URLUtil; import android.webkit.ValueCallback; import android.webkit.WebChromeClient.CustomViewCallback; import android.webkit.WebIconDatabase; @@ -110,7 +109,9 @@ import acr.browser.lightning.fragment.BookmarksFragment; import acr.browser.lightning.fragment.TabsFragment; import acr.browser.lightning.interpolator.BezierDecelerateInterpolator; import acr.browser.lightning.receiver.NetworkReceiver; +import acr.browser.lightning.search.SearchEngineProvider; import acr.browser.lightning.search.SuggestionsAdapter; +import acr.browser.lightning.search.engine.BaseSearchEngine; import acr.browser.lightning.utils.DrawableUtils; import acr.browser.lightning.utils.IntentUtils; import acr.browser.lightning.utils.Preconditions; @@ -192,6 +193,8 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements @Inject SearchBoxModel mSearchBoxModel; + @Inject SearchEngineProvider mSearchEngineProvider; + private TabsManager mTabsManager; // Image @@ -657,44 +660,8 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements setFullscreen(mPreferences.getHideStatusBarEnabled(), false); - switch (mPreferences.getSearchChoice()) { - case 0: - mSearchText = mPreferences.getSearchUrl(); - if (!URLUtil.isNetworkUrl(mSearchText)) { - mSearchText = Constants.GOOGLE_SEARCH; - } - break; - case 1: - mSearchText = Constants.GOOGLE_SEARCH; - break; - case 2: - mSearchText = Constants.ASK_SEARCH; - break; - case 3: - mSearchText = Constants.BING_SEARCH; - break; - case 4: - mSearchText = Constants.YAHOO_SEARCH; - break; - case 5: - mSearchText = Constants.STARTPAGE_SEARCH; - break; - case 6: - mSearchText = Constants.STARTPAGE_MOBILE_SEARCH; - break; - case 7: - mSearchText = Constants.DUCK_SEARCH; - break; - case 8: - mSearchText = Constants.DUCK_LITE_SEARCH; - break; - case 9: - mSearchText = Constants.BAIDU_SEARCH; - break; - case 10: - mSearchText = Constants.YANDEX_SEARCH; - break; - } + BaseSearchEngine currentSearchEngine = mSearchEngineProvider.getCurrentSearchEngine(); + mSearchText = currentSearchEngine.getQueryUrl(); updateCookiePreference().subscribeOn(Schedulers.worker()).subscribe(); mProxyUtils.updateProxySettings(this); diff --git a/app/src/main/java/acr/browser/lightning/app/AppComponent.java b/app/src/main/java/acr/browser/lightning/app/AppComponent.java index 4b74766..3683d5f 100644 --- a/app/src/main/java/acr/browser/lightning/app/AppComponent.java +++ b/app/src/main/java/acr/browser/lightning/app/AppComponent.java @@ -22,6 +22,7 @@ import acr.browser.lightning.fragment.DebugSettingsFragment; import acr.browser.lightning.fragment.LightningPreferenceFragment; import acr.browser.lightning.fragment.PrivacySettingsFragment; import acr.browser.lightning.fragment.TabsFragment; +import acr.browser.lightning.search.SearchEngineProvider; import acr.browser.lightning.search.SuggestionsAdapter; import acr.browser.lightning.utils.ProxyUtils; import acr.browser.lightning.view.LightningChromeClient; @@ -85,4 +86,6 @@ public interface AppComponent { void inject(SearchBoxModel searchBoxModel); + void inject(SearchEngineProvider searchEngineProvider); + } diff --git a/app/src/main/java/acr/browser/lightning/constant/StartPage.java b/app/src/main/java/acr/browser/lightning/constant/StartPage.java index 5bb1a63..873481e 100644 --- a/app/src/main/java/acr/browser/lightning/constant/StartPage.java +++ b/app/src/main/java/acr/browser/lightning/constant/StartPage.java @@ -18,7 +18,8 @@ import javax.inject.Inject; import acr.browser.lightning.R; import acr.browser.lightning.app.BrowserApp; -import acr.browser.lightning.preference.PreferenceManager; +import acr.browser.lightning.search.SearchEngineProvider; +import acr.browser.lightning.search.engine.BaseSearchEngine; import acr.browser.lightning.utils.Utils; public class StartPage { @@ -26,31 +27,31 @@ public class StartPage { public static final String FILENAME = "homepage.html"; private static final String HEAD_1 = "" - + "" - + "" - + "" - + "" - + ""; + + "<head>" + + "<meta content=\"en-us\" http-equiv=\"Content-Language\" />" + + "<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />" + + "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">" + + "<title>"; private static final String HEAD_2 = "" - + "" - + "
" + + "


" - + "" - + "


"; @@ -62,7 +63,7 @@ public class StartPage { @NonNull private final String mTitle; @Inject Application mApp; - @Inject PreferenceManager mPreferenceManager; + @Inject SearchEngineProvider mSearchEngineProvider; public StartPage() { BrowserApp.getAppComponent().inject(this); @@ -76,80 +77,11 @@ public class StartPage { public void onSubscribe(@NonNull SingleSubscriber subscriber) { StringBuilder homepageBuilder = new StringBuilder(HEAD_1 + mTitle + HEAD_2); - String icon; - String searchUrl; - switch (mPreferenceManager.getSearchChoice()) { - case 0: - // CUSTOM SEARCH - icon = "file:///android_asset/lightning.png"; - searchUrl = mPreferenceManager.getSearchUrl(); - break; - case 1: - // GOOGLE_SEARCH; - icon = "file:///android_asset/google.png"; - // "https://www.google.com/images/srpr/logo11w.png"; - searchUrl = Constants.GOOGLE_SEARCH; - break; - case 2: - // ANDROID SEARCH; - icon = "file:///android_asset/ask.png"; - searchUrl = Constants.ASK_SEARCH; - break; - case 3: - // BING_SEARCH; - icon = "file:///android_asset/bing.png"; - // "http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Bing_logo_%282013%29.svg/500px-Bing_logo_%282013%29.svg.png"; - searchUrl = Constants.BING_SEARCH; - break; - case 4: - // YAHOO_SEARCH; - icon = "file:///android_asset/yahoo.png"; - // "http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Yahoo%21_logo.svg/799px-Yahoo%21_logo.svg.png"; - searchUrl = Constants.YAHOO_SEARCH; - break; - case 5: - // STARTPAGE_SEARCH; - icon = "file:///android_asset/startpage.png"; - // "https://com/graphics/startp_logo.gif"; - searchUrl = Constants.STARTPAGE_SEARCH; - break; - case 6: - // STARTPAGE_MOBILE - icon = "file:///android_asset/startpage.png"; - // "https://com/graphics/startp_logo.gif"; - searchUrl = Constants.STARTPAGE_MOBILE_SEARCH; - break; - case 7: - // DUCK_SEARCH; - icon = "file:///android_asset/duckduckgo.png"; - // "https://duckduckgo.com/assets/logo_homepage.normal.v101.png"; - searchUrl = Constants.DUCK_SEARCH; - break; - case 8: - // DUCK_LITE_SEARCH; - icon = "file:///android_asset/duckduckgo.png"; - // "https://duckduckgo.com/assets/logo_homepage.normal.v101.png"; - searchUrl = Constants.DUCK_LITE_SEARCH; - break; - case 9: - // BAIDU_SEARCH; - icon = "file:///android_asset/baidu.png"; - // "http://www.baidu.com/img/bdlogo.gif"; - searchUrl = Constants.BAIDU_SEARCH; - break; - case 10: - // YANDEX_SEARCH; - icon = "file:///android_asset/yandex.png"; - // "http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Yandex.svg/600px-Yandex.svg.png"; - searchUrl = Constants.YANDEX_SEARCH; - break; - default: - // DEFAULT GOOGLE_SEARCH; - icon = "file:///android_asset/google.png"; - searchUrl = Constants.GOOGLE_SEARCH; - break; - } + BaseSearchEngine currentSearchEngine = mSearchEngineProvider.getCurrentSearchEngine(); + + String icon = currentSearchEngine.getIconUrl(); + String searchUrl = currentSearchEngine.getQueryUrl(); homepageBuilder.append(icon); homepageBuilder.append(MIDDLE); diff --git a/app/src/main/java/acr/browser/lightning/search/SearchEngineProvider.java b/app/src/main/java/acr/browser/lightning/search/SearchEngineProvider.java new file mode 100644 index 0000000..1e27a9f --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/SearchEngineProvider.java @@ -0,0 +1,64 @@ +package acr.browser.lightning.search; + +import android.support.annotation.NonNull; + +import javax.inject.Inject; + +import acr.browser.lightning.app.BrowserApp; +import acr.browser.lightning.preference.PreferenceManager; +import acr.browser.lightning.search.engine.AskSearch; +import acr.browser.lightning.search.engine.BaiduSearch; +import acr.browser.lightning.search.engine.BaseSearchEngine; +import acr.browser.lightning.search.engine.BingSearch; +import acr.browser.lightning.search.engine.CustomSearch; +import acr.browser.lightning.search.engine.DuckLiteSearch; +import acr.browser.lightning.search.engine.DuckSearch; +import acr.browser.lightning.search.engine.GoogleSearch; +import acr.browser.lightning.search.engine.StartPageMobileSearch; +import acr.browser.lightning.search.engine.StartPageSearch; +import acr.browser.lightning.search.engine.YahooSearch; +import acr.browser.lightning.search.engine.YandexSearch; + +/** + * The model that provides the search engine based + * on the user's preference. + */ +public class SearchEngineProvider { + + @Inject PreferenceManager mPreferenceManager; + + @Inject + public SearchEngineProvider() { + BrowserApp.getAppComponent().inject(this); + } + + @NonNull + public BaseSearchEngine getCurrentSearchEngine() { + switch (mPreferenceManager.getSearchChoice()) { + case 0: + return new CustomSearch(mPreferenceManager.getSearchUrl()); + case 1: + default: + return new GoogleSearch(); + case 2: + return new AskSearch(); + case 3: + return new BingSearch(); + case 4: + return new YahooSearch(); + case 5: + return new StartPageSearch(); + case 6: + return new StartPageMobileSearch(); + case 7: + return new DuckSearch(); + case 8: + return new DuckLiteSearch(); + case 9: + return new BaiduSearch(); + case 10: + return new YandexSearch(); + } + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/AskSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/AskSearch.java new file mode 100644 index 0000000..27aa160 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/AskSearch.java @@ -0,0 +1,14 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The Ask search engine. + */ +public class AskSearch extends BaseSearchEngine { + + public AskSearch() { + super("file:///android_asset/ask.png", Constants.ASK_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/BaiduSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/BaiduSearch.java new file mode 100644 index 0000000..bc46e7d --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/BaiduSearch.java @@ -0,0 +1,16 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The Baidu search engine. + *

+ * See http://www.baidu.com/img/bdlogo.gif for the icon. + */ +public class BaiduSearch extends BaseSearchEngine { + + public BaiduSearch() { + super("file:///android_asset/baidu.png", Constants.BAIDU_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/BaseSearchEngine.java b/app/src/main/java/acr/browser/lightning/search/engine/BaseSearchEngine.java new file mode 100644 index 0000000..009d22a --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/BaseSearchEngine.java @@ -0,0 +1,33 @@ +package acr.browser.lightning.search.engine; + +import android.support.annotation.NonNull; + +import acr.browser.lightning.utils.Preconditions; + +/** + * A class representative of a search engine. + */ +public class BaseSearchEngine { + + @NonNull private final String mIconUrl; + @NonNull private final String mQueryUrl; + + public BaseSearchEngine(@NonNull String iconUrl, @NonNull String queryUrl) { + Preconditions.checkNonNull(iconUrl); + Preconditions.checkNonNull(queryUrl); + + mIconUrl = iconUrl; + mQueryUrl = queryUrl; + } + + @NonNull + public final String getIconUrl() { + return mIconUrl; + } + + @NonNull + public final String getQueryUrl() { + return mQueryUrl; + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/BingSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/BingSearch.java new file mode 100644 index 0000000..c3e95dc --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/BingSearch.java @@ -0,0 +1,18 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The Bing search engine. + *

+ * See http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Bing_logo_%282013%29.svg/500px-Bing_logo_%282013%29.svg.png + * for the icon. + */ +public class BingSearch extends BaseSearchEngine { + + public BingSearch() { + super("file:///android_asset/bing.png", Constants.BING_SEARCH); + // "http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Bing_logo_%282013%29.svg/500px-Bing_logo_%282013%29.svg.png"; + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/CustomSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/CustomSearch.java new file mode 100644 index 0000000..fb7a170 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/CustomSearch.java @@ -0,0 +1,14 @@ +package acr.browser.lightning.search.engine; + +import android.support.annotation.NonNull; + +/** + * A custom search engine. + */ +public class CustomSearch extends BaseSearchEngine { + + public CustomSearch(@NonNull String queryUrl) { + super("file:///android_asset/lightning.png", queryUrl); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/DuckLiteSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/DuckLiteSearch.java new file mode 100644 index 0000000..81c2b31 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/DuckLiteSearch.java @@ -0,0 +1,16 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The DuckDuckGo Lite search engine. + *

+ * See https://duckduckgo.com/assets/logo_homepage.normal.v101.png for the icon. + */ +public class DuckLiteSearch extends BaseSearchEngine { + + public DuckLiteSearch() { + super("file:///android_asset/duckduckgo.png", Constants.DUCK_LITE_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/DuckSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/DuckSearch.java new file mode 100644 index 0000000..cf9d85d --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/DuckSearch.java @@ -0,0 +1,16 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The DuckDuckGo search engine. + *

+ * See https://duckduckgo.com/assets/logo_homepage.normal.v101.png for the icon. + */ +public class DuckSearch extends BaseSearchEngine { + + public DuckSearch() { + super("file:///android_asset/duckduckgo.png", Constants.DUCK_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/GoogleSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/GoogleSearch.java new file mode 100644 index 0000000..ef08792 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/GoogleSearch.java @@ -0,0 +1,15 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The Google search engine. + *

+ * See https://www.google.com/images/srpr/logo11w.png for the icon. + */ +public class GoogleSearch extends BaseSearchEngine { + + public GoogleSearch() { + super("file:///android_asset/google.png", Constants.GOOGLE_SEARCH); + } +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/StartPageMobileSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/StartPageMobileSearch.java new file mode 100644 index 0000000..e150874 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/StartPageMobileSearch.java @@ -0,0 +1,14 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The StartPage mobile search engine. + */ +public class StartPageMobileSearch extends BaseSearchEngine { + + public StartPageMobileSearch() { + super("file:///android_asset/startpage.png", Constants.STARTPAGE_MOBILE_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/StartPageSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/StartPageSearch.java new file mode 100644 index 0000000..ef84bc1 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/StartPageSearch.java @@ -0,0 +1,14 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The StartPage search engine. + */ +public class StartPageSearch extends BaseSearchEngine { + + public StartPageSearch() { + super("file:///android_asset/startpage.png", Constants.STARTPAGE_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/YahooSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/YahooSearch.java new file mode 100644 index 0000000..8bfec27 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/YahooSearch.java @@ -0,0 +1,17 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The Yahoo search engine. + *

+ * See http://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Yahoo%21_logo.svg/799px-Yahoo%21_logo.svg.png + * for the icon. + */ +public class YahooSearch extends BaseSearchEngine { + + public YahooSearch() { + super("file:///android_asset/yahoo.png", Constants.YAHOO_SEARCH); + } + +} diff --git a/app/src/main/java/acr/browser/lightning/search/engine/YandexSearch.java b/app/src/main/java/acr/browser/lightning/search/engine/YandexSearch.java new file mode 100644 index 0000000..917fd63 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/search/engine/YandexSearch.java @@ -0,0 +1,17 @@ +package acr.browser.lightning.search.engine; + +import acr.browser.lightning.constant.Constants; + +/** + * The Yandex search engine. + *

+ * See http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Yandex.svg/600px-Yandex.svg.png + * for the icon. + */ +public class YandexSearch extends BaseSearchEngine { + + public YandexSearch() { + super("file:///android_asset/yandex.png", Constants.YANDEX_SEARCH); + } + +}