Пример #1
0
 public static void runOnEventThread(Runnable r) {
   if (Application.isEventDispatchThread()) {
     r.run();
   } else {
     Application.getApplication().invokeLater(r);
   }
 }
 public void setProgressAnimationInfo(Bitmap bitmap, int numFrames) {
   this.progressBitmap = bitmap;
   this.numFrames = numFrames;
   this.frameWidth = this.progressBitmap.getWidth() / this.numFrames;
   this.application = Application.getApplication();
   this.animate = false;
   this.visible = true;
   this.timerID = -1;
 }
Пример #3
0
 public boolean onClose() {
   // check whether we can close the application
   if (PushController.canQuit()) {
     return super.onClose();
   } else {
     Application.getApplication().requestBackground();
     return false;
   }
 }
 public void setItemImage(byte[] image) {
   try {
     Bitmap temp = Bitmap.createBitmapFromBytes(image, 0, image.length, 1);
     int w = TEXT_ANCHOR - 2 * PADDING_TOP;
     this.newsImage = Utils.resizedImage(temp, w, w);
   } catch (Exception e) {
   }
   synchronized (Application.getEventLock()) {
     NewsItemButton.super.invalidate();
   }
 }
 /* (non-Javadoc)
  * @see de.enough.polish.ui.NativeDisplay#setCurrent(de.enough.polish.ui.Display)
  */
 public void setCurrent(Display nextDisplayable) {
   Object lock = Application.getEventLock();
   synchronized (lock) {
     BaseScreen baseScreen;
     // #if polish.blackberry
     // # baseScreen = nextDisplayable;
     // #else
     baseScreen = (BaseScreen) (Object) nextDisplayable;
     // #endif
     this.midlet.pushScreen(baseScreen);
   }
 }
Пример #6
0
  public void processConnection(HttpConnection connection, Object e) {
    try {
      if (connection.getResponseCode() == HttpConnection.HTTP_NOT_MODIFIED) return;
    } catch (java.io.IOException exc) {
      LOG.ERROR("processConnection - getResponseCode failed.", exc);
    }

    synchronized (Application.getEventLock()) {
      createBrowserField();
      m_oBrowserField.displayContent(connection, (e != null ? (String) e : ""));
    }
  }
 public boolean notifyDisplayableChange(
     Displayable currentDisplayable, Displayable nextDisplayable) {
   // remove all fields but the dummy field:
   BaseScreen screen = (BaseScreen) (Object) Display.getInstance();
   screen.notifyDisplayableChange(currentDisplayable, nextDisplayable);
   // #if polish.useNativeAlerts || polish.useNativeGui
   if (nextDisplayable instanceof Alert) {
     AlertDialog dialog = new AlertDialog((Alert) nextDisplayable);
     Object lock = Application.getEventLock();
     synchronized (lock) {
       this.midlet.pushScreen(dialog);
     }
     return true;
   } else
   // #endif
   // #if polish.useNativeGui
   if (nextDisplayable instanceof Form) {
     Form polishForm = (Form) nextDisplayable;
     FormScreen bbForm = (FormScreen) polishForm.getNativeScreen();
     if (bbForm == null) {
       bbForm = new FormScreen(polishForm);
       polishForm.setNativeScreen(bbForm);
     }
     Object lock = Application.getEventLock();
     synchronized (lock) {
       if (screen.isDisplayed()) {
         this.midlet.popScreen(screen);
       }
       this.midlet.pushScreen(bbForm);
     }
     StyleSheet.currentScreen = polishForm;
     if (StyleSheet.animationThread == null) {
       StyleSheet.animationThread = new AnimationThread();
       StyleSheet.animationThread.start();
     }
     return true;
   }
   // #endif
   return false;
 }
  public Object invoke(Object thiz, Object[] args) {

    final String remotePath = args[0].toString();
    final String localPath = args[1].toString();
    _onProgress = (ScriptableFunction) args[2];
    _onError = (ScriptableFunction) args[3];
    _options = (Scriptable) args[4];

    if (_onProgress != null) {
      _application.invokeLater(
          new Runnable() {
            public void run() {
              try {
                new Thread(
                        new Runnable() {
                          public void run() {

                            Object objToPassWithInvoke = null;

                            try {
                              byte[] b = readFile(localPath);
                              objToPassWithInvoke = postViaHttpConnection(remotePath, b);

                            } catch (IOException e) {
                              objToPassWithInvoke = e.getMessage();
                              // e.printStackTrace();
                            }
                            try {
                              if (objToPassWithInvoke != null) {
                                invokeCallback(objToPassWithInvoke);
                              }
                            } catch (final Exception e) {

                            } finally {

                            }
                          }
                        })
                    .start();
              } catch (final Exception e) {
              }
            }
          });
    }

    return Boolean.TRUE;
  }
