فهرست منبع

dynamic media grid width sizing and revampedd instant upload icon

AndyScherzinger 8 سال پیش
والد
کامیت
faea2f01fb

BIN
res/drawable-hdpi/ic_cloud_upload.png


BIN
res/drawable-mdpi/ic_cloud_upload.png


BIN
res/drawable-xhdpi/ic_cloud_upload.png


BIN
res/drawable-xxhdpi/ic_cloud_upload.png


BIN
res/drawable-xxxhdpi/ic_cloud_upload.png


+ 1 - 1
res/menu/drawer_menu.xml

@@ -40,7 +40,7 @@
         <item
             android:orderInCategory="0"
             android:id="@+id/nav_folder_sync"
-            android:icon="@drawable/ic_cloud_check"
+            android:icon="@drawable/ic_cloud_upload"
             android:title="@string/drawer_folder_sync"/>
     </group>
 

+ 1 - 0
res/values-sw360dp/dims.xml

@@ -22,4 +22,5 @@
   <dimen name="nav_drawer_header_avatar">64dp</dimen>
   <!-- avatar radius needs to 1/2 of the avatar dp value -->
   <dimen name="nav_drawer_header_avatar_radius">32dp</dimen>
+  <integer name="media_grid_width">4</integer>
 </resources>

+ 26 - 0
res/values-sw600dp/dims.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ownCloud Android client application
+
+  Copyright (C) 2016 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+<resources>
+  <!-- Default screen margins, per the Android Design guidelines. -->
+  <dimen name="nav_drawer_header_height">164dp</dimen>
+  <dimen name="nav_drawer_header_avatar">64dp</dimen>
+  <!-- avatar radius needs to 1/2 of the avatar dp value -->
+  <dimen name="nav_drawer_header_avatar_radius">32dp</dimen>
+  <integer name="media_grid_width">6</integer>
+</resources>

+ 2 - 1
res/values/dims.xml

@@ -99,5 +99,6 @@
     <dimen name="upload_list_item_text_size_independent">12dip</dimen>
     <dimen name="upload_list_item_image_size">35dp</dimen>
     <dimen name="uploader_list_item_layout_image_margin">12dp</dimen>
-    <dimen name="mediaGridSpacing">2dp</dimen>
+    <dimen name="media_grid_spacing">2dp</dimen>
+    <integer name="media_grid_width">4</integer>
 </resources>

+ 1 - 1
res/values/strings.xml

@@ -479,7 +479,7 @@
     <string name="actionbar_search">Search</string>
     <string name="files_drop_not_supported">This is a Nextcloud feature, please update.</string>
     <string name="learn_more">Learn more</string>
-    <string name="drawer_folder_sync">Folder Sync</string>
+    <string name="drawer_folder_sync">Instant Upload</string>
     <string name="drawer_participate">Participate</string>
     <string name="participate_testing_headline">Help us testing</string>
     <string name="participate_testing_bug_text">Found a bug? Something is odd?</string>

+ 6 - 4
src/com/owncloud/android/datamodel/MediaProvider.java

