From e10e8b0a07c01bcba35b03f1ca24b91badfa499a Mon Sep 17 00:00:00 2001 From: anonymouzz Date: Fri, 4 Aug 2017 11:20:04 +0700 Subject: [PATCH] CameraActivity now extends AbstractScannerActivity, refs #9991 --- .../checker/AbstractScannerActivity.java | 29 ++- .../com/dinect/checker/CameraActivity.java | 245 ++---------------- .../java/com/dinect/checker/MainActivity.java | 2 +- .../dinect/checker/zxing/ScannerActivity.java | 17 +- ..._scanner.xml => activity_zbar_scanner.xml} | 2 +- 5 files changed, 51 insertions(+), 244 deletions(-) rename android/app/src/main/res/layout/{a_scanner.xml => activity_zbar_scanner.xml} (98%) diff --git a/android/app/src/main/java/com/dinect/checker/AbstractScannerActivity.java b/android/app/src/main/java/com/dinect/checker/AbstractScannerActivity.java index 542d90a..61443d1 100644 --- a/android/app/src/main/java/com/dinect/checker/AbstractScannerActivity.java +++ b/android/app/src/main/java/com/dinect/checker/AbstractScannerActivity.java @@ -43,6 +43,7 @@ import com.dinect.net.ApiClient; public abstract class AbstractScannerActivity extends AppCompatActivity { + public static final String SCAN_MODES = "SCAN_MODES"; public static final String ERROR_INFO = "ERROR_INFO"; static final String TAG = "C.ScannerActivity"; @@ -69,8 +70,9 @@ public abstract class AbstractScannerActivity extends AppCompatActivity { * initialize activity * - removes windows title * - set content view to layout id + * * @param layoutID layout to use - * */ + */ protected final boolean init(final int layoutID) { Log.d(TAG, "init"); if (!isCameraAvailable()) { @@ -86,9 +88,9 @@ public abstract class AbstractScannerActivity extends AppCompatActivity { /** * Configure toolbar of app - * */ - protected final void setupToolbar(final int toolbarId, final @NonNull String title) { - Log.d(TAG, "setupToolbar"); + */ + protected final void initToolbar(final int toolbarId, final @NonNull String title) { + Log.d(TAG, "initToolbar"); final Toolbar toolbar = (Toolbar) findViewById(toolbarId); setSupportActionBar(toolbar); @@ -102,23 +104,25 @@ public abstract class AbstractScannerActivity extends AppCompatActivity { /** * Adds scanner view to target frame layout - * */ - protected final void setupScanner(final View view, final int targetFrameId) { - Log.d(TAG, "setupScanner"); + */ + protected final void addScanner(final @NonNull View view, final int targetFrameId) { + Log.d(TAG, "addScanner"); final FrameLayout root = (FrameLayout) findViewById(targetFrameId); root.addView(view, 0); } + protected abstract View initScanner(); + /** * Initialize network client - * */ - protected final void setupApiClient(final Intent intent) { - Log.d(TAG, "setupApiClient"); + */ + protected final void initNetwork(final Intent intent) { + Log.d(TAG, "initNetwork"); final String url = intent.getStringExtra(MainActivity.PREF_API_URL); final String appToken = intent.getStringExtra(MainActivity.PREF_APP_TOKEN); final String token = intent.getStringExtra(MainActivity.PREF_POS_TOKEN); - Log.d(TAG, "initializing setupScanner activity with url " + Log.d(TAG, "initializing addScanner activity with url " + url + ", appToken " + appToken + ", token " + token); apiClient = new ApiClient(url, appToken, token); @@ -129,8 +133,9 @@ public abstract class AbstractScannerActivity extends AppCompatActivity { * Handles barcode. * Makes network call in separate thread and call * networkResponseCallback + * * @param card scanned card number - * */ + */ public void handleBarcode(final @NonNull String card) { Log.d(TAG, "handleBarcode"); if (BuildConfig.DEBUG) { diff --git a/android/app/src/main/java/com/dinect/checker/CameraActivity.java b/android/app/src/main/java/com/dinect/checker/CameraActivity.java index 994ffd1..67cc4d5 100644 --- a/android/app/src/main/java/com/dinect/checker/CameraActivity.java +++ b/android/app/src/main/java/com/dinect/checker/CameraActivity.java @@ -1,25 +1,12 @@ package com.dinect.checker; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; import android.content.Intent; import android.content.pm.PackageManager; import android.hardware.Camera; import android.os.Bundle; import android.os.Handler; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; -import android.view.Window; -import android.widget.FrameLayout; import android.widget.Toast; import net.sourceforge.zbar.Config; @@ -28,26 +15,11 @@ import net.sourceforge.zbar.ImageScanner; import net.sourceforge.zbar.Symbol; import net.sourceforge.zbar.SymbolSet; -import org.json.JSONArray; -import org.json.JSONException; +public class CameraActivity extends AbstractScannerActivity implements Camera.PreviewCallback { -import java.io.IOException; - -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -public class CameraActivity extends AppCompatActivity implements Camera.PreviewCallback { - - public static final String SCAN_MODES = "SCAN_MODES"; public static final String ERROR_INFO = "ERROR_INFO"; private int mOffset; - private String mURL; - private String mAppToken; - private String mToken; - private LogoutDialogFragment mDialog; - private NetworkThread mNetworkThread; private CameraPreview mPreview; private Camera mCamera; @@ -63,46 +35,26 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (!isCameraAvailable()) { - // Cancel request if there is no rear-facing camera. - cancelRequest(); + if (!init(R.layout.activity_zbar_scanner)) { return; } - mOffset = (int) (56 * getResources().getDisplayMetrics().density); - mURL = getIntent().getStringExtra(MainActivity.PREF_API_URL); - mAppToken = getIntent().getStringExtra(MainActivity.PREF_APP_TOKEN); - mToken = getIntent().getStringExtra(MainActivity.PREF_POS_TOKEN); + initNetwork(getIntent()); + initToolbar(R.id.toolbar, getString(R.string.scanner_title)); - // Hide the window title. - requestWindowFeature(Window.FEATURE_NO_TITLE); + mPreview = (CameraPreview) initScanner(); + + addScanner(mPreview, R.id.zbarRoot); + + } + + @Override + protected View initScanner() { + mOffset = (int) (56 * getResources().getDisplayMetrics().density); mAutoFocusHandler = new Handler(); - // Create and configure the ImageScanner; - setupScanner(); - - // Create a RelativeLayout container that will hold a SurfaceView, - // and set it as the content of our activity. - mPreview = new CameraPreview(this, this, autoFocusCB); - // setContentView(mPreview); - setContentView(R.layout.a_scanner); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - ActionBar actionBar = getSupportActionBar(); - - if (actionBar != null) { - actionBar.setTitle(getString(R.string.scanner_title)); - actionBar.setDisplayHomeAsUpEnabled(false); - } - - FrameLayout root = (FrameLayout) findViewById(R.id.rootLayout); - root.addView(mPreview, 0); - } - - public void setupScanner() { + // create and configure image scanner mScanner = new ImageScanner(); mScanner.setConfig(0, Config.X_DENSITY, 3); mScanner.setConfig(0, Config.Y_DENSITY, 3); @@ -114,6 +66,10 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC mScanner.setConfig(symbol, Config.ENABLE, 1); } } + + mPreview = new CameraPreview(this, this, autoFocusCB); + + return mPreview; } @Override @@ -212,28 +168,6 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC } }; - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.logout) { - mDialog = new LogoutDialogFragment(); - mDialog.show(getFragmentManager(), "logout"); - return true; - } else if (item.getItemId() == R.id.faq) { - Intent intent = new Intent(); - intent.putExtra("item", "faq"); - setResult(RESULT_OK, intent); - finish(); - return true; - } - return super.onOptionsItemSelected(item); - } - @Override public void onBackPressed() { setResult(RESULT_CANCELED); @@ -241,147 +175,6 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC } private void requestUser(String code) { - mNetworkThread = new NetworkThread(this, code, mURL, mAppToken, mToken); - mNetworkThread.start(); - } - - void handleResult(Response response, String card) { - Log.d("CameraActivity", "handleResult"); - if (response == null) { - mPreviewing = true; - mCamera.startPreview(); - return; - } - Log.d("kifio", "status: " + response.code()); - int code = response.code(); - if (code == 200) { - try { - String s = response.body().string(); - JSONArray users = new JSONArray(s); - if (users.length() > 0) { - Intent intent = new Intent(); - intent.putExtra("user", users.get(0).toString()); - intent.putExtra("card", card); - setResult(RESULT_OK, intent); - finish(); - } else { - Toast.makeText(this, "Пользователь с таким id не найден", Toast.LENGTH_SHORT).show(); - mPreviewing = true; - mCamera.startPreview(); - } - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } else if (code == 204) { - mPreviewing = true; - Toast.makeText(this, "Пользователь с таким id не найден", Toast.LENGTH_SHORT).show(); - } else { - mPreviewing = true; - try { - Log.d("kifio", response.body().string()); - Toast.makeText(this, "Произошла ошибка", Toast.LENGTH_SHORT).show(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - mNetworkThread.close(); - mNetworkThread = null; - } - - private static class NetworkThread extends Thread { - - private CameraActivity mActivity; - private String mCode = ""; - private String mCard = ""; - private String mAppToken = ""; - private String mToken = ""; - private String mUrl = "users/?auto="; - - NetworkThread(final CameraActivity activity, final String code, final String url, final String appToken, String token) { - if (code == null) { - activity.runOnUiThread(new Runnable() { - public void run() { - activity.handleResult(null, code); - } - }); - } else { - mActivity = activity; - mCard = code; - mUrl = url + mUrl + code; - mAppToken = appToken; - mToken = token; - } - } - - @Override - public void run() { - Log.d("CameraActivity", "NetworkThread.run"); - Request request = new Request.Builder() - .addHeader("DM-Authorization", "dmapptoken " + mAppToken) - .addHeader("Authorization", "dmtoken " + mToken) - .url(mUrl) - .build(); - - try { - OkHttpClient client = new OkHttpClient(); - final Response response = client.newCall(request).execute(); - mActivity.runOnUiThread(new Runnable() { - public void run() { - mActivity.handleResult(response, mCard); - } - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - - void close() { - mActivity = null; - } - } - - void dismissDialog() { - if (mDialog != null) { - mDialog.dismiss(); - mDialog = null; - } - } - - void logout() { - dismissDialog(); - Intent intent = new Intent(); - intent.putExtra("item", "logout"); - setResult(RESULT_OK, intent); - finish(); - } - - public static class LogoutDialogFragment extends DialogFragment { - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - LayoutInflater inflater = getActivity().getLayoutInflater(); - View content = inflater.inflate(R.layout.f_logout_dialog, null); - builder.setView(content); - View positiveButton = content.findViewById(R.id.positiveButton); - View negativeButton = content.findViewById(R.id.negativeButton); - - negativeButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - ((CameraActivity) getActivity()).dismissDialog(); - } - }); - - positiveButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - ((CameraActivity) getActivity()).logout(); - } - }); - - return builder.create(); - } + handleBarcode(code); } } diff --git a/android/app/src/main/java/com/dinect/checker/MainActivity.java b/android/app/src/main/java/com/dinect/checker/MainActivity.java index a6573d2..6c300f2 100644 --- a/android/app/src/main/java/com/dinect/checker/MainActivity.java +++ b/android/app/src/main/java/com/dinect/checker/MainActivity.java @@ -59,7 +59,7 @@ public class MainActivity extends FlutterActivity { break; case "startScanner": Map arguments = call.arguments(); - Intent cameraIntent = new Intent(MainActivity.this, ScannerActivity.class); + Intent cameraIntent = new Intent(MainActivity.this, CameraActivity.class); cameraIntent.putExtra(PREF_API_URL, (String) arguments.get("url")); cameraIntent.putExtra(PREF_APP_TOKEN, (String) arguments.get("appToken")); cameraIntent.putExtra(PREF_POS_TOKEN, (String) arguments.get("token")); diff --git a/android/app/src/main/java/com/dinect/checker/zxing/ScannerActivity.java b/android/app/src/main/java/com/dinect/checker/zxing/ScannerActivity.java index 03b304d..7c98384 100644 --- a/android/app/src/main/java/com/dinect/checker/zxing/ScannerActivity.java +++ b/android/app/src/main/java/com/dinect/checker/zxing/ScannerActivity.java @@ -15,8 +15,11 @@ */ package com.dinect.checker.zxing; +import android.content.Intent; import android.os.Bundle; import android.os.Handler; +import android.support.annotation.NonNull; +import android.view.View; import com.dinect.checker.AbstractScannerActivity; import com.dinect.checker.R; @@ -38,10 +41,16 @@ public class ScannerActivity extends AbstractScannerActivity if (!init(R.layout.activity_zxing_scanner)) { return; } - scannerView = new ZXingScannerView(this); - setupToolbar(R.id.zxingToolbar, getString(R.string.scanner_title)); - setupScanner(scannerView, R.id.zxingRoot); - setupApiClient(getIntent()); + initNetwork(getIntent()); + initToolbar(R.id.zxingToolbar, getString(R.string.scanner_title)); + + scannerView = (ZXingScannerView) initScanner(); + addScanner(scannerView, R.id.zxingRoot); + } + + @Override + protected View initScanner() { + return new ZXingScannerView(this); } @Override diff --git a/android/app/src/main/res/layout/a_scanner.xml b/android/app/src/main/res/layout/activity_zbar_scanner.xml similarity index 98% rename from android/app/src/main/res/layout/a_scanner.xml rename to android/app/src/main/res/layout/activity_zbar_scanner.xml index 16e4ef2..265a55e 100644 --- a/android/app/src/main/res/layout/a_scanner.xml +++ b/android/app/src/main/res/layout/activity_zbar_scanner.xml @@ -1,7 +1,7 @@