Package com.substanceofcode.rssreader.presentation

Source Code of com.substanceofcode.rssreader.presentation.AllNewsList

/*
* AllNewsList.java
*
* Copyright (C) 2005-2006 Tommi Laukkanen
* http://www.substanceofcode.com
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*/

// Expand to define MIDP define
@DMIDPVERS@
// Expand to define itunes define
@DITUNESDEF@
// Expand to define logging define
@DLOGDEF@
// Expand to define test ui define
@DTESTUIDEF@

package com.substanceofcode.rssreader.presentation;

import java.util.Date;
import java.util.Vector;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Image;
// If not using the test UI define the J2ME UI's
//#ifndef DTESTUI
import javax.microedition.lcdui.List;
//#else
import com.substanceofcode.testlcdui.List;
//#endif
// If using the test UI define the Test UI's

import com.substanceofcode.rssreader.presentation.RssReaderMIDlet;

import com.substanceofcode.utils.CauseException;
import com.substanceofcode.utils.CauseMemoryException;
import com.substanceofcode.rssreader.businessentities.RssItunesFeed;
import com.substanceofcode.rssreader.businessentities.RssItunesItem;
import com.substanceofcode.rssreader.businessentities.RssShortItem;
import com.substanceofcode.rssreader.businessentities.RssFeedStore;
import com.substanceofcode.utils.SortUtil;
//#ifdef DLOGGING
import net.sf.jlogmicro.util.logging.Logger;
import net.sf.jlogmicro.util.logging.LogManager;
import net.sf.jlogmicro.util.logging.Level;
//#endif