@@ -38,19 +38,21 @@ public class MediaProvider {
     private static final Uri MEDIA_URI = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
 
     /**
-     * TODO rewrite/beautify
      * Getting All Images Paths.
      *
      * @param contentResolver the content resolver
-     * @return List with images folders
+     * @param itemLimit       the number of media items (usually images) to be returned per media folder.
+     * @return list with media folders
      */
-    public static List<MediaFolder> getMediaFolders(ContentResolver contentResolver) {
+    public static List<MediaFolder> getMediaFolders(ContentResolver contentResolver, int itemLimit) {
         Cursor cursor;
         List<MediaFolder> mediaFolders = new ArrayList<>();
         int column_index_data, column_index_folder_name, column_index_data_image;
         String absolutePathOfImage;
         String folderName;
 
+        // TODO rewrite/beautify
+
         String[] folderProjection = new String[]{"Distinct " + MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore
                 .MediaColumns.DATA, MediaStore.Images.Media.DATE_TAKEN};
         String[] fileProjection = new String[]{MediaStore.MediaColumns.DATA};
@@ -59,7 +61,7 @@ public class MediaProvider {
                 .BUCKET_DISPLAY_NAME;
         String fileSelection = MediaStore.MediaColumns.DATA + " LIKE ";
         String folderSortOrder = "MAX(" + MediaStore.MediaColumns.DATA + ") DESC";
-        String fileSortOrder = MediaStore.Images.Media.DATE_TAKEN + " DESC LIMIT 8"; //  LIMIT 8
+        String fileSortOrder = MediaStore.Images.Media.DATE_TAKEN + " DESC LIMIT "+ itemLimit;
 
         cursor = contentResolver.query(MEDIA_URI, folderProjection, folderSelection, null, folderSortOrder);
 

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

@@ -101,32 +101,34 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         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);
+        final int gridWidth = getResources().getInteger(R.integer.media_grid_width);
+        mAdapter = new FolderSyncAdapter(this, gridWidth, this);
         mSyncedFolderProvider = new SyncedFolderProvider(getContentResolver());
 
         final GridLayoutManager lm = new GridLayoutManager(this, gridWidth);
         mAdapter.setLayoutManager(lm);
-        int spacing = getResources().getDimensionPixelSize(R.dimen.mediaGridSpacing);
+        int spacing = getResources().getDimensionPixelSize(R.dimen.media_grid_spacing);
         mRecyclerView.addItemDecoration(new MediaGridItemDecoration(spacing));
         mRecyclerView.setLayoutManager(lm);
         mRecyclerView.setAdapter(mAdapter);
 
-        load();
+        load(gridWidth * 2);
     }
 
     /**
      * loads all media/synced folders, adds them to the recycler view adapter and shows the list.
+     *
+     * @param perFolderMediaItemLimit the amount of media items to be loaded/shown per media folder
      */
-    private void load() {
+    private void load(final int perFolderMediaItemLimit) {
         if (mAdapter.getItemCount() > 0) return;
         setListShown(false);
         final Handler mHandler = new Handler();
         new Thread(new Runnable() {
             @Override
             public void run() {
-                final List<MediaFolder> mediaFolders = MediaProvider.getMediaFolders(getContentResolver());
+                final List<MediaFolder> mediaFolders = MediaProvider.getMediaFolders(getContentResolver(),
+                        perFolderMediaItemLimit);
                 syncFolderItems = sortSyncedFolderItems(mergeFolderData(mSyncedFolderProvider.getSyncedFolders(),
                         mediaFolders));
 

+ 8 - 9
src/com/owncloud/android/ui/adapter/FolderSyncAdapter.java

@@ -53,16 +53,16 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
 
     private final Context mContext;
     private final int mGridWidth;
+    private final int mGridTotal;
     private final ClickListener mListener;
     private final List<SyncedFolderDisplayItem> mSyncFolderItems;
-    private final RecyclerView mRecyclerView;
 
-    public FolderSyncAdapter(Context context, int gridWidth, ClickListener listener, RecyclerView recyclerView) {
+    public FolderSyncAdapter(Context context, int gridWidth, ClickListener listener) {
         mContext = context;
-        mGridWidth = gridWidth * 2;
+        mGridWidth = gridWidth;
+        mGridTotal = gridWidth * 2;
         mListener = listener;
         mSyncFolderItems = new ArrayList<>();
-        mRecyclerView = recyclerView;
     }
 
     public void setSyncFolderItems(List<SyncedFolderDisplayItem> syncFolderItems) {
@@ -108,7 +108,6 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
 
     @Override
     public void onBindViewHolder(MainViewHolder holder, int section, int relativePosition, int absolutePosition) {
-        final Context c = holder.itemView.getContext();
 
         File file = new File(mSyncFolderItems.get(section).getFilePaths().get(relativePosition));
 
@@ -162,10 +161,10 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
             holder.image.setImageResource(MimetypeIconUtil.getFileTypeIconId(null, file.getName()));
         }
 
-        holder.itemView.setTag(relativePosition % (mGridWidth/2));
+        holder.itemView.setTag(relativePosition % mGridWidth);
 
-        if (mSyncFolderItems.get(section).getNumberOfFiles() > 8 && relativePosition >= 8 - 1) {
-            holder.counterValue.setText(Long.toString(mSyncFolderItems.get(section).getNumberOfFiles() - 8));
+        if (mSyncFolderItems.get(section).getNumberOfFiles() > mGridTotal && relativePosition >= mGridTotal - 1) {
+            holder.counterValue.setText(Long.toString(mSyncFolderItems.get(section).getNumberOfFiles() - mGridTotal));
             holder.counterBar.setVisibility(View.VISIBLE);
             holder.thumbnailDarkener.setVisibility(View.VISIBLE);
         } else {
@@ -199,7 +198,7 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
         final TextView counterValue;
         final ImageView thumbnailDarkener;
 
-        public MainViewHolder(View itemView) {
+        private MainViewHolder(View itemView) {
             super(itemView);
             image = (ImageView) itemView.findViewById(R.id.thumbnail);
             title = (TextView) itemView.findViewById(R.id.title);