package com.qiwenge.android.ui; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.GridView; import android.widget.RelativeLayout; import android.widget.TextView; import com.liuguangqiang.framework.utils.DisplayUtils; import com.liuguangqiang.framework.utils.Logs; import com.liuguangqiang.framework.utils.NetworkUtils; import com.liuguangqiang.framework.utils.ToastUtils; import com.qiwenge.android.R; import com.qiwenge.android.adapters.OfflineMenuAdapter; import com.qiwenge.android.entity.Book; import com.qiwenge.android.entity.Chapter; import com.qiwenge.android.entity.OfflineMenuItem; import com.qiwenge.android.utils.OfflineUtils; import com.qiwenge.android.utils.http.JHttpClient; import com.qiwenge.android.utils.http.JsonResponseHandler; import java.util.ArrayList; import java.util.List; /** * Created by Eric on 15/5/2. */ public class OfflineMenu extends RelativeLayout { private Book mBook; private Chapter mChapter; private TextView tvProgress; private GridView gvDownload; public OfflineMenu(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public void setBook(Book book) { mBook = book; } public void setChapter(Chapter chapter) { mChapter = chapter; } private void init(Context context) { setGravity(Gravity.CENTER_HORIZONTAL); addView(createGridView(context)); addView(createStartBtn(context)); } private GridView createGridView(Context context) { String[] titles = context.getResources().getStringArray(R.array.offline_items); final List<OfflineMenuItem> offlineList = new ArrayList<>(); OfflineMenuItem offline; for (String title : titles) { offline = new OfflineMenuItem(); offline.title = title; offlineList.add(offline); } gvDownload = new GridView(context); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(context, 56)); gvDownload.setLayoutParams(params); OfflineMenuAdapter adapter = new OfflineMenuAdapter(context, offlineList); gvDownload.setAdapter(adapter); gvDownload.setNumColumns(3); gvDownload.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (NetworkUtils.isAvailable(getContext())) { switch (position) { case 0: startDownload(50); break; case 1: startDownload(100); break; default: startDownload(mBook.chapter_total - mChapter.number); break; } } else { ToastUtils.show(getContext(), R.string.error_network); } } }); return gvDownload; } private TextView createStartBtn(Context context) { tvProgress = new TextView(context); tvProgress.setVisibility(GONE); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(context, 56)); tvProgress.setLayoutParams(params); tvProgress.setText(""); tvProgress.setGravity(Gravity.CENTER); tvProgress.setTextColor(context.getResources().getColor(R.color.white_p50)); tvProgress.setTextSize(12); return tvProgress; } /** * 更新下载进度 * * @param current */ private void updateProgress(int current) { tvProgress.setText(getContext().getString(R.string.format_downloading, current, display)); } /** * 需要下载的条数 */ private int count = 0; private int current = 0; private int display = 0; private void startDownload(int count) { gvDownload.setVisibility(GONE); tvProgress.setVisibility(VISIBLE); this.count = count; this.current = 0; this.display = count; if (mBook != null && mChapter != null) { OfflineUtils.createChapterFolder(mBook.id); download(mChapter.id); } } private void finishDownload() { gvDownload.setVisibility(VISIBLE); tvProgress.setVisibility(GONE); } private void download(final String chapterId) { String url = String.format("http://api.qiwenge.com/chapters/%s", chapterId); Logs.i("download:" + url); JHttpClient.get(url, null, new JsonResponseHandler<Chapter>(Chapter.class, false) { @Override public void onSuccess(final Chapter result) { if (result != null) { Logs.i("download:" + result.title); if (count > 0 && result.next != null) { download(result.next.getId()); } else { finishDownload(); } count--; current++; updateProgress(current); } } @Override public void onSuccess(String json) { super.onSuccess(json); OfflineUtils.saveChapter(mBook.id, chapterId, json); } @Override public void onFailure(String msg) { finishDownload(); } }); } }