diff --git a/app/src/main/java/com/stardust/scriptdroid/App.java b/app/src/main/java/com/stardust/scriptdroid/App.java index 363ad426..5e44b536 100644 --- a/app/src/main/java/com/stardust/scriptdroid/App.java +++ b/app/src/main/java/com/stardust/scriptdroid/App.java @@ -83,10 +83,6 @@ public class App extends MultiDexApplication { } - public static String getResString(int id) { - return getApp().getString(id); - } - public VolumeChangeObserver getVolumeChangeObserver() { return mVolumeChangeObserver; } diff --git a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java index 60fc5e3a..3a12d667 100644 --- a/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java +++ b/app/src/main/java/com/stardust/scriptdroid/external/floatingwindow/menu/content/RecordNavigatorContent.java @@ -51,15 +51,17 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat @BindView(R.id.text_start_or_pause) TextView mStartOrPauseRecordText; - @BindView(R.id.stop_record) View mStopRecord; + @BindView(R.id.discard_record) + View mDiscardRecord; + + private Recorder mRecorder; private Context mContext; - + private boolean mDiscard = false; private KeyObserver mKeyObserver; - private VolumeChangeObserver.OnVolumeChangeListener mOnVolumeChangeListener = new VolumeChangeObserver.OnVolumeChangeListener() { @Override public void onVolumeChange() { @@ -123,6 +125,12 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat } } + @OnClick(R.id.discard_record) + void discardRecord() { + mDiscard = true; + stopRecord(); + } + private void resumeRecord() { mRecorder.resume(); setState(Recorder.STATE_RECORDING); @@ -135,6 +143,7 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat } private void startRecord() { + mDiscard = false; mRecorder = mRecordedByRootSwitch.isChecked() ? new TouchRecorder(mContext) : AutoJs.getInstance().getAccessibilityActionRecorder(); mRecorder.setOnStateChangedListener(this); mRecorder.start(); @@ -191,7 +200,9 @@ public class RecordNavigatorContent implements NavigatorContent, Recorder.OnStat @Override public void onStop() { - MainActivity.onRecordStop(mContext, mRecorder.getCode()); + if (!mDiscard) { + MainActivity.onRecordStop(mContext, mRecorder.getCode()); + } mRecorder = null; } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java index 3973202c..d048689d 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java @@ -40,6 +40,7 @@ import com.stardust.scriptdroid.script.ScriptFile; import com.stardust.scriptdroid.script.StorageScriptProvider; import com.stardust.scriptdroid.script.sample.Sample; import com.stardust.scriptdroid.ui.main.task.TaskManagerFragment_; +import com.stardust.util.IntentExtras; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.scriptdroid.tool.AccessibilityServiceTool; import com.stardust.scriptdroid.tool.DrawableSaver; @@ -306,7 +307,10 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega return; switch (action) { case ACTION_ON_ACTION_RECORD_STOPPED: - handleRecordedScript(intent.getStringExtra(ARGUMENT_SCRIPT)); + IntentExtras extras = IntentExtras.fromIntent(intent); + String script = extras.get(ARGUMENT_SCRIPT); + extras.clear(); + handleRecordedScript(script); break; case ACTION_IMPORT_SCRIPT: handleImportScriptFile(intent); @@ -442,6 +446,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); StorageScriptProvider.getDefault().notifyStoragePermissionGranted(); } @@ -456,8 +461,10 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega public static void onRecordStop(Context context, String script) { Intent intent = new Intent(context, MainActivity_.class) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .putExtra(EXTRA_ACTION, ACTION_ON_ACTION_RECORD_STOPPED) - .putExtra(ARGUMENT_SCRIPT, script); + .putExtra(EXTRA_ACTION, ACTION_ON_ACTION_RECORD_STOPPED); + IntentExtras.newExtras() + .put(ARGUMENT_SCRIPT, script) + .putInIntent(intent); context.startActivity(intent); } diff --git a/app/src/main/res/drawable/discard.png b/app/src/main/res/drawable/discard.png new file mode 100644 index 00000000..cdc318b0 Binary files /dev/null and b/app/src/main/res/drawable/discard.png differ diff --git a/app/src/main/res/layout/floating_window_record.xml b/app/src/main/res/layout/floating_window_record.xml index 957bcba4..8399258c 100644 --- a/app/src/main/res/layout/floating_window_record.xml +++ b/app/src/main/res/layout/floating_window_record.xml @@ -148,6 +148,37 @@ + + + + + + + + + + > extraStore = new SparseArray<>(); + + + public static IntentExtras newExtras() { + return new IntentExtras(); + } + + public static IntentExtras fromIntent(Intent intent) { + int id = intent.getIntExtra(EXTRA_ID, -1); + if (id < 0) { + throw new IllegalArgumentException(""); + } + return new IntentExtras(id); + } + + private Map mMap; + private int mId; + + private IntentExtras() { + mMap = new HashMap<>(); + mMaxId++; + mId = mMaxId; + extraStore.put(mId, mMap); + } + + + private IntentExtras(int id) { + mMap = extraStore.get(id); + mMaxId = id; + } + + + @SuppressWarnings("unchecked") + public T get(String key) { + return (T) mMap.get(key); + } + + public IntentExtras put(String key, Object value) { + mMap.put(key, value); + return this; + } + + public Intent putInIntent(Intent intent) { + intent.putExtra(EXTRA_ID, mMaxId); + return intent; + } + + public void clear() { + extraStore.remove(mId); + mMap = null; + } +}