Android Open Source - SmartTools Device Panel






From Project

Back to project page SmartTools.

License

The source code is released under:

GNU General Public License

If you think the Android project SmartTools listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.nj.simba.page.device;
/*from   ww  w. java 2  s  . c o m*/
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.Timer;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import com.android.ddmlib.IDevice;
import com.nj.simba.app.SmartToolsApp;
import com.nj.simba.IDeviceInfo;
import com.nj.simba.IDeviceInfo.DeviceFeature;
import com.nj.simba.ctrls.ImageBtn;
import com.nj.simba.ctrls.LeftPanel;
import com.nj.simba.utils.Config;
import com.nj.simba.utils.Utils;

public class DevicePanel extends LeftPanel {
  private JLabel mDeviceInfo;
  private JLabel mDeviceScreenshot;
  private IDevice mCurDevice;
  private boolean mIsPlaying;
  private Timer mPlayTimer;

  public DevicePanel(JPanel parent, int x, int y, int w, int h) {
    super(parent, x, y, w, h);
  }

  public DevicePanel(JPanel parent) {
    super(parent, 0, 0,
        Config.PANEL_LEFT_WIDTH, Config.WIN_PANEL_H);
  }

  @Override
    public void createPanel() {
    super.createPanel();
    
    ImageIcon deviceOffImg = Utils.getResImage("res/device-off.png");
    JLabel device = new JLabel(deviceOffImg);
    device.setBounds(6, 16, 230,320);
    device.setBorder(BorderFactory.createLineBorder(Color.GRAY));
    mParentPanel.add(device);
    mDeviceScreenshot = device;

    JButton btn1 = new ImageBtn("res/capture.png", 6, 340, 56, 30);
    btn1.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        saveScreenshot();
      }
    });

    JButton btn2 = new ImageBtn("res/refresh.png", 64, 340, 56, 30);
    btn2.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        updateScreenshot(mDeviceScreenshot);
      }
    });

    JButton btn3 = new ImageBtn("res/fullscr.png", 122, 340, 56, 30);
    btn3.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        fullScreenScreenshot();
      }
    });

    JButton btn4 = new ImageBtn("res/menu.png", 180, 340, 56, 30);
    btn4.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        JPopupMenu popup = new JPopupMenu("Select Device");
        popup.add("N986");
        popup.add("U5S");
        popup.show((Component) e.getSource(), 0, 30);
      }
    });

    mParentPanel.add(btn1);
    mParentPanel.add(btn2);
    mParentPanel.add(btn3);
    mParentPanel.add(btn4);

    mDeviceInfo = new JLabel();
    mDeviceInfo.setBounds(6, 380, 230, 200);
    mDeviceInfo.setForeground(Config.default_font_color);
    mDeviceInfo.setVerticalAlignment(JLabel.TOP);
    mDeviceInfo.setOpaque(false);
    mParentPanel.add(mDeviceInfo);
  }

  void updateScreenshot(final JLabel screenLabel) {
      System.out.println("updateScreenshot");
      
    new Thread(new Runnable() {
      @Override
      public void run() {
        final ImageIcon screenShot = getScreenshot(mCurDevice,
            screenLabel.getWidth(), screenLabel.getHeight()-8);

        SwingUtilities.invokeLater(new Runnable() {
          @Override
          public void run() {
            screenLabel.setIcon(screenShot);
          }
        });
      }
    }).start();
  }

  @SuppressWarnings("serial")
  void fullScreenScreenshot() {
    if (new File(Config.sreenshot).exists() == false) {
      return;
    }

    final JFrame fullScreen = new JFrame();
    fullScreen.setUndecorated(true);
    fullScreen.setBackground(Color.BLACK);

    JPanel contentPanel = (JPanel) fullScreen.getContentPane();
    contentPanel.setLayout(null);
    contentPanel.setOpaque(false);

    /**
     * 1. full screen panel
     */
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

    Rectangle bounds = new Rectangle(screenSize);
    Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(
        fullScreen.getGraphicsConfiguration());

    bounds.x += insets.left;
    bounds.y += insets.top;
    bounds.width -= insets.left + insets.right;
    bounds.height -= insets.top + insets.bottom;
    fullScreen.setBounds(bounds);

    /**
     * 2. create device screenshot image label
     */
    final JLabel screenLabel = new JLabel();

    ImageIcon deviceScreenImg = new ImageIcon(Config.sreenshot);
    int iconW = deviceScreenImg.getIconWidth();
    int iconH = deviceScreenImg.getIconHeight();
    int[] props = Utils.getProperSize(iconW, iconH, bounds.width,
        bounds.height);
    int imageX = (bounds.width - props[0]) >> 1;

    screenLabel.setBounds(imageX, 0, props[0], props[1]);
    screenLabel.setIcon(Utils.getProperRatioImage(deviceScreenImg,
        props[0], props[1]));
    contentPanel.add(screenLabel);

    /**
     * 3. create exit button
     */
    JButton btnExit = new ImageBtn("res/close.png", bounds.width - 120, 16,
        100, 32);
    btnExit.setOpaque(false);
    btnExit.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        fullScreen.dispose();
        mPlayTimer.stop();
      }
    });
    contentPanel.add(btnExit);

    /**
     * 4. create play/pause button
     */
    ImageBtn btnPlay = new ImageBtn("res/play.png", bounds.width - 120,
        120, 100, 32);
    btnPlay.setOpaque(false);
    btnPlay.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        if (mPlayTimer == null) {
          return;
        }

        ImageBtn btnPlay = (ImageBtn) e.getSource();
        if (mIsPlaying) {
          btnPlay.setIcon("res/pause.png");
          mPlayTimer.stop();
        } else {
          btnPlay.setIcon("res/play.png");
          mPlayTimer.start();
        }

        mIsPlaying = !mIsPlaying;
      }
    });
    contentPanel.add(btnPlay);

    /**
     * 4. create rotate button
     */
    JButton btnRotateLeft = new ImageBtn("res/rotate1.png",
        bounds.width - 120, 168, 100, 32);
    btnRotateLeft.setOpaque(false);
    btnRotateLeft.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        updateScreenshot(screenLabel);
      }
    });
    contentPanel.add(btnRotateLeft);

    JButton btnRotateRight = new ImageBtn("res/rotate2.png",
        bounds.width - 120, 216, 100, 32);
    btnRotateRight.setOpaque(false);
    btnRotateRight.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        updateScreenshot(screenLabel);
      }
    });
    contentPanel.add(btnRotateRight);

    /**
     * 5. show panel
     */
    // fullScreen.pack();
    fullScreen.setVisible(true);
    fullScreen.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    /**
     * 6. timer to update screenshot
     */
    if (mPlayTimer != null && mPlayTimer.isRunning()) {
      mPlayTimer.stop();
    } else {
      mPlayTimer = new Timer(2000, new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
          updateScreenshot(screenLabel);
        }
      });
    }

    mPlayTimer.start();
    mIsPlaying = true;
  }

  void saveScreenshot() {
    File source = new File(Config.sreenshot);
    if (source.exists() == false) {
      return;
    }

    JFileChooser chooser = new JFileChooser("./");
    chooser.addChoosableFileFilter(new ImageFileFilter());

    // cancel or error, just return
    if (chooser.showSaveDialog(mParentPanel) != JFileChooser.APPROVE_OPTION) {
      return;
    }

    File file = chooser.getSelectedFile();

    try {
      if (file.exists() == false) {
        file.createNewFile();
      }

      byte[] b = new byte[(int) source.length()];
      BufferedInputStream in = new BufferedInputStream(
          new FileInputStream(Config.sreenshot));
      in.read(b);
      in.close();

      BufferedOutputStream out = new BufferedOutputStream(
          new FileOutputStream(file));
      out.write(b);
      out.flush();
      out.close();

    } catch (IOException ex) {
      // TODO: handle exception
    }
  }

  public static class ImageFileFilter extends FileFilter {

    @Override
    public boolean accept(File f) {
      return f.getName().toLowerCase().endsWith("png");
    }

    @Override
    public String getDescription() {
      return "*.png(image file)";
    }

  }

  public ImageIcon getScreenshot(IDevice device, int dstW, int dstH) {
    if (device == null) {
      return Utils.getResImage("res/device-off.png");
    }

    return Utils.getProperRatioImage(Utils.getScreenshot(device), dstW,
        dstH);
  }

  /**
   * "<html>Device: %1$s<br/>
   * Version: %2$s<br/>
   * Date: %3$s<br/>
   * Finger: %4$s<br/>
   * ";
   */
  public void updateDeviceInfo(SmartToolsApp app) {
      IDeviceInfo deviceInfo = app.getDeviceInfo();
      if ( deviceInfo == null ) {
          return;
      }
      
      DeviceFeature feature = deviceInfo.mFeatures;
      if ( feature == null ) {
          return;
      }
      
      mCurDevice = app.getCurDevice();
      
      int w = feature.lcdWidth;
      int h = feature.lcdHeight;
      float dpi = feature.lcdDensity;
      double size = Math.sqrt(w*w+h*h)/(160*dpi);
      
      String androidName = Utils.getAndroidName(feature.androidVersion);
      String deviceName = feature.deviceName;
      String imageVersion = feature.imageVersion;
      
    final String display = String.format(Config.device_info_format3, w,
        h, dpi, size, androidName, deviceName, imageVersion);
    
    System.out.println(display);

    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        mDeviceInfo.setText(display);
      }
    });

    updateScreenshot(mDeviceScreenshot);
  }
}




