Classes sorted by package:

core.comms
BaseMessaging

core.threads
BaseThread

core.ui
MainUIMidlet

core.ui.controller
AbstractController
AlbumController
BaseController
ControllerInterface
PhotoController
PhotoListController
PhotoViewController
ScreenSingleton

core.ui.datamodel
AlbumData
ImageAccessor
ImageData

core.ui.screens
AddPhotoToAlbum
AlbumListScreen
NewLabelScreen
PhotoListScreen
PhotoViewScreen
SplashScreen

core.util
Constants
ImageUtil

sms
NetworkScreen
SmsMessaging
SmsReceiverController
SmsReceiverThread
SmsSenderController
SmsSenderThread
  1 /*
  2  * Lancaster University
  3  * Computing Department
  4  
  5  * Created by Eduardo Figueiredo
  6  * Date: 22 Jun 2007
  7  
  8  */
  9 package ubc.midp.mobilephoto.core.ui.controller;
 10 
 11 import javax.microedition.lcdui.Alert;
 12 import javax.microedition.lcdui.AlertType;
 13 import javax.microedition.lcdui.Command;
 14 import javax.microedition.lcdui.Display;
 15 import javax.microedition.lcdui.List;
 16 import javax.microedition.rms.RecordStoreFullException;
 17 
 18 import lancs.midp.mobilephoto.lib.exceptions.InvalidPhotoAlbumNameException;
 19 import lancs.midp.mobilephoto.lib.exceptions.PersistenceMechanismException;
 20 import ubc.midp.mobilephoto.core.ui.MainUIMidlet;
 21 import ubc.midp.mobilephoto.core.ui.datamodel.AlbumData;
 22 import ubc.midp.mobilephoto.core.ui.screens.AlbumListScreen;
 23 import ubc.midp.mobilephoto.core.ui.screens.NewLabelScreen;
 24 import ubc.midp.mobilephoto.core.util.Constants;
 25 
 26 /**
 27  @author Eduardo Figueiredo
 28  * Purpose: simplify method handleCommand() in the BaseController.
 29  */
 30 public class AlbumController extends AbstractController {
 31 
 32   public AlbumController(MainUIMidlet midlet, AlbumData albumData, AlbumListScreen albumListScreen) {
 33     super(midlet, albumData, albumListScreen);
 34   }
 35   
 36   /* (non-Javadoc)
 37    * @see ubc.midp.mobilephoto.core.ui.controller.ControllerInterface#handleCommand(javax.microedition.lcdui.Command, javax.microedition.lcdui.Displayable)
 38    */
 39   public boolean handleCommand(Command command) {
 40     String label = command.getLabel();
 41         System.out.println"<* AlbumController.handleCommand() *>: " + label);
 42     
 43         if (label.equals("Reset")) {
 44       System.out.println("<* BaseController.handleCommand() *> Reset Photo Album");      
 45         resetImageData();
 46         ScreenSingleton.getInstance().setCurrentScreenName(Constants.ALBUMLIST_SCREEN);
 47       return true;
 48     /** Case: Create PhotoAlbum **/
 49     }else if (label.equals("New Photo Album")) {
 50       System.out.println("Create new Photo Album here");      
 51       ScreenSingleton.getInstance().setCurrentScreenName(Constants.NEWALBUM_SCREEN);
 52       NewLabelScreen canv = new NewLabelScreen("Add new Photo Album", NewLabelScreen.NEW_ALBUM);
 53       canv.setCommandListener(this);
 54       setCurrentScreen(canv);
 55       canv = null;
 56       return true;
 57     /** Case: Delete Album Photo**/
 58     }else if (label.equals("Delete Album")) {
 59       System.out.println("Delete Photo Album here");
 60       List down = (ListDisplay.getDisplay(midlet).getCurrent();
 61       ScreenSingleton.getInstance().setCurrentScreenName(Constants.CONFIRMDELETEALBUM_SCREEN);
 62       ScreenSingleton.getInstance().setCurrentStoreName(down.getString(down.getSelectedIndex()));
 63       String message = "Would you like to remove the album "+ScreenSingleton.getInstance().getCurrentStoreName();
 64       Alert deleteConfAlert = new Alert("Delete Photo Album", message,null,AlertType.CONFIRMATION);
 65       deleteConfAlert.setTimeout(Alert.FOREVER);
 66       deleteConfAlert.addCommand(new Command("Yes - Delete", Command.OK, 2));
 67       deleteConfAlert.addCommand(new Command("No - Delete", Command.CANCEL, 2));
 68       setAlbumListAsCurrentScreen(deleteConfAlert);
 69       deleteConfAlert.setCommandListener(this);
 70       return true;  
 71     /**
 72      *  TODO [EF] I think this confirmation questions are complicating the implementation
 73      *  [EF] How do you know that "Yes - Delete" is to delete Photo Album instead of Photo?
 74      *  Case: Yes delete Photo Album  **/
 75     }else if (label.equals("Yes - Delete")) {
 76       try {
 77         getAlbumData().deletePhotoAlbum(ScreenSingleton.getInstance().getCurrentStoreName());
 78       catch (PersistenceMechanismException e) {
 79         Alert alert = new Alert"Error""The mobile database can not delete this photo album", null, AlertType.ERROR);
 80             Display.getDisplay(midlet).setCurrent(alert, Display.getDisplay(midlet).getCurrent());
 81       }
 82       goToPreviousScreen();
 83       return true;  
 84     /** 
 85      * [EF] Same question. How do you know that "No - Delete" is to delete Photo Album instead of Photo?
 86      * Case: No delete Photo Album **/
 87     }else if (label.equals("No - Delete")) {
 88       goToPreviousScreen();
 89       return true;  
 90     /** 
 91      * [EF] Again, see [EF] comments above.
 92      * Case: Save new Photo Album  **/
 93     else if (label.equals("Save")) {
 94       try {
 95         if (getCurrentScreen() instanceof NewLabelScreen) {
 96           NewLabelScreen currentScreen = (NewLabelScreen)getCurrentScreen();
 97           if (currentScreen.getFormType() == NewLabelScreen.NEW_ALBUM)
 98             getAlbumData().createNewPhotoAlbum(currentScreen.getLabelName());
 99           else if (currentScreen.getFormType() == NewLabelScreen.LABEL_PHOTO) {
100             
101           }
102         }
103       catch (PersistenceMechanismException e) {
104         Alert alert = null;
105         if (e.getCause() instanceof  RecordStoreFullException)
106           alert = new Alert"Error""The mobile database is full", null, AlertType.ERROR);
107         else
108           alert = new Alert"Error""The mobile database can not add a new photo album", null, AlertType.ERROR);
109         Display.getDisplay(midlet).setCurrent(alert, Display.getDisplay(midlet).getCurrent());
110         return true;
111         catch (InvalidPhotoAlbumNameException e) {
112           Alert alert = new Alert"Error""You have provided an invalid Photo Album name", null, AlertType.ERROR);
113         Display.getDisplay(midlet).setCurrent(alert, Display.getDisplay(midlet).getCurrent());
114         return true;
115       }
116       goToPreviousScreen();
117       return true;
118     }
119         
120     return false;
121   }
122   
123     /**
124    * This option is mainly for testing purposes. If the record store
125    * on the device or emulator gets into an unstable state, or has too 
126    * many images, you can reset it, which clears the record stores and
127    * re-creates them with the default images bundled with the application 
128    */
129   private void resetImageData() {
130         try {
131           getAlbumData().resetImageData();
132     catch (PersistenceMechanismException e) {
133       Alert alert = null;
134       if (e.getCause() instanceof  RecordStoreFullException)
135         alert = new Alert"Error""The mobile database is full", null, AlertType.ERROR);
136       else
137         alert = new Alert"Error""It is not possible to reset the database", null, AlertType.ERROR);
138       Display.getDisplay(midlet).setCurrent(alert, Display.getDisplay(midlet).getCurrent())// TODO [EF] weird
139           return;
140     }
141         
142         //Clear the names from the album list
143         for (int i = 0; i < getAlbumListScreen().size(); i++) {
144           getAlbumListScreen().delete(i);
145         }
146         
147         //Get the default ones from the album
148         String[] albumNames = getAlbumData().getAlbumNames();
149         for (int i = 0; i < albumNames.length; i++) {
150           if (albumNames[i!= null) {
151             //Add album name to menu list
152             getAlbumListScreen().append(albumNames[i]null);
153           }
154         }
155         setCurrentScreen(getAlbumListScreen());
156     }
157 
158     private void goToPreviousScreen() {
159       System.out.println("<* AlbumController.goToPreviousScreen() *>");
160     getAlbumListScreen().repaintListAlbum(getAlbumData().getAlbumNames());
161     setCurrentScreengetAlbumListScreen() );
162     ScreenSingleton.getInstance().setCurrentScreenName(Constants.ALBUMLIST_SCREEN);
163     }
164 }