summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authoraleksandar-stefanovic <theonewithideas@gmail.com>2017-01-09 11:58:59 +0100
committerjan iversen <jani@documentfoundation.org>2017-01-16 08:02:17 +0000
commitb610c98b5981b9d2ab531196e17a6c6059e8d272 (patch)
tree19bac308ceff6f5b77aa389097261130ab0dcef0 /android
parentad694ef65a54746bc8c916c5bbbbde6dc483f7a8 (diff)
Revamped the navigation drawer
Replaced the custom implementation of the drawer with the support library one. This one inherently follows Material Design guidelines, and is much easier to maintain. This implementation also allows for header in the drawer, and so we could put something useful there to make the drawer even better. Also kept the original way of programatically adding the menu items, although I find this practice somewhat unelegant. Maybe we could have static list of items, and then grey-out the ones that aren't currently available? Also added appropriate icons to the menu items (which are vector drawables, of course), but I only covered the providers that appeared on my device (I can't confirm that there are no other providers), so if the provider is covered, it will have an icon, but if I didn't cover it, it will appear just fine, but without an icon. Maybe we could move the settings and sorting to the navigation drawer, also? It would be cleaner and more elegant, IMO. Change-Id: I02a051f0b75c6d4e16f518aa19fb9c6eef00f5e4 Reviewed-on: https://gerrit.libreoffice.org/32881 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: jan iversen <jani@documentfoundation.org>
Diffstat (limited to 'android')
-rw-r--r--android/source/res/drawable/ic_cloud_black_24dp.xml9
-rw-r--r--android/source/res/drawable/ic_insert_drive_file_black_24dp.xml7
-rw-r--r--android/source/res/drawable/ic_sd_card_black_24dp.xml9
-rw-r--r--android/source/res/drawable/ic_storage_black_24dp.xml9
-rw-r--r--android/source/res/drawable/ic_usb_black_24dp.xml7
-rw-r--r--android/source/res/layout/activity_document_browser.xml15
-rw-r--r--android/source/res/layout/item_in_drawer.xml17
-rw-r--r--android/source/res/menu/navigation_menu.xml10
-rw-r--r--android/source/res/values/colors.xml4
-rw-r--r--android/source/res/values/themes.xml4
-rw-r--r--android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java78
11 files changed, 121 insertions, 48 deletions
diff --git a/android/source/res/drawable/ic_cloud_black_24dp.xml b/android/source/res/drawable/ic_cloud_black_24dp.xml
new file mode 100644
index 000000000000..e0940ca0e7b0
--- /dev/null
+++ b/android/source/res/drawable/ic_cloud_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="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96z"/>
+</vector>
diff --git a/android/source/res/drawable/ic_insert_drive_file_black_24dp.xml b/android/source/res/drawable/ic_insert_drive_file_black_24dp.xml
new file mode 100644
index 000000000000..aaeb289d7060
--- /dev/null
+++ b/android/source/res/drawable/ic_insert_drive_file_black_24dp.xml
@@ -0,0 +1,7 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:height="24dp"
+ android:width="24dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0" >
+ <path android:fillColor="#FF000000" android:pathData="M6,2c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2 1.99,2L18,22c1.1,0 2,-0.9 2,-2L20,8l-6,-6L6,2zM13,9L13,3.5L18.5,9L13,9z"/>
+</vector>
diff --git a/android/source/res/drawable/ic_sd_card_black_24dp.xml b/android/source/res/drawable/ic_sd_card_black_24dp.xml
new file mode 100644
index 000000000000..f9ad72d482db
--- /dev/null
+++ b/android/source/res/drawable/ic_sd_card_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="M18,2h-8L4.02,8 4,20c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,4c0,-1.1 -0.9,-2 -2,-2zM12,8h-2L10,4h2v4zM15,8h-2L13,4h2v4zM18,8h-2L16,4h2v4z"/>
+</vector>
diff --git a/android/source/res/drawable/ic_storage_black_24dp.xml b/android/source/res/drawable/ic_storage_black_24dp.xml
new file mode 100644
index 000000000000..53c595cd7d1c
--- /dev/null
+++ b/android/source/res/drawable/ic_storage_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="M2,20h20v-4L2,16v4zM4,17h2v2L4,19v-2zM2,4v4h20L22,4L2,4zM6,7L4,7L4,5h2v2zM2,14h20v-4L2,10v4zM4,11h2v2L4,13v-2z"/>
+</vector>
diff --git a/android/source/res/drawable/ic_usb_black_24dp.xml b/android/source/res/drawable/ic_usb_black_24dp.xml
new file mode 100644
index 000000000000..d9b39bac1a86
--- /dev/null
+++ b/android/source/res/drawable/ic_usb_black_24dp.xml
@@ -0,0 +1,7 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:height="24dp"
+ android:width="24dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0" >
+ <path android:fillColor="#FF000000" android:pathData="M15,7v4h1v2h-3V5h2l-3,-4 -3,4h2v8H8v-2.07c0.7,-0.37 1.2,-1.08 1.2,-1.93 0,-1.21 -0.99,-2.2 -2.2,-2.2 -1.21,0 -2.2,0.99 -2.2,2.2 0,0.85 0.5,1.56 1.2,1.93V13c0,1.11 0.89,2 2,2h3v3.05c-0.71,0.37 -1.2,1.1 -1.2,1.95 0,1.22 0.99,2.2 2.2,2.2 1.21,0 2.2,-0.98 2.2,-2.2 0,-0.85 -0.49,-1.58 -1.2,-1.95V15h3c1.11,0 2,-0.89 2,-2v-2h1V7h-4z"/>
+</vector>
diff --git a/android/source/res/layout/activity_document_browser.xml b/android/source/res/layout/activity_document_browser.xml
index 297dba1558e6..675c1471e815 100644
--- a/android/source/res/layout/activity_document_browser.xml
+++ b/android/source/res/layout/activity_document_browser.xml
@@ -8,6 +8,7 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
@@ -26,18 +27,18 @@
android:id="@+id/browser_main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/background_normal"
android:orientation="vertical" />
<!-- The navigation drawer -->
- <ListView
- android:id="@+id/left_drawer"
- android:layout_width="240dp"
+ <android.support.design.widget.NavigationView
+ android:id="@+id/navigation_drawer"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:background="#111"
- android:choiceMode="singleChoice"
- android:divider="@android:color/transparent"
- android:dividerHeight="0dp" />
+ android:background="@color/background_normal"
+ app:menu="@menu/navigation_menu"
+ android:theme="@style/LibreOfficeTheme.NavigationView" />
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
diff --git a/android/source/res/layout/item_in_drawer.xml b/android/source/res/layout/item_in_drawer.xml
deleted file mode 100644
index da730639d03f..000000000000
--- a/android/source/res/layout/item_in_drawer.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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/.
- -->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/text1"
- android:layout_width="match_parent"
- android:layout_height="48dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@android:color/white"
- android:gravity="center_vertical"
- android:paddingLeft="48dp"
-/>
diff --git a/android/source/res/menu/navigation_menu.xml b/android/source/res/menu/navigation_menu.xml
new file mode 100644
index 000000000000..a14ff7ab4409
--- /dev/null
+++ b/android/source/res/menu/navigation_menu.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <group
+ android:checkableBehavior="single"
+ android:id="@+id/group_providers">
+
+ <!--Items will be added programmatically in LibreOfficeUIActivity.java-->
+
+ </group>
+</menu>
diff --git a/android/source/res/values/colors.xml b/android/source/res/values/colors.xml
index 8cd9e955e6b4..4348b5b607ef 100644
--- a/android/source/res/values/colors.xml
+++ b/android/source/res/values/colors.xml
@@ -4,8 +4,8 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<resources>
- <color name="background_light">#FFECF0F3</color>
- <color name="background_normal">#FFCED7DE</color>
+ <color name="background_light">#FAFAFA</color> <!--Material Grey 50-->
+ <color name="background_normal">#F5F5F5</color> <!--Material Grey 100-->
<color name="background_private">#FF292C29</color>
<color name="background_tabs">#FF363B40</color>
<color name="highlight">#33000000</color>
diff --git a/android/source/res/values/themes.xml b/android/source/res/values/themes.xml
index 807bf817ca5a..3c89209e6269 100644
--- a/android/source/res/values/themes.xml
+++ b/android/source/res/values/themes.xml
@@ -19,4 +19,8 @@
<item name="colorPrimary">@color/toolbar_background</item>
</style>
+ <style name="LibreOfficeTheme.NavigationView">
+ <item name="colorPrimary">@android:color/black</item>
+ </style>
+
</resources>
diff --git a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
index 6580d53e4a4c..0f4bf0606d8a 100644
--- a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
+++ b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
@@ -49,6 +49,7 @@ import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
+import android.support.design.widget.NavigationView;
import org.libreoffice.LOAbout;
import org.libreoffice.LibreOfficeMainActivity;
@@ -65,6 +66,8 @@ import java.io.FilenameFilter;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -94,7 +97,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
public static final int LIST_VIEW = 1;
private DrawerLayout drawerLayout;
- private ListView drawerList;
+ private NavigationView navigationDrawer;
private ActionBarDrawerToggle drawerToggle;
GridView gv;
ListView lv;
@@ -178,10 +181,54 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
registerForContextMenu(lv);
}
- // setup the drawer
-
+ //Setting up navigation drawer
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
- drawerList = (ListView) findViewById(R.id.left_drawer);
+ navigationDrawer = (NavigationView) findViewById(R.id.navigation_drawer);
+ /*
+ * These are the currently-known document providers (for which icons are assigned).
+ * This is to ensure that there is an icon available if the provider is recognized, while
+ * the unrecognized ones still appear, but without an icon. If there is a document provider
+ * not on this list, it should be added and an icon assigned to it, in the if-else ladder
+ * bellow. This is a hacky implementation, maybe we could make something better in the
+ * future, i.e. we could move this into the menu file and load it that way.
+ */
+ final String LOCAL_DOCUMENTS_NAME = "Local documents";
+ final String LOCAL_FILE_SYSTEM_NAME = "Local file system";
+ final String EXTERNAL_SD_NAME = "External SD";
+ final String OTG_FILE_SYSTEM_NAME = "OTG device (experimental)";
+ final String OWNCLOUD_NAME = "Remote server";
+
+ //Provider names are wrapped as a ArrayList so indexOf(Object) method could be used
+ final ArrayList<CharSequence> providerNames = new ArrayList<CharSequence>(
+ Arrays.asList(documentProviderFactory.getNames())
+ );
+ for (CharSequence name : providerNames) {
+ int iconRes = 0;
+ if (name.equals(LOCAL_DOCUMENTS_NAME)) {
+ iconRes = R.drawable.ic_insert_drive_file_black_24dp;
+ } else if (name.equals(LOCAL_FILE_SYSTEM_NAME)) {
+ iconRes = R.drawable.ic_storage_black_24dp;
+ } else if (name.equals(EXTERNAL_SD_NAME)) {
+ iconRes = R.drawable.ic_sd_card_black_24dp;
+ } else if (name.equals(OTG_FILE_SYSTEM_NAME)) {
+ iconRes = R.drawable.ic_usb_black_24dp;
+ } else if (name.equals(OWNCLOUD_NAME)) {
+ iconRes = R.drawable.ic_cloud_black_24dp;
+ }
+ MenuItem item = navigationDrawer.getMenu().add(R.id.group_providers, Menu.NONE, Menu.NONE, name)
+ .setCheckable(true);
+ if (iconRes != 0) {
+ item.setIcon(iconRes);
+ }
+ }
+ navigationDrawer.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
+ @Override
+ public boolean onNavigationItemSelected(final MenuItem item) {
+ int position = providerNames.indexOf(item.getTitle());
+ switchToDocumentProvider(documentProviderFactory.getProvider(position));
+ return true;
+ }
+ });
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.string.document_locations, R.string.close_document_locations) {
@@ -189,7 +236,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
supportInvalidateOptionsMenu();
- drawerList.requestFocus(); // Make keypad navigation easier
+ navigationDrawer.requestFocus(); // Make keypad navigation easier
}
@Override
@@ -199,21 +246,8 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
}
};
drawerToggle.setDrawerIndicatorEnabled(true);
- drawerLayout.setDrawerListener(drawerToggle);
+ drawerLayout.addDrawerListener(drawerToggle);
drawerToggle.syncState();
-
- // Set the adapter for the list view
- drawerList.setAdapter(new ArrayAdapter<String>(this,
- R.layout.item_in_drawer, documentProviderFactory.getNames()));
- // Set the list's click listener
- drawerList.setOnItemClickListener(new ListView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView parent, View view,
- int position, long id) {
- switchToDocumentProvider(documentProviderFactory
- .getProvider(position));
- }
- });
}
@Override
@@ -241,13 +275,13 @@ public class LibreOfficeUIActivity extends AppCompatActivity {
filePaths));
}
// close drawer if it was open
- drawerLayout.closeDrawer(drawerList);
+ drawerLayout.closeDrawer(navigationDrawer);
}
@Override
public void onBackPressed() {
- if (drawerLayout.isDrawerOpen(drawerList)) {
- drawerLayout.closeDrawer(drawerList);
+ if (drawerLayout.isDrawerOpen(navigationDrawer)) {
+ drawerLayout.closeDrawer(navigationDrawer);
} else if (!currentDirectory.equals(homeDirectory)) {
// navigate upwards in directory hierarchy
openParentDirectory();