android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java | 93 +++++----- android/app/src/main/java/org/libreoffice/androidapp/ui/RecentFilesAdapter.java | 12 + android/app/src/main/res/drawable/ic_more_vert_black_24dp.xml | 9 android/app/src/main/res/layout/file_explorer_grid_item.xml | 49 +++-- android/app/src/main/res/layout/file_list_item.xml | 9 android/app/src/main/res/menu/context_menu.xml | 2 android/app/src/main/res/values/strings.xml | 2 7 files changed, 119 insertions(+), 57 deletions(-)
New commits: commit c07f4fb97492a5b833d44e2750c4fc5ca6879c7a Author: mert <mert.tu...@collabora.com> AuthorDate: Tue Mar 24 01:31:32 2020 +0300 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Fri Mar 27 15:32:59 2020 +0100 android: added context menu for the files Change-Id: Iab18379797917ce2e8ab25ed428f6a806f5f4e7e Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90944 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.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 bd9116c94..c1d9df818 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 @@ -10,7 +10,6 @@ package org.libreoffice.androidapp.ui; import android.Manifest; -import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -22,6 +21,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; +import android.database.Cursor; import android.graphics.drawable.Icon; import android.hardware.usb.UsbManager; import android.net.Uri; @@ -29,6 +29,8 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.DocumentsContract; +import android.provider.MediaStore; +import android.provider.OpenableColumns; import android.provider.Settings; import android.text.Editable; import android.text.TextUtils; @@ -77,6 +79,7 @@ import java.util.List; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; @@ -102,7 +105,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings FileFilter fileFilter; FilenameFilter filenameFilter; - private int currentlySelectedFile; + private Uri currentlySelectedFile; /** The document that is being edited - to know what to save back to cloud. */ //private IFile mCurrentDocument; @@ -386,8 +389,8 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings updateRecentFiles(); - // TODO allow context menu for the various files - for Open and Share - //registerForContextMenu(fileRecyclerView); + // allow context menu for the various files - for Open and Share + registerForContextMenu(recentRecyclerView); setupNavigationDrawer(); } @@ -510,11 +513,25 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings case R.id.context_menu_share: share(currentlySelectedFile); return true; + case R.id.context_menu_remove_from_list: + removeFromList(currentlySelectedFile); + return true; default: return super.onContextItemSelected(item); } } + public void openContextMenu(View view, Uri uri) { + + this.currentlySelectedFile = uri; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + view.showContextMenu(view.getPivotX(), view.getPivotY()); + } + else + view.showContextMenu(); + } + public boolean isViewModeList() { return prefs.getString(EXPLORER_VIEW_TYPE_KEY, GRID_VIEW).equals(LIST_VIEW); } @@ -614,44 +631,42 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings } /** Context menu item handling. */ - private void share(int position) { - /* - new AsyncTask<IFile, Void, File>() { - @Override - protected File doInBackground(IFile... document) { - // this operation may imply network access and must be run in - // a different thread - try { - return document[0].getDocument(); - } catch (final RuntimeException e) { - final Activity activity = LibreOfficeUIActivity.this; - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(activity, e.getMessage(), - Toast.LENGTH_SHORT).show(); - } - }); - Log.e(LOGTAG, e.getMessage(), e.getCause()); - return null; - } - } + private void share(Uri uri) { + if (uri == null) + return; - @Override - protected void onPostExecute(File file) { - if (file != null) { - Intent intentShareFile = new Intent(Intent.ACTION_SEND); - Uri finalDocUri = FileProvider.getUriForFile(LibreOfficeUIActivity.this, - LibreOfficeUIActivity.this.getApplicationContext().getPackageName() + ".fileprovider", - file); - intentShareFile.putExtra(Intent.EXTRA_STREAM, finalDocUri); - intentShareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intentShareFile.setDataAndType(finalDocUri, LibreOfficeUIActivity.this.getContentResolver().getType(finalDocUri)); - LibreOfficeUIActivity.this.startActivity(Intent.createChooser(intentShareFile, LibreOfficeUIActivity.this.getString(R.string.share_document))); + Intent intentShareFile = new Intent(Intent.ACTION_SEND); + intentShareFile.putExtra(Intent.EXTRA_STREAM, uri); + intentShareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intentShareFile.setDataAndType(uri, LibreOfficeUIActivity.this.getContentResolver().getType(uri)); + LibreOfficeUIActivity.this.startActivity(Intent.createChooser(intentShareFile, LibreOfficeUIActivity.this.getString(R.string.share_document))); + } + + /** Context menu item handling. */ + private void removeFromList(Uri uri) { + if (uri == null) + return; + + String[] recentFileStrings = getRecentDocuments(); + String joined = ""; + final ArrayList<Uri> recentUris = new ArrayList<Uri>(); + + for (String recentFileString : recentFileStrings) { + try { + if (!uri.toString().equals(recentFileString)) { + recentUris.add(Uri.parse(recentFileString)); + joined = joined.concat(recentFileString+"\n"); } + } catch (RuntimeException e) { + e.printStackTrace(); } - }.execute(filePaths.get(position)); - */ + } + + if (!joined.isEmpty()) { + prefs.edit().putString(RECENT_DOCUMENTS_KEY, joined).apply(); + } + + recentRecyclerView.setAdapter(new RecentFilesAdapter(this, recentUris)); } /** Setup the toolbar's menu. */ 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 371b7ab03..380b4a64f 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 @@ -111,13 +111,20 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol public void onBindViewHolder(ViewHolder holder, int position) { final RecentFile file = recentFiles.get(position); - holder.itemView.setOnClickListener(new View.OnClickListener() { + holder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mActivity.open(file.uri); } }); + holder.fileActionsImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mActivity.openContextMenu(view, file.uri); + } + }); + String filename = file.filename; long length = file.fileLength; @@ -185,12 +192,13 @@ class RecentFilesAdapter extends RecyclerView.Adapter<RecentFilesAdapter.ViewHol class ViewHolder extends RecyclerView.ViewHolder { TextView filenameView, fileSizeView, fileSizeUnitView/*, fileDateView*/; - ImageView imageView; + ImageView imageView, fileActionsImageView; ViewHolder(View itemView) { super(itemView); this.filenameView = itemView.findViewById(R.id.file_item_name); this.imageView = itemView.findViewById(R.id.file_item_icon); + this.fileActionsImageView = itemView.findViewById(R.id.file_actions_button); // Check if view mode is List, only then initialise Size and Date field if (mActivity.isViewModeList()) { fileSizeView = itemView.findViewById(R.id.file_item_size); diff --git a/android/app/src/main/res/drawable/ic_more_vert_black_24dp.xml b/android/app/src/main/res/drawable/ic_more_vert_black_24dp.xml new file mode 100644 index 000000000..5176d8a4b --- /dev/null +++ b/android/app/src/main/res/drawable/ic_more_vert_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> +</vector> diff --git a/android/app/src/main/res/layout/file_explorer_grid_item.xml b/android/app/src/main/res/layout/file_explorer_grid_item.xml index d36de5d8a..631168050 100644 --- a/android/app/src/main/res/layout/file_explorer_grid_item.xml +++ b/android/app/src/main/res/layout/file_explorer_grid_item.xml @@ -6,12 +6,12 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="4dp" - android:paddingBottom="4dp" - android:orientation="vertical" > + android:orientation="vertical" + android:padding="4dp"> <ImageView android:id="@+id/file_item_icon" @@ -21,22 +21,39 @@ android:contentDescription="@string/file_icon_desc" android:scaleType="fitCenter" tools:src="@drawable/ic_folder_black_24dp" - tools:tint="@color/text_color_secondary"/> + tools:tint="@color/text_color_secondary" /> - <TextView - android:id="@+id/file_item_name" + <LinearLayout android:layout_width="match_parent" - android:layout_height="40dp" + android:layout_height="match_parent" android:layout_gravity="center" android:layout_marginTop="4dp" - android:gravity="center_vertical" - android:maxLines="2" - android:paddingLeft="10dp" - android:paddingRight="10dp" - android:textAlignment="center" - android:textColor="@android:color/secondary_text_light" - android:textSize="15sp" - android:textStyle="bold" - tools:text="file or dirname"/> + android:orientation="horizontal" + android:paddingLeft="24dp"> + + <TextView + android:id="@+id/file_item_name" + android:layout_width="0dp" + android:layout_height="40dp" + android:layout_gravity="center" + android:layout_weight="1" + android:ellipsize="end" + android:gravity="center_vertical" + android:maxLines="2" + android:textAlignment="center" + android:textColor="@android:color/secondary_text_light" + android:textSize="15sp" + android:textStyle="bold" + tools:text="file or dirname" /> + + <ImageView + android:id="@+id/file_actions_button" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_gravity="center" + android:contentDescription="@string/file_actions_icon_desc" + android:scaleType="fitStart" + app:srcCompat="@drawable/ic_more_vert_black_24dp" /> + </LinearLayout> </LinearLayout> diff --git a/android/app/src/main/res/layout/file_list_item.xml b/android/app/src/main/res/layout/file_list_item.xml index 6164a6189..d128d913c 100644 --- a/android/app/src/main/res/layout/file_list_item.xml +++ b/android/app/src/main/res/layout/file_list_item.xml @@ -6,6 +6,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="48dp" @@ -53,6 +54,14 @@ android:layout_width="30dp" android:layout_height="match_parent" tools:text="B" /> + + <ImageView + android:id="@+id/file_actions_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:contentDescription="@string/file_actions_icon_desc" + app:srcCompat="@drawable/ic_more_vert_black_24dp" /> <!--TextView android:id="@+id/file_item_date" tools:text="date/time" diff --git a/android/app/src/main/res/menu/context_menu.xml b/android/app/src/main/res/menu/context_menu.xml index 43824875d..3fb2a5c03 100644 --- a/android/app/src/main/res/menu/context_menu.xml +++ b/android/app/src/main/res/menu/context_menu.xml @@ -4,4 +4,6 @@ android:title="@string/open"/> <item android:id="@+id/context_menu_share" android:title="@string/share"/> + <item android:id="@+id/context_menu_remove_from_list" + android:title="@string/remove_from_list"/> </menu> diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 29213c2df..8368c33fc 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -49,6 +49,7 @@ <string name="sort_oldest">Oldest first</string> <string name="sort_newest">Newest first</string> <string name="file_icon_desc">File icon</string> + <string name="file_actions_icon_desc">File actions</string> <string name="title_recents">Recent files</string> <string name="title_browser">All files</string> <!-- Pref keys as resources ; Not currently used --> @@ -57,6 +58,7 @@ <string name="action_settings">Settings</string> <string name="open">Open</string> <string name="share">Share</string> + <string name="remove_from_list">Remove from the list</string> <string name="share_via">Share via</string> <!-- Document browser filters --> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits