author | Josh Dover <gerfuls@gmail.com> |
Wed, 29 Jan 2014 16:36:37 -0800 | |
changeset 182438 | 7b3cffd6d6c70aa447d938b37bdec4d20eba2161 |
parent 182437 | b25ece8898494fa8e1770da307addc64008c7226 |
child 182439 | d0b0160601f7c484a7a16861c520088ddc0d878c |
push id | 3343 |
push user | ffxbld |
push date | Mon, 17 Mar 2014 21:55:32 +0000 |
treeherder | mozilla-beta@2f7d3415f79f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | lucasr |
bugs | 963721 |
milestone | 29.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/mobile/android/base/BrowserApp.java +++ b/mobile/android/base/BrowserApp.java @@ -2477,17 +2477,21 @@ abstract public class BrowserApp extends openUrlAndStopEditing(url, true); } } } // HomePager.OnUrlOpenListener @Override public void onUrlOpen(String url, EnumSet<OnUrlOpenListener.Flags> flags) { - if (!maybeSwitchToTab(url, flags)) { + if (flags.contains(OnUrlOpenListener.Flags.OPEN_WITH_INTENT)) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + } else if (!maybeSwitchToTab(url, flags)) { openUrlAndStopEditing(url); } } // BrowserSearch.OnSearchListener @Override public void onSearch(SearchEngine engine, String text) { recordSearch(engine, "barsuggest");
--- a/mobile/android/base/home/DynamicPanel.java +++ b/mobile/android/base/home/DynamicPanel.java @@ -101,17 +101,17 @@ public class DynamicPanel extends HomeFr } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { switch(mPanelConfig.getLayoutType()) { case FRAME: final PanelDatasetHandler datasetHandler = new PanelDatasetHandler(); - mLayout = new FramePanelLayout(getActivity(), mPanelConfig, datasetHandler); + mLayout = new FramePanelLayout(getActivity(), mPanelConfig, datasetHandler, mUrlOpenListener); break; default: throw new IllegalStateException("Unrecognized layout type in DynamicPanel"); } Log.d(LOGTAG, "Created layout of type: " + mPanelConfig.getLayoutType());
--- a/mobile/android/base/home/FramePanelLayout.java +++ b/mobile/android/base/home/FramePanelLayout.java @@ -1,30 +1,31 @@ /* -*- 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.home; +import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.home.HomeConfig.ViewConfig; import android.content.Context; import android.util.Log; import android.view.View; class FramePanelLayout extends PanelLayout { private static final String LOGTAG = "GeckoFramePanelLayout"; private final View mChildView; private final ViewConfig mChildConfig; - public FramePanelLayout(Context context, PanelConfig panelConfig, DatasetHandler datasetHandler) { - super(context, panelConfig, datasetHandler); + public FramePanelLayout(Context context, PanelConfig panelConfig, DatasetHandler datasetHandler, OnUrlOpenListener urlOpenListener) { + super(context, panelConfig, datasetHandler, urlOpenListener); // This layout can only hold one view so we simply // take the first defined view from PanelConfig. mChildConfig = panelConfig.getViewAt(0); if (mChildConfig == null) { throw new IllegalStateException("FramePanelLayout requires a view in PanelConfig"); }
--- a/mobile/android/base/home/HomeListView.java +++ b/mobile/android/base/home/HomeListView.java @@ -25,17 +25,17 @@ import android.widget.ListView; */ public class HomeListView extends ListView implements OnItemLongClickListener { // ContextMenuInfo associated with the currently long pressed list item. private HomeContextMenuInfo mContextMenuInfo; // On URL open listener - private OnUrlOpenListener mUrlOpenListener; + protected OnUrlOpenListener mUrlOpenListener; // Top divider private boolean mShowTopDivider; // ContextMenuInfo maker private ContextMenuInfoFactory mContextMenuInfoFactory; public HomeListView(Context context) {
--- a/mobile/android/base/home/HomePager.java +++ b/mobile/android/base/home/HomePager.java @@ -63,17 +63,18 @@ public class HomePager extends ViewPager static final String LIST_TAG_READING_LIST = "reading_list"; static final String LIST_TAG_TOP_SITES = "top_sites"; static final String LIST_TAG_MOST_RECENT = "most_recent"; static final String LIST_TAG_LAST_TABS = "last_tabs"; static final String LIST_TAG_BROWSER_SEARCH = "browser_search"; public interface OnUrlOpenListener { public enum Flags { - ALLOW_SWITCH_TO_TAB + ALLOW_SWITCH_TO_TAB, + OPEN_WITH_INTENT } public void onUrlOpen(String url, EnumSet<Flags> flags); } public interface OnNewTabsListener { public void onNewTabs(String[] urls); }
--- a/mobile/android/base/home/PanelLayout.java +++ b/mobile/android/base/home/PanelLayout.java @@ -1,15 +1,16 @@ /* -*- 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.home; +import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.home.HomeConfig.ViewConfig; import android.content.Context; import android.database.Cursor; import android.text.TextUtils; import android.util.Log; import android.view.View; @@ -53,16 +54,17 @@ import java.util.List; * {@code PanelLayout} subclasses are free to have any type of views to arrange * the panel views in different ways. */ abstract class PanelLayout extends FrameLayout { private static final String LOGTAG = "GeckoPanelLayout"; private final List<ViewEntry> mViewEntries; private final DatasetHandler mDatasetHandler; + private final OnUrlOpenListener mUrlOpenListener; /** * To be used by panel views to express that they are * backed by datasets. */ public interface DatasetBacked { public void setDataset(Cursor cursor); } @@ -81,20 +83,25 @@ abstract class PanelLayout extends Frame /** * Releases any resources associated with a previously loaded * dataset. It will do nothing if the dataset with the given ID * hasn't been loaded before. */ public void resetDataset(String datasetId); } - public PanelLayout(Context context, PanelConfig panelConfig, DatasetHandler datasetHandler) { + public interface PanelView { + public void setOnUrlOpenListener(OnUrlOpenListener listener); + } + + public PanelLayout(Context context, PanelConfig panelConfig, DatasetHandler datasetHandler, OnUrlOpenListener urlOpenListener) { super(context); mViewEntries = new ArrayList<ViewEntry>(); mDatasetHandler = datasetHandler; + mUrlOpenListener = urlOpenListener; } /** * Delivers the dataset as a {@code Cursor} to be bound to the * panel views backed by it. This is used by the {@code DatasetHandler} * in response to a dataset request. */ public final void deliverDataset(String datasetId, Cursor cursor) { @@ -150,16 +157,18 @@ abstract class PanelLayout extends Frame default: throw new IllegalStateException("Unrecognized view type in " + getClass().getSimpleName()); } final ViewEntry entry = new ViewEntry(view, viewConfig); mViewEntries.add(entry); + ((PanelView) view).setOnUrlOpenListener(mUrlOpenListener); + return view; } /** * Dispose any dataset references associated with the * given view. */ protected final void disposePanelView(View view) { @@ -223,9 +232,9 @@ abstract class PanelLayout extends Frame public View getView() { return mView; } public String getDatasetId() { return mViewConfig.getDatasetId(); } } -} \ No newline at end of file +}
--- a/mobile/android/base/home/PanelListView.java +++ b/mobile/android/base/home/PanelListView.java @@ -2,39 +2,46 @@ * 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.home; import org.mozilla.gecko.R; import org.mozilla.gecko.home.HomeConfig.ViewConfig; +import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.home.PanelLayout.DatasetBacked; +import org.mozilla.gecko.home.PanelLayout.PanelView; +import org.mozilla.gecko.db.BrowserContract.HomeItems; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.CursorAdapter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; + +import java.util.EnumSet; public class PanelListView extends HomeListView - implements DatasetBacked { + implements DatasetBacked, PanelView { private static final String LOGTAG = "GeckoPanelListView"; private final PanelListAdapter mAdapter; private final ViewConfig mViewConfig; public PanelListView(Context context, ViewConfig viewConfig) { super(context); mViewConfig = viewConfig; mAdapter = new PanelListAdapter(context); setAdapter(mAdapter); + setOnItemClickListener(new PanelListItemClickListener()); } @Override public void setDataset(Cursor cursor) { Log.d(LOGTAG, "Setting dataset: " + mViewConfig.getDatasetId()); mAdapter.swapCursor(cursor); } @@ -49,9 +56,24 @@ public class PanelListView extends HomeL row.updateFromCursor(cursor); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return LayoutInflater.from(parent.getContext()).inflate(R.layout.panel_list_row, parent, false); } } -} \ No newline at end of file + + private class PanelListItemClickListener implements AdapterView.OnItemClickListener { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + Cursor cursor = mAdapter.getCursor(); + if (cursor == null || !cursor.moveToPosition(position)) { + throw new IllegalStateException("Couldn't move cursor to position " + position); + } + + int urlIndex = cursor.getColumnIndexOrThrow(HomeItems.URL); + final String url = cursor.getString(urlIndex); + + mUrlOpenListener.onUrlOpen(url, EnumSet.of(OnUrlOpenListener.Flags.OPEN_WITH_INTENT)); + } + } +}