LauncherAppState.java revision ee52336a9ed0c98f78831a0e44b21f5a8d8c17d1
1cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler/* 2cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * Copyright (C) 2013 The Android Open Source Project 3cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * 4cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 5cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * you may not use this file except in compliance with the License. 6cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * You may obtain a copy of the License at 7cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * 8cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 9cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * 10cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * Unless required by applicable law or agreed to in writing, software 11cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 12cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * See the License for the specific language governing permissions and 14cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * limitations under the License. 15cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler */ 16cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 17cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandlerpackage com.android.launcher3; 18cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 19cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandlerimport android.app.SearchManager; 20e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport android.content.ComponentName; 21e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport android.content.ContentResolver; 22e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport android.content.Context; 23e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport android.content.Intent; 24e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport android.content.IntentFilter; 25cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandlerimport android.content.res.Configuration; 26104c45677660586026a7e74ef8c47d396403d50eMichael Jurkaimport android.content.res.Resources; 27cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandlerimport android.database.ContentObserver; 28cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandlerimport android.os.Handler; 29b9eb2865af05d9ade572e71934a9e6a50421aa7dDaniel Sandlerimport android.util.Log; 30cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 31ed13187a745866483139e2878037e1f8427ce567Kenny Guyimport com.android.launcher3.compat.LauncherAppsCompat; 32e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport com.android.launcher3.compat.PackageInstallerCompat.PackageInstallInfo; 33ed13187a745866483139e2878037e1f8427ce567Kenny Guy 34cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandlerimport java.lang.ref.WeakReference; 35e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyalimport java.util.ArrayList; 36cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 376e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chungpublic class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { 385f8afe6280eae34620067696173e71943e1a30a3Winson Chung private static final String TAG = "LauncherAppState"; 39e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private static final String SHARED_PREFERENCES_KEY = "com.android.launcher3.prefs"; 40e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler 41ee52336a9ed0c98f78831a0e44b21f5a8d8c17d1Chris Wren private static final boolean DEBUG = false; 42aeff7ea43409d817490fbb8c22b8d4b9725bb54fChris Wren 4316f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal private final AppFilter mAppFilter; 4416f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal private final BuildInfo mBuildInfo; 45cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler private LauncherModel mModel; 46cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler private IconCache mIconCache; 47cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb; 48e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private boolean mIsScreenLarge; 49e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private float mScreenDensity; 50e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private int mLongPressTimeout = 300; 51a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka private boolean mWallpaperChangedSinceLastCheck; 52cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 53e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private static WeakReference<LauncherProvider> sLauncherProvider; 54e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private static Context sContext; 55cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 56e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private static LauncherAppState INSTANCE; 57cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 585f8afe6280eae34620067696173e71943e1a30a3Winson Chung private DynamicGrid mDynamicGrid; 595f8afe6280eae34620067696173e71943e1a30a3Winson Chung 60cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler public static LauncherAppState getInstance() { 61e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler if (INSTANCE == null) { 62e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler INSTANCE = new LauncherAppState(); 63e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler } 64cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler return INSTANCE; 65cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 66cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 67d8fe6de10d5ffc293f771b070bd1361a027757bbChris Wren public static LauncherAppState getInstanceNoCreate() { 68d8fe6de10d5ffc293f771b070bd1361a027757bbChris Wren return INSTANCE; 69d8fe6de10d5ffc293f771b070bd1361a027757bbChris Wren } 70d8fe6de10d5ffc293f771b070bd1361a027757bbChris Wren 71cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler public Context getContext() { 72e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler return sContext; 73cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 74cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 75e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler public static void setApplicationContext(Context context) { 76e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler if (sContext != null) { 77e060b0b3c72b93b47031f0f33bf18b121fb99333Daniel Sandler Log.w(Launcher.TAG, "setApplicationContext called twice! old=" + sContext + " new=" + context); 78e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler } 79e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler sContext = context.getApplicationContext(); 80e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler } 81b9eb2865af05d9ade572e71934a9e6a50421aa7dDaniel Sandler 82e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler private LauncherAppState() { 83e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler if (sContext == null) { 84e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler throw new IllegalStateException("LauncherAppState inited before app context set"); 85e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler } 86cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 87e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler Log.v(Launcher.TAG, "LauncherAppState inited"); 88924b993c750e6de8537afb750c2d2b9932efbdacDaniel Sandler 89e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler if (sContext.getResources().getBoolean(R.bool.debug_memory_enabled)) { 90e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler MemoryTracker.startTrackingMe(sContext, "L"); 91b9eb2865af05d9ade572e71934a9e6a50421aa7dDaniel Sandler } 92b9eb2865af05d9ade572e71934a9e6a50421aa7dDaniel Sandler 93e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler // set sIsScreenXLarge and mScreenDensity *before* creating icon cache 94104c45677660586026a7e74ef8c47d396403d50eMichael Jurka mIsScreenLarge = isScreenLarge(sContext.getResources()); 95e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler mScreenDensity = sContext.getResources().getDisplayMetrics().density; 96b9eb2865af05d9ade572e71934a9e6a50421aa7dDaniel Sandler 976e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka recreateWidgetPreviewDb(); 98e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler mIconCache = new IconCache(sContext); 991307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert 1001307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class)); 10116f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal mBuildInfo = BuildInfo.loadByName(sContext.getString(R.string.build_info_class)); 1021307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert mModel = new LauncherModel(this, mIconCache, mAppFilter); 103ed13187a745866483139e2878037e1f8427ce567Kenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(sContext); 104c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy launcherApps.addOnAppsChangedCallback(mModel); 105cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 106cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler // Register intent receivers 107ed13187a745866483139e2878037e1f8427ce567Kenny Guy IntentFilter filter = new IntentFilter(); 108cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler filter.addAction(Intent.ACTION_LOCALE_CHANGED); 109cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); 110e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler sContext.registerReceiver(mModel, filter); 111cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler filter = new IntentFilter(); 112cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED); 113e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler sContext.registerReceiver(mModel, filter); 114cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler filter = new IntentFilter(); 115cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler filter.addAction(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED); 116e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler sContext.registerReceiver(mModel, filter); 117cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 118cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler // Register for changes to the favorites 119e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler ContentResolver resolver = sContext.getContentResolver(); 120cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, 121cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler mFavoritesObserver); 122cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 1231317e2dd4a2fb097d1e54759536d515fdeca2c3eKenny Guy 1246e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka public void recreateWidgetPreviewDb() { 1256e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka if (mWidgetPreviewCacheDb != null) { 1266e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka mWidgetPreviewCacheDb.close(); 1276e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka } 1286e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext); 1296e27f642ae66dd1920b25b527fced7268943d11aMichael Jurka } 130cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 131cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler /** 132cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * Call from Application.onTerminate(), which is not guaranteed to ever be called. 133cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler */ 134cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler public void onTerminate() { 135e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler sContext.unregisterReceiver(mModel); 1361317e2dd4a2fb097d1e54759536d515fdeca2c3eKenny Guy final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(sContext); 137c2bd8101b8e26b9ebb2c079ae6867229dad3f196Kenny Guy launcherApps.removeOnAppsChangedCallback(mModel); 138cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 139e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler ContentResolver resolver = sContext.getContentResolver(); 140cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler resolver.unregisterContentObserver(mFavoritesObserver); 141cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 142cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 143cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler /** 144cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler * Receives notifications whenever the user favorites have changed. 145cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler */ 146cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler private final ContentObserver mFavoritesObserver = new ContentObserver(new Handler()) { 147cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler @Override 148cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler public void onChange(boolean selfChange) { 149cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler // If the database has ever changed, then we really need to force a reload of the 150cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler // workspace on the next load 151cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler mModel.resetLoadedState(false, true); 152cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler mModel.startLoaderFromBackground(); 153cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 154cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler }; 155cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 156cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler LauncherModel setLauncher(Launcher launcher) { 157e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler if (mModel == null) { 158e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler throw new IllegalStateException("setLauncher() called before init()"); 159e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler } 160cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler mModel.initialize(launcher); 161cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler return mModel; 162cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 163cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 164349426234e8c5a0e5bcf2c8d94dbb9844b5f724aSunny Goyal public IconCache getIconCache() { 165cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler return mIconCache; 166cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 167cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 168cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler LauncherModel getModel() { 169cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler return mModel; 170cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 171cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 1721307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert boolean shouldShowAppOrWidgetProvider(ComponentName componentName) { 1731307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert return mAppFilter == null || mAppFilter.shouldShowApp(componentName); 1741307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert } 1751307f63f8a93541bf6e2d29c11fab69778a25e42Bjorn Bringert 176cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler WidgetPreviewLoader.CacheDb getWidgetPreviewCacheDb() { 177cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler return mWidgetPreviewCacheDb; 178cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 179cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 180e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler static void setLauncherProvider(LauncherProvider provider) { 181e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler sLauncherProvider = new WeakReference<LauncherProvider>(provider); 182cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 183cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 184e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler static LauncherProvider getLauncherProvider() { 185e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler return sLauncherProvider.get(); 186924b993c750e6de8537afb750c2d2b9932efbdacDaniel Sandler } 187924b993c750e6de8537afb750c2d2b9932efbdacDaniel Sandler 188cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler public static String getSharedPreferencesKey() { 189e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler return SHARED_PREFERENCES_KEY; 190cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 191cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 192892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung DeviceProfile initDynamicGrid(Context context, int minWidth, int minHeight, 193892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung int width, int height, 194892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung int availableWidth, int availableHeight) { 1955f8afe6280eae34620067696173e71943e1a30a3Winson Chung if (mDynamicGrid == null) { 196f7d458543e64307b01de803d2ddfee2f21b0bd28Winson Chung mDynamicGrid = new DynamicGrid(context, 197f7d458543e64307b01de803d2ddfee2f21b0bd28Winson Chung context.getResources(), 198892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung minWidth, minHeight, width, height, 199892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung availableWidth, availableHeight); 2006e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung mDynamicGrid.getDeviceProfile().addCallback(this); 2015f8afe6280eae34620067696173e71943e1a30a3Winson Chung } 2025f8afe6280eae34620067696173e71943e1a30a3Winson Chung 2035f8afe6280eae34620067696173e71943e1a30a3Winson Chung // Update the icon size 204892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung DeviceProfile grid = mDynamicGrid.getDeviceProfile(); 2056e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung grid.updateFromConfiguration(context, context.getResources(), width, height, 206892c74d460ad98c6306420e1127c9aa3e505ba25Winson Chung availableWidth, availableHeight); 2075f8afe6280eae34620067696173e71943e1a30a3Winson Chung return grid; 2085f8afe6280eae34620067696173e71943e1a30a3Winson Chung } 209b38002419dcb456b51f5d320b224737f16a07088Winson Chung public DynamicGrid getDynamicGrid() { 2105f8afe6280eae34620067696173e71943e1a30a3Winson Chung return mDynamicGrid; 2115f8afe6280eae34620067696173e71943e1a30a3Winson Chung } 2125f8afe6280eae34620067696173e71943e1a30a3Winson Chung 213e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler public boolean isScreenLarge() { 214e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler return mIsScreenLarge; 215cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 216cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 217104c45677660586026a7e74ef8c47d396403d50eMichael Jurka // Need a version that doesn't require an instance of LauncherAppState for the wallpaper picker 218104c45677660586026a7e74ef8c47d396403d50eMichael Jurka public static boolean isScreenLarge(Resources res) { 219104c45677660586026a7e74ef8c47d396403d50eMichael Jurka return res.getBoolean(R.bool.is_large_tablet); 220104c45677660586026a7e74ef8c47d396403d50eMichael Jurka } 221104c45677660586026a7e74ef8c47d396403d50eMichael Jurka 222cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler public static boolean isScreenLandscape(Context context) { 223cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler return context.getResources().getConfiguration().orientation == 224cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler Configuration.ORIENTATION_LANDSCAPE; 225cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 226cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 227e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler public float getScreenDensity() { 228e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler return mScreenDensity; 229cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 230cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler 231e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler public int getLongPressTimeout() { 232e4f9891f01bdc10d8f96e4e2429e2f4d0558238bDaniel Sandler return mLongPressTimeout; 233cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler } 2346e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung 235a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka public void onWallpaperChanged() { 236a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka mWallpaperChangedSinceLastCheck = true; 237a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka } 238a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka 239a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka public boolean hasWallpaperChangedSinceLastCheck() { 240a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka boolean result = mWallpaperChangedSinceLastCheck; 241a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka mWallpaperChangedSinceLastCheck = false; 242a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka return result; 243a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka } 244a6a0547fa6df0769fcd107a2e5f7c7d527fa0700Michael Jurka 2456e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung @Override 2466e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung public void onAvailableSizeChanged(DeviceProfile grid) { 2476e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung Utilities.setIconSize(grid.iconSizePx); 2486e1c0d34bb31cacc24c57c89ab01deaa8985814fWinson Chung } 24916f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal 25016f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal public static boolean isDisableAllApps() { 25116f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal // Returns false on non-dogfood builds. 25216f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal return getInstance().mBuildInfo.isDogfoodBuild() && 25316f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal Launcher.isPropertyEnabled(Launcher.DISABLE_ALL_APPS_PROPERTY); 25416f3ea870aac47292cd6cbe1a4b4343173097aa9Nilesh Agrawal } 255eedb00a674358bb88dce1e0d3a90bd6cb9e97cfcJorim Jaggi 256eedb00a674358bb88dce1e0d3a90bd6cb9e97cfcJorim Jaggi public static boolean isDogfoodBuild() { 257eedb00a674358bb88dce1e0d3a90bd6cb9e97cfcJorim Jaggi return getInstance().mBuildInfo.isDogfoodBuild(); 258eedb00a674358bb88dce1e0d3a90bd6cb9e97cfcJorim Jaggi } 259aeff7ea43409d817490fbb8c22b8d4b9725bb54fChris Wren 260e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyal public void setPackageState(ArrayList<PackageInstallInfo> installInfo) { 261e755d469d40b95e763a9dcb67d0e4f511d1948ddSunny Goyal mModel.setPackageState(installInfo); 262aeff7ea43409d817490fbb8c22b8d4b9725bb54fChris Wren } 263cc8befac3550c81d04ea206c170adae36c9a6c93Daniel Sandler} 264