Browse Source

- always update contacts backup folder
- if file is not downloaded, download it then show content

tobiaskaminsky 8 years ago
parent
commit
778829d69c

+ 37 - 1
src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java

@@ -23,9 +23,11 @@ package com.owncloud.android.ui.fragment.contactsbackup;
 
 import android.Manifest;
 import android.accounts.Account;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -53,6 +55,7 @@ import android.widget.LinearLayout;
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -104,6 +107,7 @@ public class ContactListFragment extends FileFragment {
     public Button restoreContacts;
 
     private ContactListAdapter contactListAdapter;
+    private Account account;
 
     public static ContactListFragment newInstance(OCFile file, Account account) {
         ContactListFragment frag = new ContactListFragment();
@@ -142,13 +146,19 @@ public class ContactListFragment extends FileFragment {
         try {
             OCFile ocFile = getArguments().getParcelable(FILE_NAME);
             setFile(ocFile);
-            Account account = getArguments().getParcelable(ACCOUNT);
+            account = getArguments().getParcelable(ACCOUNT);
 
             if (!ocFile.isDown()) {
                 Intent i = new Intent(getContext(), FileDownloader.class);
                 i.putExtra(FileDownloader.EXTRA_ACCOUNT, account);
                 i.putExtra(FileDownloader.EXTRA_FILE, ocFile);
                 getContext().startService(i);
+
+                // Listen for download messages
+                IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.getDownloadAddedMessage());
+                downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
+                DownloadFinishReceiver mDownloadFinishReceiver = new DownloadFinishReceiver();
+                getContext().registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
             } else {
                 File file = new File(ocFile.getStoragePath());
                 vCards.addAll(Ezvcard.parse(file).all());
@@ -446,6 +456,27 @@ public class ContactListFragment extends FileFragment {
             return displayName;
         }
     }
+
+    private class DownloadFinishReceiver extends BroadcastReceiver {
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (intent.getAction().equalsIgnoreCase(FileDownloader.getDownloadFinishMessage())){
+                String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
+
+                FileDataStorageManager storageManager = new FileDataStorageManager(account,
+                        getContext().getContentResolver());
+                OCFile ocFile = storageManager.getFileByPath(downloadedRemotePath);
+                File file = new File(ocFile.getStoragePath());
+
+                try {
+                    contactListAdapter.replaceVCards(Ezvcard.parse(file).all());
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }
 
 class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.ContactItemViewHolder> {
@@ -475,6 +506,11 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
         }
     }
 
+    public void replaceVCards(List<VCard> vCards) {
+        this.vCards = vCards;
+        notifyDataSetChanged();
+    }
+
     public int[] getCheckedIntArray() {
         int[] intArray;
         if (checkedVCards != null && checkedVCards.size() > 0) {

+ 50 - 13
src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java

@@ -1,4 +1,4 @@
-/**
+/*
  * Nextcloud Android client application
  *
  * @author Mario Danic
@@ -24,6 +24,7 @@ import android.Manifest;
 import android.accounts.Account;
 import android.app.DatePickerDialog;
 import android.content.DialogInterface;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -44,7 +45,10 @@ import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.operations.RefreshFolderOperation;
 import com.owncloud.android.services.ContactsBackupJob;
 import com.owncloud.android.ui.activity.ContactsPreferenceActivity;
 import com.owncloud.android.ui.fragment.FileFragment;
@@ -167,21 +171,54 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
             }
         }
 
-        final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity();
+        ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity();
 
-        String backupFolderString = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR;
-        OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderString);
+        String backupFolderPath = getResources().getString(R.string.contacts_backup_folder) + OCFile.PATH_SEPARATOR;
+        refreshBackupFolder(backupFolderPath, contactsPreferenceActivity);
+    }
 
-        Vector<OCFile> backupFiles = contactsPreferenceActivity.getStorageManager().getFolderContent(backupFolder,
-                false);
+    private void refreshBackupFolder(final String backupFolderPath,
+                                     final ContactsPreferenceActivity contactsPreferenceActivity) {
+        AsyncTask<String, Integer, Boolean> task = new AsyncTask<String, Integer, Boolean>() {
+            @Override
+            protected Boolean doInBackground(String... path) {
+                FileDataStorageManager storageManager = new FileDataStorageManager(account,
+                        getActivity().getContentResolver());
+
+                RemoteOperationResult result = new RemoteOperationResult(RemoteOperationResult.ResultCode.UNKNOWN_ERROR);
+                try {
+                    OCFile folder = storageManager.getFileByPath(path[0]);
+                    RefreshFolderOperation operation = new RefreshFolderOperation(folder, System.currentTimeMillis(),
+                            false, false, false, storageManager, account, getContext());
+
+                    result = operation.execute(account, getContext());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
 
-        if (backupFiles == null || backupFiles.size() == 0) {
-            contactsRestoreHeader.setVisibility(View.GONE);
-            contactsDatePickerBtn.setVisibility(View.GONE);
-        } else {
-            contactsRestoreHeader.setVisibility(View.VISIBLE);
-            contactsDatePickerBtn.setVisibility(View.VISIBLE);
-        }
+                return result.isSuccess();
+            }
+
+            @Override
+            protected void onPostExecute(Boolean result) {
+                if (result) {
+                    OCFile backupFolder = contactsPreferenceActivity.getStorageManager().getFileByPath(backupFolderPath);
+
+                    Vector<OCFile> backupFiles = contactsPreferenceActivity.getStorageManager()
+                            .getFolderContent(backupFolder, false);
+
+                    if (backupFiles == null || backupFiles.size() == 0) {
+                        contactsRestoreHeader.setVisibility(View.GONE);
+                        contactsDatePickerBtn.setVisibility(View.GONE);
+                    } else {
+                        contactsRestoreHeader.setVisibility(View.VISIBLE);
+                        contactsDatePickerBtn.setVisibility(View.VISIBLE);
+                    }
+                }
+            }
+        };
+
+        task.execute(backupFolderPath);
     }
 
 

+ 4 - 2
src/main/res/layout/contacts_backup_fragment.xml

@@ -90,7 +90,8 @@
             android:layout_marginTop="@dimen/standard_margin"
             android:text="@string/contacts_header_restore"
             android:textColor="@color/primary"
-            android:textStyle="bold"/>
+            android:textStyle="bold"
+            android:visibility="gone"/>
 
         <android.support.v7.widget.AppCompatButton
             android:id="@+id/contacts_datepicker"
@@ -98,7 +99,8 @@
             android:layout_height="wrap_content"
             android:layout_margin="@dimen/standard_margin"
             android:text="@string/contacts_preference_choose_date"
-            android:theme="@style/Button.Primary"/>
+            android:theme="@style/Button.Primary"
+            android:visibility="gone"/>
 
     </LinearLayout>