diff --git a/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java b/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java index bd6276cb..0cc2ebc2 100644 --- a/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java +++ b/app/src/main/java/org/autojs/autojs/external/widget/ScriptWidgetSettingsActivity.java @@ -43,7 +43,7 @@ public class ScriptWidgetSettingsActivity extends BaseActivity { private void initScriptListRecyclerView() { mExplorer = new Explorer(new ExplorerFileProvider(Scripts.FILE_FILTER), 0); - ExplorerView explorerView = (ExplorerView) findViewById(R.id.script_list); + ExplorerView explorerView = findViewById(R.id.script_list); explorerView.setExplorer(mExplorer, ExplorerDirPage.createRoot(Environment.getExternalStorageDirectory())); explorerView.setOnItemClickListener((view, file) -> { mSelectedScriptFilePath = file.getPath(); 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 b7c183d6..5e4d2060 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 @@ -25,6 +25,7 @@ import com.stardust.pio.PFiles; import org.autojs.autojs.R; import org.autojs.autojs.model.explorer.Explorer; import org.autojs.autojs.model.explorer.ExplorerChangeEvent; +import org.autojs.autojs.model.explorer.ExplorerDirPage; import org.autojs.autojs.model.explorer.ExplorerFileItem; import org.autojs.autojs.model.explorer.ExplorerItem; import org.autojs.autojs.model.explorer.ExplorerPage; @@ -123,13 +124,15 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR } } - public void enterChildPage(ExplorerPage childItemGroup) { - mCurrentPageState.position = ((LinearLayoutManager) mExplorerItemListView.getLayoutManager()).findFirstVisibleItemPosition(); + protected void enterDirectChildPage(ExplorerPage childItemGroup) { + mCurrentPageState.scrollY = ((LinearLayoutManager) mExplorerItemListView.getLayoutManager()).findLastCompletelyVisibleItemPosition(); mPageStateHistory.push(mCurrentPageState); setCurrentPageState(new ExplorerPageState(childItemGroup)); loadItemList(); } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { mOnItemClickListener = onItemClickListener; } @@ -160,6 +163,25 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR enterChildPage(currentPage); } + public void enterChildPage(ExplorerPage childPage) { + ScriptFile root = mCurrentPageState.page.toScriptFile(); + ScriptFile dir = childPage.toScriptFile(); + Stack dirs = new Stack<>(); + while (!dir.equals(root)) { + dir = dir.getParentFile(); + dirs.push(dir); + } + ExplorerDirPage parent = null; + while (!dirs.empty()) { + dir = dirs.pop(); + ExplorerDirPage dirPage = new ExplorerDirPage(dir, parent); + mPageStateHistory.push(new ExplorerPageState(dirPage)); + parent = dirPage; + } + setCurrentPageState(new ExplorerPageState(childPage)); + loadItemList(); + } + public void setOnItemOperatedListener(OnItemOperatedListener onItemOperatedListener) { mOnItemOperatedListener = onItemOperatedListener; } @@ -237,7 +259,7 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR mExplorerAdapter.notifyDataSetChanged(); setRefreshing(false); post(() -> - mExplorerItemListView.scrollToPosition(mCurrentPageState.position) + mExplorerItemListView.scrollToPosition(mCurrentPageState.scrollY) ); }); } @@ -589,7 +611,7 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR @OnClick(R.id.item) void onItemClick() { - enterChildPage(mExplorerPage); + enterDirectChildPage(mExplorerPage); } @OnClick(R.id.more) @@ -697,7 +719,7 @@ public class ExplorerView extends ThemeColorSwipeRefreshLayout implements SwipeR boolean filesCollapsed; - int position; + int scrollY; ExplorerPageState() { } diff --git a/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooseListView.java b/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooseListView.java index 47f1d69d..92d252e8 100644 --- a/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooseListView.java +++ b/app/src/main/java/org/autojs/autojs/ui/filechooser/FileChooseListView.java @@ -174,7 +174,7 @@ public class FileChooseListView extends ExplorerView { @OnClick(R.id.item) void onItemClick() { - enterChildPage(mExplorerPage); + enterDirectChildPage(mExplorerPage); } @OnCheckedChanged(R.id.checkbox) diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java index 166e701e..a6ac2813 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Dialogs.java @@ -119,6 +119,13 @@ public class Dialogs { .showAndGet(); } + @ScriptInterface + public Object selectFile(String title, String prefill, Object callback) { + return ((BlockedMaterialDialog.Builder) dialogBuilder(callback) + .input(null, prefill, true) + .title(title)) + .showAndGet(); + } private BlockedMaterialDialog.Builder dialogBuilder(Object callback) { Context context = mRuntime.app.getCurrentActivity();