summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/launcher/LauncherModel.java65
1 files changed, 38 insertions, 27 deletions
diff --git a/src/com/android/launcher/LauncherModel.java b/src/com/android/launcher/LauncherModel.java
index 271f9f4..cd0ffd2 100644
--- a/src/com/android/launcher/LauncherModel.java
+++ b/src/com/android/launcher/LauncherModel.java
@@ -116,7 +116,7 @@ public class LauncherModel {
if (localeChanged) {
dropApplicationCache();
- }
+ }
if (mApplicationsAdapter == null || isLaunching || localeChanged) {
mApplications = new ArrayList<ApplicationInfo>(DEFAULT_APPLICATIONS_NUMBER);
@@ -126,7 +126,7 @@ public class LauncherModel {
mApplicationsLoaded = false;
if (!isLaunching) {
- startApplicationsLoader(launcher);
+ startApplicationsLoader(launcher, false);
return false;
}
@@ -148,19 +148,19 @@ public class LauncherModel {
}
}
- private synchronized void startApplicationsLoader(Launcher launcher) {
+ private synchronized void startApplicationsLoader(Launcher launcher, boolean isLaunching) {
if (DEBUG_LOADERS) d(LOG_TAG, " --> starting applications loader");
stopAndWaitForApplicationsLoader();
- mApplicationsLoader = new ApplicationsLoader(launcher);
+ mApplicationsLoader = new ApplicationsLoader(launcher, isLaunching);
mApplicationsLoaderThread = new Thread(mApplicationsLoader, "Applications Loader");
mApplicationsLoaderThread.start();
}
synchronized void addPackage(Launcher launcher, String packageName) {
if (mApplicationsLoader != null && mApplicationsLoader.isRunning()) {
- startApplicationsLoader(launcher);
+ startApplicationsLoader(launcher, false);
return;
}
@@ -186,7 +186,7 @@ public class LauncherModel {
synchronized void removePackage(Launcher launcher, String packageName) {
if (mApplicationsLoader != null && mApplicationsLoader.isRunning()) {
dropApplicationCache(); // TODO: this could be optimized
- startApplicationsLoader(launcher);
+ startApplicationsLoader(launcher, false);
return;
}
@@ -221,7 +221,7 @@ public class LauncherModel {
synchronized void updatePackage(Launcher launcher, String packageName) {
if (mApplicationsLoader != null && mApplicationsLoader.isRunning()) {
- startApplicationsLoader(launcher);
+ startApplicationsLoader(launcher, false);
return;
}
@@ -263,7 +263,7 @@ public class LauncherModel {
synchronized void syncPackage(Launcher launcher, String packageName) {
if (mApplicationsLoader != null && mApplicationsLoader.isRunning()) {
- startApplicationsLoader(launcher);
+ startApplicationsLoader(launcher, false);
return;
}
@@ -461,8 +461,10 @@ public class LauncherModel {
private volatile boolean mStopped;
private volatile boolean mRunning;
+ private final boolean mIsLaunching;
- ApplicationsLoader(Launcher launcher) {
+ ApplicationsLoader(Launcher launcher, boolean isLaunching) {
+ mIsLaunching = isLaunching;
mLauncher = new WeakReference<Launcher>(launcher);
}
@@ -477,7 +479,10 @@ public class LauncherModel {
public void run() {
mRunning = true;
- android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ // Elevate priority when Home launches for the first time to avoid
+ // starving at boot time. Staring at a blank home is not cool.
+ android.os.Process.setThreadPriority(mIsLaunching ? Process.THREAD_PRIORITY_DEFAULT :
+ Process.THREAD_PRIORITY_BACKGROUND);
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
@@ -580,7 +585,7 @@ public class LauncherModel {
if (isLaunching && isDesktopLoaded()) {
if (DEBUG_LOADERS) d(LOG_TAG, " --> items loaded, return");
- if (loadApplications) startApplicationsLoader(launcher);
+ if (loadApplications) startApplicationsLoader(launcher, true);
// We have already loaded our data from the DB
launcher.onDesktopItemsLoaded();
return;
@@ -607,7 +612,8 @@ public class LauncherModel {
if (DEBUG_LOADERS) d(LOG_TAG, " --> starting workspace loader");
mDesktopItemsLoaded = false;
- mDesktopItemsLoader = new DesktopItemsLoader(launcher, localeChanged, loadApplications);
+ mDesktopItemsLoader = new DesktopItemsLoader(launcher, localeChanged, loadApplications,
+ isLaunching);
mDesktopLoaderThread = new Thread(mDesktopItemsLoader, "Desktop Items Loader");
mDesktopLoaderThread.start();
}
@@ -688,9 +694,12 @@ public class LauncherModel {
private final WeakReference<Launcher> mLauncher;
private final boolean mLocaleChanged;
private final boolean mLoadApplications;
+ private final boolean mIsLaunching;
- DesktopItemsLoader(Launcher launcher, boolean localeChanged, boolean loadApplications) {
+ DesktopItemsLoader(Launcher launcher, boolean localeChanged, boolean loadApplications,
+ boolean isLaunching) {
mLoadApplications = loadApplications;
+ mIsLaunching = isLaunching;
mLauncher = new WeakReference<Launcher>(launcher);
mLocaleChanged = localeChanged;
}
@@ -706,6 +715,8 @@ public class LauncherModel {
public void run() {
mRunning = true;
+ android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
+
final Launcher launcher = mLauncher.get();
final ContentResolver contentResolver = launcher.getContentResolver();
final PackageManager manager = launcher.getPackageManager();
@@ -912,7 +923,7 @@ public class LauncherModel {
launcher.onDesktopItemsLoaded();
}
});
- if (mLoadApplications) startApplicationsLoader(launcher);
+ if (mLoadApplications) startApplicationsLoader(launcher, mIsLaunching);
}
if (!mStopped) {
@@ -1076,7 +1087,7 @@ public class LauncherModel {
ArrayList<ItemInfo> getDesktopItems() {
return mDesktopItems;
}
-
+
/**
* @return The current list of desktop items
*/
@@ -1092,7 +1103,7 @@ public class LauncherModel {
// TODO: write to DB; also check that folder has been added to folders list
mDesktopItems.add(info);
}
-
+
/**
* Remove an item from the desktop
* @param info
@@ -1108,7 +1119,7 @@ public class LauncherModel {
void addDesktopAppWidget(LauncherAppWidgetInfo info) {
mDesktopAppWidgets.add(info);
}
-
+
/**
* Remove a widget from the desktop
*/
@@ -1126,7 +1137,7 @@ public class LauncherModel {
if (resolveInfo == null) {
return null;
}
-
+
final ApplicationInfo info = new ApplicationInfo();
final ActivityInfo activityInfo = resolveInfo.activityInfo;
info.icon = Utilities.createIconThumbnail(activityInfo.loadIcon(manager), context);
@@ -1139,7 +1150,7 @@ public class LauncherModel {
info.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
return info;
}
-
+
/**
* Make an ApplicationInfo object for a sortcut
*/
@@ -1195,7 +1206,7 @@ public class LauncherModel {
//noinspection SuspiciousMethodCalls
folder.contents.remove(info);
}
-
+
/**
* Removes a UserFolder from the in-memory list of folders. Does not change the DB.
* @param userFolderInfo
@@ -1203,7 +1214,7 @@ public class LauncherModel {
void removeUserFolder(UserFolderInfo userFolderInfo) {
mFolders.remove(userFolderInfo.id);
}
-
+
/**
* Adds an item to the DB if it was not created previously, or move it to a new
* <container, screen, cellX, cellY>
@@ -1218,7 +1229,7 @@ public class LauncherModel {
moveItemInDatabase(context, item, container, screen, cellX, cellY);
}
}
-
+
/**
* Move an item in the DB to a new <container, screen, cellX, cellY>
*/
@@ -1228,7 +1239,7 @@ public class LauncherModel {
item.screen = screen;
item.cellX = cellX;
item.cellY = cellY;
-
+
final ContentValues values = new ContentValues();
final ContentResolver cr = context.getContentResolver();
@@ -1311,12 +1322,12 @@ public class LauncherModel {
item.screen = screen;
item.cellX = cellX;
item.cellY = cellY;
-
+
final ContentValues values = new ContentValues();
final ContentResolver cr = context.getContentResolver();
-
+
item.onAddToDatabase(values);
-
+
Uri result = cr.insert(notify ? LauncherSettings.Favorites.CONTENT_URI :
LauncherSettings.Favorites.CONTENT_URI_NO_NOTIFICATION, values);
@@ -1356,7 +1367,7 @@ public class LauncherModel {
cr.update(LauncherSettings.Favorites.getContentUri(item.id, false), values, null, null);
}
-
+
/**
* Removes the specified item from the database
* @param context