From f35825ccbdb26223e18ee0390fa47548d1cbbde6 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Tue, 6 Nov 2018 10:50:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20explorer=20view=E8=AE=B0?= =?UTF-8?q?=E4=BD=8F=E6=96=87=E4=BB=B6=E5=A4=B9=E4=BD=8D=E7=BD=AE=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20explorer=20view=E4=B8=8D=E8=83=BD=E8=AE=BE?= =?UTF-8?q?=E7=BD=AEroot=E5=92=8Ccurrent=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/ScriptWidgetSettingsActivity.java | 2 +- .../autojs/ui/explorer/ExplorerView.java | 32 ++++++++++++++++--- .../ui/filechooser/FileChooseListView.java | 2 +- .../stardust/autojs/runtime/api/Dialogs.java | 7 ++++ 4 files changed, 36 insertions(+), 7 deletions(-) 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();