diff --git a/app/src/main/java/com/miraclegarden/smsmessage/Activity/AppListActivity.java b/app/src/main/java/com/miraclegarden/smsmessage/Activity/AppListActivity.java index f71a8ca..63b208e 100644 --- a/app/src/main/java/com/miraclegarden/smsmessage/Activity/AppListActivity.java +++ b/app/src/main/java/com/miraclegarden/smsmessage/Activity/AppListActivity.java @@ -1,16 +1,14 @@ package com.miraclegarden.smsmessage.Activity; -import android.content.SharedPreferences; +import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import com.miraclegarden.library.app.MiracleGardenActivity; import com.miraclegarden.smsmessage.ActionConfirmDialog; @@ -21,21 +19,38 @@ import com.miraclegarden.smsmessage.R; import com.miraclegarden.smsmessage.comm.CommonAdapter; import com.miraclegarden.smsmessage.comm.ViewHolder; import com.miraclegarden.smsmessage.databinding.AppListSettingBinding; +import com.miraclegarden.smsmessage.network.TokenManager; import java.util.ArrayList; public class AppListActivity extends MiracleGardenActivity { - public static SharedPreferences sp; + private TokenManager tokenManager; private ArrayList appList = new ArrayList<>(); CommonAdapter userAdapter; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sp = getSharedPreferences("server", MODE_PRIVATE); - initData(); + tokenManager = TokenManager.getInstance(this); + if (!tokenManager.isLoggedIn()) { + startActivity(new Intent(this, LoginActivity.class)); + finish(); + return; + } + initView(); + } + private void initView() { + String username = tokenManager.getUsername(); + if (username != null) { + binding.tvUsername.setText(username); + } + + binding.backIv.setOnClickListener(view -> finish()); + binding.recyclerview.setLayoutManager(new LinearLayoutManager(this)); + initAdapter(); } @Override @@ -71,9 +86,7 @@ public class AppListActivity extends MiracleGardenActivity finish()); - binding.recyclerview.setLayoutManager(new LinearLayoutManager(this)); + private void initAdapter() { userAdapter = new CommonAdapter<>(AppListActivity.this, R.layout.item_user, appList) { @Override public void convert(ViewHolder holder, AppInfo info, int index) { diff --git a/app/src/main/java/com/miraclegarden/smsmessage/Activity/MainActivity.java b/app/src/main/java/com/miraclegarden/smsmessage/Activity/MainActivity.java index cc68a89..f488d29 100644 --- a/app/src/main/java/com/miraclegarden/smsmessage/Activity/MainActivity.java +++ b/app/src/main/java/com/miraclegarden/smsmessage/Activity/MainActivity.java @@ -4,70 +4,160 @@ import android.Manifest; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; -import android.content.pm.PermissionInfo; +import android.net.Uri; +import android.os.Build; import android.os.Bundle; -import android.os.Handler; -import android.util.Log; +import android.os.PowerManager; +import android.provider.Settings; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; import android.widget.Toast; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import com.miraclegarden.library.app.MiracleGardenActivity; import com.miraclegarden.smsmessage.databinding.ActivityMainBinding; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; +import com.miraclegarden.smsmessage.network.TokenManager; +import com.miraclegarden.smsmessage.util.OEMBackgroundHelper; public class MainActivity extends MiracleGardenActivity { - public static SharedPreferences sp; - private static final String TAG = "MainActivity"; + + private TokenManager tokenManager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sp = getSharedPreferences("server", MODE_PRIVATE); - initData(); + tokenManager = TokenManager.getInstance(this); + + if (!tokenManager.isLoggedIn()) { + startActivity(new Intent(this, LoginActivity.class)); + finish(); + return; + } + initView(); } - private void initData() { - if (sp == null) { + @Override + protected void onResume() { + super.onResume(); + if (!tokenManager.isLoggedIn()) { + startActivity(new Intent(this, LoginActivity.class)); + finish(); return; } - binding.host.setText(sp.getString("host", "")); - + updatePermissionStatus(); } private void initView() { - binding.yes.setOnClickListener(v -> { - if (sp == null) { - return; - } + String username = tokenManager.getUsername(); + if (username != null) { + binding.tvUsername.setText(username); + } - binding.host.setText(sp.getString("host", "https://www.judy88.xin/api/bills/app-upload")); + binding.tvDeviceBrand.setText("检测到设备: " + OEMBackgroundHelper.getManufacturer()); - if (binding.host.getText().toString().length() == 0) { - Toast.makeText(this, "服务器和添加参数不能为空", Toast.LENGTH_SHORT).show(); - return; - } + binding.btnLogout.setOnClickListener(v -> logout()); - if (!binding.host.getText().toString().startsWith("http")) { - Toast.makeText(this, "服务器地址错误", Toast.LENGTH_SHORT).show(); - return; - } - SharedPreferences.Editor edit = sp.edit(); - edit.putString("host", binding.host.getText().toString()); - edit.apply(); - startActivity(new Intent(MainActivity.this, NotificationActivity.class)); - finish(); + binding.btnStartMonitoring.setOnClickListener(v -> { + startActivity(new Intent(this, NotificationActivity.class)); + }); + + binding.btnBankManage.setOnClickListener(v -> { + startActivity(new Intent(this, BankListActivity.class)); + }); + + binding.permissionNotificationAccess.setOnClickListener(v -> { + startActivity(new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS)); + }); + + binding.permissionPostNotifications.setOnClickListener(v -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) + != PackageManager.PERMISSION_GRANTED) { + requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 100); + } + } + }); + + binding.permissionBattery.setOnClickListener(v -> { + requestBatteryOptimization(); + }); + + binding.btnAutostart.setOnClickListener(v -> { + OEMBackgroundHelper.openAutoStartSettings(this); + }); + + binding.btnBatteryOptimization.setOnClickListener(v -> { + OEMBackgroundHelper.requestBatteryOptimizationExemption(this); }); - new Handler().postDelayed(() -> binding.yes.performClick(),2000); } + private void logout() { + tokenManager.clear(); + Toast.makeText(this, "已退出登录", Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(this, LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + finish(); + } + + private void updatePermissionStatus() { + boolean notificationAccessEnabled = isNotificationListenerEnabled(); + updatePermissionItem(binding.iconNotificationAccess, binding.statusNotificationAccess, + notificationAccessEnabled, notificationAccessEnabled ? "已授权" : "未授权"); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + boolean postNotificationsGranted = ContextCompat.checkSelfPermission(this, + Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED; + updatePermissionItem(binding.iconPostNotifications, binding.statusPostNotifications, + postNotificationsGranted, postNotificationsGranted ? "已授权" : "未授权"); + binding.permissionPostNotifications.setVisibility(View.VISIBLE); + } else { + binding.permissionPostNotifications.setVisibility(View.GONE); + } + + boolean batteryOptimized = isBatteryOptimizationEnabled(); + updatePermissionItem(binding.iconBattery, binding.statusBattery, + !batteryOptimized, batteryOptimized ? "未授权" : "已授权"); + } + + private void updatePermissionItem(ImageView icon, TextView status, boolean granted, String statusText) { + if (granted) { + icon.setImageResource(android.R.drawable.checkbox_on_background); + icon.setColorFilter(ContextCompat.getColor(this, android.R.color.holo_green_dark)); + } else { + icon.setImageResource(android.R.drawable.ic_dialog_info); + icon.setColorFilter(ContextCompat.getColor(this, android.R.color.holo_red_dark)); + } + status.setText(statusText); + } + + private boolean isNotificationListenerEnabled() { + String flat = Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners"); + return flat != null && flat.contains(getPackageName()); + } + + private boolean isBatteryOptimizationEnabled() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); + return pm != null && !pm.isIgnoringBatteryOptimizations(getPackageName()); + } + return false; + } + + private void requestBatteryOptimization() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + try { + Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); + intent.setData(Uri.parse("package:" + getPackageName())); + startActivity(intent); + } catch (Exception e) { + startActivity(new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)); + } + } + } } diff --git a/app/src/main/java/com/miraclegarden/smsmessage/Activity/NotificationActivity.java b/app/src/main/java/com/miraclegarden/smsmessage/Activity/NotificationActivity.java index 1033691..7f25007 100644 --- a/app/src/main/java/com/miraclegarden/smsmessage/Activity/NotificationActivity.java +++ b/app/src/main/java/com/miraclegarden/smsmessage/Activity/NotificationActivity.java @@ -1,166 +1,214 @@ package com.miraclegarden.smsmessage.Activity; -import android.Manifest; -import android.annotation.SuppressLint; -import android.content.ComponentName; import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; +import android.os.PowerManager; import android.provider.Settings; import android.text.TextUtils; -import android.view.View; import android.view.WindowManager; import android.widget.ScrollView; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.core.content.ContextCompat; -import androidx.core.widget.NestedScrollView; import com.miraclegarden.library.app.MiracleGardenActivity; -import com.miraclegarden.smsmessage.AppInfo; -import com.miraclegarden.smsmessage.AppListUtil; -import com.miraclegarden.smsmessage.MessageInfo; +import com.miraclegarden.smsmessage.App; import com.miraclegarden.smsmessage.databinding.ActivityNotificationBinding; +import com.miraclegarden.smsmessage.network.TokenManager; import com.miraclegarden.smsmessage.service.NotificationService; +import com.miraclegarden.smsmessage.service.RetryManager; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; +import java.lang.ref.WeakReference; import java.text.SimpleDateFormat; import java.util.Date; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.FormBody; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - public class NotificationActivity extends MiracleGardenActivity { - private static final Handler handler = new Handler(Looper.myLooper()) { + private static final int MAX_LOG_LINES = 200; + private static WeakReference instanceRef; + + private TokenManager tokenManager; + private final Handler handler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); String str = (String) msg.obj; - if (str != null) { - @SuppressLint("SimpleDateFormat") SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); + if (str != null && binding != null && binding.tvLog != null) { + SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); String t = format.format(new Date()); - if (textView != null) { - textView.append(t + ":" + str + "\n\r"); - scrollView.post(() -> scrollView.fullScroll(ScrollView.FOCUS_DOWN)); - } + binding.tvLog.append(t + " " + str + "\n"); + trimLogIfNeeded(); + binding.scrollView.post(() -> + binding.scrollView.fullScroll(ScrollView.FOCUS_DOWN)); } } }; - public static SharedPreferences sharedPreferences; - public static void sendMessage(String str) { - Message message = new Message(); - message.obj = str; - NotificationActivity.handler.sendMessage(message); + NotificationActivity activity = instanceRef != null ? instanceRef.get() : null; + if (activity != null && activity.handler != null) { + Message message = Message.obtain(); + message.obj = str; + activity.handler.sendMessage(message); + } } - @SuppressLint("StaticFieldLeak") - private static TextView textView; - @SuppressLint("StaticFieldLeak") - private static NestedScrollView scrollView; - private final String[] permissions = new String[]{ - Manifest.permission.RECEIVE_BOOT_COMPLETED - }; - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sharedPreferences = getSharedPreferences("server", MODE_PRIVATE); + + tokenManager = TokenManager.getInstance(this); + if (!tokenManager.isLoggedIn()) { + Toast.makeText(this, "请先登录", Toast.LENGTH_SHORT).show(); + startActivity(new Intent(this, LoginActivity.class)); + finish(); + return; + } + + instanceRef = new WeakReference<>(this); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - NotificationActivity.textView = binding.text; - NotificationActivity.scrollView = binding.scrollable; - initPermission(); + initView(); } + @Override + protected void onResume() { + super.onResume(); + updateUI(); + handler.post(statsUpdateRunnable); + } + @Override + protected void onPause() { + super.onPause(); + handler.removeCallbacks(statsUpdateRunnable); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + handler.removeCallbacksAndMessages(null); + if (instanceRef != null && instanceRef.get() == this) { + instanceRef = null; + } + } private void initView() { - binding.button2.setOnClickListener(v -> { - //打开监听引用消息Notification access - Intent intent_s = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS); - startActivity(intent_s); - }); - binding.button.setOnClickListener(v -> { + String username = tokenManager.getUsername(); + if (username != null) { + binding.tvUsername.setText(username); + } + binding.ivBack.setOnClickListener(v -> finish()); + + binding.btnSettings.setOnClickListener(v -> { + startActivity(new Intent(this, SettingActivity.class)); }); - binding.button1.setOnClickListener(view -> { - if (textView != null) { - textView.setText(""); - } + binding.btnClearLog.setOnClickListener(v -> { + binding.tvLog.setText(""); }); - binding.toolbar.setOnLongClickListener(view -> { -// Toast.makeText(NotificationActivity.this,"点我干嘛",Toast.LENGTH_SHORT).show(); - startActivity(new Intent(NotificationActivity.this,SettingActivity.class)); - return false; - }); - binding.jiantingList.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent intent = new Intent(NotificationActivity.this,SettingActivity.class); - intent.putExtra("is_list",true); - startActivity(intent); - } - }); + binding.btnToggleMonitor.setOnClickListener(v -> toggleMonitoring()); } - private void initPermission() { - checkPermission(); - for (String permission : permissions) { - if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { - sendMessage("没有" + permission + "权限"); + private void toggleMonitoring() { + if (!isNotificationListenerEnabled()) { + Toast.makeText(this, "请先开启通知访问权限", Toast.LENGTH_LONG).show(); + startActivity(new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS)); + return; + } + + if (NotificationService.isMonitoring()) { + NotificationService.stopMonitoring(this); + sendMessage("正在停止监听..."); + } else { + if (App.getNotiList(this).isEmpty()) { + Toast.makeText(this, "请先在\"监听设置\"中添加要监听的APP", Toast.LENGTH_LONG).show(); + return; } + NotificationService.requestStartMonitoring(this); + sendMessage("正在开启监听服务..."); + updateUI(); } } + public static void updateUI() { + NotificationActivity activity = instanceRef != null ? instanceRef.get() : null; + if (activity == null || activity.binding == null) { + return; + } - //打开设置界面 - private void checkPermission() { - if (!isEnabled()) { - startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS")); + if (NotificationService.isMonitoring()) { + activity.binding.btnToggleMonitor.setText("停止监听"); + activity.binding.btnToggleMonitor.setEnabled(true); + activity.binding.btnToggleMonitor.setBackgroundTintList( + android.content.res.ColorStateList.valueOf(0xFFFF5252)); + activity.binding.tvStatus.setText("状态: 监听中"); + activity.binding.tvStatus.setTextColor(0xFF4CAF50); + } else { + activity.binding.btnToggleMonitor.setText("开始监听"); + activity.binding.btnToggleMonitor.setEnabled(true); + activity.binding.btnToggleMonitor.setBackgroundTintList( + android.content.res.ColorStateList.valueOf(activity.getResources().getColor(com.miraclegarden.smsmessage.R.color.purple_500))); + activity.binding.tvStatus.setText("状态: 未启动"); + activity.binding.tvStatus.setTextColor(0xFF888888); + } + activity.updateStatistics(); + } + + private void updateStatistics() { + if (binding == null) { + return; + } + + android.content.SharedPreferences sp = getSharedPreferences("server", MODE_PRIVATE); + int totalCount = sp.getInt("total_count", 0); + int uploadedCount = sp.getInt("uploaded_count", 0); + int configuredCount = App.getNotiList(this).size(); + + binding.tvConfiguredApps.setText("已配置: " + configuredCount + "个"); + binding.tvMonitoredCount.setText("监听: " + totalCount); + binding.tvUploadedCount.setText("上传: " + uploadedCount); + + if (totalCount > 0) { + int successRate = (uploadedCount * 100) / totalCount; + binding.tvSuccessRate.setText("成功率: " + successRate + "%"); + } else { + binding.tvSuccessRate.setText("成功率: --"); } } + private final Runnable statsUpdateRunnable = new Runnable() { + @Override + public void run() { + updateStatistics(); + handler.postDelayed(this, 2000); + } + }; - // 判断是否打开了通知监听权限 - private boolean isEnabled() { - String pkgName = getPackageName(); - final String flat = Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners"); - if (!TextUtils.isEmpty(flat)) { - final String[] names = flat.split(":"); - for (String name : names) { - final ComponentName cn = ComponentName.unflattenFromString(name); - if (cn != null) { - if (TextUtils.equals(pkgName, cn.getPackageName())) { - return true; - } + private void trimLogIfNeeded() { + if (binding == null || binding.tvLog == null) return; + String fullText = binding.tvLog.getText().toString(); + String[] lines = fullText.split("\n"); + if (lines.length > MAX_LOG_LINES) { + StringBuilder sb = new StringBuilder(); + for (int i = lines.length - MAX_LOG_LINES; i < lines.length; i++) { + sb.append(lines[i]); + if (i < lines.length - 1) { + sb.append("\n"); } } + binding.tvLog.setText(sb.toString()); } - return false; } - + private boolean isNotificationListenerEnabled() { + String flat = Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners"); + return flat != null && flat.contains(getPackageName()); + } } diff --git a/app/src/main/java/com/miraclegarden/smsmessage/Activity/SettingActivity.java b/app/src/main/java/com/miraclegarden/smsmessage/Activity/SettingActivity.java index a5a0281..217859d 100644 --- a/app/src/main/java/com/miraclegarden/smsmessage/Activity/SettingActivity.java +++ b/app/src/main/java/com/miraclegarden/smsmessage/Activity/SettingActivity.java @@ -1,31 +1,15 @@ package com.miraclegarden.smsmessage.Activity; -import android.Manifest; -import android.annotation.SuppressLint; import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.pm.PermissionInfo; import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; import android.text.TextUtils; -import android.util.Log; import android.view.View; -import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; -import android.widget.ScrollView; -import android.widget.Toast; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import com.miraclegarden.library.app.MiracleGardenActivity; -import com.miraclegarden.smsmessage.ActionConfirmDialog; import com.miraclegarden.smsmessage.App; import com.miraclegarden.smsmessage.AppInfo; import com.miraclegarden.smsmessage.AppListUtil; @@ -34,236 +18,111 @@ import com.miraclegarden.smsmessage.MessageInfo; import com.miraclegarden.smsmessage.R; import com.miraclegarden.smsmessage.comm.CommonAdapter; import com.miraclegarden.smsmessage.comm.ViewHolder; -import com.miraclegarden.smsmessage.databinding.ActivityMainBinding; import com.miraclegarden.smsmessage.databinding.ActivitySettingBinding; +import com.miraclegarden.smsmessage.network.TokenManager; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - public class SettingActivity extends MiracleGardenActivity { - public static SharedPreferences sp; - private static final String TAG = "SettingActivity"; private ArrayList appList = new ArrayList<>(); - CommonAdapter userAdapter; - boolean is_list = false; + private CommonAdapter userAdapter; + private TokenManager tokenManager; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - sp = getSharedPreferences("server", MODE_PRIVATE); - initData(); - initList(); - is_list = getIntent().getBooleanExtra("is_list",false); - if(!is_list){ - binding.setPostLy.setVisibility(View.VISIBLE); - binding.titleTv.setText("设置"); - }else{ - binding.titleTv.setText("监听App列表"); + tokenManager = TokenManager.getInstance(this); + if (!tokenManager.isLoggedIn()) { + startActivity(new Intent(this, LoginActivity.class)); + finish(); + return; } + + initView(); + initList(); + } + + private void initView() { + String username = tokenManager.getUsername(); + if (username != null) { + binding.tvUsername.setText(username); + } + + binding.ivBack.setOnClickListener(v -> finish()); + + binding.btnAddApp.setOnClickListener(v -> { + startActivity(new Intent(this, AppListActivity.class)); + }); } @Override protected void onResume() { super.onResume(); - initChangeList(); + refreshList(); } - private void initChangeList() { - List appList1 = App.getNotiList(SettingActivity.this); - if(appList1 == null){ - appList = new ArrayList<>(); - }else{ - appList = (ArrayList) appList1; - } + private void refreshList() { + List list = App.getNotiList(this); + appList = new ArrayList<>(list); userAdapter.setDates(appList); - if(appList.size()>0){ + + if (appList.size() > 0) { binding.recyclerview.setVisibility(View.VISIBLE); - binding.nodataIv.setVisibility(View.GONE); - }else{ + binding.tvEmpty.setVisibility(View.GONE); + } else { binding.recyclerview.setVisibility(View.GONE); - binding.nodataIv.setVisibility(View.VISIBLE); + binding.tvEmpty.setVisibility(View.VISIBLE); } } - private void initData() { - binding.host.setText(sp.getString("host", "https://www.judy88.xin/api/bills/app-upload")); - binding.addBt.setOnClickListener(view -> startActivity(new Intent(SettingActivity.this,AppListActivity.class))); - binding.backIv.setOnClickListener(view -> finish()); - - binding.yes.setOnClickListener(v -> { - if (sp == null) { - return; - } - if (binding.host.getText().toString().length() == 0) { - Toast.makeText(this, "服务器和添加参数不能为空", Toast.LENGTH_SHORT).show(); - return; - } - - if (!binding.host.getText().toString().startsWith("http")) { - Toast.makeText(this, "服务器地址错误", Toast.LENGTH_SHORT).show(); - return; - } - hideKeyboard(); - AppInfo appInfo = AppListUtil.getAppByPackageName(SettingActivity.this,"com.miraclegarden.smsmessage"); - appInfo.setCode("111"); - appInfo.setName("测试"); - appInfo.setRemark("测试更换接口"); - MessageInfo messageInfo = MessageInfo.AppInfoToMessageInfo(appInfo); - Submit(messageInfo,"测试更换接口","测试更换接口"); - - }); - - } - - - - public MediaType JSON = MediaType.parse("application/json; charset=utf-8"); - - public void Submit(MessageInfo messageInfo, String title, String context) { - OkHttpClient client = new OkHttpClient(); - try { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("name", messageInfo.getName()); - jsonObject.put("code", messageInfo.getCode()); - jsonObject.put("remark", messageInfo.getRemark()); - jsonObject.put("appName", messageInfo.getAppName()); - jsonObject.put("packageName", messageInfo.getPackageName()); - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("title", title); - jsonObject1.put("context", context); - jsonObject.put("data", jsonObject1); - String json = jsonObject.toString(); - RequestBody body = RequestBody.create(json, JSON); - // 构建请求 - Request request = new Request.Builder() - .url(binding.host.getText().toString()) - .post(body) - .build(); - Log.i("地址是啥","地址是啥1111:"+binding.host.getText().toString()); - Log.i("地址是啥","地址是啥2222:"+json); - - client.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull IOException e) { -// NotificationActivity.sendMessage("提交失败:" + e); -// Toast.makeText(SettingActivity.this,"接口地址访问异常",Toast.LENGTH_SHORT).show(); - sendMessage("接口地址访问异常"); - - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - String str = response.body().string(); - if (response.isSuccessful()) { - Log.i("地址是啥","地址是啥:"+str); - // {"ok":true,"received":true} - toSaveAddress(); - return; - } - Log.i("地址是啥","地址是啥11:"+str); - sendMessage("接口地址访问异常"); - } - }); - } catch (JSONException e) { - throw new RuntimeException(e); - } - } - - - private void hideKeyboard() { - InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); - if (imm != null && binding.host.getWindowToken() != null) { - imm.hideSoftInputFromWindow(binding.host.getWindowToken(), 0); - } - } - - private Handler handler = new Handler(Looper.myLooper()) { - @Override - public void handleMessage(@NonNull Message msg) { - super.handleMessage(msg); - String str = (String) msg.obj; - if (str != null) { - Toast.makeText(SettingActivity.this,str,Toast.LENGTH_SHORT).show(); - } - } - }; - - - public void sendMessage(String str) { - Message message = new Message(); - message.obj = str; - handler.sendMessage(message); - } - private void toSaveAddress() { - - SharedPreferences.Editor edit = sp.edit(); - edit.putString("host", binding.host.getText().toString()); - edit.apply(); - sendMessage( "服务器地址修改成功:" ); - } - - private void initList() { binding.recyclerview.setLayoutManager(new LinearLayoutManager(this)); - userAdapter = new CommonAdapter<>(SettingActivity.this, R.layout.item_user, appList) { + userAdapter = new CommonAdapter<>(this, R.layout.item_user, appList) { @Override public void convert(ViewHolder holder, MessageInfo info, int index) { - AppInfo appInfo = AppListUtil.getAppByPackageName(SettingActivity.this,info.getPackageName()); - ImageView delete_img = holder.getView(R.id.delete_img); - delete_img.setVisibility(View.VISIBLE); - delete_img.setOnClickListener(view -> { - DeleteConfirmDialog deleteConfirmDialog = new DeleteConfirmDialog(SettingActivity.this,info); - deleteConfirmDialog.setOnToActionListener(() -> { - App.deleteNotiBean(SettingActivity.this,info); - initChangeList(); - }); - deleteConfirmDialog.show(); + AppInfo appInfo = AppListUtil.getAppByPackageName(SettingActivity.this, info.getPackageName()); + ImageView deleteBtn = holder.getView(R.id.delete_img); + deleteBtn.setVisibility(View.VISIBLE); + deleteBtn.setOnClickListener(v -> { + DeleteConfirmDialog dialog = new DeleteConfirmDialog(SettingActivity.this, info); + dialog.setOnConfirmListener(() -> { + App.deleteNotiBean(SettingActivity.this, info); + refreshList(); + }); + dialog.show(); }); - if(appInfo!=null){ + + if (appInfo != null) { ((ImageView) holder.getView(R.id.iv_icon)).setImageDrawable(appInfo.getIcon()); - }else{ + } else { ((ImageView) holder.getView(R.id.iv_icon)).setImageResource(R.mipmap.app_logo); } + holder.setText(R.id.tv_appname, info.getAppName()); holder.setText(R.id.tv_package, info.getPackageName()); if (!TextUtils.isEmpty(info.getName())) { - holder.setText(R.id.tv_name, info.getName()+"/"); - }else{ - holder.setText(R.id.tv_name, "--/"); + holder.setText(R.id.tv_name, info.getName()); + } else { + holder.setText(R.id.tv_name, "未设置"); } if (!TextUtils.isEmpty(info.getCode())) { - holder.setText(R.id.tv_code, info.getCode()+"/"); - }else{ - holder.setText(R.id.tv_code, "--/"); + holder.setText(R.id.tv_code, info.getCode()); + } else { + holder.setText(R.id.tv_code, "--"); } if (!TextUtils.isEmpty(info.getRemark())) { - holder.setText(R.id.tv_remark, info.getRemark()); - }else{ - holder.setText(R.id.tv_remark, "--"); + holder.setText(R.id.tv_remark, "(" + info.getRemark() + ")"); + holder.getView(R.id.tv_remark).setVisibility(View.VISIBLE); + } else { + holder.getView(R.id.tv_remark).setVisibility(View.GONE); } - } }; binding.recyclerview.setAdapter(userAdapter); } - - - }