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

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

Powered by Google App Engine
This is Rietveld 408576698