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

Reply via email to