CameraActivity now extends AbstractScannerActivity, refs #9991

This commit is contained in:
anonymouzz
2017-08-04 11:20:04 +07:00
parent b23ad18eb0
commit e10e8b0a07
5 changed files with 51 additions and 244 deletions

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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"));

View File

@@ -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

View File

@@ -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">