Add translation selection feature in java ui

Add feature in GUI to display different translations.

Test: make -j 55 TeeuiFramebufferizer && LD_LIBRARY_PATH=./out/host/linux-x86/lib64 TeeuiFramebufferizer

Change-Id: If8660aa233846e6398abd328978834a0043d8fc5
diff --git a/tools/framebufferizer/Android.bp b/tools/framebufferizer/Android.bp
index 0ed202d..96ea4ae 100644
--- a/tools/framebufferizer/Android.bp
+++ b/tools/framebufferizer/Android.bp
@@ -3,10 +3,9 @@
 
 java_binary_host {
     name: "TeeuiFramebufferizer",
-    srcs: ["src/**/*.java"],
+    srcs: ["src/com/android/framebufferizer/**/*.java"],
     manifest: "manifest-teeui-framebufferizer.mf",
     required: [
         "libteeui_jni",
     ]
 }
-
diff --git a/tools/framebufferizer/src/com/android/framebufferizer/Main.java b/tools/framebufferizer/src/com/android/framebufferizer/Main.java
index 7d81fd3..8bd76dd 100644
--- a/tools/framebufferizer/src/com/android/framebufferizer/Main.java
+++ b/tools/framebufferizer/src/com/android/framebufferizer/Main.java
@@ -38,12 +38,14 @@
         theFramebuffer.setFrame(theFrame);
         FrameBufferBuffer.MagnifiedView magnifiedView = theFramebuffer.getMagnifiedView();
         FrameBufferBuffer.DeviceSelector deviceSelector = theFramebuffer.getDeviceSelector();
+        FrameBufferBuffer.LanguageSelector languageSelector = theFramebuffer.getLanguageSelector();
         magnifiedView.setPreferredSize(new Dimension(100, 100));
         magnifiedView.setMinimumSize(new Dimension(100, 100));
         magnifiedView.setMaximumSize(new Dimension(100, 100));
         theFrame.getContentPane().add(magnifiedView, BorderLayout.EAST);
         theFrame.getContentPane().add(theFramebuffer, BorderLayout.CENTER);
         theFrame.getContentPane().add(deviceSelector, BorderLayout.NORTH);
+        theFrame.getContentPane().add(languageSelector, BorderLayout.SOUTH);
         theFrame.pack();
         theFrame.setVisible(true);
         deviceSelector.refreshSelections();
diff --git a/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java b/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java
index e670123..0198892 100644
--- a/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java
+++ b/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java
@@ -25,4 +25,6 @@
 
     public static native int setDeviceInfo(DeviceInfo deviceInfo, boolean magnified);
     public static native int renderBuffer(int x, int y, int width, int height, int lineStride, int[] buffer);
+    public static native void setLanguage(String language_id);
+    public static native String[] getLanguageIdList();
 }
diff --git a/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java b/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java
index aefa8dc..a1104f1 100644
--- a/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java
+++ b/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java
@@ -87,7 +87,6 @@
 
     }
 
-    public static enum Devices { CORAL, BONITO, SARGO, CROSSHATCH, BLUELINE;}
 
     public class DeviceSelector extends JPanel implements ActionListener {
         private JComboBox<String> dropDownMenu = new JComboBox(DeviceInfoDB.Device.values());
@@ -107,7 +106,7 @@
         }
 
         public void refreshSelections(){
-            dropDownMenu.setSelectedItem(Devices.CORAL);
+            dropDownMenu.setSelectedItem(DeviceInfoDB.Device.CORAL);
         }
 
         public DeviceInfoDB.Device currentDevice() {
@@ -119,11 +118,33 @@
         }
     }
 
+    public class LanguageSelector extends JPanel implements ActionListener {
+        String languages [] = NativeRenderer.getLanguageIdList();
+
+        private JComboBox<String> dropDownMenu;
+
+        protected LanguageSelector() {
+            dropDownMenu = new JComboBox(languages);
+            dropDownMenu.addActionListener(this);
+            this.add(dropDownMenu);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            synchronized (this) {
+                String language = (String) dropDownMenu.getSelectedItem();
+                NativeRenderer.setLanguage(language);
+                FrameBufferBuffer.this.calibrateNativeBuffer();
+            }
+        }
+
+    }
+
 
     private BufferedImage mImage;
     private DataBufferInt mBuffer;
     private MagnifiedView mMagnifiedView;
     private DeviceSelector mDeviceSelector;
