SplashCanvas.java :  » Mobile » jimm-fork-van » jimm » Java Open Source

Java Open Source » Mobile » jimm fork van 
jimm fork van » jimm » SplashCanvas.java
/*******************************************************************************
 Jimm - Mobile Messaging - J2ME ICQ clone
 Copyright (C) 2003-05  Jimm Project

 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.
 ********************************************************************************
 File: src/jimm/SplashCanvas.java
 Version: ###VERSION###  Date: ###DATE###
 Author(s): Manuel Linsmayer, Andreas Rossbacher, Vladimir Kryukov
 *******************************************************************************/


package jimm;

import DrawControls.*;
import DrawControls.icons.*;
import DrawControls.text.FormatedText;
import java.io.IOException;
import javax.microedition.lcdui.*;
import java.util.*;
import jimm.comm.*;
import jimm.chat.message.Message;
import jimm.cl.*;
import jimm.modules.*;
import jimm.ui.*;
import jimm.ui.base.*;
import jimm.ui.timers.*;
import jimm.util.*;
import protocol.*;
// #sijapp cond.if modules_PASSWORD is "true" # //password
import jimm.modules.*;                          //password
// #sijapp cond.end#                            //password

public final class SplashCanvas extends CanvasEx {

    // True if keylock has been enabled
    static private final short KEY_LOCK_MSG_TIME = 2000 / NativeCanvas.UIUPDATE_TIME;
    private short keyLock = -1;
    static private final short UPDATE_INTERVAL = 20000 / NativeCanvas.UIUPDATE_TIME;
    private short updateTime = UPDATE_INTERVAL;
    static private final short RESET_INTERVAL = 3000 / NativeCanvas.UIUPDATE_TIME;
    private short resetTime = -1;

  // #sijapp cond.if target is "SIEMENS2"#
  private final Image battImg = ImageList.loadImage("/batt.png");
  // #sijapp cond.end#
    private final Image splash = ImageList.loadImage("/logo.png");