Пример #9
0
  private void processPushMessage(final byte[] data) {
    Application.getApplication()
        .invokeLater(
            new Runnable() {
              public void run() {
                String msg = new String(data);
                LOG.TRACE("Triger sync on PUSH message [" + msg + " ]\n");

                String[] op;
                String[] ops = split(msg, "\n");
                for (int loop = 0; loop < ops.length; loop++) {
                  if (ops[loop].startsWith("do_sync")) {
                    op = splitOnce(ops[loop], "=");
                    if (op.length <= 1 || "all".equalsIgnoreCase(op[1])) {
                      SyncThread.doSyncAllSources();
                    } else if ((op[1] != null) && (op[1].length() > 0)) {
                      SyncThread.doSyncSource(op[1].trim());
                    }
                  } else if (ops[loop].startsWith("show_popup")) {
                    op = splitOnce(ops[loop], "=");
                    if (op.length > 1) {
                      showPopup(op[1]);
                    }
                  } else if (ops[loop].startsWith("vibrate")) {
                    op = splitOnce(ops[loop], "=");
                    if (op.length > 1) {
                      vibrate(op[1]);
                    } else {
                      vibrate("2500");
                    }
                  } else if (ops[loop].startsWith("play_file")) {
                    op = splitOnce(ops[loop], "=");
                    if (op.length > 1) {
                      op = splitOnce(op[1], ",");
                      if (op.length > 1) {
                        play_file(op[0], op[1]);
                      } else {
                        play_file(op[0], null);
                      }
                    }
                  }
                }
              }
            });
  }
Пример #10
0
  public void processConnection(HttpConnection connection, Object e) {
    BrowserContent browserContent = null;

    try {
      if (connection.getResponseCode() != HttpConnection.HTTP_NOT_MODIFIED)
        browserContent = _renderingSession.getBrowserContent(connection, this, (Event) e);

      if (browserContent != null) {
        browserContent.finishLoading();

        Field field = browserContent.getDisplayableContent();
        if (field != null) {

          synchronized (Application.getEventLock()) {
            m_oMainScreen.deleteAll();
            m_oMainScreen.add(field);

            /*if ( m_oMainScreen.getFieldCount() > 0 )
            {
            	Field old = m_oMainScreen.getField(0);
            	m_oMainScreen.add(field);
            	m_oMainScreen.delete(old);
            }else
            	m_oMainScreen.add(field);*/
            /*
            _mainScreen.doPaint();
            if ( e == null )
            {//This should awake screen in case of long network response
             KeyCodeEvent inject1 = 	new KeyCodeEvent( KeyCodeEvent.KEY_DOWN, (char)Keypad.KEY_ESCAPE, 0);
             KeyCodeEvent inject2 =  new KeyCodeEvent( KeyCodeEvent.KEY_UP, (char)Keypad.KEY_ESCAPE, 0);
             inject1.post();
             inject2.post();
             m_bSkipKeyPress = true;
            }*/
          }
        }
      }
    } catch (Exception re) {
      LOG.ERROR("processConnection failed.", re);
    } finally {
      SecondaryResourceFetchThread.doneAddingImages();
    }
  }
 /**
  * Processes a new HttpConnection object to instantiate a new browser Field (aka WebView) object,
  * and then resets the screen to the newly-created Field.
  *
  * @param connection
  * @param e
  */
 public void processConnection(HttpConnection connection, Event e) {
   // Cancel previous request.
   if (_currentConnection != null) {
     try {
       _currentConnection.close();
     } catch (IOException e1) {
     }
   }
   // Clear out pending responses.
   synchronized (pendingResponses) {
     pendingResponses.removeAllElements();
   }
   // Cancel any XHRs happening.
   commandManager.stopXHR();
   _currentConnection = connection;
   BrowserContent browserContent = null;
   Field field = null;
   try {
     browserContent = _renderingSession.getBrowserContent(connection, this, e);
     if (browserContent != null) {
       field = browserContent.getDisplayableContent();
       if (field != null) {
         synchronized (Application.getEventLock()) {
           _mainScreen.deleteAll();
           _mainScreen.add(field);
         }
       }
       browserContent.finishLoading();
     }
   } catch (RenderingException re) {
   } finally {
     browserContent = null;
     field = null;
     // Manually call the garbage collector to clean up all of leftover objects and free up the
     // nulled object handles.
     System.gc();
   }
 }
 public SensorTest() {
   // Create the HelloWorldScreen and open it
   pushScreen(new SensorTestScreen());
   Sensor.addListener(Application.getApplication(), this, Sensor.HOLSTER);
 }
