Back to project page SimpleReader.
The source code is released under:
Apache License
If you think the Android project SimpleReader listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.dreamteam.app.ui; //from w w w . ja va 2 s. c om import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Toast; import com.dreamteam.app.adapter.ItemListAdapter; import com.dreamteam.app.commons.AppContext; import com.dreamteam.app.commons.HtmlFilter; import com.dreamteam.app.commons.IFlyHelper; import com.dreamteam.app.commons.ItemListEntityParser; import com.dreamteam.app.commons.SectionHelper; import com.dreamteam.app.commons.SeriaHelper; import com.dreamteam.app.commons.UIHelper; import com.dreamteam.app.entity.FeedItem; import com.dreamteam.app.entity.ItemListEntity; import com.dreamteam.custom.ui.PullToRefreshListView; import com.dreamteam.custom.ui.PullToRefreshListView.OnRefreshListener; import com.dreateam.app.ui.R; import com.iflytek.speech.SpeechConstant; import com.iflytek.speech.SpeechSynthesizer; import com.iflytek.speech.SynthesizerListener; public class ItemListActivity extends BaseTitledActivity { private PullToRefreshListView itemLv; private ItemListAdapter mAdapter; private SeriaHelper seriaHelper; private ArrayList<FeedItem> mItems = new ArrayList<FeedItem>(); private ArrayList<String> speechTextList = new ArrayList<String>(); private String sectionTitle; private String sectionUrl; private SpeechSynthesizer tts; private SynthesizerListener mTtsListener; private BroadcastReceiver mReceiver; // ???? private static final String START_WORDS = "??????"; private static int speechCount = 0; private boolean existSpeech = false;// ??tts public static final String ACTION_UPDATE_ITEM_LIST = "com.dreamteam.action.update_item_list"; private boolean isNight;// ?????? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); initTts(); initBroadeCast(); } private void initBroadeCast() { mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String link = intent.getStringExtra("link"); boolean isFavorite = intent.getBooleanExtra("is_favorite", false); for (FeedItem i : mItems) { if (i.getLink().equals(link)) { i.setFavorite(isFavorite); break; } } } }; IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_UPDATE_ITEM_LIST); registerReceiver(mReceiver, filter); } private void initTts() { tts = new SpeechSynthesizer(this, null); tts.setParameter(SpeechConstant.ENGINE_TYPE, "local"); tts.setParameter(SpeechSynthesizer.SPEED, "50"); tts.setParameter(SpeechSynthesizer.PITCH, "50"); mTtsListener = new SynthesizerListener.Stub() { @Override public void onSpeakResumed() throws RemoteException { } @Override public void onSpeakProgress(int arg0) throws RemoteException { } @Override public void onSpeakPaused() throws RemoteException { } @Override public void onSpeakBegin() throws RemoteException { } @Override public void onCompleted(int arg0) throws RemoteException { speechCount++; if (speechCount > speechTextList.size()) return; tts.startSpeaking(speechTextList.get(speechCount), mTtsListener); } @Override public void onBufferProgress(int arg0) throws RemoteException { } }; } private void initView() { UIHelper.initTheme(this); setView(R.layout.feed_item_list); setTitleText(R.string.feed_list); setRightButtonBackground(R.drawable.btn_play).setRightButtonListener( new OnClickListener() { @Override public void onClick(View v) { if (!IFlyHelper .checkSpeechServiceInstall(ItemListActivity.this)) { IFlyHelper .openDownloadDialog(ItemListActivity.this); return; } if (existSpeech) { tts.stopSpeaking(mTtsListener); existSpeech = false; return; } startSpeech(); existSpeech = true; Toast.makeText(ItemListActivity.this, "?????????", Toast.LENGTH_SHORT).show(); } }); setLeftButtonListener(new OnClickListener() { @Override public void onClick(View v) { ItemListActivity.this.finish(); } }); itemLv = (PullToRefreshListView) findViewById(R.id.fil_lv_feed_item); itemLv.setOnRefreshListener(new OnRefreshListener() { public void onRefresh() { if (!AppContext.isNetworkAvailable(ItemListActivity.this)) { itemLv.onRefreshComplete(); Toast.makeText(ItemListActivity.this, R.string.no_network, Toast.LENGTH_SHORT).show(); return; } new RefreshTask().execute(sectionUrl); } }); itemLv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); FeedItem item = mItems.get(position - 1); final String link = item.getLink(); // ????????? if (!item.isReaded()) { item.setReaded(true); mAdapter.notifyDataSetChanged(); new Thread() { @Override public void run() { SeriaHelper helper = SeriaHelper.newInstance(); File cache = SectionHelper.getSdCache(sectionUrl); ItemListEntity entity = new ItemListEntity(); for (FeedItem i : mItems) { if (i.getLink().equals(link)) { i.setReaded(true); } } entity.setItemList(mItems); helper.saveObject(entity, cache); } }.start(); } String title = item.getTitle(); String contentEncoded = item.getContent(); String pubdate = item.getPubdate(); boolean isFavorite = item.isFavorite(); String firstImgUrl = item.getFirstImageUrl(); if (contentEncoded != null && contentEncoded.length() != 0) { intent.putExtra("item_detail", contentEncoded); } intent.putExtra("section_title", sectionTitle); intent.putExtra("section_url", sectionUrl); intent.putExtra("title", title); intent.putExtra("pubdate", pubdate); intent.putExtra("link", link); intent.putExtra("is_favorite", isFavorite); intent.putExtra("first_img_url", firstImgUrl); intent.setClass(ItemListActivity.this, ItemDetailActivity.class); ItemListActivity.this.startActivity(intent); } }); } private void initData() { Intent intent = getIntent(); sectionTitle = intent.getStringExtra("section_title"); sectionUrl = intent.getStringExtra("url"); File file = SectionHelper.getSdCache(sectionUrl); if (file.exists()) { seriaHelper = SeriaHelper.newInstance(); ItemListEntity itemListEntity = (ItemListEntity) seriaHelper .readObject(file); mItems = itemListEntity.getItemList(); if (mItems != null) { mAdapter = new ItemListAdapter(this, mItems, isNight); itemLv.setAdapter(mAdapter); for (int i = 0, n = mItems.size(); i < n; i++) { FeedItem item = mItems.get(i); String input = item.getTitle() + item.getContent(); speechTextList.add(HtmlFilter.filterHtml(input)); } } } } private class RefreshTask extends AsyncTask<String, Integer, ItemListEntity> { @Override protected void onPostExecute(ItemListEntity result) { if (result == null) { itemLv.onRefreshComplete(); Toast.makeText(ItemListActivity.this, R.string.network_exception, Toast.LENGTH_SHORT).show(); return; } ArrayList<FeedItem> newItems = new ArrayList<FeedItem>(); File cache = SectionHelper.getSdCache(sectionUrl); SeriaHelper helper = SeriaHelper.newInstance(); ArrayList<FeedItem> items = result.getItemList(); ItemListEntity old = (ItemListEntity) helper.readObject(cache); String oldFirstDate = old.getFirstItem().getPubdate(); int newCount = 0; for (FeedItem i : items) { if (i.getPubdate().equals(oldFirstDate)) { itemLv.onRefreshComplete(); Toast.makeText(ItemListActivity.this, R.string.no_update, Toast.LENGTH_SHORT).show(); return; } newCount++; newItems.add(i); } helper.saveObject(result, cache); mAdapter.addItemsToHead(newItems); Toast.makeText(ItemListActivity.this, "???" + newCount + "???", Toast.LENGTH_SHORT).show(); itemLv.onRefreshComplete(); } @Override protected ItemListEntity doInBackground(String... params) { ItemListEntityParser parser = new ItemListEntityParser(); return parser.parse(params[0]); } } private void startSpeech() { DateFormat df = SimpleDateFormat.getTimeInstance(); String time = df.format(new Date()); String timeTip = "????" + time; tts.startSpeaking(START_WORDS + sectionTitle + "????" + timeTip + speechTextList.get(0), mTtsListener); } @Override protected void onDestroy() { tts.stopSpeaking(mTtsListener); tts.destory(); unregisterReceiver(mReceiver); super.onDestroy(); } }