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 abstract class AbstractScannerActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
public static final String SCAN_MODES = "SCAN_MODES";
|
||||||
public static final String ERROR_INFO = "ERROR_INFO";
|
public static final String ERROR_INFO = "ERROR_INFO";
|
||||||
|
|
||||||
static final String TAG = "C.ScannerActivity";
|
static final String TAG = "C.ScannerActivity";
|
||||||
@@ -69,8 +70,9 @@ public abstract class AbstractScannerActivity extends AppCompatActivity {
|
|||||||
* initialize activity
|
* initialize activity
|
||||||
* - removes windows title
|
* - removes windows title
|
||||||
* - set content view to layout id
|
* - set content view to layout id
|
||||||
|
*
|
||||||
* @param layoutID layout to use
|
* @param layoutID layout to use
|
||||||
* */
|
*/
|
||||||
protected final boolean init(final int layoutID) {
|
protected final boolean init(final int layoutID) {
|
||||||
Log.d(TAG, "init");
|
Log.d(TAG, "init");
|
||||||
if (!isCameraAvailable()) {
|
if (!isCameraAvailable()) {
|
||||||
@@ -86,9 +88,9 @@ public abstract class AbstractScannerActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure toolbar of app
|
* Configure toolbar of app
|
||||||
* */
|
*/
|
||||||
protected final void setupToolbar(final int toolbarId, final @NonNull String title) {
|
protected final void initToolbar(final int toolbarId, final @NonNull String title) {
|
||||||
Log.d(TAG, "setupToolbar");
|
Log.d(TAG, "initToolbar");
|
||||||
final Toolbar toolbar = (Toolbar) findViewById(toolbarId);
|
final Toolbar toolbar = (Toolbar) findViewById(toolbarId);
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
@@ -102,23 +104,25 @@ public abstract class AbstractScannerActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds scanner view to target frame layout
|
* Adds scanner view to target frame layout
|
||||||
* */
|
*/
|
||||||
protected final void setupScanner(final View view, final int targetFrameId) {
|
protected final void addScanner(final @NonNull View view, final int targetFrameId) {
|
||||||
Log.d(TAG, "setupScanner");
|
Log.d(TAG, "addScanner");
|
||||||
final FrameLayout root = (FrameLayout) findViewById(targetFrameId);
|
final FrameLayout root = (FrameLayout) findViewById(targetFrameId);
|
||||||
root.addView(view, 0);
|
root.addView(view, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract View initScanner();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize network client
|
* Initialize network client
|
||||||
* */
|
*/
|
||||||
protected final void setupApiClient(final Intent intent) {
|
protected final void initNetwork(final Intent intent) {
|
||||||
Log.d(TAG, "setupApiClient");
|
Log.d(TAG, "initNetwork");
|
||||||
final String url = intent.getStringExtra(MainActivity.PREF_API_URL);
|
final String url = intent.getStringExtra(MainActivity.PREF_API_URL);
|
||||||
final String appToken = intent.getStringExtra(MainActivity.PREF_APP_TOKEN);
|
final String appToken = intent.getStringExtra(MainActivity.PREF_APP_TOKEN);
|
||||||
final String token = intent.getStringExtra(MainActivity.PREF_POS_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);
|
+ url + ", appToken " + appToken + ", token " + token);
|
||||||
|
|
||||||
apiClient = new ApiClient(url, appToken, token);
|
apiClient = new ApiClient(url, appToken, token);
|
||||||
@@ -129,8 +133,9 @@ public abstract class AbstractScannerActivity extends AppCompatActivity {
|
|||||||
* Handles barcode.
|
* Handles barcode.
|
||||||
* Makes network call in separate thread and call
|
* Makes network call in separate thread and call
|
||||||
* networkResponseCallback
|
* networkResponseCallback
|
||||||
|
*
|
||||||
* @param card scanned card number
|
* @param card scanned card number
|
||||||
* */
|
*/
|
||||||
public void handleBarcode(final @NonNull String card) {
|
public void handleBarcode(final @NonNull String card) {
|
||||||
Log.d(TAG, "handleBarcode");
|
Log.d(TAG, "handleBarcode");
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
|
|||||||
@@ -1,25 +1,12 @@
|
|||||||
package com.dinect.checker;
|
package com.dinect.checker;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.app.DialogFragment;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.hardware.Camera;
|
import android.hardware.Camera;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
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.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;
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.view.Window;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import net.sourceforge.zbar.Config;
|
import net.sourceforge.zbar.Config;
|
||||||
@@ -28,26 +15,11 @@ import net.sourceforge.zbar.ImageScanner;
|
|||||||
import net.sourceforge.zbar.Symbol;
|
import net.sourceforge.zbar.Symbol;
|
||||||
import net.sourceforge.zbar.SymbolSet;
|
import net.sourceforge.zbar.SymbolSet;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
public class CameraActivity extends AbstractScannerActivity implements Camera.PreviewCallback {
|
||||||
import org.json.JSONException;
|
|
||||||
|
|
||||||
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";
|
public static final String ERROR_INFO = "ERROR_INFO";
|
||||||
|
|
||||||
private int mOffset;
|
private int mOffset;
|
||||||
private String mURL;
|
|
||||||
private String mAppToken;
|
|
||||||
private String mToken;
|
|
||||||
private LogoutDialogFragment mDialog;
|
|
||||||
private NetworkThread mNetworkThread;
|
|
||||||
|
|
||||||
private CameraPreview mPreview;
|
private CameraPreview mPreview;
|
||||||
private Camera mCamera;
|
private Camera mCamera;
|
||||||
@@ -63,46 +35,26 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
if (!isCameraAvailable()) {
|
if (!init(R.layout.activity_zbar_scanner)) {
|
||||||
// Cancel request if there is no rear-facing camera.
|
|
||||||
cancelRequest();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mOffset = (int) (56 * getResources().getDisplayMetrics().density);
|
initNetwork(getIntent());
|
||||||
mURL = getIntent().getStringExtra(MainActivity.PREF_API_URL);
|
initToolbar(R.id.toolbar, getString(R.string.scanner_title));
|
||||||
mAppToken = getIntent().getStringExtra(MainActivity.PREF_APP_TOKEN);
|
|
||||||
mToken = getIntent().getStringExtra(MainActivity.PREF_POS_TOKEN);
|
|
||||||
|
|
||||||
// Hide the window title.
|
mPreview = (CameraPreview) initScanner();
|
||||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
||||||
|
addScanner(mPreview, R.id.zbarRoot);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected View initScanner() {
|
||||||
|
mOffset = (int) (56 * getResources().getDisplayMetrics().density);
|
||||||
|
|
||||||
mAutoFocusHandler = new Handler();
|
mAutoFocusHandler = new Handler();
|
||||||
|
|
||||||
// Create and configure the ImageScanner;
|
// create and configure image scanner
|
||||||
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() {
|
|
||||||
mScanner = new ImageScanner();
|
mScanner = new ImageScanner();
|
||||||
mScanner.setConfig(0, Config.X_DENSITY, 3);
|
mScanner.setConfig(0, Config.X_DENSITY, 3);
|
||||||
mScanner.setConfig(0, Config.Y_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);
|
mScanner.setConfig(symbol, Config.ENABLE, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mPreview = new CameraPreview(this, this, autoFocusCB);
|
||||||
|
|
||||||
|
return mPreview;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
setResult(RESULT_CANCELED);
|
setResult(RESULT_CANCELED);
|
||||||
@@ -241,147 +175,6 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void requestUser(String code) {
|
private void requestUser(String code) {
|
||||||
mNetworkThread = new NetworkThread(this, code, mURL, mAppToken, mToken);
|
handleBarcode(code);
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class MainActivity extends FlutterActivity {
|
|||||||
break;
|
break;
|
||||||
case "startScanner":
|
case "startScanner":
|
||||||
Map arguments = call.arguments();
|
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_API_URL, (String) arguments.get("url"));
|
||||||
cameraIntent.putExtra(PREF_APP_TOKEN, (String) arguments.get("appToken"));
|
cameraIntent.putExtra(PREF_APP_TOKEN, (String) arguments.get("appToken"));
|
||||||
cameraIntent.putExtra(PREF_POS_TOKEN, (String) arguments.get("token"));
|
cameraIntent.putExtra(PREF_POS_TOKEN, (String) arguments.get("token"));
|
||||||
|
|||||||
@@ -15,8 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.dinect.checker.zxing;
|
package com.dinect.checker.zxing;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
import com.dinect.checker.AbstractScannerActivity;
|
import com.dinect.checker.AbstractScannerActivity;
|
||||||
import com.dinect.checker.R;
|
import com.dinect.checker.R;
|
||||||
@@ -38,10 +41,16 @@ public class ScannerActivity extends AbstractScannerActivity
|
|||||||
if (!init(R.layout.activity_zxing_scanner)) {
|
if (!init(R.layout.activity_zxing_scanner)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
scannerView = new ZXingScannerView(this);
|
initNetwork(getIntent());
|
||||||
setupToolbar(R.id.zxingToolbar, getString(R.string.scanner_title));
|
initToolbar(R.id.zxingToolbar, getString(R.string.scanner_title));
|
||||||
setupScanner(scannerView, R.id.zxingRoot);
|
|
||||||
setupApiClient(getIntent());
|
scannerView = (ZXingScannerView) initScanner();
|
||||||
|
addScanner(scannerView, R.id.zxingRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected View initScanner() {
|
||||||
|
return new ZXingScannerView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/rootLayout"
|
android:id="@+id/zbarRoot"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@android:color/white">
|
android:background="@android:color/white">
|
||||||
Reference in New Issue
Block a user