/**
*
* @author Tommi Laukkanen
*/
final public class AllNewsList extends List
implements CommandListener, Runnable  {
   
    private RssReaderMIDlet m_midlet;
  private boolean     m_saveMemoryEnabled;  // Flag to show memory save enbabled
  private boolean     m_process = true;     // Flag to continue looping
    private boolean     m_select  = false;    // Select item from list.
    private boolean     m_markUnread = false;    // Mark unread item flag
    private boolean     m_updItem = false;    // Update item
    private boolean     m_sort      = false; // Process sort
    private boolean     m_sortByDate = false; // Sort by date
    private boolean     m_showAll = false// Show both read and unread.
    private boolean     m_showUnread = false// Show unread.
    private boolean     m_dateSort = false; // Sort by date, else by feed
    private boolean     m_sortUnread = false; // Sort unread items
    private boolean     m_needCleanup = false; // True if we're finished.
    private boolean     m_markUnreadItems;     // Mark unread items.
    private boolean     m_needWakeup = false;   // Flag to show need to wakeup
  //#ifdef DTESTUI
    private boolean     m_testNews = false;     // True if auto testing news.
  boolean m_newsNext = false; // Flag to control opening the next header
  boolean m_itemNext = false; // Flag to control opening the next item
  //#endif
  //#ifdef DTESTUI
  private int         m_newsIndex = -1; // Index in headers to auto test
  private int         m_newsLen = -1; // Length of headers
  //#endif
    private Image       m_unreadImage;
    private Image       m_readImage;
    private List m_bookmarkList;
    private RssFeedStore m_rssFeeds;
    private final static String TITLE = "River of News";
    private Command     m_openUnreadHdrCmd;    // The open header command
    private Command     m_sortUnreadItemsCmd;  // The sort unread items by date command
    private Command     m_sortReadItemsCmd;  // The sort read items by date command
    private Command     m_sortUnreadFeedsCmd;  // The sort unread items by feed command
    private Command     m_sortReadFeedsCmd;  // The sort read items by feed command
    private Command     m_sortAllDateCmd;  // The sort all items by date command
    private Command     m_sortAllFeedsCmd;  // The sort read items by feed command
    private Command     m_markReadCmd;      // Mark the item as read
    private Command     m_markUnReadCmd;    // Mark the item as unread
    private Command     m_backUnreadHdrCmd;    // The back to bookmark list command
  //#ifdef DTESTUI
  private Command     m_testNewsCmd;       // Tet UI rss news command
  //#endif
    private Vector      m_itemFeedsNames = new Vector();
    private Vector      m_allItems = new Vector();
    private Vector      m_unreadItems = new Vector();
    private Vector      m_readItems = new Vector();
    private RssItunesItem m_item;
    private RssShortItem m_shortItem;
    private RssItunesFeed m_feed;
  //#ifdef DLOGGING
    private Logger m_logger = Logger.getLogger("AllNewsList");
    private boolean m_fineLoggable = m_logger.isLoggable(Level.FINE);
    private boolean m_finerLoggable = m_logger.isLoggable(Level.FINER);
    private boolean m_finestLoggable = m_logger.isLoggable(Level.FINEST);
  //#endif
   
    /** Creates a new instance of AllNewsList
      unreadImage - if non-null, put image for unread items for all list. */
    public AllNewsList(final RssReaderMIDlet midlet,
             final List bookmarkList, final RssFeedStore rssFeeds,
             Image unreadImage,
             Image readImage) {

        //super(TITLE, List.IMPLICIT);
        super("Unread Headers", List.IMPLICIT);
    m_midlet = midlet;
    m_bookmarkList = bookmarkList;
    m_rssFeeds = rssFeeds;
    m_saveMemoryEnabled = rssFeeds.isSaveMemoryEnabled();
    m_unreadImage = unreadImage;
    m_readImage = readImage;
    //#ifdef DCLDCV11
    new Thread(this, "AllNewsList").start();
    //#else
    new Thread(this).start();
    //#endif
    }

    /** Initialize new RSS headers list */
    final public void initializeUnreadHhdrsList() {
    /* Open item */
    m_openUnreadHdrCmd  = UiUtil.getCmdRsc("cmd.op.i", Command.SCREEN, 1);
    /* Unread date sorted */
    m_sortUnreadItemsCmd = UiUtil.getCmdRsc("cmd.ud.s",
                       Command.SCREEN, 1);
    /* Read date sorted */
    m_sortReadItemsCmd = UiUtil.getCmdRsc("cmd.rd.s",
                       Command.SCREEN, 2);
    /* Unread feed sorted */
    m_sortUnreadFeedsCmd = UiUtil.getCmdRsc("cmd.uf.s",
                       Command.SCREEN, 3);
    /* Read feed sorted */
    m_sortReadFeedsCmd = UiUtil.getCmdRsc("cmd.rf.s",
                       Command.SCREEN, 4);
    /* All date sorted */
    m_sortAllDateCmd = UiUtil.getCmdRsc("cmd.ad.s",
                       Command.SCREEN, 5);
    /* All feed sorted */
    m_sortAllFeedsCmd = UiUtil.getCmdRsc("cmd.af.s",
                       Command.SCREEN, 6);
    /* Mark read */
    m_markReadCmd = UiUtil.getCmdRsc("cmd.mk.r", Command.SCREEN, 7);
    /* Mark unread */
    m_markUnReadCmd = UiUtil.getCmdRsc("cmd.mk.u", Command.SCREEN, 8);
    m_backUnreadHdrCmd  = UiUtil.getCmdRsc("cmd.back", Command.BACK, 9);
    //#ifdef DTESTUI
    /* Test news/items */
    m_testNewsCmd        = UiUtil.getCmdRsc("cmd.t.nw", Command.SCREEN, 10);
    //#endif
        super.addCommand(m_openUnreadHdrCmd);
        super.addCommand(m_sortUnreadItemsCmd);
        super.addCommand(m_sortReadItemsCmd);
        super.addCommand(m_sortUnreadFeedsCmd);
        super.addCommand(m_sortReadFeedsCmd);
        super.addCommand(m_sortAllDateCmd);
        super.addCommand(m_sortAllFeedsCmd);
        super.addCommand(m_markReadCmd);
        super.addCommand(m_markUnReadCmd);
        super.addCommand(m_backUnreadHdrCmd);
    //#ifdef DTESTUI
        super.addCommand(m_testNewsCmd);
    //#endif
        super.setCommandListener(this);
    }
   
  /* Initialize the read an unread news lists.  This is done when we
     switch to the list. */
  final public void initNewsList(final boolean showAll,
                 final boolean showUnread,
                 final boolean sortByDate,
               final List bookmarkList,
               final RssFeedStore rssFeeds)
  throws CauseMemoryException, CauseException {

    //#ifdef DLOGGING
    if (m_finestLoggable) {m_logger.finest("initNewsList showAll,showUnread,sortByDate=" + showAll + "," + showUnread + "," + sortByDate);}
    //#endif
    this.m_showAll = showAll;
    this.m_showUnread = showUnread;
    this.m_sortByDate = sortByDate;
    final int bsize = bookmarkList.size();
    if( bsize > 0 ){
      initVectors();
      for( int ic = 0; ic < bsize; ic++ ){
     
        final String fname = bookmarkList.getString(ic);
        if (m_saveMemoryEnabled) {
          final String store = rssFeeds.getRoStoreStr(fname);
          final RssShortItem[] sitems = RssItunesFeed.getShortItems(
              m_midlet, store);
          final int ilen = sitems.length;
          if (ilen > 0) {
            /**
             * Show currently selected RSS feed
             * headers without updating them
             */
            fillVectors( ilen, fname,
                //#ifdef DITUNES
                null,
                //#endif
                sitems );
          }
        } else {
          final RssItunesFeed feed =
            (RssItunesFeed)rssFeeds.getRo(fname);
          final Vector vitems = feed.getItems();
          final int ilen = vitems.size();
          if (ilen > 0) {
            RssItunesItem[] ritems = new RssItunesItem[ilen];
            vitems.copyInto(ritems);
            /**
             * Show currently selected RSS feed
             * headers without updating them
             */
            fillVectors( ilen, fname,
                //#ifdef DITUNES
                feed.getDate(),
                //#endif
                ritems );
          }
        }
      }
      //#ifdef DLOGGING
      if (m_fineLoggable) {m_logger.fine("size of m_unreadItems,m_readItems,m_allItems,m_itemFeedsNames=" + m_unreadItems.size() + "," + m_readItems.size() + "," + m_allItems.size() + "," + m_itemFeedsNames.size());}
      //#endif
    }
  }

  /* Sort all items. */
  final public void sortAllItems(final boolean sortByDate,
               final List bookmarkList,
               final RssFeedStore rssFeeds)
  throws CauseMemoryException, CauseException {
    initNewsList(true, false, sortByDate, bookmarkList, rssFeeds);
    if (sortByDate) {
      sortItems(false, m_allItems);
    } else {
      fillItems( m_allItems);
    }

    updTitle();
  }

  /** Update the title. */
  final public void updTitle() {
    if (m_showAll) {
      super.setTitle("All items " + (m_sortByDate ? "date" : "feed") +
          " sorted:  " + super.size());
    } else if (m_showUnread) {
      super.setTitle("Unread items " + (m_sortByDate ? "date" : "feed") +
          " sorted:  " + super.size());
    } else {
      super.setTitle("Read items " + (m_sortByDate ? "date" : "feed") +
          " sorted:  " + super.size());
    }
  }

  /** Sort items unread. */
  final public void sortUnreadItems(final boolean sortByDate,
                final List bookmarkList,
                final RssFeedStore rssFeeds)
  throws CauseMemoryException, CauseException {
    initNewsList(false, true, sortByDate, bookmarkList, rssFeeds);
    if (sortByDate) {
      sortItems(true, m_unreadItems);
    } else {
      fillItems( m_unreadItems);
    }
    updTitle();
  }

  /* Sort items read. */
  final public void sortReadItems(boolean sortByDate,
                List bookmarkList, RssFeedStore rssFeeds)
  throws CauseMemoryException, CauseException {
    initNewsList(false, false, sortByDate, bookmarkList, rssFeeds);
    if (sortByDate) {
      sortItems(false, m_readItems);
    } else {
      fillItems( m_readItems);
    }
    updTitle();
  }

  /* Sort items read or unread vector and put into GUI list. */
  final private void sortItems(final boolean showUnread,
      final Vector unsortedItems) {

    this.m_showUnread = showUnread;
    int [] indexes = new int[unsortedItems.size()];
    long [] ldates = new long[unsortedItems.size()];
    Vector vsorted = new Vector(unsortedItems.size());
    Vector vfeedSorted = new Vector(m_itemFeedsNames.size());
    Vector vunsorted = new Vector(unsortedItems.size());
    Vector vfeedUnsorted = new Vector(m_itemFeedsNames.size());
    RssShortItem[] uitems = new RssShortItem[unsortedItems.size()];
    unsortedItems.copyInto(uitems);
    String[] ufeeds = new String[m_itemFeedsNames.size()];
    m_itemFeedsNames.copyInto(ufeeds);
    int kc = 0;
    for (int ic = 0; ic < uitems.length; ic++) {
      final Date sortDate = uitems[ic].getDate();
      if (sortDate == null)
      {
        vsorted.addElement(uitems[ic]);
        vfeedSorted.addElement(ufeeds[ic]);
      } else {
        indexes[kc] = kc;
        ldates[kc++] = sortDate.getTime();
        vunsorted.addElement(uitems[ic]);
        vfeedUnsorted.addElement(ufeeds[ic]);
        //#ifdef DLOGGING
        if (m_finestLoggable) {m_logger.finest("kc,date=" + ic + "," + new Date(ldates[kc - 1]));}
        //#endif
      }
    }
    uitems = null;
    ufeeds = null;
    SortUtil.sortLongs( indexes, ldates, 0, kc - 1);
    uitems = new RssShortItem[kc];
    vunsorted.copyInto(uitems);
    vunsorted = null;
    ufeeds = new String[kc];
    vfeedUnsorted.copyInto(ufeeds);
    vfeedUnsorted = null;
    for (int ic = 0; ic < kc ; ic++) {
      //#ifdef DLOGGING
      if (m_finestLoggable) {m_logger.finest("ic,index,date=" + ic + "," + indexes[ic] + "," + new Date(ldates[indexes[ic]]) + "," + uitems[indexes[ic]].getDate());}
      //#endif
      vsorted.insertElementAt(uitems[indexes[ic]], 0);
      vfeedSorted.insertElementAt(ufeeds[indexes[ic]], 0);
    }
    uitems = null;
    RssShortItem[] sitems = new RssShortItem[vsorted.size()];
    vsorted.copyInto(sitems);
    vsorted = null;
    unsortedItems.removeAllElements();
    for( int ic = 0; ic < sitems.length; ic++){
      unsortedItems.addElement(sitems[ic]);
    }
    ufeeds = null;
    String[] sfeeds = new String[vfeedSorted.size()];
    vfeedSorted.copyInto(sfeeds);
    vfeedSorted = null;
    m_itemFeedsNames.removeAllElements();
    for( int ic = 0; ic < sitems.length; ic++){
      m_itemFeedsNames.addElement(sfeeds[ic]);
    }
    fillItems( unsortedItems );
  }

    /** Fill list from items */
    final private void fillItems(final Vector sortedItems) {
    UiUtil.delItems(this);
    final int slen = sortedItems.size();
    RssShortItem [] sitems = new RssShortItem[slen];
    sortedItems.copyInto(sitems);
    for( int ic = 0; ic < slen; ic++){
      final String text = sitems[ic].getTitle();
      if (m_showAll && (m_unreadImage != null)){
        if (sitems[ic].isUnreadItem()) {
          super.append( text, m_unreadImage );
        } else {
          super.append( text, m_readImage );
        }
      } else {
        super.append( text, null );
      }
    }
  }

  /** Initialize item and feed name vectors. */
  final private void initVectors() {
    m_unreadItems.removeAllElements();
    m_readItems.removeAllElements();
    m_allItems.removeAllElements();
    m_itemFeedsNames.removeAllElements();
  }

    /** Fill RSS item vectors */
    final private void fillVectors( final int ilen,
      final String fname,
      //#ifdef DITUNES
      final Date fdate,
      //#endif
      final Object[] oitems ) {
    //#ifdef DLOGGING
    if (m_finestLoggable) {m_logger.finest("fillVectors fname,ilen=" + fname + "," + ilen);}
    //#endif
        for(int i=0; i < ilen; i++){
            final Object oi = oitems[i];
            RssShortItem si;
      if (oi instanceof RssItunesItem) {
        si = new RssShortItem((RssItunesItem)oi, i);
        if (si.getTitle().length() == 0) {
          si.setTitle(
              m_midlet.getItemDescription(
                ((RssItunesItem)oi).getDescription()));
        }
        //#ifdef DITUNES
        if (si.getDate() == null) {
          si.setDate(fdate);
          //#ifdef DLOGGING
          if (m_finestLoggable) {m_logger.finest("Using feed date for item=" + i + "," + fname + "," + si.getTitle());}
          //#endif
        }
        //#endif
      } else {
        si = (RssShortItem)oi;
      }
      if (m_showAll) {
        m_allItems.addElement(si);
        m_itemFeedsNames.addElement(fname);
      } else {
        if (si.isUnreadItem()) {
          if (m_showUnread) {
            m_unreadItems.addElement(si);
            m_itemFeedsNames.addElement(fname);
          }
        } else {
          if (!m_showUnread) {
            m_readItems.addElement(si);
            m_itemFeedsNames.addElement(fname);
          }
        }
      }
        }
    }
   
  final private void updFeedItem(Vector vitems, int selIdx)
  throws CauseMemoryException, CauseException {
    final String fname = (String)m_itemFeedsNames.elementAt(selIdx);
    m_feed = m_rssFeeds.getRo(fname);
    m_shortItem = (RssShortItem)vitems.elementAt(selIdx);
    m_item = (RssItunesItem)(m_feed.getItems().elementAt(
          m_shortItem.getIndex()));
  }

  /* Get the current selected index (or 0 index) and update the vectors. */
  final private void getUpdSel(boolean updateIt)
  throws CauseMemoryException, CauseException {
    int selIdx = UiUtil.getSelectedIndex(this);
    if (m_showAll) {
      updFeedItem(m_allItems, selIdx);
      final int unreadIdx = m_unreadItems.indexOf(m_shortItem);
      if (updateIt && (m_unreadImage != null) && m_item.isUnreadItem()) {
        super.set(selIdx, super.getString(selIdx), m_readImage);
      }
    } else if (m_showUnread) {
      super.delete(selIdx);
      if (selIdx > 0) {
        super.setSelectedIndex(selIdx - 1, true);
      }
      updFeedItem(m_unreadItems, selIdx);
      if (updateIt) {
        m_unreadItems.removeElementAt(selIdx);
        m_itemFeedsNames.removeElementAt(selIdx);
      }
      updTitle();
    } else {
      updFeedItem(m_readItems, selIdx);
    }
    /**
     * Show currently selected RSS item
     * without updating it
     */
    if (updateIt) {
      m_item.setUnreadItem(false);
      m_rssFeeds.put(m_feed);
    }
  }

  /* Update the lists for mark or unmark. */
  final private void updMarkSel(boolean markUnread)
  throws CauseMemoryException, CauseException {
    int selIdx = UiUtil.getSelectedIndex(this);
    if (m_showAll) {
      updFeedItem(m_allItems, selIdx);
      if (m_unreadImage != null) {
        if (!markUnread && m_item.isUnreadItem()) {
          super.set(selIdx, super.getString(selIdx), m_readImage);
        } else if (markUnread && !m_item.isUnreadItem()) {
          super.set(selIdx, super.getString(selIdx), m_unreadImage);
        }
      }
      m_item.setUnreadItem(markUnread);
      m_rssFeeds.put(m_feed);
    } else {
      if ((m_showUnread && !markUnread) ||
          (!m_showUnread && markUnread)) {
        super.delete(selIdx);
        if (selIdx > 0) {
          super.setSelectedIndex(selIdx - 1, true);
        }
        if (m_showUnread) {
          updFeedItem(m_unreadItems, selIdx);
          m_unreadItems.removeElementAt(selIdx);
        } else {
          updFeedItem(m_readItems, selIdx);
          m_readItems.removeElementAt(selIdx);
        }
        m_item.setUnreadItem(markUnread);
        m_rssFeeds.put(m_feed);
        m_itemFeedsNames.removeElementAt(selIdx);
      }
      updTitle();
    }

  }

    /** Run method is used to get RSS feed with HttpConnection */
    final public void run() {

        long lngStart;
        long lngTimeTaken;
        while(m_process) {
      if (m_select) {
        m_select = false;
        m_midlet.initializeLoadingFormRsc("text.l.it", this);
        try {
          try {
            getUpdSel(true);
            m_midlet.initializeItemForm( m_feed, m_item, this );
            //#ifdef DTESTUI
            m_itemNext = true;
            //#endif
          }catch(OutOfMemoryError t) {
            m_midlet.recordExcForm(
                "Out Of Memory Error selecting item", t);
          }
        } catch (CauseMemoryException e) {
          m_midlet.recordExcForm(
              "Out Of Memory Error selecting item", e);
        } catch (CauseException e) {
          m_midlet.recordExcForm(
              "Internal error selecting item", e);
        }
      }

      if (m_updItem) {
        m_midlet.initializeLoadingFormRsc("text.u.it", this);
        m_midlet.showLoadingForm();
        m_updItem = false;
        try {
          try {
            updMarkSel(m_markUnread);
          }catch(OutOfMemoryError t) {
            m_midlet.recordExcForm(
                "Out Of Memory Error updating item", t);
          }
        } catch (CauseMemoryException e) {
          m_midlet.recordExcForm(
              "Out Of Memory Error updating item", e);
        } catch (CauseException e) {
          m_midlet.recordExcForm(
              "Internal error updating item", e);
        }
      }

      try {
        /* Sort the read or unread items. */
        if ( m_sort ) {
          m_midlet.initializeLoadingFormRsc("text.s.item", this);
          m_midlet.showLoadingForm();
          m_sort = false;
          if (m_showAll) {
            sortAllItems( m_dateSort, m_bookmarkList, m_rssFeeds );
          } else if (m_sortUnread) {
            sortUnreadItems( m_dateSort, m_bookmarkList, m_rssFeeds );
          } else {
            sortReadItems( m_dateSort, m_bookmarkList, m_rssFeeds );
          }
          m_midlet.setLoadingFinished("Sorting finished",
              "Sorting finished use back to return.");
          m_midlet.setCurrent(this);
        }
      }catch(OutOfMemoryError t) {
        m_midlet.recordExcForm("\nOut Of Memory Error sorting items", t);
      }catch(Throwable t) {
        m_midlet.recordExcForm("\nInternal error sorting items", t);
      }
      lngStart = System.currentTimeMillis();
      lngTimeTaken = System.currentTimeMillis()-lngStart;
      if(lngTimeTaken<100L) {
        synchronized(this) {
          if (!m_needWakeup) {
            try {
              super.wait(75L-lngTimeTaken);
            } catch (InterruptedException e) {
              break;
            }
          }
          m_needWakeup = false;
        }
      }

      //#ifdef DTESTUI
      // If there are headers, and the header index is >= 0,
      // open the header so that it's items can be listed
      // with test UI classes.
      // Need to change the selection to match the m_newsIndex.
      if (m_newsNext && (m_newsIndex >= 0) && m_testNews &&
        (m_newsIndex < super.size()) &&
        (m_midlet.getCurrent() == this)) {
        m_newsNext = false;
        if (super.getSelectedIndex() >= 0) {
          super.setSelectedIndex(
              super.getSelectedIndex(), false);
        }
        super.setSelectedIndex(m_newsIndex, true);
        commandAction(List.SELECT_COMMAND, this);
      }
      // After intializing the form (which was already logged by
      // testui classes), simulate the back command
      if (m_itemNext && (m_newsIndex >= 0) && m_testNews &&
        (m_newsIndex < super.size()) && m_midlet.isItemForm()) {
        m_itemNext = false;
        m_midlet.backFrItemForm();
        // If size the same, we are not doing unread, so increase.
        if (m_newsLen == super.size()) {
          m_newsIndex++;
        }
        if (m_newsIndex >= super.size()) {
          System.out.println("Test UI Test Rss items last");
          m_newsIndex = -1;
        }
      }
      //#endif
    }

  }

  /* Notify us that we are finished. */
  final public void wakeUp() {
   
    synchronized(this) {
      m_needWakeup = true;
      super.notify();
    }
  }

  //#ifdef DTESTUI
  /** If auto testing news, set flag that says that we're going back to
      the news menu from item. */
  final public void gotoNews() {
    if (m_testNews) {
      if (super.size() == 0) {
        m_testNews = false;
        m_newsLen = -1;
        m_newsIndex = -1;
        m_newsNext = false;
        m_itemNext = false;
      }
      m_newsNext = true;
    }
  }
  //#endif

    /** Respond to commands */
    final public void commandAction(final Command c, final Displayable s) {
    //#ifdef DTESTUI
    super.outputCmdAct(c, s, javax.microedition.lcdui.List.SELECT_COMMAND);
    //#endif
        if( c == m_sortUnreadItemsCmd ) {
      /* Sorting items... */
      m_sortUnread = true;
      m_dateSort = true;
      m_showAll = false;
      m_sort = true;
      wakeUp();
        }
       
        /** Read read items date sorted */
        if( c == m_sortReadItemsCmd ) {
      /* Sorting items... */
      m_sortUnread = false;
      m_dateSort = true;
      m_showAll = false;
      m_sort = true;
      wakeUp();
        }
       
        /** Read unread items feed sorted */
        if( c == m_sortUnreadFeedsCmd ) {
      /* Sorting items... */
      m_sortUnread = true;
      m_dateSort = false;
      m_showAll = false;
      m_sort = true;
      wakeUp();
        }
       
        /** Read read items feed sorted */
        if( c == m_sortReadFeedsCmd ) {
      /* Sorting items... */
      m_sortUnread = false;
      m_dateSort = false;
      m_showAll = false;
      m_sort = true;
      wakeUp();
        }
       
        if( (c == m_openUnreadHdrCmd) || (c == List.SELECT_COMMAND) ) {
            if( super.size()>0){
        m_select = true;
            }
    } else if( c == m_sortAllDateCmd ) {
      /* Sorting items... */
      m_sortUnread = false;
      m_dateSort = true;
      m_showAll = true;
      m_sort = true;
      wakeUp();
    } else if( c == m_sortAllFeedsCmd ) {
      /* Sorting items... */
      m_sortUnread = false;
      m_dateSort = false;
      m_showAll = true;
      m_sort = true;
      wakeUp();
    } else if( c == m_markReadCmd ) {
            if( super.size()>0){
        /* Updating item... */
        m_markUnread = false;
        m_updItem = true;

            }
    } else if( c == m_markUnReadCmd ) {
            if( super.size()>0){
        m_markUnread = true;
        m_updItem = true;
            }
        /** Get back to RSS feed bookmarks */
    } else if( c == m_backUnreadHdrCmd ){
      //#ifdef DTESTUI
      m_testNews = false;
      m_newsLen = -1;
      m_newsIndex = -1;
      m_newsNext = false;
      m_itemNext = false;
      //#endif
      m_process = false;
      m_midlet.removeRef(this);
      m_midlet.showBookmarkList();

      //#ifdef DTESTUI
      /** Indicate that we want to test the headers/items.  */
    } else if( c == m_testNewsCmd) {
      if( super.size()>0 ) {
        m_itemNext = false;
        m_newsIndex = 0;
        m_newsLen = super.size();
        System.out.println("Test UI Test News items start m_newsIndex=" + m_newsIndex);
        m_newsNext = true;
        m_testNews = true;
        wakeUp();
      }
      //#endif

    }
       
  }

}
TOP

Related Classes of com.substanceofcode.rssreader.presentation.AllNewsList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.