Bug 1352997 - Part 2 - Provide dedicated methods for typical homepage operations. r?sebastian,walkingice
That is figuring out whether a homepage has been set (but not caring about the specific page), or else getting the homepage URL with an automatic fallback (to about:home) if no homepage has been set.
MozReview-Commit-ID: D6Uy3A4P4Qc
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -1982,17 +1982,17 @@ public class BrowserApp extends GeckoApp
final BrowserDB db = BrowserDB.from(getProfile());
final ContentResolver cr = getContentResolver();
Telemetry.addToHistogram("PLACES_PAGES_COUNT", db.getCount(cr, "history"));
Telemetry.addToHistogram("FENNEC_BOOKMARKS_COUNT", db.getCount(cr, "bookmarks"));
Telemetry.addToHistogram("BROWSER_IS_USER_DEFAULT",
(isDefaultBrowser(Intent.ACTION_VIEW) ? 1 : 0));
Telemetry.addToHistogram("FENNEC_CUSTOM_HOMEPAGE",
- (TextUtils.isEmpty(Tabs.getHomepage(this)) ? 0 : 1));
+ (Tabs.hasHomepage(this) ? 1 : 0));
final SharedPreferences prefs = GeckoSharedPrefs.forProfile(getContext());
final boolean hasCustomHomepanels =
prefs.contains(HomeConfigPrefsBackend.PREFS_CONFIG_KEY) ||
prefs.contains(HomeConfigPrefsBackend.PREFS_CONFIG_KEY_OLD);
Telemetry.addToHistogram("FENNEC_HOMEPANELS_CUSTOM", hasCustomHomepanels ? 1 : 0);
@@ -2762,17 +2762,17 @@ public class BrowserApp extends GeckoApp
if (mFirstrunAnimationContainer == null) {
final ViewStub firstrunPagerStub = (ViewStub) findViewById(R.id.firstrun_pager_stub);
mFirstrunAnimationContainer = (FirstrunAnimationContainer) firstrunPagerStub.inflate();
mFirstrunAnimationContainer.load(getApplicationContext(), getSupportFragmentManager());
mFirstrunAnimationContainer.registerOnFinishListener(new FirstrunAnimationContainer.OnFinishListener() {
@Override
public void onFinish() {
if (mFirstrunAnimationContainer.showBrowserHint() &&
- TextUtils.isEmpty(Tabs.getHomepage(BrowserApp.this))) {
+ !Tabs.hasHomepage(BrowserApp.this)) {
enterEditingMode();
}
}
});
}
mHomeScreenContainer.setVisibility(View.VISIBLE);
}
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -1640,18 +1640,17 @@ public abstract class GeckoApp
*/
protected void loadStartupTab(final int flags, String action) {
if (!mShouldRestore || Intent.ACTION_VIEW.equals(action)) {
if (mLastSessionCrashed) {
// The Recent Tabs panel no longer exists, but BrowserApp will redirect us
// to the Recent Tabs folder of the Combined History panel.
Tabs.getInstance().loadUrl(AboutPages.getURLForBuiltinPanelType(PanelType.DEPRECATED_RECENT_TABS), flags);
} else {
- final String homepage = Tabs.getHomepage(this);
- Tabs.getInstance().loadUrl(!TextUtils.isEmpty(homepage) ? homepage : AboutPages.HOME, flags);
+ Tabs.getInstance().loadUrl(Tabs.getHomepageForStartupTab(this), flags);
}
}
}
/**
* Loads the initial tab at Fennec startup. This tab will load with the given
* external URL. If that URL is invalid, a startup tab will be loaded.
*
--- a/mobile/android/base/java/org/mozilla/gecko/Tabs.java
+++ b/mobile/android/base/java/org/mozilla/gecko/Tabs.java
@@ -1167,16 +1167,20 @@ public class Tabs implements BundleEvent
// Load favicon instantly for about:home page because it's already cached
if (AboutPages.isBuiltinIconPage(url)) {
tabToSelect.loadFavicon();
}
return tabToSelect;
}
+ /**
+ * Opens a new tab and loads either about:home or, if PREFS_HOMEPAGE_FOR_EVERY_NEW_TAB is set,
+ * the user's homepage.
+ */
public Tab addTab() {
return loadUrl(getHomepageForNewTab(mAppContext), Tabs.LOADURL_NEW_TAB);
}
public Tab addPrivateTab() {
return loadUrl(AboutPages.PRIVATEBROWSING, Tabs.LOADURL_NEW_TAB | Tabs.LOADURL_PRIVATE);
}
@@ -1333,30 +1337,45 @@ public class Tabs implements BundleEvent
final GeckoBundle data = new GeckoBundle();
data.putInt("fromTabId", fromTabId);
data.putInt("fromPosition", fromPosition);
data.putInt("toTabId", toTabId);
data.putInt("toPosition", toPosition);
EventDispatcher.getInstance().dispatch("Tab:Move", data);
}
+ /**
+ * @return True if the homepage preference is not empty.
+ */
+ public static boolean hasHomepage(Context context) {
+ return !TextUtils.isEmpty(getHomepage(context));
+ }
+
+ /**
+ * Note: For opening a new tab while respecting the user's preferences, just use
+ * {@link Tabs#addTab()} instead.
+ *
+ * @return The user's homepage (falling back to about:home) if PREFS_HOMEPAGE_FOR_EVERY_NEW_TAB
+ * is enabled, or else about:home.
+ */
@NonNull
- public static String getHomepageForNewTab(Context context) {
+ private static String getHomepageForNewTab(Context context) {
final SharedPreferences preferences = GeckoSharedPrefs.forApp(context);
final boolean forEveryNewTab = preferences.getBoolean(GeckoPreferences.PREFS_HOMEPAGE_FOR_EVERY_NEW_TAB, false);
- if (forEveryNewTab) {
- final String homePage = getHomepage(context);
- if (TextUtils.isEmpty(homePage)) {
- return AboutPages.HOME;
- } else {
- return homePage;
- }
- }
- return AboutPages.HOME;
+ return forEveryNewTab ? getHomepageForStartupTab(context) : AboutPages.HOME;
+ }
+
+ /**
+ * @return The user's homepage, or about:home if none is set.
+ */
+ @NonNull
+ public static String getHomepageForStartupTab(Context context) {
+ final String homepage = Tabs.getHomepage(context);
+ return TextUtils.isEmpty(homepage) ? AboutPages.HOME : homepage;
}
@Nullable
public static String getHomepage(Context context) {
final SharedPreferences preferences = GeckoSharedPrefs.forProfile(context);
final String homepagePreference = preferences.getString(GeckoPreferences.PREFS_HOMEPAGE, AboutPages.HOME);
final boolean readFromPartnerProvider = preferences.getBoolean(