Эх сурвалжийг харах

Merge pull request #685 from tobiasKaminsky/beautifyTimestamps

Relative time stamps in the list of files.
David A. Velasco 10 жил өмнө
parent
commit
1b36e1ca08

+ 1 - 1
owncloud-android-library

@@ -1 +1 @@
-Subproject commit 4f315c7e06f6eef48df246be0ee9252fdfccdf00
+Subproject commit 5bd0d7387712ce3f53869294761ac4d8537841cd

+ 1 - 0
res/values/strings.xml

@@ -62,6 +62,7 @@
     <string name="uploader_wrn_no_content_text">No content was received. Nothing to upload.</string>
     <string name="uploader_error_forbidden_content">%1$s is not allowed to access the shared content</string>
     <string name="uploader_info_uploading">Uploading</string>
+    <string name="file_list_seconds_ago">seconds ago</string>
     <string name="file_list_empty">Nothing in here. Upload something!</string>
     <string name="file_list_loading">Loading...</string>
     <string name="local_file_list_empty">There are no files in this folder.</string>

+ 10 - 7
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -29,6 +29,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.graphics.Bitmap;
 import android.preference.PreferenceManager;
+import android.text.format.DateUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -46,6 +47,7 @@ import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncDrawable;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
@@ -183,9 +185,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 fileSizeV.setVisibility(View.VISIBLE);
                 fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
                 lastModV.setVisibility(View.VISIBLE);
-                lastModV.setText(
-                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())
-                );
+                lastModV.setText(showRelativeTimestamp(file));
                 // this if-else is needed even thoe fav icon is visible by default
                 // because android reuses views in listview
                 if (!file.keepInSync()) {
@@ -253,9 +253,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 //                }
 
                 lastModV.setVisibility(View.VISIBLE);
-                lastModV.setText(
-                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())
-                );
+                lastModV.setText(showRelativeTimestamp(file));
                 checkBoxV.setVisibility(View.GONE);
                 view.findViewById(R.id.imageView3).setVisibility(View.GONE);
 
@@ -517,5 +515,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         mSortAscending = ascending;
         
         sortDirectory();
-    }    
+    }    
+    
+    private CharSequence showRelativeTimestamp(OCFile file){
+        return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),
+                DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);
+    }
 }

+ 29 - 0
src/com/owncloud/android/utils/DisplayUtils.java

@@ -27,7 +27,10 @@ import java.util.HashSet;
 import java.util.Set;
 
 import android.annotation.TargetApi;
+import android.content.Context;
 import android.os.Build;
+import android.text.format.DateFormat;
+import android.text.format.DateUtils;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -274,4 +277,30 @@ public class DisplayUtils {
             return url;
         }
     }
+    
+    public static CharSequence getRelativeDateTimeString(Context c, long time, long minResolution, long transitionResolution, int flags){
+        CharSequence dateString = "";
+        
+        // in Future
+        if (time > System.currentTimeMillis()){
+            return DisplayUtils.unixTimeToHumanReadable(time);
+        } 
+        // < 60 seconds -> seconds ago
+        else if ((System.currentTimeMillis() - time) < 60 * 1000) {
+            return c.getString(R.string.file_list_seconds_ago);
+        } else {
+            // Workaround 2.x bug (see https://github.com/owncloud/android/issues/716)
+            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && (System.currentTimeMillis() - time) > 24 * 60 * 60 * 1000){
+                Date date = new Date(time);
+                date.setHours(0);
+                date.setMinutes(0);
+                date.setSeconds(0);
+                dateString = DateUtils.getRelativeDateTimeString(c, date.getTime(), minResolution, transitionResolution, flags);
+            } else {
+                dateString = DateUtils.getRelativeDateTimeString(c, time, minResolution, transitionResolution, flags);
+            }
+        }
+        
+        return dateString.toString().split(",")[0];
+    }
 }