/** @author kwallis */
public class FunctionFileTransferUpload extends ScriptableFunction {

  public static final String NAME = "upload";
  private ScriptableFunction _onProgress;
  private ScriptableFunction _onError;
  private Scriptable _options;
  private final Application _application = Application.getApplication();

  public Object invoke(Object thiz, Object[] args) {

    final String remotePath = args[0].toString();
    final String localPath = args[1].toString();
    _onProgress = (ScriptableFunction) args[2];
    _onError = (ScriptableFunction) args[3];
    _options = (Scriptable) args[4];

    if (_onProgress != null) {
      _application.invokeLater(
          new Runnable() {
            public void run() {
              try {
                new Thread(
                        new Runnable() {
                          public void run() {

                            Object objToPassWithInvoke = null;

                            try {
                              byte[] b = readFile(localPath);
                              objToPassWithInvoke = postViaHttpConnection(remotePath, b);

                            } catch (IOException e) {
                              objToPassWithInvoke = e.getMessage();
                              // e.printStackTrace();
                            }
                            try {
                              if (objToPassWithInvoke != null) {
                                invokeCallback(objToPassWithInvoke);
                              }
                            } catch (final Exception e) {

                            } finally {

                            }
                          }
                        })
                    .start();
              } catch (final Exception e) {
              }
            }
          });
    }

    return Boolean.TRUE;
  }

  private String postViaHttpConnection(String url, byte[] b) throws IOException {
    HttpConnection c = null;
    InputStream is = null;
    OutputStream os = null;
    int rc;

    try {
      c = (HttpConnection) Connector.open(url);

      // Set the request method and headers
      c.setRequestMethod(HttpConnection.POST);

      c.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
      c.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");

      c.setRequestProperty("Content-Language", "en-US");

      // Getting the output stream may flush the headers
      os = c.openOutputStream();
      os.write(b);
      os.flush(); // Optional, getResponseCode will flush

      // Getting the response code will open the connection,
      // send the request, and read the HTTP response headers.
      // The headers are stored until requested.
      rc = c.getResponseCode();

      if (rc != HttpConnection.HTTP_OK) {
        throw new IOException("HTTP response code: " + rc);
      }

      is = c.openInputStream();

      // Get the ContentType
      String type = c.getType();
      // processType(type);

      // Get the length and process the data
      int len = (int) c.getLength();
      if (len > 0) {
        int actual = 0;
        int bytesread = 0;
        byte[] data = new byte[len];
        while ((bytesread != len) && (actual != -1)) {
          actual = is.read(data, bytesread, len - bytesread);
          bytesread += actual;
        }
        String s = "";
        for (int i = 0; i < data.length; i++) {
          s = s + (char) data[i];
        }
        return s;
      }
      // else {
      // int ch;
      // while ((ch = is.read()) != -1) {
      // process((byte)ch);
      // }
      // }

    } catch (ClassCastException e) {
      throw new IllegalArgumentException("Not an HTTP URL");
    } finally {
      if (is != null) is.close();
      if (os != null) os.close();
      if (c != null) c.close();
    }

    return "Resp"; //
  }

  private byte[] readFile(String path) {
    // scale file
    try {
      FileConnection fconn = (FileConnection) Connector.open(path);
      if (!fconn.exists()) {
        System.out.println("The file do not exist!");
      }
      InputStream input = fconn.openInputStream();
      int length = (int) fconn.fileSize(); // totalSize();

      // allocating a temporary Buffer.
      byte[] b = new byte[length];

      // reading data from a InputStream
      input.read(b, 0, length);

      fconn.close();
      return b;
    } catch (Exception ioe) {
      System.out.println(ioe.getMessage());
    }

    return new byte[0];
  }

