From 84024486a0d8e9a2acf77e1e8c4554513fc2ce97 Mon Sep 17 00:00:00 2001
From: dxl <64101226@qq.com>
Date: Mon, 29 Jun 2020 18:07:14 +0800
Subject: [PATCH] Some unused resource removed.
---
app_main/build.gradle | 1 -
app_main/src/main/AndroidManifest.xml | 12 -
.../Proxmark3Rdv4RRGConnectActivity.java | 7 +-
.../activities/main/Proxmark3Rdv4RRGMain.java | 47 --
.../rdv4_rrg/Proxmark3ConsoleActivity.java | 157 -----
.../Proxmark3Rdv4RRGConsoleActivity.java | 14 -
...roxmark3Rdv4RRGRedTeamConsoleActivity.java | 207 ------
.../cn/rrg/rdv/application/Properties.java | 16 +-
.../fragment/base/AppMainDevicesFragment.java | 22 +-
.../fragment/tools/AbsMfOperatesFragment.java | 55 +-
.../rrg/rdv/models/Proxmark3Rdv4SppModel.java | 16 +-
.../rrg/rdv/models/Proxmark3Rdv4UsbModel.java | 14 +-
.../CommonRWKeyFilesSelectedSettings.java | 46 --
.../settings/MainPageColumnCountSetting.java | 35 -
.../settings/Proxmark3ConsleDelaySetting.java | 35 -
.../java/cn/rrg/rdv/util/AccessBitUtil.java | 623 ------------------
.../main/java/cn/rrg/rdv/util/Commons.java | 24 +
.../main/java/cn/rrg/rdv/util/InitUtil.java | 6 -
pm3rdv4rrg/.gitignore | 62 --
pm3rdv4rrg/build.gradle | 67 --
pm3rdv4rrg/consumer-rules.pro | 0
pm3rdv4rrg/proguard-rules.pro | 21 -
pm3rdv4rrg/src/main/AndroidManifest.xml | 2 -
pm3rdv4rrg/src/main/cpp/proxmark3 | 1 -
.../java/cn/rrg/devices/Proxmark3RRGRdv4.java | 34 -
.../cn/rrg/natives/Proxmark3RRGRdv4Tools.java | 20 -
pm3rdv4rrg/src/main/res/values/strings.xml | 3 -
settings.gradle | 2 +-
28 files changed, 84 insertions(+), 1465 deletions(-)
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/activities/main/Proxmark3Rdv4RRGMain.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3ConsoleActivity.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGConsoleActivity.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGRedTeamConsoleActivity.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/settings/CommonRWKeyFilesSelectedSettings.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/settings/MainPageColumnCountSetting.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/settings/Proxmark3ConsleDelaySetting.java
delete mode 100644 app_main/src/main/java/cn/rrg/rdv/util/AccessBitUtil.java
delete mode 100644 pm3rdv4rrg/.gitignore
delete mode 100644 pm3rdv4rrg/build.gradle
delete mode 100644 pm3rdv4rrg/consumer-rules.pro
delete mode 100644 pm3rdv4rrg/proguard-rules.pro
delete mode 100644 pm3rdv4rrg/src/main/AndroidManifest.xml
delete mode 160000 pm3rdv4rrg/src/main/cpp/proxmark3
delete mode 100644 pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java
delete mode 100644 pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java
delete mode 100644 pm3rdv4rrg/src/main/res/values/strings.xml
diff --git a/app_main/build.gradle b/app_main/build.gradle
index 4f8b633d..ebd41c29 100644
--- a/app_main/build.gradle
+++ b/app_main/build.gradle
@@ -65,7 +65,6 @@ dependencies {
implementation project(':libnfc_pn53x')
implementation project(':chameleon')
implementation project(':communication')
- implementation project(':pm3rdv4rrg')
testImplementation 'junit:junit:4.12'
implementation project(path: ':pm3flasher')
diff --git a/app_main/src/main/AndroidManifest.xml b/app_main/src/main/AndroidManifest.xml
index 0f19e468..52d02af7 100644
--- a/app_main/src/main/AndroidManifest.xml
+++ b/app_main/src/main/AndroidManifest.xml
@@ -46,22 +46,10 @@
-
-
-
-
-
-
diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java
index dc5c01f4..ed9b9494 100644
--- a/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java
+++ b/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java
@@ -9,13 +9,10 @@ import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
-import android.text.Html;
-import android.widget.TextView;
+import com.termux.app.TermuxActivity;
-import cn.dxl.common.util.DisplayUtil;
import cn.rrg.rdv.R;
import cn.rrg.rdv.activities.main.PM3FlasherMainActivity;
-import cn.rrg.rdv.activities.main.Proxmark3Rdv4RRGMain;
import cn.rrg.rdv.activities.tools.DeviceConnectActivity;
import cn.rrg.rdv.callback.ConnectFailedCtxCallback;
import cn.rrg.rdv.models.AbstractDeviceModel;
@@ -54,7 +51,7 @@ public class Proxmark3Rdv4RRGConnectActivity
@Override
public Class getTarget() {
//连接成功后将跳转到该界面!
- return Proxmark3Rdv4RRGMain.class;
+ return TermuxActivity.class;
}
@Override
diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/main/Proxmark3Rdv4RRGMain.java b/app_main/src/main/java/cn/rrg/rdv/activities/main/Proxmark3Rdv4RRGMain.java
deleted file mode 100644
index 49253138..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/activities/main/Proxmark3Rdv4RRGMain.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package cn.rrg.rdv.activities.main;
-
-import android.content.Intent;
-import android.os.Bundle;
-
-import androidx.annotation.Nullable;
-
-import android.view.View;
-import android.widget.Button;
-
-import cn.rrg.rdv.R;
-import cn.rrg.rdv.activities.proxmark3.rdv4_rrg.Proxmark3Rdv4RRGRedTeamConsoleActivity;
-
-/*
- * PM3 RDV4 功能界面!
- * */
-public class Proxmark3Rdv4RRGMain
- extends BaseActivity {
-
- private Button btnGo2Proxmark3Rdv4RRGRedTeam;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.act_main_proxmark3_rdv4_rrg);
-
- initViews();
- initActions();
-
- // direct goto red team console!
- startActivity(new Intent(context, Proxmark3Rdv4RRGRedTeamConsoleActivity.class));
- finish();
- }
-
- private void initViews() {
- btnGo2Proxmark3Rdv4RRGRedTeam = findViewById(R.id.btnGo2Proxmark3Rdv4RRGRedTeam);
- }
-
- private void initActions() {
- btnGo2Proxmark3Rdv4RRGRedTeam.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // startActivity(new Intent(context, Proxmark3Rdv4RRGRedTeamConsoleActivity.class));
- }
- });
- }
-}
diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3ConsoleActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3ConsoleActivity.java
deleted file mode 100644
index 3be93396..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3ConsoleActivity.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package cn.rrg.rdv.activities.proxmark3.rdv4_rrg;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.CompoundButton;
-
-import androidx.annotation.Nullable;
-
-import java.io.File;
-
-import cn.dxl.common.util.FileUtils;
-import cn.rrg.console.define.ICommandTools;
-import cn.rrg.console.define.ICommandType;
-import cn.rrg.freo.IORedirector;
-import cn.rrg.rdv.R;
-import cn.rrg.rdv.activities.tools.BaseConsoleActivity;
-import cn.rrg.rdv.implement.EntryICommandType;
-import cn.rrg.rdv.util.Paths;
-
-public abstract class Proxmark3ConsoleActivity
- extends BaseConsoleActivity
- implements View.OnClickListener,
- CompoundButton.OnCheckedChangeListener {
-
- //滞留一个视图实例,可用如GUI,子控件实现!
- protected View guiView = null;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- //重定向!
- IORedirector.setStdEO(Paths.PM3_FORWARD_O, IORedirector.STD_OUT);
- IORedirector.setStdEO(Paths.PM3_FORWARD_E, IORedirector.STD_ERR);
- IORedirector.setStdIN(Paths.COMMON_FORWARD_I);
- }
- }).start();
-
- //父类先初初始化!
- super.onCreate(savedInstanceState);
-
- //默认关闭错误消息输出区域(用不上...)
- ckBoxOpenOutputError.setChecked(false);
- //覆盖父类的停止按钮点击实例
- btnStop.setOnClickListener(this);
- }
-
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.btnStop) {//判断当前是否有客户端可终止的任务在执行,是的话则终止!
- new Thread(new Runnable() {
- @Override
- public void run() {
- //TODO 此处进行IO,模拟键盘输入!
- stopPM3Client4KeyBorad();
- }
- }).start();
- }
- }
-
- //通过键盘输入结束任务!
- protected void stopPM3Client4KeyBorad() {
- FileUtils.writeString(new File(Paths.COMMON_FORWARD_I), "\n", true);
- }
-
- @Override
- protected void onDestroy() {
- //非常有必要进行相关的结束操作!
- stopPM3Client4KeyBorad();
- mCMD.stopExecute();
- super.onDestroy();
- }
-
- /*
- * 重写视图实例寻找,方便进行控制!
- * */
- @Override
- public T findViewById(int id) {
- T view = super.findViewById(id);
- return view != null ? view : guiView != null ? guiView.findViewById(id) : null;
- }
-
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- //don't need process!!!
- }
-
- @Override
- protected View getCommandGUI() {
- return guiView;
- }
-
- @Override
- protected File initOutTarget() {
- return new File(Paths.PM3_FORWARD_O);
- }
-
- @Override
- protected File initErrTarget() {
- return new File(Paths.PM3_FORWARD_E);
- }
-
- @Override
- protected int startTest(ICommandTools cmd) {
- mDefaultCMD = "help";
- if (edtInputCmd.getText().toString().length() > 0) {
- mDefaultCMD = edtInputCmd.getText().toString();
- }
- //此处做出多行执行优化!
- int ret = -2;
- //优化,如果是多行命令的操作!
- if (mDefaultCMD.contains("\n")) {
- //包含换行,则当作多行处理!
- String[] cmds = mDefaultCMD.split("\n");
- Log.d(LOG_TAG, "警告,当前执行的是多行处理操作!");
- for (String c : cmds) {
- Log.d(LOG_TAG, "当前执行的命令: " + c);
- mCMD.startExecute(c);
- }
- return ret;
- } else {
- //直接执行命令并且在执行命令完成后进行回调!
- ret = cmd.startExecute(mDefaultCMD);
- }
- return ret;
- }
-
- @Override
- protected void onNewOutLine(String line) {
- }
-
- @Override
- protected void onNewErrLine(String line) {
- }
-
- @Override
- protected ICommandType initType() {
- return new EntryICommandType();
- }
-
- @Override
- protected void onTestEnd() {
- }
-
- @Override
- protected boolean isTesting() {
- return super.isTesting();
- }
-
- @Override
- protected void stopTest() {
- //super.stopTest();
- //TODO 无必要停止PM3的底层线程!
- }
-}
\ No newline at end of file
diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGConsoleActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGConsoleActivity.java
deleted file mode 100644
index ae737546..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGConsoleActivity.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package cn.rrg.rdv.activities.proxmark3.rdv4_rrg;
-
-import cn.rrg.console.define.ICommandTools;
-import cn.rrg.natives.Proxmark3RRGRdv4Tools;
-
-public class Proxmark3Rdv4RRGConsoleActivity
- extends Proxmark3ConsoleActivity {
-
- @Override
- protected ICommandTools initCMD() {
- //替换为rdv4的工具类!
- return new Proxmark3RRGRdv4Tools();
- }
-}
diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGRedTeamConsoleActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGRedTeamConsoleActivity.java
deleted file mode 100644
index 1d073ade..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGRedTeamConsoleActivity.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package cn.rrg.rdv.activities.proxmark3.rdv4_rrg;
-
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-
-import androidx.annotation.Nullable;
-
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.GridView;
-import android.widget.TextView;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import cn.rrg.freo.IORedirector;
-import cn.rrg.rdv.R;
-import cn.rrg.rdv.adapter.EasyBtnAdapter;
-import cn.rrg.rdv.javabean.EasyCMDEntry;
-import cn.rrg.rdv.util.EasyBtnUtil;
-import cn.dxl.common.widget.DoubleInputDialog;
-import cn.dxl.common.util.ArrayUtils;
-import cn.dxl.common.widget.ToastUtil;
-import cn.dxl.common.util.ViewUtil;
-import cn.rrg.rdv.util.Paths;
-
-public class Proxmark3Rdv4RRGRedTeamConsoleActivity
- extends Proxmark3Rdv4RRGConsoleActivity {
-
- private GridView gridViewShowEasyButton;
- private EasyBtnAdapter adapter;
- private List easyCMDEntries = new ArrayList<>();
-
- //构造一个简单的对话框,用于提示需要的操作!
- private AlertDialog operaDialog;
- //显示添加按钮!
- private TextView txtAddEasyBtn;
- //缓存当前要操作的项目!
- private int operaPosition;
- //配置文件操作工具
- private EasyBtnUtil easyBtnUtil = new EasyBtnUtil();
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- btnGui.setText(getString(R.string.console_dynamic_btn));
- //隐藏不需要的区域!
- skBarConsoleViewScale.setProgress(10);
- //设置pm3的输入提示
- edtInputCmd.setHint(getString(R.string.pm3_hint));
-
- //不能让用户关闭通讯!
- btnStop.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- stopPM3Client4KeyBorad();
- }
- });
-
- initViews();
- initActions();
-
- new Thread(new Runnable() {
- @Override
- public void run() {
- // 更改工作目录!
- IORedirector.chdir(Paths.PM3_DIRECTORY);
- }
- }).start();
- }
-
- private void initViews() {
- //先初始化视图!
- guiView = ViewUtil.inflate(this, R.layout.easy_button_container);
-
- gridViewShowEasyButton = findViewById(R.id.gridViewShowEasyButton);
- adapter = new EasyBtnAdapter(this, R.layout.item_easy__btn, easyCMDEntries);
- gridViewShowEasyButton.setAdapter(adapter);
-
- //添加数据!
- EasyCMDEntry[] buttons = getCMDs();
- if (buttons != null) {
- easyCMDEntries.addAll(Arrays.asList(getCMDs()));
- adapter.notifyDataSetChanged();
- }
- txtAddEasyBtn = findViewById(R.id.txtAddEasyBtn);
- }
-
- private void initActions() {
- //列表项单击时执行相应的命令!
- gridViewShowEasyButton.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- //点击了对应项时,取出对应的实体,进行命令发送!
- EasyCMDEntry entry = easyCMDEntries.get(position);
- if (entry != null) {
- String cmd = entry.getCommand();
- if (cmd != null) {
- //先提交命令到输入框
- putCMDAndClosePop(cmd);
- }
- }
- }
- });
- //列表项长按时显示相关的操作项!
- gridViewShowEasyButton.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
- @Override
- public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
- operaDialog.show();
- operaPosition = position;
- return true;
- }
- });
- //构建一个用于显示操作的对话框!
- operaDialog = new AlertDialog.Builder(this).setItems(new String[]{getString(R.string.delete), getString(R.string.modify)}, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final EasyCMDEntry entry = easyCMDEntries.get(operaPosition);
- if (which == 0) {
- new AlertDialog.Builder(context).setTitle(R.string.warning).setMessage(getString(R.string.enter_delete)
- + "\n\nItem name: " + entry.getCmdName())
- .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- //做出删除操作!
- easyCMDEntries.remove(operaPosition);
- adapter.notifyDataSetChanged();
- //TODO 本地配置删除!
- if (easyBtnUtil.deleteButton(0, operaPosition)) {
- ToastUtil.show(context, getString(R.string.success), false);
- } else {
- ToastUtil.show(context, getString(R.string.failed), false);
- }
- }
- }).setNegativeButton(getString(R.string.no), null).show();
- } else {
- //做出修改操作,先取出原来的数据!
- DoubleInputDialog inputDialog = new DoubleInputDialog(context);
- inputDialog.setTitle(R.string.button_edit);
- inputDialog.getHint1().setText(R.string.title_input);
- inputDialog.getHint2().setText(R.string.command_input);
- //设置到视图上!
- inputDialog.getEdtInput1().setText(entry.getCmdName());
- inputDialog.getEdtInput2().setText(entry.getCommand());
- //然后设置操作回调并且显示!
- inputDialog.setSaveListener(new DoubleInputDialog.OnSaveListener() {
- @Override
- public void onSave(String[] content) {
- //操作成功,进行内存更新!
- entry.setCmdName(content[0]);
- entry.setCommand(content[1]);
- adapter.notifyDataSetChanged();
- //TODO 然后进行本地更新!
- if (easyBtnUtil.updateButton(0, operaPosition, entry.getCmdName(), entry.getCommand())) {
- //现在的话已经更新成功
- ToastUtil.show(context, getString(R.string.success), false);
- } else {
- ToastUtil.show(context, getString(R.string.failed), false);
- }
- }
- }).show();
- }
- }
- }).create();
- //设置添加按钮的动作!
- txtAddEasyBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //做出增加操作,构建一个实体用于保存!
- EasyCMDEntry entry = new EasyCMDEntry();
- DoubleInputDialog inputDialog = new DoubleInputDialog(context);
- inputDialog.setTitle(R.string.btn_add);
- inputDialog.getHint1().setText(R.string.title_input);
- inputDialog.getHint2().setText(R.string.command_input);
- //然后设置操作回调并且显示!
- inputDialog.setSaveListener(new DoubleInputDialog.OnSaveListener() {
- @Override
- public void onSave(String[] content) {
- //操作成功,进行内存更新!
- entry.setCmdName(content[0]);
- entry.setCommand(content[1]);
- easyCMDEntries.add(entry);
- adapter.notifyDataSetChanged();
- //TODO 然后进行本地更新!
- if (easyBtnUtil.inertButton(0, entry.getCmdName(), entry.getCommand())) {
- //现在的话已经更新成功
- ToastUtil.show(context, getString(R.string.success), false);
- } else {
- ToastUtil.show(context, getString(R.string.failed), false);
- }
- }
- }).show();
- }
- });
- }
-
- private EasyCMDEntry[] getCMDs() {
- //默认先拿0组的按钮,以后做多组分页的时候再做其他组的处理!
- List btns = easyBtnUtil.getButtons(0);
- if (btns == null) return null;
- return ArrayUtils.list2Arr(btns);
- }
-}
diff --git a/app_main/src/main/java/cn/rrg/rdv/application/Properties.java b/app_main/src/main/java/cn/rrg/rdv/application/Properties.java
index 504609ca..046b91c3 100644
--- a/app_main/src/main/java/cn/rrg/rdv/application/Properties.java
+++ b/app_main/src/main/java/cn/rrg/rdv/application/Properties.java
@@ -4,16 +4,6 @@ package cn.rrg.rdv.application;
* @author DXL
*/
public class Properties {
- /*
- * 程序参数缓存...
- * 类型_模块_作用
- * */
- public static String k_pm3_delayTime = "pm3DelayTime";
- public static int v_pm3_delayTime = 50;
-
- public static String k_view_main_page_column_count = "mainPageColumnCount";
- public static int v_view_main_page_column_count = 4;
-
//变色龙的卡槽是否使用别名!
public static String k_chameleon_aliases_status = "chameleonSlotAliasesStatus";
public static boolean v_chameleon_aliases_status = false;
@@ -23,8 +13,6 @@ public class Properties {
//语言切换设置!
public static String k_app_language = "language";
-
- //读写卡历史选择的秘钥!
- public static String k_common_rw_keyfile_selected = "commomRWKeyFilesSelected";
- public static String[] v_common_rw_keyfile_selected = null;
+ //Key files select history!
+ public static String k_common_rw_keyfile_selected = "commonRWKeyFilesSelected";
}
diff --git a/app_main/src/main/java/cn/rrg/rdv/fragment/base/AppMainDevicesFragment.java b/app_main/src/main/java/cn/rrg/rdv/fragment/base/AppMainDevicesFragment.java
index 81c3f1e0..d4e0ef46 100644
--- a/app_main/src/main/java/cn/rrg/rdv/fragment/base/AppMainDevicesFragment.java
+++ b/app_main/src/main/java/cn/rrg/rdv/fragment/base/AppMainDevicesFragment.java
@@ -15,26 +15,24 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.provider.Settings;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import com.termux.app.TermuxActivity;
+
import java.util.ArrayList;
import cn.dxl.common.util.AppUtil;
import cn.dxl.mifare.StdMifareImpl;
import cn.rrg.devices.PN53X;
import cn.rrg.rdv.R;
-import cn.rrg.rdv.activities.chameleon.ChameleonGUIActivity;
import cn.rrg.rdv.activities.connect.Acr122uHkUsbConnectActivity;
-import cn.rrg.rdv.activities.connect.ChameleonUsb2UartConnectActivity;
import cn.rrg.rdv.activities.connect.PN532UartConnectActivity;
import cn.rrg.rdv.activities.connect.PN53XUsbBulkTransferActivity;
import cn.rrg.rdv.activities.connect.Proxmark3Rdv4RRGConnectActivity;
import cn.rrg.rdv.activities.main.GeneralNfcDeviceMain;
import cn.rrg.rdv.activities.main.PN53XNfcMain;
-import cn.rrg.rdv.activities.main.Proxmark3Rdv4RRGMain;
import cn.rrg.rdv.binder.BannerImageViewBinder;
import cn.rrg.rdv.binder.DeviceInfoViewBinder;
import cn.rrg.rdv.binder.TitleTextViewBinder;
@@ -45,9 +43,7 @@ import me.drakeet.multitype.Items;
import me.drakeet.multitype.MultiTypeAdapter;
/**
- * 界面重构在2019/7/29启动!
- * 此次重构主要是将设备的可用列表迁移到主页面进行全览
- * 此页面应当只需要跳转到对应的设备的设备连接界面,不应当做过多的逻辑!
+ * UI redesign starts on July 29, 2019!
*
* @author DXL
*/
@@ -175,17 +171,19 @@ public class AppMainDevicesFragment extends BaseFragment {
}
}
});
- deviceItems.add(new DeviceInfoBean("Proxmark3 Rdv4.0", R.drawable.rdv4) {
+ deviceItems.add(new DeviceInfoBean("Proxmark3 Rdv4.0 for Termux", R.drawable.rdv4) {
@Override
public void onClick() {
deviceInfoBean = this;
connectOrGotoFunctionMain(
Proxmark3Rdv4RRGConnectActivity.class,
- Proxmark3Rdv4RRGMain.class
+ TermuxActivity.class
);
}
});
- deviceItems.add(new DeviceInfoBean("ChameleonMini RevE", R.drawable.chameleon_rdv2) {
+ // TODO
+ // The Chameleon have some problem, So we temporarily close the entrance.
+ /*deviceItems.add(new DeviceInfoBean("ChameleonMini RevE", R.drawable.chameleon_rdv2) {
@Override
public void onClick() {
deviceInfoBean = this;
@@ -194,7 +192,7 @@ public class AppMainDevicesFragment extends BaseFragment {
ChameleonGUIActivity.class
);
}
- });
+ });*/
deviceItems.add(new DeviceInfoBean(PN53X.NAME.PN532, R.drawable.pn532core) {
@Override
public void onClick() {
@@ -226,7 +224,6 @@ public class AppMainDevicesFragment extends BaseFragment {
}
private void updateDeviceStatus(boolean status) {
- Log.d("TAG", "新状态:" + status);
// update device status to bean!
if (status) {
if (deviceInfoBean != null) {
@@ -265,7 +262,6 @@ public class AppMainDevicesFragment extends BaseFragment {
@Override
public void onDestroy() {
super.onDestroy();
- //如果是横屏动作,那我们就没必要全部销毁。
if (isBackPressed) {
AppUtil.getInstance().finishAll();
}
diff --git a/app_main/src/main/java/cn/rrg/rdv/fragment/tools/AbsMfOperatesFragment.java b/app_main/src/main/java/cn/rrg/rdv/fragment/tools/AbsMfOperatesFragment.java
index 9f49c86d..1d059457 100644
--- a/app_main/src/main/java/cn/rrg/rdv/fragment/tools/AbsMfOperatesFragment.java
+++ b/app_main/src/main/java/cn/rrg/rdv/fragment/tools/AbsMfOperatesFragment.java
@@ -48,6 +48,7 @@ import cn.rrg.rdv.presenter.AbsTagKeysCheckPresenter;
import cn.rrg.rdv.presenter.AbsTagReadPresenter;
import cn.rrg.rdv.presenter.AbsTagStatePresenter;
import cn.rrg.rdv.presenter.AbsTagWritePresenter;
+import cn.rrg.rdv.util.Commons;
import cn.rrg.rdv.util.DumpUtils;
import cn.rrg.rdv.util.Paths;
import cn.rrg.rdv.view.MfKeysCheckView;
@@ -306,7 +307,7 @@ public abstract class AbsMfOperatesFragment
for (File tmpFile : file) {
keyFilesSelectedList.remove(tmpFile);
// 从本地持久域中删除
- delSelected(tmpFile.getAbsolutePath());
+ Commons.delKeyFileSelected(tmpFile.getAbsolutePath());
}
}
});
@@ -319,7 +320,7 @@ public abstract class AbsMfOperatesFragment
if (!keyFilesSelectedList.contains(tmp)) {
keyFilesSelectedList.add(tmp);
// 添加到本地持久域!
- addSelected(tmp.getAbsolutePath());
+ Commons.addKeyFileSelect(tmp.getAbsolutePath());
Log.d(LOG_TAG, "添加了秘钥文件: " + tmp.getName());
}
}
@@ -362,44 +363,30 @@ public abstract class AbsMfOperatesFragment
}
private void initSelected() {
- if (Properties.v_common_rw_keyfile_selected != null) {
- for (String v : Properties.v_common_rw_keyfile_selected) {
- File f = new File(v);
- if (f.exists() && f.isFile()) {
- keyFilesSelectedList.add(new File(v));
- }
- }
- if (Properties.v_common_rw_keyfile_selected.length > 0) {
- updateKeyFileSelectedName();
+ String[] ss = Commons.getKeyFilesSelected().toArray(new String[0]);
+ for (String v : ss) {
+ File f = new File(v);
+ if (f.exists() && f.isFile()) {
+ keyFilesSelectedList.add(new File(v));
}
}
+ updateKeyFileSelectedName();
}
private void updateKeyFileSelectedName() {
- txtShowKeyFileSelectedList.setText("");
- // 拼接显示!
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < keyFilesSelectedList.size(); i++) {
- if (i != keyFilesSelectedList.size() - 1) {
- Log.d(LOG_TAG, "添加了文件名: " + keyFilesSelectedList.get(i).getName());
- sb.append(keyFilesSelectedList.get(i).getName()).append("\n-\n");
- } else {
- sb.append(keyFilesSelectedList.get(i).getName());
- Log.d(LOG_TAG, "添加了文件名: " + keyFilesSelectedList.get(i).getName());
+ if (keyFilesSelectedList.size() > 0) {
+ // Show!
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < keyFilesSelectedList.size(); i++) {
+ if (i != keyFilesSelectedList.size() - 1) {
+ sb.append(keyFilesSelectedList.get(i).getName()).append("\n-\n");
+ } else {
+ sb.append(keyFilesSelectedList.get(i).getName());
+ }
}
- }
- //Log.d(LOG_TAG, "本次设置的文件名: " + sb);
- txtShowKeyFileSelectedList.setText(sb);
- }
-
- private void addSelected(String file) {
- File settingsFile = new File(Paths.SETTINGS_FILE);
- try {
- if (!DiskKVUtil.isKVExists(Properties.k_common_rw_keyfile_selected, file, settingsFile)) {
- DiskKVUtil.insertKV(Properties.k_common_rw_keyfile_selected, file, settingsFile);
- }
- } catch (IOException e) {
- e.printStackTrace();
+ txtShowKeyFileSelectedList.setText(sb);
+ } else {
+ txtShowKeyFileSelectedList.setText("");
}
}
diff --git a/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4SppModel.java b/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4SppModel.java
index 0c43cfef..b61d40bc 100644
--- a/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4SppModel.java
+++ b/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4SppModel.java
@@ -5,9 +5,10 @@ import android.bluetooth.BluetoothDevice;
import com.iobridges.com.DeviceChecker;
+import java.io.IOException;
+
import cn.proxgrind.com.DriverInterface;
import cn.proxgrind.com.SppNonBlock;
-import cn.rrg.devices.Proxmark3RRGRdv4;
/*
* PM3 RDV4 SPP连接实现!
@@ -21,7 +22,16 @@ public class Proxmark3Rdv4SppModel extends AbstractSppDeviceModel {
@Override
public DeviceChecker getDeviceInitImpl() {
- //此驱动对应的RDV4的客户端,因此需要返回的是RDV4的初始化测试实现!
- return new Proxmark3RRGRdv4(mDI);
+ return new DeviceChecker(mDI) {
+ @Override
+ protected boolean checkDevice() throws IOException {
+ return true;
+ }
+
+ @Override
+ public void close() throws IOException {
+
+ }
+ };
}
}
diff --git a/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4UsbModel.java b/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4UsbModel.java
index 1ab9bef7..beb87d04 100644
--- a/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4UsbModel.java
+++ b/app_main/src/main/java/cn/rrg/rdv/models/Proxmark3Rdv4UsbModel.java
@@ -2,11 +2,21 @@ package cn.rrg.rdv.models;
import com.iobridges.com.DeviceChecker;
-import cn.rrg.devices.Proxmark3RRGRdv4;
+import java.io.IOException;
public class Proxmark3Rdv4UsbModel extends AbsUsb2UartModel {
@Override
public DeviceChecker getDeviceInitImpl() {
- return new Proxmark3RRGRdv4(mDI);
+ return new DeviceChecker(mDI) {
+ @Override
+ protected boolean checkDevice() throws IOException {
+ return true;
+ }
+
+ @Override
+ public void close() throws IOException {
+
+ }
+ };
}
}
diff --git a/app_main/src/main/java/cn/rrg/rdv/settings/CommonRWKeyFilesSelectedSettings.java b/app_main/src/main/java/cn/rrg/rdv/settings/CommonRWKeyFilesSelectedSettings.java
deleted file mode 100644
index 61237da1..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/settings/CommonRWKeyFilesSelectedSettings.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cn.rrg.rdv.settings;
-
-import java.io.File;
-import java.io.IOException;
-
-import cn.dxl.common.util.DiskKVUtil;
-import cn.rrg.rdv.application.Properties;
-import cn.rrg.rdv.util.Paths;
-
-public class CommonRWKeyFilesSelectedSettings implements BaseSetting {
- @Override
- public File getSettingsFile() {
- return new File(Paths.SETTINGS_FILE);
- }
-
- @Override
- public String onQuerySetting() {
- return Properties.k_common_rw_keyfile_selected;
- }
-
- @Override
- public void onNotFound(String key) {
- try {
- DiskKVUtil.insertKV(Properties.k_common_rw_keyfile_selected, "", getSettingsFile());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onNormal(String[] value) {
- // 判断一下值是否有效!
- for (String v : value) {
- File file = new File(v);
- if (!file.exists()) {
- // 参数所指文件不存在,删除这个键值对!
- try {
- DiskKVUtil.deleteKV(Properties.k_common_rw_keyfile_selected, v, getSettingsFile());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- Properties.v_common_rw_keyfile_selected = value;
- }
-}
diff --git a/app_main/src/main/java/cn/rrg/rdv/settings/MainPageColumnCountSetting.java b/app_main/src/main/java/cn/rrg/rdv/settings/MainPageColumnCountSetting.java
deleted file mode 100644
index c215d78a..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/settings/MainPageColumnCountSetting.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cn.rrg.rdv.settings;
-
-import java.io.File;
-import java.io.IOException;
-
-import cn.rrg.rdv.util.Paths;
-import cn.rrg.rdv.application.Properties;
-import cn.dxl.common.util.DiskKVUtil;
-
-public class MainPageColumnCountSetting implements BaseSetting {
- @Override
- public File getSettingsFile() {
- return new File(Paths.SETTINGS_FILE);
- }
-
- @Override
- public String onQuerySetting() {
- return Properties.k_view_main_page_column_count;
- }
-
- @Override
- public void onNotFound(String key) {
- //否则创建!
- try {
- DiskKVUtil.insertKV(Properties.k_view_main_page_column_count, "4", getSettingsFile());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onNormal(String[] value) {
- Properties.v_view_main_page_column_count = DiskKVUtil.toInt(value[0], 4);
- }
-}
diff --git a/app_main/src/main/java/cn/rrg/rdv/settings/Proxmark3ConsleDelaySetting.java b/app_main/src/main/java/cn/rrg/rdv/settings/Proxmark3ConsleDelaySetting.java
deleted file mode 100644
index be34d55c..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/settings/Proxmark3ConsleDelaySetting.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cn.rrg.rdv.settings;
-
-import java.io.File;
-import java.io.IOException;
-
-import cn.rrg.rdv.util.Paths;
-import cn.rrg.rdv.application.Properties;
-import cn.dxl.common.util.DiskKVUtil;
-
-public class Proxmark3ConsleDelaySetting implements BaseSetting {
- @Override
- public File getSettingsFile() {
- return new File(Paths.SETTINGS_FILE);
- }
-
- @Override
- public String onQuerySetting() {
- return Properties.k_pm3_delayTime;
- }
-
- @Override
- public void onNotFound(String key) {
- //否则创建!
- try {
- DiskKVUtil.insertKV(key, "50", getSettingsFile());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onNormal(String[] value) {
- Properties.v_pm3_delayTime = DiskKVUtil.toInt(value[0], 50);
- }
-}
diff --git a/app_main/src/main/java/cn/rrg/rdv/util/AccessBitUtil.java b/app_main/src/main/java/cn/rrg/rdv/util/AccessBitUtil.java
deleted file mode 100644
index 4556529c..00000000
--- a/app_main/src/main/java/cn/rrg/rdv/util/AccessBitUtil.java
+++ /dev/null
@@ -1,623 +0,0 @@
-package cn.rrg.rdv.util;
-
-/**
- * Created by DXL on 2018/4/4.
- */
-
-import java.util.HashMap;
-
-public class AccessBitUtil {
-
- /*
- * 控制位长度,4位字节八个十六进制字符
- */
- public static final int CONTROLBIT_HEX_SIZE = 8;
- public static final int CONTROLBIT_BYTE_SIZE = 4;
-
- //可以实例化对象时使用的全局控制位缓存
- private byte[] mAcBytes = null;
-
- //静态工具库,default构造方法设为私有较好
- private AccessBitUtil() { /*This is don't need*/ }
-
- //有参构造方法,简化对相同控制位解析时方法调用的实现
- private AccessBitUtil(byte[] acBytes) {
- this.mAcBytes = acBytes;
- }
-
- /**
- * 参考文档
- * https://blog.csdn.net/liujianhua1989/article/details/72639307
- * https://www.cnblogs.com/h2zZhou/p/5250703.html
- * https://github.com/ikarus23/MifareClassicTool
- */
-
- /**
- * 认证后可执行下列操作:
- * 1、读数据块,读操作支持普通的数据块(0-2)与电子钱包块与尾块(trail)
- * 2、写数据块,写操作支持普通的数据块(0-2)与电子钱包块与尾块(trail)
- * 3、减值:减少数据块内的数值,并将结果保存在临时内部数据寄存器中。(仅支持电子钱包块)
- * 4、加值:增加数据块内的数值,并将结果保存在数据寄存器中。(仅支持电子钱包块)
- * 5、恢复:将数据块内容移入数据寄存器。(仅支持电子钱包块)
- * 6、转存:将临时内部数据寄存器的内容写入数值块。 (仅支持电子钱包块)
- * 枚举操作类型,依次为 -> 读卡 , 写卡 , 增值 , 减值 , 恢复 , 转存
- */
- public static enum Operation {
- READ, WRITE, INCREMENT, DECREMENT, RESTORE, TRANSFER
- }
-
- //密钥的验证是有KeyA,KeyB的两种不同的选择的,
- //当控制位的条件成立时,Key也可当作鉴权值之一
- //三个枚举元素分别是 A密钥, B密钥,AB密钥,两者都没
- public static enum KeyType {
- A, B, AB, NEVER
- }
-
- //对于一个扇区,能操作的只有两部分,一部分是数据块,一部分是尾部块
- public static enum SectorStructure {
- DATA, TRAIL
- }
-
- /*
- * 对数据块,能操作的总共有“三部分”,
- * Block0和Block1和Block2,不同容量的卡块数量不同,
- * 但是对于MIFARE CLASSIC CARD的兼容性来说,能操作的,就是“三部分”
- */
- public static enum DataBlockStructure {
- BLOCK0, BLOCK1, BLOCK2, BLOCK3
- }
-
- //对于特殊的块3,是有三部分的分割读写区域
- //其中分别是KeyA的读写,还有KeyB的读写, 还有控制位的读写
- //因此我们要根据要操作的区域对控制位进行解析鉴权
- public static enum TrailStructure {
- KEYA, KEYB, CONTROLBIT
- }
-
- //对于控制位,是有C1 , C2, C3的编号
- public static enum ControlBitNum {
- C1, C2, C3
- }
-
- /**
- * 块具有相对于区的独立性,16扇区各自拥有独立的鉴权方式,
- * 块鉴权在控制位的约束下,对于密码的权限是依赖控制位的实现
- * 依据控制位的约束,密钥对于块进行上述操作是必须要条件成立
- * 每个数据块和尾块的读写条件均由3个bit定义,
- * 并以非取反和取反形式保存在各个区的尾块中。
- * *尾部块由C13 C23 C33三个控制位来控制,由于不是数据块,因此仅支持读写操作
- * 数据块2由C12 C22 C32三个控制位控制,由于是数据块,因此支持读写增值减值操作
- * 数据块1由C11 C21 C31三个控制位控制,由于是数据块,因此支持读写增值减值操作
- * 数据块0由C10 C20 C30三个控制位控制,由于是数据块,因此支持读写增值减值操作
- */
-
- /* 警告,若控制位错误,将导致扇区锁死 */
-
- /**
- * 尾部块操作权限解析方法
- * 根据传入的控制字节对操作进行解析,返回对应的ENUM对象
- *
- * @param c1 控制字节1
- * @param c2 控制字节2
- * @param c3 控制字节3
- * @param opera 将要进行的操作
- * @param whereToOpera 将要操作尾部块那一部分
- */
- public static KeyType trailOperation(byte c1, byte c2, byte c3,
- Operation opera, TrailStructure whereToOpera) {
- //判断传入的操作类型是否正确,如果不正确则直接返回NEVER
- //特别警告!!!在尾部块,操作仅限于支持读操作与写操作
- if (opera != Operation.READ && opera != Operation.WRITE) return KeyType.NEVER;
- //为了简化鉴权过程,先执行把操作为读的鉴权
- if (opera == Operation.READ) {
- //在尾部块的操作为在KeyA部分上进行的时候的鉴权
- if (whereToOpera == TrailStructure.KEYA) {
- //当控制位为000时KeyA部分禁止读
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.NEVER;
- //当控制位为001时KeyA部分禁止读
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //当控制位为010时KeyA部分禁止读
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为011时KeyA部分禁止读
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- //当控制位为100时KeyA部分禁止读
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.NEVER;
- //当控制位为101时KeyA部分禁止读
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //当控制位为110时KeyA部分禁止读
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为111时KeyA部分禁止读
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //在尾部块的操作为在控制位部分上进行的时候的鉴权
- if (whereToOpera == TrailStructure.CONTROLBIT) {
- //当控制位为000时控制位部分允许验证密钥A后读
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.A;
- //当控制位为001时控制位部分允许验证密钥A后读
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.A;
- //当控制位为010时控制位部分允许验证密钥A后读
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.A;
- //当控制位为011时控制位部分允许验证密钥A|B后读
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.AB;
- //当控制位为100时控制位部分允许验证密钥A|B后读
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.AB;
- //当控制位为101时控制位部分允许验证密钥A|B后读
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.AB;
- //当控制位为110时控制位部分允许验证密钥A|B后读
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.AB;
- //当控制位为111时控制位部分允许验证密钥A|B后读
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.AB;
- }
- //在尾部块的操作为在KeyB部分上进行的时候的鉴权
- if (whereToOpera == TrailStructure.KEYB) {
- //当控制位为000时KeyB部分允许验证密钥A后读
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.A;
- //当控制位为001时KeyB部分允许验证密钥A后读
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.A;
- //当控制位为010时KeyB部分允许验证密钥A后读
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.A;
- //当控制位为011时KeyB部分禁止读
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- //当控制位为100时KeyB部分禁止读
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.NEVER;
- //当控制位为101时KeyB部分禁止读
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //当控制位为110时KeyB部分禁止读
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为111时KeyB部分禁止读
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
-
- }
- //然后再执行操作为写的鉴权
- if (opera == Operation.WRITE) {
- //在尾部块的操作为在KeyA部分上进行的时候的鉴权
- if (whereToOpera == TrailStructure.KEYA) {
- //当控制位为000时KeyA部分允许验证密钥A后写
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.A;
- //当控制位为001时KeyA部分允许验证密钥A后写
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.A;
- //当控制位为010时KeyA部分禁止写
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为011时KeyA部分允许验证密钥B后写
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.B;
- //当控制位为100时KeyA部分允许验证密钥B后写
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.B;
- //当控制位为101时KeyA部分禁止写
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //当控制位为110时KeyA部分禁止写
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为111时KeyA部分禁止写
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //在尾部块的操作为在控制位部分上进行的时候的鉴权
- if (whereToOpera == TrailStructure.CONTROLBIT) {
- //当控制位为000时控制位部分允许验证密钥B后写
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.B;
- //当控制位为001时控制位部分允许验证密钥A后写
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.A;
- //当控制位为010时控制位部分禁止写
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为011时控制位部分允许验证密钥B后写
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.B;
- //当控制位为100时控制位部分禁止写
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.NEVER;
- //当控制位为101时控制位部分允许验证密钥B后写
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.B;
- //当控制位为110时控制位部分禁止写
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为111时控制位部分禁止写
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //在尾部块的操作为在KeyB部分上进行的时候的鉴权
- if (whereToOpera == TrailStructure.KEYB) {
- //当控制位为000时KeyB部分允许验证密钥A后写
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.A;
- //当控制位为001时KeyB部分允许验证密钥A后写
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.A;
- //当控制位为010时KeyB部分禁止写
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为011时KeyB部分允许验证密钥B后写
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.B;
- //当控制位为100时KeyB部分允许验证密钥B后写
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.B;
- //当控制位为101时KeyB部分禁止写
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //当控制位为110时KeyB部分禁止写
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //当控制位为111时KeyB部分禁止写
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- }
- //在条件都不成立时返回NEVER
- return KeyType.NEVER;
- }
-
- /**
- * 数据块操作权限解析方法
- * 根据传入的控制字节对操作进行解析,返回对应的ENUM对象
- *
- * @param c1 控制字节1
- * @param c2 控制字节2
- * @param c3 控制字节3
- * @param opera 将要对数据块进行的操作
- */
- public static KeyType generalOperation(byte c1, byte c2, byte c3, Operation opera) {
- //1、进行数据块读操作的鉴权
- if (opera == Operation.READ) {
- //在控制位为000时允许密钥AB后读
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.AB;
- //在控制位为010时允许密钥AB后读
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.AB;
- //在控制位为100时允许密钥AB后读
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.AB;
- //在控制位为110时允许密钥AB后读
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.AB;
- //在控制位为001时允许密钥AB后读
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.AB;
- //在控制位为011时允许密钥B后读
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.B;
- //在控制位为101时允许密钥B后读
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.B;
- //在控制位为111时禁止读
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //1、进行数据块写操作的鉴权
- if (opera == Operation.WRITE) {
- //在控制位为000时允许密钥AB后写
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.AB;
- //在控制位为010时允许密钥B后写
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.B;
- //在控制位为100时允许密钥B后写
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.B;
- //在控制位为110时允许密钥B后写
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.B;
- //在控制位为001时禁止读
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //在控制位为011时允许密钥B后写
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.B;
- //在控制位为101时禁止写
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //在控制位为111时禁止写
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //3、进行数据块增值操作的鉴权
- if (opera == Operation.INCREMENT) {
- //在控制位为000时允许密钥AB后增值
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.AB;
- //在控制位为010时允许密钥B后增值
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //在控制位为100时允许密钥B后增值
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.NEVER;
- //在控制位为110时允许密钥B后增值
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.B;
- //在控制位为001时禁止增值
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //在控制位为011时允许密钥B后增值
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- //在控制位为101时禁止增值
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //在控制位为111时禁止增值
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //4、进行数据块减值操作的鉴权
- //5、进行数据块恢复操作的鉴权
- //6、进行数据块转存操作的鉴权
- if (opera == Operation.DECREMENT ||
- opera == Operation.RESTORE ||
- opera == Operation.TRANSFER) {
- //在控制位为000时允许密钥AB后减值转存恢复
- if (c1 == 0 && c2 == 0 && c3 == 0) return KeyType.AB;
- //在控制位为010时允许密钥B后减值转存恢复
- if (c1 == 0 && c2 == 1 && c3 == 0) return KeyType.NEVER;
- //在控制位为100时允许密钥B后减值转存恢复
- if (c1 == 1 && c2 == 0 && c3 == 0) return KeyType.NEVER;
- //在控制位为110时允许密钥AB后减值转存恢复
- if (c1 == 1 && c2 == 1 && c3 == 0) return KeyType.AB;
- //在控制位为001时允许密钥AB后减值转存恢复
- if (c1 == 0 && c2 == 0 && c3 == 1) return KeyType.AB;
- //在控制位为011时禁止减值转存恢复
- if (c1 == 0 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- //在控制位为101时禁止减值转存恢复
- if (c1 == 1 && c2 == 0 && c3 == 1) return KeyType.NEVER;
- //在控制位为111时禁止减值转存恢复
- if (c1 == 1 && c2 == 1 && c3 == 1) return KeyType.NEVER;
- }
- //在条件都不成立时返回NEVER
- return KeyType.NEVER;
- }
-
- /**
- * 密钥B可读性判断方法
- * 返回TRUE则keyB可读并可用于存储数据的访问控制条件
- * 尾块和key A被预定义为传输配置状态。
- * 因为在传输配置状态下key B可读,
- * (KeyB可读的情况下)新卡必须用keyA认证。
- *
- * @param c1 控制字节1
- * @param c2 控制字节2
- * @param c3 控制字节3
- */
- public static boolean isKeyBReadable(byte c1, byte c2, byte c3) {
- return c1 == 0
- //在控制位为000时密钥B可读
- && (c2 == 0 && c3 == 0)
- //在控制位为010时密钥B可读
- || (c2 == 1 && c3 == 0)
- //在控制位为001时密钥B可读
- || (c2 == 0 && c3 == 1);
- }
-
- public static boolean isKeyBReadable(byte[] ac) {
- byte c1 = (byte) ((ac[1] & 0x80) >>> 7);
- byte c2 = (byte) ((ac[2] & 0x08) >>> 3);
- byte c3 = (byte) ((ac[2] & 0x80) >>> 7);
- return isKeyBReadable(c1, c2, c3);
- }
-
- /**
- * 传输配置状态检测方法
- *
- * @param c1 控制字节1
- * @param c2 控制字节2
- * @param c3 控制字节3
- * @param block 要操作的区域
- */
- public static boolean isTranspotConfiguration(byte c1, byte c2, byte c3,
- SectorStructure block) {
- if (c1 == 0 && c2 == 0) {
- //操作数据块的情况下如果控制位为000则为传输配置状态
- if (block == SectorStructure.DATA && c3 == 0) return true;
- //操作尾部块的情况下如果控制位为001则为传输配置状态
- if (block == SectorStructure.TRAIL && c3 == 1) return true;
- }
- return false;
- }
-
- /**
- * 解析控制字节的方法
- *
- * @param controlBit 长度为4byte的控制位
- * @param block 枚举对象,用于判断要解析的块的控制位的鉴权
- * 返回对应的区块的控制权限_对应的byte
- */
- public static HashMap unpackAccessInfo(byte[] controlBit, DataBlockStructure block) {
- //控制位长度查错
- if (controlBit.length != CONTROLBIT_BYTE_SIZE) {
- throw new RuntimeException("The ControlBit length is error!!!");
- }
- //存结果的图表
- HashMap result = new HashMap<>();
- //建立一个矩阵数组,存控制位换算结果
- //三个控制位,四个块
- byte[][] acMatrix = new byte[3][4];
- //验证控制位的可行性
- if ((byte) ((controlBit[1] >>> 4) & 0x0F) ==
- (byte) ((controlBit[0] ^ 0xFF) & 0x0F) &&
- (byte) (controlBit[2] & 0x0F) ==
- (byte) (((controlBit[0] ^ 0xFF) >>> 4) & 0x0F) &&
- (byte) ((controlBit[2] >>> 4) & 0x0F) ==
- (byte) ((controlBit[1] ^ 0xFF) & 0x0F)) {
- // C1, Block 0-3
- for (int i = 0; i < 4; i++) {
- acMatrix[0][i] = (byte) ((controlBit[1] >>> 4 + i) & 0x01);
- }
- // C2, Block 0-3
- for (int i = 0; i < 4; i++) {
- acMatrix[1][i] = (byte) ((controlBit[2] >>> i) & 0x01);
- }
- // C3, Block 0-3
- for (int i = 0; i < 4; i++) {
- acMatrix[2][i] = (byte) ((controlBit[2] >>> 4 + i) & 0x01);
- }
- }
- if (block == DataBlockStructure.BLOCK0) {
- result.put(ControlBitNum.C1, acMatrix[0][0]);
- result.put(ControlBitNum.C2, acMatrix[1][0]);
- result.put(ControlBitNum.C3, acMatrix[2][0]);
- return result;
- }
- if (block == DataBlockStructure.BLOCK1) {
- result.put(ControlBitNum.C1, acMatrix[0][1]);
- result.put(ControlBitNum.C2, acMatrix[1][1]);
- result.put(ControlBitNum.C3, acMatrix[2][1]);
- return result;
- }
- if (block == DataBlockStructure.BLOCK2) {
- result.put(ControlBitNum.C1, acMatrix[0][2]);
- result.put(ControlBitNum.C2, acMatrix[1][2]);
- result.put(ControlBitNum.C3, acMatrix[2][2]);
- return result;
- }
- if (block == DataBlockStructure.BLOCK3) {
- result.put(ControlBitNum.C1, acMatrix[0][3]);
- result.put(ControlBitNum.C2, acMatrix[1][3]);
- result.put(ControlBitNum.C3, acMatrix[2][3]);
- return result;
- }
- return null;
- }
-
- /**
- * 打包控制字节的方法
- *
- * @param controlBit 全部控制位的实现,当有四个对象,每个对象里有用C1 , C2 , C3
- * 三个键值对,对应四个块的三个控制位
- * 返回全部区块的控制权限_对应的byte(三个,不包括预留字节)
- */
- public static byte[] packAccessInfo(HashMap> controlBit) {
- //建立一个矩阵数组,存控制位换算结果
- //三个控制位,四个块,从图表中取出来填充到矩阵数组中
- byte[][] acMatrix = new byte[3][4];
- //外层迭代
- for (int i = 0; i < 3; ++i) {
- //内层迭代
- for (int j = 0; j < 4; ++j) {
- acMatrix[i][j] =
- //取出对应扇区的控制比特位封包
- controlBit.get(DataBlockStructure.values()[j])
- //取出封包中的比特位打包进矩阵中
- .get(ControlBitNum.values()[i]);
- }
- }
- //开始将比特矩阵数组转化为字节数组
- for (int i = 0; i < 3; i++) {
- if (acMatrix[i].length != 4)
- // Error.
- return null;
- }
- byte[] acBytes = new byte[3];
- // Byte 6, Bit 0-3.
-
- acBytes[0] = (byte) ((acMatrix[0][0] ^ 0xFF) & 0x01);
- acBytes[0] |= (byte) (((acMatrix[0][1] ^ 0xFF) << 1) & 0x02);
- acBytes[0] |= (byte) (((acMatrix[0][2] ^ 0xFF) << 2) & 0x04);
- acBytes[0] |= (byte) (((acMatrix[0][3] ^ 0xFF) << 3) & 0x08);
- // Byte 6, Bit 4-7.
- acBytes[0] |= (byte) (((acMatrix[1][0] ^ 0xFF) << 4) & 0x10);
- acBytes[0] |= (byte) (((acMatrix[1][1] ^ 0xFF) << 5) & 0x20);
- acBytes[0] |= (byte) (((acMatrix[1][2] ^ 0xFF) << 6) & 0x40);
- acBytes[0] |= (byte) (((acMatrix[1][3] ^ 0xFF) << 7) & 0x80);
- // Byte 7, Bit 0-3.
- acBytes[1] = (byte) ((acMatrix[2][0] ^ 0xFF) & 0x01);
- acBytes[1] |= (byte) (((acMatrix[2][1] ^ 0xFF) << 1) & 0x02);
- acBytes[1] |= (byte) (((acMatrix[2][2] ^ 0xFF) << 2) & 0x04);
- acBytes[1] |= (byte) (((acMatrix[2][3] ^ 0xFF) << 3) & 0x08);
- // Byte 7, Bit 4-7.
- acBytes[1] |= (byte) ((acMatrix[0][0] << 4) & 0x10);
- acBytes[1] |= (byte) ((acMatrix[0][1] << 5) & 0x20);
- acBytes[1] |= (byte) ((acMatrix[0][2] << 6) & 0x40);
- acBytes[1] |= (byte) ((acMatrix[0][3] << 7) & 0x80);
- // Byte 8, Bit 0-3.
- acBytes[2] = (byte) (acMatrix[1][0] & 0x01);
- acBytes[2] |= (byte) ((acMatrix[1][1] << 1) & 0x02);
- acBytes[2] |= (byte) ((acMatrix[1][2] << 2) & 0x04);
- acBytes[2] |= (byte) ((acMatrix[1][3] << 3) & 0x08);
- // Byte 8, Bit 4-7.
- acBytes[2] |= (byte) ((acMatrix[2][0] << 4) & 0x10);
- acBytes[2] |= (byte) ((acMatrix[2][1] << 5) & 0x20);
- acBytes[2] |= (byte) ((acMatrix[2][2] << 6) & 0x40);
- acBytes[2] |= (byte) ((acMatrix[2][3] << 7) & 0x80);
-
- return acBytes;
- }
-
- /**
- * Convert the Access Condition bytes to a matrix containing the
- * resolved C1, C2 and C3 for each block.
- *
- * @param acBytes 控制位字节数组
- * @return 返回由3字节的控制位解析出来的控制位(bit)矩阵
- * null will be returned.
- */
- public static byte[][] acBytesToACMatrix(byte acBytes[]) {
- // ACs correct?
- // C1 (Byte 7, 4-7) == ~C1 (Byte 6, 0-3) and
- // C2 (Byte 8, 0-3) == ~C2 (Byte 6, 4-7) and
- // C3 (Byte 8, 4-7) == ~C3 (Byte 7, 0-3)
- byte[][] acMatrix = new byte[3][4];
- if (acBytes.length > 2 &&
- (byte) ((acBytes[1] >>> 4) & 0x0F) == (byte) ((acBytes[0] ^ 0xFF) & 0x0F) &&
- (byte) (acBytes[2] & 0x0F) == (byte) (((acBytes[0] ^ 0xFF) >>> 4) & 0x0F) &&
- (byte) ((acBytes[2] >>> 4) & 0x0F) == (byte) ((acBytes[1] ^ 0xFF) & 0x0F)) {
- // C1, Block 0-3
- for (int i = 0; i < 4; i++) {
- acMatrix[0][i] = (byte) ((acBytes[1] >>> 4 + i) & 0x01);
- }
- // C2, Block 0-3
- for (int i = 0; i < 4; i++) {
- acMatrix[1][i] = (byte) ((acBytes[2] >>> i) & 0x01);
- }
- // C3, Block 0-3
- for (int i = 0; i < 4; i++) {
- acMatrix[2][i] = (byte) ((acBytes[2] >>> 4 + i) & 0x01);
- }
- return acMatrix;
- }
- return null;
- }
-
- /**
- * 把矩阵控制位(比特类型的矩阵数组)转换为3字节的控制位
- *
- * @param acMatrix bit类型的控制位矩阵数组
- * @return 返回3字节的字节数组
- */
- public static byte[] acMatrixToACBytes(byte acMatrix[][]) {
- if (acMatrix != null && acMatrix.length == 3) {
- for (int i = 0; i < 3; i++) {
- if (acMatrix[i].length != 4)
- // Error.
- return null;
- }
- } else {
- // Error.
- return null;
- }
- byte[] acBytes = new byte[3];
- // Byte 6, Bit 0-3.
- acBytes[0] = (byte) ((acMatrix[0][0] ^ 0xFF) & 0x01);
- acBytes[0] |= (byte) (((acMatrix[0][1] ^ 0xFF) << 1) & 0x02);
- acBytes[0] |= (byte) (((acMatrix[0][2] ^ 0xFF) << 2) & 0x04);
- acBytes[0] |= (byte) (((acMatrix[0][3] ^ 0xFF) << 3) & 0x08);
- // Byte 6, Bit 4-7.
- acBytes[0] |= (byte) (((acMatrix[1][0] ^ 0xFF) << 4) & 0x10);
- acBytes[0] |= (byte) (((acMatrix[1][1] ^ 0xFF) << 5) & 0x20);
- acBytes[0] |= (byte) (((acMatrix[1][2] ^ 0xFF) << 6) & 0x40);
- acBytes[0] |= (byte) (((acMatrix[1][3] ^ 0xFF) << 7) & 0x80);
- // Byte 7, Bit 0-3.
- acBytes[1] = (byte) ((acMatrix[2][0] ^ 0xFF) & 0x01);
- acBytes[1] |= (byte) (((acMatrix[2][1] ^ 0xFF) << 1) & 0x02);
- acBytes[1] |= (byte) (((acMatrix[2][2] ^ 0xFF) << 2) & 0x04);
- acBytes[1] |= (byte) (((acMatrix[2][3] ^ 0xFF) << 3) & 0x08);
- // Byte 7, Bit 4-7.
- acBytes[1] |= (byte) ((acMatrix[0][0] << 4) & 0x10);
- acBytes[1] |= (byte) ((acMatrix[0][1] << 5) & 0x20);
- acBytes[1] |= (byte) ((acMatrix[0][2] << 6) & 0x40);
- acBytes[1] |= (byte) ((acMatrix[0][3] << 7) & 0x80);
- // Byte 8, Bit 0-3.
- acBytes[2] = (byte) (acMatrix[1][0] & 0x01);
- acBytes[2] |= (byte) ((acMatrix[1][1] << 1) & 0x02);
- acBytes[2] |= (byte) ((acMatrix[1][2] << 2) & 0x04);
- acBytes[2] |= (byte) ((acMatrix[1][3] << 3) & 0x08);
- // Byte 8, Bit 4-7.
- acBytes[2] |= (byte) ((acMatrix[2][0] << 4) & 0x10);
- acBytes[2] |= (byte) ((acMatrix[2][1] << 5) & 0x20);
- acBytes[2] |= (byte) ((acMatrix[2][2] << 6) & 0x40);
- acBytes[2] |= (byte) ((acMatrix[2][3] << 7) & 0x80);
-
- return acBytes;
- }
-
- /**
- * 根据一个控制位来进行所有的操作时使用的对象
- *
- * @param acBytes 控制位字节,四字节的控制位字节数组
- * @return 返回this
- */
- public static AccessBitUtil operaOneAc(byte[] acBytes) {
- return new AccessBitUtil(acBytes);
- }
-
- /**
- * 重载unpackAccessInfo,简化调用
- */
- public HashMap unpackAccessInfo(DataBlockStructure block) {
- return unpackAccessInfo(mAcBytes, block);
- }
-
- /**
- * 重载unpackAccessInfo,简化调用
- */
- public HashMap> unpackAccessInfo() {
- DataBlockStructure[] blocks = {DataBlockStructure.BLOCK0,
- DataBlockStructure.BLOCK1,
- DataBlockStructure.BLOCK2,
- DataBlockStructure.BLOCK3};
- HashMap> result = new HashMap>();
- for (int i = 0; i < 4; ++i) {
- result.put(blocks[i], unpackAccessInfo(blocks[i]));
- }
- return result;
- }
-}
\ No newline at end of file
diff --git a/app_main/src/main/java/cn/rrg/rdv/util/Commons.java b/app_main/src/main/java/cn/rrg/rdv/util/Commons.java
index 46163e9f..8136975e 100644
--- a/app_main/src/main/java/cn/rrg/rdv/util/Commons.java
+++ b/app_main/src/main/java/cn/rrg/rdv/util/Commons.java
@@ -12,6 +12,7 @@ import android.widget.RadioGroup;
import java.io.File;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -198,4 +199,27 @@ public class Commons {
FileUtils.createFile(file);
return file;
}
+
+ public static Set getKeyFilesSelected() {
+ return getPrivatePreferences()
+ .getStringSet(Properties.k_common_rw_keyfile_selected, new HashSet<>());
+ }
+
+ public static void addKeyFileSelect(String path) {
+ Set old = getKeyFilesSelected();
+ old.add(path);
+ getPrivatePreferences()
+ .edit()
+ .putStringSet(Properties.k_common_rw_keyfile_selected, old)
+ .apply();
+ }
+
+ public static void delKeyFileSelected(String path) {
+ Set old = getKeyFilesSelected();
+ old.remove(path);
+ getPrivatePreferences()
+ .edit()
+ .putStringSet(Properties.k_common_rw_keyfile_selected, old)
+ .apply();
+ }
}
diff --git a/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java b/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java
index 58518ca0..da78b89b 100644
--- a/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java
+++ b/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java
@@ -9,9 +9,6 @@ import java.io.IOException;
import cn.rrg.rdv.settings.BaseSetting;
import cn.rrg.rdv.settings.ChameleonSlotAliasesSetting;
import cn.rrg.rdv.settings.ChameleonSlotAliasesStatusSetting;
-import cn.rrg.rdv.settings.CommonRWKeyFilesSelectedSettings;
-import cn.rrg.rdv.settings.MainPageColumnCountSetting;
-import cn.rrg.rdv.settings.Proxmark3ConsleDelaySetting;
import cn.dxl.common.util.AssetsUtil;
import cn.dxl.common.util.DiskKVUtil;
@@ -224,9 +221,6 @@ public class InitUtil {
BaseSetting[] baseSettings = new BaseSetting[]{
new ChameleonSlotAliasesSetting(),
new ChameleonSlotAliasesStatusSetting(),
- new MainPageColumnCountSetting(),
- new Proxmark3ConsleDelaySetting(),
- new CommonRWKeyFilesSelectedSettings()
};
//迭代设置配置实现类,进行设置参数的初始化!
for (BaseSetting setting : baseSettings) {
diff --git a/pm3rdv4rrg/.gitignore b/pm3rdv4rrg/.gitignore
deleted file mode 100644
index 3889eda0..00000000
--- a/pm3rdv4rrg/.gitignore
+++ /dev/null
@@ -1,62 +0,0 @@
-# Built application files
-*.apk
-*.ap_
-
-# Files for the ART/Dalvik VM
-*.dex
-
-# Java class files
-*.class
-
-# Generated files
-bin/
-gen/
-out/
-
-# Cmake gen
-.cxx/
-
-# Gradle files
-.gradle/
-build/
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-# Proguard folder generated by Eclipse
-proguard/
-
-# Log Files
-*.log
-
-# Android Studio Navigation editor temp files
-.navigation/
-
-# Android Studio captures folder
-captures/
-
-# IntelliJ
-*.iml
-.idea/
-
-# Keystore files
-# Uncomment the following line if you do not want to check your keystore files in.
-#*.jks
-
-# External native build folder generated in Android Studio 2.2 and later
-.externalNativeBuild
-
-# Google Services (e.g. APIs or Firebase)
-google-services.json
-
-# Freeline
-freeline.py
-freeline/
-freeline_project_description.json
-
-# fastlane
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
-fastlane/test_output
-fastlane/readme.md
diff --git a/pm3rdv4rrg/build.gradle b/pm3rdv4rrg/build.gradle
deleted file mode 100644
index 0cf5a379..00000000
--- a/pm3rdv4rrg/build.gradle
+++ /dev/null
@@ -1,67 +0,0 @@
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion 29
- buildToolsVersion "29.0.2"
-
- defaultConfig {
- minSdkVersion 19
- targetSdkVersion 29
- versionCode 1
- versionName "1.0"
-
- externalNativeBuild {
- cmake {
- arguments '-DANDROID_STL=c++_static'
- abiFilters "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
- }
- }
-
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- consumerProguardFiles 'consumer-rules.pro'
- }
-
- /*externalNativeBuild {
- cmake {
- version '3.10.2'
- path 'src/main/cpp/proxmark3/client/android/CMakeLists.txt'
- }
- }*/
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
-
- /*android.libraryVariants.all { variant ->
- def rootPath = getRootDir();
- File targetPath = new File(rootPath.path + "/app_main/src/main/assets/pm3/resources");
- def sourcePath = "src/main/cpp/proxmark3/client/resources"
- // first we need delete history
- // delete targetPath
- if (!targetPath.exists()) targetPath.mkdirs()
- variant.mergeAssets.doLast {
- println "${targetPath}"
- copy {
- from "${sourcePath}"
- into "${targetPath}"
- }
- }
- }*/
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.github.xianglin1998:nfctag:1.0'
- implementation 'com.github.xianglin1998:nfc_console:1.0'
-
- implementation 'com.github.xianglin1998:ComBridge:1.0.7'
- // implementation project(path: ':iobridges')
-
- implementation project(':communication')
- implementation project(path: ':utils')
-
- implementation 'androidx.appcompat:appcompat:1.1.0'
-}
\ No newline at end of file
diff --git a/pm3rdv4rrg/consumer-rules.pro b/pm3rdv4rrg/consumer-rules.pro
deleted file mode 100644
index e69de29b..00000000
diff --git a/pm3rdv4rrg/proguard-rules.pro b/pm3rdv4rrg/proguard-rules.pro
deleted file mode 100644
index f1b42451..00000000
--- a/pm3rdv4rrg/proguard-rules.pro
+++ /dev/null
@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
diff --git a/pm3rdv4rrg/src/main/AndroidManifest.xml b/pm3rdv4rrg/src/main/AndroidManifest.xml
deleted file mode 100644
index babbbc7e..00000000
--- a/pm3rdv4rrg/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
diff --git a/pm3rdv4rrg/src/main/cpp/proxmark3 b/pm3rdv4rrg/src/main/cpp/proxmark3
deleted file mode 160000
index e9d06e0e..00000000
--- a/pm3rdv4rrg/src/main/cpp/proxmark3
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit e9d06e0ec5d128327334be27f76e82dad6489dd2
diff --git a/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java b/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java
deleted file mode 100644
index 89f65b70..00000000
--- a/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.rrg.devices;
-
-import com.iobridges.com.Communication;
-import com.iobridges.com.DeviceChecker;
-
-import java.io.IOException;
-
-import cn.dxl.common.util.LogUtils;
-
-public class Proxmark3RRGRdv4 extends DeviceChecker {
-
- static {
- System.loadLibrary("pm3rrg_rdv4");
- }
-
- public Proxmark3RRGRdv4(Communication communication) {
- super(communication);
- }
-
- @Override
- public boolean checkDevice() throws IOException {
- LogUtils.d("测试顺序");
- return testPm3();
- }
-
- @Override
- public void close() throws IOException {
- closePm3();
- }
-
- private native boolean testPm3() throws IOException;
-
- private native void closePm3();
-}
diff --git a/pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java b/pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java
deleted file mode 100644
index 0f866e4f..00000000
--- a/pm3rdv4rrg/src/main/java/cn/rrg/natives/Proxmark3RRGRdv4Tools.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.rrg.natives;
-
-import cn.rrg.console.define.ICommandTools;
-
-public class Proxmark3RRGRdv4Tools implements ICommandTools {
-
- //加载so文件!
- static {
- System.loadLibrary("pm3rrg_rdv4");
- }
-
- @Override
- public native int startExecute(String cmd);
-
- @Override
- public native boolean isExecuting();
-
- @Override
- public native void stopExecute();
-}
diff --git a/pm3rdv4rrg/src/main/res/values/strings.xml b/pm3rdv4rrg/src/main/res/values/strings.xml
deleted file mode 100644
index 0b86ae82..00000000
--- a/pm3rdv4rrg/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- pm3rdv4rrg
-
diff --git a/settings.gradle b/settings.gradle
index 0ec19362..21d0d736 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,4 +1,4 @@
-include ':app_main', ':utils', ':chameleon', ':communication', ':libnfc_pn53x', ':pm3rdv4rrg'
+include ':app_main', ':utils', ':chameleon', ':communication', ':libnfc_pn53x'
include ':pm3flasher'
include ':xmodem'
include ':termux-app', ':terminal-emulator', ':terminal-view'
\ No newline at end of file