summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
Diffstat (limited to 'android')
-rw-r--r--android/source/AndroidManifest.xml2
-rw-r--r--android/source/res/values/strings.xml4
-rw-r--r--android/source/src/java/org/libreoffice/storage/IDocumentProvider.java7
-rw-r--r--android/source/src/java/org/libreoffice/storage/external/ExtsdDocumentsProvider.java5
-rw-r--r--android/source/src/java/org/libreoffice/storage/external/LegacyExtSDDocumentsProvider.java6
-rw-r--r--android/source/src/java/org/libreoffice/storage/external/OTGDocumentsProvider.java7
-rw-r--r--android/source/src/java/org/libreoffice/storage/local/LocalDocumentsProvider.java5
-rw-r--r--android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java5
-rw-r--r--android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java39
9 files changed, 78 insertions, 2 deletions
diff --git a/android/source/AndroidManifest.xml b/android/source/AndroidManifest.xml
index 7e352088ecde..601f478ae352 100644
--- a/android/source/AndroidManifest.xml
+++ b/android/source/AndroidManifest.xml
@@ -4,6 +4,8 @@
<!-- App requires OpenGL ES 2.0 -->
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
+ <!-- App wants to know if device supports USB host capability(not mandatory) -->
+ <uses-feature android:name="android.hardware.usb.host" android:required="false"/>
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
diff --git a/android/source/res/values/strings.xml b/android/source/res/values/strings.xml
index ff4a183a98a8..9832d8b72eb2 100644
--- a/android/source/res/values/strings.xml
+++ b/android/source/res/values/strings.xml
@@ -65,12 +65,13 @@
<string name="external_sd_file_system">External SD</string>
<string name="otg_file_system">OTG device (experimental)</string>
<string name="owncloud">Remote server</string>
+ <string name="usb_connected_configure">USB connected, configure your device.</string>
<string name="owncloud_wrong_connection">Cannot connect to ownCloud server. Check your configuration.</string>
<string name="owncloud_unauthorized">Cannot log into ownCloud server. Check your configuration.</string>
<string name="owncloud_unspecified_error">Unspecified error connecting to ownCloud server. Check your configuration and/or try later.</string>
- <string name="ext_document_provider_error">Invalid root file. Check your configuration.</string>
+ <string name="ext_document_provider_error">Invalid root file. Check your sd card configuration.</string>
<string name="legacy_extsd_missing_error">Invalid root file. Check your external sd card and/or configuration.</string>
<string name="otg_missing_error">Invalid root file. Check your OTG device and/or configuration.</string>
@@ -118,5 +119,4 @@
<string name="no_save_document">NO</string>
-
</resources>
diff --git a/android/source/src/java/org/libreoffice/storage/IDocumentProvider.java b/android/source/src/java/org/libreoffice/storage/IDocumentProvider.java
index edb026ff9433..2b0460a8ee6e 100644
--- a/android/source/src/java/org/libreoffice/storage/IDocumentProvider.java
+++ b/android/source/src/java/org/libreoffice/storage/IDocumentProvider.java
@@ -54,4 +54,11 @@ public interface IDocumentProvider {
* @return Unique ID for a document provider instance.
*/
int getId();
+
+ /**
+ * Checks if the Document Provider is available or not.
+ *
+ * @return A boolean value based on provider availability.
+ */
+ boolean checkProviderAvailability();
}
diff --git a/android/source/src/java/org/libreoffice/storage/external/ExtsdDocumentsProvider.java b/android/source/src/java/org/libreoffice/storage/external/ExtsdDocumentsProvider.java
index abbfca9c6221..4ce77f0e1916 100644
--- a/android/source/src/java/org/libreoffice/storage/external/ExtsdDocumentsProvider.java
+++ b/android/source/src/java/org/libreoffice/storage/external/ExtsdDocumentsProvider.java
@@ -148,6 +148,11 @@ public class ExtsdDocumentsProvider implements IExternalDocumentProvider,
}
@Override
+ public boolean checkProviderAvailability() {
+ return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && Environment.isExternalStorageRemovable();
+ }
+
+ @Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key.equals(DocumentProviderSettingsActivity.KEY_PREF_EXTERNAL_SD_PATH_URI)) {
rootPathURI = preferences.getString(key, "");
diff --git a/android/source/src/java/org/libreoffice/storage/external/LegacyExtSDDocumentsProvider.java b/android/source/src/java/org/libreoffice/storage/external/LegacyExtSDDocumentsProvider.java
index 0ded17764cce..1ac34405b361 100644
--- a/android/source/src/java/org/libreoffice/storage/external/LegacyExtSDDocumentsProvider.java
+++ b/android/source/src/java/org/libreoffice/storage/external/LegacyExtSDDocumentsProvider.java
@@ -2,6 +2,7 @@ package org.libreoffice.storage.external;
import android.content.Context;
import android.content.SharedPreferences;
+import android.os.Environment;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
@@ -88,6 +89,11 @@ public class LegacyExtSDDocumentsProvider implements IExternalDocumentProvider,
}
@Override
+ public boolean checkProviderAvailability() {
+ return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && Environment.isExternalStorageRemovable();
+ }
+
+ @Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key.equals(DocumentProviderSettingsActivity.KEY_PREF_EXTERNAL_SD_PATH_URI)) {
rootPathURI = preferences.getString(key, "");
diff --git a/android/source/src/java/org/libreoffice/storage/external/OTGDocumentsProvider.java b/android/source/src/java/org/libreoffice/storage/external/OTGDocumentsProvider.java
index 556e6f6f6de4..0f9ee30ea28b 100644
--- a/android/source/src/java/org/libreoffice/storage/external/OTGDocumentsProvider.java
+++ b/android/source/src/java/org/libreoffice/storage/external/OTGDocumentsProvider.java
@@ -2,6 +2,7 @@ package org.libreoffice.storage.external;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import org.libreoffice.R;
@@ -80,4 +81,10 @@ public class OTGDocumentsProvider implements IExternalDocumentProvider,
public String guessRootURI() {
return "";
}
+
+ @Override
+ public boolean checkProviderAvailability() {
+ // check if system supports USB Host
+ return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_USB_HOST);
+ }
}
diff --git a/android/source/src/java/org/libreoffice/storage/local/LocalDocumentsProvider.java b/android/source/src/java/org/libreoffice/storage/local/LocalDocumentsProvider.java
index a1a84e8af55b..42c253322ce7 100644
--- a/android/source/src/java/org/libreoffice/storage/local/LocalDocumentsProvider.java
+++ b/android/source/src/java/org/libreoffice/storage/local/LocalDocumentsProvider.java
@@ -48,4 +48,9 @@ public class LocalDocumentsProvider implements IDocumentProvider {
public int getId() {
return id;
}
+
+ @Override
+ public boolean checkProviderAvailability() {
+ return true;
+ }
}
diff --git a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java
index c037941b69ea..e10c88bee93a 100644
--- a/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java
+++ b/android/source/src/java/org/libreoffice/storage/owncloud/OwnCloudProvider.java
@@ -177,4 +177,9 @@ public class OwnCloudProvider implements IDocumentProvider,
public int getId() {
return id;
}
+
+ @Override
+ public boolean checkProviderAvailability() {
+ return true;
+ }
}
diff --git a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
index 8655e5c763fd..40726c3e6caf 100644
--- a/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
+++ b/android/source/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
@@ -10,13 +10,16 @@
package org.libreoffice.ui;
import android.app.Activity;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon;
+import android.hardware.usb.UsbManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -65,6 +68,7 @@ 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.HashSet;
import java.util.List;
@@ -116,6 +120,11 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
PreferenceManager.setDefaultValues(this, R.xml.documentprovider_preferences, false);
readPreferences();
SettingsListenerModel.getInstance().setListener(this);
+ // Registering the USB detect broadcast receiver
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
+ filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
+ registerReceiver(mUSBReceiver, filter);
// init UI and populate with contents from the provider
switchToDocumentProvider(documentProviderFactory.getDefaultProvider());
createUI();
@@ -161,6 +170,19 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationDrawer = (NavigationView) findViewById(R.id.navigation_drawer);
+ final ArrayList<CharSequence> providerNames = new ArrayList<CharSequence>(
+ Arrays.asList(documentProviderFactory.getNames())
+ );
+
+ // Loop through the document providers menu items and check if they are available or not
+ for (int index = 0; index < providerNames.size(); index++) {
+ MenuItem item = navigationDrawer.getMenu().getItem(index);
+ boolean isDocumentProviderAvailable = checkDocumentProviderAvailability(documentProviderFactory.getProvider(index));
+ if (!isDocumentProviderAvailable){
+ item.setEnabled(false);
+ }
+ }
+
final Context context = this; //needed for anonymous method below
navigationDrawer.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
@@ -225,6 +247,10 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
drawerToggle.syncState();
}
+ private boolean checkDocumentProviderAvailability(IDocumentProvider provider) {
+ return provider.checkProviderAvailability();
+ }
+
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
@@ -326,6 +352,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
Toast.LENGTH_SHORT).show();
}
});
+ startActivity(new Intent(activity, DocumentProviderSettingsActivity.class));
Log.e(LOGTAG, e.getMessage(), e.getCause());
}
return null;
@@ -719,6 +746,18 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
Log.d(LOGTAG, currentDirectory.toString() + Integer.toString(filterMode) + Integer.toString(viewMode));
}
+ private final BroadcastReceiver mUSBReceiver = new BroadcastReceiver() {
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
+ Toast.makeText(context, R.string.usb_connected_configure, Toast.LENGTH_SHORT).show();
+ startActivity(new Intent(context, DocumentProviderSettingsActivity.class));
+ Log.d(LOGTAG, "USB device attached");
+ } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
+ Log.d(LOGTAG, "USB device detached");
+ }
+ }
+ };
@Override
protected void onPause() {
super.onPause();