diff --git a/.Jules/palette.md b/.Jules/palette.md new file mode 100644 index 0000000..f34065d --- /dev/null +++ b/.Jules/palette.md @@ -0,0 +1,3 @@ +## 2025-01-30 - State Feedback for Native Operations +**Learning:** For buttons triggering one-time native operations like library loading, providing immediate visual state changes (disabling and updating text) prevents redundant user actions and clarifies the current application state. +**Action:** Always disable "Load" or "Hook" buttons and update their labels to "Loaded" or "Hooked" upon successful execution to provide clear, persistent feedback. diff --git a/app/src/main/java/com/bytedance/shadowhook/sample/MainActivity.java b/app/src/main/java/com/bytedance/shadowhook/sample/MainActivity.java index 90c3219..1572dc8 100644 --- a/app/src/main/java/com/bytedance/shadowhook/sample/MainActivity.java +++ b/app/src/main/java/com/bytedance/shadowhook/sample/MainActivity.java @@ -29,6 +29,7 @@ import android.os.Bundle; import android.util.Log; import android.view.View; +import android.widget.Button; import com.bytedance.shadowhook.ShadowHook; import com.bytedance.shadowhook.systest.SysTest; @@ -64,6 +65,10 @@ public void onUnitTestLoadClick(View view) { if(!hookee2Loaded) { hookee2Loaded = true; System.loadLibrary("hookee2"); + + Button btn = (Button) view; + btn.setEnabled(false); + btn.setText(R.string.load_libhookee2_done); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c74fc8e..a29ec2a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -39,7 +39,7 @@