11package org .netdex .hidfuzzer ;
22
33import android .os .Bundle ;
4+ import android .os .Handler ;
5+ import android .os .Looper ;
6+ import android .text .Html ;
7+ import android .view .View ;
48import android .widget .ArrayAdapter ;
9+ import android .widget .ScrollView ;
510import android .widget .Spinner ;
11+ import android .widget .TextView ;
612import android .widget .ToggleButton ;
713
814import androidx .appcompat .app .AppCompatActivity ;
15+ import androidx .core .os .HandlerCompat ;
916
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 ;
1222
1323import java .io .File ;
1424import java .io .IOException ;
1525import java .util .ArrayList ;
1626import java .util .HashMap ;
27+ import java .util .concurrent .ExecutorService ;
28+ import java .util .concurrent .Executors ;
1729
1830
1931public class MainActivity extends AppCompatActivity {
@@ -25,7 +37,7 @@ public class MainActivity extends AppCompatActivity {
2537 static final HashMap <String , String > fTaskMap = new HashMap <>();
2638 static final ArrayList <String > fTaskSpinnerItems = new ArrayList <>();
2739
28- private HIDTask mRunningTask ;
40+ private LuaHIDTask mRunningTask ;
2941
3042 protected void onCreate (Bundle savedInstanceState ) {
3143 super .onCreate (savedInstanceState );
@@ -46,25 +58,77 @@ protected void onCreate(Bundle savedInstanceState) {
4658 e .printStackTrace ();
4759 }
4860
61+ Handler handler = HandlerCompat .createAsync (Looper .getMainLooper ());
62+
4963 // 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 );
5268
5369 ArrayAdapter <String > adapter = new ArrayAdapter <>(
5470 this , android .R .layout .simple_spinner_item , fTaskSpinnerItems );
5571 adapter .setDropDownViewResource (android .R .layout .simple_spinner_dropdown_item );
5672 spnTask .setAdapter (adapter );
5773
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+
58122 btnPoll .setOnCheckedChangeListener ((buttonView , isChecked ) -> {
59123 if (isChecked ) {
60124 String selectedTask = (String ) spnTask .getSelectedItem ();
61125 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 );
64128 } else {
65129 if (mRunningTask != null ) {
66130 btnPoll .setEnabled (false );
67- mRunningTask .cancel ( false );
131+ mRunningTask .setCancelled ( true );
68132 }
69133 }
70134 });
0 commit comments