diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/FunctionsKeyboardView.java b/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/FunctionsKeyboardView.java index 14bf33ee..a1a9d70a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/FunctionsKeyboardView.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/keyboard/FunctionsKeyboardView.java @@ -27,6 +27,7 @@ import org.autojs.autojs.model.indices.Module; import org.autojs.autojs.model.indices.Modules; import org.autojs.autojs.model.indices.Property; import org.autojs.autojs.ui.widget.GridDividerDecoration; +import org.autojs.autojs.workground.WrapContentGridLayoutManger; import java.util.ArrayList; import java.util.HashMap; @@ -98,10 +99,11 @@ public class FunctionsKeyboardView extends FrameLayout { } private void initPropertiesView() { - GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), SPAN_COUNT); - mPropertiesView.setLayoutManager(gridLayoutManager); + WrapContentGridLayoutManger manager = new WrapContentGridLayoutManger(getContext(), 2); + manager.setDebugInfo("FunctionsKeyboardView"); + mPropertiesView.setLayoutManager(manager); mPropertiesView.setAdapter(new PropertiesAdapter()); - gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { diff --git a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java index a91384ff..900fefa6 100644 --- a/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java +++ b/app/src/main/java/org/autojs/autojs/ui/explorer/ExplorerView.java @@ -42,6 +42,7 @@ import org.autojs.autojs.ui.viewmodel.ExplorerItemList; import org.autojs.autojs.ui.widget.BindableViewHolder; import org.autojs.autojs.theme.widget.ThemeColorSwipeRefreshLayout; +import org.autojs.autojs.workground.WrapContentGridLayoutManger; import org.greenrobot.eventbus.Subscribe; import java.util.Stack; @@ -194,7 +195,8 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR private void initExplorerItemListView() { mExplorerItemListView.setAdapter(mExplorerAdapter); - GridLayoutManager manager = new GridLayoutManager(getContext(), 2); + WrapContentGridLayoutManger manager = new WrapContentGridLayoutManger(getContext(), 2); + manager.setDebugInfo("ExplorerView"); manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { @@ -311,7 +313,7 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR sort(ExplorerItemList.SORT_TYPE_SIZE, mDirSortMenuShowing); break; case R.id.reset: - // WorkspaceFileProvider.resetSample(mSelectedItem.toScriptFile()); + // WorkspaceFileProvider.resetSample(mSelectedItem.toScriptFile()); default: return false; } @@ -494,7 +496,7 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR if (!mExplorerItem.canRename()) { menu.removeItem(R.id.rename); } - if(mExplorerItem instanceof ExplorerSampleItem){ + if (mExplorerItem instanceof ExplorerSampleItem) { } popupMenu.setOnMenuItemClickListener(ExplorerView.this); diff --git a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java index fb0521ee..9bb35a9a 100644 --- a/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java +++ b/app/src/main/java/org/autojs/autojs/ui/shortcut/ShortcutIconSelectActivity.java @@ -25,6 +25,7 @@ import org.autojs.autojs.ui.BaseActivity; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; +import org.autojs.autojs.workground.WrapContentGridLayoutManger; import java.util.ArrayList; import java.util.List; @@ -57,7 +58,9 @@ public class ShortcutIconSelectActivity extends BaseActivity { private void setupApps() { mApps.setAdapter(new AppsAdapter()); - mApps.setLayoutManager(new GridLayoutManager(this, 5)); + WrapContentGridLayoutManger manager = new WrapContentGridLayoutManger(this, 2); + manager.setDebugInfo("IconSelectView"); + mApps.setLayoutManager(manager); loadApps(); } diff --git a/app/src/main/java/org/autojs/autojs/workground/WrapContentGridLayoutManger.java b/app/src/main/java/org/autojs/autojs/workground/WrapContentGridLayoutManger.java new file mode 100644 index 00000000..a8045f8d --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/workground/WrapContentGridLayoutManger.java @@ -0,0 +1,39 @@ +package org.autojs.autojs.workground; + +import android.content.Context; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.util.Log; + +import com.tencent.bugly.crashreport.BuglyLog; + +public class WrapContentGridLayoutManger extends GridLayoutManager { + + private String mDebugInfo; + + public WrapContentGridLayoutManger(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public WrapContentGridLayoutManger(Context context, int spanCount) { + super(context, spanCount); + } + + public WrapContentGridLayoutManger(Context context, int spanCount, int orientation, boolean reverseLayout) { + super(context, spanCount, orientation, reverseLayout); + } + + public void setDebugInfo(String debugInfo) { + mDebugInfo = debugInfo; + } + + @Override + public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { + try { + super.onLayoutChildren(recycler, state); + } catch (IndexOutOfBoundsException e) { + BuglyLog.e("GridLayoutManager", "Android bug: debug info = " + mDebugInfo, e); + } + } +} diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsGridView.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsGridView.java index 7db08ec4..48162f06 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsGridView.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsGridView.java @@ -18,6 +18,15 @@ public class JsGridView extends JsListView { @Override protected void init() { super.init(); - setLayoutManager(new GridLayoutManager(getContext(), 1)); + setLayoutManager(new GridLayoutManager(getContext(), 1){ + @Override + public void onLayoutChildren(Recycler recycler, State state) { + try { + super.onLayoutChildren(recycler, state); + } catch (IndexOutOfBoundsException e) { + getScriptRuntime().console.error(e); + } + } + }); } } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java index 633a10e4..d4c73f5e 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/widget/JsListView.java @@ -54,6 +54,9 @@ public class JsListView extends RecyclerView { setLayoutManager(new WrapContentLinearLayoutManager(getContext())); } + protected ScriptRuntime getScriptRuntime() { + return mScriptRuntime; + } public void setOnItemTouchListener(OnItemTouchListener onItemTouchListener) { mOnItemTouchListener = onItemTouchListener;