// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.bookmarks;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
import org.chromium.components.bookmarks.BookmarkId;
import java.util.List;
/**
* Main drawer list view of bookmark UI. It is responsible for presenting different viewing
* modes and let users to choose.
*/
@SuppressLint("Instantiatable")
class BookmarkDrawerListView extends ListView implements BookmarkUIObserver {
private BookmarkDelegate mDelegate;
private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObserver() {
@Override
public void bookmarkModelChanged() {
mDelegate.notifyStateChange(BookmarkDrawerListView.this);
}
};
private final BookmarkDrawerListViewAdapter mAdapter =
new BookmarkDrawerListViewAdapter();
public BookmarkDrawerListView(final Context context, AttributeSet attrs) {
super(context, attrs);
setAdapter(mAdapter);
setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mDelegate.closeDrawer();
BookmarkDrawerListViewAdapter.Item item =
(BookmarkDrawerListViewAdapter.Item) mAdapter.getItem(position);
switch (item.mType) {
case BookmarkDrawerListViewAdapter.TYPE_FOLDER:
mDelegate.openFolder(item.mFolderId);
break;
default:
assert false;
}
}
});
}
void showLoadingUi() {
mAdapter.clear();
mAdapter.notifyDataSetChanged();
clearChoices();
}
// BookmarkUIObserver implementations.
@Override
public void onBookmarkDelegateInitialized(BookmarkDelegate delegate) {
mDelegate = delegate;
delegate.getModel().addObserver(mBookmarkModelObserver);
mAdapter.setBookmarkUIDelegate(delegate);
delegate.addUIObserver(this);
}
@Override
public void onDestroy() {
mDelegate.getModel().removeObserver(mBookmarkModelObserver);
mDelegate.removeUIObserver(this);
}
@Override
public void onFolderStateSet(BookmarkId folder) {
mAdapter.updateList();
setItemChecked(mAdapter.getItemPosition(BookmarkUIState.STATE_FOLDER, folder),
true);
}
@Override
public void onSelectionStateChange(List<BookmarkId> selectedBookmarks) {
}
}