+    private LanguageSelector mLanguageSelector;
     private JFrame mFrame;
 
     public MagnifiedView getMagnifiedView() {
@@ -140,6 +161,13 @@
         return mDeviceSelector;
     }
 
+    public LanguageSelector getLanguageSelector(){
+        if (mLanguageSelector == null){
+            mLanguageSelector = new LanguageSelector();
+        }
+        return mLanguageSelector;
+    }
+
     @Override
     public void mouseDragged(MouseEvent e) {
 
@@ -186,29 +214,6 @@
     public void componentResized(ComponentEvent e) {
         calibrateNativeBuffer();
         repaint();
-        /* get set values and then let it resize based off of the values passed through this */
-        // int w = getWidth();
-        // int h = getHeight();
-        // System.out.println( "width=" + getWidth() + " height=" + getHeight());
-        // final int linestride = w;
-        // final int rMask = 0xff;
-        // final int gMask = 0xff00;
-        // final int bMask = 0xff0000;
-        // final int bpp = 24;
-        // synchronized (this) {
-        //     mBuffer = new DataBufferInt(h * linestride);
-        //     WritableRaster raster = Raster.createPackedRaster(mBuffer, w, h, linestride,
-        //             new int[]{rMask, gMask, bMask}, null);
-        //     ColorModel colorModel = new DirectColorModel(bpp, rMask, gMask, bMask);
-        //     mDeviceSelector.mImage = new BufferedImage(colorModel, raster, true, null);
-        //     NativeRenderer.setDeviceInfo(w, h, -1, w/412.0, 5.5);
-        //     int error = NativeRenderer.renderBuffer(0, 0, w, h, linestride, mBuffer.getData());
-        //     if (error != 0) {
-        //         System.out.println("Error rendering native buffer " + error);
-        //     }
-        // }
-        // repaint();
-        // how to resize within ratio of everything
     }
     @Override
     public void componentMoved(ComponentEvent e) {
@@ -237,8 +242,12 @@
     }
 
     public void calibrateNativeBuffer(){
-        DeviceInfo deviceInfo = DeviceInfoDB.getDeviceInfo(getDeviceSelector().currentDevice());
-        boolean magnified = getDeviceSelector().magnified();
+      DeviceInfo deviceInfo = DeviceInfoDB.getDeviceInfo(getDeviceSelector().currentDevice());
+      boolean magnified = getDeviceSelector().magnified();
+      renderNativeBuffer(deviceInfo, magnified);
+      repaint();
+    }
+    public int renderNativeBuffer(DeviceInfo deviceInfo, boolean magnified){
         int w = deviceInfo.getWidthPx();
         int h = deviceInfo.getHeightPx();
         final int linestride = w;
@@ -246,6 +255,7 @@
         final int gMask = 0xff00;
         final int bMask = 0xff0000;
         final int bpp = 24;
+        int error = 0;
         synchronized (this) {
             mBuffer = new DataBufferInt(h * linestride);
             WritableRaster raster = Raster.createPackedRaster(mBuffer, w, h, linestride,
@@ -253,7 +263,7 @@
             ColorModel colorModel = new DirectColorModel(bpp, rMask, gMask, bMask);
             BufferedImage image = new BufferedImage(colorModel, raster, true, null);
             NativeRenderer.setDeviceInfo(deviceInfo, magnified);
-            int error = NativeRenderer.renderBuffer(0, 0, w, h, linestride, mBuffer.getData());
+            error = NativeRenderer.renderBuffer(0, 0, w, h, linestride, mBuffer.getData());
             if (error != 0) {
                 System.out.println("Error rendering native buffer " + error);
             }
@@ -266,6 +276,6 @@
             gc.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
             gc.drawRenderedImage(image, AffineTransform.getScaleInstance(scale, scale));
         }
-        repaint();
+        return error;
     }
 }