Browse Source

add Arbitrary Data table
use it for multiple account contact backup

tobiasKaminsky 8 years ago
parent
commit
c9c2cdbb4e

+ 11 - 1
src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java

@@ -47,10 +47,12 @@ public class ArbitraryDataProvider {
     }
 
     public void storeOrUpdateKeyValue(Account account, String key, String newValue) {
-        Log_OC.v(TAG, "Adding arbitrary data with cloud id: " + account.name + " key: " + key + " value: " + newValue);
+
 
         ArbitraryDataSet data = getArbitraryDataSet(account, key);
         if (data == null) {
+            Log_OC.v(TAG, "Adding arbitrary data with cloud id: " + account.name + " key: " + key
+                    + " value: " + newValue);
             ContentValues cv = new ContentValues();
             cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID, account.name);
             cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY, key);
@@ -63,6 +65,8 @@ public class ArbitraryDataProvider {
                         + " value: " + newValue);
             }
         } else {
+            Log_OC.v(TAG, "Updating arbitrary data with cloud id: " + account.name + " key: " + key
+                    + " value: " + newValue);
             ContentValues cv = new ContentValues();
             cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID, data.getCloudId());
             cv.put(ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY, data.getKey());
@@ -93,6 +97,12 @@ public class ArbitraryDataProvider {
         }
     }
 
