Bug 1243558 - Add UrlAnnotations.getScreenshots method. r=sebastian draft
authorMichael Comella <michael.l.comella@gmail.com>
Fri, 26 Feb 2016 18:24:49 -0800
changeset 335144 c5e44d32490584f7308b7886b263e68e5b95979e
parent 335139 3d3825dd1d31406e1e6c04ffd3e16d727eb2929c
child 335145 764d398231af9f0b176da4df819c0cabfbe2301c
child 335633 cb04a2892490fd23b48f8b14d3b4c662e2e7e8a7
push id11731
push usermichael.l.comella@gmail.com
push dateSat, 27 Feb 2016 02:30:13 +0000
reviewerssebastian
bugs1243558
milestone47.0a1
Bug 1243558 - Add UrlAnnotations.getScreenshots method. r=sebastian MozReview-Commit-ID: GOjliERct95
mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java
mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java
mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java
mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java
--- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserContract.java
@@ -492,16 +492,27 @@ public class BrowserContract {
         public static final String TABLE_NAME = "urlannotations";
         public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, TABLE_NAME);
 
         public static final String URL = "url";
         public static final String KEY = "key";
         public static final String VALUE = "value";
         public static final String SYNC_STATUS = "sync_status";
 
+        public enum Key {
+            // We use a parameter, rather than name(), as defensive coding: we can't let the
+            // enum name change because we've already stored values into the DB.
+            SCREENSHOT ("screenshot");
+
+            private final String dbValue;
+
+            Key(final String dbValue) { this.dbValue = dbValue; }
+            public String getDbValue() { return dbValue; }
+        }
+
         public enum SyncStatus {
             // We use a parameter, rather than ordinal(), as defensive coding: we can't let the
             // ordinal values change because we've already stored values into the DB.
             NEW (0);
 
             // Value stored into the database for this column.
             private final int dbValue;
 
--- a/mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/LocalUrlAnnotations.java
@@ -1,18 +1,23 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.db;
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
+import android.database.Cursor;
 import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import org.json.JSONObject;
 import org.mozilla.gecko.annotation.RobocopTarget;
+import org.mozilla.gecko.db.BrowserContract.UrlAnnotations.Key;
 
 public class LocalUrlAnnotations implements UrlAnnotations {
     private Uri urlAnnotationsTableWithProfile;
 
     public LocalUrlAnnotations(final String profile) {
         urlAnnotationsTableWithProfile = DBUtils.appendProfile(profile, BrowserContract.UrlAnnotations.CONTENT_URI);
     }
 
@@ -23,9 +28,31 @@ public class LocalUrlAnnotations impleme
         final ContentValues values = new ContentValues(5);
         values.put(BrowserContract.UrlAnnotations.URL, url);
         values.put(BrowserContract.UrlAnnotations.KEY, key);
         values.put(BrowserContract.UrlAnnotations.VALUE, value);
         values.put(BrowserContract.UrlAnnotations.DATE_CREATED, creationTime);
         values.put(BrowserContract.UrlAnnotations.DATE_MODIFIED, creationTime);
         cr.insert(urlAnnotationsTableWithProfile, values);
     }
+
+    private Cursor queryByKey(final ContentResolver cr, @NonNull final Key key, @Nullable final String[] projections,
+                @Nullable final String sortOrder) {
+        return cr.query(urlAnnotationsTableWithProfile,
+                projections,
+                BrowserContract.UrlAnnotations.KEY + " = ?", new String[] { key.getDbValue() },
+                sortOrder);
+    }
+
+    @Override
+    public Cursor getScreenshots(ContentResolver cr) {
+        return queryByKey(cr,
+                Key.SCREENSHOT,
+                new String[] {
+                        BrowserContract.UrlAnnotations._ID,
+                        BrowserContract.UrlAnnotations.URL,
+                        BrowserContract.UrlAnnotations.KEY,
+                        BrowserContract.UrlAnnotations.VALUE,
+                        BrowserContract.UrlAnnotations.DATE_CREATED,
+                },
+                BrowserContract.UrlAnnotations.DATE_CREATED + " DESC");
+    }
 }
--- a/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java
@@ -148,16 +148,19 @@ class StubTabsAccessor implements TabsAc
     }
 
     public synchronized void persistLocalTabs(final ContentResolver cr, final Iterable<Tab> tabs) { }
 }
 
 class StubUrlAnnotations implements UrlAnnotations {
     @Override
     public void insertAnnotation(ContentResolver cr, String url, String key, String value) {}
+
+    @Override
+    public Cursor getScreenshots(ContentResolver cr) { return null; }
 }
 
 /*
  * This base implementation just stubs all methods. For the
  * real implementations, see LocalBrowserDB.java.
  */
 public class StubBrowserDB implements BrowserDB {
     private final StubSearches searches = new StubSearches();
--- a/mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/UrlAnnotations.java
@@ -1,12 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.db;
 
 import android.content.ContentResolver;
+import android.database.Cursor;
 import org.mozilla.gecko.annotation.RobocopTarget;
 
 public interface UrlAnnotations {
     @RobocopTarget void insertAnnotation(ContentResolver cr, String url, String key, String value);
+    Cursor getScreenshots(ContentResolver cr);
 }