Skip to content

Commit e5e7f69

Browse files
authored
Merge pull request #54 from xianglin1998/master
Minimum support for Android 5.1
2 parents 3e6304c + 556d071 commit e5e7f69

File tree

16 files changed

+227
-169
lines changed

16 files changed

+227
-169
lines changed

app_main/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ android {
55
buildToolsVersion "29.0.2"
66
defaultConfig {
77
applicationId "com.rfidresearchgroup.rfidtools"
8-
minSdkVersion 24
8+
minSdkVersion 21
99
targetSdkVersion 28
1010
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
11-
versionCode 25
12-
versionName "1.4.7 Termux and SimpleView"
11+
versionCode 26
12+
versionName "1.4.8 SDK21 && PM3 CWD"
1313
}
1414
buildTypes {
1515
release {

app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
import android.app.Activity;
55
import android.content.DialogInterface;
66
import android.content.Intent;
7+
import android.os.Build;
78
import android.os.Bundle;
89

910
import androidx.annotation.Nullable;
1011
import androidx.appcompat.app.AlertDialog;
1112

1213
import cn.rrg.rdv.R;
1314
import cn.rrg.rdv.activities.main.PM3FlasherMainActivity;
15+
import cn.rrg.rdv.activities.proxmark3.rdv4_rrg.Proxmark3Rdv4RRGRedTeamConsoleActivity;
1416
import cn.rrg.rdv.activities.tools.DeviceConnectActivity;
1517
import cn.rrg.rdv.activities.proxmark3.rdv4_rrg.Proxmark3NewTerminalInitActivity;
1618
import cn.rrg.rdv.callback.ConnectFailedCtxCallback;
@@ -20,9 +22,6 @@
2022
import cn.dxl.common.util.PermissionUtil;
2123

2224
/**
23-
* 专供RDV4连接设备
24-
* 可以使用USB 与 SPP两种方式连接设备
25-
*
2625
* @author DXL
2726
*/
2827
public class Proxmark3Rdv4RRGConnectActivity
@@ -48,7 +47,11 @@ public AbstractDeviceModel[] getModels() {
4847

4948
@Override
5049
public Class getTarget() {
51-
return Proxmark3NewTerminalInitActivity.class;
50+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
51+
return Proxmark3NewTerminalInitActivity.class;
52+
} else {
53+
return Proxmark3Rdv4RRGRedTeamConsoleActivity.class;
54+
}
5255
}
5356

5457
@Override

app_main/src/main/java/cn/rrg/rdv/activities/proxmark3/rdv4_rrg/Proxmark3Rdv4RRGRedTeamConsoleActivity.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
import android.widget.GridView;
1212
import android.widget.TextView;
1313

14-
import com.termux.app.TermuxService;
15-
16-
import java.io.File;
1714
import java.util.ArrayList;
1815
import java.util.Arrays;
1916
import java.util.List;
@@ -66,13 +63,8 @@ public void onClick(View v) {
6663
initViews();
6764
initActions();
6865

69-
new Thread(new Runnable() {
70-
@Override
71-
public void run() {
72-
// 更改工作目录!
73-
IORedirector.chdir(TermuxService.HOME_PATH + File.separator + Paths.PM3_PATH);
74-
}
75-
}).start();
66+
// 更改工作目录!
67+
IORedirector.chdir(Paths.PM3_CWD);
7668
}
7769

7870
private void initViews() {

app_main/src/main/java/cn/rrg/rdv/application/Properties.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ public class Properties {
1919
public static String k_auto_goto_terminal = "autoGotoTermuxView";
2020
// The type of terminal
2121
public static String k_terminal_type = "terminal_type";
22+
// The enable status of p3m external work directory
23+
public static String k_pm3_externl_cwd_enable = "pm3_cwd_external_enable";
2224
}

app_main/src/main/java/cn/rrg/rdv/fragment/tools/MainSettingsFragment.java

Lines changed: 65 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.content.pm.PackageInfo;
99
import android.content.pm.PackageManager;
1010
import android.net.Uri;
11+
import android.os.Build;
1112
import android.os.Bundle;
1213

1314
import androidx.annotation.NonNull;
@@ -20,7 +21,11 @@
2021
import android.view.View;
2122
import android.view.ViewGroup;
2223

24+
import com.termux.app.TermuxService;
25+
2326
import cn.dxl.common.util.AppUtil;
27+
import cn.dxl.common.util.FileUtils;
28+
import cn.dxl.common.util.LogUtils;
2429
import cn.dxl.common.util.RestartUtils;
2530
import cn.rrg.rdv.R;
2631
import cn.rrg.rdv.binder.ItemSingleTextBean;
@@ -31,10 +36,13 @@
3136
import cn.rrg.rdv.javabean.ItemToggleBean;
3237
import cn.rrg.rdv.javabean.TitleBean;
3338
import cn.rrg.rdv.util.Commons;
39+
import cn.rrg.rdv.util.Paths;
3440
import cn.rrg.rdv.util.Proxmark3Installer;
3541
import me.drakeet.multitype.Items;
3642
import me.drakeet.multitype.MultiTypeAdapter;
3743

44+
import static android.app.Activity.RESULT_OK;
45+
3846
/*
3947
* 主设置活动!
4048
* */
@@ -119,35 +127,53 @@ public void onClick(View view, int pos) {
119127
pm3Res.setMessage(Commons.isPM3ResInitialled() ? getString(R.string.initialized) : getString(R.string.uninitialized));
120128
items.add(pm3Res);
121129

122-
ItemToggleBean pm3AutoGo = new ItemToggleBean(getString(R.string.title_pm3_autogo_setting)) {
123-
@Override
124-
public void onChange(View view, int pos, boolean checked) {
125-
Commons.setAutoGoToTerminal(checked);
126-
}
127-
};
128-
pm3AutoGo.setSubTitle(getString(R.string.title_sub_pm3_autogo_setting));
129-
pm3AutoGo.setChecked(Commons.getAutoGoToTerminal());
130-
items.add(pm3AutoGo);
130+
// 只有SDK版本大于等于24的时候才使能PM3的高级视图
131+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
132+
133+
ItemToggleBean pm3AutoGo = new ItemToggleBean(getString(R.string.title_pm3_autogo_setting)) {
134+
@Override
135+
public void onChange(View view, int pos, boolean checked) {
136+
Commons.setAutoGoToTerminal(checked);
137+
}
138+
};
139+
pm3AutoGo.setSubTitle(getString(R.string.title_sub_pm3_autogo_setting));
140+
pm3AutoGo.setChecked(Commons.getAutoGoToTerminal());
141+
items.add(pm3AutoGo);
142+
143+
ItemTextBean pm3TerminalTypeItem = new ItemTextBean(getString(R.string.title_terminal_type_setting)) {
144+
@Override
145+
public void onClick(View view, int pos) {
146+
String[] languages = new String[]{getString(R.string.item_full_terminal_view), getString(R.string.item_simple_terminal_view)};
147+
new AlertDialog.Builder(view.getContext())
148+
.setTitle(R.string.tips_terminal_select_like)
149+
.setItems(languages, new DialogInterface.OnClickListener() {
150+
@Override
151+
public void onClick(DialogInterface dialog, int which) {
152+
Commons.setTerminalType(which);
153+
setMessage(currentTerminalType());
154+
multiTypeAdapter.notifyDataSetChanged();
155+
}
156+
}).show();
157+
}
158+
};
159+
pm3TerminalTypeItem.setSubTitle(getString(R.string.title_sub_terminal_type_setting));
160+
pm3TerminalTypeItem.setMessage(currentTerminalType());
161+
items.add(pm3TerminalTypeItem);
162+
}
131163

132-
ItemTextBean pm3TerminalTypeItem = new ItemTextBean(getString(R.string.title_terminal_type_setting)) {
164+
// PM3 work directory select
165+
ItemToggleBean pm3HomePathItem = new ItemToggleBean(getString(R.string.title_pm3_home)) {
133166
@Override
134-
public void onClick(View view, int pos) {
135-
String[] languages = new String[]{getString(R.string.item_full_terminal_view), getString(R.string.item_simple_terminal_view)};
136-
new AlertDialog.Builder(view.getContext())
137-
.setTitle(R.string.tips_terminal_select_like)
138-
.setItems(languages, new DialogInterface.OnClickListener() {
139-
@Override
140-
public void onClick(DialogInterface dialog, int which) {
141-
Commons.setTerminalType(which);
142-
setMessage(currentTerminalType());
143-
multiTypeAdapter.notifyDataSetChanged();
144-
}
145-
}).show();
167+
public void onChange(View view, int pos, boolean checked) {
168+
Commons.setPM3ExternalWorkDirectoryEnable(checked);
169+
setSubTitle(Commons.updatePM3Cwd());
170+
setChecked(checked);
171+
multiTypeAdapter.notifyDataSetChanged();
146172
}
147173
};
148-
pm3TerminalTypeItem.setSubTitle(getString(R.string.title_sub_terminal_type_setting));
149-
pm3TerminalTypeItem.setMessage(currentTerminalType());
150-
items.add(pm3TerminalTypeItem);
174+
pm3HomePathItem.setSubTitle(Paths.PM3_CWD);
175+
pm3HomePathItem.setChecked(Commons.isPM3ExternalWorkDirectoryEnable());
176+
items.add(pm3HomePathItem);
151177

152178
items.add(new TitleBean(getString(R.string.other)));
153179

@@ -166,6 +192,20 @@ public void onClick(View view, int pos) {
166192
multiTypeAdapter.notifyDataSetChanged();
167193
}
168194

195+
@Override
196+
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
197+
super.onActivityResult(requestCode, resultCode, data);
198+
if (requestCode == 0x77 && resultCode == RESULT_OK && data != null) {
199+
Uri uri = data.getData();
200+
if (uri != null) {
201+
// get file path
202+
String path = FileUtils.getFilePathByUri(uri);
203+
// save
204+
LogUtils.d("获取到的路径: " + path);
205+
}
206+
}
207+
}
208+
169209
public static String getVersion(Context context) {
170210
if (context == null) return "unknown";
171211
try {

app_main/src/main/java/cn/rrg/rdv/util/Commons.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,4 +283,28 @@ public static int getTerminalType() {
283283
return getPrivatePreferences()
284284
.getInt(Properties.k_terminal_type, -1);
285285
}
286+
287+
public static void setPM3ExternalWorkDirectoryEnable(boolean enable) {
288+
getPrivatePreferences().edit()
289+
.putBoolean(Properties.k_pm3_externl_cwd_enable, enable)
290+
.apply();
291+
}
292+
293+
public static boolean isPM3ExternalWorkDirectoryEnable() {
294+
return getPrivatePreferences()
295+
.getBoolean(Properties.k_pm3_externl_cwd_enable, false);
296+
}
297+
298+
public static String updatePM3Cwd() {
299+
// init pm3 cwd
300+
if (Commons.isPM3ExternalWorkDirectoryEnable()) {
301+
TermuxService.PM3_CWD = Paths.PM3_CWD_FINAL;
302+
Paths.PM3_CWD = TermuxService.PM3_CWD;
303+
new File(Paths.PM3_CWD).mkdirs();
304+
} else {
305+
Paths.PM3_CWD = TermuxService.HOME_PATH;
306+
TermuxService.PM3_CWD = null;
307+
}
308+
return Paths.PM3_CWD;
309+
}
286310
}

app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import android.content.Context;
44
import android.util.Log;
55

6+
import com.termux.app.TermuxActivity;
7+
import com.termux.app.TermuxService;
8+
69
import java.io.File;
710
import java.io.IOException;
811

@@ -75,6 +78,7 @@ public static void initApplicationResource(Context context) {
7578
initEasyButtonFile(au);
7679
initPM3ForwardFile();
7780
}
81+
Commons.updatePM3Cwd();
7882
}
7983

8084
private static void initCommonInFile() {

app_main/src/main/java/cn/rrg/rdv/util/Paths.java

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -6,71 +6,74 @@
66

77
import java.io.File;
88

9-
public interface Paths {
9+
public class Paths {
1010

11-
String EXTERNAL_STORAGE_DIRECTORY = Environment.getExternalStorageDirectory().getPath();
12-
String TOOLS_PATH = "NfcTools";
13-
String SETTINGS_PATH = "Settings";
14-
String MCT_PATH = "MifareClassicTool";
15-
String MTools_PATH = "MTools";
16-
String HARDNESTED_PATH = "hardnested";
17-
String LOG_PATH = "log";
18-
String PM3_PATH = "proxmark3";
19-
String COMMON_PATH = "common";
20-
String PN53X_PATH = "pn53x";
21-
String DRIVER_PATH = "driver";
22-
String TENCENT_PATH = "tencent";
23-
String WECAT_PATH = "MicroMsg/Download";
24-
String QQ_PATH = "QQfile_recv";
25-
String KEY_PATH = "keyFile";
26-
String DUMP_PATH = "dumpFile";
27-
String DEFAULT_KEYS_NAME = "default_keys.txt";
28-
String DEFAULT_DUMP_NAME = "BLANK(空白).dump";
29-
String DEFAULT_CMD_NAME = "cmd.json";
11+
public static String EXTERNAL_STORAGE_DIRECTORY = Environment.getExternalStorageDirectory().getPath();
12+
public static String TOOLS_PATH = "NfcTools";
13+
public static String SETTINGS_PATH = "Settings";
14+
public static String MCT_PATH = "MifareClassicTool";
15+
public static String MTools_PATH = "MTools";
16+
public static String HARDNESTED_PATH = "hardnested";
17+
public static String LOG_PATH = "log";
18+
public static String PM3_PATH = "proxmark3";
19+
public static String COMMON_PATH = "common";
20+
public static String PN53X_PATH = "pn53x";
21+
public static String DRIVER_PATH = "driver";
22+
public static String TENCENT_PATH = "tencent";
23+
public static String WECAT_PATH = "MicroMsg/Download";
24+
public static String QQ_PATH = "QQfile_recv";
25+
public static String KEY_PATH = "keyFile";
26+
public static String DUMP_PATH = "dumpFile";
27+
public static String DEFAULT_KEYS_NAME = "default_keys.txt";
28+
public static String DEFAULT_DUMP_NAME = "BLANK(空白).dump";
29+
public static String DEFAULT_CMD_NAME = "cmd.json";
3030

31-
String TOOLS_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + TOOLS_PATH;
32-
String KEY_DIRECTORY = TOOLS_DIRECTORY + "/" + KEY_PATH;
33-
String LOG_DIRECTORY = TOOLS_DIRECTORY + "/" + LOG_PATH;
31+
public static String TOOLS_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + TOOLS_PATH;
32+
public static String KEY_DIRECTORY = TOOLS_DIRECTORY + "/" + KEY_PATH;
33+
public static String LOG_DIRECTORY = TOOLS_DIRECTORY + "/" + LOG_PATH;
3434

35-
String MCT_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + MCT_PATH;
36-
String MCT_DUMP_DIRECTORY = MCT_DIRECTORY + "/" + "dump-files";
37-
String MCT_KEYS_DIRECTORY = MCT_DIRECTORY + "/" + "key-files";
35+
public static String MCT_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + MCT_PATH;
36+
public static String MCT_DUMP_DIRECTORY = MCT_DIRECTORY + "/" + "dump-files";
37+
public static String MCT_KEYS_DIRECTORY = MCT_DIRECTORY + "/" + "key-files";
3838

39-
String MTools_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + MTools_PATH;
40-
String MTools_DUMP_DIRECTORY = MTools_DIRECTORY + "/" + "dump";
41-
String MTools_KEYS_DIRECTORY = MTools_DIRECTORY + "/" + "key";
39+
public static String MTools_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + MTools_PATH;
40+
public static String MTools_DUMP_DIRECTORY = MTools_DIRECTORY + "/" + "dump";
41+
public static String MTools_KEYS_DIRECTORY = MTools_DIRECTORY + "/" + "key";
4242

43-
String COMMON_DIRECTORY = TOOLS_DIRECTORY + "/" + COMMON_PATH;
44-
String DUMP_DIRECTORY = TOOLS_DIRECTORY + "/" + DUMP_PATH;
43+
public static String COMMON_DIRECTORY = TOOLS_DIRECTORY + "/" + COMMON_PATH;
44+
public static String DUMP_DIRECTORY = TOOLS_DIRECTORY + "/" + DUMP_PATH;
4545

46-
String PM3_DIRECTORY = TOOLS_DIRECTORY + "/" + PM3_PATH;
47-
String PN53X_DIRRECTORY = TOOLS_DIRECTORY + "/" + PN53X_PATH;
46+
public static String PM3_DIRECTORY = TOOLS_DIRECTORY + "/" + PM3_PATH;
47+
public static String PN53X_DIRRECTORY = TOOLS_DIRECTORY + "/" + PN53X_PATH;
4848

49-
String WECAT_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + TENCENT_PATH + "/" + WECAT_PATH;
50-
String QQ_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + TENCENT_PATH + "/" + QQ_PATH;
49+
public static String WECAT_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + TENCENT_PATH + "/" + WECAT_PATH;
50+
public static String QQ_DIRECTORY = EXTERNAL_STORAGE_DIRECTORY + "/" + TENCENT_PATH + "/" + QQ_PATH;
5151

52-
String SETTINGS_DIRECTORY = TOOLS_DIRECTORY + "/" + SETTINGS_PATH;
53-
String SETTINGS_FILE = SETTINGS_DIRECTORY + "/" + "set.dat";
52+
public static String SETTINGS_DIRECTORY = TOOLS_DIRECTORY + "/" + SETTINGS_PATH;
53+
public static String SETTINGS_FILE = SETTINGS_DIRECTORY + "/" + "set.dat";
5454

55-
String PM3_BOOT_FILE_NAME = "bootrom.elf";
56-
String PM3_OS_FILE_NAME = "fullimage.elf";
57-
String PM3_FORWARD_O = PM3_DIRECTORY + "/" + "pm3_forward_o.txt";
58-
String PM3_FORWARD_E = PM3_DIRECTORY + "/" + "pm3_forward_e.txt";
55+
public static String PM3_BOOT_FILE_NAME = "bootrom.elf";
56+
public static String PM3_OS_FILE_NAME = "fullimage.elf";
57+
public static String PM3_FORWARD_O = PM3_DIRECTORY + "/" + "pm3_forward_o.txt";
58+
public static String PM3_FORWARD_E = PM3_DIRECTORY + "/" + "pm3_forward_e.txt";
5959
//PM3 Easy Button
60-
String PM3_CMD_FILE = PM3_DIRECTORY + "/" + DEFAULT_CMD_NAME;
60+
public static String PM3_CMD_FILE = PM3_DIRECTORY + "/" + DEFAULT_CMD_NAME;
6161
// PM3 Image
62-
String PM3_IMAGE_BOOT_FILE = TermuxService.HOME_PATH + File.separator + PM3_PATH + File.separator + PM3_BOOT_FILE_NAME;
63-
String PM3_IMAGE_OS_FILE = TermuxService.HOME_PATH + File.separator + PM3_PATH + File.separator + PM3_OS_FILE_NAME;
62+
public static String PM3_IMAGE_BOOT_FILE = TermuxService.HOME_PATH + File.separator + PM3_PATH + File.separator + PM3_BOOT_FILE_NAME;
63+
public static String PM3_IMAGE_OS_FILE = TermuxService.HOME_PATH + File.separator + PM3_PATH + File.separator + PM3_OS_FILE_NAME;
64+
// pm3 cwd -> sdcard
65+
public static String PM3_CWD = PM3_DIRECTORY + File.separator + "home";
66+
public static final String PM3_CWD_FINAL = PM3_DIRECTORY + File.separator + "home";
6467

65-
String PN53X_FORWARD_O = PN53X_DIRRECTORY + "/" + "pn53x_forward_o.txt";
66-
String PN53X_FORWARD_E = PN53X_DIRRECTORY + "/" + "pn53x_forward_e.txt";
67-
String PN53X_FORWARD_MF_O = PN53X_DIRRECTORY + "/" + "pn53x_forward_mf_o.txt";
68-
String PN53X_FORWARD_MF_E = PN53X_DIRRECTORY + "/" + "pn53x_forward_mf_e.txt";
69-
String COMMON_FORWARD_O = COMMON_DIRECTORY + "/" + "common_forward_o.txt";
70-
String COMMON_FORWARD_E = COMMON_DIRECTORY + "/" + "common_forward_e.txt";
71-
String COMMON_FORWARD_I = COMMON_DIRECTORY + "/" + "common_forward_i.txt";
68+
public static String PN53X_FORWARD_O = PN53X_DIRRECTORY + "/" + "pn53x_forward_o.txt";
69+
public static String PN53X_FORWARD_E = PN53X_DIRRECTORY + "/" + "pn53x_forward_e.txt";
70+
public static String PN53X_FORWARD_MF_O = PN53X_DIRRECTORY + "/" + "pn53x_forward_mf_o.txt";
71+
public static String PN53X_FORWARD_MF_E = PN53X_DIRRECTORY + "/" + "pn53x_forward_mf_e.txt";
72+
public static String COMMON_FORWARD_O = COMMON_DIRECTORY + "/" + "common_forward_o.txt";
73+
public static String COMMON_FORWARD_E = COMMON_DIRECTORY + "/" + "common_forward_e.txt";
74+
public static String COMMON_FORWARD_I = COMMON_DIRECTORY + "/" + "common_forward_i.txt";
7275

73-
String DEFAULT_KEYS_FILE = KEY_DIRECTORY + "/" + DEFAULT_KEYS_NAME;
74-
String DEFAULT_DUMP_FILE = DUMP_DIRECTORY + "/" + DEFAULT_DUMP_NAME;
75-
String DRIVER_DIRECTORY = TOOLS_DIRECTORY + "/" + DRIVER_PATH;
76+
public static String DEFAULT_KEYS_FILE = KEY_DIRECTORY + "/" + DEFAULT_KEYS_NAME;
77+
public static String DEFAULT_DUMP_FILE = DUMP_DIRECTORY + "/" + DEFAULT_DUMP_NAME;
78+
public static String DRIVER_DIRECTORY = TOOLS_DIRECTORY + "/" + DRIVER_PATH;
7679
}

0 commit comments

Comments
 (0)