[Libreoffice-commits] online.git: android/app
Jan Holesovsky (via logerrit)
logerrit at kemper.freedesktop.org
Sat Feb 22 07:29:40 UTC 2020
android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java | 67 ++++++----
android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java | 59 +++++---
2 files changed, 80 insertions(+), 46 deletions(-)
New commits:
commit 59296ecbaab04a1dfd6ba5a80ff108fa6e65dc4c
Author: Jan Holesovsky <kendy at collabora.com>
AuthorDate: Fri Feb 21 18:38:38 2020 +0100
Commit: Jan Holesovsky <kendy at collabora.com>
CommitDate: Sat Feb 22 08:29:21 2020 +0100
android shell: Correct names for the Dynamic shortcuts + make them read/write.
Dynamic shortcuts == the long press on the app icon to edit recent
documents.
Also fixes crashing with too many recent documents.
Change-Id: I844e60de6523039889539cfe1e3c1bb70dc062bc
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89235
Tested-by: Jan Holesovsky <kendy at collabora.com>
Reviewed-by: Jan Holesovsky <kendy at 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 a4a69b2fc..4651a85bb 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
@@ -87,6 +87,8 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import static androidx.core.content.pm.ShortcutManagerCompat.getMaxShortcutCountPerActivity;
+
public class LibreOfficeUIActivity extends AppCompatActivity implements SettingsListenerModel.OnSettingsPreferenceChangedListener {
private String LOGTAG = LibreOfficeUIActivity.class.getSimpleName();
private SharedPreferences prefs;
@@ -524,13 +526,8 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
prefs.edit().putString(EXPLORER_VIEW_TYPE_KEY, LIST_VIEW).apply();
}
- /** Start editing of the given Uri. */
- public void open(final Uri uri) {
- if (uri == null)
- return;
-
- addDocumentToRecents(uri);
-
+ /** Build Intent to edit a Uri. */
+ public Intent getIntentToEdit(Uri uri) {
Intent i = new Intent(Intent.ACTION_EDIT, uri);
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
@@ -539,6 +536,17 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
ComponentName componentName = new ComponentName(packageName, LOActivity.class.getName());
i.setComponent(componentName);
+ return i;
+ }
+
+ /** Start editing of the given Uri. */
+ public void open(final Uri uri) {
+ if (uri == null)
+ return;
+
+ addDocumentToRecents(uri);
+
+ Intent i = getIntentToEdit(uri);
startActivityForResult(i, LO_ACTIVITY_REQUEST_CODE);
}
@@ -949,19 +957,27 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
String joined = TextUtils.join("\n", recentsArrayList);
prefs.edit().putString(RECENT_DOCUMENTS_KEY, joined).apply();
- //update app shortcuts (7.0 and above)
+ // Update app shortcuts (7.0 and above)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N_MR1) {
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
- //Remove all shortcuts, and apply new ones.
+ // Remove all shortcuts, and apply new ones.
shortcutManager.removeAllDynamicShortcuts();
ArrayList<ShortcutInfo> shortcuts = new ArrayList<ShortcutInfo>();
+ int i = 0;
for (String pathString : recentsArrayList) {
if (pathString.isEmpty())
continue;
- //find the appropriate drawable
+ // I cannot see more than 3 anyway, and with too many we get
+ // an exception, so let's limit to 3
+ if (i >= 3 || i >= getMaxShortcutCountPerActivity(this))
+ break;
+
+ ++i;
+
+ // Find the appropriate drawable
int drawable = 0;
switch (FileUtilities.getType(pathString)) {
case FileUtilities.DOC:
@@ -978,27 +994,26 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
break;
}
- // TODO better way to get the filename for content: uris
- File file = new File(pathString);
+ Uri shortcutUri = Uri.parse(pathString);
+ String filename = RecentFilesAdapter.getUriFilename(this, shortcutUri);
- //for some reason, getName uses %20 instead of space
- String filename = file.getName().replace("%20", " ");
-
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(pathString));
- String packageName = this.getApplicationContext().getPackageName();
- ComponentName componentName = new ComponentName(packageName, LOActivity.class.getName());
- intent.setComponent(componentName);
-
- ShortcutInfo shortcut = new ShortcutInfo.Builder(this, filename)
+ Intent intent = getIntentToEdit(shortcutUri);
+ ShortcutInfo.Builder builder = new ShortcutInfo.Builder(this, filename)
.setShortLabel(filename)
.setLongLabel(filename)
- .setIcon(Icon.createWithResource(this, drawable))
- .setIntent(intent)
- .build();
+ .setIntent(intent);
+
+ if (drawable != 0)
+ builder.setIcon(Icon.createWithResource(this, drawable));
- shortcuts.add(shortcut);
+ shortcuts.add(builder.build());
+ }
+
+ try {
+ shortcutManager.setDynamicShortcuts(shortcuts);
+ } catch (Exception e) {
+ Log.e(LOGTAG, "Failed to set the dynamic shortcuts: " + e.getMessage());
}
- shortcutManager.setDynamicShortcuts(shortcuts);
}
}
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 7c098af80..df162477b 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
@@ -9,6 +9,7 @@
package org.libreoffice.androidapp.ui;
+import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
@@ -46,29 +47,13 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol
return new ViewHolder(item);
}
- @Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- final Uri uri = recentUris.get(position);
-
- holder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- mActivity.open(uri);
- }
- });
-
+ /** Return the filename of the given Uri. */
+ public static String getUriFilename(Activity activity, Uri uri) {
String filename = "";
- long length = 0;
- // TODO Date not avaiable now
- //Date date = null;
-
- // Try to get it from the content resolver first, fallback to path
- Cursor cursor = mActivity.getContentResolver().query(uri, null, null, null, null);
+ Cursor cursor = activity.getContentResolver().query(uri, null, null, null, null);
try {
- if (cursor != null && cursor.moveToFirst()) {
+ if (cursor != null && cursor.moveToFirst())
filename = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
- length = cursor.getLong(cursor.getColumnIndex(OpenableColumns.SIZE));
- }
} finally {
if (cursor != null)
cursor.close();
@@ -80,10 +65,44 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol
filename = segments.get(segments.size() - 1);
}
+ return filename;
+ }
+
+ /** Return the size of the given Uri. */
+ public static long getUriFileLength(Activity activity, Uri uri) {
+ long length = 0;
+ Cursor cursor = activity.getContentResolver().query(uri, null, null, null, null);
+ try {
+ if (cursor != null && cursor.moveToFirst())
+ length = cursor.getLong(cursor.getColumnIndex(OpenableColumns.SIZE));
+ } finally {
+ if (cursor != null)
+ cursor.close();
+ }
+
if (length == 0) {
// TODO maybe try to get File & return File.length()?
}
+ return length;
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder holder, int position) {
+ final Uri uri = recentUris.get(position);
+
+ holder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mActivity.open(uri);
+ }
+ });
+
+ String filename = getUriFilename(mActivity, uri);
+ long length = getUriFileLength(mActivity, uri);
+ // TODO Date not avaiable now
+ //Date date = null;
+
holder.filenameView.setText(filename);
int compoundDrawableInt = 0;
More information about the Libreoffice-commits
mailing list