Android Open Source - SimpleReader Item List Activity






From Project

Back to project page SimpleReader.

License

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.

Java Source Code

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();
  }
}




Java Source Code List

com.dreamteam.app.adapter.CategoryDetailAdapter.java
com.dreamteam.app.adapter.FeedCategoryAdapter.java
com.dreamteam.app.adapter.GridAdapter.java
com.dreamteam.app.adapter.GuideViewPagerAdapter.java
com.dreamteam.app.adapter.ItemListAdapter.java
com.dreamteam.app.adapter.MPagerAdapter.java
com.dreamteam.app.commons.AppConfig.java
com.dreamteam.app.commons.AppContext.java
com.dreamteam.app.commons.HtmlFilter.java
com.dreamteam.app.commons.IFlyHelper.java
com.dreamteam.app.commons.ItemListEntityParser.java
com.dreamteam.app.commons.SectionHelper.java
com.dreamteam.app.commons.SeriaHelper.java
com.dreamteam.app.commons.SkinManager.java
com.dreamteam.app.commons.UIHelper.java
com.dreamteam.app.config.Contants.java
com.dreamteam.app.db.DbManager.java
com.dreamteam.app.db.FavoItemDbHelper.java
com.dreamteam.app.db.FeedDBManager.java
com.dreamteam.app.db.provider.RSSFeedCategoryProvider.java
com.dreamteam.app.entity.FeedItem.java
com.dreamteam.app.entity.Feed.java
com.dreamteam.app.entity.ItemListEntity.java
com.dreamteam.app.entity.RSSFeedCategroy.java
com.dreamteam.app.entity.Section.java
com.dreamteam.app.img.FileCacheManager.java
com.dreamteam.app.img.FileCache.java
com.dreamteam.app.img.ICache.java
com.dreamteam.app.img.ImageLoadTask.java
com.dreamteam.app.img.ImageLoad.java
com.dreamteam.app.img.ImageLoader.java
com.dreamteam.app.img.MemoryCache.java
com.dreamteam.app.rss.Dates.java
com.dreamteam.app.rss.Integers.java
com.dreamteam.app.rss.MediaAttributes.java
com.dreamteam.app.rss.MediaEnclosure.java
com.dreamteam.app.rss.MediaThumbnail.java
com.dreamteam.app.rss.RSSBase.java
com.dreamteam.app.rss.RSSConfig.java
com.dreamteam.app.rss.RSSException.java
com.dreamteam.app.rss.RSSFault.java
com.dreamteam.app.rss.RSSFeed.java
com.dreamteam.app.rss.RSSHandler.java
com.dreamteam.app.rss.RSSItem.java
com.dreamteam.app.rss.RSSLoader.java
com.dreamteam.app.rss.RSSParserSPI.java
com.dreamteam.app.rss.RSSParser.java
com.dreamteam.app.rss.RSSReaderException.java
com.dreamteam.app.rss.RSSReader.java
com.dreamteam.app.rss.Resources.java
com.dreamteam.app.ui.About.java
com.dreamteam.app.ui.BaseActivity.java
com.dreamteam.app.ui.BaseTitledActivity.java
com.dreamteam.app.ui.CategoryDetailActivity.java
com.dreamteam.app.ui.ColorListActivity.java
com.dreamteam.app.ui.FavoriteItemList.java
com.dreamteam.app.ui.FeedCategoryActivity.java
com.dreamteam.app.ui.FeedbackUI.java
com.dreamteam.app.ui.GuideActivity.java
com.dreamteam.app.ui.ImageDialog.java
com.dreamteam.app.ui.ImagesBrowseActivity.java
com.dreamteam.app.ui.ItemDetailActivity.java
com.dreamteam.app.ui.ItemListActivity.java
com.dreamteam.app.ui.LocalImageBrowseActivity.java
com.dreamteam.app.ui.LoginDialog.java
com.dreamteam.app.ui.MainActivity.java
com.dreamteam.app.ui.Setting.java
com.dreamteam.app.ui.SplashActivity.java
com.dreamteam.app.ui.SwitchBgActivity.java
com.dreamteam.app.ui.WidgetProvider.java
com.dreamteam.app.ui.adapter.ColorListAdapter.java
com.dreamteam.app.utils.CategoryNameExchange.java
com.dreamteam.app.utils.DateUtils.java
com.dreamteam.app.utils.FileUtils.java
com.dreamteam.app.utils.HttpUtils.java
com.dreamteam.app.utils.ImageLoader.java
com.dreamteam.app.utils.ImageUtils.java
com.dreamteam.app.utils.Logger.java
com.dreamteam.app.utils.MD5.java
com.dreamteam.app.utils.StringUtils.java
com.dreamteam.app.wallpaper.ChildAdapter.java
com.dreamteam.app.wallpaper.GroupGridAdapter.java
com.dreamteam.app.wallpaper.ImageBean.java
com.dreamteam.app.wallpaper.MyImageView.java
com.dreamteam.app.wallpaper.NativeImageLoader.java
com.dreamteam.app.wallpaper.WallPaperManager.java
com.dreamteam.custom.ui.PathAnimations.java
com.dreamteam.custom.ui.PullToRefreshListView.java