mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
save works
This commit is contained in:
parent
aa770b2ffb
commit
22185346e8
@ -24,10 +24,10 @@ function showLoginUI(){
|
||||
</frame>
|
||||
);
|
||||
|
||||
ui.login.click(() => {
|
||||
ui.login.on("click", () => {
|
||||
toast("您输入的用户名为" + ui.name.text() + " 密码为" + ui.password.text());
|
||||
});
|
||||
ui.register.click(() => showRegisterUI());
|
||||
ui.register.on("click", () => showRegisterUI());
|
||||
}
|
||||
|
||||
//显示注册界面
|
||||
@ -41,7 +41,7 @@ function showRegisterUI(){
|
||||
</linear>
|
||||
<linear>
|
||||
<text w="56" gravity="center" color="#111111" size="16">密码</text>
|
||||
<input w="*" h="40" inputType="password"/>
|
||||
<input w="*" h="40" password="true"/>
|
||||
</linear>
|
||||
<linear>
|
||||
<text w="56" gravity="center" color="#111111" size="16">邮箱</text>
|
||||
@ -54,5 +54,5 @@ function showRegisterUI(){
|
||||
</vertical>
|
||||
</frame>
|
||||
);
|
||||
ui.cancel.click(() => showLoginUI());
|
||||
ui.cancel.on("click", () => showLoginUI());
|
||||
}
|
||||
@ -9,7 +9,9 @@ import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.app.GlobalAppContext;
|
||||
|
||||
@ -9,6 +9,8 @@ module.exports = function (runtime, global) {
|
||||
var ui = {};
|
||||
ui.__view_cache__ = {};
|
||||
|
||||
ui.__defineGetter__("emitter", ()=> activity ? activity.getEventEmitter() : null);
|
||||
|
||||
ui.layout = function (xml) {
|
||||
if(!activity){
|
||||
throw new Error("需要在ui模式下运行才能使用该函数");
|
||||
@ -152,6 +154,7 @@ module.exports = function (runtime, global) {
|
||||
return false;
|
||||
},
|
||||
beforeApplyAttribute: function (inflater, view, ns, attrName, value, parent, attrs) {
|
||||
log("beforeApplyAttribute:", view, attrName, value);
|
||||
var isDynamic = layoutInflater.isDynamicValue(value);
|
||||
if ((isDynamic && layoutInflater.getInflateFlags() == layoutInflater.FLAG_IGNORES_DYNAMIC_ATTRS)
|
||||
|| (!isDynamic && layoutInflater.getInflateFlags() == layoutInflater.FLAG_JUST_DYNAMIC_ATTRS)) {
|
||||
@ -194,7 +197,9 @@ module.exports = function (runtime, global) {
|
||||
}
|
||||
|
||||
function decorate(view) {
|
||||
var androidView = view;
|
||||
var view = global.events.__asEmitter__(Object.create(view));
|
||||
view.__androidView__ = androidView;
|
||||
if (view.getClass().getName() == "com.stardust.autojs.core.ui.widget.JsListView"
|
||||
|| view.getClass().getName() == "com.stardust.autojs.core.ui.widget.JsGridView") {
|
||||
view = decorateList(view);
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
package com.stardust.autojs.core.eventloop;
|
||||
|
||||
public class SimpleEvent {
|
||||
|
||||
public boolean consumed = false;
|
||||
}
|
||||
@ -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")) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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()
|
||||
|
||||
@ -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;
|
||||
|
||||
8
autojs/src/main/res/layout/js_toolbar.xml
Normal file
8
autojs/src/main/res/layout/js_toolbar.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.stardust.autojs.core.ui.widget.JsToolbar xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:popupTheme="@style/AppTheme.PopupOverlay">
|
||||
|
||||
</com.stardust.autojs.core.ui.widget.JsToolbar>
|
||||
@ -18,6 +18,8 @@
|
||||
<string name="no_write_settings_permissin">沒有修改系統设置权限</string>
|
||||
<string name="exception_notification_service_disabled">通知服务未运行,请重新启用通知权限</string>
|
||||
<string name="text_requires_app_version_to_run_the_script" formatted="true">本脚本需要Auto.js版本号%d以上才能运行</string>
|
||||
<string name="text_drawer_open">打开侧拉菜单</string>
|
||||
<string name="text_drawer_close">关闭侧拉菜单</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<style name="ConsoleTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
@ -10,9 +10,12 @@
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
|
||||
<item name="android:popupTheme" tools:ignore="NewApi">@style/AppTheme.PopupOverlay</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
|
||||
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
|
||||
|
||||
|
||||
<style name="AppTheme.Transparent" parent="AppTheme">
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user