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 01d8367..7945609 100644 --- a/android/app/src/main/java/com/dinect/checker/CameraActivity.java +++ b/android/app/src/main/java/com/dinect/checker/CameraActivity.java @@ -61,7 +61,7 @@ import org.json.*; import android.app.Dialog; import android.app.DialogFragment; import android.app.AlertDialog; -import android.app.AlertDialog.Builder; +import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.view.LayoutInflater; import com.dinect.checker.Utils; @@ -75,6 +75,8 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC 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; @@ -100,6 +102,8 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC } 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); // Hide the window title. @@ -266,10 +270,10 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC public void onBackPressed() { setResult(RESULT_CANCELED); finish(); - } + } private void requestUser(String code) { - mNetworkThread = new NetworkThread(this, code, mToken); + mNetworkThread = new NetworkThread(this, code, mURL, mAppToken, mToken); mNetworkThread.start(); } @@ -280,7 +284,7 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC return; } Log.d("kifio", "status: " + response.code()); - int code = response.code(); + int code = response.code(); if (code == 200) { try { String s = response.body().string(); @@ -320,11 +324,12 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC private CameraActivity mActivity; private String mCode = ""; - private String mUrl = "http://pos-api-autoclub.dinect.com/20130701/users?auto="; private String mCard = ""; + private String mAppToken = ""; private String mToken = ""; - - NetworkThread(final CameraActivity activity, final String code, String token) { + 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() { @@ -334,16 +339,16 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC } else { mActivity = activity; mCard = code; - mUrl += code; + mUrl = url + mUrl + code; + mAppToken = appToken; mToken = token; } } @Override public void run() { - Request request = new Request.Builder() - .addHeader("DM-Authorization", "dmapptoken bdea0f3ba9034b688019a7cac753d1209e2b227f") + .addHeader("DM-Authorization", "dmapptoken " + mAppToken) .addHeader("Authorization", "dmtoken " + mToken) .url(mUrl) .build(); @@ -371,7 +376,7 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC mDialog.dismiss(); mDialog = null; } - } + } void logout() { dismissDialog(); @@ -382,7 +387,7 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC } public static class LogoutDialogFragment extends DialogFragment { - + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); @@ -409,4 +414,4 @@ public class CameraActivity extends AppCompatActivity implements Camera.PreviewC return builder.create(); } } -} \ No newline at end of file +} 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 1b39811..d879651 100644 --- a/android/app/src/main/java/com/dinect/checker/MainActivity.java +++ b/android/app/src/main/java/com/dinect/checker/MainActivity.java @@ -23,6 +23,8 @@ public class MainActivity extends FlutterActivity { private static final String PREF_POS_MERCHANT_ID = "pref_pos_merchant_id"; private static final String PREF_DOC_ID = "pref_doc_id"; private static final String PREF_POS_ID = "pref_pos_id"; + static final String PREF_API_URL = "prefs_api_token"; + static final String PREF_APP_TOKEN = "pres_app_token"; static final String PREF_POS_TOKEN = "pref_pos_token"; private MethodChannel mChannel; @@ -58,6 +60,8 @@ public class MainActivity extends FlutterActivity { case "startScanner": Map arguments = call.arguments(); 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")); startActivityForResult(cameraIntent, START_SCANNER_REQUEST_CODE); break; @@ -164,4 +168,4 @@ public class MainActivity extends FlutterActivity { } -} \ No newline at end of file +} diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 42fba9a..d8352b8 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - AUTOBONUS + Checker Сканнер карты Сканировать FAQ @@ -8,4 +8,4 @@ Вы действительно хотите выйти и ввести другой номер магазина? Да Нет - \ No newline at end of file + diff --git a/ios/Runner/ScannerViewController.swift b/ios/Runner/ScannerViewController.swift index 607af4e..0cae00b 100644 --- a/ios/Runner/ScannerViewController.swift +++ b/ios/Runner/ScannerViewController.swift @@ -11,7 +11,7 @@ import UIKit extension ZBarSymbolSet: Sequence { public typealias Element = ZBarSymbol public typealias Iterator = NSFastEnumerationIterator - + public func makeIterator() -> NSFastEnumerationIterator { return NSFastEnumerationIterator(self) } @@ -20,11 +20,11 @@ extension ZBarSymbolSet: Sequence { // TODO: Реализовать окно сканнера в этом контроллере, вместо вызова ZBarReaderViewController @objc class ScannerViewController: UIViewController, ZBarReaderDelegate { - + override func viewDidLoad() { super.viewDidLoad() } - + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let readerViewController = ZBarReaderViewController() @@ -33,18 +33,18 @@ extension ZBarSymbolSet: Sequence { readerViewController.showsZBarControls = false self.present(readerViewController, animated: true) } - + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { guard let symbols = info[ZBarReaderControllerResults] as? ZBarSymbolSet else { return } - + for symbol in symbols { - + if let symbol = symbol as? ZBarSymbol, let data = symbol.data { - + let toast = UIAlertView() toast.message = data toast.show() - + navigationController?.popViewController(animated: true) } } diff --git a/lib/common.dart b/lib/common.dart index 5c66b17..e223084 100644 --- a/lib/common.dart +++ b/lib/common.dart @@ -1,6 +1,7 @@ import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; +import 'consts.dart'; import 'network.dart'; import 'registration.dart'; import 'purchase.dart'; @@ -16,7 +17,7 @@ String token; pushRoute(BuildContext context, Widget widget) { var route = new MaterialPageRoute(builder: (BuildContext context) => widget); Navigator.of(context).pushReplacement(route); -} +} // Добавление route, с возможностью вернуться к предыдущему экрану. faq(BuildContext context, bool returnToScanner) { @@ -26,7 +27,7 @@ faq(BuildContext context, bool returnToScanner) { // В методе отправляется запрос на удаление токена кассы, очищаются SharedPreferences приложения. logout(BuildContext context) { - + VoidCallback positiveCalback = () { if (token != null) { deleteToken(token).then((response) { @@ -34,7 +35,7 @@ logout(BuildContext context) { platform.invokeMethod('removeKeys').then((result) { Navigator.of(context).pop(); Navigator.of(context).pop(); - pushRoute(context, new RegistrationScreen()); // Запускаем регистрацию + pushRoute(context, new RegistrationScreen()); // Запускаем регистрацию }); }).catchError((error) { print(error.toString()); @@ -49,12 +50,12 @@ logout(BuildContext context) { } forceLogout(BuildContext context) { - + deleteToken(token).then((response) { print(response.body); platform.invokeMethod('removeKeys').then((result) { Navigator.of(context).pop(); - pushRoute(context, new RegistrationScreen()); // Запускаем регистрацию + pushRoute(context, new RegistrationScreen()); // Запускаем регистрацию }); }).catchError((error) { print(error.toString()); @@ -64,7 +65,7 @@ forceLogout(BuildContext context) { /// Запуск спецефичной для каждой платформы части приложения - сканера. /// Может производиться с нескольких экранов (splash, finish_registration). startScanner(BuildContext context) async { - + // Канал ловит вызовы методов из "нативной" части приложения. // Могут быть вызваны либо logaut либо faq, либо purchase. if (token != null) { @@ -74,7 +75,7 @@ startScanner(BuildContext context) async { if (call.method == 'logout') { forceLogout(context); } else if (call.method == 'faq') { - faq(context, true); + faq(context, true); } else { String userString = call.arguments[0]; print('user: ${userString}'); @@ -84,7 +85,11 @@ startScanner(BuildContext context) async { Navigator.of(context).pushReplacement(route); } }); - await platform.invokeMethod('startScanner', {'token' : token}); + await platform.invokeMethod('startScanner', { + 'token' : token, + 'url': url, + 'appToken': appToken, + }); } } @@ -103,4 +108,4 @@ showYesNoDialog(BuildContext context, String title, String content, VoidCallback new FlatButton( child: new Text('Да'), onPressed: positiveCallback)])); -} \ No newline at end of file +} diff --git a/lib/consts.dart b/lib/consts.dart index 6ce6193..dd3466e 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; // Serious constants -const String url = 'http://pos-api-autoclub.dinect.com/20130701/'; -const String appToken = 'bdea0f3ba9034b688019a7cac753d1209e2b227f'; +const String appName = "Dinect"; + +const String url = 'https://pos-api-ote.dinect.com/20130701/'; +const String appToken = '9fec83cdca38c357e6b65dbb17514cdd36bf2a08'; // Texts const String merchantIDHint = 'ID магазина'; @@ -35,4 +37,4 @@ const Color faqTitlesColor = const Color(0xff404040); const double verticalMargin = 28.0; const double buttonVerticalMargin = 42.0; const double buttonHeight = 48.0; -const double iconHeight = 20.0; \ No newline at end of file +const double iconHeight = 20.0; diff --git a/lib/main.dart b/lib/main.dart index 98574cd..10f340d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,11 +9,11 @@ void main() { class Checker extends StatelessWidget { @override Widget build(BuildContext context) { - return new MaterialApp(title: "AutoClub", - home: new SplashScreen(), + return new MaterialApp(title: appName, + home: new SplashScreen(), theme: new ThemeData( primaryColor: primaryColor, accentColor: primaryColor )); } -} \ No newline at end of file +} diff --git a/lib/purchase.dart b/lib/purchase.dart index 7e737fd..8aa5439 100644 --- a/lib/purchase.dart +++ b/lib/purchase.dart @@ -95,7 +95,7 @@ class PurchaseScreenState extends BaseState { } @override getTextWidget() { - return new TextField(keyboardType: TextInputType.text, decoration: new InputDecoration.collapsed(hintText: getHint(), + return new TextField(keyboardType: TextInputType.number, decoration: new InputDecoration.collapsed(hintText: getHint(), hintStyle: new TextStyle(color: greyTextColor, fontSize: 16.0)), controller: controller, onChanged: (text) => handleUserInput(text)); @@ -111,9 +111,9 @@ class PurchaseScreenState extends BaseState { }; httpClient.get(url, headers: headers).then((response) { - + print(response.body); - + Map bonuses = JSON.decode(response.body); String type = bonuses['type']; setState(() { @@ -122,7 +122,7 @@ class PurchaseScreenState extends BaseState { } else { List amountToBonus = bonuses['amount_to_bonus']; double loyalityVal = (double.parse(amountToBonus[1]) / amountToBonus[0]) * 100; - this.loyality = '${loyalityVal.toStringAsFixed(0)}%'; + this.loyality = '${loyalityVal.toStringAsFixed(0)}%'; } }); }).catchError((error) { @@ -180,7 +180,7 @@ class PurchaseScreenState extends BaseState { 'doc_id': result, 'curr_iso_code': '643', 'commit': 'true', - 'sum_total': sum_total + 'sum_total': sum_total }; var headers = { @@ -189,7 +189,7 @@ class PurchaseScreenState extends BaseState { }; httpClient.post(url, body: body, headers: headers).then((response) { - + print(response.body); Navigator.of(context).pop(); pushRoute(context, new PurchaseSuccessScreen(sum_total, user['first_name'] == null ? '' : user['first_name'])); @@ -200,4 +200,4 @@ class PurchaseScreenState extends BaseState { }); } } -} \ No newline at end of file +}