android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java | 11 + android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java | 57 +++++++--- 2 files changed, 54 insertions(+), 14 deletions(-)
New commits: commit 10c695cfbbb8a9072388f5f0a03f557aa51955cf Author: mert <mert.tu...@collabora.com> AuthorDate: Tue Mar 10 19:08:11 2020 +0300 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Mon Mar 16 15:50:05 2020 +0100 android: fix crash on removed/renamed file on recent files Change-Id: Iedeaba896ecca17c0c7e5c038b1c370b72484c68 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90290 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Mert Tümer <mert.tu...@collabora.com> diff --git a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java index 1ef2acc45..bd9116c94 100644 --- a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java +++ b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java @@ -113,7 +113,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings public static final String EXPLORER_VIEW_TYPE_KEY = "EXPLORER_VIEW_TYPE"; public static final String EXPLORER_PREFS_KEY = "EXPLORER_PREFS"; public static final String SORT_MODE_KEY = "SORT_MODE"; - private static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENTS_LIST"; + public static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENTS_LIST"; private static final String ENABLE_SHOW_HIDDEN_FILES_KEY = "ENABLE_SHOW_HIDDEN_FILES"; public static final String NEW_FILE_PATH_KEY = "NEW_FILE_PATH_KEY"; @@ -208,6 +208,12 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings recentRecyclerView.setAdapter(new RecentFilesAdapter(this, recentUris)); } + /** access shared preferences from the activity instance */ + public SharedPreferences getPrefs() + { + return prefs; + } + /** Create the Navigation menu and set up the actions and everything there. */ public void setupNavigationDrawer() { drawerLayout = findViewById(R.id.drawer_layout); @@ -986,6 +992,9 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings Uri shortcutUri = Uri.parse(pathString); String filename = RecentFilesAdapter.getUriFilename(this, shortcutUri); + if (filename == null) + continue; + Intent intent = getIntentToEdit(shortcutUri); ShortcutInfo.Builder builder = new ShortcutInfo.Builder(this, filename) .setShortLabel(filename) diff --git a/android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java b/android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java index 4a06899a9..371b7ab03 100644 --- a/android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java +++ b/android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java @@ -22,6 +22,7 @@ import android.widget.TextView; import org.libreoffice.androidapp.R; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -34,11 +35,11 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol private final long MB = 1048576; private LibreOfficeUIActivity mActivity; - private List<Uri> recentUris; + private ArrayList<RecentFile> recentFiles; RecentFilesAdapter(LibreOfficeUIActivity activity, List<Uri> recentUris) { this.mActivity = activity; - this.recentUris = recentUris; + initRecentFiles(recentUris); } @Override @@ -47,6 +48,26 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol return new ViewHolder(item); } + /** Validate uris in case of removed/renamed documents and return RecentFile ArrayList from the valid uris */ + public void initRecentFiles(List<Uri> recentUris) { + this.recentFiles = new ArrayList<>(); + boolean invalidUriFound = false; + String joined = ""; + for (Uri u: recentUris) { + String filename = getUriFilename(mActivity, u); + if (null != filename) { + long length = getUriFileLength(mActivity, u); + recentFiles.add(new RecentFile(u, filename, length)); + joined = joined.concat(u.toString()+"\n"); + } + else + invalidUriFound = true; + } + if (invalidUriFound) { + mActivity.getPrefs().edit().putString(mActivity.RECENT_DOCUMENTS_KEY, joined).apply(); + } + } + /** Return the filename of the given Uri. */ public static String getUriFilename(Activity activity, Uri uri) { String filename = ""; @@ -60,11 +81,8 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol cursor.close(); } - if (filename.isEmpty()) { - List<String> segments = uri.getPathSegments(); - if (segments.size() > 0) - filename = segments.get(segments.size() - 1); - } + if (filename.isEmpty()) + return null; return filename; } @@ -91,17 +109,18 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol @Override public void onBindViewHolder(ViewHolder holder, int position) { - final Uri uri = recentUris.get(position); + final RecentFile file = recentFiles.get(position); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - mActivity.open(uri); + mActivity.open(file.uri); } }); - String filename = getUriFilename(mActivity, uri); - long length = getUriFileLength(mActivity, uri); + String filename = file.filename; + long length = file.fileLength; + // TODO Date not avaiable now //Date date = null; @@ -155,12 +174,12 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol @Override public int getItemCount() { - if (recentUris.size() == 0) { + if (recentFiles.size() == 0) { mActivity.noRecentItemsTextView.setVisibility(View.VISIBLE); } else { mActivity.noRecentItemsTextView.setVisibility(View.GONE); } - return recentUris.size(); + return recentFiles.size(); } class ViewHolder extends RecyclerView.ViewHolder { @@ -180,6 +199,18 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol } } } + /** Cache the name & size so that we don't have ask later. */ + private class RecentFile { + public Uri uri; + public String filename; + public long fileLength; + + public RecentFile(Uri uri, String filename, long fileLength) { + this.uri = uri; + this.filename = filename; + this.fileLength = fileLength; + } + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits