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();