diff --git a/src/com/android/customization/model/grid/GridOptionsManager.java b/src/com/android/customization/model/grid/GridOptionsManager.java
index a0ae04c..cf55147 100644
--- a/src/com/android/customization/model/grid/GridOptionsManager.java
+++ b/src/com/android/customization/model/grid/GridOptionsManager.java
@@ -17,7 +17,6 @@
 
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.util.Pair;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -66,7 +65,7 @@
         return mProvider.renderPreview(gridName, bundle);
     }
 
-    private static class FetchTask extends AsyncTask<Void, Void, Pair<List<GridOption>, String>> {
+    private static class FetchTask extends AsyncTask<Void, Void, List<GridOption>> {
         private final LauncherGridOptionsProvider mProvider;
         @Nullable private final OptionsFetchedListener<GridOption> mCallback;
         private final boolean mReload;
@@ -79,16 +78,15 @@
         }
 
         @Override
-        protected Pair<List<GridOption>, String> doInBackground(Void[] params) {
+        protected List<GridOption> doInBackground(Void[] params) {
             return mProvider.fetch(mReload);
         }
 
         @Override
-        protected void onPostExecute(Pair<List<GridOption>, String> gridOptionsResult) {
+        protected void onPostExecute(List<GridOption> gridOptions) {
             if (mCallback != null) {
-                if (gridOptionsResult != null && gridOptionsResult.first != null
-                        && !gridOptionsResult.first.isEmpty()) {
-                    mCallback.onOptionsLoaded(gridOptionsResult.first);
+                if (gridOptions != null && !gridOptions.isEmpty()) {
+                    mCallback.onOptionsLoaded(gridOptions);
                 } else {
                     mCallback.onError(null);
                 }
diff --git a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
index 175f71a..cdab1a6 100644
--- a/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
+++ b/src/com/android/customization/model/grid/LauncherGridOptionsProvider.java
@@ -21,7 +21,6 @@
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.os.Bundle;
-import android.util.Pair;
 import android.view.SurfaceView;
 
 import androidx.annotation.Nullable;
@@ -59,7 +58,6 @@
     private final Context mContext;
     private final PreviewUtils mPreviewUtils;
     private List<GridOption> mOptions;
-    private String mVersion;
 
     public LauncherGridOptionsProvider(Context context, String authorityMetadataKey) {
         mPreviewUtils = new PreviewUtils(context, authorityMetadataKey);
@@ -76,19 +74,18 @@
      */
     @WorkerThread
     @Nullable
-    Pair<List<GridOption>, String> fetch(boolean reload) {
+    List<GridOption> fetch(boolean reload) {
         if (!areGridsAvailable()) {
             return null;
         }
         if (mOptions != null && !reload) {
-            return Pair.create(mOptions, mVersion);
+            return mOptions;
         }
         ContentResolver resolver = mContext.getContentResolver();
         String iconPath = mContext.getResources().getString(Resources.getSystem().getIdentifier(
                 ResourceConstants.CONFIG_ICON_MASK, "string", ResourceConstants.ANDROID_PACKAGE));
         try (Cursor c = resolver.query(mPreviewUtils.getUri(LIST_OPTIONS), null, null, null,
                 null)) {
-            mVersion = c.getExtras().getString(METADATA_KEY_PREVIEW_VERSION);
             mOptions = new ArrayList<>();
             while(c.moveToNext()) {
                 String name = c.getString(c.getColumnIndex(COL_NAME));
@@ -105,9 +102,8 @@
             Glide.get(mContext).clearDiskCache();
         } catch (Exception e) {
             mOptions = null;
-            mVersion = null;
         }
-        return Pair.create(mOptions, mVersion);
+        return mOptions;
     }
 
     /**
