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.content.ComponentName; | 7 import android.content.ComponentName; |
| 8 import android.support.v7.widget.RecyclerView; |
8 import android.support.v7.widget.RecyclerView.ViewHolder; | 9 import android.support.v7.widget.RecyclerView.ViewHolder; |
9 import android.text.TextUtils; | 10 import android.text.TextUtils; |
| 11 import android.util.Pair; |
10 import android.view.LayoutInflater; | 12 import android.view.LayoutInflater; |
| 13 import android.view.View; |
11 import android.view.ViewGroup; | 14 import android.view.ViewGroup; |
12 | 15 |
13 import org.chromium.base.ObserverList; | 16 import org.chromium.base.ObserverList; |
14 import org.chromium.base.metrics.RecordHistogram; | 17 import org.chromium.base.metrics.RecordHistogram; |
15 import org.chromium.base.metrics.RecordUserAction; | 18 import org.chromium.base.metrics.RecordUserAction; |
16 import org.chromium.chrome.R; | 19 import org.chromium.chrome.R; |
17 import org.chromium.chrome.browser.download.DownloadItem; | 20 import org.chromium.chrome.browser.download.DownloadItem; |
18 import org.chromium.chrome.browser.download.DownloadSharedPreferenceHelper; | 21 import org.chromium.chrome.browser.download.DownloadSharedPreferenceHelper; |
19 import org.chromium.chrome.browser.download.ui.BackendProvider.DownloadDelegate; | 22 import org.chromium.chrome.browser.download.ui.BackendProvider.DownloadDelegate; |
20 import org.chromium.chrome.browser.download.ui.BackendProvider.OfflinePageDelega
te; | 23 import org.chromium.chrome.browser.download.ui.BackendProvider.OfflinePageDelega
te; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 totalSize += mIncognitoDownloadItems.getTotalBytes(); | 200 totalSize += mIncognitoDownloadItems.getTotalBytes(); |
198 totalSize += mOfflinePageItems.getTotalBytes(); | 201 totalSize += mOfflinePageItems.getTotalBytes(); |
199 return totalSize; | 202 return totalSize; |
200 } | 203 } |
201 | 204 |
202 @Override | 205 @Override |
203 protected int getTimedItemViewResId() { | 206 protected int getTimedItemViewResId() { |
204 return R.layout.date_view; | 207 return R.layout.date_view; |
205 } | 208 } |
206 | 209 |
| 210 private int getOfflineGroupHeaderResId() { |
| 211 return R.layout.offline_download_header; |
| 212 } |
| 213 |
| 214 private static class OfflineGroupHeaderViewHolder extends RecyclerView.ViewH
older { |
| 215 private OfflineGroupHeaderView mView; |
| 216 |
| 217 public OfflineGroupHeaderViewHolder(View view) { |
| 218 super(view); |
| 219 mView = (OfflineGroupHeaderView) view; |
| 220 } |
| 221 |
| 222 public OfflineGroupHeaderView getView() { |
| 223 return mView; |
| 224 } |
| 225 } |
| 226 |
| 227 @Override |
| 228 public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, in
t viewType) { |
| 229 if (viewType == TYPE_OFFLINE_HEADER) { |
| 230 return new OfflineGroupHeaderViewHolder( |
| 231 LayoutInflater.from(parent.getContext()) |
| 232 .inflate(getOfflineGroupHeaderResId(), parent, false
)); |
| 233 } else { |
| 234 return super.onCreateViewHolder(parent, viewType); |
| 235 } |
| 236 } |
| 237 |
| 238 @Override |
| 239 public final void onBindViewHolder(RecyclerView.ViewHolder holder, int posit
ion) { |
| 240 if (holder instanceof OfflineGroupHeaderViewHolder) { |
| 241 Pair<ItemGroup, Integer> pair = getGroupAt(position); |
| 242 DownloadItemGroup group = (DownloadItemGroup) pair.first; |
| 243 OfflineGroupHeaderView offlineView = ((OfflineGroupHeaderViewHolder)
holder).getView(); |
| 244 offlineView.bindGroupAndAdapter(group, this); |
| 245 offlineView.updateTitleText(group.getOfflinePageCount()); |
| 246 } else { |
| 247 super.onBindViewHolder(holder, position); |
| 248 } |
| 249 } |
| 250 |
207 @Override | 251 @Override |
208 public ViewHolder createViewHolder(ViewGroup parent) { | 252 public ViewHolder createViewHolder(ViewGroup parent) { |
209 DownloadItemView v = (DownloadItemView) LayoutInflater.from(parent.getCo
ntext()).inflate( | 253 DownloadItemView v = (DownloadItemView) LayoutInflater.from(parent.getCo
ntext()).inflate( |
210 R.layout.download_item_view, parent, false); | 254 R.layout.download_item_view, parent, false); |
211 v.setSelectionDelegate(getSelectionDelegate()); | 255 v.setSelectionDelegate(getSelectionDelegate()); |
212 mViews.add(v); | 256 mViews.add(v); |
213 return new DownloadHistoryItemViewHolder(v); | 257 return new DownloadHistoryItemViewHolder(v); |
214 } | 258 } |
215 | 259 |
216 @Override | 260 @Override |
217 public void bindViewHolderForTimedItem(ViewHolder current, TimedItem timedIt
em) { | 261 public void bindViewHolderForTimedItem(ViewHolder current, TimedItem timedIt
em) { |
218 final DownloadHistoryItemWrapper item = (DownloadHistoryItemWrapper) tim
edItem; | 262 final DownloadHistoryItemWrapper item = (DownloadHistoryItemWrapper) tim
edItem; |
219 | 263 |
220 DownloadHistoryItemViewHolder holder = (DownloadHistoryItemViewHolder) c
urrent; | 264 DownloadHistoryItemViewHolder holder = (DownloadHistoryItemViewHolder) c
urrent; |
221 holder.getItemView().displayItem(mBackendProvider, item); | 265 holder.getItemView().displayItem(mBackendProvider, item); |
222 } | 266 } |
223 | 267 |
| 268 public void expandOfflineHeader(DownloadItemGroup group) { |
| 269 group.setOfflinePageExpanded(true); |
| 270 // mSize += group.mNumOfflinePages; |
| 271 computeItemCount(); |
| 272 setGroupPositions(); |
| 273 notifyDataSetChanged(); |
| 274 } |
| 275 |
| 276 public void collapseOfflineHeader(DownloadItemGroup group) { |
| 277 group.setOfflinePageExpanded(false); |
| 278 // mSize -= group.mNumOfflinePages; |
| 279 computeItemCount(); |
| 280 setGroupPositions(); |
| 281 notifyDataSetChanged(); |
| 282 } |
| 283 |
| 284 @Override |
| 285 protected ItemGroup createGroup(long timeStamp) { |
| 286 ItemGroup group = new DownloadItemGroup(timeStamp); |
| 287 return group; |
| 288 } |
| 289 |
224 /** Called when a new DownloadItem has been created by the native DownloadMa
nager. */ | 290 /** Called when a new DownloadItem has been created by the native DownloadMa
nager. */ |
225 public void onDownloadItemCreated(DownloadItem item) { | 291 public void onDownloadItemCreated(DownloadItem item) { |
226 boolean isOffTheRecord = item.getDownloadInfo().isOffTheRecord(); | 292 boolean isOffTheRecord = item.getDownloadInfo().isOffTheRecord(); |
227 if (isOffTheRecord && !mShowOffTheRecord) return; | 293 if (isOffTheRecord && !mShowOffTheRecord) return; |
228 | 294 |
229 BackendItems list = getDownloadItemList(isOffTheRecord); | 295 BackendItems list = getDownloadItemList(isOffTheRecord); |
230 assert list.findItemIndex(item.getId()) == BackendItems.INVALID_INDEX; | 296 assert list.findItemIndex(item.getId()) == BackendItems.INVALID_INDEX; |
231 | 297 |
232 DownloadItemWrapper wrapper = createDownloadItemWrapper(item); | 298 DownloadItemWrapper wrapper = createDownloadItemWrapper(item); |
233 boolean wasAdded = addDownloadHistoryItemWrapper(wrapper); | 299 boolean wasAdded = addDownloadHistoryItemWrapper(wrapper); |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 itemCounts[DownloadFilter.FILTER_VIDEO]); | 542 itemCounts[DownloadFilter.FILTER_VIDEO]); |
477 } | 543 } |
478 | 544 |
479 private void recordTotalDownloadCountHistogram() { | 545 private void recordTotalDownloadCountHistogram() { |
480 // The total count intentionally leaves out incognito downloads. This sh
ould be revisited | 546 // The total count intentionally leaves out incognito downloads. This sh
ould be revisited |
481 // if/when incognito downloads are persistently available in downloads h
ome. | 547 // if/when incognito downloads are persistently available in downloads h
ome. |
482 RecordHistogram.recordCountHistogram("Android.DownloadManager.InitialCou
nt.Total", | 548 RecordHistogram.recordCountHistogram("Android.DownloadManager.InitialCou
nt.Total", |
483 mRegularDownloadItems.size() + mOfflinePageItems.size()); | 549 mRegularDownloadItems.size() + mOfflinePageItems.size()); |
484 } | 550 } |
485 } | 551 } |
OLD | NEW |