长按删除单条日志记录

This commit is contained in:
pppscn 2021-03-04 16:55:39 +08:00
parent 30571834ba
commit f180ea0835
10 changed files with 340 additions and 296 deletions

View File

@ -18,6 +18,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
@ -44,13 +45,25 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
private List<LogVo> logVos = new ArrayList<>();
private LogAdapter adapter;
private ReFlashListView listView;
//SIM卡信息
//private Map<String, Map> SimInfo = new HashMap();
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "oncreate");
super.onCreate(savedInstanceState);
//检查权限是否获取
checkPermission();
//获取本机号码(注意这里获取的不一定是卡槽1的)
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String Line1Number = mTelephonyMgr.getLine1Number();
Log.d(TAG, "Line1Number: " + Line1Number);
//获取SIM卡信息
getSimInfo(Line1Number);
//MyApplication appContext = ((MyApplication) getApplicationContext());
//appContext.setSimInfo(SimInfo);
setContentView(R.layout.activity_main);
LogUtil.init(this);
// 先拿到数据并放在适配器上
@ -67,18 +80,40 @@ public class MainActivity extends AppCompatActivity implements ReFlashListView.I
}
});
//检查权限是否获取
checkPermission();
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
//定义AlertDialog.Builder对象当长按列表项的时候弹出确认删除对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("确定删除?");
builder.setTitle("提示");
//获取本机号码(注意这里获取的不一定是卡槽1的)
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String Line1Number = mTelephonyMgr.getLine1Number();
Log.d(TAG, "Line1Number: " + Line1Number);
//添加AlertDialog.Builder对象的setPositiveButton()方法
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Long id = logVos.get(position - 1).getId();
Log.d(TAG, "id = " + id);
LogUtil.delLog(id, null);
initTLogs(); //初始化数据
showList(logVos);
Toast.makeText(getBaseContext(), "删除列表项", Toast.LENGTH_SHORT).show();
}
});
//获取SIM卡信息
getSimInfo(Line1Number);
//MyApplication appContext = ((MyApplication) getApplicationContext());
//appContext.setSimInfo(SimInfo);
//添加AlertDialog.Builder对象的setNegativeButton()方法
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create().show();
return true;
}
});
}
// 初始化数据

View File

@ -59,14 +59,6 @@ public class MyApplication extends Application {
return channelName;
}
public Map<String, Map> getSimInfo() {
return SimInfo;
}
public void setSimInfo(Map<String, Map> info) {
SimInfo = info;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);

View File

