208 lines
6.1 KiB
JavaScript
208 lines
6.1 KiB
JavaScript
module.exports = function(__runtime__, scope){
|
|
var ui = {};
|
|
ui.__view_cache__ = {};
|
|
|
|
ui.layout = function(xml){
|
|
var view = __runtime__.ui.layoutInflater.inflate(activity, xml.toString());
|
|
ui.setContentView(view);
|
|
}
|
|
|
|
ui.setContentView = function(view){
|
|
ui.view = view;
|
|
ui.__view_cache__ = {};
|
|
ui.run(function(){
|
|
activity.setContentView(view);
|
|
});
|
|
}
|
|
|
|
ui.findById = function(id){
|
|
if(!ui.view)
|
|
return null;
|
|
var v = ui.findByStringId(ui.view.getChildAt(0), id);
|
|
if(v){
|
|
v = decorate(v);
|
|
}
|
|
return v;
|
|
}
|
|
|
|
ui.isUiThread = function(){
|
|
importClass(android.os.Looper);
|
|
return Looper.myLooper() == Looper.getMainLooper();
|
|
}
|
|
|
|
ui.run = function(action){
|
|
if(ui.isUiThread()){
|
|
return action();
|
|
}
|
|
var err = null;
|
|
var result;
|
|
var disposable = scope.threads.disposable();
|
|
__runtime__.uiHandler.post(function(){
|
|
try{
|
|
result = action();
|
|
disposable.setAndNotify(true);
|
|
}catch(e){
|
|
err = e;
|
|
disposable.setAndNotify(true);
|
|
}
|
|
});
|
|
disposable.blockedGet();
|
|
if(err){
|
|
throw err;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
ui.post = function(action, delay){
|
|
delay = delay || 0;
|
|
__runtime__.getUiHandler().postDelay(wrapUiAction(action), delay);
|
|
}
|
|
|
|
ui.statusBarColor = function(color){
|
|
if(typeof(color) == 'string'){
|
|
color = android.graphics.Color.parseColor(color);
|
|
}
|
|
if(android.os.Build.VERSION.SDK_INT >= 21){
|
|
ui.run(function(){
|
|
activity.getWindow().setStatusBarColor(color);
|
|
});
|
|
}
|
|
}
|
|
|
|
ui.finish = function(){
|
|
ui.run(function(){
|
|
activity.finish();
|
|
});
|
|
}
|
|
|
|
ui.findByStringId = function(view, id){
|
|
return com.stardust.autojs.core.ui.JsViewHelper.findViewByStringId(view, id);
|
|
}
|
|
|
|
function decorate(view){
|
|
var view = scope.events.__asEmitter__(Object.create(view));
|
|
var gestureDetector = new android.view.GestureDetector(context, {
|
|
onDown: function(e){
|
|
e = wrapMotionEvent(e);
|
|
scope.__exitIfError__(function(){
|
|
view.emit("touch_down", e, view);
|
|
});
|
|
return e.consumed;
|
|
},
|
|
onShowPress: function(e){
|
|
e = wrapMotionEvent(e);
|
|
view.emit("show_press", e, view);
|
|
},
|
|
onSingleTapUp: function(e){
|
|
e = wrapMotionEvent(e);
|
|
scope.__exitIfError__(function(){
|
|
view.emit("single_tap", e, view);
|
|
});
|
|
return e.consumed;
|
|
},
|
|
onScroll: function(e1, e2, distanceX, distanceY){
|
|
e1 = wrapMotionEvent(e1);
|
|
e2 = wrapMotionEvent(e2);
|
|
scope.__exitIfError__(function(){
|
|
view.emit("scroll", e1, e2, distanceX, distanceY, view);
|
|
});
|
|
return e1.consumed || e2.consumed;
|
|
},
|
|
onLongPress: function(e){
|
|
e = wrapMotionEvent(e);
|
|
view.emit("long_press", e, view);
|
|
},
|
|
onFling: function(e1, e2, velocityX, velocityY){
|
|
e1 = wrapMotionEvent(e1);
|
|
e2 = wrapMotionEvent(e2);
|
|
scope.__exitIfError__(function(){
|
|
view.emit("fling", e1, e2, velocityX, velocityY, view);
|
|
});
|
|
return e1.consumed || e2.consumed;
|
|
}
|
|
});
|
|
view.setOnTouchListener(function(v, event){
|
|
event = wrapMotionEvent(event);
|
|
event.consumed = false;
|
|
scope.__exitIfError__(function(){
|
|
view.emit("touch", event, view);
|
|
});
|
|
return event.consumed;
|
|
})
|
|
view.setOnLongClickListener(function(v){
|
|
var event = {};
|
|
event.consumed = false;
|
|
scope.__exitIfError__(function(){
|
|
view.emit("long_click", event, view);
|
|
});
|
|
return event.consumed;
|
|
});
|
|
view.setOnClickListener(function(v){
|
|
view.emit("click", view);
|
|
});
|
|
if(typeof(view.setOnCheckedChangeListener) == 'function'){
|
|
view.setOnCheckedChangeListener(function(v, isChecked){
|
|
view.emit("check", isChecked, view);
|
|
});
|
|
}
|
|
view._id = function(id){
|
|
return ui.findByStringId(view, id);
|
|
}
|
|
view.click = function(listener){
|
|
if(listener){
|
|
view.setOnClickListener(new android.view.View.OnClickListener(wrapUiAction(listener)));
|
|
}else{
|
|
view.performClick();
|
|
}
|
|
}
|
|
view.longClick = function(listener){
|
|
if(listener){
|
|
view.setOnLongClickListener(wrapUiAction(listener, false));
|
|
}else{
|
|
view.performLongClick();
|
|
}
|
|
}
|
|
return view;
|
|
}
|
|
|
|
ui.__decorate__ = decorate;
|
|
|
|
function wrapUiAction(action, defReturnValue){
|
|
if(typeof(activity) != 'undefined'){
|
|
return function(){return action();};
|
|
}
|
|
return function(){
|
|
return __exitIfError__(action, defReturnValue);
|
|
}
|
|
}
|
|
|
|
function wrapMotionEvent(e){
|
|
e = Object.create(e);
|
|
e.consumed = false;
|
|
return e;
|
|
}
|
|
|
|
var proxy = __runtime__.ui;
|
|
proxy.__proxy__ = {
|
|
set: function(name, value){
|
|
ui[name] = value;
|
|
},
|
|
get: function(name) {
|
|
if(!ui[name] && ui.view){
|
|
var cacheView = ui.__view_cache__[name];
|
|
if(cacheView){
|
|
return cacheView;
|
|
}
|
|
cacheView = ui.findById(name);
|
|
if(cacheView){
|
|
ui.__view_cache__[name] = cacheView;
|
|
return cacheView;
|
|
}
|
|
}
|
|
return ui[name];
|
|
}
|
|
};
|
|
|
|
|
|
return proxy;
|
|
} |