  // Font used to display the logo (if image is not available)
  private final Font logoFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);

  // Font used to display the version nr
  private final Font versionFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);

  // Font used to display informational messages
  private final Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);

        private final Font date = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_SMALL); //font date

  /*****************************************************************************/


    // Message to display beneath the splash image
    private Icon statusImg;
    private String message;
    private Progress process;

    // Progress in percent
    private volatile int progress;

    // Number of available messages
    private int availableMessages;

    // Time since last key # pressed
    // #sijapp cond.if modules_PASSWORD is "true" # //password
    private static long poundPressTime;             //password
    // #sijapp cond.else#                           //password
    private long poundPressTime;                    //password
    // #sijapp cond.end#                            //password

  public static final SplashCanvas instance = new SplashCanvas();

    // Constructor
  private SplashCanvas() {
  }
  // Sets the informational message
  static public void setMessage(String message) {
    instance.message = message;
        instance.statusImg = null;
        instance.progress = 0;
        instance.invalidate();
  }

  public static void setStatusToDraw(Icon img) {
    instance.statusImg = img;
  }

  public static void setNotifyMessage(Icon img, String msg) {
    instance.statusImg = img;
    instance.message = msg;
        instance.resetTime = RESET_INTERVAL;
        instance.invalidate();
    }
    public static void showSplash() {
        instance.show();
    }

    // Sets the current progress in percent (and request screen refresh)
    static public void setProgress(int progress) {
        if (progress == instance.progress) return;
        instance.progress = progress;
        NativeCanvas.getInstance().updateMetrix();
        instance.invalidate();
    }

    private void setLockMessage() {
        setMessage(ResourceBundle.getString("keylock_enabled"));
        setStatusToDraw(ContactList.getInstance().getCurrentProtocol().getCurrentStatusIcon());
    }
    public void lockJimm() {
        keyLock = 0;
        process = null;
        setLockMessage();
        messageAvailable();
        show();
    }


    // Called when message has been received
    public static void messageAvailable() {
        if (Jimm.isLocked()) {
            int unread = ContactList.getInstance().getUnreadMessCount();
            if (unread != instance.availableMessages) {
                instance.availableMessages = unread;
                instance.invalidate();
            }
        }
    }

    // #sijapp cond.if modules_STYLUS is "true"#
    protected void stylusTap(int x, int y, boolean isLongTap) {
        int height = getProgressHeight() + 20;
        int minY = NativeCanvas.getScreenHeight() - height;
        if (minY < y) {
            int region = NativeCanvas.getScreenWidth() * 2 / 3;
            if (region < x) {
                closeAnyAction();
            }
        }
    }
    protected void stylusMoved(int fromX, int fromY, int toX, int toY) {
        int region = getProgressHeight() + 20;
        int minY = NativeCanvas.getScreenHeight() - region;
        if ((fromY < minY) || (toY < minY)) {
            poundPressTime = 0;
            keyLock = KEY_LOCK_MSG_TIME;
            invalidate();
            return;
        }
        int x1 = Math.min(fromX, toX);
        int x2 = Math.max(fromX, toX);
        if ((x1 < region) && (NativeCanvas.getScreenWidth() - region < x2)) {
            if (Jimm.isLocked()) {
                Jimm.unlockJimm();
                return;
            }
            ContactList.activate();
        }
    }
    // #sijapp cond.end#
    private void closeAnyAction() {
        Progress p = process;
        if (null != p) {
            p.closeAnyAction();
        }
    }
    // Called when a key is pressed
    protected void doKeyReaction(int keyCode, int actionCode, int type) {
        if (KEY_PRESSED == type) {
            if (Jimm.isLocked()) {
                if (Canvas.KEY_POUND == keyCode) {
                    if (0 == poundPressTime) {
                        poundPressTime = System.currentTimeMillis();
                    }

                } else {
                    poundPressTime = 0;
                    keyLock = KEY_LOCK_MSG_TIME;
                    invalidate();
                }

            } else {
                if (NativeCanvas.RIGHT_SOFT == keyCode) {
                    closeAnyAction();

                // #sijapp cond.if modules_DEBUGLOG is "true" #
                } else if ((Canvas.KEY_POUND == keyCode)) {
                    ContactList.activate();
                // #sijapp cond.end#
                }
            }

        } else {
            if (!Jimm.isLocked()) return;
            if (Canvas.KEY_POUND != keyCode) return;
            if ((0 != poundPressTime)
                    && ((System.currentTimeMillis() - poundPressTime) > 900)) {
    // #sijapp cond.if modules_PASSWORD is "true" #   //password
                if (PasswordEnter.init()) {           //password
                    PasswordEnter.show(1);            //password
                } else {                              //password
                    continueJimm();                   //password
                }                                     //password
            }                                         //password
        }                                             //password
    }                                                 //password
                public static void continueJimm() {   //password
    // #sijapp cond.end#                              //password
                Jimm.unlockJimm();                    //password
                poundPressTime = 0;                   //password
   // #sijapp cond.if modules_PASSWORD isnot "true" # //password
             }                                        //password
         }                                            //password
   // #sijapp cond.end#                               //password
    }

    protected void updateTask() {
        boolean repaintIt = false;
        // icq action
        if (0 <= resetTime) {
            if (0 == resetTime) {
                setLockMessage();
                repaintIt = true;
            }

            resetTime--;
        }

        // key lock
        if (0 <= keyLock) {
            if (0 == keyLock) {
                repaintIt = true;
            }
            keyLock--;
        }

        // clock
        if (0 <= updateTime) {
            updateTime--;
            if (0 > updateTime) {
                updateTime = UPDATE_INTERVAL;
                repaintIt = true;
            }
        }
        if (repaintIt) {
            invalidate();
        }
    }


    private void showMessage(GraphicsEx g, String msg, int width, int height) {
        final int size_x = width / 10 * 8;
        final int textWidth = size_x - 8;

        Font[] fontSet = GraphicsEx.chatFontSet;
        FormatedText formatedText = new FormatedText();
        formatedText.setWidth(textWidth);
        formatedText.addBigText(fontSet, msg, THEME_SPLASH_LOCK_TEXT, (byte)Font.STYLE_PLAIN, -1);

        final int textHeight = formatedText.getHeight();
        final int size_y = textHeight + 8;
        final int x = width / 2 - (width / 10 * 4);
        final int y = height / 2 - (size_y / 2);
        g.setThemeColor(THEME_SPLASH_LOCK_BACK);
        g.fillRect(x, y, size_x, size_y);
        g.setThemeColor(THEME_SPLASH_LOCK_TEXT);
        g.drawRect(x + 2, y + 2, size_x - 5, size_y - 5);
        g.setThemeColor(THEME_SPLASH_LOCK_TEXT);
        formatedText.paint(fontSet, g, x + 4, y + 4, size_x - 8, textHeight);
    }

    // Render the splash image
    protected void paint(GraphicsEx g) {
        final int height = NativeCanvas.getScreenHeight();
        final int width  = NativeCanvas.getScreenWidth();
        final int fontHeight = font.getHeight();
        // Do we need to draw the splash image?
        if (g.getClipY() < height - fontHeight - 2) {
            // Draw background
            g.setThemeColor(THEME_SPLASH_BACKGROUND);
            g.fillRect(0, 0, width, height);

            // Display splash image (or text)
            if (null != splash) {
                g.drawImage(splash, width / 2, height / 2, Graphics.HCENTER | Graphics.VCENTER);
            } else {
                g.setThemeColor(THEME_SPLASH_LOGO_TEXT);
                g.setFont(logoFont);
                g.drawString("jimm", width / 2, height / 2 + 5, Graphics.HCENTER | Graphics.BASELINE);
                g.setFont(font);
            }

            // Draw the date
            if (Options.getBoolean(Options.OPTION_DISPLAY_DATE)) {
                g.setThemeColor(THEME_SPLASH_DATE);
                g.setFont(date); //font date
                g.drawString(Util.getDateString(false), width / 2, 12, Graphics.TOP | Graphics.HCENTER);
                g.drawString(Util.getCurrentDay(), width / 2, 13 + font.getHeight(),
                        Graphics.TOP | Graphics.HCENTER);
            }

            // Display message icon, if keylock is enabled
            if (Jimm.isLocked()) {
                if (0 < availableMessages) {
                    Icon icon = Message.msgIcons.iconAt(Message.ICON_MSG_NONE);
                    if (null != icon) {
                        g.drawByLeftTop(icon, 1, height - (2 * fontHeight) - 6); //it is changed
                    }
                    g.setThemeColor(THEME_SPLASH_MESSAGES);
                    g.setFont(font);
                    int x = Message.msgIcons.getWidth() + 4;
                    int y = height-(2 * fontHeight) - 5;
                    g.drawString("# " + availableMessages, x, y, Graphics.LEFT | Graphics.TOP);
                }

                // #sijapp cond.if target is "SIEMENS2"#
                String accuLevel = System.getProperty("MPJC_CAP");
                if (null != accuLevel) {
                    accuLevel += "%";
                    int fontX = width -  font.stringWidth(accuLevel) - 1;
                    if (null != battImg) {
                        g.drawImage(battImg, fontX - battImg.getWidth() - 1, height-(2 * fontHeight) - 9,
                                Graphics.LEFT | Graphics.TOP);
                    }
                    g.setThemeColor(THEME_SPLASH_DATE);
                    g.setFont(font);
                    g.drawString(accuLevel, fontX, height - (2 * fontHeight) - 5, Graphics.LEFT | Graphics.TOP);
                }
                // #sijapp cond.end#

                // Display the keylock message if someone hit the wrong key
                if (0 < keyLock) {
                    // Init the dimensions
                    String lockMsg = ResourceBundle.getString("keylock_message");
                    showMessage(g, lockMsg, width, height);
                }
            }
        }

        final int im_width = (null == statusImg) ? 0 : statusImg.getWidth();
        int progressHeight = getProgressHeight();
        int stringWidth = font.stringWidth(message);
        g.setFont(font);

        // Draw white bottom bar
        g.setThemeColor(THEME_SPLASH_PROGRESS_BACK);
        //g.setStrokeStyle(Graphics.DOTTED);
        g.drawLine(0, height - progressHeight - 2, width, height - progressHeight - 2); //it is changed progressbar

        g.setThemeColor(THEME_SPLASH_PROGRESS_BACK);
        g.drawString(message, (width / 2) + (im_width / 2), height, Graphics.BOTTOM | Graphics.HCENTER);
        if (null != statusImg) {
            g.drawInCenter(statusImg, (width / 2) - (stringWidth / 2),
                    height - (progressHeight / 2));
        }

        // Draw current progress
        int progressPx = width * progress / 100;
        if (progressPx < 1) return;
        g.setClip(0, height - progressHeight - 1, progressPx, progressHeight + 1); //it is changed progressbar

        g.setThemeColor(THEME_SPLASH_PROGRESS_BACK);
        g.fillRect(0, height - progressHeight - 1, progressPx, progressHeight + 1); //it is changed progressbar

        g.setThemeColor(THEME_SPLASH_PROGRESS_TEXT);
        // Draw the progressbar message
        g.drawString(message, (width / 2) + (im_width / 2), height, Graphics.BOTTOM | Graphics.HCENTER);
        if (null != statusImg) {
            g.drawInCenter(statusImg, (width / 2) - (stringWidth / 2),
                    height - (progressHeight / 2));
        }
    }
    private int getProgressHeight() {
        final int fontHeight = font.getHeight();
        if (null != statusImg) {
            return Math.max(fontHeight, statusImg.getHeight());
        }
        return fontHeight;
    }

    protected void restoring() {
        boolean isCancellable = (null != process);
        String command = (!NativeCanvas.isFullScreen() && isCancellable) ? "cancel" : null;
        NativeCanvas.setCommands(null, command);
    }

    public static void setProgressBar(Progress p) {
        instance.process = p;
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.