diff options
author | Dianne Hackborn <hackbod@google.com> | 2010-09-30 18:27:22 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2010-09-30 18:27:22 -0700 |
commit | cef65eeb0315c3118bf8860d6f723cb49ff6bc52 (patch) | |
tree | 2917e5a149a267eac00b13a27a88627e252cfe23 /services/java | |
parent | 727d67d4fb8721b0291312e4cca33927dfba0e31 (diff) | |
download | frameworks_base-cef65eeb0315c3118bf8860d6f723cb49ff6bc52.zip frameworks_base-cef65eeb0315c3118bf8860d6f723cb49ff6bc52.tar.gz frameworks_base-cef65eeb0315c3118bf8860d6f723cb49ff6bc52.tar.bz2 |
Rub in a little 'ol log-b-gone.
Mmmmmm... great fresh scent!
Change-Id: I050e70b31b5d4a9c6731f15a4b51a3620a33a78d
Diffstat (limited to 'services/java')
10 files changed, 311 insertions, 136 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index b8b9e53..8114be9 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -56,7 +56,7 @@ import java.util.List; */ public class ConnectivityService extends IConnectivityManager.Stub { - private static final boolean DBG = true; + private static final boolean DBG = false; private static final String TAG = "ConnectivityService"; // how long to wait before switching back to a radio's default network diff --git a/services/java/com/android/server/DevicePolicyManagerService.java b/services/java/com/android/server/DevicePolicyManagerService.java index 19d146d..21273cc 100644 --- a/services/java/com/android/server/DevicePolicyManagerService.java +++ b/services/java/com/android/server/DevicePolicyManagerService.java @@ -55,6 +55,7 @@ import android.view.WindowManagerPolicy; import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; @@ -451,6 +452,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { Slog.w(TAG, "failed parsing " + file + " " + e); } catch (XmlPullParserException e) { Slog.w(TAG, "failed parsing " + file + " " + e); + } catch (FileNotFoundException e) { + // Don't be noisy, this is normal if we haven't defined any policies. } catch (IOException e) { Slog.w(TAG, "failed parsing " + file + " " + e); } catch (IndexOutOfBoundsException e) { diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java index 9efc708..ecad3cc 100644 --- a/services/java/com/android/server/InputMethodManagerService.java +++ b/services/java/com/android/server/InputMethodManagerService.java @@ -936,10 +936,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } public void updateStatusIcon(IBinder token, String packageName, int iconId) { + int uid = Binder.getCallingUid(); long ident = Binder.clearCallingIdentity(); try { if (token == null || mCurToken != token) { - Slog.w(TAG, "Ignoring setInputMethod of token: " + token); + Slog.w(TAG, "Ignoring setInputMethod of uid " + uid + " token: " + token); return; } @@ -1010,6 +1011,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub public boolean showSoftInput(IInputMethodClient client, int flags, ResultReceiver resultReceiver) { + int uid = Binder.getCallingUid(); long ident = Binder.clearCallingIdentity(); try { synchronized (mMethodMap) { @@ -1020,7 +1022,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // focus in the window manager, to allow this call to // be made before input is started in it. if (!mIWindowManager.inputMethodClientHasFocus(client)) { - Slog.w(TAG, "Ignoring showSoftInput of: " + client); + Slog.w(TAG, "Ignoring showSoftInput of uid " + uid + ": " + client); return false; } } catch (RemoteException e) { @@ -1074,6 +1076,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub public boolean hideSoftInput(IInputMethodClient client, int flags, ResultReceiver resultReceiver) { + int uid = Binder.getCallingUid(); long ident = Binder.clearCallingIdentity(); try { synchronized (mMethodMap) { @@ -1084,7 +1087,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub // focus in the window manager, to allow this call to // be made before input is started in it. if (!mIWindowManager.inputMethodClientHasFocus(client)) { - Slog.w(TAG, "Ignoring hideSoftInput of: " + client); + if (DEBUG) Slog.w(TAG, "Ignoring hideSoftInput of uid " + + uid + ": " + client); return false; } } catch (RemoteException e) { @@ -1219,7 +1223,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub synchronized (mMethodMap) { if (mCurClient == null || client == null || mCurClient.client.asBinder() != client.asBinder()) { - Slog.w(TAG, "Ignoring showInputMethodDialogFromClient of: " + client); + Slog.w(TAG, "Ignoring showInputMethodDialogFromClient of uid " + + Binder.getCallingUid() + ": " + client); } mHandler.sendEmptyMessage(MSG_SHOW_IM_PICKER); @@ -1237,7 +1242,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub + android.Manifest.permission.WRITE_SECURE_SETTINGS); } } else if (mCurToken != token) { - Slog.w(TAG, "Ignoring setInputMethod of token: " + token); + Slog.w(TAG, "Ignoring setInputMethod of uid " + Binder.getCallingUid() + + " token: " + token); return; } @@ -1253,7 +1259,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub public void hideMySoftInput(IBinder token, int flags) { synchronized (mMethodMap) { if (token == null || mCurToken != token) { - Slog.w(TAG, "Ignoring hideInputMethod of token: " + token); + if (DEBUG) Slog.w(TAG, "Ignoring hideInputMethod of uid " + + Binder.getCallingUid() + " token: " + token); return; } long ident = Binder.clearCallingIdentity(); @@ -1268,7 +1275,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub public void showMySoftInput(IBinder token, int flags) { synchronized (mMethodMap) { if (token == null || mCurToken != token) { - Slog.w(TAG, "Ignoring hideInputMethod of token: " + token); + Slog.w(TAG, "Ignoring showMySoftInput of uid " + + Binder.getCallingUid() + " token: " + token); return; } long ident = Binder.clearCallingIdentity(); diff --git a/services/java/com/android/server/IntentResolver.java b/services/java/com/android/server/IntentResolver.java index 8ab65e9..e47de13 100644 --- a/services/java/com/android/server/IntentResolver.java +++ b/services/java/com/android/server/IntentResolver.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Set; import android.util.Log; +import android.util.PrintWriterPrinter; import android.util.Slog; import android.util.LogPrinter; import android.util.Printer; @@ -92,10 +93,12 @@ public class IntentResolver<F extends IntentFilter, R extends Object> { } boolean dumpMap(PrintWriter out, String titlePrefix, String title, - String prefix, Map<String, ArrayList<F>> map, String packageName) { + String prefix, Map<String, ArrayList<F>> map, String packageName, + boolean printFilter) { String eprefix = prefix + " "; String fprefix = prefix + " "; boolean printedSomething = false; + Printer printer = null; for (Map.Entry<String, ArrayList<F>> e : map.entrySet()) { ArrayList<F> a = e.getValue(); final int N = a.size(); @@ -115,37 +118,44 @@ public class IntentResolver<F extends IntentFilter, R extends Object> { } printedSomething = true; dumpFilter(out, fprefix, filter); + if (printFilter) { + if (printer == null) { + printer = new PrintWriterPrinter(out); + } + filter.dump(printer, fprefix + " "); + } } } return printedSomething; } - public boolean dump(PrintWriter out, String title, String prefix, String packageName) { + public boolean dump(PrintWriter out, String title, String prefix, String packageName, + boolean printFilter) { String innerPrefix = prefix + " "; String sepPrefix = "\n" + prefix; String curPrefix = title + "\n" + prefix; if (dumpMap(out, curPrefix, "Full MIME Types:", innerPrefix, - mTypeToFilter, packageName)) { + mTypeToFilter, packageName, printFilter)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Base MIME Types:", innerPrefix, - mBaseTypeToFilter, packageName)) { + mBaseTypeToFilter, packageName, printFilter)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Wild MIME Types:", innerPrefix, - mWildTypeToFilter, packageName)) { + mWildTypeToFilter, packageName, printFilter)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Schemes:", innerPrefix, - mSchemeToFilter, packageName)) { + mSchemeToFilter, packageName, printFilter)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "Non-Data Actions:", innerPrefix, - mActionToFilter, packageName)) { + mActionToFilter, packageName, printFilter)) { curPrefix = sepPrefix; } if (dumpMap(out, curPrefix, "MIME Typed Actions:", innerPrefix, - mTypedActionToFilter, packageName)) { + mTypedActionToFilter, packageName, printFilter)) { curPrefix = sepPrefix; } return curPrefix == sepPrefix; diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 33b19d6..f0acdc0 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -55,7 +55,7 @@ import java.util.concurrent.CountDownLatch; class NetworkManagementService extends INetworkManagementService.Stub { private static final String TAG = "NetworkManagmentService"; - private static final boolean DBG = true; + private static final boolean DBG = false; private static final String NETD_TAG = "NetdConnector"; class NetdResponseCode { diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 72daa64..d66e5ce 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -1102,27 +1102,6 @@ class PackageManagerService extends IPackageManager.Stub { final File permFile = new File(Environment.getRootDirectory(), "etc/permissions/platform.xml"); readPermissionsFromXml(permFile); - - StringBuilder sb = new StringBuilder(128); - sb.append("Libs:"); - Iterator<String> it = mSharedLibraries.keySet().iterator(); - while (it.hasNext()) { - sb.append(' '); - String name = it.next(); - sb.append(name); - sb.append(':'); - sb.append(mSharedLibraries.get(name)); - } - Log.i(TAG, sb.toString()); - - sb.setLength(0); - sb.append("Features:"); - it = mAvailableFeatures.keySet().iterator(); - while (it.hasNext()) { - sb.append(' '); - sb.append(it.next()); - } - Log.i(TAG, sb.toString()); } private void readPermissionsFromXml(File permFile) { @@ -2632,7 +2611,7 @@ class PackageManagerService extends IPackageManager.Stub { // The system package has been updated and the code path does not match // Ignore entry. Skip it. Log.i(TAG, "Package " + ps.name + " at " + scanFile - + "ignored: updated version " + ps.versionCode + + " ignored: updated version " + ps.versionCode + " better than this " + pkg.mVersionCode); mLastScanError = PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE; return null; @@ -6866,7 +6845,18 @@ class PackageManagerService extends IPackageManager.Stub { return; } + boolean dumpStar = true; + boolean dumpLibs = false; + boolean dumpFeatures = false; + boolean dumpResolvers = false; + boolean dumpPermissions = false; + boolean dumpPackages = false; + boolean dumpSharedUsers = false; + boolean dumpMessages = false; + boolean dumpProviders = false; + String packageName = null; + boolean showFilters = false; int opti = 0; while (opti < args.length) { @@ -6879,10 +6869,22 @@ class PackageManagerService extends IPackageManager.Stub { // Right now we only know how to print all. } else if ("-h".equals(opt)) { pw.println("Package manager dump options:"); - pw.println(" [-h] [cmd] ..."); + pw.println(" [-h] [-f] [cmd] ..."); + pw.println(" -f: print details of intent filters"); + pw.println(" -h: print this help"); pw.println(" cmd may be one of:"); - pw.println(" [package.name]: info about given package"); + pw.println(" l[ibraries]: list known shared libraries"); + pw.println(" f[ibraries]: list device features"); + pw.println(" r[esolvers]: dump intent resolvers"); + pw.println(" perm[issions]: dump permissions"); + pw.println(" prov[iders]: dump content providers"); + pw.println(" p[ackages]: dump installed packages"); + pw.println(" s[hared-users]: dump shared user IDs"); + pw.println(" m[essages]: print collected runtime messages"); + pw.println(" <package.name>: info about given package"); return; + } else if ("-f".equals(opt)) { + showFilters = true; } else { pw.println("Unknown argument: " + opt + "; use -h for help"); } @@ -6895,32 +6897,87 @@ class PackageManagerService extends IPackageManager.Stub { // Is this a package name? if ("android".equals(cmd) || cmd.contains(".")) { packageName = cmd; + } else if ("l".equals(cmd) || "libraries".equals(cmd)) { + dumpStar = false; + dumpLibs = true; + } else if ("f".equals(cmd) || "features".equals(cmd)) { + dumpStar = false; + dumpFeatures = true; + } else if ("r".equals(cmd) || "resolvers".equals(cmd)) { + dumpStar = false; + dumpResolvers = true; + } else if ("perm".equals(cmd) || "permissions".equals(cmd)) { + dumpStar = false; + dumpPermissions = true; + } else if ("p".equals(cmd) || "packages".equals(cmd)) { + dumpStar = false; + dumpPackages = true; + } else if ("s".equals(cmd) || "shared-users".equals(cmd)) { + dumpStar = false; + dumpSharedUsers = true; + } else if ("prov".equals(cmd) || "providers".equals(cmd)) { + dumpStar = false; + dumpProviders = true; + } else if ("m".equals(cmd) || "messages".equals(cmd)) { + dumpStar = false; + dumpMessages = true; } } boolean printedTitle = false; synchronized (mPackages) { - if (mActivities.dump(pw, "Activity Resolver Table:", " ", packageName)) { - printedTitle = true; - } - if (mReceivers.dump(pw, printedTitle - ? "\nReceiver Resolver Table:" : "Receiver Resolver Table:", - " ", packageName)) { + if ((dumpStar || dumpLibs) && packageName == null) { + if (printedTitle) pw.println(" "); printedTitle = true; + pw.println("Libraries:"); + Iterator<String> it = mSharedLibraries.keySet().iterator(); + while (it.hasNext()) { + String name = it.next(); + pw.print(" "); + pw.print(name); + pw.print(" -> "); + pw.println(mSharedLibraries.get(name)); + } } - if (mServices.dump(pw, printedTitle - ? "\nService Resolver Table:" : "Service Resolver Table:", - " ", packageName)) { + + if ((dumpStar || dumpFeatures) && packageName == null) { + if (printedTitle) pw.println(" "); printedTitle = true; + pw.println("Features:"); + Iterator<String> it = mAvailableFeatures.keySet().iterator(); + while (it.hasNext()) { + String name = it.next(); + pw.print(" "); + pw.println(name); + } } - if (mSettings.mPreferredActivities.dump(pw, printedTitle - ? "\nPreferred Activities:" : "Preferred Activities:", - " ", packageName)) { - printedTitle = true; + + if (dumpStar || dumpResolvers) { + if (mActivities.dump(pw, printedTitle + ? "\nActivity Resolver Table:" : "Activity Resolver Table:", + " ", packageName, showFilters)) { + printedTitle = true; + } + if (mReceivers.dump(pw, printedTitle + ? "\nReceiver Resolver Table:" : "Receiver Resolver Table:", + " ", packageName, showFilters)) { + printedTitle = true; + } + if (mServices.dump(pw, printedTitle + ? "\nService Resolver Table:" : "Service Resolver Table:", + " ", packageName, showFilters)) { + printedTitle = true; + } + if (mSettings.mPreferredActivities.dump(pw, printedTitle + ? "\nPreferred Activities:" : "Preferred Activities:", + " ", packageName, showFilters)) { + printedTitle = true; + } } + boolean printedSomething = false; - { + if (dumpStar || dumpPermissions) { for (BasePermission p : mSettings.mPermissions.values()) { if (packageName != null && !packageName.equals(p.sourcePackage)) { continue; @@ -6947,9 +7004,27 @@ class PackageManagerService extends IPackageManager.Stub { } } } + + if (dumpStar || dumpProviders) { + printedSomething = false; + for (PackageParser.Provider p : mProviders.values()) { + if (packageName != null && !packageName.equals(p.info.packageName)) { + continue; + } + if (!printedSomething) { + if (printedTitle) pw.println(" "); + pw.println("Registered ContentProviders:"); + printedSomething = true; + printedTitle = true; + } + pw.print(" ["); pw.print(p.info.authority); pw.print("]: "); + pw.println(p.toString()); + } + } + printedSomething = false; SharedUserSetting packageSharedUser = null; - { + if (dumpStar || dumpPackages) { for (PackageSetting ps : mSettings.mPackages.values()) { if (packageName != null && !packageName.equals(ps.realName) && !packageName.equals(ps.name)) { @@ -7052,52 +7127,54 @@ class PackageManagerService extends IPackageManager.Stub { } } printedSomething = false; - if (mSettings.mRenamedPackages.size() > 0) { - for (HashMap.Entry<String, String> e - : mSettings.mRenamedPackages.entrySet()) { - if (packageName != null && !packageName.equals(e.getKey()) - && !packageName.equals(e.getValue())) { - continue; - } - if (!printedSomething) { - if (printedTitle) pw.println(" "); - pw.println("Renamed packages:"); - printedSomething = true; - printedTitle = true; + if (dumpStar || dumpPackages) { + if (mSettings.mRenamedPackages.size() > 0) { + for (HashMap.Entry<String, String> e + : mSettings.mRenamedPackages.entrySet()) { + if (packageName != null && !packageName.equals(e.getKey()) + && !packageName.equals(e.getValue())) { + continue; + } + if (!printedSomething) { + if (printedTitle) pw.println(" "); + pw.println("Renamed packages:"); + printedSomething = true; + printedTitle = true; + } + pw.print(" "); pw.print(e.getKey()); pw.print(" -> "); + pw.println(e.getValue()); } - pw.print(" "); pw.print(e.getKey()); pw.print(" -> "); - pw.println(e.getValue()); } - } - printedSomething = false; - if (mSettings.mDisabledSysPackages.size() > 0) { - for (PackageSetting ps : mSettings.mDisabledSysPackages.values()) { - if (packageName != null && !packageName.equals(ps.realName) - && !packageName.equals(ps.name)) { - continue; - } - if (!printedSomething) { - if (printedTitle) pw.println(" "); - pw.println("Hidden system packages:"); - printedSomething = true; - printedTitle = true; - } - pw.print(" Package ["); - pw.print(ps.realName != null ? ps.realName : ps.name); - pw.print("] ("); - pw.print(Integer.toHexString(System.identityHashCode(ps))); - pw.println("):"); - if (ps.realName != null) { - pw.print(" compat name="); pw.println(ps.name); + printedSomething = false; + if (mSettings.mDisabledSysPackages.size() > 0) { + for (PackageSetting ps : mSettings.mDisabledSysPackages.values()) { + if (packageName != null && !packageName.equals(ps.realName) + && !packageName.equals(ps.name)) { + continue; + } + if (!printedSomething) { + if (printedTitle) pw.println(" "); + pw.println("Hidden system packages:"); + printedSomething = true; + printedTitle = true; + } + pw.print(" Package ["); + pw.print(ps.realName != null ? ps.realName : ps.name); + pw.print("] ("); + pw.print(Integer.toHexString(System.identityHashCode(ps))); + pw.println("):"); + if (ps.realName != null) { + pw.print(" compat name="); pw.println(ps.name); + } + pw.print(" userId="); pw.println(ps.userId); + pw.print(" sharedUser="); pw.println(ps.sharedUser); + pw.print(" codePath="); pw.println(ps.codePathString); + pw.print(" resourcePath="); pw.println(ps.resourcePathString); } - pw.print(" userId="); pw.println(ps.userId); - pw.print(" sharedUser="); pw.println(ps.sharedUser); - pw.print(" codePath="); pw.println(ps.codePathString); - pw.print(" resourcePath="); pw.println(ps.resourcePathString); } } printedSomething = false; - { + if (dumpStar || dumpSharedUsers) { for (SharedUserSetting su : mSettings.mSharedUsers.values()) { if (packageName != null && su != packageSharedUser) { continue; @@ -7120,11 +7197,11 @@ class PackageManagerService extends IPackageManager.Stub { } } - if (packageName == null) { + if ((dumpStar || dumpMessages) && packageName == null) { if (printedTitle) pw.println(" "); printedTitle = true; pw.println("Settings parse messages:"); - pw.println(mSettings.mReadMessages.toString()); + pw.print(mSettings.mReadMessages.toString()); pw.println(" "); pw.println("Package warning messages:"); @@ -7135,29 +7212,12 @@ class PackageManagerService extends IPackageManager.Stub { int avail = in.available(); byte[] data = new byte[avail]; in.read(data); - pw.println(new String(data)); + pw.print(new String(data)); } catch (FileNotFoundException e) { } catch (IOException e) { } } } - - synchronized (mProviders) { - boolean printedSomething = false; - for (PackageParser.Provider p : mProviders.values()) { - if (packageName != null && !packageName.equals(p.info.packageName)) { - continue; - } - if (!printedSomething) { - if (printedTitle) pw.println(" "); - pw.println("Registered ContentProviders:"); - printedSomething = true; - printedTitle = true; - } - pw.print(" ["); pw.print(p.info.authority); pw.print("]: "); - pw.println(p.toString()); - } - } } static final class BasePermission { diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 34753e7..50054bd 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -112,9 +112,15 @@ import android.view.View; import android.view.WindowManager; import android.view.WindowManagerPolicy; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.File; import java.io.FileDescriptor; +import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; @@ -6087,6 +6093,76 @@ public final class ActivityManagerService extends ActivityManagerNative return mSystemReady; } + private static File getCalledPreBootReceiversFile() { + File dataDir = Environment.getDataDirectory(); + File systemDir = new File(dataDir, "system"); + File fname = new File(systemDir, "called_pre_boots.dat"); + return fname; + } + + private static ArrayList<ComponentName> readLastDonePreBootReceivers() { + ArrayList<ComponentName> lastDoneReceivers = new ArrayList<ComponentName>(); + File file = getCalledPreBootReceiversFile(); + FileInputStream fis = null; + try { + fis = new FileInputStream(file); + DataInputStream dis = new DataInputStream(new BufferedInputStream(fis, 2048)); + int vers = dis.readInt(); + String codename = dis.readUTF(); + if (vers == android.os.Build.VERSION.SDK_INT + && codename.equals(android.os.Build.VERSION.CODENAME)) { + int num = dis.readInt(); + while (num > 0) { + num--; + String pkg = dis.readUTF(); + String cls = dis.readUTF(); + lastDoneReceivers.add(new ComponentName(pkg, cls)); + } + } + } catch (FileNotFoundException e) { + } catch (IOException e) { + Slog.w(TAG, "Failure reading last done pre-boot receivers", e); + } finally { + if (fis != null) { + try { + fis.close(); + } catch (IOException e) { + } + } + } + return lastDoneReceivers; + } + + private static void writeLastDonePreBootReceivers(ArrayList<ComponentName> list) { + File file = getCalledPreBootReceiversFile(); + FileOutputStream fos = null; + DataOutputStream dos = null; + try { + Slog.i(TAG, "Writing new set of last done pre-boot receivers..."); + fos = new FileOutputStream(file); + dos = new DataOutputStream(new BufferedOutputStream(fos, 2048)); + dos.writeInt(android.os.Build.VERSION.SDK_INT); + dos.writeUTF(android.os.Build.VERSION.CODENAME); + dos.writeInt(list.size()); + for (int i=0; i<list.size(); i++) { + dos.writeUTF(list.get(i).getPackageName()); + dos.writeUTF(list.get(i).getClassName()); + } + } catch (IOException e) { + Slog.w(TAG, "Failure writing last done pre-boot receivers", e); + file.delete(); + } finally { + if (dos != null) { + try { + dos.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } + public void systemReady(final Runnable goingCallback) { // In the simulator, startRunning will never have been called, which // normally sets a few crucial variables. Do it here instead. @@ -6121,9 +6197,24 @@ public final class ActivityManagerService extends ActivityManagerNative } } intent.addFlags(Intent.FLAG_RECEIVER_BOOT_UPGRADE); + + ArrayList<ComponentName> lastDoneReceivers = readLastDonePreBootReceivers(); + + final ArrayList<ComponentName> doneReceivers = new ArrayList<ComponentName>(); for (int i=0; i<ris.size(); i++) { ActivityInfo ai = ris.get(i).activityInfo; - intent.setComponent(new ComponentName(ai.packageName, ai.name)); + ComponentName comp = new ComponentName(ai.packageName, ai.name); + if (lastDoneReceivers.contains(comp)) { + ris.remove(i); + i--; + } + } + + for (int i=0; i<ris.size(); i++) { + ActivityInfo ai = ris.get(i).activityInfo; + ComponentName comp = new ComponentName(ai.packageName, ai.name); + doneReceivers.add(comp); + intent.setComponent(comp); IIntentReceiver finisher = null; if (i == ris.size()-1) { finisher = new IIntentReceiver.Stub() { @@ -6138,6 +6229,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (ActivityManagerService.this) { mDidUpdate = true; } + writeLastDonePreBootReceivers(doneReceivers); systemReady(goingCallback); } }); @@ -6177,19 +6269,19 @@ public final class ActivityManagerService extends ActivityManagerNative } } - if (procsToKill != null) { - synchronized(this) { + synchronized(this) { + if (procsToKill != null) { for (int i=procsToKill.size()-1; i>=0; i--) { ProcessRecord proc = procsToKill.get(i); Slog.i(TAG, "Removing system update proc: " + proc); removeProcessLocked(proc, true); } - - // Now that we have cleaned up any update processes, we - // are ready to start launching real processes and know that - // we won't trample on them any more. - mProcessesReady = true; } + + // Now that we have cleaned up any update processes, we + // are ready to start launching real processes and know that + // we won't trample on them any more. + mProcessesReady = true; } Slog.i(TAG, "System now ready"); @@ -7602,7 +7694,7 @@ public final class ActivityManagerService extends ActivityManagerNative pw.println(" "); pw.println("Receiver Resolver Table:"); - mReceiverResolver.dump(pw, null, " ", null); + mReceiverResolver.dump(pw, null, " ", null, false); needSep = true; } diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java index 9358469..53b08d0 100644 --- a/services/java/com/android/server/am/ActivityRecord.java +++ b/services/java/com/android/server/am/ActivityRecord.java @@ -439,10 +439,11 @@ class ActivityRecord extends IApplicationToken.Stub { sb.append(shortComponentName); sb.append(": "); TimeUtils.formatDuration(thisTime, sb); - sb.append(" (total "); - TimeUtils.formatDuration(totalTime, sb); - sb.append(totalTime); - sb.append(")"); + if (thisTime != totalTime) { + sb.append(" (total "); + TimeUtils.formatDuration(totalTime, sb); + sb.append(")"); + } Log.i(ActivityManagerService.TAG, sb.toString()); } stack.reportActivityLaunchedLocked(false, this, thisTime, totalTime); diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index a4497d6..30395c0 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -1881,7 +1881,7 @@ public class ActivityStack { String resultWho, int requestCode, int callingPid, int callingUid, boolean onlyIfNeeded, boolean componentSpecified) { - Slog.i(TAG, "Starting activity: " + intent); + Slog.i(TAG, "Starting: " + intent); ActivityRecord sourceRecord = null; ActivityRecord resultRecord = null; diff --git a/services/java/com/android/server/am/UsageStatsService.java b/services/java/com/android/server/am/UsageStatsService.java index 3f15d0a..8463b5a 100644 --- a/services/java/com/android/server/am/UsageStatsService.java +++ b/services/java/com/android/server/am/UsageStatsService.java @@ -57,6 +57,7 @@ import java.util.concurrent.atomic.AtomicLong; public final class UsageStatsService extends IUsageStats.Stub { public static final String SERVICE_NAME = "usagestats"; private static final boolean localLOGV = false; + private static final boolean REPORT_UNEXPECTED = false; private static final String TAG = "UsageStats"; // Current on-disk Parcel version @@ -404,11 +405,11 @@ public final class UsageStatsService extends IUsageStats.Stub { new Thread("UsageStatsService_DiskWriter") { public void run() { try { - Slog.d(TAG, "Disk writer thread starting."); + if (localLOGV) Slog.d(TAG, "Disk writer thread starting."); writeStatsToFile(true); } finally { mUnforcedDiskWriteRunning.set(false); - Slog.d(TAG, "Disk writer thread ending."); + if (localLOGV) Slog.d(TAG, "Disk writer thread ending."); } } }.start(); @@ -458,7 +459,7 @@ public final class UsageStatsService extends IUsageStats.Stub { } } } - Slog.d(TAG, "Dumped usage stats."); + if (localLOGV) Slog.d(TAG, "Dumped usage stats."); } private void writeStatsFLOCK(File file) throws IOException { @@ -493,7 +494,7 @@ public final class UsageStatsService extends IUsageStats.Stub { } public void shutdown() { - Slog.w(TAG, "Writing usage stats before shutdown..."); + Slog.i(TAG, "Writing usage stats before shutdown..."); writeStatsToFile(true); } @@ -520,7 +521,7 @@ public final class UsageStatsService extends IUsageStats.Stub { if (mLastResumedPkg != null) { // We last resumed some other package... just pause it now // to recover. - Slog.i(TAG, "Unexpected resume of " + pkgName + if (REPORT_UNEXPECTED) Slog.i(TAG, "Unexpected resume of " + pkgName + " while already resumed in " + mLastResumedPkg); PkgUsageStatsExtended pus = mStats.get(mLastResumedPkg); if (pus != null) { @@ -559,7 +560,7 @@ public final class UsageStatsService extends IUsageStats.Stub { return; } if (!mIsResumed) { - Slog.i(TAG, "Something wrong here, didn't expect " + if (REPORT_UNEXPECTED) Slog.i(TAG, "Something wrong here, didn't expect " + pkgName + " to be paused"); return; } |