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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkItemsAdapter.java

Issue 1307753002: [Offline pages] Adding capability to free up space used by Offline pages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Converting jlongarray to std::vector<int64> Created 5 years, 3 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.enhancedbookmarks; 5 package org.chromium.chrome.browser.enhancedbookmarks;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.support.v7.widget.RecyclerView; 8 import android.support.v7.widget.RecyclerView;
9 import android.support.v7.widget.RecyclerView.ViewHolder; 9 import android.support.v7.widget.RecyclerView.ViewHolder;
10 import android.view.LayoutInflater; 10 import android.view.LayoutInflater;
11 import android.view.View; 11 import android.view.View;
12 import android.view.ViewGroup; 12 import android.view.ViewGroup;
13 13
14 import org.chromium.base.annotations.SuppressFBWarnings; 14 import org.chromium.base.annotations.SuppressFBWarnings;
15 import org.chromium.chrome.R; 15 import org.chromium.chrome.R;
16 import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem; 16 import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem;
17 import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; 17 import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver;
18 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkManager.UIS tate;
18 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkPromoHeader .PromoHeaderShowingChangeListener; 19 import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkPromoHeader .PromoHeaderShowingChangeListener;
20 import org.chromium.chrome.browser.offline_pages.OfflinePageBridge;
21 import org.chromium.chrome.browser.offline_pages.OfflinePageFreeUpSpaceCallback;
22 import org.chromium.chrome.browser.offline_pages.OfflinePageStorageSpaceHeader;
19 import org.chromium.components.bookmarks.BookmarkId; 23 import org.chromium.components.bookmarks.BookmarkId;
20 24
21 import java.util.ArrayList; 25 import java.util.ArrayList;
22 import java.util.List; 26 import java.util.List;
23 27
24 /** 28 /**
25 * BaseAdapter for EnhancedBookmarkItemsContainer. It manages bookmarks to list there. 29 * BaseAdapter for EnhancedBookmarkItemsContainer. It manages bookmarks to list there.
26 */ 30 */
27 class EnhancedBookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.Vie wHolder> implements 31 class EnhancedBookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.Vie wHolder> implements
28 EnhancedBookmarkUIObserver, PromoHeaderShowingChangeListener { 32 EnhancedBookmarkUIObserver, PromoHeaderShowingChangeListener {
29 33
30 private static final int PROMO_HEADER_VIEW = 0; 34 private static final int PROMO_HEADER_VIEW = 0;
31 private static final int FOLDER_VIEW = 1; 35 private static final int FOLDER_VIEW = 1;
32 private static final int DIVIDER_VIEW = 2; 36 private static final int DIVIDER_VIEW = 2;
33 private static final int BOOKMARK_VIEW = 3; 37 private static final int BOOKMARK_VIEW = 3;
38 private static final int OFFLINE_PAGES_STORAGE_VIEW = 4;
34 39
35 private EnhancedBookmarkDelegate mDelegate; 40 private EnhancedBookmarkDelegate mDelegate;
36 private Context mContext; 41 private Context mContext;
37 private EnhancedBookmarkPromoHeader mPromoHeaderManager; 42 private EnhancedBookmarkPromoHeader mPromoHeaderManager;
43 private OfflinePageStorageSpaceHeader mOfflineStorageHeader;
38 44
39 private List<List<? extends Object>> mSections; 45 private List<List<? extends Object>> mSections;
40 private List<Object> mPromoHeaderSection = new ArrayList<>(); 46 private List<Object> mPromoHeaderSection = new ArrayList<>();
47 private List<Object> mOfflineStorageSection = new ArrayList<>();
41 private List<Object> mFolderDividerSection = new ArrayList<>(); 48 private List<Object> mFolderDividerSection = new ArrayList<>();
42 private List<BookmarkId> mFolderSection = new ArrayList<>(); 49 private List<BookmarkId> mFolderSection = new ArrayList<>();
43 private List<Object> mBookmarkDividerSection = new ArrayList<>(); 50 private List<Object> mBookmarkDividerSection = new ArrayList<>();
44 private List<BookmarkId> mBookmarkSection = new ArrayList<>(); 51 private List<BookmarkId> mBookmarkSection = new ArrayList<>();
45 52
46 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse rver() { 53 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse rver() {
47 @Override 54 @Override
48 public void bookmarkNodeChanged(BookmarkItem node) { 55 public void bookmarkNodeChanged(BookmarkItem node) {
49 int position = getPositionForBookmark(node.getId()); 56 int position = getPositionForBookmark(node.getId());
50 if (position >= 0) notifyItemChanged(position); 57 if (position >= 0) notifyItemChanged(position);
(...skipping 16 matching lines...) Expand all
67 public void bookmarkModelChanged() { 74 public void bookmarkModelChanged() {
68 mDelegate.notifyStateChange(EnhancedBookmarkItemsAdapter.this); 75 mDelegate.notifyStateChange(EnhancedBookmarkItemsAdapter.this);
69 } 76 }
70 }; 77 };
71 78
72 EnhancedBookmarkItemsAdapter(Context context) { 79 EnhancedBookmarkItemsAdapter(Context context) {
73 mContext = context; 80 mContext = context;
74 81
75 mSections = new ArrayList<>(); 82 mSections = new ArrayList<>();
76 mSections.add(mPromoHeaderSection); 83 mSections.add(mPromoHeaderSection);
84 mSections.add(mOfflineStorageSection);
77 mSections.add(mFolderDividerSection); 85 mSections.add(mFolderDividerSection);
78 mSections.add(mFolderSection); 86 mSections.add(mFolderSection);
79 mSections.add(mBookmarkDividerSection); 87 mSections.add(mBookmarkDividerSection);
80 mSections.add(mBookmarkSection); 88 mSections.add(mBookmarkSection);
81 } 89 }
82 90
83 BookmarkId getItem(int position) { 91 BookmarkId getItem(int position) {
84 return (BookmarkId) getSection(position).get(toSectionPosition(position) ); 92 return (BookmarkId) getSection(position).get(toSectionPosition(position) );
85 } 93 }
86 94
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 * @param folders This can be null if there is no folders to show. 132 * @param folders This can be null if there is no folders to show.
125 */ 133 */
126 private void setBookmarks(List<BookmarkId> folders, List<BookmarkId> bookmar ks) { 134 private void setBookmarks(List<BookmarkId> folders, List<BookmarkId> bookmar ks) {
127 if (folders == null) folders = new ArrayList<BookmarkId>(); 135 if (folders == null) folders = new ArrayList<BookmarkId>();
128 136
129 mFolderSection.clear(); 137 mFolderSection.clear();
130 mFolderSection.addAll(folders); 138 mFolderSection.addAll(folders);
131 mBookmarkSection.clear(); 139 mBookmarkSection.clear();
132 mBookmarkSection.addAll(bookmarks); 140 mBookmarkSection.addAll(bookmarks);
133 141
142 updateHeader();
134 updateDividerSections(); 143 updateDividerSections();
135 144
136 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo. 145 // TODO(kkimlabs): Animation is disabled due to a performance issue on b ookmark undo.
137 // http://crbug.com/484174 146 // http://crbug.com/484174
138 notifyDataSetChanged(); 147 notifyDataSetChanged();
139 } 148 }
140 149
141 private void updateDividerSections() { 150 private void updateDividerSections() {
142 mFolderDividerSection.clear(); 151 mFolderDividerSection.clear();
143 mBookmarkDividerSection.clear(); 152 mBookmarkDividerSection.clear();
144 if (!mPromoHeaderSection.isEmpty() && !mFolderSection.isEmpty()) { 153
154 boolean isHeaderPresent =
155 !mPromoHeaderSection.isEmpty() || !mOfflineStorageSection.isEmpt y();
156
157 if (isHeaderPresent && !mFolderSection.isEmpty()) {
145 mFolderDividerSection.add(null); 158 mFolderDividerSection.add(null);
146 } 159 }
147 if ((!mPromoHeaderSection.isEmpty() || !mFolderSection.isEmpty()) 160 if ((isHeaderPresent || !mFolderSection.isEmpty()) && !mBookmarkSection. isEmpty()) {
148 && !mBookmarkSection.isEmpty()) {
149 mBookmarkDividerSection.add(null); 161 mBookmarkDividerSection.add(null);
150 } 162 }
151 } 163 }
152 164
153 private void removeItem(int position) { 165 private void removeItem(int position) {
154 List<?> section = getSection(position); 166 List<?> section = getSection(position);
155 assert section == mFolderSection || section == mBookmarkSection; 167 assert section == mFolderSection || section == mBookmarkSection;
156 section.remove(toSectionPosition(position)); 168 section.remove(toSectionPosition(position));
157 notifyItemRemoved(position); 169 notifyItemRemoved(position);
158 } 170 }
159 171
160 // RecyclerView.Adapter implementation. 172 // RecyclerView.Adapter implementation.
161 173
162 @Override 174 @Override
163 public int getItemCount() { 175 public int getItemCount() {
164 int count = 0; 176 int count = 0;
165 for (List<?> section : mSections) { 177 for (List<?> section : mSections) {
166 count += section.size(); 178 count += section.size();
167 } 179 }
168 return count; 180 return count;
169 } 181 }
170 182
171 @Override 183 @Override
172 public int getItemViewType(int position) { 184 public int getItemViewType(int position) {
173 List<?> section = getSection(position); 185 List<?> section = getSection(position);
174 186
175 if (section == mPromoHeaderSection) { 187 if (section == mPromoHeaderSection) {
176 return PROMO_HEADER_VIEW; 188 return PROMO_HEADER_VIEW;
189 } else if (section == mOfflineStorageSection) {
190 return OFFLINE_PAGES_STORAGE_VIEW;
177 } else if (section == mFolderDividerSection 191 } else if (section == mFolderDividerSection
178 || section == mBookmarkDividerSection) { 192 || section == mBookmarkDividerSection) {
179 return DIVIDER_VIEW; 193 return DIVIDER_VIEW;
180 } else if (section == mFolderSection) { 194 } else if (section == mFolderSection) {
181 return FOLDER_VIEW; 195 return FOLDER_VIEW;
182 } else if (section == mBookmarkSection) { 196 } else if (section == mBookmarkSection) {
183 return BOOKMARK_VIEW; 197 return BOOKMARK_VIEW;
184 } 198 }
185 199
186 assert false : "Invalid position requested"; 200 assert false : "Invalid position requested";
187 return -1; 201 return -1;
188 } 202 }
189 203
190 @Override 204 @Override
191 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 205 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
192 switch (viewType) { 206 switch (viewType) {
193 case PROMO_HEADER_VIEW: 207 case PROMO_HEADER_VIEW:
194 return mPromoHeaderManager.createHolder(parent); 208 return mPromoHeaderManager.createHolder(parent);
209 case OFFLINE_PAGES_STORAGE_VIEW:
210 return mOfflineStorageHeader.createHolder(parent);
195 case DIVIDER_VIEW: 211 case DIVIDER_VIEW:
196 return new ViewHolder(LayoutInflater.from(parent.getContext()).i nflate( 212 return new ViewHolder(LayoutInflater.from(parent.getContext()).i nflate(
197 R.layout.eb_divider, parent, false)) {}; 213 R.layout.eb_divider, parent, false)) {};
198 case FOLDER_VIEW: 214 case FOLDER_VIEW:
199 EnhancedBookmarkFolderRow folder = (EnhancedBookmarkFolderRow) L ayoutInflater 215 EnhancedBookmarkFolderRow folder = (EnhancedBookmarkFolderRow) L ayoutInflater
200 .from(parent.getContext()).inflate(R.layout.eb_folder_ro w, parent, false); 216 .from(parent.getContext()).inflate(R.layout.eb_folder_ro w, parent, false);
201 folder.onEnhancedBookmarkDelegateInitialized(mDelegate); 217 folder.onEnhancedBookmarkDelegateInitialized(mDelegate);
202 return new ItemViewHolder(folder); 218 return new ItemViewHolder(folder);
203 case BOOKMARK_VIEW: 219 case BOOKMARK_VIEW:
204 EnhancedBookmarkBookmarkRow item = (EnhancedBookmarkBookmarkRow) LayoutInflater 220 EnhancedBookmarkBookmarkRow item = (EnhancedBookmarkBookmarkRow) LayoutInflater
205 .from(parent.getContext()).inflate(R.layout.eb_bookmark_ row, parent, false); 221 .from(parent.getContext()).inflate(R.layout.eb_bookmark_ row, parent, false);
206 item.onEnhancedBookmarkDelegateInitialized(mDelegate); 222 item.onEnhancedBookmarkDelegateInitialized(mDelegate);
207 return new ItemViewHolder(item); 223 return new ItemViewHolder(item);
208 default: 224 default:
209 assert false; 225 assert false;
210 return null; 226 return null;
211 } 227 }
212 } 228 }
213 229
214 @SuppressFBWarnings("BC_UNCONFIRMED_CAST") 230 @SuppressFBWarnings("BC_UNCONFIRMED_CAST")
215 @Override 231 @Override
216 public void onBindViewHolder(ViewHolder holder, int position) { 232 public void onBindViewHolder(ViewHolder holder, int position) {
217 BookmarkId id = getItem(position); 233 BookmarkId id = getItem(position);
218 switch (getItemViewType(position)) { 234 switch (getItemViewType(position)) {
219 case PROMO_HEADER_VIEW: 235 case PROMO_HEADER_VIEW:
236 case OFFLINE_PAGES_STORAGE_VIEW:
220 case DIVIDER_VIEW: 237 case DIVIDER_VIEW:
221 break; 238 break;
222 case FOLDER_VIEW: 239 case FOLDER_VIEW:
223 ((EnhancedBookmarkRow) holder.itemView).setBookmarkId(id); 240 ((EnhancedBookmarkRow) holder.itemView).setBookmarkId(id);
224 break; 241 break;
225 case BOOKMARK_VIEW: 242 case BOOKMARK_VIEW:
226 ((EnhancedBookmarkRow) holder.itemView).setBookmarkId(id); 243 ((EnhancedBookmarkRow) holder.itemView).setBookmarkId(id);
227 break; 244 break;
228 default: 245 default:
229 assert false : "View type not supported!"; 246 assert false : "View type not supported!";
230 } 247 }
231 } 248 }
232 249
233 // PromoHeaderShowingChangeListener implementation. 250 // PromoHeaderShowingChangeListener implementation.
234 251
235 @Override 252 @Override
236 public void onPromoHeaderShowingChanged(boolean isShowing) { 253 public void onPromoHeaderShowingChanged(boolean isShowing) {
237 mPromoHeaderSection.clear(); 254 if (mDelegate.getCurrentState() != UIState.STATE_ALL_BOOKMARKS
238 if (isShowing) mPromoHeaderSection.add(null); 255 && mDelegate.getCurrentState() != UIState.STATE_FOLDER) {
256 return;
257 }
239 258
259 updateHeader();
240 updateDividerSections(); 260 updateDividerSections();
241 notifyDataSetChanged(); 261 notifyDataSetChanged();
242 } 262 }
243 263
244 // EnhancedBookmarkUIObserver implementations. 264 // EnhancedBookmarkUIObserver implementations.
245 265
246 @Override 266 @Override
247 public void onEnhancedBookmarkDelegateInitialized(EnhancedBookmarkDelegate d elegate) { 267 public void onEnhancedBookmarkDelegateInitialized(EnhancedBookmarkDelegate d elegate) {
248 mDelegate = delegate; 268 mDelegate = delegate;
249 mDelegate.addUIObserver(this); 269 mDelegate.addUIObserver(this);
250 mDelegate.getModel().addObserver(mBookmarkModelObserver); 270 mDelegate.getModel().addObserver(mBookmarkModelObserver);
251 mPromoHeaderManager = new EnhancedBookmarkPromoHeader(mContext, this); 271 mPromoHeaderManager = new EnhancedBookmarkPromoHeader(mContext, this);
252 if (mPromoHeaderManager.shouldShow()) mPromoHeaderSection.add(null); 272 OfflinePageBridge offlinePageBridge = mDelegate.getModel().getOfflinePag eBridge();
273 if (offlinePageBridge != null) {
274 mOfflineStorageHeader = new OfflinePageStorageSpaceHeader(
275 mContext, offlinePageBridge, new OfflinePageFreeUpSpaceCallb ack() {
276 @Override
277 public void onFreeUpSpaceDone() {
278 refreshOfflinePagesFilterView();
279 }
253 280
254 updateDividerSections(); 281 @Override
282 public void onFreeUpSpaceCancelled() {
283 // No need to refresh, as result outcome should be t he same here.
284 }
285 });
286 }
255 } 287 }
256 288
257 @Override 289 @Override
258 public void onDestroy() { 290 public void onDestroy() {
259 mDelegate.removeUIObserver(this); 291 mDelegate.removeUIObserver(this);
260 mDelegate.getModel().removeObserver(mBookmarkModelObserver); 292 mDelegate.getModel().removeObserver(mBookmarkModelObserver);
261 mPromoHeaderManager.destroy(); 293 mPromoHeaderManager.destroy();
262 } 294 }
263 295
264 @Override 296 @Override
(...skipping 14 matching lines...) Expand all
279 } 311 }
280 312
281 @Override 313 @Override
282 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {} 314 public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {}
283 315
284 private static class ItemViewHolder extends RecyclerView.ViewHolder { 316 private static class ItemViewHolder extends RecyclerView.ViewHolder {
285 private ItemViewHolder(View view) { 317 private ItemViewHolder(View view) {
286 super(view); 318 super(view);
287 } 319 }
288 } 320 }
321
322 private void updateHeader() {
323 int currentUIState = mDelegate.getCurrentState();
324 if (currentUIState == UIState.STATE_LOADING) return;
325
326 mPromoHeaderSection.clear();
327 mOfflineStorageSection.clear();
328 if (currentUIState == UIState.STATE_FILTER) {
329 if (mOfflineStorageHeader != null && mOfflineStorageHeader.shouldSho w()) {
330 mOfflineStorageSection.add(null);
331 }
332 } else {
333 assert currentUIState == UIState.STATE_ALL_BOOKMARKS
334 || currentUIState == UIState.STATE_FOLDER : "Unexpected UI s tate";
335 if (mPromoHeaderManager.shouldShow()) {
336 mPromoHeaderSection.add(null);
337 }
338 }
339 }
340
341 private void refreshOfflinePagesFilterView() {
342 if (mDelegate.getCurrentState() != UIState.STATE_FILTER) return;
343 setBookmarks(null,
344 mDelegate.getModel().getBookmarkIDsByFilter(EnhancedBookmarkFilt er.OFFLINE_PAGES));
345 }
289 } 346 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698