正在查看: ЦБ РФ v1.1 应用的 DevicesActivity.java JAVA 源代码文件
本页面展示 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();
}
}
}