From c9dba5bb080dc6bd39890fdafb45c26001ace58b Mon Sep 17 00:00:00 2001 From: kifio Date: Fri, 21 Jul 2017 08:40:10 +0300 Subject: [PATCH] =?UTF-8?q?logout,=20=D0=B8=D0=BD=D0=B4=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../checker/activity/CameraActivity.java | 27 ++++-- .../dinect/checker/activity/MainActivity.java | 87 +++++++++--------- .../drawable-xxxhdpi/shape_bottom_left.png | Bin 413 -> 0 bytes .../drawable-xxxhdpi/shape_bottom_right.png | Bin 394 -> 0 bytes .../res/drawable-xxxhdpi/shape_top_left.png | Bin 419 -> 0 bytes .../res/drawable-xxxhdpi/shape_top_right.png | Bin 385 -> 0 bytes .../app/src/main/res/drawable/button_blue.xml | 17 ---- lib/main.dart | 29 ++++-- lib/registration.dart | 52 +++++++---- lib/splash.dart | 12 ++- 10 files changed, 123 insertions(+), 101 deletions(-) delete mode 100644 android/app/src/main/res/drawable-xxxhdpi/shape_bottom_left.png delete mode 100644 android/app/src/main/res/drawable-xxxhdpi/shape_bottom_right.png delete mode 100644 android/app/src/main/res/drawable-xxxhdpi/shape_top_left.png delete mode 100644 android/app/src/main/res/drawable-xxxhdpi/shape_top_right.png delete mode 100644 android/app/src/main/res/drawable/button_blue.xml diff --git a/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java b/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java index e4b2bc1..d20af8c 100644 --- a/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java +++ b/android/app/src/main/java/com/dinect/checker/activity/CameraActivity.java @@ -37,14 +37,15 @@ import net.sourceforge.zbar.Symbol; import net.sourceforge.zbar.SymbolSet; import net.sourceforge.zbar.Config; import android.graphics.YuvImage; +import android.view.MenuItem; import com.dinect.checker.R; public class CameraActivity extends AppCompatActivity { private Camera mCamera; - private Handler mAutoFocusHandler; - private ImageScanner mScanner; + private Handler mAutoFocusHandler = new Handler(); + private ImageScanner mScanner = new ImageScanner(); private HashMap mContours = new HashMap<>(); private boolean mBarcodeScanned = false; @@ -56,13 +57,7 @@ public class CameraActivity extends AppCompatActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.a_scanner); - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - - mAutoFocusHandler = new Handler(); - mCamera = getCameraInstance(); - mScanner = new ImageScanner(); SurfaceView preview = (SurfaceView) findViewById(R.id.cameraPreview); SurfaceHolder holder = preview.getHolder(); @@ -71,16 +66,18 @@ public class CameraActivity extends AppCompatActivity { setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { actionBar.setTitle(getString(R.string.scanner_title)); actionBar.setDisplayHomeAsUpEnabled(true); } + holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { - + mCamera = getCameraInstance(); mCamera.setPreviewDisplay(holder); mCamera.startPreview(); mCamera.setPreviewCallback(previewCallback); @@ -98,7 +95,7 @@ public class CameraActivity extends AppCompatActivity { @Override public void surfaceDestroyed(SurfaceHolder holder) { - + mCamera = null; } }); } @@ -109,6 +106,16 @@ public class CameraActivity extends AppCompatActivity { return true; } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.logout) { + setResult(RESULT_OK); + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } + private void initCountours() { diff --git a/android/app/src/main/java/com/dinect/checker/activity/MainActivity.java b/android/app/src/main/java/com/dinect/checker/activity/MainActivity.java index a57c639..04c410e 100644 --- a/android/app/src/main/java/com/dinect/checker/activity/MainActivity.java +++ b/android/app/src/main/java/com/dinect/checker/activity/MainActivity.java @@ -7,72 +7,73 @@ import android.util.Log; import android.content.SharedPreferences; import com.dinect.checker.activity.CameraActivity; import com.dinect.checker.service.RegistrationIntentService; - import io.flutter.app.FlutterActivity; import io.flutter.plugins.GeneratedPluginRegistrant; - import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; - import com.google.android.gms.iid.InstanceID; - import java.util.Map; public class MainActivity extends FlutterActivity { - private static final String INSTANCE_ID_CHANNEL = "com.dinect.checker/instance_id"; - private static final String PREF_POS_TOKEN = "pref_pos_token"; + private static final int START_SCANNER_REQUEST_CODE = 2017; + + private MethodChannel mChannel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); + final String INSTANCE_ID_CHANNEL = "com.dinect.checker/instance_id"; + final String PREF_POS_TOKEN = "pref_pos_token"; final SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE); - new MethodChannel(getFlutterView(), INSTANCE_ID_CHANNEL).setMethodCallHandler( - new MethodCallHandler() { - @Override - public void onMethodCall(MethodCall call, Result result) { - switch (call.method) { - - case "getInstanceID": - - InstanceID instanceID = InstanceID.getInstance(MainActivity.this); - String id = instanceID.getId(); - - if (id != null) { - result.success(id); - } else { - result.error("UNAVAILABLE", "Can't get instanceID.", null); - } - break; - - case "saveToken": - Map arguments = call.arguments(); - String token = (String) arguments.get("token"); - Log.d("kifio", token); - preferences.edit().putString(PREF_POS_TOKEN, token).apply(); - break; - - case "getToken": - result.success(preferences.getString(PREF_POS_TOKEN, null)); - break; - - case "startScanner": - startActivity(new Intent(MainActivity.this, CameraActivity.class)); - break; - - default: - result.notImplemented(); - break; - } + mChannel = new MethodChannel(getFlutterView(), INSTANCE_ID_CHANNEL); + mChannel.setMethodCallHandler( + new MethodCallHandler() { + @Override + public void onMethodCall(MethodCall call, Result result) { + switch (call.method) { + case "getInstanceID": + InstanceID instanceID = InstanceID.getInstance(MainActivity.this); + String id = instanceID.getId(); + if (id != null) { + result.success(id); + } else { + result.error("UNAVAILABLE", "Can't get instanceID.", null); + } + break; + case "saveToken": + Map arguments = call.arguments(); + String token = (String) arguments.get("token"); + Log.d("kifio", token); + preferences.edit().putString(PREF_POS_TOKEN, token).apply(); + break; + case "getToken": + result.success(preferences.getString(PREF_POS_TOKEN, null)); + break; + case "startScanner": + Intent cameraIntent = new Intent(MainActivity.this, CameraActivity.class); + startActivityForResult(cameraIntent, START_SCANNER_REQUEST_CODE); + break; + default: + result.notImplemented(); + break; } + } }); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == START_SCANNER_REQUEST_CODE && resultCode == RESULT_OK) { + mChannel.invokeMethod("foo", null); + } + } + public void startScanner() { } diff --git a/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_left.png b/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_left.png deleted file mode 100644 index 15ffb91c28f53ec5a3249c8b154c93b5e72f295c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$>^XU`+9JaSX|DemnbM;9&<5=cRlv zS}riIWVyq*^a5i5=Szm&!d5@doIfHdoHn8M_v@+ta@qXaFW372?mQ|i=+6+xAfq?m zongI-{j}Fnb?JF_O79qI^m^`9c|CTYbYFM&*}do6_Wv`qu9oq%Gs(A5n#Z_jt%=cu zn)sdDo*20unN?PPxk#!{H*|uHd~=w*blBOQiBkg%?|Q6u>e=G8Vn*JQP(`;W)es-^ zOREHw*9vJZlg9+>dbxLt))9}@EnP3&qC}IHggPB9QC`bscu8wv(yobNtrD4} z8Z&#M-nRO!bM3$H{hn9B_oV9nZt=sJe`@aURzI9s_2TS@8?zHjGA;fme1G+SpK$G| zw(UHXTi#XAI9^eeQK?iJ!Iw3+tmhlc14H(+b-pWNKAa2Ovv?}fltKqUB}oUtozQ`pOYAX!LoCfOv)rwpPvc!l-`Nk6p`yp# zKLM-(%zIl002?#g4>qj^zwZ79;OorjwXI_O!_1Dg82))+b})Z1v&G9BcK0QK?Zi%9 z)nIr^b;l}C%na=@clU_68Y(Qqk1DPTM|fa3D~A86f?ArPO(PoA(rW3;42aFJ^5e1w!;y*9_*;k~EI4mWBt0jk z7;dJzB}K(>X#6&pSDvUQ4VR6N8BYzKs-$b}()wHSaQ7Cf+?m<@{Kw^XV9fG#aSX|DemnbMAhV$WOS-Xw zun(I6rv6ntnt2)~|lg-6zbK9h|OHG)Sh&9G;>7~NQkE@hB zzPh|RRvx_1tm@?B8}e6tW_IYTihX?3X{XKI7mN0<_*&=q_H*Uqu8`lR|E;+G)V6D` ld$jfbm;IlQU1hFkoV$^Edf`OD+rYqQ@O1TaS?83{1OR;&x~u>I diff --git a/android/app/src/main/res/drawable-xxxhdpi/shape_top_right.png b/android/app/src/main/res/drawable-xxxhdpi/shape_top_right.png deleted file mode 100644 index e392c7f05b935f6c2a9d561ee3cc01fc82f052a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=38P)O1U8`Egbj?02($=+^XDYjuc-3JUCuAbMMo*o(+1c@P_@>I}fSBBP%fnenxV+>+sI#b%TFUPP9ns#^eug4;GndS`}P zNcWwxs%p*@m0oKJH)q&ZuzBgpdG)upXd!J&&7?d&cwAa&?T6v?J@;fgT2{;S#IP6q zNOifp3=Kz0&!dG2|CuGWw5N?C)v%@6($g6r!;$#(Xd%O7m<)SJiCaU4$uJp?%cn;f z879MI*h5O(8Zu0V$#7ggJ<7;1879LXQsUN-VKPjHS=3_K9-95S?>zumy&h_LR>Kl%zTEdV fqxKZ - - - - - - - - - - - - - - diff --git a/lib/main.dart b/lib/main.dart index ff905c2..76023a8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -51,7 +51,7 @@ void checkToken(BuildContext context, Callback callback) { callback.call(context); } else { // Запускается экран сканера, токен кассы активирован, с его помощью можно делать запросы к pos-api. - startScanner(); + startScanner(context); } }).catchError((error) { @@ -61,11 +61,24 @@ void checkToken(BuildContext context, Callback callback) { /// Запуск спецефичной для каждой платформы части приложения - сканера. /// Может производиться с нескольких экранов (splash, finish_registration). -startScanner() async{ +startScanner(BuildContext context) async{ const platform = const MethodChannel('com.dinect.checker/instance_id'); + platform.setMethodCallHandler((MethodCall call) async { + logout(); + print(call.method); + // dynamic arguments = call.arguments; + // handle call then + return result; + // or + // throw new PlatformException(errorCode, anErrorMessage, someDetails); + }); await platform.invokeMethod('startScanner'); } +logout() { + pushRute(_context, new RegistrationScreen()); +} + /// Навигация по приложению. /// widget - следующий экран приложения. pushRoute(BuildContext context, Widget widget) { @@ -73,11 +86,16 @@ pushRoute(BuildContext context, Widget widget) { builder: (BuildContext context) { return widget; })); -} +} class Checker extends StatelessWidget { @override Widget build(BuildContext context) { - return new MaterialApp(title: "DemoApp", home: new SplashScreen()); + return new MaterialApp(title: "DemoApp", + home: new SplashScreen(), + theme: new ThemeData( + primaryColor: primaryColor, + accentColor: primaryColor + )); } } @@ -87,9 +105,6 @@ abstract class BaseState extends State { } - void logout() { - - } } abstract class Callback { diff --git a/lib/registration.dart b/lib/registration.dart index 87dacf0..8bcc4c0 100644 --- a/lib/registration.dart +++ b/lib/registration.dart @@ -12,6 +12,7 @@ class RegistrationScreen extends StatefulWidget { class _RegistrationScreenState extends BaseState { String _merchantID = ""; + bool _loading = false; @override Widget build(BuildContext context) { return new Scaffold(appBar: _getAppBar(), body: _getScreen(context)); @@ -19,16 +20,14 @@ class _RegistrationScreenState extends BaseState { AppBar _getAppBar() { return new AppBar(title: new Text("Регистрация"), - backgroundColor: primaryColor, actions: [ - new IconButton( - icon: new Icon(Icons.help_outline), - tooltip: 'Air it', - onPressed: faq, - ) - ]); + actions: [new IconButton(icon: new Icon(Icons.help_outline), onPressed: faq)]); } Widget _getScreen(BuildContext context) { + return new Stack(children: [_getScreenContent(), _getProgressIndicator()]); + } + + Widget _getScreenContent() { return new Container(height: 332.0, child: new ListView(reverse: true, children: [ new Center(child: new Column(children: [ @@ -38,6 +37,10 @@ class _RegistrationScreenState extends BaseState { ].reversed.toList())); } + Widget _getProgressIndicator() { + return new Center(child: _loading ? new CircularProgressIndicator() : null); + } + Widget _getLogo() { return new Container(height: 192.0, width: 156.0, child: new Image.asset(logo_png, height: 24.0, width: 156.0)); @@ -56,14 +59,6 @@ class _RegistrationScreenState extends BaseState { onChanged: (text) => _handleUserInput(text)); } - void _handleUserInput(String text) { - if (text.length > 0) { - setState(() { - _merchantID = text; - }); - } - } - Decoration _getDecoraionForInputField() { return new BoxDecoration(color: Colors.white, border: new Border.all(color: const Color(0xffcfd8dc), width: 1.0,), @@ -71,19 +66,35 @@ class _RegistrationScreenState extends BaseState { } Widget _getButton(BuildContext context) { - return new Container(margin: new EdgeInsets.only(top: 36.0), height: 42.0, padding: new EdgeInsets.only(left: 40.0, right: 40.0), + return new Container(margin: new EdgeInsets.only(top: 36.0), height: 42.0, + padding: new EdgeInsets.only(left: 40.0, right: 40.0), child: new RaisedButton(child: new Text('ЗАРЕГИСТРИРОВАТЬ', style: new TextStyle(color: Colors.white)), onPressed: _isValidMerchantID() ? () => _registerShop(context, _merchantID) : null, color: primaryColor)); } - bool _isValidMerchantID() { + Widget _getCircularProgressIndicator() { + return new Center(child: new CircularProgressIndicator()); + } + + _isValidMerchantID() { return _merchantID.length == 5; } - void _registerShop(BuildContext context, String merchantShop) { - _register(context, merchantShop); + _handleUserInput(String text) { + if (text.length > 0) { + setState(() { + _merchantID = text; + }); + } + } + + _registerShop(BuildContext context, String merchantShop) { + setState(() { + loading = true; + _register(context, merchantShop); + }); } _register(BuildContext context, String merchantShop) async { @@ -113,6 +124,9 @@ class _RegistrationScreenState extends BaseState { platform.invokeMethod('saveToken', {'token' : token}).then((value) { print(value.toString()); }); + setState(() { + loading = false; + }); pushRoute(context, new FinishRegistrationScreen()); }).catchError((error) { print(error.toString()); diff --git a/lib/splash.dart b/lib/splash.dart index fa6796f..bec8c2c 100644 --- a/lib/splash.dart +++ b/lib/splash.dart @@ -27,11 +27,12 @@ class SplashScreen extends StatelessWidget { // В случае, если в приложении отсутствует токен, // необходимо запустить регистрацию кассы. - if (token == null) { - pushRoute(context, new RegistrationScreen()); - } else { - checkToken(context, new CheckTokenCallback()); - } + // if (token == null) { + // pushRoute(context, new RegistrationScreen()); + // } else { + // checkToken(context, new CheckTokenCallback()); + // } + startScanner(context); } } @@ -41,6 +42,7 @@ class CheckTokenCallback extends Callback { /// Запускается экран ожидания активации токена. /// В реальности токен активируется в админке вручную, /// на тестовом сервере токен активируется через несколько минут после создания. + call(BuildContext context) { pushRoute(context, new FinishRegistrationScreen()); }