From 768ac6ea4e80755c682fb312abc3f5ce48393961 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 11 Jul 2017 09:53:37 +0800 Subject: [PATCH] fix crash caused by recorded script too large --- .../java/com/stardust/scriptdroid/App.java | 4 - .../menu/content/RecordNavigatorContent.java | 19 ++++- .../scriptdroid/ui/main/MainActivity.java | 13 +++- app/src/main/res/drawable/discard.png | Bin 0 -> 901 bytes .../res/layout/floating_window_record.xml | 31 ++++++++ .../java/com/stardust/util/IntentExtras.java | 69 ++++++++++++++++++ 6 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable/discard.png create mode 100644 common/src/main/java/com/stardust/util/IntentExtras.java 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 0000000000000000000000000000000000000000..cdc318b04d3d779afa00ff86379bec46d52b7530 GIT binary patch literal 901 zcmV;01A6?4P)R$aDj-wYjU%6LS3BPGu2rHEY5dD-*MVgNMQeA0hW5EcPIRZ02tk(0jzFm|G3%F}_9BM5IrL1tX(t4 z^kfuE{akvw7@(?*;a{0D%+VQ?Y)%S2T_Ly^fS*}{b1NbzHM_S&i9yxP6npFx8HwK2 zCOoS8JIg@#qP`)Wy#VM=_$cCfkMCF*OIlJ$&66<@Z1V&=C1LMGgju0WR5jOgGXO9= z&cjuH;TcSjRFxqvzaS-X(Krnb0D=K=1;Peo_9Kj7`SGKd8w@WHZZP722!wh>f_tC9 zkIe`|965_CsVQP?*Th+T-pdQP^b7zzd1f$RH_LKSE3SYcpsHa5Iz@smriKv=Bj`XN zyg+z?oo{U};}UMLzZ+x`X0q354KKjL2Kxq+urM;%LSq#qHfjA=bpcj+QZ11wD!aZ$ zCF=uX73pHCl$KAl$-;=k$ut`h0Bo@`)a-a26D`RA-pBi%LC=>KhrZ2+ED1oF(LJg$ zPR(~ZFrk&!*&mRkX=Nzy5a9wq00000NkvXXu0mjf|A~w$ literal 0 HcmV?d00001 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; + } +}