diff --git a/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java b/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java
index 9dd5946..ecb0889 100644
--- a/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java
+++ b/robotests/src/com/android/keychain/internal/GrantsDatabaseTest.java
@@ -16,6 +16,10 @@
 
 package com.android.keychain.internal;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.pm.PackageManager;
 import com.android.keychain.TestConfig;
 import org.junit.Assert;
 import org.junit.Before;
@@ -96,6 +100,33 @@
     }
 
     @Test
+    public void testPurgeOldGrantsDoesNotDeleteGrantsForExistingPackages() {
+        mGrantsDB.setGrant(DUMMY_UID, DUMMY_ALIAS, true);
+        PackageManager pm = mock(PackageManager.class);
+        when(pm.getPackagesForUid(DUMMY_UID)).thenReturn(new String[]{"p"});
+        mGrantsDB.purgeOldGrants(pm);
+        Assert.assertTrue(mGrantsDB.hasGrant(DUMMY_UID, DUMMY_ALIAS));
+    }
+
+    @Test
+    public void testPurgeOldGrantsPurgesAllNonExistingPackages() {
+        mGrantsDB.setGrant(DUMMY_UID, DUMMY_ALIAS, true);
+        mGrantsDB.setGrant(DUMMY_UID2, DUMMY_ALIAS, true);
+        PackageManager pm = mock(PackageManager.class);
+        when(pm.getPackagesForUid(DUMMY_UID)).thenReturn(null);
+        when(pm.getPackagesForUid(DUMMY_UID2)).thenReturn(null);
+        mGrantsDB.purgeOldGrants(pm);
+        Assert.assertFalse(mGrantsDB.hasGrant(DUMMY_UID, DUMMY_ALIAS));
+        Assert.assertFalse(mGrantsDB.hasGrant(DUMMY_UID2, DUMMY_ALIAS));
+    }
+
+    @Test
+    public void testPurgeOldGrantsWorksOnEmptyDatabase() {
+        // Check that NPE is not thrown.
+        mGrantsDB.purgeOldGrants(null);
+    }
+
+    @Test
     public void testIsUserSelectable() {
         Assert.assertFalse(mGrantsDB.isUserSelectable(DUMMY_ALIAS));
         mGrantsDB.setIsUserSelectable(DUMMY_ALIAS, true);
diff --git a/src/com/android/keychain/internal/GrantsDatabase.java b/src/com/android/keychain/internal/GrantsDatabase.java
index 4783378..28605b5 100644
--- a/src/com/android/keychain/internal/GrantsDatabase.java
+++ b/src/com/android/keychain/internal/GrantsDatabase.java
@@ -154,19 +154,11 @@
 
     public void purgeOldGrants(PackageManager pm) {
         final SQLiteDatabase db = mDatabaseHelper.getWritableDatabase();
-        Cursor cursor = null;
         db.beginTransaction();
-        try {
-            cursor =
-                    db.query(
-                            TABLE_GRANTS,
-                            new String[] {GRANTS_GRANTEE_UID},
-                            null,
-                            null,
-                            GRANTS_GRANTEE_UID,
-                            null,
-                            null);
-            while (cursor.moveToNext()) {
+        try (Cursor cursor = db.query(
+                TABLE_GRANTS,
+                new String[] {GRANTS_GRANTEE_UID}, null, null, GRANTS_GRANTEE_UID, null, null)) {
+            while ((cursor != null) && (cursor.moveToNext())) {
                 final int uid = cursor.getInt(0);
                 final boolean packageExists = pm.getPackagesForUid(uid) != null;
                 if (packageExists) {
@@ -181,12 +173,9 @@
                         new String[] {Integer.toString(uid)});
             }
             db.setTransactionSuccessful();
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-            db.endTransaction();
         }
+
+        db.endTransaction();
     }
 
     public void setIsUserSelectable(final String alias, final boolean userSelectable) {
