Android Open Source - RssReader Rss Article Activity






From Project

Back to project page RssReader.

License

The source code is released under:

GNU General Public License

If you think the Android project RssReader 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

/**
 * RssReader/*w w w.j a va  2s  .  co  m*/
 *
 * Copyright (c) 2013-2014 teejoe
 *
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 *
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 *     You should have received a copy of the GNU General Public License
 *     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.m2x.rssreader.activity;

import org.m2x.rssreader.MainApplication;
import org.m2x.rssreader.R;
import org.m2x.rssreader.adapter.RssArticlePagerAdapter;
import org.m2x.rssreader.provider.FeedData.EntryColumns;
import org.m2x.rssreader.util.UiUtils;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.util.Log;

import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;

/**
 * The RSS article Activity. Shows the RSS articles.
 * @author teejoe (mtjm2x@gmail.com)
 *
 */
public class RssArticleActivity extends SherlockFragmentActivity 
    implements ViewPager.OnPageChangeListener {
  
  private static final String TAG = "RssArticleActivity";

  public static final String EXTRA_ENTRY_IDS = "entry_ids";
  public static final String EXTRA_INIT_POS = "initial_pos";
  
  private long[] mEntryIds;  // The list of RSS entry IDs.
    
  private ViewPager mPager;  // The ViewPager to show RSS articles.
  
  private RssArticlePagerAdapter mAdapter;  // Adapter for the ViewPager.
  
  private MenuItem mMenuStar;    // The star menu, used to change the icon of action star.
  
  private int mInitPos;  // The initial position of the ViewPager.

  @Override
    protected void onCreate(Bundle savedInstanceState) {
    UiUtils.setPreferenceTheme(this);
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.activity_rss_article);
        
        setSupportProgressBarIndeterminateVisibility(true);
        
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        
        // Get the RSS entry ids.
        mPager = (ViewPager) findViewById(R.id.pager);
        mEntryIds = getIntent().getLongArrayExtra(EXTRA_ENTRY_IDS);
        if (mEntryIds == null) {
          Log.e(TAG, "Entry id extra is null!");
        }
        
        // Set the adapter.
        mAdapter = new RssArticlePagerAdapter(getSupportFragmentManager(), mEntryIds);
        mPager.setAdapter(mAdapter);
        mPager.setOnPageChangeListener(this);

        // Get the initial position of pager.
        mInitPos = getIntent().getIntExtra(EXTRA_INIT_POS, -1);
        if (mInitPos != -1) {
          mPager.setCurrentItem(mInitPos);
        }
    }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.article_activity_theme_dark, menu);
    
    // Set the star icon of the action bar.
    mMenuStar = menu.findItem(R.id.star);
    if (isEntryStared(mEntryIds[mInitPos])) {
      mMenuStar.setIcon(R.drawable.ic_action_important);
    } else {
      mMenuStar.setIcon(R.drawable.ic_action_not_important);
    }
    
    return true;
  }
  
  @Override
  public boolean onOptionsItemSelected(MenuItem menuItem) {
      switch (menuItem.getItemId()) {
      case android.R.id.home:
          finish();
          break;
      case R.id.star:
        int position = mPager.getCurrentItem();
        boolean stared = isEntryStared(mEntryIds[position]);
        ContentValues values = new ContentValues();
        values.put(EntryColumns.IS_FAVORITE, !stared);
        MainApplication.getContext().getContentResolver().update(
            EntryColumns.CONTENT_URI(mEntryIds[position]), values, null, null);
        mMenuStar.setIcon(stared? R.drawable.ic_action_not_important: 
            R.drawable.ic_action_important);
        break;
      case R.id.menu:
        Intent intent = new Intent(this, PreferenceActivity.class);
        startActivity(intent);
        break;
      default:    
          return true;
      }
      
      return (super.onOptionsItemSelected(menuItem));
  }

  @Override
  public void onPageScrollStateChanged(int arg0) {
    return;
  }

  @Override
  public void onPageScrolled(int arg0, float arg1, int arg2) {
    return;
  }

  @Override
  public void onPageSelected(int position) {  
    ContentResolver cr = MainApplication.getContext().getContentResolver();
    
    // Set the RSS entry as read.
    ContentValues value = new ContentValues();
    value.put(EntryColumns.IS_READ, true);
    cr.update(EntryColumns.CONTENT_URI(mEntryIds[position]), value, null , null);
    
    // Update the star icon.
    if (mMenuStar != null) {  // mMenuStar could be null when OptionsMenu has not created yet.
      if (isEntryStared(mEntryIds[position])) {
        mMenuStar.setIcon(R.drawable.ic_action_important);
      } else {
        mMenuStar.setIcon(R.drawable.ic_action_not_important);
      }
    }

  }
  
  /** Tell if the entry is stared by its ID. */
  private boolean isEntryStared(long entryId) {
    ContentResolver cr = MainApplication.getContext().getContentResolver();
    Cursor cursor = cr.query(EntryColumns.CONTENT_URI(entryId), 
        new String[]{EntryColumns.IS_FAVORITE}, null, null, null);
    
    if (cursor.moveToFirst() && 
        cursor.getInt(cursor.getColumnIndex(EntryColumns.IS_FAVORITE)) == 1) {
      cursor.close();
      return true;
    }
      
    return false;
  }
}




Java Source Code List

org.m2x.rssreader.Constants.java
org.m2x.rssreader.MainApplication.java
org.m2x.rssreader.activity.AddChannelActivity.java
org.m2x.rssreader.activity.EditChannelActivity.java
org.m2x.rssreader.activity.MainActivity.java
org.m2x.rssreader.activity.PreferenceActivity.java
org.m2x.rssreader.activity.RssArticleActivity.java
org.m2x.rssreader.activity.RssItemListActivity.java
org.m2x.rssreader.adapter.ChannelListAdapter.java
org.m2x.rssreader.adapter.RssArticlePagerAdapter.java
org.m2x.rssreader.adapter.RssItemListAdapter.java
org.m2x.rssreader.fragment.ChannelListFragment.java
org.m2x.rssreader.fragment.RssArticleFragment.java
org.m2x.rssreader.fragment.RssItemListFragment.java
org.m2x.rssreader.provider.DatabaseHelper.java
org.m2x.rssreader.provider.FeedDataProvider.java
org.m2x.rssreader.provider.FeedData.java
org.m2x.rssreader.service.FetcherService.java
org.m2x.rssreader.service.RefreshService.java
org.m2x.rssreader.util.HtmlUtils.java
org.m2x.rssreader.util.NetworkUtils.java
org.m2x.rssreader.util.OPML.java
org.m2x.rssreader.util.PrefUtils.java
org.m2x.rssreader.util.RssAtomParser.java
org.m2x.rssreader.util.StringUtils.java
org.m2x.rssreader.util.UiUtils.java
org.m2x.rssreader.view.RssArticleView.java