diff --git a/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java b/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java index 82efc27774..7a37554a7a 100644 --- a/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java +++ b/app/src/main/java/net/gsantner/markor/activity/DocumentActivity.java @@ -81,14 +81,20 @@ public static void launch(Activity activity, File path, Boolean doPreview, Inten } public static void handleFileClick(Activity activity, File file, Integer lineNumber) { - if (activity != null && file != null) { - if (FormatRegistry.isFileSupported(file)) { + if (activity == null || file == null) { + return; + } + + if (file.isDirectory()) { + if (file.canRead()) { launch(activity, file, null, null, lineNumber); - } else if (GsFileUtils.getFilenameExtension(file).equals(".apk")) { - GsContextUtils.instance.requestApkInstallation(activity, file); - } else { - askUserIfWantsToOpenFileInThisApp(activity, file); } + } else if (FormatRegistry.isFileSupported(file) && GsFileUtils.canCreate(file)) { + launch(activity, file, null, null, lineNumber); + } else if (GsFileUtils.getFilenameExtension(file).equals(".apk")) { + GsContextUtils.instance.requestApkInstallation(activity, file); + } else { + askUserIfWantsToOpenFileInThisApp(activity, file); } } diff --git a/app/src/main/java/net/gsantner/markor/activity/DocumentShareIntoFragment.java b/app/src/main/java/net/gsantner/markor/activity/DocumentShareIntoFragment.java index 2bfa2ac164..3c8a9454df 100644 --- a/app/src/main/java/net/gsantner/markor/activity/DocumentShareIntoFragment.java +++ b/app/src/main/java/net/gsantner/markor/activity/DocumentShareIntoFragment.java @@ -54,12 +54,12 @@ public class DocumentShareIntoFragment extends MarkorBaseFragment { public static final String TEXT_TOKEN = "{{text}}"; public static DocumentShareIntoFragment newInstance(Intent intent) { - DocumentShareIntoFragment f = new DocumentShareIntoFragment(); - Bundle args = new Bundle(); + final DocumentShareIntoFragment f = new DocumentShareIntoFragment(); + final Bundle args = new Bundle(); final String sharedText = formatLink(intent.getStringExtra(Intent.EXTRA_SUBJECT), intent.getStringExtra(Intent.EXTRA_TEXT)); - Object intentFile = intent.getSerializableExtra(Document.EXTRA_PATH); + final Object intentFile = intent.getSerializableExtra(Document.EXTRA_PATH); if (intentFile instanceof File && ((File) intentFile).isDirectory()) { f.workingDir = (File) intentFile; } @@ -219,12 +219,12 @@ private void appendToExistingDocumentAndClose(final File file, final boolean sho Toast.makeText(context, R.string.error_could_not_open_file, Toast.LENGTH_LONG).show(); } + _appSettings.addRecentDocument(file); if (showEditor) { showInDocumentActivity(document); + } else { + context.finish(); } - _appSettings.addRecentDocument(file); - - context.finish(); } private String formatShare(final String shared) { @@ -264,6 +264,7 @@ private void showAppendDialog(int keyId) { break; } } + MarkorFileBrowserFactory.showFileDialog(new GsFileBrowserOptions.SelectionListenerAdapter() { @Override public void onFsViewerConfig(GsFileBrowserOptions.Options dopt) { @@ -280,23 +281,39 @@ public void onFsViewerSelected(String request, File file, final Integer lineNumb } - private void createNewDocument() { - MarkorFileBrowserFactory.showFolderDialog(new GsFileBrowserOptions.SelectionListenerAdapter() { + private void createSelectNewDocument() { + MarkorFileBrowserFactory.showFileDialog(new GsFileBrowserOptions.SelectionListenerAdapter() { + GsFileBrowserOptions.Options _dopt = null; + @Override public void onFsViewerConfig(GsFileBrowserOptions.Options dopt) { - dopt.rootFolder = (workingDir == null) ? _appSettings.getNotebookDirectory() : workingDir; + dopt.rootFolder = _appSettings.getNotebookDirectory(); + dopt.startFolder = workingDir; + dopt.okButtonText = R.string.create_new_document; + dopt.okButtonEnable = true; + dopt.dismissAfterCallback = false; + _dopt = dopt; } @Override - public void onFsViewerSelected(String request, File dir, final Integer lineNumber) { - NewFileDialog dialog = NewFileDialog.newInstance(dir, false, (ok, f) -> { - if (ok && f.isFile()) { - appendToExistingDocumentAndClose(f, true); - } - }); - dialog.show(getActivity().getSupportFragmentManager(), NewFileDialog.FRAGMENT_TAG); + public void onFsViewerSelected(final String request, final File sel, final Integer lineNumber) { + if (sel.isDirectory()) { + NewFileDialog.newInstance(sel, false, (ok, f) -> { + if (ok && f.isFile()) { + appendToExistingDocumentAndClose(f, true); + } + }).show(getChildFragmentManager(), NewFileDialog.FRAGMENT_TAG); + } else { + appendToExistingDocumentAndClose(sel, true); + } } - }, getFragmentManager(), getActivity()); + + @Override + public void onFsViewerCancel(final String request) { + // Will cause the dialog to dismiss after this callback + _dopt.dismissAfterCallback = true; + } + }, getParentFragmentManager(), getActivity(), MarkorFileBrowserFactory.IsMimeText); } private void showInDocumentActivity(final Document document) { @@ -321,14 +338,13 @@ public Boolean onPreferenceClicked(Preference preference, String key, int keyId) close = true; break; } - case R.string.pref_key__share_into__create_document: { - createNewDocument(); + case R.string.pref_key__select_create_document: { + createSelectNewDocument(); return true; } case R.string.pref_key__favourite_files: case R.string.pref_key__popular_documents: - case R.string.pref_key__recent_documents: - case R.string.pref_key__share_into__existing_document: { + case R.string.pref_key__recent_documents: { showAppendDialog(keyId); return true; } diff --git a/app/src/main/java/net/gsantner/markor/activity/MainActivity.java b/app/src/main/java/net/gsantner/markor/activity/MainActivity.java index 4ed6883497..2e2878b32a 100644 --- a/app/src/main/java/net/gsantner/markor/activity/MainActivity.java +++ b/app/src/main/java/net/gsantner/markor/activity/MainActivity.java @@ -296,7 +296,7 @@ public void onClickFab(final View view) { if (f.isFile()) { DocumentActivity.launch(MainActivity.this, f, false, null, null); } else if (f.isDirectory()) { - _notebook.reloadCurrentFolder(); + _notebook.getAdapter().showFile(f); } } }); diff --git a/app/src/main/java/net/gsantner/markor/format/FormatRegistry.java b/app/src/main/java/net/gsantner/markor/format/FormatRegistry.java index 1c465fe718..2a41f35a14 100644 --- a/app/src/main/java/net/gsantner/markor/format/FormatRegistry.java +++ b/app/src/main/java/net/gsantner/markor/format/FormatRegistry.java @@ -88,7 +88,7 @@ public class FormatRegistry { }; public static boolean isFileSupported(final File file, final boolean... textOnly) { - boolean textonly = textOnly != null && textOnly.length > 0 && textOnly[0]; + final boolean textonly = textOnly != null && textOnly.length > 0 && textOnly[0]; if (file != null) { final String filepath = file.getAbsolutePath().toLowerCase(Locale.ROOT); for (TextConverterBase converter : CONVERTERS) { diff --git a/app/src/main/java/net/gsantner/markor/frontend/NewFileDialog.java b/app/src/main/java/net/gsantner/markor/frontend/NewFileDialog.java index b5e0b38886..fc4b557811 100644 --- a/app/src/main/java/net/gsantner/markor/frontend/NewFileDialog.java +++ b/app/src/main/java/net/gsantner/markor/frontend/NewFileDialog.java @@ -210,7 +210,7 @@ private AlertDialog.Builder makeDialog(final File basedir, final boolean allowCr return; } final String usedFoldername = getFileNameWithoutExtension(fileNameEdit.getText().toString().trim(), templateSpinner.getSelectedItemPosition()); - File f = new File(basedir, usedFoldername); + final File f = new File(basedir, usedFoldername); if (cu.isUnderStorageAccessFolder(getContext(), f, true)) { DocumentFile dof = cu.getDocumentFile(getContext(), f, true); callback(dof != null && dof.exists(), f); diff --git a/app/src/main/java/net/gsantner/markor/frontend/filebrowser/MarkorFileBrowserFactory.java b/app/src/main/java/net/gsantner/markor/frontend/filebrowser/MarkorFileBrowserFactory.java index 8e3ee7a657..4af523f720 100644 --- a/app/src/main/java/net/gsantner/markor/frontend/filebrowser/MarkorFileBrowserFactory.java +++ b/app/src/main/java/net/gsantner/markor/frontend/filebrowser/MarkorFileBrowserFactory.java @@ -29,7 +29,11 @@ public class MarkorFileBrowserFactory { public static GsCallback.b2 IsMimeAudio = (context, file) -> file != null && GsContextUtils.instance.getMimeType(context, file).startsWith("audio/"); public static GsCallback.b2 IsMimeVideo = (context, file) -> file != null && GsContextUtils.instance.getMimeType(context, file).startsWith("video/"); - public static GsFileBrowserOptions.Options prepareFsViewerOpts(Context context, boolean doSelectFolder, GsFileBrowserOptions.SelectionListener listener) { + public static GsFileBrowserOptions.Options prepareFsViewerOpts( + final Context context, + final boolean doSelectFolder, + final GsFileBrowserOptions.SelectionListener listener + ) { final GsFileBrowserOptions.Options opts = new GsFileBrowserOptions.Options(); final MarkorContextUtils cu = new MarkorContextUtils(context); final AppSettings appSettings = ApplicationObject.settings(); @@ -40,6 +44,8 @@ public static GsFileBrowserOptions.Options prepareFsViewerOpts(Context context, opts.doSelectFolder = doSelectFolder; opts.doSelectFile = !doSelectFolder; + opts.okButtonEnable = opts.doSelectFolder || opts.doSelectMultiple; + opts.searchButtonImage = R.drawable.ic_search_black_24dp; opts.newDirButtonImage = R.drawable.baseline_create_new_folder_24; opts.homeButtonImage = R.drawable.ic_home_black_24dp; @@ -84,20 +90,30 @@ public static File[] strlistToArray(List strlist) { return files; } - private static void showDialog(FragmentManager fm, GsFileBrowserOptions.Options opts) { - GsFileBrowserDialog filesystemViewerDialog = GsFileBrowserDialog.newInstance(opts); + private static GsFileBrowserDialog showDialog(final FragmentManager fm, final GsFileBrowserOptions.Options opts) { + final GsFileBrowserDialog filesystemViewerDialog = GsFileBrowserDialog.newInstance(opts); filesystemViewerDialog.show(fm, GsFileBrowserDialog.FRAGMENT_TAG); + return filesystemViewerDialog; } - public static void showFileDialog(GsFileBrowserOptions.SelectionListener listener, FragmentManager fm, Context context, GsCallback.b2 fileOverallFilter) { + public static GsFileBrowserDialog showFileDialog( + final GsFileBrowserOptions.SelectionListener listener, + final FragmentManager fm, + final Context context, + final GsCallback.b2 fileOverallFilter + ) { final GsFileBrowserOptions.Options opts = prepareFsViewerOpts(context, false, listener); opts.fileOverallFilter = fileOverallFilter; - showDialog(fm, opts); + return showDialog(fm, opts); } - public static void showFolderDialog(GsFileBrowserOptions.SelectionListener listener, FragmentManager fm, Context context) { + public static GsFileBrowserDialog showFolderDialog( + final GsFileBrowserOptions.SelectionListener listener, + final FragmentManager fm, + final Context context + ) { final GsFileBrowserOptions.Options opts = prepareFsViewerOpts(context, true, listener); opts.okButtonText = R.string.select_this_folder; - showDialog(fm, opts); + return showDialog(fm, opts); } } diff --git a/app/src/main/java/net/gsantner/opoc/frontend/GsSearchOrCustomTextDialog.java b/app/src/main/java/net/gsantner/opoc/frontend/GsSearchOrCustomTextDialog.java index 4f3754efe6..45528c6d11 100644 --- a/app/src/main/java/net/gsantner/opoc/frontend/GsSearchOrCustomTextDialog.java +++ b/app/src/main/java/net/gsantner/opoc/frontend/GsSearchOrCustomTextDialog.java @@ -55,6 +55,7 @@ import net.gsantner.opoc.wrapper.GsCallback; import net.gsantner.opoc.wrapper.GsTextWatcherAdapter; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; diff --git a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserDialog.java b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserDialog.java index d5bb4a3934..4a31ace967 100644 --- a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserDialog.java +++ b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserDialog.java @@ -19,7 +19,6 @@ import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; @@ -53,8 +52,8 @@ public class GsFileBrowserDialog extends DialogFragment implements GsFileBrowser //######################## public static final String FRAGMENT_TAG = "FilesystemViewerCreator"; - public static GsFileBrowserDialog newInstance(GsFileBrowserOptions.Options options) { - GsFileBrowserDialog f = new GsFileBrowserDialog(); + public static GsFileBrowserDialog newInstance(final GsFileBrowserOptions.Options options) { + final GsFileBrowserDialog f = new GsFileBrowserDialog(); f.setStyle(DialogFragment.STYLE_NO_TITLE, 0); options.listener.onFsViewerConfig(options); f.setDialogOptions(options); @@ -93,9 +92,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } @Override - public void onViewCreated(View root, @Nullable Bundle savedInstanceState) { + public void onViewCreated(final View root, final @Nullable Bundle savedInstanceState) { super.onViewCreated(root, savedInstanceState); - Context context = getContext(); + final Activity activity = getActivity(); _recyclerList = root.findViewById(R.id.ui__filesystem_dialog__list); _dialogTitle = root.findViewById(R.id.ui__filesystem_dialog__title_text); @@ -151,10 +150,10 @@ public void onViewCreated(View root, @Nullable Bundle savedInstanceState) { root.setBackgroundColor(rcolor(_dopt.backgroundColor)); final LinearLayoutManager lam = (LinearLayoutManager) _recyclerList.getLayoutManager(); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getActivity(), lam.getOrientation()); + final DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(activity, lam.getOrientation()); _recyclerList.addItemDecoration(dividerItemDecoration); - _filesystemViewerAdapter = new GsFileBrowserListAdapter(_dopt, context); + _filesystemViewerAdapter = new GsFileBrowserListAdapter(_dopt, activity); _recyclerList.setAdapter(_filesystemViewerAdapter); _filesystemViewerAdapter.getFilter().filter(""); onFsViewerDoUiUpdate(_filesystemViewerAdapter); @@ -168,7 +167,6 @@ private void setDialogOptions(GsFileBrowserOptions.Options options) { _dopt = options; _callback = _dopt.listener; _dopt.listener = this; - checkOptions(); } public void changeAdapterFilter(CharSequence s, int start, int before, int count) { @@ -177,7 +175,7 @@ public void changeAdapterFilter(CharSequence s, int start, int before, int count } } - public void onClicked(View view) { + public void onClicked(final View view) { switch (view.getId()) { case R.id.ui__filesystem_dialog__button_ok: case R.id.ui__filesystem_dialog__home: { @@ -197,7 +195,7 @@ public void onClicked(View view) { break; } case R.id.ui__filesystem_dialog__button_cancel: { - onFsViewerNothingSelected(_dopt.requestId); + onFsViewerCancel(_dopt.requestId); break; } case R.id.ui__filesystem_dialog__new_dir: { @@ -225,28 +223,19 @@ private void showNewDirDialog() { dopt.titleText = _dopt.newDirButtonText; dopt.textColor = rcolor(_dopt.primaryTextColor); dopt.searchHintText = android.R.string.untitled; - dopt.callback = (name) -> { - final File file = _filesystemViewerAdapter.createDirectoryHere(name); - if (file != null) { - _recyclerList.postDelayed(() -> _filesystemViewerAdapter.showAndBlink(file, _recyclerList), 100); - } - }; + dopt.callback = (name) -> _filesystemViewerAdapter.createDirectoryHere(name, true); GsSearchOrCustomTextDialog.showMultiChoiceDialogWithSearchFilterUI(activity, dopt); } - private void checkOptions() { - if (_dopt.doSelectFile && !_dopt.doSelectMultiple) { - _dopt.okButtonEnable = false; - } - } - @Override - public void onFsViewerSelected(String request, File file, final Integer lineNumber) { + public void onFsViewerSelected(final String request, final File file, final Integer lineNumber) { if (_callback != null) { _callback.onFsViewerSelected(_dopt.requestId, file, lineNumber); } - dismiss(); + if (_dopt.dismissAfterCallback) { + dismiss(); + } } @Override @@ -254,15 +243,19 @@ public void onFsViewerMultiSelected(String request, File... files) { if (_callback != null) { _callback.onFsViewerMultiSelected(_dopt.requestId, files); } - dismiss(); + if (_dopt.dismissAfterCallback) { + dismiss(); + } } @Override - public void onFsViewerNothingSelected(String request) { + public void onFsViewerCancel(String request) { if (_callback != null) { - _callback.onFsViewerNothingSelected(_dopt.requestId); + _callback.onFsViewerCancel(_dopt.requestId); + } + if (_dopt.dismissAfterCallback) { + dismiss(); } - dismiss(); } @Override diff --git a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserFragment.java b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserFragment.java index 1f67b39615..105180b02b 100644 --- a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserFragment.java +++ b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserFragment.java @@ -117,7 +117,7 @@ public void onViewCreated(@NonNull View root, @Nullable Bundle savedInstanceStat _recyclerList.addItemDecoration(dividerItemDecoration); _previousNotebookDirectory = _appSettings.getNotebookDirectory(); - _filesystemViewerAdapter = new GsFileBrowserListAdapter(_dopt, context, _recyclerList); + _filesystemViewerAdapter = new GsFileBrowserListAdapter(_dopt, context); _recyclerList.setAdapter(_filesystemViewerAdapter); _filesystemViewerAdapter.getFilter().filter(""); onFsViewerDoUiUpdate(_filesystemViewerAdapter); @@ -160,7 +160,7 @@ public void onClicked(View view) { break; } case R.id.ui__filesystem_dialog__button_cancel: { - onFsViewerNothingSelected(_dopt.requestId); + onFsViewerCancel(_dopt.requestId); break; } @@ -189,9 +189,9 @@ public void onFsViewerMultiSelected(String request, File... files) { } @Override - public void onFsViewerNothingSelected(String request) { + public void onFsViewerCancel(String request) { if (_callback != null) { - _callback.onFsViewerNothingSelected(_dopt.requestId); + _callback.onFsViewerCancel(_dopt.requestId); } } @@ -525,7 +525,7 @@ private void executeSearchAction() { onFsViewerSelected("", load, lineNumber); } } else { - showFile(load); + _filesystemViewerAdapter.showFile(load); } }); } @@ -591,6 +591,12 @@ public void onFsViewerDoUiUpdate(GsFileBrowserListAdapter adapter) { } } } + + @Override + public void onFsViewerCancel(final String request) { + super.onFsViewerCancel(request); + _filesystemViewerAdapter.reloadCurrentFolder(); // May be new folders + } }, getChildFragmentManager(), getActivity()); } @@ -642,45 +648,6 @@ private void importFileToCurrentDirectory(Context context, File sourceFile) { Toast.makeText(context, getString(R.string.import_) + ": " + sourceFile.getName(), Toast.LENGTH_LONG).show(); } - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - - } - - // Switch to folder and show the file - public void showFile(final File file) { - final GsFileBrowserListAdapter adapter = getAdapter(); - if (adapter == null || !file.exists()) { - return; - } - - final File dir = file.getParentFile(); - if (dir == null) { - return; - } - - final File current = adapter.getCurrentFolder(); - - if (!current.equals(dir)) { - // Wait up to 2s for the folder to load - final long init = System.currentTimeMillis(); - adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { - @Override - public void onChanged() { - super.onChanged(); - if ((System.currentTimeMillis() - init) < 2000) { - _recyclerList.postDelayed(() -> adapter.showAndBlink(file, _recyclerList), 250); - } - adapter.unregisterAdapterDataObserver(this); - } - }); - adapter.setCurrentFolder(dir); - } else { - adapter.showAndBlink(file, _recyclerList); - } - } - public void setCurrentFolder(final File folder) { if (folder != null && folder.canRead() && _filesystemViewerAdapter != null) { _filesystemViewerAdapter.setCurrentFolder(folder); diff --git a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserListAdapter.java b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserListAdapter.java index fda4c30e88..de5f0486d6 100644 --- a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserListAdapter.java +++ b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserListAdapter.java @@ -76,7 +76,7 @@ public class GsFileBrowserListAdapter extends RecyclerView.Adapter _virtualMapping = new HashMap<>(); - private final RecyclerView _recyclerView; + private RecyclerView _recyclerView; private final SharedPreferences _prefApp; //######################## @@ -84,17 +84,13 @@ public class GsFileBrowserListAdapter extends RecyclerView.Adapter(); _adapterDataFiltered = new ArrayList<>(); _currentSelection = new HashSet<>(); _context = context; loadFolder((options.startFolder != null) ? options.startFolder : options.rootFolder); - _recyclerView = recyclerView; _prefApp = _context.getSharedPreferences("app", Context.MODE_PRIVATE); // Prevents view flicker - https://stackoverflow.com/a/32488059 @@ -202,6 +198,12 @@ public void onBindViewHolder(@NonNull FilesystemViewerViewHolder holder, int pos holder.itemRoot.setOnLongClickListener(this); } + @Override + public void onAttachedToRecyclerView(final RecyclerView view) { + super.onAttachedToRecyclerView(view); + _recyclerView = view; + } + public String formatFileDescription(final File file, String format) { if (TextUtils.isEmpty(format)) { return DateUtils.formatDateTime(_context, file.lastModified(), (DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_NUMERIC_DATE)); @@ -321,7 +323,7 @@ public void onClick(View view) { switch (view.getId()) { case R.id.opoc_filesystem_item__root: { // A own item was clicked - TagContainer data = (TagContainer) view.getTag(); + final TagContainer data = (TagContainer) view.getTag(); if (data != null && data.file != null) { File file = data.file; if (_virtualMapping.containsKey(file)) { @@ -352,9 +354,8 @@ public void onClick(View view) { } case R.id.ui__filesystem_dialog__button_ok: { if (_dopt.doSelectMultiple && areItemsSelected()) { - _dopt.listener.onFsViewerMultiSelected(_dopt.requestId, - _currentSelection.toArray(new File[0])); - } else if (_dopt.doSelectFolder && (_currentFolder.exists() || isCurrentFolderVirtual())) { + _dopt.listener.onFsViewerMultiSelected(_dopt.requestId, _currentSelection.toArray(new File[0])); + } else { _dopt.listener.onFsViewerSelected(_dopt.requestId, _currentFolder, null); } return; @@ -461,7 +462,7 @@ public boolean onLongClick(View view) { return false; } - public File createDirectoryHere(final CharSequence name) { + public File createDirectoryHere(final CharSequence name, final boolean show) { if (name == null || _currentFolder == null || !_currentFolder.canWrite()) { return null; } @@ -475,7 +476,11 @@ public File createDirectoryHere(final CharSequence name) { try { final File file = new File(_currentFolder, trimmed); if (file.exists() || file.mkdir()) { - reloadCurrentFolder(); + if (show) { + showFile(file); + } else { + reloadCurrentFolder(); + } return file; } } catch (SecurityException ignored) { @@ -485,19 +490,48 @@ public File createDirectoryHere(final CharSequence name) { return null; } + // Switch to folder and show the file + public void showFile(final File file) { + if (file == null || !file.exists() || _recyclerView == null) { + return; + } + + final File dir = file.getParentFile(); + if (dir == null) { + return; + } + + if (getFilePosition(file) < 0) { + // Wait up to 2s for the folder to load or reload + final long init = System.currentTimeMillis(); + registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { + @Override + public void onChanged() { + super.onChanged(); + if ((System.currentTimeMillis() - init) < 2000) { + _recyclerView.postDelayed(() -> showAndBlink(file), 250); + } + unregisterAdapterDataObserver(this); + } + }); + loadFolder(dir); // Will reload folder if necessary + } else { + showAndBlink(file); + } + } + /** * Show a file in the current folder and blink it * * @param file File to blink - * @param recycler RecyclerView which holds the file items */ - public void showAndBlink(final File file, final RecyclerView recycler) { + private void showAndBlink(final File file) { final int pos = getFilePosition(file); - final LinearLayoutManager manager = (LinearLayoutManager) recycler.getLayoutManager(); + final LinearLayoutManager manager = (LinearLayoutManager) _recyclerView.getLayoutManager(); if (manager != null && pos >= 0) { manager.scrollToPositionWithOffset(pos, 1); - recycler.postDelayed(() -> { - final RecyclerView.ViewHolder holder = recycler.findViewHolderForLayoutPosition(pos); + _recyclerView.postDelayed(() -> { + final RecyclerView.ViewHolder holder = _recyclerView.findViewHolderForLayoutPosition(pos); if (holder != null) { GsContextUtils.blinkView(holder.itemView); } diff --git a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserOptions.java b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserOptions.java index f814f80313..518ed98577 100644 --- a/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserOptions.java +++ b/app/src/main/java/net/gsantner/opoc/frontend/filebrowser/GsFileBrowserOptions.java @@ -31,7 +31,7 @@ public interface SelectionListener { void onFsViewerMultiSelected(final String request, final File... files); - void onFsViewerNothingSelected(final String request); + void onFsViewerCancel(final String request); void onFsViewerConfig(final Options dopt); @@ -72,7 +72,8 @@ public static class Options { homeButtonEnable = true, cancelButtonEnable = true, okButtonEnable = true, - newDirButtonEnable = true; + newDirButtonEnable = true, + dismissAfterCallback = true; public GsCallback.b2 fileOverallFilter = (context, file) -> true; @@ -130,7 +131,7 @@ public void onFsViewerMultiSelected(String request, File... files) { } @Override - public void onFsViewerNothingSelected(String request) { + public void onFsViewerCancel(String request) { } @Override diff --git a/app/src/main/java/net/gsantner/opoc/util/GsContextUtils.java b/app/src/main/java/net/gsantner/opoc/util/GsContextUtils.java index b701fb2bc3..da41a094a9 100644 --- a/app/src/main/java/net/gsantner/opoc/util/GsContextUtils.java +++ b/app/src/main/java/net/gsantner/opoc/util/GsContextUtils.java @@ -1832,13 +1832,18 @@ public Object extractResultFromActivityResult(final Activity context, final int break; } case REQUEST_RECORD_AUDIO: { - final Uri uri = intent.getData(); - final String uriPath = uri.getPath(); - final String ext = uriPath.substring(uriPath.lastIndexOf(".")); - final String datestr = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss", Locale.ENGLISH).format(new Date()); - final File temp = new File(context.getCacheDir(), datestr + ext); - GsFileUtils.copyUriToFile(context, uri, temp); - sendLocalBroadcastWithStringExtra(context, REQUEST_RECORD_AUDIO + "", EXTRA_FILEPATH, temp.getAbsolutePath()); + String audioPath = null; + if (resultCode == Activity.RESULT_OK && intent != null) { + final Uri uri = intent.getData(); + final String uriPath = uri.getPath(); + final String ext = uriPath.substring(uriPath.lastIndexOf(".")); + final String datestr = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss", Locale.ENGLISH).format(new Date()); + final File temp = new File(context.getCacheDir(), datestr + ext); + GsFileUtils.copyUriToFile(context, uri, temp); + audioPath = temp.getAbsolutePath(); + } + sendLocalBroadcastWithStringExtra(context, REQUEST_RECORD_AUDIO + "", EXTRA_FILEPATH, audioPath); + break; } case REQUEST_SAF: { if (resultCode == Activity.RESULT_OK && intent != null && intent.getData() != null) { diff --git a/app/src/main/res/layout/opoc_filesystem_dialog.xml b/app/src/main/res/layout/opoc_filesystem_dialog.xml index 9b006859c5..ec9b3fdcc2 100644 --- a/app/src/main/res/layout/opoc_filesystem_dialog.xml +++ b/app/src/main/res/layout/opoc_filesystem_dialog.xml @@ -65,10 +65,12 @@ android:src="@android:drawable/ic_menu_search" android:layout_width="wrap_content" android:layout_height="wrap_content" + app:fabSize="mini" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/ui__filesystem_dialog__new_dir" - android:layout_marginRight="20dp" - android:layout_marginBottom="20dp" + android:layout_marginRight="10dp" + android:layout_marginBottom="15dp" + android:alpha="0.75" tools:ignore="ContentDescription" app:shapeAppearance="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"/> @@ -77,10 +79,12 @@ android:src="@android:drawable/ic_input_add" android:layout_width="wrap_content" android:layout_height="wrap_content" + app:fabSize="mini" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/ui__filesystem_dialog__home" - android:layout_marginRight="20dp" - android:layout_marginBottom="20dp" + android:layout_marginRight="10dp" + android:layout_marginBottom="15dp" + android:alpha="0.75" tools:ignore="ContentDescription" app:shapeAppearance="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"/> @@ -89,10 +93,12 @@ android:src="@android:drawable/btn_star" android:layout_width="wrap_content" android:layout_height="wrap_content" + app:fabSize="mini" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/ui__filesystem_dialog__buttons" - android:layout_marginRight="20dp" - android:layout_marginBottom="20dp" + android:layout_marginRight="10dp" + android:layout_marginBottom="15dp" + android:alpha="0.75" tools:ignore="ContentDescription" app:shapeAppearance="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"/> diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 1a00d2f426..30b35b1a01 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -11,26 +11,210 @@ work. If not, see . --> Seaded + Hele + Tume + Eemalda Välimus + Ümbernimeta + Kinnita eemaldamine + Kas Sa tõesti eemaldad selle %s? + Kinnita ülekirjutamine + Juba on selle nimega kirje, kas annad uue nime? + Sirvi failisüsteemi + Tiitel + Tühi kataloog + Sisesta nimi uuele kaustale + Loo kaust + Loo uus kirje + Teisalda + Kopeeri + Teave + Kirje/kaust juba leidub! Palun pane erinev nimi + Impordi seadmest + Sissetoomine + Lisa %s lõppu + Vali kaust + Toimeta + Otsi kirjutistest + Jaga… + Jaga + Otsi + Näita teisendatud märgistust Redigeerija + Kaustad + Kirjed + Kirje + Kirjutised + HTML (kui lihttekst) + Tekstitoimeti font + Kujundus + Ava kirjutised ainult vaatamiseks Teave + Lihttekst + Fail + Pilt + Kirja suurus + Esita paremalt-vasakule keeltes + Viga: Ei saa luua märkmiku kausta + Viimati muudeti: %s + Viimati muudetud + Vali see kaust + Vali Loo + Vali sissekanded + Üks asi valitud + %d asja on valitud + Peida oleku ala sellest vaatest Peida olekuriba + Nimetus + URL / failitee + Sisesta link + Sisesta pilt Toetajad + Määra asukohad + Salvestatud %s + Vali hoidla kaust Litsentsid Muuda logi - Kuva rakenduse litsents + Rohkem teavet + Näita rakenduse litsentsi Kuva kolmanda osapoole litsentsid Muutke selle rakenduse keelt. Muudatuste jõustumiseks taaskäivitage rakendus Keel + Hoidla luba nõutakse, et faile lugeda ja kirjutada + Ava sellega + Järjesta alusel + Kuupäev + Nimi Suurus + Järjesta vastupidi Andke oma panus + Projekti leht + Väljumiseks vajuta veelkord \'Tagasi\' Välju + Ennista + Tee uuesti Lisaks + Märkmeraamat Abiinfo + Tegemiseks + Ülesanne + Valdkond + Nimistu + Olulisus + Ajalugu + Ühtlusta + Otsi / Kohanda + Salvesta + Uuenda + Puhasta + Tähtaeg + Kuupäev + Arhiiv + Lisa ülesanne + Lisa %s + Kirjutis laaditakse ja salvestatakse kui %s + Värskenda + Loo otsetee + Proovib luua otsetee sinu kodukraanike. Mõned käivitajad ei võimalda seda. + Valitud fail ei asu rakenduse märkmiku kaustas. Kas soovite selle praegusesse kausta kopeerida? See kirjutab üle kõik olemas olevad sama nimega failid. + Fail ei asu praeguses kaustas. Kas soovite selle praegusesse kausta kopeerida? See kirjutab üle kõik sama nimega failid. + Failid ja kaustad + Dokumentide sirvija + Failide sirvija + Sea tähtaeg + Sisesta kuupäev + Puhasta märge + Erilised dokumendid + Hoia ekraanil + Keela kuvarõmmised + Tagasi eelmisesse kausta + Äpi seadistused + Tekstitoimeti seadsitused + Mäleta viimati avatud kausta + Kirjeid on %d + Äpi ülene Põhivaade + Üle kogu äpi kasutatud kujundus + Mäleta viimast kausta + Süntaksi esiletõstmine + Jooksev esiletõstmine + Viivitus esiletõstmisel + Viivitus millisekundites enne esiletõstmist. Lühem viivitus aeglustab vana seadet ja kulutab rohkem akut. + Kas sisestatud tekst tõstetakse esile või mitte + Jooksev esiletõstmine parendab tekstis mõistmist, aga võivad ilmneda häired. + Saab muuta tekstitoimeti kirja suurust + Näita all teksti muutmise nuppe. + Laadi alustades viimati avatud kaust + Vorming + Kontekst + Ettevõtmine + Ettevõtmised + Puudub Muud + Tühi kirje + Lehe piir(PDF/Trükkimine) + Jooni alla + Kas alla joonida kuueteistkümnend värvikoodid vastavalt värvile + Jooni alla kuueteistkümnend värvikoodid + Sisesta uue ülesande alustamisel praegune kuupäev + Ülesanded tänase kuupäevaga + Lisa kontekste ja ettevõtmisi + Kui kasutate sobivat tekstitoimingut, lisage ülesande lõppu kontekstid ja projektid + Paremalt vasakule + Märgi realõpud + Tõstab esile vähemalt kahe tühikuga rea lõpud + Kasuta koodile püsiva laiusega fonti + Keela koodiplokkide esiletõstmine + Nummerda nimekirjad uuesti + See valik mõjutab rakenduse jõudlust. + Kasuta erinevat fonditüüpi. Jooksev muutmine mõjutab rakenuse jõudlust. Üldine + Vahendid + Ridade vahekaugus protsentides + Ridade vahe + Liiguta lõpetatud ülesanded eraldi faili samas kaustas + Järjesta ülesanded valitud järjekorda + Eriklahvid + Eriline AsciiDoc sisu + Eelmine lehekülg(Page Up) + Järgmine lehekülg (Page Down) + Liiguta tekstirida ülesse + Liiguta tekstirida alla + Alusta uue reaga all + Rea algus(Pos Home) + Rea lõpp(Pos End) + Kirjutise algus + Kirjutise lõpp + Vali kõik (Ctrl+A) + Tabeldaja + Alusta lõpus + Kirjutist laadides jääb osuti selle lõppu + Korrastamata nimekirja tähis + Milline märk tähistab korrastamata nimekirju + Sidekriips (-) + Tärn (*) + Pluss (+) + Markor toimetab ainult kohalike failidega ja selliste failihalduritega mis pakuvad täielikku failiteed. + Faili või kataloogi ei ole või ei saa luua + Load + Kas taastada vaikimisi failiteed? + Luba pole tagatud + Märge: Sünkijad võivad panna faile oma kaustadesse. Ava neid faile muutes vastavalt Markori märkmete kausta või läbi teise failihalduri. + Püstjoondus + Rõhtjoondus + Vaikimisi + Vasak + Parem + Üleval + All + Keskel + Toimingunuppude vahe + Toimingunuppude vahe + Keskjoonda tekst + Toimeta teksti ekraani keskel + Lõikelaud + Vali leiduv kirjutis Avatud lähtekoodiga litsentsid Hinda seda rakendust Tõlgi @@ -44,12 +228,226 @@ work. If not, see . Lisage projekti kood. Kõik on oodatud seda tegema, ka uued tulijad Projekti tiim Kuva kaastöötajateave. Esitage see, et see kuvatakse siin pärast panuse andmist, kui soovite + kahanev + suurenev + Keela kirjavigade allajoonimine + Sõnasoovitused jäävad, punased allajoonimised kaovad + Asukoht + Tekstiread + Teksti tähemärgid + Teksti sõnad + Kataloog + Hiljuti vaadatud kirjutised + Üksikasjad + Kalender + Hoiatus! Rakendusel puudub selle faili salvestamise luba, kõik muutused saavas kaduma. Android keelab igasuguse ligipääsu ja olukord on lahendamatu. Ühtegi pilti pole valitud, tehtud ega salvestatud. + Pilt galeriist + Pilt kaameraga + Luba taastamise ja taastegemise toimingud. Sobib ainult keerkaks tööks, ole tähelepanelik. Sulge ja taasava toimeti ajaloo kustutamiseks. + Kirjeldus Redigeeri pilti + Matemaatika + Kuva vaadatud dokumentide ülaosas sisestatud YAML Front Matter atribuudid. Sisestage komadega eraldatud võtmed. Jätke tühjaks kui pole või kasutage kõigi jaoks \'*\'. \n\nKui dokumendis on määratletud mõni atribuut (nt pealkiri: \'Tere\') ja ka teie dokumendis on {{ post.title }}, asendatakse see. Sel viisil saate luua kohandatud Front Matteri pealkirja. + Sisukord Mitmesugune + Eelistatud vaade + Kalendrirakendust pole! + Nõutavad dokumendid + Värv + Ruumi raiskamata + Põhilised värvid + Muudab tekstiredaktori tausta ja esiplaani värvi. Kohandub rakenduse teemaga, nii et see on saadaval heledas ja tumedas teemas. Süntaksi esiletõstmise värvid jäävad samaks. + Eelseadistus + Esiplaan Taust + Kas määrata teksti esi- või taustavärv? Kuueteistkümnendvärvikoodi sisestamine on samuti võimalik. + Tüüp + Kaust + - Kaust luuakse ilma faililaiendita + - Faile ja kaustu ei kirjutata üle + Mitu akent Kirjatüüp + Ava dokumendid alati eraldi akendes. Lülitumiseks kasutage oma seadme klahvi „Viimased”. + Sisesta või vali vorming + Vali kuupäev + Mära kellaaeg + Hankige kuupäeva või kellaaja asemel vorming + Kasuta alati praegust kuupäeva & aega + Tulemus + Ainult aeg + Ainult kuupäev + Viimati kasutati + minu_märge Sulge + Loobu + Millest alustab + Vaade milles rakendus alustab + Vaate muutmiseks tõmmake näpuga üle ekraani + Muutmise- või vaatamise lülitumiseks pühkige (praeguse vaate vastandina) + Kaustad ees + Mine + AppData (avalik) + AppData (isiklik) + AppData (SD kaardil) + Sisemine salvestusruum + Dokumendi saate avada altpoolt põhivaates, failibrauseris või käivitusprogrammis. Samuti on võimalik Markorisse jagatud teksti lisada. + Märkmik/Notebook on kaust, mille Markor rakenduse käivitamisel failihaldurisse laadib. See on teie failide kodukaust. + QuickNote on kiireim võimalus märkmete kirjutamiseks. See on Markdown-vormingus fail, mille vaikeasukoht >Notebook/QuickNote.md<, seadistustes saate kohandada failitee. + Halda oma ülesandeid TodDo abil. See on faili todo.txt vormingus vaikimisi asukohas >Notebook/todo.txt<, mille failiteed saad seadetes muuta. + Liikumisriba värv + Must + Valge + Vaade + Vaate olek + Toimeti olek + Ühenda hoidla + Selles hoidlas tegutsemiseks on vaja luba. Loa andmiseks ühenda see hoidla. Kinnita see dialoog vastava hüpikakna nägemiseks. Vali sealt see hoidla ja toksa vali. + Jaga teavet Lemmik + Lemmikud + Palun oota + Rakenduse alustamise kaust + Lapaka laius + Tühikute hulk tabelduse näitamisel + Valitud fail võib olla lihttekst. Kas Sa tahad selle avada toimetis või teises rakenduses?\n\nÄra proovi avada kahendfaile. Kui Sa pole kindel, ava teises rakenduses. + Hiljutiste failide loendisse + Lae uuesti + Reamurdmine + Reanumbrid + Pehme murdmine, kui tekst ei mahu ekraanilaiusesse. Muidu luba rõht kerimine. + Sügav otsing praeguses kataloogis. + Alati ava selle rakendusega + Alati ava faile selles rakenduses kui nimekirjas on faililaiend. Näiteks kasuta \'None, .html, .css, .js\' veebifailidele ja neile millel pole nimelaiendit. + Ava fail sellega Pööra + Näidis + Saada vealogi + Trüki / PDF + Suurenda pealkirju + Suurenda pealkirjade teksti vastavalt tasemele (# h1, ## h2, ### h3...) + Praegune + Jäädvusta heli + Kinnita + Kopeeri fail + Lehekülg + Katselised võimalused + Tööriistad + Lugemine + Loe + Tabel + Mitu veergu? Vajuta tabeli nuppu pikalt ja alusta tabeliga( lisa päis), vajuta lühidalt ja lisa rida. + Markdownis tabeli näidis + Kustuta read + Korrastamata nimekiri + Korrastatud nimekiri + Märkeruutudega nimekiri + Ava viide + Värvivalija + Kuupäev ja kellaaeg + Hüppa lõppu + Tsiteering + Pealkiri + Pealkiri 1 + Pealkiri 2 + Pealkiri 3 + Pealkiri 4 + Pealkiri 5 + Pealkiri 6 + Tugev + Kaldus + Esiletõstetud + Läbijoonitud + Kood tekstireal + Horisontaaljoon + Märgi lõpetatuks + Lingi värv + Lisa valdkond + Lisa ettevõtmisi + Hoiusta lõpetatud ülesanded + Loo uus kirjutis või kaust + Vali vorming + Valitud + Tagasi + Laienda/ ahenda + Hädavajalik + Lisage uutele ülesannetele inimloetav UUID + Toimingute järjekord + Lülita toimingu näitamist + Laadi vaikimisi seaded + Lohista + Loodud + Faili krüpteeringu salasõna + Parooli pole määratud, ei saa krüpteerida ega dekrüpteerida.\nAvage Seaded -> Üldine -> Salasõna salasõna määramiseks. + Krüpteeri faili sisu + UTF-8 alguses BOM + Faili sisu ei saanud krüptida. Faili ei salvestatud. + Faili sisu ei saanud dekrüpteerida. Kas kasutasite vale salasõna? Kas fail on tõesti Markori AES-krüptimisega krüptitud? + Parool on juba määratud. Uue salasõna määramine kirjutab olemasoleva üle ja selle unustamise korral ei pruugi te enam failidele juurde pääseda. + Koodiread + Lisa lõpetamise kuupäev + Lõprtatuks märkimisel lisage ülesannete täitmise kuupäev + Faili kirjelduse vorming + Iga faili all oleva kirjelduse vorming failihalduris. Järgib Androidi SimpleDateFormat reegleid, millele on lisatud faili suuruse kuvamiseks FS. Oma asukoha vaikevormingu kasutamiseks jätke väli tühjaks.\n\nNäidis sisend:\nFS yyyy MMM pp hh:mm:ss aa\nVäljundvorming:\n30KB 20. mär 2020 23:24:52 + Laadi vaikimisi väärtus + Faili sesaded + Otsi / asenda + Otsi + Asenda sellega + Asenda (1) + Asenda kõik + Vastavused + Viga otsi ja asenda mustris. + Varundamise seaded + Taasta seaded + Varundamine ebaõnnestus + Väljuta seaded json faili + Importige seaded varukoopia Json-failist. Edu korral taaskäivitatakse rakendus. + Seadete taastamine varukoopiast ebaõnnestus + Reavahetus = uus lõik + Otsi sisust + Otsimise sügavus + Eiramiste loend + Ärge otsige määratud failidest ja kaustadest.\nKasutage eraldajana uut rida.\nKasutage täpsete kaustanimede jaoks jutumärke: \"Test\".\nVõi kasutage Regexi \'^[.].*\'\nNäited: ^\\..*\n \"test\"\n\"Test\"\n.*salajane.*\n.*VARUKOOPIA.*\n.*.ini + Regex otsing + Tõstutundlik + Lõpeta otsing pärast esimest leidu + Regex ei kõlba + Hoia mõlemad + Jäta vahele + Kirjuta üle + Hoia mõlemad (kõik) + Jäta vahele (kõik) + Kirjuta üle (kõik) + \'%s\' on juba asukohas %s olemas + Täiendavad valdkonnad ja ettevõtmised + Sisesta tühikuga eraldatud @valdkonnad ja +ettevõtmised. Need on alati nähtavad faili todo.txt sisestusdialoogides. + Piiramata + Sirvi ettevõtmise kaupa + Sirvi valdkonna kaupa + Sisesta ettevõtmised + Sisesta valdkonnad + Sirvi tegemisi + Sirvi tähtsuse järgi + Sirvi tähtaja järgi + Tähtaja ületanud + Tähtaeg täna + Tähtajani on veel aega + Lõpetatud + Täpsem eraldamine + Leia mistahes + Leia kõik + Märkmiku juure otsimine + Vikilinkide järgimiseks otsige dünaamiliselt faili notebook.zim, et tuvastada praeguse märkmiku juurkataloog. Märkige see, kui kasutate mitut zim-märkmikku või rakenduses määratud märkmikukataloog ei vasta teie zim-märkmikule. + Markoris jagatud teksti vorming/eesliide. Järgib Androidi SimpleDateFormat reegleid.\n\nKasutage jagatud teksti paigutamiseks kohahoidjat {{text}}. Kui pole määratud, lisatakse jagatud tekst ja vormingut kasutatakse prefiksina. + Jaga valitud vormingus + Manuste kausta nimi + Praeguse kausta alamkaust manuste hoiustamiseks. Kui jääb tühjaks, manused pannakse praegusesse kausta. + Vorminda sobivalt + Sisesta katkend + Viga: ei saa faili avatud. + Ilmnes viga: tekst kopeeriti lõikelauale. + Alla %d tähemärgiga faile ei salvestata automaatselt vältimaks andmete kadumist. + Täpsemalt tegevuste eraldamise päringukeelest]]> + Eralda diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 98e4d51666..96e640a0e2 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -29,7 +29,7 @@ work. If not, see . Flytt Kopier Info - Fil/mappe eksisterer allerede! Vennligst velg et annet navn + Filen/mappen finnes allerede! Vennligst velg et annet navn Importer fra enhet Importer Tilføy %s @@ -92,7 +92,7 @@ work. If not, see . Avslutt Angre Gjenta - Mor + Mer Notatblokk Hjelp Gjøremålsliste @@ -227,8 +227,8 @@ work. If not, see . Tastaturforslag forblir, rød understreking blir borte. Plassering Tekstlinjer - Tekstbokstaver - Tekst ord + Teksttegn + Tekstord Mappe Nylig viste dokumenter Detaljer @@ -243,18 +243,18 @@ work. If not, see . Matte Vis angitt YAML Front Matter-attributter på viste dokumenter. Angi nøkler adskilt med komma. La stå tomt for ingen eller bruk \'*\' for alle. \n\nHvis noen attributt er definert i dokumentet (dvs. title: \'Hei\') og det er {{ post.title }} i dokumentet ditt også erstattet. Du kan gjøre en egendefinert Front Matter overskrift på denne måten. Innholdsfortegnelse - Ymse + Diverse Foretrekk utsikt Ingen kalenderapp installert! Populære dokumenter Farge Null bredde område Grunnleggende fargevalg - Endrer bakgrunn og forgrunnsfarge i tekstbehandleren. Justerer app tema så tilgjengelig for lys og mørkt tema. Syntaksutheving er de samme som før. + Endrer bakgrunn og forgrunnsfarge i tekstbehandleren. Tilpasser seg til apptemaet, og er dermed tilgjengelig i lyst og mørkt tema. Syntaksutheving er de samme som før. Preset Forgrunn Bakgrunn - Sett forgrunn eller bakgrunnsfarge på tekst? Det er også mulig å sette inn heksadesimale fargekoder + Vil du velge forgrunns- eller bakgrunnsfarge på tekst? Det er også mulig å sette inn heksadesimale fargekoder. Type: Mappe - Mappen ble opprettet uten filtype @@ -284,10 +284,10 @@ work. If not, see . Appdata (privat) Appdata (SD kort) Intern lagring - Du kan åpne dokumentet fra hovedvisning på bunnen, filbrowseren eller startsiden. Det er også mulig å legge til tekst delt inn i Markor. + Du kan åpne dokumentet fra hovedvisningen på bunnen, filutforskeren, eller startsiden. Det er også mulig å legge til tekst delt inn i Markor. Notebook er mappen som Markor laster i filbrowseren når appen starter. Det er startmappen for filene. - QuickNote er det raskeste alternativet for å skrive ned notater. Det er en fil i Markdown format med standard plassering >Notebook/QuickNote. d<, du kan angi en egendefinert filstien i innstillingene. - Administrere oppgavene med ToDo. Det er en fil i todo.txt format med standardplassering >Notebook/todo. xt<, du kan angi en egendefinert filbane i innstillingene. + QuickNote er det raskeste alternativet for å skrive ned notater. Det er en fil i Markdown-format med standardplasseringen >Notebook/QuickNote.md<, du kan angi en egendefinert filbane i innstillingene. + Administrer oppgavene med To-Do. Det er en fil i «todo.txt»-format med standardplasseringen >Notebook/todo.txt<, du kan angi en egendefinert filbane i innstillingene. Navigasjonsbar farge Svart Hvit @@ -303,11 +303,11 @@ work. If not, see . App startmappe Tab width Antall mellomrom som skal vises i en fane - Den valgte filen kan være en klartekst fil. Vil du åpne den i editoren eller i en annen app?\n\nVil du ikke prøve å åpne binære filer. Hvis du er usikker, åpne med annen app. + Den valgte filen kan være en ren tekst-fil. Vil du åpne den i redigereren eller i en annen app?\n\n Ikke prøv å åpne binære filer. Hvis du er usikker, åpne med annen app. Liste over nylige filer Reload Bryt ord - Myk pause hvis tekst ikke passer til skjermens bredde. Elsk aktiver horisontal scrolling. + Bryt tekst hvis teksten ikke passer inn i skjermbredde. Hvis satt til av, benyttes loddrett skrolling. Rekursivt søk i gjeldende katalog. Åpne alltid med denne appen Åpne alltid filer med denne appen når listen inneholder filutvidelsen. Bruk \'None, .html, . ss , .js\' for eksempel hvis du vil redigere nettfiler og de uten filutvidelse. @@ -382,7 +382,7 @@ work. If not, see . Format for filbeskrivelse Formatet for beskrivelsen under hver fil i filnettleser. Følg reglene for Android, SimpleDateFormat med tillegg av FS for å vise filstørrelse. La være blank for å bruke standardformat for din lokalitet.\n\nEksempel input:\nFS yyyy MMM dd ht:mm:ss aa\nUtdataformat:\n30 KB 2020 Mar 20 11:24:52 PM Laster inn standardverdi - Fil innstillinger + Filinnstillinger Søk / erstatt Søk etter Erstatt med @@ -433,5 +433,5 @@ work. If not, see . Del inn - format Autokoformater Insert snippet - Oppnådd tekst: kopiert til utklippstavlen. + En feil oppstod: Teksten ble kopiert til utklippstavlen. diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index d1a8798a63..6df49270b0 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -192,6 +192,7 @@ work. If not, see . ପ୍ରଥମେ ଫୋଲ୍ଡର୍ ଅନ୍ତର୍ନିହିତ ଷ୍ଟୋରେଜ୍‌ ଆପଣ ତଳେଥିବା ମୁଖ୍ୟ ଦର୍ଶନ, ଫାଇଲ୍ ବ୍ରାଉଜର୍ କିମ୍ୱା ଉନ୍ମୋଚକ ରୁ ଡକ୍ୟୁମେଣ୍ଟ୍ ଖୋଲିପାରିବେ। Markorରେ ଅଂଶିଦାରୀ ପାଠ୍ୟ ଯୋଡ଼ିବାର ଏକ ବିକଳ୍ପ ମଧ୍ୟ ଅଛି। + ଦିଗଚଳନ ଦଣ୍ଡିକା ରଙ୍ଗ କଳା ଧଳା ଦର୍ଶନ diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 1de411868a..20cfab86d7 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -314,6 +314,7 @@ work. If not, see . Allista in sos documentos reghentes Torra a carrigare Acontzu de sas lìnias + Nùmeros de lìnia Mandat a suta su testu si cussu barigat sa mannària de s\'ischermu. Si nono abìlitat s\'iscurrimentu orizontale. Chirca ricursiva in sa cartella atuale. Aberi semper cun custa aplicatzione @@ -440,6 +441,8 @@ work. If not, see . Pro sighire sos ligàmenes wiki chirca in manera dinàmica su documentu notebook.zim pro identificare sa cartella de raighina pro sas notas atuales. Marca·lu si impreas prus blocos de notas zim o si sa cartella de su blocu de notas impostada in s\'aplicatzione non currispondet a su blocu de notas zim tuo. Formadu/Prefissu pro su testu cumpartzidu in Markor. Sighit sas règulas SimpleDateFormat de Android.\n\nImprea su sinnapostu {{text}} pro pònnere in logu su testu cumpartzidu. Si no est dislindadu su testu cumpartzidu benit postu in fundu e su formadu s\'impreat comente prefissu. Cumpartzi in - Formadu + Nùmene de sa cartella de sos alligados + Suta-cartella suta de sa cartella atuale in ue s\'anta a sarvare sos alligados. Si abarrat bòidu, sos alligados s\'ant a sarvare in sa cartella atuale. Formatatzione automàtica Inserta frammentu Errore: No at fatu a abèrrere su documentu. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e0fc815f7c..eb384ba242 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -72,6 +72,7 @@ work. If not, see . Вставити зображення Учасники Розташування сховища + Збережено до %s Обрати робочу директорію Ліцензії Журнал змін @@ -80,6 +81,7 @@ work. If not, see . Показати ліцензії сторонніх компонентів Змінити мову цієї програмки. Перезавантажте застосунок, щоб зміни запрацювали Мова + Для читання та запису файлів потрібен доступ до накопичувача Відкрити в Сортування Дата @@ -174,6 +176,7 @@ work. If not, see . Перемістити виконані задачі до заданого файлу в тій же директорії Сортування завдань за обраним порядком Спеціальна клавіша + Особливий зміст AsciiDoc До сторінки вище (Page Up) До сторінки нижче (Page Down) Перемістити текст на один рядок вище @@ -193,6 +196,10 @@ work. If not, see . Зірочка (*) Плюс (+) Markor може редагувати лише локальні документи доступні офлайн та не підтримує файлові менеджери, які не надають повний шлях до файлу. + Файл або тека не існують та не можуть бути створені + Дозволи + Повернути типові шляхи? + Дозвіл не надано Увага: Додатки з синхронізацією можуть розміщувати файли у власних директоріях і ці файли слід відкривати зі зміною директорії документів Markor\'а на відповідну або іншим файловим менеджером. Вертикальне вирівнювання Горизонтальне вирівнювання @@ -307,6 +314,7 @@ work. If not, see . Показати в нещодавніх документах Перезавантажити Перенесення рядків + Нумерація рядків Додавати м\'які переноси замість відображення смуги горизонтальної прокрутки, коли текст не вміщається у ширину екрану. Рекурсивний пошук у поточному каталозі. Завжди відкривати цією програмою @@ -426,6 +434,7 @@ work. If not, see . Сьогодні Термін дії в майбутньому Завершені + Розширені фільтри Збігів Відповідає всім Динамічний пошук кореневого блокноту diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2c1067a9c1..8865bcb63d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -441,7 +441,7 @@ work. If not, see . 为了跟随维基链接,动态地搜索notbook.zim文件来识别当前笔记本的根目录。 如果您使用多个zim笔记本或者应用程序中的笔记本目录与您的zim笔记本不对应,请选中此项。 分享到 Markor 的文本的格式/前缀。遵循 Android 的 SimpleDateFormat 规则。\n\n使用占位符 {{text}} 来放置分享的文本。如果未指定,分享的文本将附加在最后,格式为前缀。 分享到 - 格式 - 附加文件夹名 + 附件文件夹名 当前文件夹下保存附件的子文件夹。如留空,附件将被保存在当前文件夹中。 自动格式 插入片段 diff --git a/app/src/main/res/values/string-not_translatable.xml b/app/src/main/res/values/string-not_translatable.xml index cc78ddaaf4..9adcd8d422 100644 --- a/app/src/main/res/values/string-not_translatable.xml +++ b/app/src/main/res/values/string-not_translatable.xml @@ -157,8 +157,6 @@ work. If not, see . pref_key__share_into__quicknote pref_key__share_into__todo pref_key__share_into__clipboard - pref_key__share_into__existing_document - pref_key__share_into__create_document pref_key__share_into__reshare pref_key__share_into__calendar_event pref_key__more_info__settings @@ -185,6 +183,7 @@ work. If not, see . pref_key__recent_documents pref_key__popular_documents pref_key__favourite_files + pref_key__select_create_document pref_key__share_into__open_in_browser pref_key__inject_to_head pref_key__inject_to_body diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aaf5410a9e..47e825e369 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -225,6 +225,7 @@ work. If not, see . Edit text in the center of the screen Clipboard Select existing document + Select or create document Open Source Licenses Rate this app Translate diff --git a/app/src/main/res/xml/prefactions_share_into.xml b/app/src/main/res/xml/prefactions_share_into.xml index f427b5ed5c..7d1283ddcd 100644 --- a/app/src/main/res/xml/prefactions_share_into.xml +++ b/app/src/main/res/xml/prefactions_share_into.xml @@ -39,6 +39,11 @@ + + - - diff --git a/app/thirdparty/java/other/writeily/widget/WrWidgetConfigure.java b/app/thirdparty/java/other/writeily/widget/WrWidgetConfigure.java index 555e5de21f..27670ea7e5 100644 --- a/app/thirdparty/java/other/writeily/widget/WrWidgetConfigure.java +++ b/app/thirdparty/java/other/writeily/widget/WrWidgetConfigure.java @@ -67,7 +67,13 @@ public void onFsViewerConfig(GsFileBrowserOptions.Options dopt) { dopt.titleText = R.string.select_folder; dopt.rootFolder = ApplicationObject.settings().getNotebookDirectory(); } - }, fragManager, this); + + @Override + public void onFsViewerCancel(final String request) { + finish(); + } + + }, getSupportFragmentManager(), this); } public static File getWidgetDirectory(final Context context, int id) {