diff -r 000000000000 -r 6474c204b198 mobile/android/base/toolbar/ToolbarTitlePrefs.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobile/android/base/toolbar/ToolbarTitlePrefs.java Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,99 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko.toolbar; + +import org.mozilla.gecko.PrefsHelper; +import org.mozilla.gecko.Tab; +import org.mozilla.gecko.Tabs; +import org.mozilla.gecko.util.ThreadUtils; + +class ToolbarTitlePrefs { + static final String PREF_TITLEBAR_MODE = "browser.chrome.titlebarMode"; + static final String PREF_TRIM_URLS = "browser.urlbar.trimURLs"; + + interface OnChangeListener { + public void onChange(); + } + + final String[] prefs = { + PREF_TITLEBAR_MODE, + PREF_TRIM_URLS + }; + + private boolean mShowUrl; + private boolean mTrimUrls; + + private Integer mPrefObserverId; + + ToolbarTitlePrefs() { + mShowUrl = false; + mTrimUrls = true; + + mPrefObserverId = PrefsHelper.getPrefs(prefs, new TitlePrefsHandler()); + } + + boolean shouldShowUrl() { + return mShowUrl; + } + + boolean shouldTrimUrls() { + return mTrimUrls; + } + + void close() { + if (mPrefObserverId != null) { + PrefsHelper.removeObserver(mPrefObserverId); + mPrefObserverId = null; + } + } + + private class TitlePrefsHandler extends PrefsHelper.PrefHandlerBase { + @Override + public void prefValue(String pref, String str) { + // Handles PREF_TITLEBAR_MODE, which is always a string. + int value = Integer.parseInt(str); + boolean shouldShowUrl = (value == 1); + + if (shouldShowUrl == mShowUrl) { + return; + } + mShowUrl = shouldShowUrl; + + triggerChangeListener(); + } + + @Override + public void prefValue(String pref, boolean value) { + // Handles PREF_TRIM_URLS, which should usually be a boolean. + if (value == mTrimUrls) { + return; + } + mTrimUrls = value; + + triggerChangeListener(); + } + + @Override + public boolean isObserver() { + // We want to be notified of changes to be able to switch mode + // without restarting. + return true; + } + + private void triggerChangeListener() { + ThreadUtils.postToUiThread(new Runnable() { + @Override + public void run() { + final Tabs tabs = Tabs.getInstance(); + final Tab tab = tabs.getSelectedTab(); + if (tab != null) { + tabs.notifyListeners(tab, Tabs.TabEvents.TITLE); + } + } + }); + } + } +}