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.Map; import java.util.Random; import org.carelife.creader.bean.BookBasicBean; import org.carelife.creader.bean.ChapterBasicBean; 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.ui.adapter.DetailGridAdapter; import org.carelife.creader.util.AsynImageLoaderUtil; import org.carelife.creader.util.DownloadUtil; import org.carelife.creader.util.FileUtil; import org.carelife.creader.util.ToastUtil; import org.carelife.creader.util.UpdateUtil; import org.carelife.creader.util.XmlUtil; import org.carelife.creader.R; import android.app.ActionBar; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.DialogInterface.OnKeyListener; import android.content.SharedPreferences.Editor; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class BookDetail extends Activity { private final String TAG = "BookDetal"; private TextView title2; private TextView author; private TextView type; private TextView status; private TextView description; private ImageView cover; private Button reader; private ImageView catalogue; private ImageView span; private boolean isSpan = true, CancelFlag = false; private String desc, book_name, author_name, search_book_name, temp_type, pic_url; private BookDao bookdao; private BookBasicBean book; private DownloadUtil DU; private SharedPreferences sp; private Editor edit; private SearchData sData, temp_result; private List<Map<String, String>> list_data; private GridView lovers; private Bitmap bitmap; private LinearLayout progressbar; private ProgressDialog dialog; private List<ChapterBasicBean> temp_list = new ArrayList<ChapterBasicBean>(); private String temp_tc_url; private String book_name_web_view; private String author_name_web_view; private int b1, b2, b3; HashMap<String, String> book_cates = new HashMap<String, String>(); List<RankData> rlist; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case -2: progressbar.setVisibility(View.GONE); lovers.setVisibility(View.VISIBLE); ToastUtil.getInstance(BookDetail.this).setText("�ף��������粻���������Ժ����԰�..."); break; case -1: dialog.dismiss(); ToastUtil.getInstance(BookDetail.this).setText("�ף��������粻���������Ժ����԰�..."); break; case 0: if (CancelFlag) { CancelFlag = false; break; } edit.putString("book_name_chapter", book_name); edit.putString("author_name_chapter", author_name); edit.putBoolean("force_fromweb_chapter", true); edit.putBoolean("detail_goto_chapter", true); edit.commit(); Intent intent = new Intent(BookDetail.this, SogouNovelActivity.class); intent.putExtra("book_info", book); dialog.dismiss(); BookDetail.this.startActivity(intent); break; case 1: HashMap<String, Object> datas = null; if (msg.obj != null) { datas = (HashMap<String, Object>) msg.obj; } else { handler.sendEmptyMessage(-2); break; } rlist = (List<RankData>) datas.get("rankitem"); int size = rlist.size(); list_data = new ArrayList<Map<String, String>>(); Random random = new Random(); b1 = random.nextInt(size); b2 = random.nextInt(size); b3 = random.nextInt(size); for (int i = 0; i < 3; i++) { int j = 0; switch (i) { case 0: j = b1; break; case 1: j = b2; break; case 2: j = b3; break; default: break; } HashMap<String, String> data = new HashMap<String, String>(); data.put("title", rlist.get(j).getbookname()); data.put("pic", rlist.get(j).getpicurl()); list_data.add(data); } lovers.setAdapter(new DetailGridAdapter(BookDetail.this, list_data)); lovers.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { if (position >= list_data.size()) { ToastUtil.getInstance(BookDetail.this).setText( "�׵���û�˰�"); return; } int j = 0; switch (position) { case 0: j = b1; break; case 1: j = b2; break; case 2: j = b3; break; default: break; } search_book_name = rlist.get(j).getbookname(); if(!dialog.isShowing()){ dialog.show(); } new Thread() { public void run() { SearchData temp_sd = XmlUtil .getSearchOneXML(search_book_name); Message message = handler.obtainMessage(2, temp_sd); handler.sendMessage(message); } }.start(); // list_data.get(arg2); } }); progressbar.setVisibility(View.GONE); lovers.setVisibility(View.VISIBLE); break; case 2: // �������¼� if (msg.obj != null) { temp_result = (SearchData) msg.obj; if (temp_result.getloc() != 1) { temp_tc_url = temp_result.geturl(); try { temp_tc_url = URLEncoder.encode(temp_tc_url, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } book_name_web_view = temp_result.getbookname(); author_name_web_view = temp_result.getauthor_name(); new Thread() { public void run() { try { SaveBitmap(AsynImageLoaderUtil .loadImageFromNet_throw(temp_result .getpicurl()),book_name_web_view,author_name_web_view); book = new BookBasicBean(book_name_web_view, author_name_web_view, 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_web_view) + "_" + FileUtil.cheak_string(author_name_web_view) + "/" + UrlHelper.cover_string); bookdao.add_book(book); String temp_max_chapter = UpdateUtil.cheak_maxchaptercode(BookDetail.this, book_name_web_view); book.setMax_md5(temp_max_chapter); } catch (IOException e) { book = new BookBasicBean(book_name_web_view, author_name_web_view, null); book.setIs_loc(temp_result.getloc()); book.setChapter_md5(UrlHelper.tc_url + temp_tc_url); bookdao.add_book(book); String temp_max_chapter = UpdateUtil.cheak_maxchaptercode(BookDetail.this, book_name_web_view); book.setMax_md5(temp_max_chapter); e.printStackTrace(); } finally { bookdao.insert_maxmd5(book); } } }.start(); if(dialog.isShowing()){ dialog.dismiss(); } Intent intent2 = new Intent(BookDetail.this, WebViewActivity.class); intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent2.putExtra("url", UrlHelper.tc_url + temp_tc_url); BookDetail.this.startActivity(intent2); } else { initData(temp_result); } }else{ if(dialog.isShowing()){ dialog.dismiss(); } ToastUtil.getInstance(BookDetail.this).setText("�ף��������粻���������Ժ����԰�..."); } break; case 3: if (bitmap != null) { cover.setImageBitmap(bitmap); } else { cover.setImageResource(R.drawable.book_default); } break; } } }; private ActionBar actionBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bookdetail); sp = getSharedPreferences("sogounovel", MODE_PRIVATE); edit = sp.edit(); for (int i = 0; i < UrlHelper.book_cate[0].length; i++) { book_cates.put(UrlHelper.book_cate[0][i], UrlHelper.goto_data[0][i]); } sData = (SearchData) this.getIntent().getParcelableExtra("SearchData"); if (sData == null) { Log.e(TAG, "search data is null!!!"); this.finish(); } actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setTitle(sData.getbookname()); DU = new DownloadUtil(); bookdao = BookDao.getInstance(this); title2 = (TextView) findViewById(R.id.detail_book_title2); author = (TextView) findViewById(R.id.detail_book_author); type = (TextView) findViewById(R.id.detail_book_type); status = (TextView) findViewById(R.id.detail_book_status); description = (TextView) findViewById(R.id.detail_book_description2); cover = (ImageView) findViewById(R.id.detail_book_pic); reader = (Button) findViewById(R.id.detail_start_read); catalogue = (ImageView) findViewById(R.id.detail_catalogue); span = (ImageView) findViewById(R.id.detail_span); lovers = (GridView) findViewById(R.id.detail_other_gridview); progressbar = (LinearLayout) findViewById(R.id.bookdetail_progressbar); dialog = new ProgressDialog(BookDetail.this); dialog.setTitle("��ȡ����"); dialog.setMessage("���ݼ����У����Ժ󡣡���"); dialog.setCancelable(true); dialog.setOnKeyListener(new OnKeyListener() { public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { CancelFlag = true; return false; } return false; } }); initData(sData); description.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isSpan) { span.setBackgroundResource(R.drawable.span); if (desc.length() <= 70) { description.setText(desc); } else { description.setText(desc.substring(0, 67) + "..."); } isSpan = true; } else { span.setBackgroundResource(R.drawable.shrink); description.setText(desc); isSpan = false; } } }); span.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (!isSpan) { span.setBackgroundResource(R.drawable.span); if (desc.length() <= 70) { description.setText(desc); } else { description.setText(desc.substring(0, 67) + "..."); } isSpan = true; } else { span.setBackgroundResource(R.drawable.shrink); description.setText(desc); isSpan = false; } } }); reader.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.show(); SaveBitmap(bitmap,book_name,author_name); new Thread() { public void run() { try { BookBasicBean book_temp = bookdao.getBook(book_name, author_name); if(book_temp != null){ book = book_temp; bookdao.add_book(book); handler.sendEmptyMessage(0); return; } temp_list = DU.getChapterList_For_Beginread( book_name, author_name, BookDetail.this); if (temp_list != null && temp_list.size() != 0) { book.setChapter_index(1); book.setChapter_md5(temp_list.get(0) .getChapter_md5()); book.setMax_md5(temp_list.get(temp_list.size() - 1 ).getChapter_md5()); bookdao.add_book(book); handler.sendEmptyMessage(0); } } catch (Exception e) { handler.sendEmptyMessage(-1); e.printStackTrace(); } } }.start(); } }); catalogue.setOnClickListener(new OnClickListener() { public void onClick(View v) { edit.putString("book_name_chapter", book_name); edit.putString("author_name_chapter", author_name); edit.putBoolean("force_fromweb_chapter", true); edit.putBoolean("detail_goto_chapter", true); edit.commit(); SaveBitmap(bitmap,book_name,author_name); Intent intent = new Intent(BookDetail.this, ChapterList.class); BookDetail.this.startActivity(intent); } }); } private void initData(SearchData temp_search) { progressbar.setVisibility(View.VISIBLE); lovers.setVisibility(View.INVISIBLE); bitmap = null; book_name = temp_search.getbookname(); author_name = temp_search.getauthor_name(); title2.setText(book_name); author.setText("���ߣ�" + author_name); type.setText("���ͣ�" + temp_search.gettype()); status.setText("״̬��[����]"); if (temp_search.getstatus() == 1) { status.setText("״̬��[ȫ��]"); } book = new BookBasicBean(); book.setBook_name(book_name); book.setAuthor_name(author_name); book.setIs_loc(temp_search.getloc()); book.setBegin_buf(0); book.setPic_path(FileUtil.new_dir + FileUtil.cheak_string(book_name) + "_" + FileUtil.cheak_string(author_name) + "/" + UrlHelper.cover_string); desc = temp_search.getdesc(); if (desc.length() <= 70) { description.setText(desc); span.setVisibility(View.GONE); } else { description.setText(desc.substring(0, 67) + "..."); } pic_url = temp_search.getpicurl(); temp_type = temp_search.gettype(); new Thread() { public void run() { bitmap = AsynImageLoaderUtil.loadImageFromNet(pic_url); handler.sendEmptyMessage(3); HashMap<String, Object> datas; try { datas = XmlUtil.getXML(UrlHelper.rankurl, book_cates.get(temp_type), "&length=" + 20, 1); Message message = handler.obtainMessage(1, datas); handler.sendMessage(message); } catch (IOException e) { handler.sendEmptyMessage(-2); e.printStackTrace(); } } }.start(); if(dialog.isShowing()){ dialog.dismiss(); } } public void SaveBitmap(Bitmap bmp , String book_name_bm,String author_name_bm) { // 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_bm) + "_" + FileUtil.cheak_string(author_name_bm)); 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() + "/" + UrlHelper.cover_string); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: BookDetail.this.finish(); break; default: return super.onOptionsItemSelected(item); } return true; } }