package com.qiwenge.android.fragments; import java.util.ArrayList; import java.util.List; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.LinearLayout; import android.widget.ListView; import com.baidu.mobad.feeds.BaiduNative; import com.baidu.mobad.feeds.NativeErrorCode; import com.baidu.mobad.feeds.NativeResponse; import com.baidu.mobad.feeds.RequestParameters; import com.liuguangqiang.framework.utils.Logs; import com.qiwenge.android.R; import com.qiwenge.android.adapters.BookShelfAdapter; import com.qiwenge.android.async.AsyncRemoveBook; import com.qiwenge.android.base.BaseFragment; import com.qiwenge.android.constant.MyActions; import com.qiwenge.android.entity.Book; import com.qiwenge.android.entity.BookUpdate; import com.qiwenge.android.ui.dialogs.MyDialog; import com.qiwenge.android.utils.BookShelfUtils; import com.qiwenge.android.utils.SkipUtils; import com.qiwenge.android.utils.StyleUtils; import com.qiwenge.android.utils.book.BookManager; import rx.Observable; import rx.Observer; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class BookshelfFragment extends BaseFragment { private SwipeRefreshLayout mSwipeLayout; private ListView lvBookShelf; private LinearLayout layoutEmpty; private List<Book> data = new ArrayList<>(); private BookShelfAdapter adapter; private BookShelfReceiver bookShelfReceiver; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_bookshelf, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initViews(); bookShelfReceiver = new BookShelfReceiver(); IntentFilter intentFilter = new IntentFilter(MyActions.UPDATE_BOOK_SHELF); getActivity().registerReceiver(bookShelfReceiver, intentFilter); testNativeAd(); } private void testNativeAd() { Logs.i("testNativeAd"); BaiduNative baiduNative = new BaiduNative(getActivity(), "2394443", new BaiduNative.BaiduNativeNetworkListener() { @Override public void onNativeLoad(List<NativeResponse> list) { Logs.i("onNativeLoad : " + list.toString()); } @Override public void onNativeFail(NativeErrorCode nativeErrorCode) { Logs.i("onNativeFail:" + nativeErrorCode.toString()); } }); RequestParameters requestParameters = new RequestParameters.Builder().keywords("彩票,理财") .confirmDownloading(true) .build(); baiduNative.makeRequest(requestParameters); } @Override public void onResume() { super.onResume(); getBooks(); } @Override public void onDestroy() { super.onDestroy(); if (bookShelfReceiver != null) { getActivity().unregisterReceiver(bookShelfReceiver); bookShelfReceiver = null; } } private void initViews() { layoutEmpty = (LinearLayout) getView().findViewById(R.id.layout_empty); layoutEmpty.setVisibility(View.GONE); mSwipeLayout = (SwipeRefreshLayout) getView().findViewById(R.id.swipe_container); StyleUtils.setColorSchemeResources(mSwipeLayout); adapter = new BookShelfAdapter(getActivity(), data); lvBookShelf = (ListView) getView().findViewById(R.id.lv_book_shelf); lvBookShelf.setAdapter(adapter); lvBookShelf.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position < data.size()) { Book book = data.get(position); SkipUtils.skipToReader(getActivity(), book); updateChapterTotal(book); } } }); mSwipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { getBooks(); } }); lvBookShelf.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { showBookDialog(data.get(position)); return true; } }); } private void updateChapterTotal(Book book) { if (book.updateArrival > 0) { book.hasUpdate = false; book.updateArrival = 0; BookShelfUtils.updateChapterTotal(getActivity(), book.getId(), book.chapter_total); adapter.notifyDataSetChanged(); } } private void showOrHideEmpty() { Logs.i("showOrHideEmpty"); if (data.isEmpty()) { layoutEmpty.setVisibility(View.VISIBLE); } else { layoutEmpty.setVisibility(View.GONE); } } private void showBookDialog(final Book book) { MyDialog myDialog = new MyDialog(getActivity(), book.title); String[] items = getResources().getStringArray(R.array.book_detail_action_titles); myDialog.setItems(items, new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: updateChapterTotal(book); SkipUtils.skipToBookDetail(getActivity(), book); break; case 1: deleteBook(book); break; } } }); myDialog.show(); } private void showUpdate(List<BookUpdate> updates) { Book book; BookUpdate bookUpdate; int shelfSize = data.size(); int updateSize = updates.size(); for (int i = 0; i < shelfSize; i++) { for (int j = 0; j < updateSize; j++) { book = data.get(i); bookUpdate = updates.get(j); if (book.getId().equals(bookUpdate.book_id)) { book.hasUpdate = bookUpdate.updated(); book.updateArrival = bookUpdate.arrival; book.chapter_total = bookUpdate.chapter_total; } } } adapter.notifyDataSetChanged(); } private void deleteBook(Book book) { new AsyncRemoveBook(getActivity(), null).execute(book); data.remove(book); adapter.notifyDataSetChanged(); showOrHideEmpty(); } private void getBooks() { Logs.i("getBooks"); Observable.create(new Observable.OnSubscribe<List<Book>>() { @Override public void call(Subscriber<? super List<Book>> subscriber) { subscriber.onNext(BookManager.getInstance().getAll()); subscriber.onCompleted(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<List<Book>>() { @Override public void onCompleted() { showOrHideEmpty(); mSwipeLayout.setRefreshing(false); } @Override public void onError(Throwable e) { } @Override public void onNext(List<Book> books) { if (books != null && !books.isEmpty()) { data.clear(); adapter.add(books); } } }); } public class BookShelfReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(MyActions.UPDATE_BOOK_SHELF)) { getBooks(); } } } }