优化 explorer view记住文件夹位置

修复 explorer view不能设置root和current的问题
This commit is contained in:
hyb1996 2018-11-06 10:50:34 +08:00
parent 67614b8016
commit f35825ccbd
4 changed files with 36 additions and 7 deletions

View File

@ -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();

View File

@ -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<ScriptFile> 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() {
}

View File

@ -174,7 +174,7 @@ public class FileChooseListView extends ExplorerView {
@OnClick(R.id.item)
void onItemClick() {
enterChildPage(mExplorerPage);
enterDirectChildPage(mExplorerPage);
}
@OnCheckedChanged(R.id.checkbox)

View File

@ -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();