summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/util/ViewCache.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2019-05-22 14:13:53 -0700
committerSunny Goyal <sunnygoyal@google.com>2019-05-22 14:23:12 -0700
commit5686333117ff6e2e4add6b2f32edcf047f241466 (patch)
treef7271799263a8d7d6cde5a6eb24bc9ad9ce25dd8 /src/com/android/launcher3/util/ViewCache.java
parent07b985b5e5763bafec786d52b8f65fdcff2d1b14 (diff)
downloadandroid_packages_apps_Trebuchet-5686333117ff6e2e4add6b2f32edcf047f241466.tar.gz
android_packages_apps_Trebuchet-5686333117ff6e2e4add6b2f32edcf047f241466.tar.bz2
android_packages_apps_Trebuchet-5686333117ff6e2e4add6b2f32edcf047f241466.zip
Adding a utility class to cache views at an activity level
Bug: 122345781 Change-Id: I9a939e0b19c06c1089c1ceb515f8b97fb5dbb49e
Diffstat (limited to 'src/com/android/launcher3/util/ViewCache.java')
-rw-r--r--src/com/android/launcher3/util/ViewCache.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/com/android/launcher3/util/ViewCache.java b/src/com/android/launcher3/util/ViewCache.java
new file mode 100644
index 000000000..08b874416
--- /dev/null
+++ b/src/com/android/launcher3/util/ViewCache.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.launcher3.util;
+
+import android.content.Context;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Utility class to cache views at an activity level
+ */
+public class ViewCache {
+
+ protected final SparseArray<CacheEntry> mCache = new SparseArray();
+
+ public void setCacheSize(int layoutId, int size) {
+ mCache.put(layoutId, new CacheEntry(size));
+ }
+
+ public <T extends View> T getView(int layoutId, Context context, ViewGroup parent) {
+ CacheEntry entry = mCache.get(layoutId);
+ if (entry == null) {
+ entry = new CacheEntry(1);
+ mCache.put(layoutId, entry);
+ }
+
+ if (entry.mCurrentSize > 0) {
+ entry.mCurrentSize --;
+ T result = (T) entry.mViews[entry.mCurrentSize];
+ entry.mViews[entry.mCurrentSize] = null;
+ return result;
+ }
+
+ return (T) LayoutInflater.from(context).inflate(layoutId, parent, false);
+ }
+
+ public void recycleView(int layoutId, View view) {
+ CacheEntry entry = mCache.get(layoutId);
+ if (entry != null && entry.mCurrentSize < entry.mMaxSize) {
+ entry.mViews[entry.mCurrentSize] = view;
+ entry.mCurrentSize++;
+ }
+ }
+
+ private static class CacheEntry {
+
+ final int mMaxSize;
+ final View[] mViews;
+
+ int mCurrentSize;
+
+ public CacheEntry(int maxSize) {
+ mMaxSize = maxSize;
+ mViews = new View[maxSize];
+ mCurrentSize = 0;
+ }
+ }
+}