@ -10,21 +10,11 @@ import java.util.HashMap;
import java.util.Map;
public class RuleModel {
private String TAG = "RuleModel";
private Long id;
public static final String FILED_TRANSPOND_ALL = "transpond_all";
public static final String FILED_PHONE_NUM = "phone_num";
public static final String FILED_MSG_CONTENT = "msg_content";
public static final String FILED_MULTI_MATCH="multi_match";
public static final String FILED_MULTI_MATCH = "multi_match";
public static final Map<String, String> FILED_MAP = new HashMap<String, String>();
static{
FILED_MAP.put("transpond_all", "转发全部");
FILED_MAP.put("phone_num", "手机号");
FILED_MAP.put("msg_content", "内容");
FILED_MAP.put("multi_match", "多重匹配");
}
private String filed;
public static final String CHECK_IS = "is";
public static final String CHECK_CONTAIN = "contain";
public static final String CHECK_START_WITH = "startwith";
@ -32,6 +22,13 @@ public class RuleModel {
public static final String CHECK_NOT_IS = "notis";
public static final Map<String, String> CHECK_MAP = new HashMap<String, String>();
static {
FILED_MAP.put("transpond_all", "转发全部");
FILED_MAP.put("phone_num", "手机号");
FILED_MAP.put("msg_content", "内容");
FILED_MAP.put("multi_match", "多重匹配");
}
static {
CHECK_MAP.put("is", "");
CHECK_MAP.put("contain", "包含");
@ -39,6 +36,10 @@ public class RuleModel {
CHECK_MAP.put("endwith", "结尾是");
CHECK_MAP.put("notis", "不是");
}
private String TAG = "RuleModel";
private Long id;
private String filed;
private String check;
private String value;
@ -46,83 +47,6 @@ public class RuleModel {
private Long senderId;
private Long time;
//字段分支
public boolean checkMsg(SmsVo msg) throws Exception {
//检查这一行和上一行合并的结果是否命中
boolean mixChecked=false;
if(msg!=null){
//先检查规则是否命中
switch (this.filed){
case FILED_TRANSPOND_ALL:
mixChecked= true;
break;
case FILED_PHONE_NUM:
mixChecked= checkValue(msg.getMobile());
break;
case FILED_MSG_CONTENT:
mixChecked= checkValue(msg.getContent());
break;
case FILED_MULTI_MATCH:
mixChecked= RuleLineUtils.checkRuleLines(msg,this.value);
break;
default:
break;
}
}
Log.i(TAG, "rule:"+this+" checkMsg:"+msg+" checked:"+mixChecked);
return mixChecked;
}
//内容分支
public boolean checkValue(String msgValue){
boolean checked=false;
if(this.value!=null){
switch (this.check){
case CHECK_IS:
checked=this.value.equals(msgValue);
break;
case CHECK_CONTAIN:
if(msgValue!=null){
checked=msgValue.contains(this.value);
}
break;
case CHECK_START_WITH:
if(msgValue!=null){
checked=msgValue.startsWith(this.value);
}
break;
case CHECK_END_WITH:
if(msgValue!=null){
checked=msgValue.endsWith(this.value);
}
break;
default:
break;
}
}
Log.i(TAG, "checkValue "+msgValue+" "+this.check+" "+this.value+" checked:"+checked);
return checked;
}
public String getRuleMatch() {
switch (filed){
case FILED_TRANSPOND_ALL:
return "全部转发到 ";
default:
return ""+FILED_MAP.get(filed)+" "+CHECK_MAP.get(check)+" "+value+" 转发到 ";
}
}
public static String getRuleMatch(String filed, String check, String value) {
switch (filed) {
case FILED_TRANSPOND_ALL:
@ -134,25 +58,8 @@ public class RuleModel {
}
public Long getRuleSenderId() {
return senderId;
}
public int getRuleFiledCheckId(){
switch (filed){
case FILED_MSG_CONTENT:
return R.id.btnContent;
case FILED_PHONE_NUM:
return R.id.btnPhone;
case FILED_MULTI_MATCH:
return R.id.btnMultiMatch;
default:
return R.id.btnTranspondAll;
}
}
public static String getRuleFiledFromCheckId(int id){
switch (id){
public static String getRuleFiledFromCheckId(int id) {
switch (id) {
case R.id.btnContent:
return FILED_MSG_CONTENT;
case R.id.btnPhone:
@ -164,23 +71,8 @@ public class RuleModel {
}
}
public int getRuleCheckCheckId(){
switch (check){
case CHECK_CONTAIN:
return R.id.btnContain;
case CHECK_START_WITH:
return R.id.btnStartWith;
case CHECK_END_WITH:
return R.id.btnEndWith;
case CHECK_NOT_IS:
return R.id.btnNotIs;
default:
return R.id.btnIs;
}
}
public static String getRuleCheckFromCheckId(int id){
switch (id){
public static String getRuleCheckFromCheckId(int id) {
switch (id) {
case R.id.btnContain:
return CHECK_CONTAIN;
case R.id.btnStartWith:
@ -194,6 +86,115 @@ public class RuleModel {
}
}
//字段分支
public boolean checkMsg(SmsVo msg) throws Exception {
//检查这一行和上一行合并的结果是否命中
boolean mixChecked = false;
if (msg != null) {
//先检查规则是否命中
switch (this.filed) {
case FILED_TRANSPOND_ALL:
mixChecked = true;
break;
case FILED_PHONE_NUM:
mixChecked = checkValue(msg.getMobile());
break;
case FILED_MSG_CONTENT:
mixChecked = checkValue(msg.getContent());
break;
case FILED_MULTI_MATCH:
mixChecked = RuleLineUtils.checkRuleLines(msg, this.value);
break;
default:
break;
}
}
Log.i(TAG, "rule:" + this + " checkMsg:" + msg + " checked:" + mixChecked);
return mixChecked;
}
//内容分支
public boolean checkValue(String msgValue) {
boolean checked = false;
if (this.value != null) {
switch (this.check) {
case CHECK_IS:
checked = this.value.equals(msgValue);
break;
case CHECK_CONTAIN:
if (msgValue != null) {
checked = msgValue.contains(this.value);
}
break;
case CHECK_START_WITH:
if (msgValue != null) {
checked = msgValue.startsWith(this.value);
}
break;
case CHECK_END_WITH:
if (msgValue != null) {
checked = msgValue.endsWith(this.value);
}
break;
default:
break;
}
}
Log.i(TAG, "checkValue " + msgValue + " " + this.check + " " + this.value + " checked:" + checked);
return checked;
}
public String getRuleMatch() {
switch (filed) {
case FILED_TRANSPOND_ALL:
return "全部转发到 ";
default:
return "" + FILED_MAP.get(filed) + " " + CHECK_MAP.get(check) + " " + value + " 转发到 ";
}
}
public Long getRuleSenderId() {
return senderId;
}
public int getRuleFiledCheckId() {
switch (filed) {
case FILED_MSG_CONTENT:
return R.id.btnContent;
case FILED_PHONE_NUM:
return R.id.btnPhone;
case FILED_MULTI_MATCH:
return R.id.btnMultiMatch;
default:
return R.id.btnTranspondAll;
}
}
public int getRuleCheckCheckId() {
switch (check) {
case CHECK_CONTAIN:
return R.id.btnContain;
case CHECK_START_WITH:
return R.id.btnStartWith;
case CHECK_END_WITH:
return R.id.btnEndWith;
case CHECK_NOT_IS:
return R.id.btnNotIs;
default:
return R.id.btnIs;
}
}
public Long getId() {
return id;
}

View File

@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.model.vo;
import com.idormy.sms.forwarder.R;
public class LogVo {
private Long id;
private String from;
private String content;
private String simInfo;
@ -10,7 +11,8 @@ public class LogVo {
private int senderImageId;
private String time;
public LogVo(String from, String content, String simInfo, String time, String rule, int senderImageId) {
public LogVo(Long id, String from, String content, String simInfo, String time, String rule, int senderImageId) {
this.id = id;
this.from = from;
this.content = content;
this.simInfo = simInfo;
@ -23,6 +25,10 @@ public class LogVo {
}
public Long getId() {
return id;
}
public String getFrom() {
return from;
}

View File

@ -141,6 +141,8 @@ public class LogUtil {
Log.d(TAG, "getLog: itemId cursor" + Arrays.toString(cursor.getColumnNames()));
while (cursor.moveToNext()) {
try {
Long itemid = cursor.getLong(
cursor.getColumnIndexOrThrow(BaseColumns._ID));
String itemfrom = cursor.getString(
cursor.getColumnIndexOrThrow(LogTable.LogEntry.COLUMN_NAME_FROM));
String content = cursor.getString(
@ -163,7 +165,7 @@ public class LogUtil {
String rule = RuleModel.getRuleMatch(ruleFiled, ruleCheck, ruleValue) + senderName;
int senderImageId = SenderModel.getImageId(senderType);
LogVo logVo = new LogVo(itemfrom, content, simInfo, time, rule, senderImageId);
LogVo logVo = new LogVo(itemid, itemfrom, content, simInfo, time, rule, senderImageId);
LogVos.add(logVo);
} catch (Exception e) {
Log.i(TAG, "getLog e:" + e.getMessage());

View File

@ -9,9 +9,47 @@ import java.util.ArrayList;
import java.util.List;
class RuleLine {
public static final String CONJUNCTION_AND = "并且";
public static final String CONJUNCTION_OR = "或者";
public static final String FILED_PHONE_NUM = "手机号";
public static final String FILED_MSG_CONTENT = "短信内容";
public static final String SURE_YES = "";
public static final String SURE_NOT = "不是";
public static final String CHECK_EQUALS = "相等";
public static final String CHECK_CONTAIN = "包含";
public static final String CHECK_START_WITH = "开头";
public static final String CHECK_END_WITH = "结尾";
public static List<String> CONJUNCTION_LIST = new ArrayList<String>();
public static List<String> FILED_LIST = new ArrayList<String>();
public static List<String> SURE_LIST = new ArrayList<String>();
public static List<String> CHECK_LIST = new ArrayList<String>();
static String TAG = "RuleLine";
static Boolean STARTLOG = true;
static {
CONJUNCTION_LIST.add("and");
CONJUNCTION_LIST.add("or");
CONJUNCTION_LIST.add("并且");
CONJUNCTION_LIST.add("或者");
}
static {
FILED_LIST.add("手机号");
FILED_LIST.add("短信内容");
}
static {
SURE_LIST.add("");
SURE_LIST.add("不是");
}
static {
CHECK_LIST.add("相等");
CHECK_LIST.add("包含");
CHECK_LIST.add("开头");
CHECK_LIST.add("结尾");
}
//开头有几个空格
int headSpaceNum = 0;
RuleLine beforeRuleLine;
@ -20,125 +58,13 @@ class RuleLine {
RuleLine childRuleLine;
//and or
String conjunction;
public static List<String> CONJUNCTION_LIST = new ArrayList<String>();
public static final String CONJUNCTION_AND = "并且";
public static final String CONJUNCTION_OR = "或者";
static {
CONJUNCTION_LIST.add("and");
CONJUNCTION_LIST.add("or");
CONJUNCTION_LIST.add("并且");
CONJUNCTION_LIST.add("或者");
}
//手机号 短信内容
String field;
public static List<String> FILED_LIST = new ArrayList<String>();
public static final String FILED_PHONE_NUM = "手机号";
public static final String FILED_MSG_CONTENT = "短信内容";
static {
FILED_LIST.add("手机号");
FILED_LIST.add("短信内容");
}
// 是否
String sure;
public static List<String> SURE_LIST = new ArrayList<String>();
public static final String SURE_YES = "";
public static final String SURE_NOT = "不是";
static {
SURE_LIST.add("");
SURE_LIST.add("不是");
}
String check;
public static List<String> CHECK_LIST = new ArrayList<String>();
public static final String CHECK_EQUALS = "相等";
public static final String CHECK_CONTAIN = "包含";
public static final String CHECK_START_WITH = "开头";
public static final String CHECK_END_WITH = "结尾";
static {
CHECK_LIST.add("相等");
CHECK_LIST.add("包含");
CHECK_LIST.add("开头");
CHECK_LIST.add("结尾");
}
String value;
//字段分支
public boolean checkMsg(SmsVo msg) {
//检查这一行和上一行合并的结果是否命中
boolean mixChecked = false;
//先检查规则是否命中
switch (this.field) {
case FILED_PHONE_NUM:
mixChecked = checkValue(msg.getMobile());
break;
case FILED_MSG_CONTENT:
mixChecked = checkValue(msg.getContent());
break;
default:
break;
}
//整合肯定词
switch (this.sure) {
case SURE_YES:
mixChecked = mixChecked;
break;
case SURE_NOT:
mixChecked = !mixChecked;
break;
default:
mixChecked = false;
break;
}
logg("rule:" + this + " checkMsg:" + msg + " checked:" + mixChecked);
return mixChecked;
}
//内容分支
public boolean checkValue(String msgValue) {
boolean checked = false;
switch (this.check) {
case CHECK_EQUALS:
checked = this.value.equals(msgValue);
break;
case CHECK_CONTAIN:
if (msgValue != null) {
checked = msgValue.contains(this.value);
}
break;
case CHECK_START_WITH:
if (msgValue != null) {
checked = msgValue.startsWith(this.value);
}
break;
case CHECK_END_WITH:
if (msgValue != null) {
checked = msgValue.endsWith(this.value);
}
break;
default:
break;
}
logg("checkValue " + msgValue + " " + this.check + " " + this.value + " checked:" + checked);
return checked;
}
public RuleLine(String line, int linenum, RuleLine beforeRuleLine) throws Exception {
logg("----------" + linenum + "-----------------");
logg(line);
@ -328,6 +254,76 @@ class RuleLine {
}
//字段分支
public boolean checkMsg(SmsVo msg) {
//检查这一行和上一行合并的结果是否命中
boolean mixChecked = false;
//先检查规则是否命中
switch (this.field) {
case FILED_PHONE_NUM:
mixChecked = checkValue(msg.getMobile());
break;
case FILED_MSG_CONTENT:
mixChecked = checkValue(msg.getContent());
break;
default:
break;
}
//整合肯定词
switch (this.sure) {
case SURE_YES:
mixChecked = mixChecked;
break;
case SURE_NOT:
mixChecked = !mixChecked;
break;
default:
mixChecked = false;
break;
}
logg("rule:" + this + " checkMsg:" + msg + " checked:" + mixChecked);
return mixChecked;
}
//内容分支
public boolean checkValue(String msgValue) {
boolean checked = false;
switch (this.check) {
case CHECK_EQUALS:
checked = this.value.equals(msgValue);
break;
case CHECK_CONTAIN:
if (msgValue != null) {
checked = msgValue.contains(this.value);
}
break;
case CHECK_START_WITH:
if (msgValue != null) {
checked = msgValue.startsWith(this.value);
}
break;
case CHECK_END_WITH:
if (msgValue != null) {
checked = msgValue.endsWith(this.value);
}
break;
default:
break;
}
logg("checkValue " + msgValue + " " + this.check + " " + this.value + " checked:" + checked);
return checked;
}
@Override
public String toString() {
return "RuleLine{" +

View File

@ -6,9 +6,8 @@ import android.preference.PreferenceManager;
import android.util.Log;
public class SettingUtil {
private static String TAG = "SettingUtil";
static Boolean hasInit = false;
private static String TAG = "SettingUtil";
private static SharedPreferences sp_setting = null;
private static Context context = null;

View File

@ -15,47 +15,59 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="vertical">
<Button
android:id="@+id/bt_refresh_log"
<TextView
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_dark"
android:onClick="cleanLog"
android:text="清空记录"
tools:ignore="NestedWeights" />
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/log_tips"
android:textColor="@android:color/holo_blue_dark" />
<Button
android:id="@+id/bt_rule_set"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_dark"
android:onClick="toRuleSetting"
android:text="设置转发规则"
tools:ignore="NestedWeights" />
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/bt_send_set"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_dark"
android:onClick="toSendSetting"
android:text="设置发送方" />
<Button
android:id="@+id/bt_refresh_log"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_dark"
android:onClick="cleanLog"
android:text="清空记录"
tools:ignore="NestedWeights" />
<Button
android:id="@+id/bt_rule_set"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_dark"
android:onClick="toRuleSetting"
android:text="设置转发规则"
tools:ignore="NestedWeights" />
<Button
android:id="@+id/bt_send_set"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:background="@android:color/holo_blue_dark"
android:onClick="toSendSetting"
android:text="设置发送方" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -13,6 +13,7 @@
<string name="setbarktitle">设置Bark</string>
<string name="check_new_version">检查更新</string>
<string name="to_setting">设置</string>
<string name="log_tips">提示:置顶下拉刷新,长按删除单条记录</string>
<string name="rule_tips">提示:新建规则点击“添加”,长按删除/点击编辑已有</string>
<string name="sender_tips">提示:新建发送方点击“添加”,长按删除/点击编辑已有</string>
</resources>