OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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.download.ui; | 5 package org.chromium.chrome.browser.download.ui; |
6 | 6 |
7 import android.app.Activity; | 7 import android.app.Activity; |
8 import android.content.ComponentName; | 8 import android.content.ComponentName; |
9 import android.content.Intent; | 9 import android.content.Intent; |
10 import android.content.res.Resources; | 10 import android.content.res.Resources; |
11 import android.os.AsyncTask; | 11 import android.os.AsyncTask; |
12 import android.support.graphics.drawable.VectorDrawableCompat; | 12 import android.support.graphics.drawable.VectorDrawableCompat; |
13 import android.support.v4.view.GravityCompat; | 13 import android.support.v4.view.GravityCompat; |
14 import android.support.v4.widget.DrawerLayout; | 14 import android.support.v4.widget.DrawerLayout; |
15 import android.support.v4.widget.DrawerLayout.DrawerListener; | 15 import android.support.v4.widget.DrawerLayout.DrawerListener; |
16 import android.support.v7.widget.RecyclerView; | 16 import android.support.v7.widget.RecyclerView; |
17 import android.support.v7.widget.RecyclerView.ItemAnimator; | |
18 import android.support.v7.widget.Toolbar.OnMenuItemClickListener; | 17 import android.support.v7.widget.Toolbar.OnMenuItemClickListener; |
19 import android.view.Gravity; | 18 import android.view.Gravity; |
20 import android.view.LayoutInflater; | 19 import android.view.LayoutInflater; |
21 import android.view.MenuItem; | 20 import android.view.MenuItem; |
22 import android.view.View; | 21 import android.view.View; |
23 import android.view.ViewGroup; | 22 import android.view.ViewGroup; |
24 import android.widget.ListView; | 23 import android.widget.ListView; |
25 | 24 |
26 import org.chromium.base.ContextUtils; | 25 import org.chromium.base.ContextUtils; |
27 import org.chromium.base.FileUtils; | 26 import org.chromium.base.FileUtils; |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 | 166 |
168 private final DownloadHistoryAdapter mHistoryAdapter; | 167 private final DownloadHistoryAdapter mHistoryAdapter; |
169 private final FilterAdapter mFilterAdapter; | 168 private final FilterAdapter mFilterAdapter; |
170 private final ObserverList<DownloadUiObserver> mObservers = new ObserverList
<>(); | 169 private final ObserverList<DownloadUiObserver> mObservers = new ObserverList
<>(); |
171 private final BackendProvider mBackendProvider; | 170 private final BackendProvider mBackendProvider; |
172 | 171 |
173 private final SpaceDisplay mSpaceDisplay; | 172 private final SpaceDisplay mSpaceDisplay; |
174 private final ListView mFilterView; | 173 private final ListView mFilterView; |
175 private final UndoDeletionSnackbarController mUndoDeletionSnackbarController
; | 174 private final UndoDeletionSnackbarController mUndoDeletionSnackbarController
; |
176 private final RecyclerView mRecyclerView; | 175 private final RecyclerView mRecyclerView; |
177 private final ItemAnimator mItemAnimator; | |
178 | 176 |
179 private BasicNativePage mNativePage; | 177 private BasicNativePage mNativePage; |
180 private Activity mActivity; | 178 private Activity mActivity; |
181 private ViewGroup mMainView; | 179 private ViewGroup mMainView; |
182 private DownloadManagerToolbar mToolbar; | 180 private DownloadManagerToolbar mToolbar; |
183 private SelectableListLayout<DownloadHistoryItemWrapper> mSelectableListLayo
ut; | 181 private SelectableListLayout<DownloadHistoryItemWrapper> mSelectableListLayo
ut; |
184 | 182 |
185 @SuppressWarnings("unchecked") // mSelectableListLayout | 183 @SuppressWarnings("unchecked") // mSelectableListLayout |
186 public DownloadManagerUi( | 184 public DownloadManagerUi( |
187 Activity activity, boolean isOffTheRecord, ComponentName parentCompo
nent) { | 185 Activity activity, boolean isOffTheRecord, ComponentName parentCompo
nent) { |
188 mActivity = activity; | 186 mActivity = activity; |
189 mBackendProvider = | 187 mBackendProvider = |
190 sProviderForTests == null ? new DownloadBackendProvider() : sPro
viderForTests; | 188 sProviderForTests == null ? new DownloadBackendProvider() : sPro
viderForTests; |
191 | 189 |
192 mMainView = (ViewGroup) LayoutInflater.from(activity).inflate(R.layout.d
ownload_main, null); | 190 mMainView = (ViewGroup) LayoutInflater.from(activity).inflate(R.layout.d
ownload_main, null); |
193 | 191 |
194 DrawerLayout drawerLayout = null; | 192 DrawerLayout drawerLayout = null; |
195 if (!DeviceFormFactor.isLargeTablet(activity)) { | 193 if (!DeviceFormFactor.isLargeTablet(activity)) { |
196 drawerLayout = (DrawerLayout) mMainView; | 194 drawerLayout = (DrawerLayout) mMainView; |
197 addDrawerListener(drawerLayout); | 195 addDrawerListener(drawerLayout); |
198 } | 196 } |
199 | 197 |
200 mSelectableListLayout = (SelectableListLayout<DownloadHistoryItemWrapper
>) | 198 mSelectableListLayout = (SelectableListLayout<DownloadHistoryItemWrapper
>) |
201 mMainView.findViewById(R.id.selectable_list); | 199 mMainView.findViewById(R.id.selectable_list); |
202 | 200 |
203 mSelectableListLayout.initializeEmptyView( | 201 mSelectableListLayout.initializeEmptyView( |
204 VectorDrawableCompat.create(mActivity.getResources(), | 202 VectorDrawableCompat.create( |
205 R.drawable.downloads_big, mActivity.getTheme()), | 203 mActivity.getResources(), R.drawable.downloads_big, mAct
ivity.getTheme()), |
206 R.string.download_manager_ui_empty); | 204 R.string.download_manager_ui_empty, R.string.download_manager_no
_results); |
207 | 205 |
208 mHistoryAdapter = new DownloadHistoryAdapter(isOffTheRecord, parentCompo
nent); | 206 mHistoryAdapter = new DownloadHistoryAdapter(isOffTheRecord, parentCompo
nent); |
209 mRecyclerView = mSelectableListLayout.initializeRecyclerView(mHistoryAda
pter); | 207 mRecyclerView = mSelectableListLayout.initializeRecyclerView(mHistoryAda
pter); |
210 mItemAnimator = mRecyclerView.getItemAnimator(); | |
211 | 208 |
212 // Prevent every progress update from causing a transition animation. | 209 // Prevent every progress update from causing a transition animation. |
213 mItemAnimator.setChangeDuration(0); | 210 mRecyclerView.getItemAnimator().setChangeDuration(0); |
214 | 211 |
215 mHistoryAdapter.initialize(mBackendProvider); | 212 mHistoryAdapter.initialize(mBackendProvider); |
216 addObserver(mHistoryAdapter); | 213 addObserver(mHistoryAdapter); |
217 | 214 |
218 mSpaceDisplay = new SpaceDisplay(mMainView, mHistoryAdapter); | 215 mSpaceDisplay = new SpaceDisplay(mMainView, mHistoryAdapter); |
219 mHistoryAdapter.registerAdapterDataObserver(mSpaceDisplay); | 216 mHistoryAdapter.registerAdapterDataObserver(mSpaceDisplay); |
220 mSpaceDisplay.onChanged(); | 217 mSpaceDisplay.onChanged(); |
221 | 218 |
222 mFilterAdapter = new FilterAdapter(); | 219 mFilterAdapter = new FilterAdapter(); |
223 mFilterAdapter.initialize(this); | 220 mFilterAdapter.initialize(this); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 if (item.getItemId() == R.id.close_menu_id && !DeviceFormFactor.isTablet
(mActivity)) { | 300 if (item.getItemId() == R.id.close_menu_id && !DeviceFormFactor.isTablet
(mActivity)) { |
304 mActivity.finish(); | 301 mActivity.finish(); |
305 return true; | 302 return true; |
306 } else if (item.getItemId() == R.id.selection_mode_delete_menu_id) { | 303 } else if (item.getItemId() == R.id.selection_mode_delete_menu_id) { |
307 deleteSelectedItems(); | 304 deleteSelectedItems(); |
308 return true; | 305 return true; |
309 } else if (item.getItemId() == R.id.selection_mode_share_menu_id) { | 306 } else if (item.getItemId() == R.id.selection_mode_share_menu_id) { |
310 shareSelectedItems(); | 307 shareSelectedItems(); |
311 return true; | 308 return true; |
312 } else if (item.getItemId() == R.id.search_menu_id) { | 309 } else if (item.getItemId() == R.id.search_menu_id) { |
313 mRecyclerView.setItemAnimator(null); | 310 mSelectableListLayout.onStartSearch(); |
314 mToolbar.showSearchView(); | 311 mToolbar.showSearchView(); |
315 mSelectableListLayout.setEmptyViewText(R.string.download_manager_no_
results); | |
316 RecordUserAction.record("Android.DownloadManager.Search"); | 312 RecordUserAction.record("Android.DownloadManager.Search"); |
317 return true; | 313 return true; |
318 } | 314 } |
319 return false; | 315 return false; |
320 } | 316 } |
321 | 317 |
322 /** | 318 /** |
323 * @see DrawerLayout#openDrawer(int) | 319 * @see DrawerLayout#openDrawer(int) |
324 */ | 320 */ |
325 @VisibleForTesting | 321 @VisibleForTesting |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 DownloadFilter.FILTER_BOUNDARY); | 380 DownloadFilter.FILTER_BOUNDARY); |
385 } | 381 } |
386 | 382 |
387 @Override | 383 @Override |
388 public void onSearchTextChanged(String query) { | 384 public void onSearchTextChanged(String query) { |
389 mHistoryAdapter.search(query); | 385 mHistoryAdapter.search(query); |
390 } | 386 } |
391 | 387 |
392 @Override | 388 @Override |
393 public void onEndSearch() { | 389 public void onEndSearch() { |
394 mSelectableListLayout.setEmptyViewText(R.string.download_manager_ui_empt
y); | 390 mSelectableListLayout.onEndSearch(); |
395 mHistoryAdapter.onEndSearch(); | 391 mHistoryAdapter.onEndSearch(); |
396 mRecyclerView.setItemAnimator(mItemAnimator); | |
397 } | 392 } |
398 | 393 |
399 private void shareSelectedItems() { | 394 private void shareSelectedItems() { |
400 List<DownloadHistoryItemWrapper> selectedItems = | 395 List<DownloadHistoryItemWrapper> selectedItems = |
401 mBackendProvider.getSelectionDelegate().getSelectedItems(); | 396 mBackendProvider.getSelectionDelegate().getSelectedItems(); |
402 assert selectedItems.size() > 0; | 397 assert selectedItems.size() > 0; |
403 | 398 |
404 mActivity.startActivity(Intent.createChooser(createShareIntent(), | 399 mActivity.startActivity(Intent.createChooser(createShareIntent(), |
405 mActivity.getString(R.string.share_link_chooser_title))); | 400 mActivity.getString(R.string.share_link_chooser_title))); |
406 | 401 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 public SpaceDisplay getSpaceDisplayForTests() { | 509 public SpaceDisplay getSpaceDisplayForTests() { |
515 return mSpaceDisplay; | 510 return mSpaceDisplay; |
516 } | 511 } |
517 | 512 |
518 /** Sets a BackendProvider that is used in place of a real one. */ | 513 /** Sets a BackendProvider that is used in place of a real one. */ |
519 @VisibleForTesting | 514 @VisibleForTesting |
520 public static void setProviderForTests(BackendProvider provider) { | 515 public static void setProviderForTests(BackendProvider provider) { |
521 sProviderForTests = provider; | 516 sProviderForTests = provider; |
522 } | 517 } |
523 } | 518 } |
OLD | NEW |