public void setActiveOrAdd(@NonNull Crumb crumb, boolean forceRecreate) { if (forceRecreate || !setActive(crumb)) { clearCrumbs(); final List<File> newPathSet = new ArrayList<>(); newPathSet.add(0, crumb.getFile()); File p = crumb.getFile(); if (!isStorageOrSd(p)) { while ((p = p.getParent()) != null) { newPathSet.add(0, p); if (isStorageOrSd(p)) break; } } for (int index = 0; index < newPathSet.size(); index++) { final File fi = newPathSet.get(index); crumb = new Crumb(fi); // Restore scroll positions saved before clearing if (mOldCrumbs != null) { for (Iterator<Crumb> iterator = mOldCrumbs.iterator(); iterator.hasNext(); ) { Crumb old = iterator.next(); if (old.equals(crumb)) { crumb.setScrollPosition(old.getScrollPosition()); crumb.setScrollOffset(old.getScrollOffset()); crumb.setQuery(old.getQuery()); iterator.remove(); // minimize number of linear passes by removing un-used crumbs from // history break; } } } addCrumb(crumb, true); } // History no longer needed mOldCrumbs = null; } else { if (isStorageOrSd(crumb.getFile())) { Crumb c = mCrumbs.get(0); while (c != null && !isStorageOrSd(c.getFile())) { removeCrumbAt(0); if (mCrumbs.size() > 0) c = mCrumbs.get(0); } updateIndices(); requestLayout(); } } }
public static boolean isStorageOrSd(File fi) { if (fi == null) return false; else if (fi.getPluginPackage() != null) return File.isRootPluginFolder(fi.getUri(), ((PluginFileImpl) fi).getPlugin()); return fi.isSDCardDirectory() || fi.isStorageDirectory() || (fi.isDocumentTreeFile() && fi.getParent() == null); }
public boolean trim(String str, boolean dir, boolean archive) { if (!dir && !archive) return false; int index = -1; for (int i = mCrumbs.size() - 1; i >= 0; i--) { File fi = mCrumbs.get(i).getFile(); if (fi.getUri() != null && fi.getUri().toString().equals(str)) { index = i; break; } } boolean removedActive = index >= mActive; if (index > -1) { while (index <= mCrumbs.size() - 1) removeCrumbAt(index); if (mChildFrame.getChildCount() > 0) { int lastIndex = mCrumbs.size() - 1; invalidateActivated(mChildFrame.getChildAt(lastIndex), mActive == lastIndex, false, false); } } return removedActive || mCrumbs.size() == 0; }
public String getTitle(Context context) { if (mFile.getPluginPackage() != null) { if (PluginFileImpl.isRootPluginFolder( mFile.getUri(), ((PluginFileImpl) mFile).getPlugin())) { final String pluginAcc = mFile.getPluginAccount(); if (pluginAcc != null) { final String accDisplay = PluginDataProvider.getAccountDisplay(context, mFile.getPluginPackage(), pluginAcc); if (accDisplay == null || accDisplay.trim().isEmpty()) return pluginAcc; return accDisplay; } } } String title = mFile.getDisplay(context); if (title == null) title = mFile.getName(); else if (title.equals(context.getString(R.string.storage))) title = context.getString(R.string.internal_storage); return title; }
public boolean trim(File file) { return trim(file.getUri().toString(), file.isDirectory(), file.isViewableArchive(getContext())); }