package org.carelife.creader.ui.activity; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; import org.carelife.creader.bean.BookBasicBean; import org.carelife.creader.dao.RankData; import org.carelife.creader.dao.SearchData; import org.carelife.creader.dao.UrlHelper; import org.carelife.creader.db.BookDao; import org.carelife.creader.support.slidingmenu.SlidingMenu; import org.carelife.creader.support.slidingmenu.app.SlidingFragmentActivity; import org.carelife.creader.ui.adapter.CateRankListAdapter; import org.carelife.creader.ui.fragment.CateListFragment; import org.carelife.creader.util.FileUtil; import org.carelife.creader.util.ToastUtil; import org.carelife.creader.util.XmlUtil; import org.carelife.creader.util.AsynImageLoaderUtil; import org.carelife.creader.util.UpdateUtil; import org.carelife.creader.R; import android.app.ActionBar; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView.ScaleType; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; public class BookStoreListActivity extends SlidingFragmentActivity implements OnScrollListener { private Context context; private ListView rank_cate_list = null; private CateRankListAdapter list_Adapter; private View listaddview; private int mCount = 1;// �б��һҳ private int MAX_COUNT = 1;// �б����ҳ private SharedPreferences sp; private Editor edit; private int start = 0; private int list_once = 10; private HashMap<String, Object> xml_data; private List<RankData> data_list = new ArrayList<RankData>(); private String catestring; private int max_num; private ProgressDialog dialog; private LinearLayout progressbar; private SearchData book_searchresult, temp_result; private String book_name, author_name, temp_tc_url; private BookBasicBean book; private BookDao bookdao; private CateListFragment mFrag; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case -1: progressbar.setVisibility(View.GONE); ToastUtil.getInstance(context).setText("�ף��������粻���������Ժ����԰�..."); break; case 0: // ���μ��� if (null == xml_data) { ToastUtil.getInstance(context).setText( "�ף��������粻���������Ժ����԰�..."); progressbar.setVisibility(View.GONE); return; } data_list = (List<RankData>) xml_data.get("rankitem"); try { max_num = Integer.parseInt((String) xml_data.get("count")); } catch (Exception e) { // TODO: handle exception max_num = 1000; } MAX_COUNT = (int) Math.ceil((double) max_num / (double) list_once); progressbar.setVisibility(View.GONE); rank_cate_list.setVisibility(View.VISIBLE); LayoutInflater lay = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); listaddview = lay.inflate(R.layout.booklistmore, null); rank_cate_list.addFooterView(listaddview); list_Adapter = new CateRankListAdapter(context, data_list, handler, dialog); rank_cate_list.setAdapter(list_Adapter); rank_cate_list.setOnScrollListener(BookStoreListActivity.this); rank_cate_list .setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (arg2 >= data_list.size()) { ToastUtil.getInstance(context).setText( "�׵���û�˰�"); return; } book_name = data_list.get(arg2).getbookname(); dialog.show(); new Thread() { public void run() { book_searchresult = XmlUtil .getSearchOneXML(book_name); Message message = handler .obtainMessage(2, book_searchresult); handler.sendMessage(message); } }.start(); } }); if (MAX_COUNT == 1) { invisibleFooter(); } break; case 1: // ���� if (null == xml_data) { ToastUtil.getInstance(context).setText("û��������"); invisibleFooter(); return; } List<RankData> temp_list = (List<RankData>) xml_data .get("rankitem"); for (int j = 0; j < temp_list.size(); j++) { data_list.add(temp_list.get(j)); } mCount++; list_Adapter.notifyDataSetChanged(); rank_cate_list.invalidateViews(); // list_Adapter = new CateRankListAdapter(context, data_list, // handler); // rank_cate_list.setAdapter(list_Adapter); break; case 2: // �������¼� if (msg.obj != null) { temp_result = (SearchData) msg.obj; temp_tc_url = temp_result.geturl(); try { temp_tc_url = URLEncoder.encode(temp_tc_url, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (temp_result.getloc() != 1) { // �DZ��ش洢�鼮��� book_name = temp_result.getbookname(); author_name = temp_result.getauthor_name(); new Thread() { public void run() { try { SaveBitmap(AsynImageLoaderUtil .loadImageFromNet_throw(temp_result .getpicurl())); book = new BookBasicBean(book_name, author_name, null); book.setIs_loc(temp_result.getloc()); book.setChapter_md5(UrlHelper.tc_url + temp_tc_url); book.setPic_path(FileUtil.new_dir + FileUtil.cheak_string(book_name) + "_" + FileUtil .cheak_string(author_name) + "/" + UrlHelper.cover_string); bookdao.add_book(book); String temp_max_chapter = UpdateUtil .cheak_maxchaptercode(context, book_name); book.setMax_md5(temp_max_chapter); } catch (Exception e) { book = new BookBasicBean(book_name, author_name, null); book.setIs_loc(temp_result.getloc()); book.setChapter_md5(UrlHelper.tc_url + temp_tc_url); try { bookdao.add_book(book); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String temp_max_chapter = UpdateUtil .cheak_maxchaptercode(context, book_name); book.setMax_md5(temp_max_chapter); e.printStackTrace(); } finally { try { bookdao.insert_maxmd5(book); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); edit.putString("webview_book_name", book_name); edit.putString("webview_author_name", author_name); edit.putString("webview_url", UrlHelper.tc_url + temp_tc_url); // String temp_bookmark = null; // try { // temp_bookmark = bookdao.get_auto_bookmark( // book_name, author_name, 0); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // edit.putString("auto_mark_url", temp_bookmark); // edit.commit(); Intent intent = new Intent(context, WebViewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); dialog.dismiss(); context.startActivity(intent); } else { Intent intent = new Intent(context, BookDetail.class); intent.putExtra("SearchData", temp_result); dialog.dismiss(); context.startActivity(intent); } } else { dialog.dismiss(); ToastUtil.getInstance(context).setText( "�ף��������粻���������Ժ����԰�..."); } break; } // ����UI } }; private ActionBar actionBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = BookStoreListActivity.this; sp = context.getSharedPreferences("sogounovel", Context.MODE_PRIVATE); edit = sp.edit(); bookdao = BookDao.getInstance(context); // set the Behind View setBehindContentView(R.layout.menu_frame); FragmentTransaction t = this.getSupportFragmentManager() .beginTransaction(); mFrag = CateListFragment.newInstance(UrlHelper.book_cate[0], UrlHelper.goto_data[0]); t.replace(R.id.menu_frame, mFrag); t.commit(); // customize the SlidingMenu SlidingMenu sm = getSlidingMenu(); sm.setShadowWidthRes(R.dimen.shadow_width); sm.setShadowDrawable(R.drawable.shadow); sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); sm.setFadeDegree(0.35f); sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); setContentView(R.layout.rankcatelist); actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); SharedPreferences sp = BookStoreListActivity.this.getSharedPreferences( "sogounovel", Context.MODE_PRIVATE); actionBar.setTitle(sp.getString("catename", "����")); initView(); // getSupportActionBar().setDisplayHomeAsUpEnabled(true); } public void initView() { sp = context.getSharedPreferences("sogounovel", Context.MODE_PRIVATE); edit = sp.edit(); bookdao = BookDao.getInstance(context); dialog = new ProgressDialog(context); dialog.setTitle("������"); dialog.setMessage("���ݼ�����..."); progressbar = (LinearLayout) findViewById(R.id.rankcatelist_progressbar); progressbar.setVisibility(View.VISIBLE); catestring = sp.getString("caterankstring", "xuanhuan"); rank_cate_list = (ListView) findViewById(R.id.cate_rank_list); new Thread() { public void run() { try { xml_data = XmlUtil.getXML(catestring, start, list_once); handler.sendEmptyMessage(0); } catch (IOException e) { handler.sendEmptyMessage(-1); e.printStackTrace(); } } }.start(); indicator(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actionbar_menu_rankcate, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: toggle(); break; case R.id.menu_search: Intent intent = new Intent(BookStoreListActivity.this, SearchPage.class); BookStoreListActivity.this.startActivity(intent); break; case R.id.menu_sidebar: toggle(); break; default: return super.onOptionsItemSelected(item); } return true; } private void indicator() { RelativeLayout rl = (RelativeLayout) findViewById(R.id.rankcatelist_rl); if (0 == sp.getInt("hasIndicator3", 0)) { edit.putInt("hasIndicator3", 1); edit.commit(); final ImageView indicator3 = new ImageView(context); indicator3.setBackgroundResource(R.drawable.indicator_3); indicator3.setVisibility(View.VISIBLE); indicator3.setScaleType(ScaleType.FIT_XY); indicator3.setAdjustViewBounds(true); rl.addView(indicator3, new RelativeLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); indicator3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { indicator3.setVisibility(View.GONE); indicator3.setClickable(false); } }); } } private void invisibleFooter() { rank_cate_list.removeFooterView(listaddview); } /*-------------------- �������ز��� ------------------------------*/ private AsyncTask<Long, Void, Void> mTask; private void additionalReading() { if (mCount >= MAX_COUNT) { invisibleFooter(); return; } if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) { return; } mTask = new AsyncTask<Long, Void, Void>() { @Override protected Void doInBackground(Long[] params) { try { Thread.sleep(params[0]); } catch (Exception e) { e.printStackTrace(); } return null; }; protected void onPostExecute(Void result) { start += list_once; new Thread() { public void run() { try { xml_data = XmlUtil.getXML(catestring, start, list_once); handler.sendEmptyMessage(1); } catch (IOException e) { e.printStackTrace(); } } }.start(); }; // }.execute(); }.execute(Math.abs(new Random(System.currentTimeMillis()).nextLong() % 2000)); } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (totalItemCount == firstVisibleItem + visibleItemCount) { additionalReading(); } } public void onScrollStateChanged(AbsListView view, int scrollState) { } private void SaveBitmap(Bitmap bmp) { // Bitmap bitmap = Bitmap.createBitmap(800, 600, Config.ARGB_8888); // Canvas canvas = new Canvas(bitmap); // //���ر���ͼƬ // Bitmap bmps = BitmapFactory.decodeResource(getResources(), // R.drawable.playerbackground); // canvas.drawBitmap(bmps, 0, 0, null); // //����Ҫ����Ļ��� // canvas.drawBitmap(bmp, 10, 100, null); // //����ȫ��ͼ�� // canvas.save(Canvas.ALL_SAVE_FLAG); // canvas.restore(); // �洢·�� File file = new File(FileUtil.new_dir + FileUtil.cheak_string(book_name) + "_" + FileUtil.cheak_string(author_name)); if (!file.exists()) { file.mkdirs(); } File file_temp = new File(file.getPath() + "/" + UrlHelper.cover_string); if (!file_temp.exists()) { try { file_temp.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } try { FileOutputStream fileOutputStream = new FileOutputStream( file_temp.getPath()); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); fileOutputStream.close(); // System.out.println("saveBmp is here:"+file.getPath()+ "/" + // ConstData.cover_string); } catch (Exception e) { e.printStackTrace(); } } }