CameraActivity now extends AbstractScannerActivity, refs #9991
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/rootLayout"
|
||||
android:id="@+id/zbarRoot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white">
|
||||
Reference in New Issue
Block a user