summaryrefslogtreecommitdiff
path: root/android/source
diff options
context:
space:
mode:
Diffstat (limited to 'android/source')
-rw-r--r--android/source/res/layout/activity_document_browser.xml4
-rw-r--r--android/source/res/layout/file_explorer_grid_item.xml5
-rw-r--r--android/source/src/java/org/libreoffice/ui/GridItemAdapter.java129
-rw-r--r--android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java286
4 files changed, 157 insertions, 267 deletions
diff --git a/android/source/res/layout/activity_document_browser.xml b/android/source/res/layout/activity_document_browser.xml
index 675c1471e815..2c1874459b19 100644
--- a/android/source/res/layout/activity_document_browser.xml
+++ b/android/source/res/layout/activity_document_browser.xml
@@ -23,8 +23,8 @@
<!-- The content -->
- <LinearLayout
- android:id="@+id/browser_main_content"
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/file_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_normal"
diff --git a/android/source/res/layout/file_explorer_grid_item.xml b/android/source/res/layout/file_explorer_grid_item.xml
index 69e3c0ca928d..5604fe282a5a 100644
--- a/android/source/res/layout/file_explorer_grid_item.xml
+++ b/android/source/res/layout/file_explorer_grid_item.xml
@@ -8,8 +8,9 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="10dp"
+ android:layout_height="wrap_content"
+ android:paddingTop="4dp"
+ android:paddingBottom="4dp"
android:orientation="vertical" >
<ImageView
diff --git a/android/source/src/java/org/libreoffice/ui/GridItemAdapter.java b/android/source/src/java/org/libreoffice/ui/GridItemAdapter.java
deleted file mode 100644
index 6385769ca719..000000000000
--- a/android/source/src/java/org/libreoffice/ui/GridItemAdapter.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-package org.libreoffice.ui;
-
-import android.content.Context;
-import android.support.v4.content.ContextCompat;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import org.libreoffice.R;
-import org.libreoffice.storage.IFile;
-
-import java.util.List;
-
-public class GridItemAdapter extends BaseAdapter {
- Context mContext;
- List<IFile> filePaths;
- IFile currentDirectory;
- String LOGTAG = "GridItemAdapter";
-
- public GridItemAdapter(Context mContext, IFile currentDirectory,
- List<IFile> filteredFiles) {
- this.mContext = mContext;
- this.currentDirectory = currentDirectory;
- filePaths = filteredFiles;
- Log.d(LOGTAG, "currentDirectory.getName(): " + currentDirectory.getName());
- }
-
- public int getCount() {
- return filePaths != null ? filePaths.size() : 0;
- }
-
- public Object getItem(int position) {
- return null; //filePaths[ position ];
- }
-
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
-
- Context context = inflater.getContext();
-
- View gridView;
-
- if (convertView == null) {
- gridView = new View(mContext);
- } else {
- gridView = convertView;
- }
-
- // get layout from mobile.xml
- gridView = inflater.inflate(R.layout.file_explorer_grid_item, null);
-
- // set value into textview
- TextView textView = (TextView) gridView
- .findViewById(R.id.grid_item_label);
- textView.setText(filePaths.get(position).getName());
- // set image based on selected text
- ImageView imageView = (ImageView) gridView
- .findViewById(R.id.grid_item_image);
- if (filePaths.get(position).isDirectory()) { // Is a folder
- // Default view is a generic folder icon.
- imageView.setImageResource(R.drawable.ic_folder_black_24dp);
- //for tint
- imageView.setColorFilter(ContextCompat.getColor(context,R.color.text_color_secondary));
-
- } else {
- /*
- File thumbnailFile = new File( filePaths[position].getParent() , "."
- + filePaths[position].getName().split("[.]")[0] + ".png");
- BitmapFactory factory = new BitmapFactory();
- Bitmap thumb = factory.decodeFile( thumbnailFile.getAbsolutePath() );
- if(thumb != null){
- Log.i( "GRID" , "true" );
- }else{
- Log.i( "GRID" , thumbnailFile.getAbsolutePath() );
- }
- */
- switch (FileUtilities.getType(filePaths.get(position).getName()))
- {
- case FileUtilities.DOC:
- /*
- if( thumb != null){
- imageView.setImageBitmap( thumb );
- break;
- }
- */
- imageView.setImageResource(R.drawable.writer);
- break;
- case FileUtilities.CALC:
- imageView.setImageResource(R.drawable.calc);
- break;
- case FileUtilities.DRAWING:
- imageView.setImageResource(R.drawable.draw);
- break;
- case FileUtilities.IMPRESS:
- imageView.setImageResource(R.drawable.impress);
- break;
- case FileUtilities.UNKNOWN:
- default:
- break; // FIXME something prettier ?
- }
- }
- return gridView;
- }
-
- public void update() {
- this.notifyDataSetChanged();
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
index 0f4bf0606d8a..67a848086353 100644
--- a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
+++ b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
@@ -14,7 +14,6 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.database.DataSetObserver;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -26,6 +25,9 @@ import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatSpinner;
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.ContextMenu;
@@ -39,13 +41,8 @@ import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.AdapterView.AdapterContextMenuInfo;
-import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
-import android.widget.GridView;
import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
@@ -85,6 +82,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
private IDocumentProvider documentProvider;
private IFile homeDirectory;
private IFile currentDirectory;
+ private int currentlySelectedFile;
private static final String CURRENT_DIRECTORY_KEY = "CURRENT_DIRECTORY";
private static final String DOC_PROIVDER_KEY = "CURRENT_DOCUMENT_PROVIDER";
@@ -99,8 +97,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
private NavigationView navigationDrawer;
private ActionBarDrawerToggle drawerToggle;
- GridView gv;
- ListView lv;
+ RecyclerView fileRecyclerView;
private final LOAbout mAbout;
private boolean canQuit = false;
@@ -122,8 +119,8 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
readPreferences();
// init UI and populate with contents from the provider
- createUI();
switchToDocumentProvider(documentProviderFactory.getDefaultProvider());
+ createUI();
}
public void createUI() {
@@ -159,27 +156,9 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
});
}
-
- LinearLayout content = (LinearLayout) findViewById(R.id.browser_main_content);
- if (viewMode == GRID_VIEW) {
- // code to make a grid view
- getLayoutInflater().inflate(R.layout.file_grid, content);
- gv = (GridView)findViewById(R.id.file_explorer_grid_view);
- gv.setOnItemClickListener(new OnItemClickListener() {
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- open(position);
- }
- });
- openDirectory(currentDirectory);
- registerForContextMenu(gv);
- } else {
- getLayoutInflater().inflate(R.layout.file_list, content);
- lv = (ListView)findViewById(R.id.file_explorer_list_view);
- lv.setClickable(true);
- openDirectory(currentDirectory);
- registerForContextMenu(lv);
- }
+ fileRecyclerView = (RecyclerView) findViewById(R.id.file_recycler_view);
+ openDirectory(currentDirectory);
+ registerForContextMenu(fileRecyclerView);
//Setting up navigation drawer
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
@@ -268,11 +247,11 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
FileUtilities.sortFiles(filePaths, sortMode);
// refresh view
if (viewMode == GRID_VIEW) {
- gv.setAdapter(new GridItemAdapter(getApplicationContext(),
- currentDirectory, filePaths));
+ fileRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
+ fileRecyclerView.setAdapter(new GridItemAdapter(this, filePaths));
} else {
- lv.setAdapter(new ListItemAdapter(getApplicationContext(),
- filePaths));
+ fileRecyclerView.setLayoutManager(new LinearLayoutManager(this));
+ fileRecyclerView.setAdapter(new ListItemAdapter(this, filePaths));
}
// close drawer if it was open
drawerLayout.closeDrawer(navigationDrawer);
@@ -315,14 +294,12 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
@Override
public boolean onContextItemSelected(MenuItem item) {
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
- .getMenuInfo();
switch (item.getItemId()) {
case R.id.context_menu_open:
- open(info.position);
+ open(currentlySelectedFile);
return true;
case R.id.context_menu_share:
- share(info.position);
+ share(currentlySelectedFile);
return true;
default:
return super.onContextItemSelected(item);
@@ -734,153 +711,194 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
return (int) (dp * scale + 0.5f);
}
- class ListItemAdapter implements ListAdapter{
- private Context mContext;
+ class ListItemAdapter extends RecyclerView.Adapter<ListItemAdapter.ViewHolder> {
+
+ private Activity mActivity;
private List<IFile> filePaths;
private final long KB = 1024;
private final long MB = 1048576;
- public ListItemAdapter(Context mContext, List<IFile> filePaths) {
- this.mContext = mContext;
+ ListItemAdapter(Activity activity, List<IFile> filePaths) {
+ this.mActivity = activity;
this.filePaths = filePaths;
}
- public int getCount() {
- return filePaths != null ? filePaths.size() : 0;
- }
-
- public Object getItem(int arg0) {
- return null;
- }
-
- public long getItemId(int arg0) {
- return 0;
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View item = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.file_list_item, parent, false);
+ return new ViewHolder(item);
}
- public int getItemViewType(int arg0) {
- return 0;
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
-
- Context context = inflater.getContext();
-
- View listItem;
+ @Override
+ public void onBindViewHolder(final ViewHolder holder, final int position) {
+ final IFile file = filePaths.get(position);
- if (convertView == null) {
- listItem = new View(mContext);
- listItem = inflater.inflate(R.layout.file_list_item, null);
- } else {
- listItem = convertView;
- }
- final int pos = position;
- listItem.setClickable(true);
- listItem.setOnClickListener(new OnClickListener() {
-
- public void onClick(View v) {
- open(pos);
+ holder.itemView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ open(position);
}
});
- listItem.setOnLongClickListener(new OnLongClickListener() {
+ holder.itemView.setOnLongClickListener(new OnLongClickListener() {
@Override
- public boolean onLongClick(View v) {
- // workaround to show the context menu:
- // prevent onClickListener from getting this event
+ public boolean onLongClick(View view) {
+ //to be picked out by floating context menu (workaround-ish)
+ currentlySelectedFile = position;
+ //must return false so the click is not consumed
return false;
}
-
});
+ holder.filenameView.setText(file.getName());
-
- // set value into textview
- TextView filename = (TextView) listItem.findViewById(R.id.file_list_item_name);
- filename.setText(filePaths.get(position).getName());
- //filename.setClickable(true);
-
- TextView fileSize = (TextView) listItem.findViewById(R.id.file_list_item_size);
- //TODO Give size in KB , MB as appropriate.
- String size = "0B";
- long length = filePaths.get(position).getSize();
- if (length < KB){
- size = Long.toString(length) + "B";
- }
- if (length >= KB && length < MB){
- size = Long.toString(length/KB) + "KB";
- }
- if (length >= MB){
- size = Long.toString(length/MB) + "MB";
+ if (!file.isDirectory()) {
+ String size;
+ long length = filePaths.get(position).getSize();
+ if (length < KB){
+ size = Long.toString(length) + "B";
+ } else if (length < MB){
+ size = Long.toString(length/KB) + "KB";
+ } else {
+ size = Long.toString(length/MB) + "MB";
+ }
+ holder.fileSizeView.setText(size);
}
- fileSize.setText(size);
- //fileSize.setClickable(true);
-
- TextView fileDate = (TextView) listItem.findViewById(R.id.file_list_item_date);
SimpleDateFormat df = new SimpleDateFormat("dd MMM yyyy hh:ss");
- Date date = filePaths.get(position).getLastModified();
+ Date date = file.getLastModified();
//TODO format date
- fileDate.setText(df.format(date));
+ holder.fileDateView.setText(df.format(date));
- // set image based on selected text
- ImageView imageView = (ImageView) listItem.findViewById(R.id.file_list_item_icon);
- switch (FileUtilities.getType(filePaths.get(position).getName()))
- {
+ switch (FileUtilities.getType(file.getName())) {
case FileUtilities.DOC:
- imageView.setImageResource(R.drawable.writer);
+ holder.iconView.setImageResource(R.drawable.writer);
break;
case FileUtilities.CALC:
- imageView.setImageResource(R.drawable.calc);
+ holder.iconView.setImageResource(R.drawable.calc);
break;
case FileUtilities.DRAWING:
- imageView.setImageResource(R.drawable.draw);
+ holder.iconView.setImageResource(R.drawable.draw);
break;
case FileUtilities.IMPRESS:
- imageView.setImageResource(R.drawable.impress);
- break;
- default:
+ holder.iconView.setImageResource(R.drawable.impress);
break;
}
- if (filePaths.get(position).isDirectory()) {
+
+ if (file.isDirectory()) {
//Eventually have thumbnails of each sub file on a black circle
//For now just a folder icon
- imageView.setImageResource(R.drawable.ic_folder_black_24dp);
- //for tint
- imageView.setColorFilter(ContextCompat.getColor(context,R.color.text_color_secondary));
+ holder.iconView.setImageResource(R.drawable.ic_folder_black_24dp);
+ holder.iconView.setColorFilter(ContextCompat.getColor(mActivity,R.color.text_color_secondary));
}
- //imageView.setClickable(true);
- return listItem;
}
- public int getViewTypeCount() {
- return 1;
+ @Override
+ public int getItemCount() {
+ return filePaths.size();
}
- public boolean hasStableIds() {
- return false;
- }
+ class ViewHolder extends RecyclerView.ViewHolder {
+
+ View itemView;
+ TextView filenameView, fileSizeView, fileDateView;
+ ImageView iconView;
- public boolean isEmpty() {
- return false;
+ ViewHolder(View itemView) {
+ super(itemView);
+ this.itemView = itemView;
+ filenameView = (TextView) itemView.findViewById(R.id.file_list_item_name);
+ fileSizeView = (TextView) itemView.findViewById(R.id.file_list_item_size);
+ fileDateView = (TextView) itemView.findViewById(R.id.file_list_item_date);
+ iconView = (ImageView) itemView.findViewById(R.id.file_list_item_icon);
+ }
}
+ }
- public void registerDataSetObserver(DataSetObserver arg0) {
+ class GridItemAdapter extends RecyclerView.Adapter<GridItemAdapter.ViewHolder> {
- }
+ private Activity mActivity;
+ private List<IFile> filePaths;
- public void unregisterDataSetObserver(DataSetObserver arg0) {
+ GridItemAdapter(Activity mActivity, List<IFile> filePaths) {
+ this.mActivity = mActivity;
+ this.filePaths = filePaths;
+ }
+ @Override
+ public GridItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View item = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.file_explorer_grid_item, parent, false);
+ return new ViewHolder(item);
}
- public boolean areAllItemsEnabled() {
- return false;
+ @Override
+ public void onBindViewHolder(final GridItemAdapter.ViewHolder holder, final int position) {
+ final IFile file = filePaths.get(position);
+
+ holder.itemView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ open(position);
+ }
+ });
+
+ holder.itemView.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View view) {
+ //to be picked out by floating context menu (workaround-ish)
+ currentlySelectedFile = position;
+ //must return false so the click is not consumed
+ return false;
+ }
+ });
+
+ String filename = file.getName();
+
+ holder.filenameView.setText(filename);
+
+ switch (FileUtilities.getType(filename)) {
+ case FileUtilities.DOC:
+ holder.iconView.setImageResource(R.drawable.writer);
+ break;
+ case FileUtilities.CALC:
+ holder.iconView.setImageResource(R.drawable.calc);
+ break;
+ case FileUtilities.DRAWING:
+ holder.iconView.setImageResource(R.drawable.draw);
+ break;
+ case FileUtilities.IMPRESS:
+ holder.iconView.setImageResource(R.drawable.impress);
+ break;
+ }
+
+ if (file.isDirectory()) {
+ //Eventually have thumbnails of each sub file on a black circle
+ //For now just a folder icon
+ holder.iconView.setImageResource(R.drawable.ic_folder_black_24dp);
+ holder.iconView.setColorFilter(ContextCompat.getColor(mActivity,R.color.text_color_secondary));
+ }
+
}
- public boolean isEnabled(int position) {
- return false;
+ @Override
+ public int getItemCount() {
+ return filePaths.size();
}
+ class ViewHolder extends RecyclerView.ViewHolder {
+
+ View itemView;
+ TextView filenameView;
+ ImageView iconView;
+
+ ViewHolder(View itemView) {
+ super(itemView);
+ this.itemView = itemView;
+ this.filenameView = (TextView) itemView.findViewById(R.id.grid_item_label);
+ this.iconView = (ImageView) itemView.findViewById(R.id.grid_item_image);
+ }
+ }
}
}