+    public boolean getBooleanValue(Account account, String key) {
+        String value = getValue(account, key);
+
+        return !value.isEmpty() && value.equalsIgnoreCase("true");
+    }
+
     private ArrayList<String> getValues(Account account, String key) {
         Cursor cursor = contentResolver.query(
                 ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA,

+ 9 - 8
src/main/java/com/owncloud/android/services/ContactsBackupJob.java

@@ -26,7 +26,6 @@ import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.IBinder;
@@ -39,9 +38,9 @@ import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.PreferenceManager;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.UploadFileOperation;
@@ -76,13 +75,15 @@ public class ContactsBackupJob extends Job {
 
         boolean force = bundle.getBoolean(FORCE, false);
 
-        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
-        Long lastExecution = sharedPreferences.getLong(ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP, -1);
+        final Account account = AccountUtils.getOwnCloudAccountByName(context, bundle.getString(ACCOUNT, ""));
+
+        ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContext().getContentResolver());
+        Long lastExecution = arbitraryDataProvider.getLongValue(account,
+                ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP);
 
         if (force || (lastExecution + 24 * 60 * 60 * 1000) < Calendar.getInstance().getTimeInMillis()) {
             Log_OC.d(TAG, "start contacts backup job");
 
-            final Account account = AccountUtils.getOwnCloudAccountByName(context, bundle.getString(ACCOUNT, ""));
             String backupFolder = getContext().getResources().getString(R.string.contacts_backup_folder) +
                     OCFile.PATH_SEPARATOR;
             Integer daysToExpire = getContext().getResources().getInteger(R.integer.contacts_backup_expire);
@@ -96,9 +97,9 @@ public class ContactsBackupJob extends Job {
                     OperationsService.BIND_AUTO_CREATE);
 
             // store execution date
-            sharedPreferences.edit().putLong(ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP,
-                    Calendar.getInstance().getTimeInMillis()).apply();
-
+            arbitraryDataProvider.storeOrUpdateKeyValue(account,
+                    ContactsPreferenceActivity.PREFERENCE_CONTACTS_LAST_BACKUP,
+                    String.valueOf(Calendar.getInstance().getTimeInMillis()));
         } else {
             Log_OC.d(TAG, "last execution less than 24h ago");
         }

+ 5 - 1
src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java

@@ -75,7 +75,11 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
             if (intent == null || intent.getParcelableExtra(ContactListFragment.FILE_NAME) == null ||
                     intent.getParcelableExtra(ContactListFragment.ACCOUNT) == null) {
-                transaction.add(R.id.frame_container, new ContactsBackupFragment());
+                ContactsBackupFragment fragment = new ContactsBackupFragment();
+                Bundle bundle = new Bundle();
+                bundle.putParcelable(ContactListFragment.ACCOUNT, getAccount());
+                fragment.setArguments(bundle);
+                transaction.add(R.id.frame_container, fragment);
             } else {
                 OCFile file = Parcels.unwrap(intent.getParcelableExtra(ContactListFragment.FILE_NAME));
                 Account account = Parcels.unwrap(intent.getParcelableExtra(ContactListFragment.ACCOUNT));

+ 4 - 6
src/main/java/com/owncloud/android/ui/activity/FileActivity.java

@@ -28,7 +28,6 @@ import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -41,8 +40,8 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.authentication.AuthenticatorActivity;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.PreferenceManager;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader;
@@ -245,12 +244,11 @@ public abstract class FileActivity extends DrawerActivity
     }
 
     private void checkContactsBackupJob() {
-        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
+        ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
 
-        if (sharedPreferences.getBoolean(ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false)) {
+        if (getAccount() != null && arbitraryDataProvider.getBooleanValue(getAccount(),
+                ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP)) {
             ContactsPreferenceActivity.startContactBackupJob(getAccount());
-        } else {
-            ContactsPreferenceActivity.cancelAllContactBackupJobs(getBaseContext());
         }
     }
 

+ 7 - 8
src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -31,7 +31,6 @@ import android.app.DialogFragment;
 import android.app.FragmentManager;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.support.annotation.ColorInt;
 import android.support.annotation.NonNull;
@@ -51,7 +50,7 @@ import android.widget.TextView;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.authentication.AuthenticatorActivity;
-import com.owncloud.android.db.PreferenceManager;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.lib.common.UserInfo;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -343,12 +342,12 @@ public class UserInfoActivity extends FileActivity {
                                     ContactsPreferenceActivity.cancelContactBackupJobForAccount(getActivity(), account);
 
                                     // disable daily backup
-                                    SharedPreferences sharedPreferences = PreferenceManager
-                                            .getDefaultSharedPreferences(getActivity());
-                                    SharedPreferences.Editor editor = sharedPreferences.edit();
-                                    editor.putBoolean(ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP,
-                                            false);
-                                    editor.apply();
+                                    ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(
+                                            getActivity().getContentResolver());
+
+                                    arbitraryDataProvider.storeOrUpdateKeyValue(account,
+                                            ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP,
+                                            "false");
 
                                     if (getActivity() != null && !removeDirectly) {
                                         Bundle bundle = new Bundle();

+ 11 - 10
src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java

@@ -21,9 +21,9 @@
 package com.owncloud.android.ui.fragment.contactsbackup;
 
 import android.Manifest;
+import android.accounts.Account;
 import android.app.DatePickerDialog;
 import android.content.DialogInterface;
-import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -44,8 +44,8 @@ import android.widget.Toast;
 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.OCFile;
-import com.owncloud.android.db.PreferenceManager;
 import com.owncloud.android.services.ContactsBackupJob;
 import com.owncloud.android.ui.activity.ContactsPreferenceActivity;
 import com.owncloud.android.ui.fragment.FileFragment;
@@ -68,8 +68,6 @@ import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFER
 public class ContactsBackupFragment extends FileFragment implements DatePickerDialog.OnDateSetListener {
     public static final String TAG = ContactsBackupFragment.class.getSimpleName();
 
-    private SharedPreferences sharedPreferences;
-
     @BindView(R.id.contacts_automatic_backup)
     public SwitchCompat backupSwitch;
 
@@ -93,6 +91,9 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
     private static final String KEY_CALENDAR_DAY = "CALENDAR_DAY";
     private static final String KEY_CALENDAR_MONTH = "CALENDAR_MONTH";
     private static final String KEY_CALENDAR_YEAR = "CALENDAR_YEAR";
+    private ArbitraryDataProvider arbitraryDataProvider;
+    private Account account;
+
 
     @Override
     public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -104,12 +105,14 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
 
         final ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity();
 
+        account = (Account) getArguments().get(ContactListFragment.ACCOUNT);
+
         contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts);
         contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
-        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(contactsPreferenceActivity);
+        arbitraryDataProvider = new ArbitraryDataProvider(getContext().getContentResolver());
 
-        backupSwitch.setChecked(sharedPreferences.getBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, false));
+        backupSwitch.setChecked(arbitraryDataProvider.getBooleanValue(account, PREFERENCE_CONTACTS_AUTOMATIC_BACKUP));
 
         onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
             @Override
@@ -127,7 +130,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
         backupSwitch.setOnCheckedChangeListener(onCheckedChangeListener);
 
         // display last backup
-        Long lastBackupTimestamp = sharedPreferences.getLong(PREFERENCE_CONTACTS_LAST_BACKUP, -1);
+        Long lastBackupTimestamp = arbitraryDataProvider.getLongValue(account, PREFERENCE_CONTACTS_LAST_BACKUP);
 
         if (lastBackupTimestamp == -1) {
             lastBackup.setText(R.string.contacts_preference_backup_never);
@@ -276,9 +279,7 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
             ContactsPreferenceActivity.cancelAllContactBackupJobs(contactsPreferenceActivity);
         }
 
-        SharedPreferences.Editor editor = sharedPreferences.edit();
-        editor.putBoolean(PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, bool);
-        editor.apply();
+        arbitraryDataProvider.storeOrUpdateKeyValue(account, PREFERENCE_CONTACTS_AUTOMATIC_BACKUP, String.valueOf(bool));
     }
 
     private boolean checkAndAskForContactsReadPermission(final int permission) {