  private void invokeCallback(Object objToPassWithInvoke) throws Exception {

    _onProgress.invoke(null, new Object[] {objToPassWithInvoke});
  }
}
  public Object eventOccurred(final Event event) {
    int eventId = event.getUID();
    switch (eventId) {
      case Event.EVENT_REDIRECT:
        {
          RedirectEvent e = (RedirectEvent) event;
          String referrer = e.getSourceURL();
          switch (e.getType()) {
            case RedirectEvent.TYPE_SINGLE_FRAME_REDIRECT:
              // Show redirect message.
              Application.getApplication()
                  .invokeAndWait(
                      new Runnable() {
                        public void run() {
                          Status.show(REDIRECT_MSG);
                        }
                      });
              break;

            case RedirectEvent.TYPE_JAVASCRIPT:
              break;

            case RedirectEvent.TYPE_META:
              // MSIE and Mozilla don't send a Referer for META Refresh.
              referrer = null;
              break;

            case RedirectEvent.TYPE_300_REDIRECT:
              // MSIE, Mozilla, and Opera all send the original request's Referer as the Referer for
              // the new request.
              Object eventSource = e.getSource();
              if (eventSource instanceof HttpConnection) {
                referrer = ((HttpConnection) eventSource).getRequestProperty(REFERER);
              }
              eventSource = null;
              break;
          }
          // Create the request, populate header with referrer and fire off the request.
          HttpHeaders requestHeaders = new HttpHeaders();
          requestHeaders.setProperty(REFERER, referrer);
          PrimaryResourceFetchThread thread =
              new PrimaryResourceFetchThread(e.getLocation(), requestHeaders, null, event, this);
          thread.start();
          e = null;
          referrer = null;
          requestHeaders = null;
          break;
        }
      case Event.EVENT_URL_REQUESTED:
        {
          UrlRequestedEvent urlRequestedEvent = (UrlRequestedEvent) event;
          String url = urlRequestedEvent.getURL();
          HttpHeaders header = urlRequestedEvent.getHeaders();
          PrimaryResourceFetchThread thread =
              new PrimaryResourceFetchThread(
                  url, header, urlRequestedEvent.getPostData(), event, this);
          thread.start();
          urlRequestedEvent = null;
          url = null;
          header = null;
          break;
        }
      case Event.EVENT_BROWSER_CONTENT_CHANGED:
        {
          // Browser field title might have changed update title.
          BrowserContentChangedEvent browserContentChangedEvent =
              (BrowserContentChangedEvent) event;
          if (browserContentChangedEvent.getSource() instanceof BrowserContent) {
            BrowserContent browserField = (BrowserContent) browserContentChangedEvent.getSource();
            String newTitle = browserField.getTitle();
            if (newTitle != null) {
              synchronized (getAppEventLock()) {
                _mainScreen.setTitle(newTitle);
              }
            }
            browserField = null;
            newTitle = null;
          }
          browserContentChangedEvent = null;
          break;
        }
      case Event.EVENT_CLOSE:
        // TODO: close the application
        break;

      case Event.EVENT_SET_HEADER: // No cache support.
      case Event.EVENT_SET_HTTP_COOKIE:
        String cookie = ((SetHttpCookieEvent) event).getCookie();
        if (cookie.startsWith(PHONEGAP_PROTOCOL)) {
          String response = commandManager.processInstruction(cookie);
          if ((response != null) && (response.trim().length() > 0)) {
            pendingResponses.addElement(response);
          }
          response = null;
        }
        cookie = null;
        break;
      case Event.EVENT_HISTORY: // TODO: No history support.. but we added our own history stack
        // implementation in ConnectionManager. Can we hook it up - then we'd have
        // access to window.history :o
      case Event.EVENT_EXECUTING_SCRIPT: // No progress bar is supported.
      case Event.EVENT_FULL_WINDOW: // No full window support.
      case Event.EVENT_STOP: // No stop loading support.
      default:
    }

    return null;
  }
