/* * TwitterController.java * * Copyright (C) 2005-2008 Tommi Laukkanen * http://www.substanceofcode.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.substanceofcode.twitter; import com.substanceofcode.twitter.model.Status; import com.substanceofcode.twitter.tasks.RequestTimelineTask; import com.substanceofcode.twitter.tasks.UpdateStatusTask; import com.substanceofcode.twitter.views.AboutCanvas; import com.substanceofcode.twitter.views.LoginForm; import com.substanceofcode.twitter.views.SplashCanvas; import com.substanceofcode.twitter.views.TimelineCanvas; import com.substanceofcode.twitter.views.UpdateStatusTextBox; import com.substanceofcode.twitter.views.WaitCanvas; import com.substanceofcode.utils.Log; import java.io.IOException; import java.util.Vector; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.rms.RecordStoreException; /** * TwitterController controls the application flow. * * @author Tommi Laukkanen (tlaukkanen at gmail dot com) */ public class TwitterController { private TwitterMidlet midlet; private Display display; private TwitterApi api; private Settings settings; private TimelineCanvas timeline; private Vector publicTimeline; private Vector friendsTimeline; private Vector archiveTimeline; private Vector responsesTimeline; /** * Creates a new instance of TwitterController * @param midlet Application midlet. */ public TwitterController(TwitterMidlet midlet) { try { this.midlet = midlet; this.display = Display.getDisplay(midlet); this.api = new TwitterApi(); this.timeline = new TimelineCanvas(this); settings = Settings.getInstance(midlet); } catch (IOException ex) { ex.printStackTrace(); } catch (RecordStoreException ex) { ex.printStackTrace(); } } public void about() { AboutCanvas canvas = new AboutCanvas(this); display.setCurrent(canvas); } public void addStatus(Status status) { if(friendsTimeline!=null) { friendsTimeline.insertElementAt(status, 0); } if(archiveTimeline!=null) { archiveTimeline.insertElementAt(status, 0); } } public void clearTimelines() { setFriendsTimeline(null); setPublicTimeline(null); setResponsesTimeline(null); setUserTimeline(null); } public MIDlet getMIDlet() { return midlet; } public Settings getSettings() { return settings; } public void exit() { try { midlet.destroyApp(true); midlet.notifyDestroyed(); } catch(Exception ex) { Log.error("Exit: " + ex.getMessage()); } } public Displayable getCurrentDisplay() { return display.getCurrent(); } /** * Login to twitter. * @param username Username for Twitter * @param password Password for Twitter */ public void login(String username, String password) { api.setUsername(username); api.setPassword(password); showFriendsTimeline(); } public void setPublicTimeline(Vector publicTimeline) { this.publicTimeline = publicTimeline; } public void setResponsesTimeline(Vector responsesTimeline) { this.responsesTimeline = responsesTimeline; } public void setUserTimeline(Vector archiveTimeline) { this.archiveTimeline = archiveTimeline; } public void showPublicTimeline() { if(publicTimeline==null) { RequestTimelineTask task = new RequestTimelineTask( this, api, RequestTimelineTask.FEED_PUBLIC); WaitCanvas wait = new WaitCanvas(this, task); display.setCurrent(wait); } else { timeline.setTimeline(publicTimeline); display.setCurrent(timeline); } } public void showResponsesTimeline() { if(responsesTimeline==null) { RequestTimelineTask task = new RequestTimelineTask( this, api, RequestTimelineTask.FEED_RESPONSES); WaitCanvas wait = new WaitCanvas(this, task); wait.setWaitText("Loading responses..."); display.setCurrent(wait); } else { timeline.setTimeline(responsesTimeline); display.setCurrent(timeline); } } /** Show status updating view. */ public void showStatusView(String prefix) { UpdateStatusTextBox statusView = new UpdateStatusTextBox(this, prefix); display.setCurrent(statusView); } /** * Update Twitter status. * @param status New status */ public void updateStatus(String status) { UpdateStatusTask task = new UpdateStatusTask( this, api, status ); WaitCanvas wait = new WaitCanvas(this, task); wait.setWaitText("Updating status..."); display.setCurrent(wait); } public void useArchiveTimeline() { timeline.setTimeline(archiveTimeline); } public void useResponsesTimeline() { timeline.setTimeline(responsesTimeline); } public void showArchiveTimeline() { if(archiveTimeline==null) { RequestTimelineTask task = new RequestTimelineTask( this, api, RequestTimelineTask.FEED_ARCHIVE); WaitCanvas wait = new WaitCanvas(this, task); wait.setWaitText("Loading tweets..."); display.setCurrent(wait); } else { timeline.setTimeline(archiveTimeline); display.setCurrent(timeline); } } /** * Set friends time line entries. * @param friendsTimeline */ public void setFriendsTimeline(Vector friendsTimeline) { this.friendsTimeline = friendsTimeline; } /** Show login form */ public void showLoginForm() { LoginForm loginForm = new LoginForm( this ); display.setCurrent( loginForm ); } public void showFriendsTimeline() { if( friendsTimeline==null) { RequestTimelineTask task = new RequestTimelineTask( this, api, RequestTimelineTask.FEED_FRIENDS); WaitCanvas wait = new WaitCanvas(this, task); wait.setWaitText("Loading your timeline..."); display.setCurrent(wait); } else { timeline.setTimeline( friendsTimeline ); display.setCurrent( timeline ); } } public void showTimeline(Vector timelineFeed ) { timeline.setTimeline( timelineFeed ); display.setCurrent( timeline ); } /** Show splash screen */ void showSplash() { SplashCanvas splash = new SplashCanvas(this); display.setCurrent(splash); } }