소스 검색

toggle folder's sync on/off - wip since state persistence is not working reliably yet

Andy Scherzinger 8 년 전
부모
커밋
b9c15c127c

+ 1 - 0
src/com/owncloud/android/datamodel/SyncedFolderItem.java

@@ -27,6 +27,7 @@ import java.util.List;
  * TODO javadoc
  */
 public class SyncedFolderItem extends SyncedFolder {
+    public static final long UNPERSISTED_ID = Long.MIN_VALUE;
     private List<String> filePaths;
     private String folderName;
     private long numberOfFiles;

+ 1 - 1
src/com/owncloud/android/datamodel/SyncedFolderProvider.java

@@ -197,7 +197,7 @@ public class SyncedFolderProvider extends Observable {
         ContentValues cv = createContentValuesFromSyncedFolder(syncedFolder);
 
         int result = mContentResolver.update(
-                ProviderMeta.ProviderTableMeta.CONTENT_URI_UPLOADS,
+                ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS,
                 cv,
                 ProviderMeta.ProviderTableMeta._ID + "=?",
                 new String[]{String.valueOf(syncedFolder.getId())}

+ 18 - 0
src/com/owncloud/android/providers/FileContentProvider.java

@@ -180,6 +180,9 @@ public class FileContentProvider extends ContentProvider {
             case UPLOADS:
                 count = db.delete(ProviderTableMeta.UPLOADS_TABLE_NAME, where, whereArgs);
                 break;
+            case SYNCED_FOLDERS:
+                count = db.delete(ProviderTableMeta.SYNCED_FOLDERS_TABLE_NAME, where, whereArgs);
+                break;
             default:
                 //Log_OC.e(TAG, "Unknown uri " + uri);
                 throw new IllegalArgumentException("Unknown uri: " + uri.toString());
@@ -289,6 +292,19 @@ public class FileContentProvider extends ContentProvider {
 
                 }
                 return insertedUploadUri;
+
+            case SYNCED_FOLDERS:
+                Uri insertedSyncedFolderUri = null;
+                long syncedFolderId = db.insert(ProviderTableMeta.SYNCED_FOLDERS_TABLE_NAME, null, values);
+                if (syncedFolderId > 0) {
+                    insertedSyncedFolderUri =
+                            ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, syncedFolderId);
+                } else {
+                    throw new SQLException("ERROR " + uri);
+
+                }
+                return insertedSyncedFolderUri;
+
             default:
                 throw new IllegalArgumentException("Unknown uri id: " + uri);
         }
@@ -494,6 +510,8 @@ public class FileContentProvider extends ContentProvider {
                 );
                 trimSuccessfulUploads(db);
                 return ret;
+            case SYNCED_FOLDERS:
+                return db.update(ProviderTableMeta.SYNCED_FOLDERS_TABLE_NAME, values, selection, selectionArgs);
             default:
                 return db.update(
                         ProviderTableMeta.FILE_TABLE_NAME, values, selection, selectionArgs

+ 19 - 7
src/com/owncloud/android/ui/activity/FolderSyncActivity.java

@@ -24,11 +24,11 @@ package com.owncloud.android.ui.activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
+import android.support.annotation.NonNull;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
-import android.util.Log;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -83,13 +83,13 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         setupContent();
     }
 
-
     private void setupContent() {
         mRecyclerView = (RecyclerView) findViewById(android.R.id.list);
 
         mProgress = (LinearLayout) findViewById(android.R.id.progress);
         mEmpty = (TextView) findViewById(android.R.id.empty);
 
+        // TODO implement "dynamic" grid count via xml-value for tablet vs. phone
         final int gridWidth = 4;
         mAdapter = new FolderSyncAdapter(this, gridWidth, this, mRecyclerView);
         mSyncedFolderProvider = new SyncedFolderProvider(getContentResolver());
@@ -113,9 +113,12 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
                 syncFolderItems = mergeFolderData(mSyncedFolderProvider.getSyncedFolders(),
                         mediaFolders);
 
+                // TODO remove before mergeing to master, keeping it for debugging atm
+                /**
                 for (MediaFolder mediaFolder : mediaFolders) {
                     Log.d(TAG, mediaFolder.absolutePath);
                 }
+                 */
 
                 mHandler.post(new TimerTask() {
                     @Override
@@ -128,7 +131,9 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         }).start();
     }
 
-    private List<SyncedFolderItem> mergeFolderData(List<SyncedFolder> syncedFolders, List<MediaFolder> mediaFolders) {
+    @NonNull
+    private List<SyncedFolderItem> mergeFolderData(List<SyncedFolder> syncedFolders,
+                                                   @NonNull List<MediaFolder> mediaFolders) {
         Map<String, SyncedFolder> syncedFoldersMap = createSyncedFoldersMap(syncedFolders);
         List<SyncedFolderItem> result = new ArrayList<>();
 
@@ -144,7 +149,8 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         return result;
     }
 
-    private SyncedFolderItem createSyncedFolder(SyncedFolder syncedFolder, MediaFolder mediaFolder) {
+    @NonNull
+    private SyncedFolderItem createSyncedFolder(@NonNull SyncedFolder syncedFolder, @NonNull MediaFolder mediaFolder) {
         return new SyncedFolderItem(
                 syncedFolder.getId(),
                 syncedFolder.getLocalPath(),
@@ -160,9 +166,10 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
                 mediaFolder.numberOfFiles);
     }
 
-    private SyncedFolderItem createSyncedFolderFromMediaFolder(MediaFolder mediaFolder) {
+    @NonNull
+    private SyncedFolderItem createSyncedFolderFromMediaFolder(@NonNull MediaFolder mediaFolder) {
         return new SyncedFolderItem(
-                0,
+                SyncedFolderItem.UNPERSISTED_ID,
                 mediaFolder.absolutePath,
                 getString(R.string.instant_upload_path) + "/" + mediaFolder.folderName,
                 true,
@@ -176,6 +183,7 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
                 mediaFolder.numberOfFiles);
     }
 
+    @NonNull
     private Map<String,SyncedFolder> createSyncedFoldersMap(List<SyncedFolder> syncFolders) {
         Map<String, SyncedFolder> result = new HashMap<>();
         if (syncFolders != null) {
@@ -229,7 +237,11 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
 
     @Override
     public void onSyncStatusToggleClick(int section, SyncedFolderItem syncedFolderItem) {
-        Toast.makeText(this, "Sync Status Clicked for " + syncedFolderItem.getLocalPath(), Toast.LENGTH_SHORT).show();
+        if(syncedFolderItem.getId() > SyncedFolderItem.UNPERSISTED_ID) {
+            mSyncedFolderProvider.updateFolderSyncEnabled(syncedFolderItem.getId(),!syncedFolderItem.isEnabled());
+        } else {
+            mSyncedFolderProvider.storeFolderSync(syncedFolderItem);
+        }
     }
 
     @Override

+ 13 - 1
src/com/owncloud/android/ui/adapter/FolderSyncAdapter.java

@@ -82,7 +82,7 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
     }
 
     @Override
-    public void onBindHeaderViewHolder(MainViewHolder holder, final int section) {
+    public void onBindHeaderViewHolder(final MainViewHolder holder, final int section) {
         holder.title.setText(mSyncFolderItems.get(section).getFolderName());
         holder.syncStatusButton.setVisibility(View.VISIBLE);
         holder.syncStatusButton.setTag(section);
@@ -90,8 +90,12 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
             @Override
             public void onClick(View v) {
                 mListener.onSyncStatusToggleClick(section, mSyncFolderItems.get(section));
+                mSyncFolderItems.get(section).setEnabled(!mSyncFolderItems.get(section).isEnabled());
+                setSyncButtonActiveIcon(holder.syncStatusButton, mSyncFolderItems.get(section).isEnabled());
             }
         });
+        setSyncButtonActiveIcon(holder.syncStatusButton, mSyncFolderItems.get(section).isEnabled());
+
         holder.menuButton.setVisibility(View.VISIBLE);
         holder.menuButton.setTag(section);
         holder.menuButton.setOnClickListener(new View.OnClickListener() {
@@ -204,4 +208,12 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
             thumbnailDarkener = (ImageView) itemView.findViewById(R.id.thumbnailDarkener);
         }
     }
+
+    private void setSyncButtonActiveIcon(ImageButton syncStatusButton, boolean enabled) {
+        if(enabled) {
+            syncStatusButton.setImageResource(R.drawable.ic_cloud_sync_on);
+        } else {
+            syncStatusButton.setImageResource(R.drawable.ic_cloud_sync_off);
+        }
+    }
 }