From c3c73ab94a64902ab3b1405e1b9e8f0ca4949861 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 29 Nov 2018 19:17:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=82=AC=E6=B5=AE?= =?UTF-8?q?=E7=AA=97=E5=B8=83=E5=B1=80=E5=88=86=E6=9E=90"=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E6=88=90=E5=8A=9F"=E7=9A=84=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=A2=AB=E9=81=AE=E6=8C=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/autojs/autojs/autojs/AutoJs.java | 10 +- .../layoutinspector/NodeInfoView.java | 179 ------------------ .../floating/layoutinspector/NodeInfoView.kt | 154 +++++++++++++++ .../org/autojs/autojs/ui/log/LogActivity.java | 10 +- autojs/src/main/assets/modules/__engines__.js | 4 +- .../main/java/com/stardust/autojs/AutoJs.java | 18 +- .../autojs/core/console/ConsoleFloaty.java | 5 +- ...{StardustConsole.java => ConsoleImpl.java} | 40 ++-- .../autojs/core/console/ConsoleView.java | 30 +-- ...tardustConsole.java => GlobalConsole.java} | 8 +- .../src/main/java/com/stardust/util/Array.kt | 9 + .../com/stardust/auojs/inrt/LogActivity.java | 4 +- 12 files changed, 221 insertions(+), 250 deletions(-) delete mode 100644 app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java create mode 100644 app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt rename autojs/src/main/java/com/stardust/autojs/core/console/{StardustConsole.java => ConsoleImpl.java} (89%) rename autojs/src/main/java/com/stardust/autojs/core/console/{GlobalStardustConsole.java => GlobalConsole.java} (90%) create mode 100644 common/src/main/java/com/stardust/util/Array.kt diff --git a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java index a58f5615..19c86bb3 100644 --- a/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java +++ b/app/src/main/java/org/autojs/autojs/autojs/AutoJs.java @@ -9,15 +9,13 @@ import android.os.Looper; import android.support.v4.content.LocalBroadcastManager; import com.stardust.app.GlobalAppContext; -import com.stardust.autojs.core.console.GlobalStardustConsole; +import com.stardust.autojs.core.console.GlobalConsole; import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.accessibility.AccessibilityConfig; import com.stardust.autojs.runtime.api.AppUtils; import com.stardust.autojs.runtime.exception.ScriptException; -import com.stardust.autojs.runtime.api.Console; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; -import org.autojs.autojs.App; import org.autojs.autojs.BuildConfig; import org.autojs.autojs.Pref; import org.autojs.autojs.R; @@ -28,10 +26,8 @@ import org.autojs.autojs.ui.floating.FullScreenFloatyWindow; import org.autojs.autojs.ui.floating.layoutinspector.LayoutBoundsFloatyWindow; import org.autojs.autojs.ui.floating.layoutinspector.LayoutHierarchyFloatyWindow; import org.autojs.autojs.ui.log.LogActivity_; -import org.autojs.autojs.ui.settings.SettingsActivity; import org.autojs.autojs.ui.settings.SettingsActivity_; -import com.stardust.concurrent.VolatileBox; import com.stardust.view.accessibility.AccessibilityService; import com.stardust.view.accessibility.LayoutInspector; import com.stardust.view.accessibility.NodeInfo; @@ -114,8 +110,8 @@ public class AutoJs extends com.stardust.autojs.AutoJs { } @Override - protected GlobalStardustConsole createGlobalConsole() { - return new GlobalStardustConsole(getUiHandler()) { + protected GlobalConsole createGlobalConsole() { + return new GlobalConsole(getUiHandler()) { @Override public String println(int level, CharSequence charSequence) { String log = super.println(level, charSequence); diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java deleted file mode 100644 index cd292491..00000000 --- a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.java +++ /dev/null @@ -1,179 +0,0 @@ -package org.autojs.autojs.ui.floating.layoutinspector; - -import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; -import android.widget.Toast; - -import org.autojs.autojs.R; - -import com.stardust.view.accessibility.NodeInfo; -import com.stardust.util.ClipboardUtil; -import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration; - -import java.lang.reflect.Field; -import java.util.Arrays; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import butterknife.Optional; - -/** - * Created by Stardust on 2017/3/10. - */ - -public class NodeInfoView extends RecyclerView { - - private static final String[] FIELD_NAMES = { - "id", - "idHex", - "fullId", - "bounds", - "depth", - "desc", - "className", - "packageName", - "text", - "drawingOrder", - "accessibilityFocused", - "checked", - "clickable", - "contextClickable", - "dismissable", - "editable", - "enabled", - "focusable", - "indexInParent", - "longClickable", - "row", - "rowCount", - "rowSpan", - "column", - "columnCount", - "columnSpan", - "selected", - "scrollable", - }; - private static final Field[] FIELDS = new Field[FIELD_NAMES.length]; - - static { - Arrays.sort(FIELD_NAMES); - for (int i = 0; i < FIELD_NAMES.length; i++) { - try { - FIELDS[i] = NodeInfo.class.getDeclaredField(FIELD_NAMES[i]); - } catch (NoSuchFieldException e) { - throw new RuntimeException(e); - } - } - } - - private String[][] mData = new String[FIELDS.length + 1][2]; - - public NodeInfoView(Context context) { - super(context); - init(); - } - - public NodeInfoView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(); - } - - public NodeInfoView(Context context, @Nullable AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - init(); - } - - public void setNodeInfo(NodeInfo nodeInfo) { - for (int i = 0; i < FIELDS.length; i++) { - try { - Object value = FIELDS[i].get(nodeInfo); - mData[i + 1][1] = value == null ? "" : value.toString(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - getAdapter().notifyDataSetChanged(); - } - - private void init() { - initData(); - setAdapter(new Adapter()); - setLayoutManager(new LinearLayoutManager(getContext())); - addItemDecoration(new HorizontalDividerItemDecoration.Builder(getContext()) - .color(0x1e000000) - .size(2) - .build()); - } - - private void initData() { - mData[0][0] = getResources().getString(R.string.text_attribute); - mData[0][1] = getResources().getString(R.string.text_value); - for (int i = 1; i < mData.length; i++) { - mData[i][0] = FIELD_NAMES[i - 1]; - mData[i][1] = ""; - } - } - - private class Adapter extends RecyclerView.Adapter { - - final int VIEW_TYPE_HEADER = 0; - final int VIEW_TYPE_ITEM = 1; - - - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - int layoutRes = viewType == VIEW_TYPE_HEADER ? R.layout.node_info_view_header : R.layout.node_info_view_item; - return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(layoutRes, parent, false)); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - holder.attrName.setText(mData[position][0]); - holder.attrValue.setText(mData[position][1]); - } - - @Override - public int getItemCount() { - return mData.length; - } - - @Override - public int getItemViewType(int position) { - return position == 0 ? VIEW_TYPE_HEADER : VIEW_TYPE_ITEM; - } - } - - class ViewHolder extends RecyclerView.ViewHolder { - - - @BindView(R.id.name) - TextView attrName; - - @BindView(R.id.value) - TextView attrValue; - - public ViewHolder(View itemView) { - super(itemView); - ButterKnife.bind(this, itemView); - } - - @Optional - @OnClick(R.id.item) - void onItemClick() { - int pos = getAdapterPosition(); - if (pos < 1 || pos >= mData.length) - return; - ClipboardUtil.setClip(getContext(), mData[pos][0] + " = " + mData[pos][1]); - Toast.makeText(getContext(), R.string.text_already_copy_to_clip, Toast.LENGTH_SHORT).show(); - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt new file mode 100644 index 00000000..191bf883 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/ui/floating/layoutinspector/NodeInfoView.kt @@ -0,0 +1,154 @@ +package org.autojs.autojs.ui.floating.layoutinspector + +import android.content.Context +import android.support.design.widget.Snackbar +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import butterknife.BindView +import com.stardust.util.ClipboardUtil +import com.stardust.util.sortedArrayOf +import com.stardust.view.accessibility.NodeInfo +import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration +import org.autojs.autojs.R +import java.lang.reflect.Field + +/** + * Created by Stardust on 2017/3/10. + */ + +class NodeInfoView : RecyclerView { + + private val mData = Array(FIELDS.size + 1) { Array(2) { "" } } + + constructor(context: Context) : super(context) { + init() + } + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + init() + } + + constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) { + init() + } + + fun setNodeInfo(nodeInfo: NodeInfo) { + for (i in FIELDS.indices) { + try { + val value = FIELDS[i].get(nodeInfo) + mData[i + 1][1] = value?.toString() ?: "" + } catch (e: Exception) { + throw RuntimeException(e) + } + + } + adapter!!.notifyDataSetChanged() + } + + private fun init() { + initData() + adapter = Adapter() + layoutManager = LinearLayoutManager(context) + addItemDecoration(HorizontalDividerItemDecoration.Builder(context) + .color(0x1e000000) + .size(2) + .build()) + } + + private fun initData() { + mData[0][0] = resources.getString(R.string.text_attribute) + mData[0][1] = resources.getString(R.string.text_value) + for (i in 1 until mData.size) { + mData[i][0] = FIELD_NAMES[i - 1] + mData[i][1] = "" + } + } + + private inner class Adapter : RecyclerView.Adapter() { + + internal val VIEW_TYPE_HEADER = 0 + internal val VIEW_TYPE_ITEM = 1 + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val layoutRes = if (viewType == VIEW_TYPE_HEADER) R.layout.node_info_view_header else R.layout.node_info_view_item + return ViewHolder(LayoutInflater.from(parent.context).inflate(layoutRes, parent, false)) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.attrName.text = mData[position][0] + holder.attrValue.text = mData[position][1] + } + + override fun getItemCount(): Int { + return mData.size + } + + override fun getItemViewType(position: Int): Int { + return if (position == 0) VIEW_TYPE_HEADER else VIEW_TYPE_ITEM + } + } + + internal inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + + @BindView(R.id.name) + val attrName: TextView = itemView.findViewById(R.id.name) + + val attrValue: TextView = itemView.findViewById(R.id.value) + + init { + itemView.setOnClickListener { + val pos = adapterPosition + if (pos < 1 || pos >= mData.size) + return@setOnClickListener + ClipboardUtil.setClip(context, mData[pos][0] + " = " + mData[pos][1]) + Snackbar.make(this@NodeInfoView, R.string.text_already_copy_to_clip, Snackbar.LENGTH_SHORT).show() + } + } + + } + + companion object { + + private val FIELD_NAMES = sortedArrayOf( + "id", + "idHex", + "fullId", + "bounds", + "depth", + "desc", + "className", + "packageName", + "text", + "drawingOrder", + "accessibilityFocused", + "checked", + "clickable", + "contextClickable", + "dismissable", + "editable", + "enabled", + "focusable", + "indexInParent", + "longClickable", + "row", + "rowCount", + "rowSpan", + "column", + "columnCount", + "columnSpan", + "selected", + "scrollable") + private val FIELDS = Array(FIELD_NAMES.size) { + val field = NodeInfo::class.java.getDeclaredField(FIELD_NAMES[it]) + field.isAccessible = true + field + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.java b/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.java index 1a3723a4..e87c45fc 100644 --- a/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/log/LogActivity.java @@ -5,7 +5,7 @@ import android.support.annotation.Nullable; import android.view.View; import com.stardust.autojs.core.console.ConsoleView; -import com.stardust.autojs.core.console.StardustConsole; +import com.stardust.autojs.core.console.ConsoleImpl; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; @@ -21,7 +21,7 @@ public class LogActivity extends BaseActivity { @ViewById(R.id.console) ConsoleView mConsoleView; - private StardustConsole mStardustConsole; + private ConsoleImpl mConsoleImpl; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -32,13 +32,13 @@ public class LogActivity extends BaseActivity { @AfterViews void setupViews() { setToolbarAsBack(getString(R.string.text_log)); - mStardustConsole = AutoJs.getInstance().getGlobalConsole(); - mConsoleView.setConsole(mStardustConsole); + mConsoleImpl = AutoJs.getInstance().getGlobalConsole(); + mConsoleView.setConsole(mConsoleImpl); mConsoleView.findViewById(R.id.input_container).setVisibility(View.GONE); } @Click(R.id.fab) void clearConsole() { - mStardustConsole.clear(); + mConsoleImpl.clear(); } } diff --git a/autojs/src/main/assets/modules/__engines__.js b/autojs/src/main/assets/modules/__engines__.js index ace4493b..af43025a 100644 --- a/autojs/src/main/assets/modules/__engines__.js +++ b/autojs/src/main/assets/modules/__engines__.js @@ -18,7 +18,7 @@ module.exports = function(__runtime__, scope){ } engines.myEngine = function(){ - var engine = Object.create(rtEngines.myEngine()); + var engine = rtEngines.myEngine(); if(!execArgv){ execArgv = {}; var iter = engine.getTag("execution.config").getArguments().entrySet().iterator(); @@ -26,8 +26,8 @@ module.exports = function(__runtime__, scope){ var entry = iter.next(); execArgv[entry.getKey()] = entry.getValue(); } + engine.execArgv = execArgv; } - engine.execArgv = execArgv; return engine; } diff --git a/autojs/src/main/java/com/stardust/autojs/AutoJs.java b/autojs/src/main/java/com/stardust/autojs/AutoJs.java index 21d59c11..8ccab8ad 100644 --- a/autojs/src/main/java/com/stardust/autojs/AutoJs.java +++ b/autojs/src/main/java/com/stardust/autojs/AutoJs.java @@ -11,8 +11,8 @@ import android.support.annotation.RequiresApi; import com.stardust.app.OnActivityResultDelegate; import com.stardust.app.SimpleActivityLifecycleCallbacks; import com.stardust.autojs.core.accessibility.AccessibilityBridge; -import com.stardust.autojs.core.console.GlobalStardustConsole; -import com.stardust.autojs.core.console.StardustConsole; +import com.stardust.autojs.core.console.GlobalConsole; +import com.stardust.autojs.core.console.ConsoleImpl; import com.stardust.autojs.core.image.capture.ScreenCaptureRequestActivity; import com.stardust.autojs.core.image.capture.ScreenCaptureRequester; import com.stardust.autojs.core.record.accessibility.AccessibilityActionRecorder; @@ -35,11 +35,7 @@ import com.stardust.view.accessibility.AccessibilityService; import com.stardust.view.accessibility.LayoutInspector; import org.mozilla.javascript.ContextFactory; -import org.mozilla.javascript.RhinoException; -import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.WrappedException; -import org.opencv.android.BaseLoaderCallback; -import org.opencv.android.OpenCVLoader; import java.io.File; @@ -60,7 +56,7 @@ public abstract class AutoJs { private final AccessibilityInfoProvider mAccessibilityInfoProvider; private final ScreenCaptureRequester mScreenCaptureRequester = new ScreenCaptureRequesterImpl(); private final ScriptEngineService mScriptEngineService; - private final GlobalStardustConsole mGlobalConsole; + private final GlobalConsole mGlobalConsole; protected AutoJs(final Application application) { @@ -81,8 +77,8 @@ public abstract class AutoJs { return new AppUtils(mContext); } - protected GlobalStardustConsole createGlobalConsole() { - return new GlobalStardustConsole(mUiHandler); + protected GlobalConsole createGlobalConsole() { + return new GlobalConsole(mUiHandler); } protected void init() { @@ -134,7 +130,7 @@ public abstract class AutoJs { protected ScriptRuntime createRuntime() { return new ScriptRuntime.Builder() - .setConsole(new StardustConsole(mUiHandler, mGlobalConsole)) + .setConsole(new ConsoleImpl(mUiHandler, mGlobalConsole)) .setScreenCaptureRequester(mScreenCaptureRequester) .setAccessibilityBridge(new AccessibilityBridgeImpl(mUiHandler)) .setUiHandler(mUiHandler) @@ -187,7 +183,7 @@ public abstract class AutoJs { return mLayoutInspector; } - public GlobalStardustConsole getGlobalConsole() { + public GlobalConsole getGlobalConsole() { return mGlobalConsole; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java index a6a91a51..54921452 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleFloaty.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.ContextWrapper; import android.support.annotation.Nullable; import android.view.ContextThemeWrapper; -import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.TextView; @@ -25,11 +24,11 @@ public class ConsoleFloaty extends ResizableExpandableFloaty.AbstractResizableEx private ContextWrapper mContextWrapper; private View mResizer, mMoveCursor; private TextView mTitleView; - private StardustConsole mConsole; + private ConsoleImpl mConsole; private CharSequence mTitle; private View mExpandedView; - public ConsoleFloaty(StardustConsole console) { + public ConsoleFloaty(ConsoleImpl console) { mConsole = console; setShouldRequestFocusWhenExpand(false); setInitialX(100); diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleImpl.java similarity index 89% rename from autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java rename to autojs/src/main/java/com/stardust/autojs/core/console/ConsoleImpl.java index 1f5a7e50..fe754359 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleImpl.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.util.Log; import android.view.WindowManager; import com.stardust.autojs.R; @@ -14,42 +13,37 @@ import com.stardust.autojs.runtime.api.AbstractConsole; import com.stardust.autojs.runtime.api.Console; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.autojs.util.FloatingPermission; -import com.stardust.concurrent.ConcurrentArrayList; import com.stardust.enhancedfloaty.FloatyService; import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow; import com.stardust.util.UiHandler; import com.stardust.util.ViewUtil; -import java.io.PrintWriter; -import java.io.StringWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.atomic.AtomicInteger; -import ezy.assist.compat.SettingsCompat; - /** * Created by Stardust on 2017/5/2. */ -public class StardustConsole extends AbstractConsole { +public class ConsoleImpl extends AbstractConsole { - public static class Log implements Comparable { + public static class LogEntry implements Comparable { public int id; public int level; public CharSequence content; public boolean newLine = false; - public Log(int id, int level, CharSequence content) { + public LogEntry(int id, int level, CharSequence content) { this.id = id; this.level = level; this.content = content; } - public Log(int id, int level, CharSequence content, boolean newLine) { + public LogEntry(int id, int level, CharSequence content, boolean newLine) { this.id = id; this.level = level; this.content = content; @@ -57,20 +51,20 @@ public class StardustConsole extends AbstractConsole { } @Override - public int compareTo(@NonNull Log o) { + public int compareTo(@NonNull LogEntry o) { return 0; } } public interface LogListener { - void onNewLog(Log log); + void onNewLog(LogEntry logEntry); void onLogClear(); } private final Object WINDOW_SHOW_LOCK = new Object(); private final Console mGlobalConsole; - private final ArrayList mLogs = new ArrayList<>(); + private final ArrayList mLogEntries = new ArrayList<>(); private AtomicInteger mIdCounter = new AtomicInteger(0); private ResizableExpandableFloatyWindow mFloatyWindow; private ConsoleFloaty mConsoleFloaty; @@ -81,11 +75,11 @@ public class StardustConsole extends AbstractConsole { private volatile boolean mShown = false; private int mX, mY; - public StardustConsole(UiHandler uiHandler) { + public ConsoleImpl(UiHandler uiHandler) { this(uiHandler, null); } - public StardustConsole(UiHandler uiHandler, Console globalConsole) { + public ConsoleImpl(UiHandler uiHandler, Console globalConsole) { mUiHandler = uiHandler; mConsoleFloaty = new ConsoleFloaty(this); mGlobalConsole = globalConsole; @@ -116,8 +110,8 @@ public class StardustConsole extends AbstractConsole { mLogListener = new WeakReference<>(logListener); } - public ArrayList getAllLogs() { - return mLogs; + public ArrayList getAllLogs() { + return mLogEntries; } public void printAllStackTrace(Throwable t) { @@ -130,15 +124,15 @@ public class StardustConsole extends AbstractConsole { @Override public String println(int level, CharSequence charSequence) { - Log log = new Log(mIdCounter.getAndIncrement(), level, charSequence, true); - synchronized (mLogs) { - mLogs.add(log); + LogEntry logEntry = new LogEntry(mIdCounter.getAndIncrement(), level, charSequence, true); + synchronized (mLogEntries) { + mLogEntries.add(logEntry); } if (mGlobalConsole != null) { mGlobalConsole.println(level, charSequence); } if (mLogListener != null && mLogListener.get() != null) { - mLogListener.get().onNewLog(log); + mLogListener.get().onNewLog(logEntry); } return null; } @@ -152,8 +146,8 @@ public class StardustConsole extends AbstractConsole { @Override public void clear() { - synchronized (mLogs) { - mLogs.clear(); + synchronized (mLogEntries) { + mLogEntries.clear(); } if (mLogListener != null && mLogListener.get() != null) { mLogListener.get().onLogClear(); diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleView.java b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleView.java index c889d942..1ebb42f1 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleView.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/ConsoleView.java @@ -30,7 +30,7 @@ import java.util.Map; *

* TODO: 优化为无锁形式 */ -public class ConsoleView extends FrameLayout implements StardustConsole.LogListener { +public class ConsoleView extends FrameLayout implements ConsoleImpl.LogListener { private static final Map ATTRS = new MapBuilder() .put(R.styleable.ConsoleView_color_verbose, Log.VERBOSE) @@ -52,13 +52,13 @@ public class ConsoleView extends FrameLayout implements StardustConsole.LogListe private static final int REFRESH_INTERVAL = 100; private SparseArray mColors = COLORS.clone(); - private StardustConsole mConsole; + private ConsoleImpl mConsole; private RecyclerView mLogListRecyclerView; private EditText mEditText; private ResizableExpandableFloatyWindow mWindow; private LinearLayout mInputContainer; private boolean mShouldStopRefresh = false; - private ArrayList mLogs = new ArrayList<>(); + private ArrayList mLogEntries = new ArrayList<>(); public ConsoleView(Context context) { super(context); @@ -128,13 +128,13 @@ public class ConsoleView extends FrameLayout implements StardustConsole.LogListe mInputContainer.setOnClickListener(listener); } - public void setConsole(StardustConsole console) { + public void setConsole(ConsoleImpl console) { mConsole = console; mConsole.setConsoleView(this); } @Override - public void onNewLog(StardustConsole.Log log) { + public void onNewLog(ConsoleImpl.LogEntry logEntry) { } @@ -163,7 +163,7 @@ public class ConsoleView extends FrameLayout implements StardustConsole.LogListe @Override public void onLogClear() { post(() -> { - mLogs.clear(); + mLogEntries.clear(); mLogListRecyclerView.getAdapter().notifyDataSetChanged(); }); } @@ -171,10 +171,10 @@ public class ConsoleView extends FrameLayout implements StardustConsole.LogListe private void refreshLog() { if (mConsole == null) return; - int oldSize = mLogs.size(); - ArrayList logs = mConsole.getAllLogs(); + int oldSize = mLogEntries.size(); + ArrayList logEntries = mConsole.getAllLogs(); synchronized (mConsole.getAllLogs()) { - final int size = logs.size(); + final int size = logEntries.size(); if (size == 0) { return; } @@ -182,10 +182,10 @@ public class ConsoleView extends FrameLayout implements StardustConsole.LogListe return; } if (oldSize == 0) { - mLogs.addAll(logs); + mLogEntries.addAll(logEntries); } else { for (int i = oldSize; i < size; i++) { - mLogs.add(logs.get(i)); + mLogEntries.add(logEntries.get(i)); } } mLogListRecyclerView.getAdapter().notifyItemRangeInserted(oldSize, size - 1); @@ -224,14 +224,14 @@ public class ConsoleView extends FrameLayout implements StardustConsole.LogListe @Override public void onBindViewHolder(ViewHolder holder, int position) { - StardustConsole.Log log = mLogs.get(position); - holder.textView.setText(log.content); - holder.textView.setTextColor(mColors.get(log.level)); + ConsoleImpl.LogEntry logEntry = mLogEntries.get(position); + holder.textView.setText(logEntry.content); + holder.textView.setTextColor(mColors.get(logEntry.level)); } @Override public int getItemCount() { - return mLogs.size(); + return mLogEntries.size(); } } } diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java similarity index 90% rename from autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java rename to autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java index 2b47a308..77edbf6f 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/console/GlobalStardustConsole.java +++ b/autojs/src/main/java/com/stardust/autojs/core/console/GlobalConsole.java @@ -15,11 +15,12 @@ import java.util.Locale; * Created by Stardust on 2017/10/22. */ -public class GlobalStardustConsole extends StardustConsole { +public class GlobalConsole extends ConsoleImpl { + private static final String LOG_tAG = "GlobalConsole"; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault()); - private static final Logger LOGGER = Logger.getLogger(GlobalStardustConsole.class); + private static final Logger LOGGER = Logger.getLogger(GlobalConsole.class); - public GlobalStardustConsole(UiHandler uiHandler) { + public GlobalConsole(UiHandler uiHandler) { super(uiHandler); } @@ -28,6 +29,7 @@ public class GlobalStardustConsole extends StardustConsole { String log = String.format(Locale.getDefault(), "%s/%s: %s", DATE_FORMAT.format(new Date()), getLevelChar(level), charSequence.toString()); LOGGER.log(toLog4jLevel(level), log); + android.util.Log.d(LOG_tAG, log); super.println(level, log); return log; } diff --git a/common/src/main/java/com/stardust/util/Array.kt b/common/src/main/java/com/stardust/util/Array.kt new file mode 100644 index 00000000..261579f8 --- /dev/null +++ b/common/src/main/java/com/stardust/util/Array.kt @@ -0,0 +1,9 @@ +package com.stardust.util + +import java.util.* + +inline fun sortedArrayOf(vararg elements: T): Array { + val a = arrayOf(*elements) + Arrays.sort(a) + return a +} \ No newline at end of file diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java index 55679ea3..901921e9 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/LogActivity.java @@ -11,7 +11,7 @@ import android.view.View; import com.stardust.auojs.inrt.autojs.AutoJs; import com.stardust.auojs.inrt.launch.GlobalProjectLauncher; import com.stardust.autojs.core.console.ConsoleView; -import com.stardust.autojs.core.console.StardustConsole; +import com.stardust.autojs.core.console.ConsoleImpl; public class LogActivity extends AppCompatActivity { @@ -32,7 +32,7 @@ public class LogActivity extends AppCompatActivity { Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); ConsoleView consoleView = findViewById(R.id.console); - consoleView.setConsole((StardustConsole) AutoJs.getInstance().getGlobalConsole()); + consoleView.setConsole((ConsoleImpl) AutoJs.getInstance().getGlobalConsole()); consoleView.findViewById(R.id.input_container).setVisibility(View.GONE); }