package com.seafile.seadroid2.cameraupload; import android.content.ContentResolver; import android.content.Context; import android.os.Bundle; import com.seafile.seadroid2.BuildConfig; import com.seafile.seadroid2.account.Account; import com.seafile.seadroid2.account.AccountManager; /** * Camera Upload Manager. * <p/> * This class can be used by other parts of Seadroid to enable/configure the camera upload * service. */ public class CameraUploadManager { /** * The authority of the camera sync service */ public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".cameraupload.provider"; AccountManager accountManager; public CameraUploadManager(Context context) { accountManager = new AccountManager(context); } /** * Is camera upload enabled? * * @return true if camera upload is enabled. */ public boolean isCameraUploadEnabled() { Account account = getCameraAccount(); return account != null; } /** * Get the account that is currently the remote target for the camera upload * * @return the account if camera is enabled, null otherwise. */ public Account getCameraAccount() { for (Account account : accountManager.getAccountList()) { int isSyncable = ContentResolver.getIsSyncable(account.getAndroidAccount(), AUTHORITY); if (isSyncable > 0) return account; } return null; } /** * Initiate a camera sync immediately. */ public void performSync() { Account cameraAccount = getCameraAccount(); if (cameraAccount != null) ContentResolver.requestSync(cameraAccount.getAndroidAccount(), AUTHORITY, Bundle.EMPTY); } /** * Initiate a camera sync immediately, upload all media files again. */ public void performFullSync() { Bundle b = new Bundle(); b.putBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, true); Account cameraAccount = getCameraAccount(); if (cameraAccount != null) ContentResolver.requestSync(cameraAccount.getAndroidAccount(), AUTHORITY, b); } /** * Change the account currently responsible for camera upload. * * @param account An account. must not be null. */ public void setCameraAccount(Account account) { for (Account a : accountManager.getAccountList()) { if (a.equals(account)) { // enable camera upload on this account ContentResolver.setIsSyncable(a.getAndroidAccount(), AUTHORITY, 1); ContentResolver.setSyncAutomatically(a.getAndroidAccount(), AUTHORITY, true); } else { // disable on all the others ContentResolver.cancelSync(a.getAndroidAccount(), AUTHORITY); ContentResolver.setIsSyncable(a.getAndroidAccount(), AUTHORITY, 0); } } } /** * Disable camera upload. */ public void disableCameraUpload() { for (Account account : accountManager.getAccountList()) { ContentResolver.cancelSync(account.getAndroidAccount(), AUTHORITY); ContentResolver.setIsSyncable(account.getAndroidAccount(), AUTHORITY, 0); } } }