Move logout button to settings. Replace logout button in menu with shutdown button.
This commit is contained in:
@@ -71,7 +71,6 @@ public abstract class AbstractScannerActivity extends AppCompatActivity impleme
|
|||||||
public static final String SCAN_MODES = "SCAN_MODES";
|
public static final String SCAN_MODES = "SCAN_MODES";
|
||||||
public static final String ERROR_INFO = "ERROR_INFO";
|
public static final String ERROR_INFO = "ERROR_INFO";
|
||||||
|
|
||||||
protected LogoutDialogFragment logoutDialog;
|
|
||||||
private ApiClient mClient;
|
private ApiClient mClient;
|
||||||
private StatedImageButton statedImageButton;
|
private StatedImageButton statedImageButton;
|
||||||
|
|
||||||
@@ -167,7 +166,7 @@ public abstract class AbstractScannerActivity extends AppCompatActivity impleme
|
|||||||
EditText manualInput = (EditText) findViewById(R.id.manual_input);
|
EditText manualInput = (EditText) findViewById(R.id.manual_input);
|
||||||
|
|
||||||
// для удобства, чтоб не вводить постоянно руками при разработке
|
// для удобства, чтоб не вводить постоянно руками при разработке
|
||||||
//manualInput.setText("4620011139016317023320337");
|
manualInput.setText("4620011139016337050236302");
|
||||||
|
|
||||||
manualInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
manualInput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -287,7 +286,7 @@ public abstract class AbstractScannerActivity extends AppCompatActivity impleme
|
|||||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||||
menu.findItem(R.id.settings).setIcon(getResources().getDrawable(R.drawable.settings));
|
menu.findItem(R.id.settings).setIcon(getResources().getDrawable(R.drawable.settings));
|
||||||
menu.findItem(R.id.faq).setIcon(getResources().getDrawable(R.drawable.help));
|
menu.findItem(R.id.faq).setIcon(getResources().getDrawable(R.drawable.help));
|
||||||
menu.findItem(R.id.logout).setIcon(getResources().getDrawable(R.drawable.logout));
|
menu.findItem(R.id.exit).setIcon(getResources().getDrawable(R.drawable.exit));
|
||||||
return super.onPrepareOptionsMenu(menu);
|
return super.onPrepareOptionsMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,10 +298,8 @@ public abstract class AbstractScannerActivity extends AppCompatActivity impleme
|
|||||||
setResult(RESULT_OK, intent);
|
setResult(RESULT_OK, intent);
|
||||||
finish();
|
finish();
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.logout) {
|
} else if (item.getItemId() == R.id.exit) {
|
||||||
int color = (int) getIntent().getLongExtra(MainActivity.PREF_APP_BAR_COLOR, 0xffffff);
|
exit();
|
||||||
logoutDialog = LogoutDialogFragment.newInstance(color);
|
|
||||||
logoutDialog.show(getFragmentManager(), "logout");
|
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.faq) {
|
} else if (item.getItemId() == R.id.faq) {
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
@@ -314,57 +311,10 @@ public abstract class AbstractScannerActivity extends AppCompatActivity impleme
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dismissDialog() {
|
void exit() {
|
||||||
if (logoutDialog != null) {
|
|
||||||
logoutDialog.dismiss();
|
|
||||||
logoutDialog = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void logout() {
|
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.putExtra("item", "logout");
|
intent.putExtra("item", "exit");
|
||||||
setResult(RESULT_OK, intent);
|
setResult(RESULT_OK, intent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class LogoutDialogFragment extends DialogFragment {
|
|
||||||
|
|
||||||
static LogoutDialogFragment newInstance(int color) {
|
|
||||||
LogoutDialogFragment f = new LogoutDialogFragment();
|
|
||||||
Bundle bundle = new Bundle();
|
|
||||||
bundle.putInt(MainActivity.PREF_APP_BAR_COLOR, color);
|
|
||||||
f.setArguments(bundle);
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
||||||
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
|
||||||
final LayoutInflater inflater = getActivity().getLayoutInflater();
|
|
||||||
final View content = inflater.inflate(R.layout.f_logout_dialog, null);
|
|
||||||
builder.setView(content);
|
|
||||||
final TextView positiveButton = (TextView) content.findViewById(R.id.positiveButton);
|
|
||||||
final TextView negativeButton = (TextView) content.findViewById(R.id.negativeButton);
|
|
||||||
// Можно делать через стили, но я не уверен, что необходимо в нашем случае
|
|
||||||
positiveButton.setTextColor(getArguments().getInt(MainActivity.PREF_APP_BAR_COLOR));
|
|
||||||
negativeButton.setTextColor(getArguments().getInt(MainActivity.PREF_APP_BAR_COLOR));
|
|
||||||
|
|
||||||
negativeButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
((AbstractScannerActivity) getActivity()).dismissDialog();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
positiveButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
((AbstractScannerActivity) getActivity()).logout();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return builder.create();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.content.res.Configuration;
|
|||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
import android.util.Log;
|
||||||
import com.dinect.checker.zbar.CameraActivity;
|
import com.dinect.checker.zbar.CameraActivity;
|
||||||
import com.dinect.checker.zxing.ScannerActivity;
|
import com.dinect.checker.zxing.ScannerActivity;
|
||||||
import io.flutter.app.FlutterActivity;
|
import io.flutter.app.FlutterActivity;
|
||||||
@@ -89,6 +90,10 @@ public class MainActivity extends FlutterActivity {
|
|||||||
case "showBonus":
|
case "showBonus":
|
||||||
result.success(BuildConfig.showBonus);
|
result.success(BuildConfig.showBonus);
|
||||||
break;
|
break;
|
||||||
|
case "finish":
|
||||||
|
Log.d("kifio", call.method);
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
result.notImplemented();
|
result.notImplemented();
|
||||||
break;
|
break;
|
||||||
@@ -148,7 +153,11 @@ public class MainActivity extends FlutterActivity {
|
|||||||
} else {
|
} else {
|
||||||
String menuItem = data.getExtras().getString("item", null);
|
String menuItem = data.getExtras().getString("item", null);
|
||||||
if (menuItem != null) {
|
if (menuItem != null) {
|
||||||
|
if (menuItem.equals("exit")) {
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
mChannel.invokeMethod(menuItem, null);
|
mChannel.invokeMethod(menuItem, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -19,9 +19,9 @@
|
|||||||
android:title="@string/faq"
|
android:title="@string/faq"
|
||||||
android:icon="@drawable/help"/>
|
android:icon="@drawable/help"/>
|
||||||
|
|
||||||
<item android:id="@+id/logout"
|
<item android:id="@+id/exit"
|
||||||
android:title="@string/logout"
|
android:title="@string/exit"
|
||||||
android:icon="@drawable/logout"/>
|
android:icon="@drawable/exit"/>
|
||||||
|
|
||||||
</menu>
|
</menu>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -3,12 +3,8 @@
|
|||||||
<string name="scanner_title">Сканер карты</string>
|
<string name="scanner_title">Сканер карты</string>
|
||||||
<string name="scan">Сканировать</string>
|
<string name="scan">Сканировать</string>
|
||||||
<string name="faq">Справка</string>
|
<string name="faq">Справка</string>
|
||||||
<string name="logout">Выход</string>
|
<string name="exit">Закрыть приложение</string>
|
||||||
<string name="settings">Настройки</string>
|
<string name="settings">Настройки</string>
|
||||||
<string name="logout_title">Подтверждение</string>
|
|
||||||
<string name="logout_text">Вы действительно хотите выйти и ввести другой номер магазина?</string>
|
|
||||||
<string name="logout_yes">Да</string>
|
|
||||||
<string name="logout_no">Нет</string>
|
|
||||||
<string name="identifier_not_found">"Идентификатор %s не найден"</string>
|
<string name="identifier_not_found">"Идентификатор %s не найден"</string>
|
||||||
<string name="enter_manual">Введите номер карты</string>
|
<string name="enter_manual">Введите номер карты</string>
|
||||||
<string name="enter_phone">Телефон 79XXXXXXXXX</string>
|
<string name="enter_phone">Телефон 79XXXXXXXXX</string>
|
||||||
|
|||||||
@@ -3,12 +3,8 @@
|
|||||||
<string name="scanner_title">Сканер карти</string>
|
<string name="scanner_title">Сканер карти</string>
|
||||||
<string name="scan">Сканувати</string>
|
<string name="scan">Сканувати</string>
|
||||||
<string name="faq">Допомога</string>
|
<string name="faq">Допомога</string>
|
||||||
<string name="logout">Вихід</string>
|
<string name="exit">Закрыть приложение</string>
|
||||||
<string name="settings">Налаштування</string>
|
<string name="settings">Налаштування</string>
|
||||||
<string name="logout_title">Підтвердження</string>
|
|
||||||
<string name="logout_text">Ви дійсно хочете вийти і ввести інший номер магазину?</string>
|
|
||||||
<string name="logout_yes">Так</string>
|
|
||||||
<string name="logout_no">Ні</string>
|
|
||||||
<string name="identifier_not_found">"Ідентифікатор %s не знайден"</string>
|
<string name="identifier_not_found">"Ідентифікатор %s не знайден"</string>
|
||||||
<string name="enter_manual">Введіть штрихкод вручну</string>
|
<string name="enter_manual">Введіть штрихкод вручну</string>
|
||||||
<string name="enter_phone">Телефон 79XXXXXXXXX</string>
|
<string name="enter_phone">Телефон 79XXXXXXXXX</string>
|
||||||
|
|||||||
@@ -3,12 +3,8 @@
|
|||||||
<string name="scanner_title">Card Scanner</string>
|
<string name="scanner_title">Card Scanner</string>
|
||||||
<string name="scan">Scan</string>
|
<string name="scan">Scan</string>
|
||||||
<string name="faq">Help</string>
|
<string name="faq">Help</string>
|
||||||
<string name="logout">Logout</string>
|
<string name="exit">Exit</string>
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Settings</string>
|
||||||
<string name="logout_title">Сonfirmation</string>
|
|
||||||
<string name="logout_text">Do you really want to log out and enter a different store number?</string>
|
|
||||||
<string name="logout_yes">Yes</string>
|
|
||||||
<string name="logout_no">No</string>
|
|
||||||
<string name="identifier_not_found">"Identifier %s is not found"</string>
|
<string name="identifier_not_found">"Identifier %s is not found"</string>
|
||||||
<string name="enter_manual">Enter the card number</string>
|
<string name="enter_manual">Enter the card number</string>
|
||||||
<string name="enter_phone">Phone 79XXXXXXXXX</string>
|
<string name="enter_phone">Phone 79XXXXXXXXX</string>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1,6 +1,5 @@
|
|||||||
import 'package:checker/resources.dart';
|
import 'package:checker/resources.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
|
|
||||||
import 'package:checker/common.dart';
|
import 'package:checker/common.dart';
|
||||||
import 'package:checker/consts.dart';
|
import 'package:checker/consts.dart';
|
||||||
@@ -70,14 +69,10 @@ abstract class BaseState<T extends StatefulWidget> extends State<T> {
|
|||||||
child: getMenuItem(help_png, StringsLocalization.help())
|
child: getMenuItem(help_png, StringsLocalization.help())
|
||||||
));
|
));
|
||||||
|
|
||||||
helper.getToken().then((token){
|
menuItemList.add(new PopupMenuItem(
|
||||||
if (token != null) { // пользователь авторизован
|
value: 2,
|
||||||
menuItemList.add(new PopupMenuItem(
|
child: getMenuItem(exit_png, StringsLocalization.exit())
|
||||||
value: 2,
|
));
|
||||||
child: getMenuItem(logout_png, StringsLocalization.logout())
|
|
||||||
));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return <Widget>[
|
return <Widget>[
|
||||||
new PopupMenuButton<int>(
|
new PopupMenuButton<int>(
|
||||||
@@ -100,7 +95,8 @@ abstract class BaseState<T extends StatefulWidget> extends State<T> {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
logout(context, helper);
|
platform.invokeMethod('finish');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ logout(BuildContext context, SqliteHelper helper) async {
|
|||||||
getDeleteTokenRequest(token).then((response) {
|
getDeleteTokenRequest(token).then((response) {
|
||||||
helper.clear().then((result) {
|
helper.clear().then((result) {
|
||||||
// helper.close().then((_) {
|
// helper.close().then((_) {
|
||||||
Navigator.of(context).pop();
|
// Navigator.of(context).pop();
|
||||||
Navigator.of(context).pop();
|
// Navigator.of(context).pop();
|
||||||
pushRouteReplacement(
|
pushRouteReplacement(
|
||||||
context, new SplashScreen()); // Запускаем регистрацию
|
context, new SplashScreen()); // Запускаем регистрацию
|
||||||
// });
|
// });
|
||||||
@@ -93,15 +93,13 @@ startScanner(BuildContext context, String app, SqliteHelper helper) async {
|
|||||||
} else {
|
} else {
|
||||||
String token = await helper.getToken();
|
String token = await helper.getToken();
|
||||||
// Канал ловит вызовы методов из "нативной" части приложения.
|
// Канал ловит вызовы методов из "нативной" части приложения.
|
||||||
// Могут быть вызваны либо logout либо faq, либо purchase.
|
// Могут быть вызваны либо exit либо faq, либо purchase.
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
platform.setMethodCallHandler((MethodCall call) async {
|
platform.setMethodCallHandler((MethodCall call) async {
|
||||||
print('flutter handler');
|
print('flutter handler');
|
||||||
print(call.method);
|
print(call.method);
|
||||||
|
|
||||||
if (call.method == 'logout') {
|
if (call.method == 'findUser') {
|
||||||
forceLogout(token, context);
|
|
||||||
} else if (call.method == 'findUser') {
|
|
||||||
|
|
||||||
var userResponse;
|
var userResponse;
|
||||||
String cardPhone = call.arguments[0];
|
String cardPhone = call.arguments[0];
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
const String appName = "Dinect";
|
const String appName = "Dinect";
|
||||||
|
|
||||||
// Assets
|
// Assets
|
||||||
const String logout_png = 'assets/logout.png';
|
const String exit_png = 'assets/exit.png';
|
||||||
const String help_png = 'assets/help.png';
|
const String help_png = 'assets/help.png';
|
||||||
const String settings_png = 'assets/settings.png';
|
const String settings_png = 'assets/settings.png';
|
||||||
const String settings_arrow_png = 'assets/settings_arrow.png';
|
const String settings_arrow_png = 'assets/settings_arrow.png';
|
||||||
@@ -23,6 +23,7 @@ const Color greenBackground = const Color(0xff8ae28a);
|
|||||||
const Color faqGrey = const Color(0xff5b5b5b);
|
const Color faqGrey = const Color(0xff5b5b5b);
|
||||||
const Color faqTitlesColor = const Color(0xff404040);
|
const Color faqTitlesColor = const Color(0xff404040);
|
||||||
const Color inputFieldBackground = const Color(0xffefefef);
|
const Color inputFieldBackground = const Color(0xffefefef);
|
||||||
|
const Color logoutRed = const Color(0xffeb0004);
|
||||||
|
|
||||||
// Dimens
|
// Dimens
|
||||||
const double verticalMargin = 28.0;
|
const double verticalMargin = 28.0;
|
||||||
|
|||||||
13
lib/db.dart
13
lib/db.dart
@@ -75,8 +75,17 @@ class SqliteHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map> getSettings() async {
|
Future<Map> getSettings(bool withSession) async {
|
||||||
return await selectAll(tableSettings);
|
Map settings = await selectAll(tableSettings);
|
||||||
|
|
||||||
|
if (withSession) {
|
||||||
|
Map session = await selectAll(tableSession);
|
||||||
|
if (settings != null && session != null) {
|
||||||
|
settings.addAll(session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> getToken() async {
|
Future<String> getToken() async {
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"yes" : MessageLookupByLibrary.simpleMessage("Yes"),
|
"yes" : MessageLookupByLibrary.simpleMessage("Yes"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Settings"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Settings"),
|
||||||
"help" : MessageLookupByLibrary.simpleMessage("Help"),
|
"help" : MessageLookupByLibrary.simpleMessage("Help"),
|
||||||
"logout" : MessageLookupByLibrary.simpleMessage("Exit"),
|
"exit" : MessageLookupByLibrary.simpleMessage("Exit"),
|
||||||
|
"logout" : MessageLookupByLibrary.simpleMessage("Log Out"),
|
||||||
"currency" : MessageLookupByLibrary.simpleMessage("Currency"),
|
"currency" : MessageLookupByLibrary.simpleMessage("Currency"),
|
||||||
"locale" : MessageLookupByLibrary.simpleMessage("Language"),
|
"locale" : MessageLookupByLibrary.simpleMessage("Language"),
|
||||||
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Ruble"),
|
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Ruble"),
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"yes" : MessageLookupByLibrary.simpleMessage("Si"),
|
"yes" : MessageLookupByLibrary.simpleMessage("Si"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Las configuraciones"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Las configuraciones"),
|
||||||
"help" : MessageLookupByLibrary.simpleMessage("La Ayuda"),
|
"help" : MessageLookupByLibrary.simpleMessage("La Ayuda"),
|
||||||
"logout" : MessageLookupByLibrary.simpleMessage("Salir"),
|
"exit" : MessageLookupByLibrary.simpleMessage("Salir"),
|
||||||
|
"logout" : MessageLookupByLibrary.simpleMessage("Log Out"),
|
||||||
"currency" : MessageLookupByLibrary.simpleMessage("La Moneda"),
|
"currency" : MessageLookupByLibrary.simpleMessage("La Moneda"),
|
||||||
"locale" : MessageLookupByLibrary.simpleMessage("La lengua"),
|
"locale" : MessageLookupByLibrary.simpleMessage("La lengua"),
|
||||||
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Rublo"),
|
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Rublo"),
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"yes" : MessageLookupByLibrary.simpleMessage("Да"),
|
"yes" : MessageLookupByLibrary.simpleMessage("Да"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Настройки"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Настройки"),
|
||||||
"help" : MessageLookupByLibrary.simpleMessage("Справка"),
|
"help" : MessageLookupByLibrary.simpleMessage("Справка"),
|
||||||
"logout" : MessageLookupByLibrary.simpleMessage("Выход"),
|
"exit" : MessageLookupByLibrary.simpleMessage("Закрыть приложение"),
|
||||||
|
"logout" : MessageLookupByLibrary.simpleMessage("Выйти из аккаунта"),
|
||||||
"currency" : MessageLookupByLibrary.simpleMessage("Валюта"),
|
"currency" : MessageLookupByLibrary.simpleMessage("Валюта"),
|
||||||
"locale" : MessageLookupByLibrary.simpleMessage("Язык"),
|
"locale" : MessageLookupByLibrary.simpleMessage("Язык"),
|
||||||
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Рубль"),
|
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Рубль"),
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||||||
"yes" : MessageLookupByLibrary.simpleMessage("Так"),
|
"yes" : MessageLookupByLibrary.simpleMessage("Так"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Налаштування"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Налаштування"),
|
||||||
"help" : MessageLookupByLibrary.simpleMessage("Допомога"),
|
"help" : MessageLookupByLibrary.simpleMessage("Допомога"),
|
||||||
"logout" : MessageLookupByLibrary.simpleMessage("Вихід"),
|
"exit" : MessageLookupByLibrary.simpleMessage("Вихід"),
|
||||||
|
"logout" : MessageLookupByLibrary.simpleMessage("Log Out"),
|
||||||
"currency" : MessageLookupByLibrary.simpleMessage("Валюта"),
|
"currency" : MessageLookupByLibrary.simpleMessage("Валюта"),
|
||||||
"locale" : MessageLookupByLibrary.simpleMessage("Мова"),
|
"locale" : MessageLookupByLibrary.simpleMessage("Мова"),
|
||||||
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Рубль"),
|
"nominative_ruble": MessageLookupByLibrary.simpleMessage("Рубль"),
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ class Resources {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static String getSplash(String app) {
|
static String getSplash(String app) {
|
||||||
return 'assets/${app != null ? app : 'pip'}_splash.png';
|
// app != null ? app :
|
||||||
|
return 'assets/${'pip'}_splash.png';
|
||||||
}
|
}
|
||||||
|
|
||||||
static Color getPrimaryColor(String app) {
|
static Color getPrimaryColor(String app) {
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ class RegistrationScreenState extends BaseState<FinishRegistrationScreen> {
|
|||||||
// Если нет, то отправляется запрос на проверку статуса токена.
|
// Если нет, то отправляется запрос на проверку статуса токена.
|
||||||
handleTap() async {
|
handleTap() async {
|
||||||
if (_tokenActive) {
|
if (_tokenActive) {
|
||||||
|
Navigator.of(context).pop();
|
||||||
startScanner(context, app, helper);
|
startScanner(context, app, helper);
|
||||||
} else {
|
} else {
|
||||||
if (await platform.invokeMethod('isOnline')) {
|
if (await platform.invokeMethod('isOnline')) {
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ class SettingsScreen extends BaseScreen {
|
|||||||
|
|
||||||
SettingsScreen(helper, app, this.returnToScanner) : super(helper, app);
|
SettingsScreen(helper, app, this.returnToScanner) : super(helper, app);
|
||||||
|
|
||||||
@override State createState() => new SettingsState(helper, app, returnToScanner);
|
@override State createState() =>
|
||||||
|
new SettingsState(helper, app, returnToScanner);
|
||||||
}
|
}
|
||||||
|
|
||||||
class MenuItem {
|
class MenuItem {
|
||||||
@@ -29,6 +30,7 @@ class MenuItem {
|
|||||||
class SettingsState extends BaseState<SettingsScreen> {
|
class SettingsState extends BaseState<SettingsScreen> {
|
||||||
|
|
||||||
List<MenuItem> menuItems = [
|
List<MenuItem> menuItems = [
|
||||||
|
new MenuItem('', ''),
|
||||||
new MenuItem('', ''),
|
new MenuItem('', ''),
|
||||||
new MenuItem('', '')
|
new MenuItem('', '')
|
||||||
];
|
];
|
||||||
@@ -42,27 +44,35 @@ class SettingsState extends BaseState<SettingsScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override Widget build(BuildContext ctx) {
|
@override Widget build(BuildContext ctx) {
|
||||||
helper.getSettings().then((info) {
|
helper.getSettings(true).then((info) {
|
||||||
setState(() {
|
setState(() {
|
||||||
menuItems[0].title = StringsLocalization.currency();
|
menuItems[0].title = StringsLocalization.currency();
|
||||||
menuItems[1].title = StringsLocalization.locale();
|
menuItems[1].title = StringsLocalization.locale();
|
||||||
|
menuItems[2].title = StringsLocalization.logout();
|
||||||
menuItems[0].selectedValue = info['currency'].toString();
|
menuItems[0].selectedValue = info['currency'].toString();
|
||||||
menuItems[1].selectedValue = info['locale'] == null ? Intl.defaultLocale : info['locale'].toString();
|
menuItems[1].selectedValue =
|
||||||
|
info['locale'] == null ? Intl.defaultLocale : info['locale'];
|
||||||
|
menuItems[2].selectedValue =
|
||||||
|
info['token'] == null ? '' : getTokenSuffix(info['token']);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return new WillPopScope(onWillPop: onWillPop, child: getMainWidget());
|
return new WillPopScope(onWillPop: onWillPop, child: getMainWidget());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getTokenSuffix(String token) {
|
||||||
|
return token.substring(token.length - 4, token.length);
|
||||||
|
}
|
||||||
|
|
||||||
Widget getMainWidget() {
|
Widget getMainWidget() {
|
||||||
return new Scaffold(appBar: getAppBar(),
|
return new Scaffold(appBar: getAppBar(),
|
||||||
body: getScreenContent());
|
body: getScreenContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget getScreenContent() {
|
Widget getScreenContent() {
|
||||||
return new Container(
|
return new Container(
|
||||||
margin: new EdgeInsets.only(top: 16.0),
|
margin: new EdgeInsets.only(top: 16.0),
|
||||||
child: new ListView(children: getSettings()));
|
child: new ListView(children: getSettings()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -73,33 +83,58 @@ class SettingsState extends BaseState<SettingsScreen> {
|
|||||||
List<Widget> getSettings() {
|
List<Widget> getSettings() {
|
||||||
List<Widget> widgets = new List();
|
List<Widget> widgets = new List();
|
||||||
for (int i = 0; i < menuItems.length; i++) {
|
for (int i = 0; i < menuItems.length; i++) {
|
||||||
if (menuItems[i].selectedValue != '') {
|
if (menuItems[i].selectedValue.toString() != '') {
|
||||||
widgets.add(getSettingsItem(() => onPressed(menuItems.indexOf(menuItems[i])),
|
widgets.add(
|
||||||
|
getSettingsItem(() => onPressed(menuItems.indexOf(menuItems[i])),
|
||||||
menuItems[i].title,
|
menuItems[i].title,
|
||||||
i == 0 ? getCurrencyTitle(int.parse(menuItems[i].selectedValue)) : getLocaleTitle(menuItems[i].selectedValue)));
|
getValue(i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return widgets;
|
return widgets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String getValue(int position) {
|
||||||
|
switch (position) {
|
||||||
|
case 0 :
|
||||||
|
return getCurrencyTitle(int.parse(menuItems[position].selectedValue));
|
||||||
|
case 1 :
|
||||||
|
return getLocaleTitle(menuItems[position].selectedValue);
|
||||||
|
default :
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget getSettingsItem(VoidCallback onPressed, String title, String value) {
|
Widget getSettingsItem(VoidCallback onPressed, String title, String value) {
|
||||||
return new Container(
|
return new Container(
|
||||||
height: 56.0,
|
height: 56.0,
|
||||||
padding: new EdgeInsets.only(left: 8.0),
|
padding: new EdgeInsets.only(left: 8.0),
|
||||||
child: (new FlatButton(
|
child: (new FlatButton(
|
||||||
onPressed: onPressed,
|
onPressed: onPressed,
|
||||||
child: new Row(children: <Widget>[
|
child: getRow(title, value))));
|
||||||
new Expanded(child: new Text(title, style: new TextStyle(
|
}
|
||||||
fontWeight: FontWeight.w600,
|
|
||||||
color: faqGrey,
|
Widget getRow(String title, String value) {
|
||||||
fontSize: 14.0))),
|
if (value == null) {
|
||||||
new Text(value,
|
return new Row(children: <Widget>[
|
||||||
style: new TextStyle(
|
new Text(title, style: new TextStyle(
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w600,
|
||||||
color: faqGrey,
|
color: faqGrey,
|
||||||
fontSize: 14.0)),
|
fontSize: 14.0))
|
||||||
getArrow()
|
]);
|
||||||
]))));
|
} else {
|
||||||
|
return new Row(children: <Widget>[
|
||||||
|
new Expanded(child: new Text(title, style: new TextStyle(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: faqGrey,
|
||||||
|
fontSize: 14.0))),
|
||||||
|
new Text(value,
|
||||||
|
style: new TextStyle(
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
color: faqGrey,
|
||||||
|
fontSize: 14.0)),
|
||||||
|
getArrow()
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onPressed(int position) {
|
void onPressed(int position) {
|
||||||
@@ -108,12 +143,14 @@ class SettingsState extends BaseState<SettingsScreen> {
|
|||||||
return pushRoute(context, new CurrenciesScreen(helper, app));
|
return pushRoute(context, new CurrenciesScreen(helper, app));
|
||||||
case 1 :
|
case 1 :
|
||||||
return pushRoute(context, new LanguagesScreen(helper, app));
|
return pushRoute(context, new LanguagesScreen(helper, app));
|
||||||
|
case 2 :
|
||||||
|
return logout(context, helper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget getArrow() {
|
Widget getArrow() {
|
||||||
return new Container(margin: new EdgeInsets.only(left: 8.0),
|
return new Container(margin: new EdgeInsets.only(left: 8.0),
|
||||||
child: new Image.asset(settings_arrow_png, height: 42.0));
|
child: new Image.asset(settings_arrow_png, height: 42.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -122,7 +159,7 @@ class SettingsState extends BaseState<SettingsScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onWillPop() {
|
onWillPop() {
|
||||||
if(returnToScanner) {
|
if (returnToScanner) {
|
||||||
return startScanner(context, app, helper);
|
return startScanner(context, app, helper);
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class _SplashScreenState extends BaseState<SplashScreen> {
|
|||||||
|
|
||||||
void initWithSystemValue() {
|
void initWithSystemValue() {
|
||||||
platform.invokeMethod('getLocale').then((locale) {
|
platform.invokeMethod('getLocale').then((locale) {
|
||||||
helper.getSettings().then((settings) {
|
helper.getSettings(false).then((settings) {
|
||||||
if (settings == null) {
|
if (settings == null) {
|
||||||
createSettingsTable(locale);
|
createSettingsTable(locale);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ class StringsLocalization {
|
|||||||
static String idNotFound() => Intl.message('ID_not_found', name: 'ID_not_found', locale: Intl.defaultLocale);
|
static String idNotFound() => Intl.message('ID_not_found', name: 'ID_not_found', locale: Intl.defaultLocale);
|
||||||
static String settings() => Intl.message('settings', name: 'settings', locale: Intl.defaultLocale);
|
static String settings() => Intl.message('settings', name: 'settings', locale: Intl.defaultLocale);
|
||||||
static String help() => Intl.message('help', name: 'help', locale: Intl.defaultLocale);
|
static String help() => Intl.message('help', name: 'help', locale: Intl.defaultLocale);
|
||||||
|
static String exit() => Intl.message('exit', name: 'exit', locale: Intl.defaultLocale);
|
||||||
static String logout() => Intl.message('logout', name: 'logout', locale: Intl.defaultLocale);
|
static String logout() => Intl.message('logout', name: 'logout', locale: Intl.defaultLocale);
|
||||||
static String currency() => Intl.message('currency', name: 'currency', locale: Intl.defaultLocale);
|
static String currency() => Intl.message('currency', name: 'currency', locale: Intl.defaultLocale);
|
||||||
static String locale() => Intl.message('locale', name: 'locale', locale: Intl.defaultLocale);
|
static String locale() => Intl.message('locale', name: 'locale', locale: Intl.defaultLocale);
|
||||||
|
|||||||
302
pubspec.lock
Normal file
302
pubspec.lock
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
# Generated by pub
|
||||||
|
# See http://pub.dartlang.org/doc/glossary.html#lockfile
|
||||||
|
packages:
|
||||||
|
analyzer:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: analyzer
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.30.0+4"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.13.7"
|
||||||
|
async:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: async
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.3"
|
||||||
|
barback:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: barback
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.15.2+14"
|
||||||
|
charcode:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: charcode
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
|
cli_util:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cli_util
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.2+1"
|
||||||
|
collection:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: collection
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.14.5"
|
||||||
|
convert:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: convert
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.1"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.2+1"
|
||||||
|
csslib:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: csslib
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.1"
|
||||||
|
dart_style:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dart_style
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.9+1"
|
||||||
|
flutter:
|
||||||
|
dependency: "direct main"
|
||||||
|
description: flutter
|
||||||
|
source: sdk
|
||||||
|
version: "0.0.0"
|
||||||
|
front_end:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: front_end
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.0-alpha.4.1"
|
||||||
|
glob:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: glob
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.5"
|
||||||
|
html:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: html
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.13.2+2"
|
||||||
|
http:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.11.3+16"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.1"
|
||||||
|
image_picker:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: image_picker
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.5"
|
||||||
|
intl:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: intl
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.15.2"
|
||||||
|
intl_translation:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: intl_translation
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.15.0"
|
||||||
|
isolate:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: isolate
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
kernel:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: kernel
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.3.0-alpha.1.1"
|
||||||
|
logging:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: logging
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.11.3+1"
|
||||||
|
matcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: matcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.12.1+4"
|
||||||
|
meta:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: meta
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
|
package_config:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_config
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.3"
|
||||||
|
path:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.5.1"
|
||||||
|
path_provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.2"
|
||||||
|
petitparser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: petitparser
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.7.0"
|
||||||
|
plugin:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: plugin
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.0+2"
|
||||||
|
pool:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pool
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.4"
|
||||||
|
sky_engine:
|
||||||
|
dependency: transitive
|
||||||
|
description: flutter
|
||||||
|
source: sdk
|
||||||
|
version: "0.0.99"
|
||||||
|
source_span:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_span
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.0"
|
||||||
|
sprintf:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: sprintf
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.2"
|
||||||
|
sqflite:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: sqflite
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.2+1"
|
||||||
|
stack_trace:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: stack_trace
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.9.1"
|
||||||
|
string_scanner:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: string_scanner
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
|
synchronized:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: synchronized
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.2.0"
|
||||||
|
typed_data:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: typed_data
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.4"
|
||||||
|
utf:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: utf
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.0+3"
|
||||||
|
vector_math:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_math
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.5"
|
||||||
|
watcher:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: watcher
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.9.7+6"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.13"
|
||||||
|
sdks:
|
||||||
|
dart: ">=2.0.0-dev.15.0 <=2.0.0-dev.19.0"
|
||||||
@@ -39,7 +39,7 @@ flutter:
|
|||||||
- assets/settings_arrow.png
|
- assets/settings_arrow.png
|
||||||
- assets/help.png
|
- assets/help.png
|
||||||
- assets/check.png
|
- assets/check.png
|
||||||
- assets/logout.png
|
- assets/exit.png
|
||||||
- assets/activate_token_message_background.png
|
- assets/activate_token_message_background.png
|
||||||
- assets/active_token_message_background.png
|
- assets/active_token_message_background.png
|
||||||
- assets/faq_expansion_icon.png
|
- assets/faq_expansion_icon.png
|
||||||
|
|||||||
Reference in New Issue
Block a user