summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fyodor Kupolov <fkupolov@google.com> 2016-06-30 21:06:12 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-06-30 21:06:16 +0000
commit5a1f346e2d37af989dfeb0438e5bbf980be20bfd (patch)
treee7443fd2a25b9dcc459c8be8155aec8f137b59f5
parentd4ec5df707225331b2ebc1ed12efcb875142cda2 (diff)
parent7877b8add811aafd7f57f731c8e22c9fe6a319c8 (diff)
Merge "Optimized onUnlockUser" into nyc-mr1-dev
-rw-r--r--services/core/java/com/android/server/InputMethodManagerService.java18
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java5
-rw-r--r--services/core/java/com/android/server/search/SearchManagerService.java13
3 files changed, 27 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index e0d89f2fe6d3..71ac54492cb6 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -177,6 +177,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
static final int MSG_HARD_KEYBOARD_SWITCH_CHANGED = 4000;
+ static final int MSG_SYSTEM_UNLOCK_USER = 5000;
+
static final long TIME_TO_RECONNECT = 3 * 1000;
static final int SECURE_SUGGESTION_SPANS_MAX_SIZE = 20;
@@ -800,14 +802,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
@Override
public void onSwitchUser(@UserIdInt int userHandle) {
- // Called on the system server's main looper thread.
+ // Called on ActivityManager thread.
// TODO: Dispatch this to a worker thread as needed.
mService.onSwitchUser(userHandle);
}
@Override
public void onBootPhase(int phase) {
- // Called on the system server's main looper thread.
+ // Called on ActivityManager thread.
// TODO: Dispatch this to a worker thread as needed.
if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
StatusBarManagerService statusBarService = (StatusBarManagerService) ServiceManager
@@ -817,10 +819,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
@Override
- public void onUnlockUser(@UserIdInt int userHandle) {
- // Called on the system server's main looper thread.
- // TODO: Dispatch this to a worker thread as needed.
- mService.onUnlockUser(userHandle);
+ public void onUnlockUser(final @UserIdInt int userHandle) {
+ // Called on ActivityManager thread.
+ mService.mHandler.sendMessage(mService.mHandler.obtainMessage(MSG_SYSTEM_UNLOCK_USER,
+ userHandle));
}
}
@@ -2970,6 +2972,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
case MSG_HARD_KEYBOARD_SWITCH_CHANGED:
mHardKeyboardListener.handleHardKeyboardStatusChange(msg.arg1 == 1);
return true;
+ case MSG_SYSTEM_UNLOCK_USER:
+ final int userId = msg.arg1;
+ onUnlockUser(userId);
+ return true;
}
return false;
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 114ad968d6dc..56406caeeaf6 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3216,7 +3216,10 @@ public class PackageManagerService extends IPackageManager.Stub {
final PermissionsState permissionsState = ps.getPermissionsState();
- final int[] gids = permissionsState.computeGids(userId);
+ // Compute GIDs only if requested
+ final int[] gids = (flags & PackageManager.GET_GIDS) != 0
+ ? permissionsState.computeGids(userId) : EMPTY_INT_ARRAY;
+ // TODO b/29879962 Calculate granted permissions only if needed in generatePackageInfo
final Set<String> permissions = permissionsState.getPermissions(userId);
final PackageUserState state = ps.readUserState(userId);
diff --git a/services/core/java/com/android/server/search/SearchManagerService.java b/services/core/java/com/android/server/search/SearchManagerService.java
index 4d91814af44a..2e5eb3ac83f5 100644
--- a/services/core/java/com/android/server/search/SearchManagerService.java
+++ b/services/core/java/com/android/server/search/SearchManagerService.java
@@ -33,6 +33,7 @@ import android.content.pm.ResolveInfo;
import android.database.ContentObserver;
import android.os.Binder;
import android.os.Bundle;
+import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
@@ -42,6 +43,7 @@ import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageMonitor;
+import com.android.internal.os.BackgroundThread;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.LocalServices;
import com.android.server.SystemService;
@@ -57,6 +59,7 @@ import java.util.List;
*/
public class SearchManagerService extends ISearchManager.Stub {
private static final String TAG = "SearchManagerService";
+ final Handler mHandler;
public static class Lifecycle extends SystemService {
private SearchManagerService mService;
@@ -72,8 +75,13 @@ public class SearchManagerService extends ISearchManager.Stub {
}
@Override
- public void onUnlockUser(int userHandle) {
- mService.onUnlockUser(userHandle);
+ public void onUnlockUser(final int userId) {
+ mService.mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mService.onUnlockUser(userId);
+ }
+ });
}
@Override
@@ -99,6 +107,7 @@ public class SearchManagerService extends ISearchManager.Stub {
mContext = context;
new MyPackageMonitor().register(context, null, UserHandle.ALL, true);
new GlobalSearchProviderObserver(context.getContentResolver());
+ mHandler = BackgroundThread.getHandler();
}
private Searchables getSearchables(int userId) {