save works

This commit is contained in:
hyb1996
2018-05-29 20:26:21 +08:00
parent aa770b2ffb
commit 22185346e8
12 changed files with 177 additions and 20 deletions

View File

@@ -0,0 +1,6 @@
package com.stardust.autojs.core.eventloop;
public class SimpleEvent {
public boolean consumed = false;
}

View File

@@ -4,6 +4,7 @@ import android.content.res.ColorStateList;
import android.graphics.PorterDuff;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
@@ -26,6 +27,7 @@ import com.stardust.autojs.core.ui.inflater.util.ValueMapper;
import org.w3c.dom.Node;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
@@ -151,6 +153,8 @@ public class BaseViewInflater<V extends View> implements ViewInflater<V> {
((LinearLayout.LayoutParams) layoutParams).gravity = Gravities.parse(value);
} else if (parent != null && parent instanceof FrameLayout) {
((FrameLayout.LayoutParams) layoutParams).gravity = Gravities.parse(value);
} else {
return setLayoutGravity(parent, view, Gravities.parse(value));
}
break;
case "layout_weight":
@@ -585,6 +589,18 @@ public class BaseViewInflater<V extends View> implements ViewInflater<V> {
return true;
}
public boolean setLayoutGravity(ViewGroup parent, V view, int gravity) {
try {
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
Field field = layoutParams.getClass().getField("gravity");
field.set(layoutParams, gravity);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
public boolean setAttr(V view, String ns, String attrName, String value, ViewGroup parent, Map<String, String> attrs) {
if (ns == null || ns.equals("android")) {

View File

@@ -1,9 +1,14 @@
package com.stardust.autojs.core.ui.inflater.inflaters;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import com.stardust.autojs.R;
import com.stardust.autojs.core.ui.inflater.ResourceParser;
import com.stardust.autojs.core.ui.inflater.ViewCreator;
import com.stardust.autojs.core.ui.inflater.util.Strings;
import java.util.Map;
@@ -21,24 +26,20 @@ public class ToolbarInflater<V extends Toolbar> extends BaseViewInflater<V> {
@Override
public boolean setAttr(V view, String attr, String value, ViewGroup parent, Map<String, String> attrs) {
return super.setAttr(view, attr, value, parent, attrs);
}
@Override
public boolean setAttr(V view, String ns, String attrName, String value, ViewGroup parent, Map<String, String> attrs) {
if (super.setAttr(view, ns, attrName, value, parent, attrs)) {
return true;
}
if (!ns.equals("app")) {
return false;
}
switch (attrName) {
switch (attr) {
case "title":
view.setTitle(Strings.parse(view, value));
break;
default:
return false;
return super.setAttr(view, attr, value, parent, attrs);
}
return true;
}
@Nullable
@Override
@SuppressWarnings("unchecked")
public ViewCreator<? super V> getCreator() {
return (ViewCreator<V>) (context, attrs) -> (V) View.inflate(context, R.layout.js_toolbar, null);
}
}

View File

@@ -0,0 +1,45 @@
package com.stardust.autojs.core.ui.widget;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.util.Log;
import com.stardust.autojs.R;
import org.mozilla.javascript.NativeObject;
public class JsToolbar extends Toolbar {
public JsToolbar(Context context) {
super(context);
}
public JsToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public JsToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setupWithDrawer(DrawerLayout drawerLayout) {
ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle((Activity) getContext(), drawerLayout, this, R.string.text_drawer_open,
R.string.text_drawer_close);
drawerToggle.syncState();
drawerLayout.addDrawerListener(drawerToggle);
}
public void setupWithDrawer(NativeObject object) {
if (object.containsKey("__androidView__")) {
setupWithDrawer((DrawerLayout) object.get("__androidView__"));
} else {
throw new ClassCastException("cannot cast object to DrawerLayout");
}
}
}

View File

@@ -1,5 +1,8 @@
package com.stardust.autojs.core.ui.xml;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.webkit.WebView;
@@ -23,6 +26,7 @@ import com.stardust.autojs.core.ui.widget.JsLinearLayout;
import com.stardust.autojs.core.ui.widget.JsListView;
import com.stardust.autojs.core.ui.widget.JsRelativeLayout;
import com.stardust.autojs.core.ui.widget.JsTextView;
import com.stardust.autojs.core.ui.widget.JsToolbar;
import com.stardust.autojs.core.ui.widget.JsWebView;
import org.w3c.dom.Document;
@@ -67,10 +71,13 @@ public class XmlConverter {
.map("radiogroup", RadioGroup.class.getName())
.map("checkbox", CheckBox.class.getName())
.map("scroll", ScrollView.class.getName())
.map("toolbar", Toolbar.class.getName())
.map("toolbar", JsToolbar.class.getName())
.map("canvas", ScriptCanvasView.class.getName())
.map("list", JsListView.class.getName())
.map("grid", JsGridView.class.getName())
.map("drawer", DrawerLayout.class.getName())
.map("appbar", AppBarLayout.class.getName())
.map("tabs", TabLayout.class.getName())
);
private static final AttributeHandler ATTRIBUTE_HANDLER = new AttributeHandler.AttrNameRouter()

View File

@@ -4,8 +4,13 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import com.stardust.autojs.core.eventloop.EventEmitter;
import com.stardust.autojs.core.eventloop.SimpleEvent;
import com.stardust.autojs.engine.JavaScriptEngine;
import com.stardust.autojs.engine.LoopBasedJavaScriptEngine;
import com.stardust.autojs.engine.ScriptEngine;
import com.stardust.autojs.engine.ScriptEngineManager;
@@ -27,6 +32,9 @@ public class ScriptExecuteActivity extends AppCompatActivity {
private ActivityScriptExecution mScriptExecution;
private IntentExtras mIntentExtras;
private EventEmitter mEventEmitter;
public static ActivityScriptExecution execute(Context context, ScriptEngineManager manager, ScriptExecutionTask task) {
ActivityScriptExecution execution = new ActivityScriptExecution(manager, task);
Intent i = new Intent(context, ScriptExecuteActivity.class)
@@ -51,6 +59,7 @@ public class ScriptExecuteActivity extends AppCompatActivity {
mScriptSource = mScriptExecution.getSource();
mScriptEngine = mScriptExecution.createEngine(this);
mExecutionListener = mScriptExecution.getListener();
mEventEmitter = new EventEmitter(((JavaScriptEngine) mScriptEngine).getRuntime().bridges);
runScript();
}
@@ -134,6 +143,59 @@ public class ScriptExecuteActivity extends AppCompatActivity {
outState.putInt(IntentExtras.EXTRA_ID, extras.getId());
}
@Override
public void onBackPressed() {
SimpleEvent event = new SimpleEvent();
mEventEmitter.emit("back_pressed", event);
if (!event.consumed) {
super.onBackPressed();
}
}
@Override
protected void onPause() {
mEventEmitter.emit("pause");
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mEventEmitter.emit("resume");
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mEventEmitter.emit("restore_instance_state", savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
mEventEmitter.emit("save_instance_state", outState, outPersistentState);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
SimpleEvent e = new SimpleEvent();
mEventEmitter.emit("key_down", keyCode, event, e);
return e.consumed || super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mEventEmitter.emit("activity_result", requestCode, resultCode, data);
}
private static class ActivityScriptExecution extends ScriptExecution.AbstractScriptExecution {
private ScriptEngine mScriptEngine;