Android: reimplement DocumentProviderFactory as a singleton
The factory will require some objects that are not available from a
static context.
Change-Id: Idf852f5b9ab3023644b1a9577951a94c4f21c4e9
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/storage/DocumentProviderFactory.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/storage/DocumentProviderFactory.java
index 57b0437..2ec0dc9 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/storage/DocumentProviderFactory.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/storage/DocumentProviderFactory.java
@@ -16,22 +16,47 @@ import org.libreoffice.storage.local.LocalDocumentsProvider;
* Keeps the instances of the available IDocumentProviders in the system.
* Instances are maintained in a sorted list and providers have to be
* accessed from their position.
*
* The factory follows the Singleton pattern, there is only one instance of it
* in the application and it must be retrieved with
* DocumentProviderFactory.getInstance().
*/
public class DocumentProviderFactory {
public final class DocumentProviderFactory {
private static IDocumentProvider[] providers = {
/**
* Private factory instance for the Singleton pattern.
*/
private static DocumentProviderFactory instance = null;
private IDocumentProvider[] providers = {
new LocalDocumentsDirectoryProvider(), new LocalDocumentsProvider() };
private static String[] providerNames = {
private String[] providerNames = {
"Local documents", "Local file system" };
private DocumentProviderFactory() {
// private to prevent external instances of the factory
}
/**
* Retrieve the unique instance of the factory.
*
* @return the unique factory object.
*/
public static DocumentProviderFactory getInstance() {
if (instance == null) {
instance = new DocumentProviderFactory();
}
return instance;
}
/**
* Retrieve the provider associated to a certain position.
*
* @param position
* @return document provider in that position.
*/
public static IDocumentProvider getProvider(int position) {
public IDocumentProvider getProvider(int position) {
return providers[position];
}
@@ -41,7 +66,7 @@ public class DocumentProviderFactory {
*
* @return Array with the names of the available providers.
*/
public static String[] getNames() {
public String[] getNames() {
return providerNames;
}
@@ -50,7 +75,7 @@ public class DocumentProviderFactory {
*
* @return default provider.
*/
public static IDocumentProvider getDefaultProvider() {
public IDocumentProvider getDefaultProvider() {
return providers[0];
}
}
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
index 041eda8..1ee88bf 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/ui/LibreOfficeUIActivity.java
@@ -78,6 +78,7 @@ public class LibreOfficeUIActivity extends LOAbout implements ActionBar.OnNaviga
FileFilter fileFilter;
FilenameFilter filenameFilter;
private List<IFile> filePaths;
private DocumentProviderFactory documentProviderFactory;
private IDocumentProvider documentProvider;
private IFile homeDirectory;
private IFile currentDirectory;
@@ -105,8 +106,11 @@ public class LibreOfficeUIActivity extends LOAbout implements ActionBar.OnNaviga
super.onCreate(savedInstanceState);
Log.d(tag, "onCreate - tweaked - meeks !");
documentProviderFactory = DocumentProviderFactory.getInstance();
//Set the "home" - top level - directory.
documentProvider = DocumentProviderFactory.getDefaultProvider();
documentProvider = documentProviderFactory.getDefaultProvider();
homeDirectory = documentProvider.getRootDirectory();
currentDirectory = homeDirectory;
//Load default settings
@@ -177,13 +181,13 @@ public class LibreOfficeUIActivity extends LOAbout implements ActionBar.OnNaviga
// Set the adapter for the list view
drawerList.setAdapter(new ArrayAdapter<String>(this,
R.layout.item_in_drawer, DocumentProviderFactory.getNames()));
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) {
documentProvider = DocumentProviderFactory.getProvider(position);
documentProvider = documentProviderFactory.getProvider(position);
homeDirectory = documentProvider.getRootDirectory();
currentDirectory = homeDirectory;
createUI();