OSDN Git Service

Add maximum zoom level and time to view events.
authorAndy Huibers <andyhuibers@google.com>
Tue, 20 May 2014 22:17:06 +0000 (15:17 -0700)
committerAndy Huibers <andyhuibers@google.com>
Mon, 23 Jun 2014 20:52:02 +0000 (13:52 -0700)
Bug: 15646701
Change-Id: I7c1de761fc10486b417a25ebc8469cebaf840a1c

src/com/android/camera/CameraActivity.java
src/com/android/camera/data/LocalSessionData.java
src/com/android/camera/filmstrip/FilmstripController.java
src/com/android/camera/widget/FilmstripLayout.java
src/com/android/camera/widget/FilmstripView.java
src_pd/com/android/camera/util/UsageStatistics.java

index 2eddf43..a790feb 100644 (file)
@@ -52,6 +52,7 @@ import android.os.Looper;
 import android.os.Message;
 import android.provider.MediaStore;
 import android.provider.Settings;
+import android.text.TextUtils;
 import android.util.CameraPerformanceTracker;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
@@ -146,6 +147,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 
 public class CameraActivity extends Activity
         implements AppController, CameraManager.CameraOpenCallback,
@@ -678,6 +680,22 @@ public class CameraActivity extends Activity
                 }
 
                 @Override
+                public void onZoomAtIndexChanged(int dataId, float zoom) {
+                    final LocalData localData = mDataAdapter.getLocalData(dataId);
+                    long ageMillis = System.currentTimeMillis() - localData.getDateModified() * 1000;
+
+                    // Do not log if items is to old or does not have a path (which is
+                    // being used as a key).
+                    if (TextUtils.isEmpty(localData.getPath()) ||
+                            ageMillis > UsageStatistics.VIEW_TIMEOUT_MILLIS) {
+                        return;
+                    }
+                    File localFile = new File(localData.getPath());
+                    UsageStatistics.instance().mediaView(localFile.getName(),
+                            TimeUnit.SECONDS.toMillis(localData.getDateModified()), zoom);
+               }
+
+                @Override
                 public void onDataFocusChanged(final int prevDataId, final int newDataId) {
                     if (!mFilmstripVisible) {
                         return;
index 61c77f4..99b09ad 100644 (file)
@@ -29,6 +29,7 @@ import com.android.camera.Storage;
 import com.android.camera2.R;
 
 import java.util.Date;
+import java.util.concurrent.TimeUnit;
 
 /**
  * This is used to represent a local data item that is in progress and not
@@ -37,6 +38,7 @@ import java.util.Date;
 public class LocalSessionData implements LocalData {
 
     private Uri mUri;
+    // Units are GMT epoch milliseconds.
     private long mDateTaken;
     protected final Bundle mMetaData;
     private int mWidth;
@@ -93,7 +95,9 @@ public class LocalSessionData implements LocalData {
 
     @Override
     public long getDateModified() {
-        return mDateTaken;
+        // Convert to seconds because LocalData interface specifies that this
+        // method should return seconds and mDateTaken is in milliseconds.
+        return TimeUnit.MILLISECONDS.toSeconds(mDateTaken);
     }
 
     @Override
index 167435e..af4403f 100644 (file)
@@ -250,6 +250,14 @@ public interface FilmstripController {
         public void onEnterZoomView(int dataID);
 
         /**
+         * Called when current item or zoom level has changed.
+         *
+         * @param dataId The ID of the current focused image data.
+         * @param zoom Zoom level.
+         */
+        public void onZoomAtIndexChanged(int dataId, float zoom);
+
+        /**
          * The callback when the data focus changed.
          *
          * @param prevDataId The ID of the previously focused data or {@code -1} if
@@ -261,7 +269,8 @@ public interface FilmstripController {
         /**
          * The callback when we scroll.
          *
-         * @param firstVisiblePosition The position of the first rendered item (may be slightly offscreen depending on
+         * @param firstVisiblePosition The position of the first rendered item
+         *                             (may be slightly offscreen depending on
          *                             the orientation of the device).
          * @param visibleItemCount The total number of rendered items.
          * @param totalItemCount The total number of items in the filmstrip.
index 4a053d0..b1f0367 100644 (file)
@@ -202,6 +202,7 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
             return;
         }
         mListener.onFilmstripShown();
+        mFilmstripView.zoomAtIndexChanged();
         FilmstripController controller = mFilmstripView.getController();
         int currentId = controller.getCurrentId();
         if (controller.inFilmstrip()) {
index 4412007..a5076ef 100644 (file)
@@ -693,6 +693,14 @@ public class FilmstripView extends ViewGroup {
     }
 
     /**
+     * Called after current item or zoom level has changed.
+     */
+    public void zoomAtIndexChanged() {
+        int id = mViewItem[mCurrentItem].getId();
+        mListener.onZoomAtIndexChanged(id, mScale);
+    }
+
+    /**
      * Checks if the data is at the center.
      *
      * @param id The id of the data to check.
@@ -839,7 +847,6 @@ public class FilmstripView extends ViewGroup {
         if (nearest == -1 || nearest == mCurrentItem) {
             return;
         }
-
         int prevDataId = (mViewItem[mCurrentItem] == null ? -1 : mViewItem[mCurrentItem].getId());
         final int adjust = nearest - mCurrentItem;
         if (adjust > 0) {
@@ -878,6 +885,7 @@ public class FilmstripView extends ViewGroup {
             final int totalItemCount = mDataAdapter.getTotalNumber();
             mListener.onScroll(firstVisible, visibleItemCount, totalItemCount);
         }
+        zoomAtIndexChanged();
     }
 
     /**
@@ -1889,6 +1897,7 @@ public class FilmstripView extends ViewGroup {
                             onEnterFilmstrip();
                         }
                     }
+                    zoomAtIndexChanged();
                 }
 
                 @Override
@@ -2013,6 +2022,7 @@ public class FilmstripView extends ViewGroup {
                         onEnterZoomView();
                     }
                     mZoomAnimator = null;
+                    zoomAtIndexChanged();
                 }
 
                 @Override
@@ -2884,6 +2894,7 @@ public class FilmstripView extends ViewGroup {
 
         @Override
         public void onScaleEnd() {
+            zoomAtIndexChanged();
             if (mScale > FULL_SCREEN_SCALE + TOLERANCE) {
                 return;
             }
index 4079a36..ea1c6e5 100644 (file)
@@ -23,6 +23,8 @@ import com.android.camera.exif.ExifInterface;
 import java.util.HashMap;
 
 public class UsageStatistics {
+    public static final long VIEW_TIMEOUT_MILLIS = 0;
+
     private static UsageStatistics sInstance;
 
     public static UsageStatistics instance() {
@@ -38,6 +40,9 @@ public class UsageStatistics {
     public void mediaInteraction(String ref, int interactionType, int cause, float age) {
     }
 
+    public void mediaView(String ref, long modifiedMillis, float zoom) {
+    }
+
     public void foregrounded(int source, int mode) {
     }