导航菜单

页面标题

页面副标题

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

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

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


package com.example.myreader;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myreader.DevicesActivity;
import com.example.myreader.DevicesAdapter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
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 DevicesActivity extends AppCompatActivity implements DevicesAdapter.OnDeviceActionListener {
    private static final int CONNECTION_TIMEOUT_MS = 30000;
    private static final int MAX_RECONNECT_ATTEMPTS = 3;
    private static final int RECONNECT_DELAY_MS = 3000;
    private DevicesAdapter adapter;
    private RecyclerView recyclerView;
    private EditText searchEditText;
    private String token;
    private WebSocket webSocket;
    private List<Device> devices = new ArrayList();
    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    private int reconnectAttempts = 0;

    static int access$108(DevicesActivity x0) {
        int i = x0.reconnectAttempts;
        x0.reconnectAttempts = i + 1;
        return i;
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_devices);
        this.token = getIntent().getStringExtra(Constants.KEY_TOKEN);
        Log.d("DevicesActivity", "Получен токен: " + this.token);
        String str = this.token;
        if (str == null || str.isEmpty()) {
            Toast.makeText((Context) this, (CharSequence) "Ошибка: токен не найден", 0).show();
            finish();
            return;
        }
        ThemeManager.applyTheme(this);
        this.recyclerView = findViewById(R.id.recyclerView);
        this.searchEditText = (EditText) findViewById(R.id.searchEditText);
        ImageButton backButton = (ImageButton) findViewById(R.id.backButton);
        Button deleteAllButton = (Button) findViewById(R.id.deleteAllButton);
        backButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public final void onClick(View view) {
                DevicesActivity.this.m0lambda$onCreate$0$comexamplemyreaderDevicesActivity(view);
            }
        });
        deleteAllButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public final void onClick(View view) {
                DevicesActivity.this.m2lambda$onCreate$2$comexamplemyreaderDevicesActivity(view);
            }
        });
        this.recyclerView.setLayoutManager(new LinearLayoutManager(this));
        DevicesAdapter devicesAdapter = new DevicesAdapter(this, this.devices, this);
        this.adapter = devicesAdapter;
        this.recyclerView.setAdapter(devicesAdapter);
        connectWebSocket();
        this.searchEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                DevicesActivity.this.filterDevices(s.toString());
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

    void m0lambda$onCreate$0$comexamplemyreaderDevicesActivity(View v) {
        finish();
    }

    void m2lambda$onCreate$2$comexamplemyreaderDevicesActivity(View v) {
        new AlertDialog.Builder(this, R.style.AlertDialogTheme).setTitle("Удалить все устройства").setMessage("Вы уверены, что хотите удалить все устройства?").setPositiveButton("Да", new DialogInterface.OnClickListener() {
            @Override
            public final void onClick(DialogInterface dialogInterface, int i) {
                DevicesActivity.this.m1lambda$onCreate$1$comexamplemyreaderDevicesActivity(dialogInterface, i);
            }
        }).setNegativeButton("Нет", (DialogInterface.OnClickListener) null).show();
    }

    void m1lambda$onCreate$1$comexamplemyreaderDevicesActivity(DialogInterface dialog, int which) {
        try {
            JSONObject request = new JSONObject();
            request.put("cmd", "delete_all_devices");
            request.put(Constants.KEY_TOKEN, this.token);
            String requestStr = request.toString();
            Log.d("DevicesActivity", "Sending delete all request: " + requestStr);
            boolean sent = this.webSocket.send(requestStr);
            Log.d("DevicesActivity", "Delete all request sent successfully: " + sent);
        } catch (Exception e) {
            Log.e("DevicesActivity", "Error sending delete all request", e);
            Toast.makeText((Context) this, (CharSequence) "Ошибка при отправке запроса", 0).show();
        }
    }

    public void connectWebSocket() {
        OkHttpClient client = new OkHttpClient.Builder().connectTimeout(30000L, TimeUnit.MILLISECONDS).readTimeout(30000L, TimeUnit.MILLISECONDS).writeTimeout(30000L, TimeUnit.MILLISECONDS).build();
        String wsUrl = Constants.getWebsocketUrl(Constants.getSelectedServer(this));
        Request request = new Request.Builder().url(wsUrl).build();
        this.webSocket = client.newWebSocket(request, new AnonymousClass2());
    }

    class AnonymousClass2 extends WebSocketListener {
        AnonymousClass2() {
        }

        public void onOpen(WebSocket webSocket, Response response) {
            Log.d("DevicesActivity", "WebSocket connected");
            DevicesActivity.this.reconnectAttempts = 0;
            try {
                JSONObject request = new JSONObject();
                request.put("cmd", "get_device2_devices");
                request.put(Constants.KEY_TOKEN, DevicesActivity.this.token);
                webSocket.send(request.toString());
            } catch (Exception e) {
                e.printStackTrace();
                DevicesActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public final void run() {
                        DevicesActivity.AnonymousClass2.this.m12lambda$onOpen$0$comexamplemyreaderDevicesActivity$2();
                    }
                });
            }
        }

        void m12lambda$onOpen$0$comexamplemyreaderDevicesActivity$2() {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) "Ошибка при запросе девайсов", 0).show();
        }

        public void onMessage(WebSocket webSocket, String text) {
            JSONObject pongResponse;
            Date lastConnected;
            boolean isBanned;
            try {
                Log.d("DevicesActivity", "Received message: " + text);
                JSONObject response = new JSONObject(text);
                try {
                    if (response.has("cmd")) {
                        String cmd = response.getString("cmd");
                        Log.d("DevicesActivity", "Command received: " + cmd);
                        int i = 1;
                        if (cmd.equals("get_device2_devices_response")) {
                            if (response.getBoolean("success")) {
                                final List<Device> newDevices = new ArrayList<>();
                                JSONArray devicesArray = response.getJSONArray("devices");
                                int i2 = 0;
                                while (i2 < devicesArray.length()) {
                                    JSONObject deviceObj = devicesArray.getJSONObject(i2);
                                    Log.d("DevicesActivity", "Device JSON: " + deviceObj.toString());
                                    String lastConnectedStr = deviceObj.getString("last_connected");
                                    try {
                                        lastConnected = DevicesActivity.this.dateFormat.parse(lastConnectedStr);
                                    } catch (ParseException e) {
                                        lastConnected = new Date();
                                    }
                                    if (!deviceObj.has("is_banned")) {
                                        isBanned = false;
                                    } else {
                                        int bannedValue = deviceObj.getInt("is_banned");
                                        boolean isBanned2 = bannedValue == i;
                                        isBanned = isBanned2;
                                    }
                                    Device device = new Device(deviceObj.getString("hwid"), deviceObj.getString("username"), deviceObj.getInt("is_connected") == i, isBanned, lastConnected, deviceObj.getString("status"), deviceObj.getString("app_version"), deviceObj.getInt("id"));
                                    Log.d("DevicesActivity", "Created device: " + device.getHwid() + ", is_banned: " + device.isBlocked());
                                    newDevices.add(device);
                                    i2++;
                                    i = 1;
                                }
                                DevicesActivity.this.runOnUiThread(new Runnable() {
                                    @Override
                                    public final void run() {
                                        DevicesActivity.AnonymousClass2.this.m5lambda$onMessage$1$comexamplemyreaderDevicesActivity$2(newDevices);
                                    }
                                });
                            } else {
                                final String errorMessage = response.getString("message");
                                DevicesActivity.this.runOnUiThread(new Runnable() {
                                    @Override
                                    public final void run() {
                                        DevicesActivity.AnonymousClass2.this.m6lambda$onMessage$2$comexamplemyreaderDevicesActivity$2(errorMessage);
                                    }
                                });
                            }
                        } else if (cmd.equals("ban_device_response")) {
                            Log.d("DevicesActivity", "Ban response received: " + response.toString());
                            if (response.getBoolean("success")) {
                                final String message = response.getString("message");
                                final boolean isBanned3 = response.getInt("is_banned") == 1;
                                final String hwid = response.getString("hwid");
                                DevicesActivity.this.runOnUiThread(new Runnable() {
                                    @Override
                                    public final void run() {
                                        DevicesActivity.AnonymousClass2.this.m7lambda$onMessage$3$comexamplemyreaderDevicesActivity$2(message, hwid, isBanned3);
                                    }
                                });
                            } else {
                                final String errorMessage2 = response.getString("message");
                                DevicesActivity.this.runOnUiThread(new Runnable() {
                                    @Override
                                    public final void run() {
                                        DevicesActivity.AnonymousClass2.this.m8lambda$onMessage$4$comexamplemyreaderDevicesActivity$2(errorMessage2);
                                    }
                                });
                            }
                        } else if (cmd.equals("delete_all_devices_response")) {
                            Log.d("DevicesActivity", "Delete all response received: " + response.toString());
                            if (response.getBoolean("success")) {
                                final String message2 = response.getString("message");
                                DevicesActivity.this.runOnUiThread(new Runnable() {
                                    @Override
                                    public final void run() {
                                        DevicesActivity.AnonymousClass2.this.m9lambda$onMessage$5$comexamplemyreaderDevicesActivity$2(message2);
                                    }
                                });
                            } else {
                                final String errorMessage3 = response.getString("message");
                                DevicesActivity.this.runOnUiThread(new Runnable() {
                                    @Override
                                    public final void run() {
                                        DevicesActivity.AnonymousClass2.this.m10lambda$onMessage$6$comexamplemyreaderDevicesActivity$2(errorMessage3);
                                    }
                                });
                            }
                        } else if (cmd.equals("ping")) {
                            try {
                                pongResponse = new JSONObject();
                                pongResponse.put("cmd", "pong");
                            } catch (Exception e2) {
                                e = e2;
                            }
                            try {
                                webSocket.send(pongResponse.toString());
                                Log.d("DevicesActivity", "Sent pong response");
                            } catch (Exception e3) {
                                e = e3;
                                Log.e("DevicesActivity", "Error sending pong response", e);
                                return;
                            }
                        } else {
                            Log.d("DevicesActivity", "Unknown command received: " + cmd);
                        }
                        return;
                    }
                    Log.d("DevicesActivity", "Message without cmd field received: " + text);
                } catch (Exception e4) {
                    e = e4;
                    e.printStackTrace();
                    DevicesActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public final void run() {
                            DevicesActivity.AnonymousClass2.this.m11lambda$onMessage$7$comexamplemyreaderDevicesActivity$2();
                        }
                    });
                }
            } catch (Exception e5) {
                e = e5;
                e.printStackTrace();
                DevicesActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public final void run() {
                        DevicesActivity.AnonymousClass2.this.m11lambda$onMessage$7$comexamplemyreaderDevicesActivity$2();
                    }
                });
            }
        }

        void m5lambda$onMessage$1$comexamplemyreaderDevicesActivity$2(List newDevices) {
            DevicesActivity.this.devices.clear();
            DevicesActivity.this.devices.addAll(newDevices);
            DevicesActivity.this.adapter.updateDevices(DevicesActivity.this.devices);
        }

        void m6lambda$onMessage$2$comexamplemyreaderDevicesActivity$2(String errorMessage) {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) ("Ошибка: " + errorMessage), 0).show();
        }

        void m7lambda$onMessage$3$comexamplemyreaderDevicesActivity$2(String message, String hwid, boolean isBanned) {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) message, 0).show();
            Iterator it = DevicesActivity.this.devices.iterator();
            while (true) {
                if (!it.hasNext()) {
                    break;
                }
                Device device = (Device) it.next();
                if (device.getHwid().equals(hwid)) {
                    device.setBlocked(isBanned);
                    break;
                }
            }
            DevicesActivity.this.adapter.notifyDataSetChanged();
        }

        void m8lambda$onMessage$4$comexamplemyreaderDevicesActivity$2(String errorMessage) {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) ("Ошибка: " + errorMessage), 0).show();
        }

        void m9lambda$onMessage$5$comexamplemyreaderDevicesActivity$2(String message) {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) message, 0).show();
            DevicesActivity.this.devices.clear();
            DevicesActivity.this.adapter.updateDevices(DevicesActivity.this.devices);
        }

        void m10lambda$onMessage$6$comexamplemyreaderDevicesActivity$2(String errorMessage) {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) ("Ошибка: " + errorMessage), 0).show();
        }

        void m11lambda$onMessage$7$comexamplemyreaderDevicesActivity$2() {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) "Ошибка при получении девайсов", 0).show();
        }

        public void onFailure(WebSocket webSocket, Throwable t, Response response) {
            Log.e("DevicesActivity", "WebSocket connection failed", t);
            DevicesActivity.this.runOnUiThread(new Runnable() {
                @Override
                public final void run() {
                    DevicesActivity.AnonymousClass2.this.m4lambda$onFailure$9$comexamplemyreaderDevicesActivity$2();
                }
            });
        }

        void m4lambda$onFailure$9$comexamplemyreaderDevicesActivity$2() {
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) "Ошибка подключения к серверу", 0).show();
            if (DevicesActivity.this.reconnectAttempts < DevicesActivity.MAX_RECONNECT_ATTEMPTS) {
                DevicesActivity.access$108(DevicesActivity.this);
                Log.d("DevicesActivity", "Attempting to reconnect... (attempt " + DevicesActivity.this.reconnectAttempts + " of " + DevicesActivity.MAX_RECONNECT_ATTEMPTS + ")");
                Toast.makeText((Context) DevicesActivity.this, (CharSequence) "Переподключение...", 0).show();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public final void run() {
                        DevicesActivity.AnonymousClass2.this.m3lambda$onFailure$8$comexamplemyreaderDevicesActivity$2();
                    }
                }, 3000L);
                return;
            }
            Log.e("DevicesActivity", "Max reconnection attempts reached");
            Toast.makeText((Context) DevicesActivity.this, (CharSequence) "Не удалось подключиться к серверу", 1).show();
            DevicesActivity.this.finish();
        }

        void m3lambda$onFailure$8$comexamplemyreaderDevicesActivity$2() {
            if (!DevicesActivity.this.isFinishing()) {
                DevicesActivity.this.connectWebSocket();
            }
        }

        public void onClosed(WebSocket webSocket, int code, String reason) {
            Log.d("DevicesActivity", "WebSocket closed: " + reason);
        }
    }

    public void onBackPressed() {
        WebSocket webSocket = this.webSocket;
        if (webSocket != null) {
            webSocket.close(1000, "User pressed back");
        }
        SharedPreferences prefs = getSharedPreferences(Constants.PREF_NAME, 0);
        prefs.edit().remove(Constants.KEY_TOKEN).apply();
        Intent intent = new Intent((Context) this, (Class<?>) MainActivity.class);
        intent.setFlags(268468224);
        startActivity(intent);
        finish();
    }

    protected void onDestroy() {
        super.onDestroy();
        WebSocket webSocket = this.webSocket;
        if (webSocket != null) {
            webSocket.close(1000, "Activity destroyed");
        }
    }

    public void filterDevices(String query) {
        List<Device> filteredList = new ArrayList<>();
        if (query.isEmpty()) {
            filteredList.addAll(this.devices);
        } else {
            String query2 = query.toLowerCase();
            for (Device device : this.devices) {
                if (device.getHwid().toLowerCase().contains(query2) || device.getName().toLowerCase().contains(query2)) {
                    filteredList.add(device);
                }
            }
        }
        this.adapter.updateDevices(filteredList);
    }

    @Override
    public void onBlockClick(Device device) {
        Log.d("DevicesActivity", "onBlockClick called for device: " + device.getHwid() + ", current blocked state: " + device.isBlocked());
        try {
            JSONObject request = new JSONObject();
            request.put("cmd", "ban_device");
            request.put("hwid", device.getHwid());
            request.put("is_banned", !device.isBlocked());
            request.put(Constants.KEY_TOKEN, this.token);
            String requestStr = request.toString();
            Log.d("DevicesActivity", "Sending ban request: " + requestStr);
            boolean sent = this.webSocket.send(requestStr);
            Log.d("DevicesActivity", "Ban request sent successfully: " + sent);
        } catch (Exception e) {
            Log.e("DevicesActivity", "Error sending ban request", e);
            Toast.makeText((Context) this, (CharSequence) "Ошибка при отправке запроса", 0).show();
        }
    }
}