1
1
package org .netdex .hidfuzzer ;
2
2
3
3
import android .os .Bundle ;
4
+ import android .os .Handler ;
5
+ import android .os .Looper ;
6
+ import android .text .Html ;
7
+ import android .view .View ;
4
8
import android .widget .ArrayAdapter ;
9
+ import android .widget .ScrollView ;
5
10
import android .widget .Spinner ;
11
+ import android .widget .TextView ;
6
12
import android .widget .ToggleButton ;
7
13
8
14
import androidx .appcompat .app .AppCompatActivity ;
15
+ import androidx .core .os .HandlerCompat ;
9
16
10
- import org .netdex .hidfuzzer .ltask .HIDTask ;
11
- import org .netdex .hidfuzzer .ltask .LuaTaskLoader ;
17
+ import org .netdex .hidfuzzer .gui .ConfirmDialog ;
18
+ import org .netdex .hidfuzzer .gui .PromptDialog ;
19
+ import org .netdex .hidfuzzer .ltask .AsyncIOBridge ;
20
+ import org .netdex .hidfuzzer .ltask .LuaHIDTask ;
21
+ import org .netdex .hidfuzzer .ltask .LuaHIDTaskFactory ;
12
22
13
23
import java .io .File ;
14
24
import java .io .IOException ;
15
25
import java .util .ArrayList ;
16
26
import java .util .HashMap ;
27
+ import java .util .concurrent .ExecutorService ;
28
+ import java .util .concurrent .Executors ;
17
29
18
30
19
31
public class MainActivity extends AppCompatActivity {
@@ -25,7 +37,7 @@ public class MainActivity extends AppCompatActivity {
25
37
static final HashMap <String , String > fTaskMap = new HashMap <>();
26
38
static final ArrayList <String > fTaskSpinnerItems = new ArrayList <>();
27
39
28
- private HIDTask mRunningTask ;
40
+ private LuaHIDTask mRunningTask ;
29
41
30
42
protected void onCreate (Bundle savedInstanceState ) {
31
43
super .onCreate (savedInstanceState );
@@ -46,25 +58,77 @@ protected void onCreate(Bundle savedInstanceState) {
46
58
e .printStackTrace ();
47
59
}
48
60
61
+ Handler handler = HandlerCompat .createAsync (Looper .getMainLooper ());
62
+
49
63
// sort out the UI
50
- final ToggleButton btnPoll = findViewById (R .id .btnPoll );
51
- final Spinner spnTask = findViewById (R .id .spnTask );
64
+ ToggleButton btnPoll = findViewById (R .id .btnPoll );
65
+ Spinner spnTask = findViewById (R .id .spnTask );
66
+ TextView logView = findViewById (R .id .txtLog );
67
+ ScrollView scrollView = findViewById (R .id .scrollview );
52
68
53
69
ArrayAdapter <String > adapter = new ArrayAdapter <>(
54
70
this , android .R .layout .simple_spinner_item , fTaskSpinnerItems );
55
71
adapter .setDropDownViewResource (android .R .layout .simple_spinner_dropdown_item );
56
72
spnTask .setAdapter (adapter );
57
73
74
+ AsyncIOBridge dialogIO = new AsyncIOBridge () {
75
+ @ Override
76
+ public void onLogMessage (String s ) {
77
+ handler .post (() -> {
78
+ logView .append (Html .fromHtml (s ));
79
+ logView .append ("\n " );
80
+ scrollView .fullScroll (View .FOCUS_DOWN );
81
+ });
82
+ }
83
+
84
+ @ Override
85
+ public void onLogClear () {
86
+ handler .post (() -> {
87
+ logView .setText ("" );
88
+ });
89
+ }
90
+
91
+ @ Override
92
+ public void onSignal (Signal signal ) {
93
+ handler .post (()->{
94
+ switch (signal ){
95
+ case DONE :
96
+ btnPoll .setChecked (false );
97
+ btnPoll .setEnabled (true );
98
+ break ;
99
+ default :
100
+ throw new IllegalStateException ("Unexpected value: " + signal );
101
+ }
102
+ });
103
+ }
104
+
105
+ @ Override
106
+ public boolean onConfirm (String title , String prompt ) {
107
+ ConfirmDialog dialog = new ConfirmDialog (MainActivity .this , title , prompt );
108
+ return dialog .show ();
109
+ }
110
+
111
+ @ Override
112
+ public String onPrompt (String title , String def ) {
113
+ PromptDialog dialog = new PromptDialog (MainActivity .this , title , def );
114
+ return dialog .show ();
115
+ }
116
+ };
117
+
118
+ LuaHIDTaskFactory luaHIDTaskFactory = new LuaHIDTaskFactory (dialogIO );
119
+
120
+ ExecutorService executorService = Executors .newCachedThreadPool ();
121
+
58
122
btnPoll .setOnCheckedChangeListener ((buttonView , isChecked ) -> {
59
123
if (isChecked ) {
60
124
String selectedTask = (String ) spnTask .getSelectedItem ();
61
125
String taskSrcFilePath = fTaskMap .get (selectedTask );
62
- mRunningTask = LuaTaskLoader .createTaskFromLuaFile (this , selectedTask , taskSrcFilePath );
63
- mRunningTask .execute ();
126
+ mRunningTask = luaHIDTaskFactory .createTaskFromLuaFile (this , selectedTask , taskSrcFilePath );
127
+ executorService .execute (mRunningTask );
64
128
} else {
65
129
if (mRunningTask != null ) {
66
130
btnPoll .setEnabled (false );
67
- mRunningTask .cancel ( false );
131
+ mRunningTask .setCancelled ( true );
68
132
}
69
133
}
70
134
});
0 commit comments