summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/util
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2018-06-29 14:40:18 -0700
committerSunny Goyal <sunnygoyal@google.com>2018-07-03 14:39:21 -0700
commitd0e360a8586f17268d57eb6c4dc01d21f1883f32 (patch)
tree87402d5a20c5d3604d2312acf28803b461081641 /src/com/android/launcher3/util
parent87555c56dc464186219538c2b530bd275f8a8d1d (diff)
downloadandroid_packages_apps_Trebuchet-d0e360a8586f17268d57eb6c4dc01d21f1883f32.tar.gz
android_packages_apps_Trebuchet-d0e360a8586f17268d57eb6c4dc01d21f1883f32.tar.bz2
android_packages_apps_Trebuchet-d0e360a8586f17268d57eb6c4dc01d21f1883f32.zip
Lazy loading LauncherAppState
Separating InvarantDeviceProfile out of LauncherAppState and creating LauncherAppState only when it is actually used Change-Id: I2ee55f53cae01f11203f94675bb5f70c65ad2b9d
Diffstat (limited to 'src/com/android/launcher3/util')
-rw-r--r--src/com/android/launcher3/util/MainThreadInitializedObject.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/com/android/launcher3/util/MainThreadInitializedObject.java b/src/com/android/launcher3/util/MainThreadInitializedObject.java
new file mode 100644
index 000000000..5747db1c1
--- /dev/null
+++ b/src/com/android/launcher3/util/MainThreadInitializedObject.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2018 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.os.Looper;
+
+import com.android.launcher3.MainThreadExecutor;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Utility class for defining singletons which are initiated on main thread.
+ */
+public class MainThreadInitializedObject<T> {
+
+ private final ObjectProvider<T> mProvider;
+ private T mValue;
+
+ public MainThreadInitializedObject(ObjectProvider<T> provider) {
+ mProvider = provider;
+ }
+
+ public T get(Context context) {
+ if (mValue == null) {
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ mValue = mProvider.get(context.getApplicationContext());
+ } else {
+ try {
+ return new MainThreadExecutor().submit(() -> get(context)).get();
+ } catch (InterruptedException|ExecutionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ return mValue;
+ }
+
+ public T getNoCreate() {
+ return mValue;
+ }
+
+ public interface ObjectProvider<T> {
+
+ T get(Context context);
+ }
+}