From 383e74fe7a351bf253becd9408699a375a0a1a5c Mon Sep 17 00:00:00 2001 From: vvashchenko <vitaliy.vashchenko@nic.cz> Date: Mon, 21 Mar 2016 16:55:10 +0100 Subject: [PATCH] Code optimization. --- .../camera/AndroidDeviceCameraController.java | 44 +----- .../tablexia/screen/camera/CameraScreen.java | 134 ++++++++++-------- .../util/camera/DeviceCameraControl.java | 10 -- .../tablexia/util/qrcode/QrCodeEncoder.java | 15 +- 4 files changed, 84 insertions(+), 119 deletions(-) diff --git a/android/src/main/java/cz/nic/tablexia/android/camera/AndroidDeviceCameraController.java b/android/src/main/java/cz/nic/tablexia/android/camera/AndroidDeviceCameraController.java index fccb0a854..ce986b56c 100644 --- a/android/src/main/java/cz/nic/tablexia/android/camera/AndroidDeviceCameraController.java +++ b/android/src/main/java/cz/nic/tablexia/android/camera/AndroidDeviceCameraController.java @@ -29,9 +29,7 @@ public class AndroidDeviceCameraController implements DeviceCameraControl, Camer private CameraCallback cameraCallback; private CameraSurface cameraSurface; private ScreenOrientationListener screenOrientationListener; - - private String decodedData; - private boolean decoded = false; + private boolean previewReady = false; int mWidth, mHeight, mLeft, mTop, mAreaWidth, mAreaHeight; @@ -109,16 +107,6 @@ public class AndroidDeviceCameraController implements DeviceCameraControl, Camer previewReady = false; } - @Override - public synchronized void pausePreview() { - Log.debug(getClass().getSimpleName(), "pausePreview"); - if (cameraSurface!=null && cameraSurface.getCamera() != null){ - cameraSurface.getCamera().setPreviewCallback(null); - cameraSurface.getCamera().stopPreview(); - previewReady = true; - } - } - @Override public int getPreviewWidth() { return cameraSurface.getCamera().getParameters().getPreviewSize().width; @@ -164,23 +152,11 @@ public class AndroidDeviceCameraController implements DeviceCameraControl, Camer activity.post(r); } - @Override - public void pausePreviewAsync() { - Runnable r = new Runnable() { - @Override - public void run() { - pausePreview(); - } - }; - activity.post(r); - } - @Override public boolean isPreviewReady() { return previewReady; } - - + @Override public boolean isReady() { if (cameraSurface != null && cameraSurface.getCamera() != null) { @@ -189,22 +165,6 @@ public class AndroidDeviceCameraController implements DeviceCameraControl, Camer return false; } - @Override - public boolean isDecoded() { - return decoded; - } - - @Override - public void resetDecoded() { - decoded = false; - decodedData = null; - } - - @Override - public String getDecodedData() { - return decodedData; - } - @Override public void onPreviewFrame(byte[] bytes, Camera camera) { if (cameraCallback != null && !cameraCallback.hasDataToProceed()) { diff --git a/core/src/cz/nic/tablexia/screen/camera/CameraScreen.java b/core/src/cz/nic/tablexia/screen/camera/CameraScreen.java index a55f5cd61..d5025bf04 100644 --- a/core/src/cz/nic/tablexia/screen/camera/CameraScreen.java +++ b/core/src/cz/nic/tablexia/screen/camera/CameraScreen.java @@ -30,6 +30,7 @@ import cz.nic.tablexia.sync.work.SyncWork; import cz.nic.tablexia.util.Log; import cz.nic.tablexia.util.camera.CameraCallback; import cz.nic.tablexia.util.camera.DeviceCameraControl; +import cz.nic.tablexia.util.ui.dialog.TablexiaComponentDialog; import cz.nic.tablexia.util.ui.dialog.TablexiaComponentDialogFactory; import cz.nic.tablexia.util.ui.dialog.components.BackButtonHideComponent; import cz.nic.tablexia.util.ui.dialog.components.CenterPositionDialogComponent; @@ -46,18 +47,26 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera private Mode mode; private static DeviceCameraControl deviceCameraControl; private int DIALOG_WIDTH = 450; - private int DIALOG_HEIGHT = 400; + private int DIALOG_HEIGHT = 300; private boolean sizeIsSet = false; private int left, top, height, width, innerWidth, innerHeight; private String decodedData; private boolean decoded; private boolean hasData; + private TablexiaComponentDialog dialog; ShapeRenderer shapeRenderer; + public enum Mode { + prepare, + preview, + done; + } + @Override public void scanPreviewData(byte[] data) { hasData = true; + setArea(); LuminanceSource source = new PlanarYUVLuminanceSource(data, width, height, left, top, innerWidth, innerHeight, false); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; @@ -68,14 +77,15 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera Log.debug(getClass().getSimpleName(), decodedData); decoded = true; mode = Mode.done; + Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1f); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); + deviceCameraControl.stopPreviewAsync(); Gdx.app.postRunnable(new Runnable() { @Override public void run() { showConfirmDialog(); } }); - - } catch (NotFoundException e) { e.printStackTrace(); hasData = false; @@ -92,21 +102,13 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera return hasData; } - public enum Mode { - prepare, - preview, - done; - } - @Override protected void screenLoaded(Map<String, String> screenState) { deviceCameraControl = Tablexia.getDeviceCameraControl(); deviceCameraControl.setCameraCallback(this); deviceCameraControl.resetDecoded(); if (deviceCameraControl != null) { - deviceCameraControl.prepareCameraAsync(); - mode = Mode.prepare; - hasData = false; + resetState(); } shapeRenderer = new ShapeRenderer(); @@ -114,15 +116,18 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera @Override protected void screenPaused(Map<String, String> screenState) { - deviceCameraControl.stopPreviewAsync(); + if (!decoded) { + deviceCameraControl.stopPreviewAsync(); + } Log.debug(getClass(), "screenPaused"); -// super.pause(); } @Override protected void screenResumed() { Log.debug(getClass(), "screenResumed"); - deviceCameraControl.startPreviewAsync(); + if (!decoded) { + deviceCameraControl.startPreviewAsync(); + } } @Override @@ -134,11 +139,12 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera @Override protected void screenRender(float delta) { Mode prev = mode; - Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); + switch (mode) { case preview: if (deviceCameraControl.isPreviewReady()) { + Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); drawRectangle(); } break; @@ -150,7 +156,6 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera mode = Mode.preview; } break; - case done: default: break; } @@ -164,7 +169,7 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera // TODO: 15.3.16 add proper dialog text private void showConfirmDialog() { Log.debug(getClass(), "Showing dialog with " + decodedData); - TablexiaComponentDialogFactory.getInstance().createYesNoDialog( + dialog = TablexiaComponentDialogFactory.getInstance().createYesNoDialog( ApplicationTextManager.getInstance().getText(ApplicationTextManager.ApplicationTextsAssets.SYNC_QR_REQUEST_ON_DECODED_DIALOG_TEXT) + decodedData, new ClickListener() { @Override @@ -172,52 +177,19 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera super.clicked(event, x, y); Log.debug(getClass(), "your user sync can be here"); backToMenu(); -// syncUser(deviceCameraControl.getDecodedData()); + // TODO: 21.3.16 sync work } }, new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); -// deviceCameraControl.resetDecoded(); - hasData = false; - decodedData = null; - if (!deviceCameraControl.isPreviewReady()) { - deviceCameraControl.startPreviewAsync(); - } - mode = Mode.preview; - + resetState(); } - }).show(DIALOG_WIDTH, DIALOG_WIDTH); - } - - private void drawRectangle() { - setArea(); - shapeRenderer.begin(ShapeRenderer.ShapeType.Line); - shapeRenderer.setColor(Color.RED); - shapeRenderer.rect(left, top, innerWidth, innerHeight); - shapeRenderer.end(); - } - - private void setArea() { - if (!sizeIsSet) { - width = Gdx.graphics.getWidth(); - height = Gdx.graphics.getHeight(); - innerWidth = width / 2; - innerHeight = height / 2; - left = width / 4; - top = height / 4; - sizeIsSet = true; - } - } - - private void backToMenu() { - Log.debug(getClass(), "backToMenu"); - ApplicationBus.getInstance().post(new UserMenu.RefreshUserMenu()).asynchronously(); - ApplicationBus.getInstance().post(new Tablexia.ChangeScreenEvent(TablexiaSettings.LOADER_SCREEN, TablexiaApplication.ScreenTransaction.FADE)).asynchronously(); + }); + dialog.show(DIALOG_WIDTH, DIALOG_HEIGHT); } - // TODO: 11.3.16 Call user sync private void syncUser(String userId) { DownloadUser syncWork = new DownloadUser(userId); syncWork.registerListener(new SyncWork.RestSyncListener() { @@ -245,6 +217,40 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera }); RestSynchronizationService.doSyncWork(syncWork); } + + private void drawRectangle() { + setArea(); + shapeRenderer.begin(ShapeRenderer.ShapeType.Line); + shapeRenderer.setColor(Color.RED); + shapeRenderer.rect(left, top, innerWidth, innerHeight); + shapeRenderer.end(); + } + + private void resetState(){ + hasData = false; + decodedData = null; + decoded = false; + deviceCameraControl.prepareCameraAsync(); + mode = Mode.prepare; + } + + private void setArea() { + if (!sizeIsSet) { + width = Gdx.graphics.getWidth(); + height = Gdx.graphics.getHeight(); + innerWidth = width / 2; + innerHeight = height / 2; + left = width / 4; + top = height / 4; + sizeIsSet = true; + } + } + + private void backToMenu() { + Log.debug(getClass(), "backToMenu"); + ApplicationBus.getInstance().post(new UserMenu.RefreshUserMenu()).asynchronously(); + ApplicationBus.getInstance().post(new Tablexia.ChangeScreenEvent(TablexiaSettings.LOADER_SCREEN, TablexiaApplication.ScreenTransaction.FADE)).asynchronously(); + } @Override @@ -253,12 +259,14 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera if (deviceCameraControl == null) { deviceCameraControl = Tablexia.getDeviceCameraControl(); } - if (deviceCameraControl.isPreviewReady()) { - mode = Mode.preview; - } else { - deviceCameraControl.prepareCameraAsync(); - mode = Mode.prepare; + if (!decoded) { + if (deviceCameraControl.isPreviewReady()) { + mode = Mode.preview; + } else { + deviceCameraControl.prepareCameraAsync(); + mode = Mode.prepare; + } } sizeIsSet = false; } @@ -274,7 +282,9 @@ public class CameraScreen extends AbstractTablexiaScreen<Void> implements Camera @Override public void backButtonPressed() { Log.debug(getClass(), "backButtonPressed"); - + if (dialog != null) { + dialog.hide(); + } ApplicationBus.getInstance().post(new Tablexia.ChangeScreenEvent(TablexiaSettings.LOADER_SCREEN, TablexiaApplication.ScreenTransaction.FADE)).asynchronously(); } } diff --git a/core/src/cz/nic/tablexia/util/camera/DeviceCameraControl.java b/core/src/cz/nic/tablexia/util/camera/DeviceCameraControl.java index d84c487ed..6eaff4674 100644 --- a/core/src/cz/nic/tablexia/util/camera/DeviceCameraControl.java +++ b/core/src/cz/nic/tablexia/util/camera/DeviceCameraControl.java @@ -22,8 +22,6 @@ public interface DeviceCameraControl { void startPreview(); - void pausePreview(); - void stopPreview(); int getPreviewWidth(); @@ -32,12 +30,6 @@ public interface DeviceCameraControl { boolean cameraAccessible(); - boolean isDecoded(); - - void resetDecoded(); - - String getDecodedData(); - boolean isPreviewReady(); // Asynchronous interface - need when called from a non platform thread (GDX OpenGl thread) @@ -45,8 +37,6 @@ public interface DeviceCameraControl { void stopPreviewAsync(); - void pausePreviewAsync(); - void setCameraCallback(CameraCallback cameraCallback); boolean isReady(); diff --git a/core/src/cz/nic/tablexia/util/qrcode/QrCodeEncoder.java b/core/src/cz/nic/tablexia/util/qrcode/QrCodeEncoder.java index 0de8ae497..a7b7203e5 100644 --- a/core/src/cz/nic/tablexia/util/qrcode/QrCodeEncoder.java +++ b/core/src/cz/nic/tablexia/util/qrcode/QrCodeEncoder.java @@ -21,14 +21,16 @@ public class QrCodeEncoder { public static final int HEIGHT = 250; - public static Image createQrCode(String data) throws WriterException{ + public static Image createQrCode(String data){ Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>(); hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); QRCodeWriter writer = new QRCodeWriter(); - BitMatrix matrix = writer.encode(data, BarcodeFormat.QR_CODE,WIDTH,HEIGHT); + BitMatrix matrix; + Image image = null; + try { + matrix = writer.encode(data, BarcodeFormat.QR_CODE,WIDTH,HEIGHT); Pixmap pixmap = new Pixmap(WIDTH,HEIGHT, Pixmap.Format.RGB888); pixmap.setColor(Color.WHITE); -// pixmap.fillRectangle(0,0,matrix.getWidth(),matrix.getHeight()); pixmap.fill(); pixmap.setColor(Color.BLACK); for(int i = 0; i < matrix.getWidth(); i++){ @@ -39,8 +41,11 @@ public class QrCodeEncoder { } } - Image image = new Image(new Texture(pixmap)); - + image = new Image(new Texture(pixmap)); + } catch (WriterException e) { + e.printStackTrace(); + } + return image; } } -- GitLab