Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuHelper.java

Issue 2931433004: [Android] Open a tab in the background from Browser Actions if ChromeTabbedActivity is available (Closed)
Patch Set: Update based on Yusuf's comment.s Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.browseractions; 5 package org.chromium.chrome.browser.browseractions;
6 6
7 import android.app.PendingIntent; 7 import android.app.PendingIntent;
8 import android.app.ProgressDialog;
8 import android.support.customtabs.browseractions.BrowserActionItem; 9 import android.support.customtabs.browseractions.BrowserActionItem;
9 import android.support.customtabs.browseractions.BrowserActionsIntent; 10 import android.support.customtabs.browseractions.BrowserActionsIntent;
10 import android.util.Pair; 11 import android.util.Pair;
11 import android.util.SparseArray; 12 import android.util.SparseArray;
12 import android.view.ContextMenu; 13 import android.view.ContextMenu;
13 import android.view.ContextMenu.ContextMenuInfo; 14 import android.view.ContextMenu.ContextMenuInfo;
14 import android.view.View; 15 import android.view.View;
15 import android.view.View.OnAttachStateChangeListener; 16 import android.view.View.OnAttachStateChangeListener;
16 import android.view.View.OnCreateContextMenuListener; 17 import android.view.View.OnCreateContextMenuListener;
17 18
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 private final ContextMenuParams mCurrentContextMenuParams; 53 private final ContextMenuParams mCurrentContextMenuParams;
53 private final BrowserActionsContextMenuItemDelegate mDelegate; 54 private final BrowserActionsContextMenuItemDelegate mDelegate;
54 private final BrowserActionActivity mActivity; 55 private final BrowserActionActivity mActivity;
55 private final Callback<Integer> mItemSelectedCallback; 56 private final Callback<Integer> mItemSelectedCallback;
56 private final Runnable mOnMenuShown; 57 private final Runnable mOnMenuShown;
57 private final Runnable mOnMenuClosed; 58 private final Runnable mOnMenuClosed;
58 private final Callback<Boolean> mOnShareClickedRunnable; 59 private final Callback<Boolean> mOnShareClickedRunnable;
59 60
60 private final List<Pair<Integer, List<ContextMenuItem>>> mItems; 61 private final List<Pair<Integer, List<ContextMenuItem>>> mItems;
61 62
63 private final ProgressDialog mProgressDialog;
64
65 private boolean mIsOpenInBackgroundPending;
66
62 public BrowserActionsContextMenuHelper(BrowserActionActivity activity, Conte xtMenuParams params, 67 public BrowserActionsContextMenuHelper(BrowserActionActivity activity, Conte xtMenuParams params,
Yusuf 2017/07/10 06:14:56 Looking at how we are using the Activity here, if
ltian 2017/07/26 01:22:12 Done.
63 List<BrowserActionItem> customItems, String sourcePackageName) { 68 List<BrowserActionItem> customItems, String sourcePackageName) {
64 mActivity = activity; 69 mActivity = activity;
65 mCurrentContextMenuParams = params; 70 mCurrentContextMenuParams = params;
66 mOnMenuShown = new Runnable() { 71 mOnMenuShown = new Runnable() {
67 @Override 72 @Override
68 public void run() { 73 public void run() {
69 mActivity.onMenuShown(); 74 mActivity.onMenuShown();
70 } 75 }
71 }; 76 };
72 mOnMenuClosed = new Runnable() { 77 mOnMenuClosed = new Runnable() {
73 @Override 78 @Override
74 public void run() { 79 public void run() {
75 mActivity.finish(); 80 if (!mIsOpenInBackgroundPending) {
81 mActivity.finish();
82 }
76 } 83 }
77 }; 84 };
78 mItemSelectedCallback = new Callback<Integer>() { 85 mItemSelectedCallback = new Callback<Integer>() {
79 @Override 86 @Override
80 public void onResult(Integer result) { 87 public void onResult(Integer result) {
81 onItemSelected(result); 88 onItemSelected(result);
82 } 89 }
83 }; 90 };
84 mOnShareClickedRunnable = new Callback<Boolean>() { 91 mOnShareClickedRunnable = new Callback<Boolean>() {
85 @Override 92 @Override
86 public void onResult(Boolean isShareLink) { 93 public void onResult(Boolean isShareLink) {
87 mDelegate.share(true, mCurrentContextMenuParams.getLinkUrl()); 94 mDelegate.share(true, mCurrentContextMenuParams.getLinkUrl());
88 } 95 }
89 }; 96 };
90 ShareContextMenuItem shareItem = new ShareContextMenuItem(R.drawable.ic_ share_white_24dp, 97 ShareContextMenuItem shareItem = new ShareContextMenuItem(R.drawable.ic_ share_white_24dp,
91 R.string.browser_actions_share, R.id.browser_actions_share, true ); 98 R.string.browser_actions_share, R.id.browser_actions_share, true );
92 shareItem.setCreatorPackageName(sourcePackageName); 99 shareItem.setCreatorPackageName(sourcePackageName);
93 mBrowserActionsLinkGroup = 100 mBrowserActionsLinkGroup =
94 Arrays.asList(ChromeContextMenuItem.BROWSER_ACTIONS_OPEN_IN_BACK GROUND, 101 Arrays.asList(ChromeContextMenuItem.BROWSER_ACTIONS_OPEN_IN_BACK GROUND,
95 ChromeContextMenuItem.BROWSER_ACTIONS_OPEN_IN_INCOGNITO_ TAB, 102 ChromeContextMenuItem.BROWSER_ACTIONS_OPEN_IN_INCOGNITO_ TAB,
96 ChromeContextMenuItem.BROWSER_ACTION_SAVE_LINK_AS, 103 ChromeContextMenuItem.BROWSER_ACTION_SAVE_LINK_AS,
97 ChromeContextMenuItem.BROWSER_ACTIONS_COPY_ADDRESS, shar eItem); 104 ChromeContextMenuItem.BROWSER_ACTIONS_COPY_ADDRESS, shar eItem);
98 mDelegate = new BrowserActionsContextMenuItemDelegate(mActivity, sourceP ackageName); 105 mDelegate = new BrowserActionsContextMenuItemDelegate(mActivity, sourceP ackageName);
106 mProgressDialog = new ProgressDialog(mActivity);
99 107
100 mItems = buildContextMenuItems(customItems); 108 mItems = buildContextMenuItems(customItems);
101 } 109 }
102 110
103 /** 111 /**
104 * Builds items for Browser Actions context menu. 112 * Builds items for Browser Actions context menu.
105 */ 113 */
106 private List<Pair<Integer, List<ContextMenuItem>>> buildContextMenuItems( 114 private List<Pair<Integer, List<ContextMenuItem>>> buildContextMenuItems(
107 List<BrowserActionItem> customItems) { 115 List<BrowserActionItem> customItems) {
108 List<Pair<Integer, List<ContextMenuItem>>> menuItems = new ArrayList<>() ; 116 List<Pair<Integer, List<ContextMenuItem>>> menuItems = new ArrayList<>() ;
(...skipping 15 matching lines...) Expand all
124 for (int i = 0; i < customItems.size() && i < BrowserActionsIntent.MAX_C USTOM_ITEMS; i++) { 132 for (int i = 0; i < customItems.size() && i < BrowserActionsIntent.MAX_C USTOM_ITEMS; i++) {
125 items.add(new BrowserActionsCustomContextMenuItem( 133 items.add(new BrowserActionsCustomContextMenuItem(
126 CUSTOM_BROWSER_ACTIONS_ID_GROUP.get(i), customItems.get(i))) ; 134 CUSTOM_BROWSER_ACTIONS_ID_GROUP.get(i), customItems.get(i))) ;
127 mCustomItemActionMap.put( 135 mCustomItemActionMap.put(
128 CUSTOM_BROWSER_ACTIONS_ID_GROUP.get(i), customItems.get(i).g etAction()); 136 CUSTOM_BROWSER_ACTIONS_ID_GROUP.get(i), customItems.get(i).g etAction());
129 } 137 }
130 } 138 }
131 139
132 private boolean onItemSelected(int itemId) { 140 private boolean onItemSelected(int itemId) {
133 if (itemId == R.id.browser_actions_open_in_background) { 141 if (itemId == R.id.browser_actions_open_in_background) {
134 mDelegate.onOpenInBackground(mCurrentContextMenuParams.getLinkUrl()) ; 142 if (mActivity.isNativeInitialized()) {
143 mDelegate.onOpenInBackground(mCurrentContextMenuParams.getLinkUr l());
144 } else {
145 mIsOpenInBackgroundPending = true;
146 waitNativeInitialized();
147 }
135 } else if (itemId == R.id.browser_actions_open_in_incognito_tab) { 148 } else if (itemId == R.id.browser_actions_open_in_incognito_tab) {
136 mDelegate.onOpenInIncognitoTab(mCurrentContextMenuParams.getLinkUrl( )); 149 mDelegate.onOpenInIncognitoTab(mCurrentContextMenuParams.getLinkUrl( ));
137 } else if (itemId == R.id.browser_actions_save_link_as) { 150 } else if (itemId == R.id.browser_actions_save_link_as) {
138 mDelegate.startDownload(mCurrentContextMenuParams.getLinkUrl()); 151 mDelegate.startDownload(mCurrentContextMenuParams.getLinkUrl());
139 } else if (itemId == R.id.browser_actions_copy_address) { 152 } else if (itemId == R.id.browser_actions_copy_address) {
140 mDelegate.onSaveToClipboard(mCurrentContextMenuParams.getLinkUrl()); 153 mDelegate.onSaveToClipboard(mCurrentContextMenuParams.getLinkUrl());
141 } else if (itemId == R.id.browser_actions_share) { 154 } else if (itemId == R.id.browser_actions_share) {
142 mDelegate.share(false, mCurrentContextMenuParams.getLinkUrl()); 155 mDelegate.share(false, mCurrentContextMenuParams.getLinkUrl());
143 } else if (mCustomItemActionMap.indexOfKey(itemId) >= 0) { 156 } else if (mCustomItemActionMap.indexOfKey(itemId) >= 0) {
144 mDelegate.onCustomItemSelected(mCustomItemActionMap.get(itemId)); 157 mDelegate.onCustomItemSelected(mCustomItemActionMap.get(itemId));
145 } 158 }
146 return true; 159 return true;
147 } 160 }
148 161
149 /** 162 /**
163 * Display a progress dialog to wait for native libraries initialized.
164 */
165 private void waitNativeInitialized() {
166 mProgressDialog.setMessage(
167 mActivity.getString(R.string.browser_actions_loading_native_mess age));
168 mProgressDialog.show();
169 }
170
171 private void dismissProgressDialog() {
172 if (mProgressDialog != null && mProgressDialog.isShowing()) {
173 mProgressDialog.dismiss();
174 }
175 }
176
177 /**
150 * Displays the Browser Actions context menu. 178 * Displays the Browser Actions context menu.
151 * @param view The view to show the context menu if old UI is used. 179 * @param view The view to show the context menu if old UI is used.
152 */ 180 */
153 public void displayBrowserActionsMenu(final View view) { 181 public void displayBrowserActionsMenu(final View view) {
154 if (IS_NEW_UI_ENABLED) { 182 if (IS_NEW_UI_ENABLED) {
155 ContextMenuUi menuUi = new TabularContextMenuUi(mOnShareClickedRunna ble); 183 ContextMenuUi menuUi = new TabularContextMenuUi(mOnShareClickedRunna ble);
156 menuUi.displayMenu(mActivity, mCurrentContextMenuParams, mItems, mIt emSelectedCallback, 184 menuUi.displayMenu(mActivity, mCurrentContextMenuParams, mItems, mIt emSelectedCallback,
157 mOnMenuShown, mOnMenuClosed); 185 mOnMenuShown, mOnMenuClosed);
158 } else { 186 } else {
159 view.setOnCreateContextMenuListener(BrowserActionsContextMenuHelper. this); 187 view.setOnCreateContextMenuListener(BrowserActionsContextMenuHelper. this);
(...skipping 16 matching lines...) Expand all
176 204
177 @Override 205 @Override
178 public void onViewAttachedToWindow(View view) { 206 public void onViewAttachedToWindow(View view) {
179 if (view.showContextMenu()) { 207 if (view.showContextMenu()) {
180 mOnMenuShown.run(); 208 mOnMenuShown.run();
181 } 209 }
182 } 210 }
183 211
184 @Override 212 @Override
185 public void onViewDetachedFromWindow(View v) {} 213 public void onViewDetachedFromWindow(View v) {}
214
215 /**
216 * Finishes all pending actions which requires Chrome native libraries.
217 */
218 public void handlePendingActions() {
Yusuf 2017/07/10 06:14:56 onNativeInitialized
ltian 2017/07/26 01:22:12 Done.
219 if (mIsOpenInBackgroundPending) {
220 mIsOpenInBackgroundPending = false;
221 dismissProgressDialog();
222 mDelegate.onOpenInBackground(mCurrentContextMenuParams.getLinkUrl()) ;
223 mActivity.finish();
224 }
225 }
186 } 226 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698