use of com.amaze.filemanager.ui.fragments.data.MainFragmentViewModel in project AmazeFileManager by TeamAmaze.
the class MainFragment method loadlist.
/**
* This loads a path into the MainFragment.
*
* @param providedPath the path to be loaded
* @param back if we're coming back from any directory and want the scroll to be restored
* @param providedOpenMode the mode in which the directory should be opened
*/
public void loadlist(final String providedPath, final boolean back, final OpenMode providedOpenMode) {
if (mainFragmentViewModel == null) {
Log.w(getClass().getSimpleName(), "Viewmodel not available to load the data");
return;
}
if (getMainActivity() != null && getMainActivity().getActionModeHelper() != null && getMainActivity().getActionModeHelper().getActionMode() != null) {
getMainActivity().getActionModeHelper().getActionMode().finish();
}
mSwipeRefreshLayout.setRefreshing(true);
if (loadFilesListTask != null && loadFilesListTask.getStatus() == AsyncTask.Status.RUNNING) {
Log.w(getClass().getSimpleName(), "Existing load list task running, cancel current");
loadFilesListTask.cancel(true);
}
OpenMode openMode = providedOpenMode;
String actualPath = FileProperties.remapPathForApi30OrAbove(providedPath, false);
if (!providedPath.equals(actualPath) && SDK_INT >= Q) {
openMode = loadPathInQ(actualPath, providedPath, providedOpenMode);
} else // OpenMode.DOCUMENT_FILE
if (actualPath.startsWith("/") && OpenMode.DOCUMENT_FILE.equals(openMode)) {
openMode = OpenMode.FILE;
}
loadFilesListTask = new LoadFilesListTask(getActivity(), actualPath, this, openMode, getBoolean(PREFERENCE_SHOW_THUMB), getBoolean(PREFERENCE_SHOW_HIDDENFILES), (data) -> {
mSwipeRefreshLayout.setRefreshing(false);
if (data != null && data.second != null) {
boolean isPathLayoutGrid = DataUtils.getInstance().getListOrGridForPath(providedPath, DataUtils.LIST) == DataUtils.GRID;
setListElements(data.second, back, providedPath, data.first, false, isPathLayoutGrid);
} else {
Log.w(getClass().getSimpleName(), "Load list operation cancelled");
}
});
loadFilesListTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
use of com.amaze.filemanager.ui.fragments.data.MainFragmentViewModel in project AmazeFileManager by TeamAmaze.
the class MainFragment method onViewCreated.
@Override
@SuppressWarnings("PMD.NPathComplexity")
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mainFragmentViewModel = new ViewModelProvider(this).get(MainFragmentViewModel.class);
listView = rootView.findViewById(R.id.listView);
mToolbarContainer = getMainActivity().getAppbar().getAppbarLayout();
fastScroller = rootView.findViewById(R.id.fastscroll);
fastScroller.setPressedHandleColor(mainFragmentViewModel.getAccentColor());
View.OnTouchListener onTouchListener = (view1, motionEvent) -> {
if (adapter != null && mainFragmentViewModel.getStopAnims()) {
stopAnimation();
mainFragmentViewModel.setStopAnims(false);
}
return false;
};
listView.setOnTouchListener(onTouchListener);
// listView.setOnDragListener(new MainFragmentDragListener());
mToolbarContainer.setOnTouchListener(onTouchListener);
mSwipeRefreshLayout = rootView.findViewById(R.id.activity_main_swipe_refresh_layout);
mSwipeRefreshLayout.setOnRefreshListener(() -> loadlist((mainFragmentViewModel.getCurrentPath()), false, mainFragmentViewModel.getOpenMode()));
// String itemsstring = res.getString(R.string.items);// TODO: 23/5/2017 use or delete
mToolbarContainer.setBackgroundColor(MainActivity.currentTab == 1 ? mainFragmentViewModel.getPrimaryTwoColor() : mainFragmentViewModel.getPrimaryColor());
// listView.setPadding(listView.getPaddingLeft(), paddingTop, listView.getPaddingRight(),
// listView.getPaddingBottom());
setHasOptionsMenu(false);
initNoFileLayout();
HybridFile f = new HybridFile(OpenMode.UNKNOWN, mainFragmentViewModel.getCurrentPath());
f.generateMode(getActivity());
getMainActivity().getAppbar().getBottomBar().setClickListener();
if (utilsProvider.getAppTheme().equals(AppTheme.LIGHT) && !mainFragmentViewModel.isList()) {
listView.setBackgroundColor(Utils.getColor(getContext(), R.color.grid_background_light));
} else {
listView.setBackgroundDrawable(null);
}
listView.setHasFixedSize(true);
if (mainFragmentViewModel.isList()) {
mLayoutManager = new CustomScrollLinearLayoutManager(getContext());
listView.setLayoutManager(mLayoutManager);
} else {
if (mainFragmentViewModel.getColumns() == -1 || mainFragmentViewModel.getColumns() == 0)
mLayoutManagerGrid = new CustomScrollGridLayoutManager(getActivity(), 3);
else
mLayoutManagerGrid = new CustomScrollGridLayoutManager(getActivity(), mainFragmentViewModel.getColumns());
setGridLayoutSpanSizeLookup(mLayoutManagerGrid);
listView.setLayoutManager(mLayoutManagerGrid);
}
// use a linear layout manager
// View footerView = getActivity().getLayoutInflater().inflate(R.layout.divider, null);// TODO:
// 23/5/2017 use or delete
dividerItemDecoration = new DividerItemDecoration(getActivity(), false, getBoolean(PREFERENCE_SHOW_DIVIDERS));
listView.addItemDecoration(dividerItemDecoration);
mSwipeRefreshLayout.setColorSchemeColors(mainFragmentViewModel.getAccentColor());
DefaultItemAnimator animator = new DefaultItemAnimator();
listView.setItemAnimator(animator);
mToolbarContainer.getViewTreeObserver().addOnGlobalLayoutListener(this);
loadViews();
}
use of com.amaze.filemanager.ui.fragments.data.MainFragmentViewModel in project AmazeFileManager by TeamAmaze.
the class LoadFilesListTask method doInBackground.
@Override
@Nullable
protected Pair<OpenMode, ArrayList<LayoutElementParcelable>> doInBackground(Void... p) {
final MainFragment mainFragment = this.mainFragmentReference.get();
final Context context = this.context.get();
if (mainFragment == null || context == null || mainFragment.getMainFragmentViewModel() == null) {
cancel(true);
return null;
}
HybridFile hFile = null;
if (OpenMode.UNKNOWN.equals(openmode) || OpenMode.CUSTOM.equals(openmode)) {
hFile = new HybridFile(openmode, path);
hFile.generateMode(mainFragment.getActivity());
openmode = hFile.getMode();
if (hFile.isSmb()) {
mainFragment.getMainFragmentViewModel().setSmbPath(path);
}
}
if (isCancelled())
return null;
mainFragment.getMainFragmentViewModel().setFolderCount(0);
mainFragment.getMainFragmentViewModel().setFileCount(0);
final ArrayList<LayoutElementParcelable> list;
switch(openmode) {
case SMB:
if (hFile == null) {
hFile = new HybridFile(OpenMode.SMB, path);
}
if (!hFile.getPath().endsWith("/")) {
hFile.setPath(hFile.getPath() + "/");
}
try {
SmbFile[] smbFile = hFile.getSmbFile(5000).listFiles();
list = mainFragment.addToSmb(smbFile, path, showHiddenFiles);
openmode = OpenMode.SMB;
} catch (SmbAuthException e) {
if (!e.getMessage().toLowerCase().contains("denied")) {
mainFragment.reauthenticateSmb();
}
e.printStackTrace();
return null;
} catch (SmbException | NullPointerException e) {
Log.w(getClass().getSimpleName(), "Failed to load smb files for path: " + path, e);
mainFragment.reauthenticateSmb();
return null;
}
break;
case SFTP:
HybridFile sftpHFile = new HybridFile(OpenMode.SFTP, path);
list = new ArrayList();
sftpHFile.forEachChildrenFile(context, false, file -> {
if (!(dataUtils.isFileHidden(file.getPath()) || file.isHidden() && !showHiddenFiles)) {
LayoutElementParcelable elem = createListParcelables(file);
if (elem != null) {
list.add(elem);
}
}
});
break;
case CUSTOM:
switch(Integer.parseInt(path)) {
case 0:
list = listImages();
break;
case 1:
list = listVideos();
break;
case 2:
list = listaudio();
break;
case 3:
list = listDocs();
break;
case 4:
list = listApks();
break;
case 5:
list = listRecent();
break;
case 6:
list = listRecentFiles();
break;
default:
throw new IllegalStateException();
}
break;
case OTG:
list = new ArrayList<>();
listOtg(path, file -> {
LayoutElementParcelable elem = createListParcelables(file);
if (elem != null)
list.add(elem);
});
openmode = OpenMode.OTG;
break;
case DOCUMENT_FILE:
list = new ArrayList<>();
listDocumentFiles(file -> {
LayoutElementParcelable elem = createListParcelables(file);
if (elem != null)
list.add(elem);
});
openmode = OpenMode.DOCUMENT_FILE;
break;
case DROPBOX:
case BOX:
case GDRIVE:
case ONEDRIVE:
CloudStorage cloudStorage = dataUtils.getAccount(openmode);
list = new ArrayList<>();
try {
listCloud(path, cloudStorage, openmode, file -> {
LayoutElementParcelable elem = createListParcelables(file);
if (elem != null)
list.add(elem);
});
} catch (CloudPluginException e) {
e.printStackTrace();
AppConfig.toast(context, context.getResources().getString(R.string.failed_no_connection));
return new Pair<>(openmode, list);
}
break;
default:
// we're neither in OTG not in SMB, load the list based on root/general filesystem
list = new ArrayList<>();
final OpenMode[] currentOpenMode = new OpenMode[1];
ListFilesCommand.INSTANCE.listFiles(path, mainFragment.getMainActivity().isRootExplorer(), showHiddenFiles, mode -> {
currentOpenMode[0] = mode;
return null;
}, hybridFileParcelable -> {
LayoutElementParcelable elem = createListParcelables(hybridFileParcelable);
if (elem != null)
list.add(elem);
return null;
});
if (null != currentOpenMode[0]) {
openmode = currentOpenMode[0];
}
break;
}
if (list != null && !(openmode == OpenMode.CUSTOM && ((path).equals("5") || (path).equals("6")))) {
int t = SortHandler.getSortType(context, path);
int sortby;
int asc;
if (t <= 3) {
sortby = t;
asc = 1;
} else {
asc = -1;
sortby = t - 4;
}
MainFragmentViewModel viewModel = mainFragment.getMainFragmentViewModel();
if (viewModel != null) {
Collections.sort(list, new FileListSorter(viewModel.getDsort(), sortby, asc));
} else {
Log.e(TAG, "MainFragmentViewModel is null, this is a bug");
}
}
return new Pair<>(openmode, list);
}
Aggregations