diff --git a/src/com/android/documentsui/DirectoryReloadLock.java b/src/com/android/documentsui/DirectoryReloadLock.java
index b44a963..4299914 100644
--- a/src/com/android/documentsui/DirectoryReloadLock.java
+++ b/src/com/android/documentsui/DirectoryReloadLock.java
@@ -16,7 +16,7 @@
 
 package com.android.documentsui;
 
-import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.annotation.MainThread;
 import android.annotation.Nullable;
@@ -42,7 +42,7 @@
     public void block() {
         Shared.checkMainLoop();
         mPauseCount++;
-        if (DEBUG) Log.v(TAG, "Block count increments to " + mPauseCount + ".");
+        if (VERBOSE) Log.v(TAG, "Block count increments to " + mPauseCount + ".");
     }
 
     /**
@@ -54,7 +54,7 @@
         Shared.checkMainLoop();
         assert(mPauseCount > 0);
         mPauseCount--;
-        if (DEBUG) Log.v(TAG, "Block count decrements to " + mPauseCount + ".");
+        if (VERBOSE) Log.v(TAG, "Block count decrements to " + mPauseCount + ".");
         if (mPauseCount == 0 && mCallback != null) {
             mCallback.run();
             mCallback = null;
@@ -72,4 +72,4 @@
             mCallback = update;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/documentsui/NavigationViewManager.java b/src/com/android/documentsui/NavigationViewManager.java
index 65f9000..07e3824 100644
--- a/src/com/android/documentsui/NavigationViewManager.java
+++ b/src/com/android/documentsui/NavigationViewManager.java
@@ -16,7 +16,7 @@
 
 package com.android.documentsui;
 
-import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.annotation.Nullable;
 import android.graphics.drawable.Drawable;
@@ -99,7 +99,7 @@
         if (mState.stack.size() <= 1) {
             mBreadcrumb.show(false);
             String title = mEnv.getCurrentRoot().title;
-            if (DEBUG) Log.v(TAG, "New toolbar title is: " + title);
+            if (VERBOSE) Log.v(TAG, "New toolbar title is: " + title);
             mToolbar.setTitle(title);
         } else {
             mBreadcrumb.show(true);
@@ -107,7 +107,7 @@
             mBreadcrumb.postUpdate();
         }
 
-        if (DEBUG) Log.v(TAG, "Final toolbar title is: " + mToolbar.getTitle());
+        if (VERBOSE) Log.v(TAG, "Final toolbar title is: " + mToolbar.getTitle());
     }
 
     // Hamburger if drawer is present, else sad nullness.
diff --git a/src/com/android/documentsui/base/RootInfo.java b/src/com/android/documentsui/base/RootInfo.java
index 50b9603..0b46417 100644
--- a/src/com/android/documentsui/base/RootInfo.java
+++ b/src/com/android/documentsui/base/RootInfo.java
@@ -19,7 +19,7 @@
 import static com.android.documentsui.base.DocumentInfo.getCursorInt;
 import static com.android.documentsui.base.DocumentInfo.getCursorLong;
 import static com.android.documentsui.base.DocumentInfo.getCursorString;
-import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 import static com.android.documentsui.base.Shared.compareToIgnoreCaseNullable;
 
 import android.annotation.IntDef;
@@ -233,7 +233,7 @@
             derivedType = TYPE_OTHER;
         }
 
-        if (DEBUG) Log.v(TAG, "Deriving fields: " + this);
+        if (VERBOSE) Log.v(TAG, "Derived fields: " + this);
     }
 
     public Uri getUri() {
diff --git a/src/com/android/documentsui/base/Shared.java b/src/com/android/documentsui/base/Shared.java
index 31a9451..df36cec 100644
--- a/src/com/android/documentsui/base/Shared.java
+++ b/src/com/android/documentsui/base/Shared.java
@@ -47,6 +47,7 @@
     public static final String TAG = "Documents";
 
     public static final boolean DEBUG = true;
+    public static final boolean VERBOSE = DEBUG && Log.isLoggable(TAG, Log.VERBOSE);
 
     public static final boolean ENABLE_OMC_API_FEATURES = true;
 
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index efbbeed..03ed834 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -19,6 +19,7 @@
 import static com.android.documentsui.base.DocumentInfo.getCursorInt;
 import static com.android.documentsui.base.DocumentInfo.getCursorString;
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 import static com.android.documentsui.base.State.MODE_GRID;
 import static com.android.documentsui.base.State.MODE_LIST;
 
@@ -526,14 +527,15 @@
      */
     private void scaleLayout(float scale) {
         assert(Build.IS_DEBUGGABLE);
-        if (DEBUG) Log.v(TAG, "Handling scale event: " + scale + ", existing scale: " + mLiveScale);
+        if (VERBOSE) Log.v(
+                TAG, "Handling scale event: " + scale + ", existing scale: " + mLiveScale);
 
         if (mMode == MODE_GRID) {
             float minScale = getFraction(R.fraction.grid_scale_min);
             float maxScale = getFraction(R.fraction.grid_scale_max);
             float nextScale = mLiveScale * scale;
 
-            if (DEBUG) Log.v(TAG,
+            if (VERBOSE) Log.v(TAG,
                     "Next scale " + nextScale + ", Min/max scale " + minScale + "/" + maxScale);
 
             if (nextScale > minScale && nextScale < maxScale) {
diff --git a/src/com/android/documentsui/dirlist/IconHelper.java b/src/com/android/documentsui/dirlist/IconHelper.java
index fa1c121..77a6466 100644
--- a/src/com/android/documentsui/dirlist/IconHelper.java
+++ b/src/com/android/documentsui/dirlist/IconHelper.java
@@ -16,7 +16,7 @@
 
 package com.android.documentsui.dirlist;
 
-import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 import static com.android.documentsui.base.State.MODE_GRID;
 import static com.android.documentsui.base.State.MODE_LIST;
 
@@ -160,12 +160,12 @@
             mImageAnimator = animator;
             mLastModified = lastModified;
             mSignal = new CancellationSignal();
-            if (DEBUG) Log.v(TAG, "Starting icon loader task for " + mUri);
+            if (VERBOSE) Log.v(TAG, "Starting icon loader task for " + mUri);
         }
 
         @Override
         public void preempt() {
-            if (DEBUG) Log.v(TAG, "Icon loader task for " + mUri + " was cancelled.");
+            if (VERBOSE) Log.v(TAG, "Icon loader task for " + mUri + " was cancelled.");
             cancel(false);
             mSignal.cancel();
         }
@@ -201,7 +201,7 @@
 
         @Override
         protected void onPostExecute(Bitmap result) {
-            if (DEBUG) Log.v(TAG, "Loader task for " + mUri + " completed");
+            if (VERBOSE) Log.v(TAG, "Loader task for " + mUri + " completed");
 
             if (mIconThumb.getTag() == this && result != null) {
                 mIconThumb.setTag(null);
@@ -282,7 +282,7 @@
             iconThumb.setImageBitmap(cachedThumbnail);
 
             boolean stale = (docLastModified > result.getLastModified());
-            if (DEBUG) Log.v(TAG,
+            if (VERBOSE) Log.v(TAG,
                     String.format("Load thumbnail for %s, got result %d and stale %b.",
                             uri.toString(), result.getStatus(), stale));
             if (!result.isExactHit() || stale) {
diff --git a/src/com/android/documentsui/dirlist/ListeningGestureDetector.java b/src/com/android/documentsui/dirlist/ListeningGestureDetector.java
index 17ac867..d2f6972 100644
--- a/src/com/android/documentsui/dirlist/ListeningGestureDetector.java
+++ b/src/com/android/documentsui/dirlist/ListeningGestureDetector.java
@@ -16,7 +16,7 @@
 
 package com.android.documentsui.dirlist;
 
-import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.annotation.Nullable;
 import android.content.Context;
@@ -82,7 +82,7 @@
                         new ScaleGestureDetector.SimpleOnScaleGestureListener() {
                             @Override
                             public boolean onScale(ScaleGestureDetector detector) {
-                                if (DEBUG) Log.v(TAG,
+                                if (VERBOSE) Log.v(TAG,
                                         "Received scale event: " + detector.getScaleFactor());
                                 scaleHandler.accept(detector.getScaleFactor());
                                 return true;
@@ -176,4 +176,4 @@
         // Pass events to UserInputHandler.
         return onTouchEvent(event);
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/documentsui/dirlist/Model.java b/src/com/android/documentsui/dirlist/Model.java
index 8bdf079..5094f41 100644
--- a/src/com/android/documentsui/dirlist/Model.java
+++ b/src/com/android/documentsui/dirlist/Model.java
@@ -18,6 +18,7 @@
 
 import static com.android.documentsui.base.DocumentInfo.getCursorString;
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.annotation.IntDef;
 import android.database.Cursor;
@@ -241,7 +242,7 @@
         if (filter.test(cursor)) {
             docs.add(DocumentInfo.fromDirectoryCursor(cursor));
         } else {
-            if (DEBUG) Log.v(TAG, "Filtered document from results: " + modelId);
+            if (VERBOSE) Log.v(TAG, "Filtered document from results: " + modelId);
         }
     }
 
diff --git a/src/com/android/documentsui/dirlist/UserInputHandler.java b/src/com/android/documentsui/dirlist/UserInputHandler.java
index e107c2b..00912cd 100644
--- a/src/com/android/documentsui/dirlist/UserInputHandler.java
+++ b/src/com/android/documentsui/dirlist/UserInputHandler.java
@@ -17,6 +17,7 @@
 package com.android.documentsui.dirlist;
 
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.support.annotation.VisibleForTesting;
 import android.util.Log;
@@ -211,18 +212,18 @@
     private final class TouchInputDelegate {
 
         boolean onDown(T event) {
-            if (DEBUG) Log.v(TTAG, "Delegated onDown event.");
+            if (VERBOSE) Log.v(TTAG, "Delegated onDown event.");
             return false;
         }
 
         // Don't consume so the RecyclerView will get the event and will get touch-based scrolling
         boolean onScroll(T event) {
-            if (DEBUG) Log.v(TTAG, "Delegated onScroll event.");
+            if (VERBOSE) Log.v(TTAG, "Delegated onScroll event.");
             return false;
         }
 
         boolean onSingleTapUp(T event) {
-            if (DEBUG) Log.v(TTAG, "Delegated onSingleTapUp event.");
+            if (VERBOSE) Log.v(TTAG, "Delegated onSingleTapUp event.");
             if (!event.isOverModelItem()) {
                 if (DEBUG) Log.d(TTAG, "Tap not associated w/ model item. Clearing selection.");
                 mSelectionMgr.clearSelection();
@@ -247,17 +248,17 @@
         }
 
         boolean onSingleTapConfirmed(T event) {
-            if (DEBUG) Log.v(TTAG, "Delegated onSingleTapConfirmed event.");
+            if (VERBOSE) Log.v(TTAG, "Delegated onSingleTapConfirmed event.");
             return false;
         }
 
         boolean onDoubleTap(T event) {
-            if (DEBUG) Log.v(TTAG, "Delegated onDoubleTap event.");
+            if (VERBOSE) Log.v(TTAG, "Delegated onDoubleTap event.");
             return false;
         }
 
         final void onLongPress(T event) {
-            if (DEBUG) Log.v(TTAG, "Delegated onLongPress event.");
+            if (VERBOSE) Log.v(TTAG, "Delegated onLongPress event.");
             if (!event.isOverModelItem()) {
                 if (DEBUG) Log.d(TTAG, "Ignoring LongPress on non-model-backed item.");
                 return;
@@ -291,7 +292,7 @@
         private boolean mHandledOnDown;
 
         boolean onDown(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onDown event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onDown event.");
             if (event.isSecondaryButtonPressed()
                     || (event.isAltKeyDown() && event.isPrimaryButtonPressed())) {
                 mHandledOnDown = true;
@@ -303,18 +304,18 @@
 
         // Don't scroll content window in response to mouse drag
         boolean onScroll(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onScroll event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onScroll event.");
             return true;
         }
 
         boolean onSingleTapUp(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onSingleTapUp event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onSingleTapUp event.");
 
             // See b/27377794. Since we don't get a button state back from UP events, we have to
             // explicitly save this state to know whether something was previously handled by
             // DOWN events or not.
             if (mHandledOnDown) {
-                if (DEBUG) Log.v(MTAG, "Ignoring onSingleTapUp, previously handled in onDown.");
+                if (VERBOSE) Log.v(MTAG, "Ignoring onSingleTapUp, previously handled in onDown.");
                 mHandledOnDown = false;
                 return false;
             }
@@ -348,9 +349,9 @@
         }
 
         boolean onSingleTapConfirmed(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onSingleTapConfirmed event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onSingleTapConfirmed event.");
             if (mHandledTapUp) {
-                if (DEBUG) Log.v(MTAG, "Ignoring onSingleTapConfirmed, previously handled in onSingleTapUp.");
+                if (VERBOSE) Log.v(MTAG, "Ignoring onSingleTapConfirmed, previously handled in onSingleTapUp.");
                 mHandledTapUp = false;
                 return false;
             }
@@ -385,7 +386,7 @@
         }
 
         boolean onDoubleTap(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onDoubleTap event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onDoubleTap event.");
             mHandledTapUp = false;
 
             if (!event.isOverModelItem()) {
@@ -403,12 +404,12 @@
         }
 
         final void onLongPress(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onLongPress event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onLongPress event.");
             return;
         }
 
         private boolean onRightClick(T event) {
-            if (DEBUG) Log.v(MTAG, "Delegated onRightClick event.");
+            if (VERBOSE) Log.v(MTAG, "Delegated onRightClick event.");
             if (event.isOverModelItem()) {
                 DocumentDetails doc = event.getDocumentDetails();
                 if (!mSelectionMgr.getSelection().contains(doc.getModelId())) {
diff --git a/src/com/android/documentsui/roots/RootsAccess.java b/src/com/android/documentsui/roots/RootsAccess.java
index 784ccfb..e721905 100644
--- a/src/com/android/documentsui/roots/RootsAccess.java
+++ b/src/com/android/documentsui/roots/RootsAccess.java
@@ -17,6 +17,7 @@
 package com.android.documentsui.roots;
 
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.net.Uri;
 import android.util.Log;
@@ -63,49 +64,49 @@
         final List<RootInfo> matching = new ArrayList<>();
         for (RootInfo root : roots) {
 
-            if (DEBUG) Log.v(tag, "Evaluationg root: " + root);
+            if (VERBOSE) Log.v(tag, "Evaluationg root: " + root);
 
             if (state.action == State.ACTION_CREATE && !root.supportsCreate()) {
-                if (DEBUG) Log.v(tag, "Excluding read-only root because: ACTION_CREATE.");
+                if (VERBOSE) Log.v(tag, "Excluding read-only root because: ACTION_CREATE.");
                 continue;
             }
 
             if (state.action == State.ACTION_PICK_COPY_DESTINATION
                     && !root.supportsCreate()) {
-                if (DEBUG) Log.v(
+                if (VERBOSE) Log.v(
                         tag, "Excluding read-only root because: ACTION_PICK_COPY_DESTINATION.");
                 continue;
             }
 
             if (state.action == State.ACTION_OPEN_TREE && !root.supportsChildren()) {
-                if (DEBUG) Log.v(
+                if (VERBOSE) Log.v(
                         tag, "Excluding root !supportsChildren because: ACTION_OPEN_TREE.");
                 continue;
             }
 
             if (!state.showAdvanced && root.isAdvanced()) {
-                if (DEBUG) Log.v(tag, "Excluding root because: unwanted advanced device.");
+                if (VERBOSE) Log.v(tag, "Excluding root because: unwanted advanced device.");
                 continue;
             }
 
             if (state.localOnly && !root.isLocalOnly()) {
-                if (DEBUG) Log.v(tag, "Excluding root because: unwanted non-local device.");
+                if (VERBOSE) Log.v(tag, "Excluding root because: unwanted non-local device.");
                 continue;
             }
 
             if (state.directoryCopy && root.isDownloads()) {
-                if (DEBUG) Log.v(
+                if (VERBOSE) Log.v(
                         tag, "Excluding downloads root because: unsupported directory copy.");
                 continue;
             }
 
             if (state.action == State.ACTION_OPEN && root.isEmpty()) {
-                if (DEBUG) Log.v(tag, "Excluding empty root because: ACTION_OPEN.");
+                if (VERBOSE) Log.v(tag, "Excluding empty root because: ACTION_OPEN.");
                 continue;
             }
 
             if (state.action == State.ACTION_GET_CONTENT && root.isEmpty()) {
-                if (DEBUG) Log.v(tag, "Excluding empty root because: ACTION_GET_CONTENT.");
+                if (VERBOSE) Log.v(tag, "Excluding empty root because: ACTION_GET_CONTENT.");
                 continue;
             }
 
@@ -113,14 +114,14 @@
                     MimeTypes.mimeMatches(root.derivedMimeTypes, state.acceptMimes) ||
                     MimeTypes.mimeMatches(state.acceptMimes, root.derivedMimeTypes);
             if (!overlap) {
-                if (DEBUG) Log.v(
+                if (VERBOSE) Log.v(
                         tag, "Excluding root because: unsupported content types > "
                         + Arrays.toString(state.acceptMimes));
                 continue;
             }
 
             if (state.excludedAuthorities.contains(root.authority)) {
-                if (DEBUG) Log.v(tag, "Excluding root because: owned by calling package.");
+                if (VERBOSE) Log.v(tag, "Excluding root because: owned by calling package.");
                 continue;
             }
 
diff --git a/src/com/android/documentsui/roots/RootsCache.java b/src/com/android/documentsui/roots/RootsCache.java
index 4111a95..43ef61a 100644
--- a/src/com/android/documentsui/roots/RootsCache.java
+++ b/src/com/android/documentsui/roots/RootsCache.java
@@ -17,6 +17,7 @@
 package com.android.documentsui.roots;
 
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.content.BroadcastReceiver.PendingResult;
 import android.content.ContentProviderClient;
@@ -211,7 +212,7 @@
      */
     private Collection<RootInfo> loadRootsForAuthority(ContentResolver resolver, String authority,
             boolean forceRefresh) {
-        if (DEBUG) Log.v(TAG, "Loading roots for " + authority);
+        if (VERBOSE) Log.v(TAG, "Loading roots for " + authority);
 
         synchronized (mObservedAuthorities) {
             if (mObservedAuthorities.add(authority)) {
@@ -227,7 +228,7 @@
             // long-lived system process.
             final Bundle systemCache = resolver.getCache(rootsUri);
             if (systemCache != null) {
-                if (DEBUG) Log.v(TAG, "System cache hit for " + authority);
+                if (VERBOSE) Log.v(TAG, "System cache hit for " + authority);
                 return systemCache.getParcelableArrayList(TAG);
             }
         }
@@ -378,7 +379,7 @@
             }
 
             final long delta = SystemClock.elapsedRealtime() - start;
-            if (DEBUG) Log.v(TAG,
+            if (VERBOSE) Log.v(TAG,
                     "Update found " + mTaskRoots.size() + " roots in " + delta + "ms");
             synchronized (mLock) {
                 mFirstLoadDone = true;
@@ -398,7 +399,7 @@
             // Ignore stopped packages for now; we might query them
             // later during UI interaction.
             if ((info.applicationInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0) {
-                if (DEBUG) Log.v(TAG, "Ignoring stopped authority " + info.authority);
+                if (VERBOSE) Log.v(TAG, "Ignoring stopped authority " + info.authority);
                 mTaskStoppedAuthorities.add(info.authority);
                 return;
             }
diff --git a/src/com/android/documentsui/selection/Range.java b/src/com/android/documentsui/selection/Range.java
index cd04f90..c7db84c 100644
--- a/src/com/android/documentsui/selection/Range.java
+++ b/src/com/android/documentsui/selection/Range.java
@@ -16,6 +16,7 @@
 package com.android.documentsui.selection;
 
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.support.v7.widget.RecyclerView;
 import android.util.Log;
@@ -71,7 +72,7 @@
         assert(mBegin != mEnd);
 
         if (position == mEnd) {
-            if (DEBUG) Log.v(SelectionManager.TAG, "Ignoring no-op revision for range: " + this);
+            if (VERBOSE) Log.v(SelectionManager.TAG, "Ignoring no-op revision for range: " + this);
         }
 
         if (mEnd > mBegin) {
@@ -148,4 +149,4 @@
     interface RangeUpdater {
         void updateForRange(int begin, int end, boolean selected, @RangeType int type);
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/documentsui/sidebar/RootsFragment.java b/src/com/android/documentsui/sidebar/RootsFragment.java
index 88c98a4..242f574 100644
--- a/src/com/android/documentsui/sidebar/RootsFragment.java
+++ b/src/com/android/documentsui/sidebar/RootsFragment.java
@@ -17,6 +17,7 @@
 package com.android.documentsui.sidebar;
 
 import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.VERBOSE;
 
 import android.annotation.Nullable;
 import android.app.Activity;
@@ -272,14 +273,14 @@
         Collections.sort(libraries, comp);
         Collections.sort(others, comp);
 
-        if (DEBUG) Log.v(TAG, "Adding library roots: " + libraries);
+        if (VERBOSE) Log.v(TAG, "Adding library roots: " + libraries);
         result.addAll(libraries);
         // Only add the spacer if it is actually separating something.
         if (!libraries.isEmpty() && !others.isEmpty()) {
             result.add(new SpacerItem());
         }
 
-        if (DEBUG) Log.v(TAG, "Adding plain roots: " + libraries);
+        if (VERBOSE) Log.v(TAG, "Adding plain roots: " + libraries);
         result.addAll(others);
 
         // Include apps that can handle this intent too.
@@ -295,7 +296,7 @@
      * special section at bottom).
      */
     private void includeHandlerApps(Intent handlerAppIntent, List<Item> result) {
-        if (DEBUG) Log.v(TAG, "Adding handler apps for intent: " + handlerAppIntent);
+        if (VERBOSE) Log.v(TAG, "Adding handler apps for intent: " + handlerAppIntent);
         Context context = getContext();
         final PackageManager pm = context.getPackageManager();
         final List<ResolveInfo> infos = pm.queryIntentActivities(