Java Source Code List

com.nj.simba.BatteryReceiver.java
com.nj.simba.DaemonController.java
com.nj.simba.DeviceInfo.java
com.nj.simba.DviceInfoCollector.java
com.nj.simba.IDeviceInfo.java
com.nj.simba.PackageReceiver.java
com.nj.simba.SdcardStatuChangeReceiver.java
com.nj.simba.SmartToolService.java
com.nj.simba.app.MainFrame.java
com.nj.simba.app.SmartToolsApp.java
com.nj.simba.app.ToolbarPanel.java
com.nj.simba.base.IDeviceListener.java
com.nj.simba.base.IDeviceReqListener.java
com.nj.simba.connect.DeviceCmdWorker.java
com.nj.simba.connect.DeviceConnectWorker.java
com.nj.simba.connect.DeviceMessage.java
com.nj.simba.connect.DeviceMsgChannel.java
com.nj.simba.ctrls.FilerListRender.java
com.nj.simba.ctrls.ImageBtn.java
com.nj.simba.ctrls.LeftPanel.java
com.nj.simba.ctrls.MetroCoolBtn.java
com.nj.simba.ctrls.MyProgessBar.java
com.nj.simba.ctrls.SubPanel.java
com.nj.simba.ctrls.TabPanel.java
com.nj.simba.ctrls.ThemeButton.java
com.nj.simba.ctrls.ThemeLabel.java
com.nj.simba.ctrls.ToolbarBtn.java
com.nj.simba.cts.CtsResultReset.java
com.nj.simba.page.appmgr.AppTableRender.java
com.nj.simba.page.appmgr.DeviceAppTableModel.java
com.nj.simba.page.appmgr.PageAppMgr.java
com.nj.simba.page.device.DeviceListRender.java
com.nj.simba.page.device.DevicePanel.java
com.nj.simba.page.device.PageMyDevice.java
com.nj.simba.page.filer.FileTableRender.java
com.nj.simba.page.filer.PageFiler.java
com.nj.simba.page.logcat.ILogCatBufferChangeListener.java
com.nj.simba.page.logcat.LogCatMessageList.java
com.nj.simba.page.logcat.LogCatMessageParser.java
com.nj.simba.page.logcat.LogCatMessage.java
com.nj.simba.page.logcat.LogCatPidToNameMapper.java
com.nj.simba.page.logcat.LogCatReceiverFactory.java
com.nj.simba.page.logcat.LogCatReceiver.java
com.nj.simba.page.logcat.PageLogcat.java
com.nj.simba.utils.Config.java
com.nj.simba.utils.FileSyncHelper.java
com.nj.simba.utils.I2CTest.java
com.nj.simba.utils.IProgressMonitor.java
com.nj.simba.utils.SyncProgressHelper.java
com.nj.simba.utils.SyncProgressMonitor.java
com.nj.simba.utils.Utils.java