Пример #15
0
  public Object eventOccurred(Event event) {

    int eventId = event.getUID();

    switch (eventId) {
      case Event.EVENT_URL_REQUESTED:
        {
          UrlRequestedEvent urlRequestedEvent = (UrlRequestedEvent) event;
          String absoluteUrl = urlRequestedEvent.getURL();

          if (urlRequestedEvent.getPostData() == null
              || urlRequestedEvent.getPostData().length == 0) m_app.addToHistory(absoluteUrl, null);

          PrimaryResourceFetchThread thread =
              new PrimaryResourceFetchThread(
                  absoluteUrl,
                  urlRequestedEvent.getHeaders(),
                  urlRequestedEvent.getPostData(),
                  event);
          thread.start();

          break;
        }
      case Event.EVENT_BROWSER_CONTENT_CHANGED:
        {

          // browser field title might have changed update title
          /*BrowserContentChangedEvent browserContentChangedEvent = (BrowserContentChangedEvent) event;

          if (browserContentChangedEvent.getSource() instanceof BrowserContent) {
              BrowserContent browserField = (BrowserContent) browserContentChangedEvent.getSource();
              String newTitle = browserField.getTitle();
              if (newTitle != null) {
                  synchronized (getAppEventLock())
              	//synchronized (Application.getEventLock())
                  {
                  	_mainScreen.setTitle(newTitle);
                  }
              }
          }*/

          break;
        }
      case Event.EVENT_REDIRECT:
        {
          RedirectEvent e = (RedirectEvent) event;
          String referrer = e.getSourceURL();
          String absoluteUrl = e.getLocation();

          switch (e.getType()) {
            case RedirectEvent.TYPE_SINGLE_FRAME_REDIRECT:
              // show redirect message
              Application.getApplication()
                  .invokeAndWait(
                      new Runnable() {
                        public void run() {
                          Status.show("You are being redirected to a different page...");
                        }
                      });

              break;

            case RedirectEvent.TYPE_JAVASCRIPT:
              break;
            case RedirectEvent.TYPE_META:
              // MSIE and Mozilla don't send a Referer for META Refresh.
              referrer = null;
              break;
            case RedirectEvent.TYPE_300_REDIRECT:
              // MSIE, Mozilla, and Opera all send the original
              // request's Referer as the Referer for the new
              // request.

              m_app.addToHistory(absoluteUrl, referrer);
              Object eventSource = e.getSource();
              if (eventSource instanceof HttpConnection) {
                referrer = ((HttpConnection) eventSource).getRequestProperty("referer");
              }
              break;
          }

          HttpHeaders requestHeaders = new HttpHeaders();
          requestHeaders.setProperty("referer", referrer);
          PrimaryResourceFetchThread thread =
              new PrimaryResourceFetchThread(absoluteUrl, requestHeaders, null, event);
          thread.start();
          break;
        }
      case Event.EVENT_CLOSE:
        // TODO: close the application
        break;

      case Event.EVENT_SET_HEADER:
      case Event.EVENT_SET_HTTP_COOKIE:
        {
          String cookie = ((SetHttpCookieEvent) event).getCookie();
          String strUrl = ((SetHttpCookieEvent) event).getURL();
          m_app.setCookie(strUrl, cookie);
          /*
          String response = processAjaxCall(cookie);
          if (response != null)
          	synchronized (pendingResponses) {
          		pendingResponses.addElement(response);
          	}
          response = null;
            	cookie = null;*/
          break;
        }
      case Event.EVENT_HISTORY: // no history support
      case Event.EVENT_EXECUTING_SCRIPT: // no progress bar is supported
      case Event.EVENT_FULL_WINDOW: // no full window support
      case Event.EVENT_STOP: // no stop loading support
      default:
    }

    return null;
  }
  /* @Override */
  public Object invoke(final Object thiz, final Object[] args) throws Exception {

    String contentArg = null;
    ScriptableFunction onGenerateArg = null;
    ScriptableFunction onErrorArg = null;
    Scriptable optionsArg = null;

    if (args.length < 2) {
      throw new IllegalArgumentException("Missing Captured Callback");
    } else {
      contentArg = (String) args[0];
      onGenerateArg = (ScriptableFunction) args[1];
      if (args.length > 2) {
        onErrorArg = (ScriptableFunction) args[2];
        if (args.length > 3) {
          optionsArg = (Scriptable) args[3];
        }
      }
    }

    final String contents = contentArg;
    final ScriptableFunction generatededCallback = onGenerateArg;
    final ScriptableFunction errorCallback = onErrorArg;
    final Scriptable options = optionsArg;

    Application.getApplication()
        .invokeLater(
            new Runnable() {

              private final String[] ALLOWED_EXTENSIONS = {"jpq", "jpeg", "png"};

              public void run() {

                FileConnection fconn = null;
                try {
                  MultiFormatWriter writer = new MultiFormatWriter();

                  int width = 50;
                  int height = 50;
                  BarcodeFormat format = BarcodeFormat.QR_CODE;
                  Hashtable hints = new Hashtable(2);
                  String filePath = "file:///SDCard/";
                  String fileName = "" + (new Date()).getTime();
                  String fileExtension = "png";

                  if (options != null) {
                    Object widthObj = options.getField("width");
                    if (widthObj != UNDEFINED) {
                      width = ((Integer) widthObj).intValue();
                    }

                    Object heightObj = options.getField("height");
                    if (heightObj != UNDEFINED) {
                      height = ((Integer) heightObj).intValue();
                    }

                    Object formatObj = options.getField("format");
                    if (formatObj != UNDEFINED) {
                      format = BarcodeFormat.valueOf(((String) formatObj).toUpperCase());
                    }

                    // Hints
                    Object charSetObj = options.getField("characterSet");
                    if (charSetObj != UNDEFINED) {
                      hints.put(EncodeHintType.CHARACTER_SET, (String) charSetObj);
                    }
                    Object errorCorrectionObj = options.getField("errorCorrection");
                    if (errorCorrectionObj != UNDEFINED) {
                      hints.put(EncodeHintType.ERROR_CORRECTION, (Integer) errorCorrectionObj);
                    }

                    Object filePathObj = options.getField("filePath");
                    if (filePathObj != UNDEFINED) {
                      String filePathOrig = (String) filePathObj;
                      fileExtension = filePathOrig.substring(filePathOrig.lastIndexOf('.') + 1);
                      fileName =
                          filePathOrig.substring(
                              filePathOrig.lastIndexOf('/') + 1, filePathOrig.lastIndexOf('.'));
                      filePath = filePathOrig.substring(0, filePathOrig.lastIndexOf('/'));

                      boolean validExtension = false;
                      for (int i = 0; i < ALLOWED_EXTENSIONS.length; i++) {
                        validExtension |= fileExtension.equals(ALLOWED_EXTENSIONS[i]);
                      }
                      if (!validExtension) {
                        fileExtension = "png";
                      }
                    }
                  }

                  ByteMatrix bm;
                  try {
                    bm = writer.encode(contents, format, width, height, hints);
                  } catch (ClassCastException cce) {
                    throw new Exception(
                        "ZXing Barcode Writer FAILURE - try different paramteres and pray");
                  }
                  // Bitmap b = BarcodeBitmap.createBitmap(bm,0);
                  Bitmap b = new Bitmap(width, height);

                  byte[][] array = bm.getArray();
                  // iterate through the matrix and draw the pixels to the image
                  // a Jeff and BT super hack to make generating a barcode work
                  for (int y = 0; y < height; y++) {
                    int[] argbArray = new int[width];
                    for (int x = 0; x < width; x++) {
                      int grayValue = array[y][x] & 0xff;
                      int pixel = (grayValue == 0 ? 0xFF000000 : 0xFFFFFFFF);
                      argbArray[x] = pixel;
                    }
                    b.setARGB(argbArray, 0, width, 0, y, width, 1);
                  }

                  fconn =
                      (FileConnection)
                          Connector.open(
                              filePath + "/" + fileName + "." + fileExtension,
                              Connector.READ_WRITE);

                  if (fconn.exists()) {
                    fileName += (new Date()).getTime();
                    fconn.close();
                    fconn =
                        (FileConnection)
                            Connector.open(
                                filePath + "//" + fileName + "." + fileExtension,
                                Connector.READ_WRITE);
                  }

                  fconn.create();

                  OutputStream outputStream = fconn.openOutputStream();
                  EncodedImage encodedImage;
                  if (fileExtension.equals("jpg") || fileExtension.equals("jpeg")) {
                    encodedImage = JPEGEncodedImage.encode(b, 100);
                  } else {
                    encodedImage = PNGEncodedImage.encode(b);
                  }
                  byte[] imageBytes = encodedImage.getData();
                  outputStream.write(imageBytes);
                  outputStream.close();

                  fconn.close();
                  Object[] args = {filePath + "//" + fileName + "." + fileExtension};
                  generatededCallback.invoke(thiz, args);

                } catch (Exception e) {
                  throwError(e);
                } finally {
                  try {
                    fconn.close();
                  } catch (IOException e) {
                    throwError(e);
                  }
                }
              }

              public void throwError(Exception e) {
                if (errorCallback != null) {

                  try {
                    errorCallback.invoke(thiz, new Object[] {new ErrorObject(-1, e.getMessage())});
                  } catch (Exception e1) {
                  }
                }
              }
            });

    return UNDEFINED;
  }