diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2018-06-29 14:40:18 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2018-07-03 14:39:21 -0700 |
commit | d0e360a8586f17268d57eb6c4dc01d21f1883f32 (patch) | |
tree | 87402d5a20c5d3604d2312acf28803b461081641 /src/com/android/launcher3/util | |
parent | 87555c56dc464186219538c2b530bd275f8a8d1d (diff) | |
download | android_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.java | 60 |
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); + } +} |