summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/ComponentName.java52
-rw-r--r--core/java/android/content/pm/PackageParser.java80
-rw-r--r--core/java/android/content/pm/ResolveInfo.java22
-rw-r--r--core/java/android/printservice/PrintService.java40
-rw-r--r--core/java/android/transition/TextChange.java50
-rw-r--r--core/java/android/transition/Transition.java6
-rw-r--r--core/java/android/widget/AbsListView.java15
-rw-r--r--core/java/android/widget/FastScroller.java2
-rw-r--r--core/java/android/widget/ListView.java2
-rw-r--r--core/java/android/widget/PopupMenu.java13
-rw-r--r--core/java/com/android/internal/app/ResolverActivity.java23
-rw-r--r--core/java/com/android/internal/transition/ActionBarTransition.java33
-rw-r--r--core/java/com/android/internal/util/FastPrintWriter.java71
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java4
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java18
-rw-r--r--core/res/res/drawable-hdpi/ic_contact_picture.pngbin5929 -> 1575 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.pngbin697 -> 728 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.pngbin7367 -> 4095 bytes
-rw-r--r--core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.pngbin7343 -> 7311 bytes
-rw-r--r--core/res/res/drawable-hdpi/toast_frame.9.pngbin1319 -> 1053 bytes
-rw-r--r--core/res/res/drawable-hdpi/toast_frame_holo.9.pngbin1585 -> 1053 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_contact_picture.pngbin4733 -> 959 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.pngbin523 -> 591 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.pngbin4021 -> 2352 bytes
-rw-r--r--core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.pngbin4025 -> 4166 bytes
-rw-r--r--core/res/res/drawable-mdpi/stat_notify_more.pngbin603 -> 849 bytes
-rw-r--r--core/res/res/drawable-mdpi/toast_frame.9.pngbin839 -> 666 bytes
-rw-r--r--core/res/res/drawable-mdpi/toast_frame_holo.9.pngbin985 -> 666 bytes
-rw-r--r--core/res/res/drawable-xhdpi/ic_contact_picture.pngbin7422 -> 2451 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.pngbin923 -> 953 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.pngbin11439 -> 5601 bytes
-rw-r--r--core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.pngbin11335 -> 11692 bytes
-rw-r--r--core/res/res/drawable-xhdpi/toast_frame.9.pngbin1956 -> 1557 bytes
-rw-r--r--core/res/res/drawable-xhdpi/toast_frame_holo.9.pngbin2342 -> 1557 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow.png)bin455 -> 455 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio.png)bin1222 -> 1222 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact.png)bin1114 -> 1114 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_event_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_event.png)bin772 -> 772 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_generic_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_generic.png)bin694 -> 694 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet.png)bin814 -> 814 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_text_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_text.png)bin745 -> 745 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_doc_video_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_doc_video.png)bin736 -> 736 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_am.9.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow.9.png)bin167 -> 167 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect.png)bin1123 -> 1123 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder.png)bin698 -> 698 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_menu_rename_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_menu_rename.png)bin1246 -> 1246 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby.png)bin659 -> 659 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_menu_undo_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_menu_undo.png)bin1044 -> 1044 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_open_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_open.png)bin852 -> 852 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_popout_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_popout.png)bin697 -> 697 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_root_folder_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_root_folder.png)bin508 -> 508 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-hdpi/ic_subdirectory_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-hdpi/ic_subdirectory_arrow.png)bin674 -> 674 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow.png)bin429 -> 429 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio.png)bin858 -> 858 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact.png)bin825 -> 825 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_event_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_event.png)bin639 -> 639 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_generic_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_generic.png)bin561 -> 561 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet.png)bin766 -> 766 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_text_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_text.png)bin647 -> 647 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_doc_video_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_doc_video.png)bin609 -> 609 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_am.9.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow.9.png)bin155 -> 155 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect.png)bin782 -> 782 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder.png)bin576 -> 576 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_menu_rename_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_menu_rename.png)bin844 -> 844 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby.png)bin594 -> 594 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_menu_undo_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_menu_undo.png)bin771 -> 771 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_open_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_open.png)bin645 -> 645 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_popout_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_popout.png)bin562 -> 562 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_root_folder_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_root_folder.png)bin442 -> 442 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-mdpi/ic_subdirectory_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-mdpi/ic_subdirectory_arrow.png)bin541 -> 541 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow.png)bin523 -> 523 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio.png)bin1596 -> 1596 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact.png)bin1420 -> 1420 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event.png)bin855 -> 855 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_generic_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_generic.png)bin831 -> 831 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet.png)bin1004 -> 1004 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text.png)bin845 -> 845 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video.png)bin838 -> 838 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_am.9.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow.9.png)bin181 -> 181 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect.png)bin1417 -> 1417 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder.png)bin778 -> 778 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_menu_rename_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_menu_rename.png)bin1681 -> 1681 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby.png)bin731 -> 731 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_menu_undo_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_menu_undo.png)bin1251 -> 1251 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_open_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_open.png)bin1041 -> 1041 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_popout_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_popout.png)bin807 -> 807 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_root_folder_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_root_folder.png)bin582 -> 582 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xhdpi/ic_subdirectory_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-xhdpi/ic_subdirectory_arrow.png)bin815 -> 815 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow.png)bin1226 -> 1226 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio.png)bin1574 -> 1574 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact.png)bin1323 -> 1323 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event.png)bin1494 -> 1494 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_generic_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_generic.png)bin585 -> 585 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet.png)bin1432 -> 1432 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text.png)bin489 -> 489 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video.png)bin1486 -> 1486 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_am.9.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow.9.png)bin202 -> 202 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect.png)bin2141 -> 2141 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder.png)bin510 -> 510 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_rename_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_rename.png)bin1951 -> 1951 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby.png)bin453 -> 453 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_undo_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_undo.png)bin1174 -> 1174 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_open_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_open.png)bin1736 -> 1736 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_popout_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_popout.png)bin568 -> 568 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_root_folder_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_root_folder.png)bin1263 -> 1263 bytes
-rw-r--r--packages/DocumentsUI/res/drawable-xxhdpi/ic_subdirectory_arrow_am.png (renamed from packages/DocumentsUI/res/drawable-xxhdpi/ic_subdirectory_arrow.png)bin683 -> 683 bytes
-rw-r--r--packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_audio.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_contact.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_event.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_generic.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_spreadsheet.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_text.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_doc_video.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_drawer_shadow.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_menu_disconnect.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_menu_rename.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_menu_sortby.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_menu_undo.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_open.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_popout.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_root_folder.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml23
-rw-r--r--packages/DocumentsUI/res/drawable/item_background.xml18
-rw-r--r--packages/DocumentsUI/res/layout/fragment_directory.xml1
-rw-r--r--packages/DocumentsUI/res/values/dimens.xml4
-rw-r--r--packages/DocumentsUI/res/values/strings.xml2
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java2
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java12
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java71
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java22
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java24
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/TestActivity.java27
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java56
-rw-r--r--packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java25
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java10
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java2
-rw-r--r--services/java/com/android/server/IntentResolver.java35
-rw-r--r--services/java/com/android/server/PreferredComponent.java9
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java3
-rwxr-xr-xservices/java/com/android/server/pm/PackageManagerService.java8
-rw-r--r--services/java/com/android/server/print/RemotePrintService.java17
-rw-r--r--services/java/com/android/server/print/UserState.java17
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java89
145 files changed, 1059 insertions, 240 deletions
diff --git a/core/java/android/content/ComponentName.java b/core/java/android/content/ComponentName.java
index 7ca0f01b9869..547a2c3dca10 100644
--- a/core/java/android/content/ComponentName.java
+++ b/core/java/android/content/ComponentName.java
@@ -18,6 +18,8 @@ package android.content;
import android.os.Parcel;
import android.os.Parcelable;
+
+import java.io.PrintWriter;
import java.lang.Comparable;
/**
@@ -109,6 +111,32 @@ public final class ComponentName implements Parcelable, Cloneable, Comparable<Co
return mClass;
}
+ private static void appendShortClassName(StringBuilder sb, String packageName,
+ String className) {
+ if (className.startsWith(packageName)) {
+ int PN = packageName.length();
+ int CN = className.length();
+ if (CN > PN && className.charAt(PN) == '.') {
+ sb.append(className, PN, CN);
+ return;
+ }
+ }
+ sb.append(className);
+ }
+
+ private static void printShortClassName(PrintWriter pw, String packageName,
+ String className) {
+ if (className.startsWith(packageName)) {
+ int PN = packageName.length();
+ int CN = className.length();
+ if (CN > PN && className.charAt(PN) == '.') {
+ pw.write(className, PN, CN-PN);
+ return;
+ }
+ }
+ pw.print(className);
+ }
+
/**
* Return a String that unambiguously describes both the package and
* class names contained in the ComponentName. You can later recover
@@ -137,9 +165,29 @@ public final class ComponentName implements Parcelable, Cloneable, Comparable<Co
* @see #unflattenFromString(String)
*/
public String flattenToShortString() {
- return mPackage + "/" + getShortClassName();
+ StringBuilder sb = new StringBuilder(mPackage.length() + mClass.length());
+ appendShortString(sb, mPackage, mClass);
+ return sb.toString();
}
-
+
+ /** @hide */
+ public void appendShortString(StringBuilder sb) {
+ appendShortString(sb, mPackage, mClass);
+ }
+
+ /** @hide */
+ public static void appendShortString(StringBuilder sb, String packageName, String className) {
+ sb.append(packageName).append('/');
+ appendShortClassName(sb, packageName, className);
+ }
+
+ /** @hide */
+ public static void printShortString(PrintWriter pw, String packageName, String className) {
+ pw.print(packageName);
+ pw.print('/');
+ printShortClassName(pw, packageName, className);
+ }
+
/**
* Recover a ComponentName from a String that was previously created with
* {@link #flattenToString()}. It splits the string at the first '/',
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 2e25177e49a9..b489ee9e2988 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -39,6 +39,7 @@ import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
@@ -3707,18 +3708,15 @@ public class PackageParser {
}
return componentName;
}
-
- public String getComponentShortName() {
- if (componentShortName != null) {
- return componentShortName;
- }
- ComponentName component = getComponentName();
- if (component != null) {
- componentShortName = component.flattenToShortString();
- }
- return componentShortName;
+
+ public void appendComponentShortName(StringBuilder sb) {
+ ComponentName.appendShortString(sb, owner.applicationInfo.packageName, className);
}
-
+
+ public void printComponentShortName(PrintWriter pw) {
+ ComponentName.printShortString(pw, owner.applicationInfo.packageName, className);
+ }
+
public void setPackageName(String packageName) {
componentName = null;
componentShortName = null;
@@ -3917,9 +3915,13 @@ public class PackageParser {
}
public String toString() {
- return "Activity{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + getComponentShortName() + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("Activity{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ appendComponentShortName(sb);
+ sb.append('}');
+ return sb.toString();
}
}
@@ -3954,9 +3956,13 @@ public class PackageParser {
}
public String toString() {
- return "Service{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + getComponentShortName() + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("Service{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ appendComponentShortName(sb);
+ sb.append('}');
+ return sb.toString();
}
}
@@ -3999,9 +4005,13 @@ public class PackageParser {
}
public String toString() {
- return "Provider{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + info.name + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("Provider{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ appendComponentShortName(sb);
+ sb.append('}');
+ return sb.toString();
}
}
@@ -4040,9 +4050,13 @@ public class PackageParser {
}
public String toString() {
- return "Instrumentation{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + getComponentShortName() + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("Instrumentation{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ appendComponentShortName(sb);
+ sb.append('}');
+ return sb.toString();
}
}
@@ -4074,9 +4088,13 @@ public class PackageParser {
}
public String toString() {
- return "ActivityIntentInfo{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + activity.info.name + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ActivityIntentInfo{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ activity.appendComponentShortName(sb);
+ sb.append('}');
+ return sb.toString();
}
}
@@ -4088,9 +4106,13 @@ public class PackageParser {
}
public String toString() {
- return "ServiceIntentInfo{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + service.info.name + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ServiceIntentInfo{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ service.appendComponentShortName(sb);
+ sb.append('}');
+ return sb.toString();
}
}
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index de8e256dab1a..e360e4063f7a 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -16,6 +16,7 @@
package android.content.pm;
+import android.content.ComponentName;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
@@ -247,10 +248,23 @@ public class ResolveInfo implements Parcelable {
public String toString() {
ComponentInfo ci = activityInfo != null ? activityInfo : serviceInfo;
- return "ResolveInfo{"
- + Integer.toHexString(System.identityHashCode(this))
- + " " + ci.name + " p=" + priority + " o="
- + preferredOrder + " m=0x" + Integer.toHexString(match) + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("ResolveInfo{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(' ');
+ ComponentName.appendShortString(sb, ci.packageName, ci.name);
+ if (priority != 0) {
+ sb.append(" p=");
+ sb.append(priority);
+ }
+ if (preferredOrder != 0) {
+ sb.append(" o=");
+ sb.append(preferredOrder);
+ }
+ sb.append(" m=0x");
+ sb.append(Integer.toHexString(match));
+ sb.append('}');
+ return sb.toString();
}
public int describeContents() {
diff --git a/core/java/android/printservice/PrintService.java b/core/java/android/printservice/PrintService.java
index e5ebf7754cf6..e73a53bee819 100644
--- a/core/java/android/printservice/PrintService.java
+++ b/core/java/android/printservice/PrintService.java
@@ -383,6 +383,10 @@ public abstract class PrintService extends Service {
final int action = message.what;
switch (action) {
case MSG_CREATE_PRINTER_DISCOVERY_SESSION: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_CREATE_PRINTER_DISCOVERY_SESSION "
+ + getPackageName());
+ }
PrinterDiscoverySession session = onCreatePrinterDiscoverySession();
if (session == null) {
throw new NullPointerException("session cannot be null");
@@ -396,6 +400,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_DESTROY_PRINTER_DISCOVERY_SESSION: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_DESTROY_PRINTER_DISCOVERY_SESSION "
+ + getPackageName());
+ }
if (mDiscoverySession != null) {
mDiscoverySession.destroy();
mDiscoverySession = null;
@@ -403,6 +411,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_START_PRINTER_DISCOVERY: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_START_PRINTER_DISCOVERY "
+ + getPackageName());
+ }
if (mDiscoverySession != null) {
List<PrinterId> priorityList = (ArrayList<PrinterId>) message.obj;
mDiscoverySession.startPrinterDiscovery(priorityList);
@@ -410,12 +422,20 @@ public abstract class PrintService extends Service {
} break;
case MSG_STOP_PRINTER_DISCOVERY: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_STOP_PRINTER_DISCOVERY "
+ + getPackageName());
+ }
if (mDiscoverySession != null) {
mDiscoverySession.stopPrinterDiscovery();
}
} break;
case MSG_VALIDATE_PRINTERS: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_VALIDATE_PRINTERS "
+ + getPackageName());
+ }
if (mDiscoverySession != null) {
List<PrinterId> printerIds = (List<PrinterId>) message.obj;
mDiscoverySession.validatePrinters(printerIds);
@@ -423,6 +443,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_START_PRINTER_STATE_TRACKING: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_START_PRINTER_STATE_TRACKING "
+ + getPackageName());
+ }
if (mDiscoverySession != null) {
PrinterId printerId = (PrinterId) message.obj;
mDiscoverySession.startPrinterStateTracking(printerId);
@@ -430,6 +454,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_STOP_PRINTER_STATE_TRACKING: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_STOP_PRINTER_STATE_TRACKING "
+ + getPackageName());
+ }
if (mDiscoverySession != null) {
PrinterId printerId = (PrinterId) message.obj;
mDiscoverySession.stopPrinterStateTracking(printerId);
@@ -437,11 +465,19 @@ public abstract class PrintService extends Service {
} break;
case MSG_ON_REQUEST_CANCEL_PRINTJOB: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_ON_REQUEST_CANCEL_PRINTJOB "
+ + getPackageName());
+ }
PrintJobInfo printJobInfo = (PrintJobInfo) message.obj;
onRequestCancelPrintJob(new PrintJob(printJobInfo, mClient));
} break;
case MSG_ON_PRINTJOB_QUEUED: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_ON_PRINTJOB_QUEUED "
+ + getPackageName());
+ }
PrintJobInfo printJobInfo = (PrintJobInfo) message.obj;
if (DEBUG) {
Log.i(LOG_TAG, "Queued: " + printJobInfo);
@@ -450,6 +486,10 @@ public abstract class PrintService extends Service {
} break;
case MSG_SET_CLEINT: {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "MSG_SET_CLEINT "
+ + getPackageName());
+ }
mClient = (IPrintServiceClient) message.obj;
if (mClient != null) {
onConnected();
diff --git a/core/java/android/transition/TextChange.java b/core/java/android/transition/TextChange.java
index fa2f5484d895..cf190a1cd66e 100644
--- a/core/java/android/transition/TextChange.java
+++ b/core/java/android/transition/TextChange.java
@@ -23,6 +23,7 @@ import android.animation.ValueAnimator;
import android.graphics.Color;
import android.util.Log;
import android.view.ViewGroup;
+import android.widget.EditText;
import android.widget.TextView;
import java.util.Map;
@@ -41,6 +42,10 @@ public class TextChange extends Transition {
private static final String LOG_TAG = "TextChange";
private static final String PROPNAME_TEXT = "android:textchange:text";
+ private static final String PROPNAME_TEXT_SELECTION_START =
+ "android:textchange:textSelectionStart";
+ private static final String PROPNAME_TEXT_SELECTION_END =
+ "android:textchange:textSelectionEnd";
private static final String PROPNAME_TEXT_COLOR = "android:textchange:textColor";
private int mChangeBehavior = CHANGE_BEHAVIOR_KEEP;
@@ -84,7 +89,9 @@ public class TextChange extends Transition {
public static final int CHANGE_BEHAVIOR_OUT_IN = 3;
private static final String[] sTransitionProperties = {
- PROPNAME_TEXT
+ PROPNAME_TEXT,
+ PROPNAME_TEXT_SELECTION_START,
+ PROPNAME_TEXT_SELECTION_END
};
/**
@@ -122,6 +129,12 @@ public class TextChange extends Transition {
if (transitionValues.view instanceof TextView) {
TextView textview = (TextView) transitionValues.view;
transitionValues.values.put(PROPNAME_TEXT, textview.getText());
+ if (textview instanceof EditText) {
+ transitionValues.values.put(PROPNAME_TEXT_SELECTION_START,
+ textview.getSelectionStart());
+ transitionValues.values.put(PROPNAME_TEXT_SELECTION_END,
+ textview.getSelectionEnd());
+ }
if (mChangeBehavior > CHANGE_BEHAVIOR_KEEP) {
transitionValues.values.put(PROPNAME_TEXT_COLOR, textview.getCurrentTextColor());
}
@@ -152,8 +165,24 @@ public class TextChange extends Transition {
(CharSequence) startVals.get(PROPNAME_TEXT) : "";
final CharSequence endText = endVals.get(PROPNAME_TEXT) != null ?
(CharSequence) endVals.get(PROPNAME_TEXT) : "";
+ final int startSelectionStart, startSelectionEnd, endSelectionStart, endSelectionEnd;
+ if (view instanceof EditText) {
+ startSelectionStart = startVals.get(PROPNAME_TEXT_SELECTION_START) != null ?
+ (Integer) startVals.get(PROPNAME_TEXT_SELECTION_START) : -1;
+ startSelectionEnd = startVals.get(PROPNAME_TEXT_SELECTION_END) != null ?
+ (Integer) startVals.get(PROPNAME_TEXT_SELECTION_END) : startSelectionStart;
+ endSelectionStart = endVals.get(PROPNAME_TEXT_SELECTION_START) != null ?
+ (Integer) endVals.get(PROPNAME_TEXT_SELECTION_START) : -1;
+ endSelectionEnd = endVals.get(PROPNAME_TEXT_SELECTION_END) != null ?
+ (Integer) endVals.get(PROPNAME_TEXT_SELECTION_END) : endSelectionStart;
+ } else {
+ startSelectionStart = startSelectionEnd = endSelectionStart = endSelectionEnd = -1;
+ }
if (!startText.equals(endText)) {
view.setText(startText);
+ if (view instanceof EditText) {
+ setSelection(((EditText) view), startSelectionStart, startSelectionEnd);
+ }
Animator anim;
if (mChangeBehavior == CHANGE_BEHAVIOR_KEEP) {
anim = ValueAnimator.ofFloat(0, 1);
@@ -163,6 +192,9 @@ public class TextChange extends Transition {
if (startText.equals(view.getText())) {
// Only set if it hasn't been changed since anim started
view.setText(endText);
+ if (view instanceof EditText) {
+ setSelection(((EditText) view), endSelectionStart, endSelectionEnd);
+ }
}
}
});
@@ -188,6 +220,10 @@ public class TextChange extends Transition {
if (startText.equals(view.getText())) {
// Only set if it hasn't been changed since anim started
view.setText(endText);
+ if (view instanceof EditText) {
+ setSelection(((EditText) view), endSelectionStart,
+ endSelectionEnd);
+ }
}
}
});
@@ -220,11 +256,17 @@ public class TextChange extends Transition {
@Override
public void onTransitionPause(Transition transition) {
view.setText(endText);
+ if (view instanceof EditText) {
+ setSelection(((EditText) view), endSelectionStart, endSelectionEnd);
+ }
}
@Override
public void onTransitionResume(Transition transition) {
view.setText(startText);
+ if (view instanceof EditText) {
+ setSelection(((EditText) view), startSelectionStart, startSelectionEnd);
+ }
}
};
addListener(transitionListener);
@@ -235,4 +277,10 @@ public class TextChange extends Transition {
}
return null;
}
+
+ private void setSelection(EditText editText, int start, int end) {
+ if (start >= 0 && end >= 0) {
+ editText.setSelection(start, end);
+ }
+ }
}
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java
index 4a991534d52e..a552fd474583 100644
--- a/core/java/android/transition/Transition.java
+++ b/core/java/android/transition/Transition.java
@@ -1094,7 +1094,11 @@ public abstract class Transition implements Cloneable {
}
TransitionValues values = new TransitionValues();
values.view = view;
- captureStartValues(values);
+ if (start) {
+ captureStartValues(values);
+ } else {
+ captureEndValues(values);
+ }
if (start) {
if (!isListViewItem) {
mStartValues.viewValues.put(view, values);
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 7378d7479873..41a8fd16b992 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -675,11 +675,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private int mLastAccessibilityScrollEventToIndex;
/**
- * Track if we are currently attached to a window.
- */
- boolean mIsAttached;
-
- /**
* Track the item count from the last time we handled a data change.
*/
private int mLastHandledItemCount;
@@ -1904,7 +1899,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
if (gainFocus && mSelectedPosition < 0 && !isInTouchMode()) {
- if (!mIsAttached && mAdapter != null) {
+ if (!isAttachedToWindow() && mAdapter != null) {
// Data may have changed while we were detached and it's valid
// to change focus while detached. Refresh so we don't die.
mDataChanged = true;
@@ -2715,7 +2710,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mOldItemCount = mItemCount;
mItemCount = mAdapter.getCount();
}
- mIsAttached = true;
}
@Override
@@ -2770,7 +2764,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
removeCallbacks(mTouchModeReset);
mTouchModeReset.run();
}
- mIsAttached = false;
}
@Override
@@ -3397,7 +3390,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mPositionScroller.stop();
}
- if (!mIsAttached) {
+ if (!isAttachedToWindow()) {
// Something isn't right.
// Since we rely on being attached to get data set change notifications,
// don't risk doing anything where we might try to resync and find things
@@ -3636,7 +3629,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mTouchMode = TOUCH_MODE_REST;
child.setPressed(false);
setPressed(false);
- if (!mDataChanged) {
+ if (!mDataChanged && isAttachedToWindow()) {
performClick.run();
}
}
@@ -3911,7 +3904,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
mPositionScroller.stop();
}
- if (!mIsAttached) {
+ if (!isAttachedToWindow()) {
// Something isn't right.
// Since we rely on being attached to get data set change notifications,
// don't risk doing anything where we might try to resync and find things
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 006b96e7834d..e2f6d7d3712a 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -210,7 +210,7 @@ class FastScroller {
private final Runnable mDeferStartDrag = new Runnable() {
@Override
public void run() {
- if (mList.mIsAttached) {
+ if (mList.isAttachedToWindow()) {
beginDrag();
final float pos = getPosFromMotionEvent(mInitialTouchY);
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index b239fbd70706..4b00f90d13c3 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -2122,7 +2122,7 @@ public class ListView extends AbsListView {
}
private boolean commonKey(int keyCode, int count, KeyEvent event) {
- if (mAdapter == null || !mIsAttached) {
+ if (mAdapter == null || !isAttachedToWindow()) {
return false;
}
diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java
index 603db70fad5e..9ac6a5969dea 100644
--- a/core/java/android/widget/PopupMenu.java
+++ b/core/java/android/widget/PopupMenu.java
@@ -93,7 +93,20 @@ public class PopupMenu implements MenuBuilder.Callback, MenuPresenter.Callback {
if (mDragListener == null) {
mDragListener = new ForwardingListener(mAnchor) {
@Override
+ protected boolean onForwardingStarted() {
+ show();
+ return true;
+ }
+
+ @Override
+ protected boolean onForwardingStopped() {
+ dismiss();
+ return true;
+ }
+
+ @Override
public ListPopupWindow getPopup() {
+ // This will be null until show() is called.
return mPopup.getPopup();
}
};
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 497c0c6ede5e..05fd613ee659 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -28,7 +28,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
-import android.content.pm.IPackageManager;
import android.content.pm.LabeledIntent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -89,6 +88,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
private Intent makeMyIntent() {
Intent intent = new Intent(getIntent());
+ intent.setComponent(null);
// The resolver activity is set to be hidden from recent tasks.
// we don't want this attribute to be propagated to the next activity
// being launched. Note that if the original Intent also had this
@@ -119,7 +119,6 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
mPm = getPackageManager();
mAlwaysUseOption = alwaysUseOption;
mMaxColumns = getResources().getInteger(R.integer.config_maxResolverActivityColumns);
- intent.setComponent(null);
AlertController.AlertParams ap = mAlertParams;
@@ -290,7 +289,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
}
protected void onIntentSelected(ResolveInfo ri, Intent intent, boolean alwaysCheck) {
- if (mAlwaysUseOption) {
+ if (mAlwaysUseOption && mAdapter.mOrigResolveList != null) {
// Build a reasonable intent filter, based on what matched.
IntentFilter filter = new IntentFilter();
@@ -367,11 +366,11 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
}
if (filter != null) {
- final int N = mAdapter.mList.size();
+ final int N = mAdapter.mOrigResolveList.size();
ComponentName[] set = new ComponentName[N];
int bestMatch = 0;
for (int i=0; i<N; i++) {
- ResolveInfo r = mAdapter.mList.get(i).ri;
+ ResolveInfo r = mAdapter.mOrigResolveList.get(i);
set[i] = new ComponentName(r.activityInfo.packageName,
r.activityInfo.name);
if (r.match > bestMatch) bestMatch = r.match;
@@ -428,13 +427,14 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
private final int mLaunchedFromUid;
private final LayoutInflater mInflater;
- private List<DisplayResolveInfo> mList;
+ List<DisplayResolveInfo> mList;
+ List<ResolveInfo> mOrigResolveList;
+
private int mInitialHighlight = -1;
public ResolveListAdapter(Context context, Intent intent,
Intent[] initialIntents, List<ResolveInfo> rList, int launchedFromUid) {
mIntent = new Intent(intent);
- mIntent.setComponent(null);
mInitialIntents = initialIntents;
mBaseResolveList = rList;
mLaunchedFromUid = launchedFromUid;
@@ -472,8 +472,9 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
mList.clear();
if (mBaseResolveList != null) {
currentResolveList = mBaseResolveList;
+ mOrigResolveList = null;
} else {
- currentResolveList = mPm.queryIntentActivities(
+ currentResolveList = mOrigResolveList = mPm.queryIntentActivities(
mIntent, PackageManager.MATCH_DEFAULT_ONLY
| (mAlwaysUseOption ? PackageManager.GET_RESOLVED_FILTER : 0));
// Filter out any activities that the launched uid does not
@@ -489,6 +490,9 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
ai.applicationInfo.uid, ai.exported);
if (granted != PackageManager.PERMISSION_GRANTED) {
// Access not allowed!
+ if (mOrigResolveList == currentResolveList) {
+ mOrigResolveList = new ArrayList<ResolveInfo>(mOrigResolveList);
+ }
currentResolveList.remove(i);
}
}
@@ -510,6 +514,9 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
if (r0.priority != ri.priority ||
r0.isDefault != ri.isDefault) {
while (i < N) {
+ if (mOrigResolveList == currentResolveList) {
+ mOrigResolveList = new ArrayList<ResolveInfo>(mOrigResolveList);
+ }
currentResolveList.remove(i);
N--;
}
diff --git a/core/java/com/android/internal/transition/ActionBarTransition.java b/core/java/com/android/internal/transition/ActionBarTransition.java
index de597285a146..8beae8cfa586 100644
--- a/core/java/com/android/internal/transition/ActionBarTransition.java
+++ b/core/java/com/android/internal/transition/ActionBarTransition.java
@@ -21,27 +21,38 @@ import android.transition.ChangeBounds;
import android.transition.Fade;
import android.transition.TextChange;
import android.transition.Transition;
+import android.transition.TransitionManager;
import android.transition.TransitionSet;
+import android.view.ViewGroup;
public class ActionBarTransition {
+ private static boolean TRANSITIONS_ENABLED = false;
+
private static final int TRANSITION_DURATION = 120; // ms
private static final Transition sTransition;
static {
- final TextChange tc = new TextChange();
- tc.setChangeBehavior(TextChange.CHANGE_BEHAVIOR_OUT_IN);
- final TransitionSet inner = new TransitionSet();
- inner.addTransition(tc).addTransition(new ChangeBounds());
- final TransitionSet tg = new TransitionSet();
- tg.addTransition(new Fade(Fade.OUT)).addTransition(inner).addTransition(new Fade(Fade.IN));
- tg.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
- tg.setDuration(TRANSITION_DURATION);
- sTransition = tg;
+ if (TRANSITIONS_ENABLED) {
+ final TextChange tc = new TextChange();
+ tc.setChangeBehavior(TextChange.CHANGE_BEHAVIOR_OUT_IN);
+ final TransitionSet inner = new TransitionSet();
+ inner.addTransition(tc).addTransition(new ChangeBounds());
+ final TransitionSet tg = new TransitionSet();
+ tg.addTransition(new Fade(Fade.OUT)).addTransition(inner).
+ addTransition(new Fade(Fade.IN));
+ tg.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
+ tg.setDuration(TRANSITION_DURATION);
+ sTransition = tg;
+ } else {
+ sTransition = null;
+ }
}
- public static Transition getActionBarTransition() {
- return sTransition;
+ public static void beginDelayedTransition(ViewGroup sceneRoot) {
+ if (TRANSITIONS_ENABLED) {
+ TransitionManager.beginDelayedTransition(sceneRoot, sTransition);
+ }
}
}
diff --git a/core/java/com/android/internal/util/FastPrintWriter.java b/core/java/com/android/internal/util/FastPrintWriter.java
index 9bec10e5fa2b..c70a2430687b 100644
--- a/core/java/com/android/internal/util/FastPrintWriter.java
+++ b/core/java/com/android/internal/util/FastPrintWriter.java
@@ -1,5 +1,7 @@
package com.android.internal.util;
+import android.util.Printer;
+
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
@@ -41,6 +43,7 @@ public class FastPrintWriter extends PrintWriter {
final private String mSeparator;
final private Writer mWriter;
+ final private Printer mPrinter;
private CharsetEncoder mCharset;
final private ByteBuffer mBytes;
@@ -106,6 +109,7 @@ public class FastPrintWriter extends PrintWriter {
mBytes = ByteBuffer.allocate(mBufferLen);
mOutputStream = out;
mWriter = null;
+ mPrinter = null;
mAutoFlush = autoFlush;
mSeparator = System.lineSeparator();
initDefaultEncoder();
@@ -130,7 +134,7 @@ public class FastPrintWriter extends PrintWriter {
}
/**
- * Constructs a new {@code PrintWriter} with {@code out} as its target
+ * Constructs a new {@code PrintWriter} with {@code wr} as its target
* writer. The parameter {@code autoFlush} determines if the print writer
* automatically flushes its contents to the target writer when a newline is
* encountered.
@@ -148,7 +152,7 @@ public class FastPrintWriter extends PrintWriter {
}
/**
- * Constructs a new {@code PrintWriter} with {@code out} as its target
+ * Constructs a new {@code PrintWriter} with {@code wr} as its target
* writer and a custom buffer size. The parameter {@code autoFlush} determines
* if the print writer automatically flushes its contents to the target writer
* when a newline is encountered.
@@ -174,11 +178,55 @@ public class FastPrintWriter extends PrintWriter {
mBytes = null;
mOutputStream = null;
mWriter = wr;
+ mPrinter = null;
mAutoFlush = autoFlush;
mSeparator = System.lineSeparator();
initDefaultEncoder();
}
+ /**
+ * Constructs a new {@code PrintWriter} with {@code pr} as its target
+ * printer and the default buffer size. Because a {@link Printer} is line-base,
+ * autoflush is always enabled.
+ *
+ * @param pr
+ * the target writer.
+ * @throws NullPointerException
+ * if {@code pr} is {@code null}.
+ */
+ public FastPrintWriter(Printer pr) {
+ this(pr, 512);
+ }
+
+ /**
+ * Constructs a new {@code PrintWriter} with {@code pr} as its target
+ * printer and a custom buffer size. Because a {@link Printer} is line-base,
+ * autoflush is always enabled.
+ *
+ * @param pr
+ * the target writer.
+ * @param bufferLen
+ * specifies the size of the FastPrintWriter's internal buffer; the
+ * default is 512.
+ * @throws NullPointerException
+ * if {@code pr} is {@code null}.
+ */
+ public FastPrintWriter(Printer pr, int bufferLen) {
+ super(sDummyWriter, true);
+ if (pr == null) {
+ throw new NullPointerException("pr is null");
+ }
+ mBufferLen = bufferLen;
+ mText = new char[bufferLen];
+ mBytes = null;
+ mOutputStream = null;
+ mWriter = null;
+ mPrinter = pr;
+ mAutoFlush = true;
+ mSeparator = System.lineSeparator();
+ initDefaultEncoder();
+ }
+
private final void initEncoder(String csn) throws UnsupportedEncodingException {
try {
mCharset = Charset.forName(csn).newEncoder();
@@ -306,9 +354,22 @@ public class FastPrintWriter extends PrintWriter {
}
flushBytesLocked();
mOutputStream.flush();
- } else {
+ } else if (mWriter != null) {
mWriter.write(mText, 0, mPos);
mWriter.flush();
+ } else {
+ int nonEolOff = 0;
+ final int sepLen = mSeparator.length();
+ final int len = sepLen < mPos ? sepLen : mPos;
+ while (nonEolOff < len && mText[mPos-1-nonEolOff]
+ == mSeparator.charAt(mSeparator.length()-1-nonEolOff)) {
+ nonEolOff++;
+ }
+ if (nonEolOff >= mPos) {
+ mPrinter.println("");
+ } else {
+ mPrinter.println(new String(mText, 0, mPos-nonEolOff));
+ }
}
mPos = 0;
}
@@ -326,7 +387,7 @@ public class FastPrintWriter extends PrintWriter {
flushLocked();
if (mOutputStream != null) {
mOutputStream.flush();
- } else {
+ } else if (mWriter != null) {
mWriter.flush();
}
} catch (IOException e) {
@@ -342,7 +403,7 @@ public class FastPrintWriter extends PrintWriter {
flushLocked();
if (mOutputStream != null) {
mOutputStream.close();
- } else {
+ } else if (mWriter != null) {
mWriter.close();
}
} catch (IOException e) {
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index d5ab0f2304d2..4c6ddbf90cb4 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -73,8 +73,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter
final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
int mOpenSubMenuId;
- private static final Transition sTransition = ActionBarTransition.getActionBarTransition();
-
public ActionMenuPresenter(Context context) {
super(context, com.android.internal.R.layout.action_menu_layout,
com.android.internal.R.layout.action_menu_item_layout);
@@ -213,7 +211,7 @@ public class ActionMenuPresenter extends BaseMenuPresenter
public void updateMenuView(boolean cleared) {
final ViewGroup menuViewParent = (ViewGroup) ((View) mMenuView).getParent();
if (menuViewParent != null) {
- TransitionManager.beginDelayedTransition(menuViewParent, sTransition);
+ ActionBarTransition.beginDelayedTransition(menuViewParent);
}
super.updateMenuView(cleared);
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 7efcb6ec019e..a6566d5c9628 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -144,8 +144,6 @@ public class ActionBarView extends AbsActionBarView {
Window.Callback mWindowCallback;
- private final static Transition sTransition = ActionBarTransition.getActionBarTransition();
-
private final AdapterView.OnItemSelectedListener mNavItemSelectedListener =
new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View view, int position, long id) {
@@ -483,7 +481,7 @@ public class ActionBarView extends AbsActionBarView {
public void setCustomNavigationView(View view) {
final boolean showCustom = (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0;
if (showCustom) {
- TransitionManager.beginDelayedTransition(this, sTransition);
+ ActionBarTransition.beginDelayedTransition(this);
}
if (mCustomNavView != null && showCustom) {
removeView(mCustomNavView);
@@ -522,7 +520,7 @@ public class ActionBarView extends AbsActionBarView {
}
private void setTitleImpl(CharSequence title) {
- TransitionManager.beginDelayedTransition(this, sTransition);
+ ActionBarTransition.beginDelayedTransition(this);
mTitle = title;
if (mTitleView != null) {
mTitleView.setText(title);
@@ -542,7 +540,7 @@ public class ActionBarView extends AbsActionBarView {
}
public void setSubtitle(CharSequence subtitle) {
- TransitionManager.beginDelayedTransition(this, sTransition);
+ ActionBarTransition.beginDelayedTransition(this);
mSubtitle = subtitle;
if (mSubtitleView != null) {
mSubtitleView.setText(subtitle);
@@ -623,7 +621,7 @@ public class ActionBarView extends AbsActionBarView {
mDisplayOptions = options;
if ((flagsChanged & DISPLAY_RELAYOUT_MASK) != 0) {
- TransitionManager.beginDelayedTransition(this, sTransition);
+ ActionBarTransition.beginDelayedTransition(this);
if ((flagsChanged & ActionBar.DISPLAY_HOME_AS_UP) != 0) {
final boolean setUp = (options & ActionBar.DISPLAY_HOME_AS_UP) != 0;
@@ -737,7 +735,7 @@ public class ActionBarView extends AbsActionBarView {
public void setNavigationMode(int mode) {
final int oldMode = mNavigationMode;
if (mode != oldMode) {
- TransitionManager.beginDelayedTransition(this, sTransition);
+ ActionBarTransition.beginDelayedTransition(this);
switch (oldMode) {
case ActionBar.NAVIGATION_MODE_LIST:
if (mListNavLayout != null) {
@@ -860,7 +858,7 @@ public class ActionBarView extends AbsActionBarView {
}
}
- TransitionManager.beginDelayedTransition(this, sTransition);
+ ActionBarTransition.beginDelayedTransition(this);
mUpGoerFive.addView(mTitleLayout);
if (mExpandedActionView != null ||
(TextUtils.isEmpty(mTitle) && TextUtils.isEmpty(mSubtitle))) {
@@ -1639,7 +1637,7 @@ public class ActionBarView extends AbsActionBarView {
@Override
public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {
- TransitionManager.beginDelayedTransition(ActionBarView.this, sTransition);
+ ActionBarTransition.beginDelayedTransition(ActionBarView.this);
mExpandedActionView = item.getActionView();
mExpandedHomeLayout.setIcon(mIcon.getConstantState().newDrawable(getResources()));
@@ -1668,7 +1666,7 @@ public class ActionBarView extends AbsActionBarView {
@Override
public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {
- TransitionManager.beginDelayedTransition(ActionBarView.this, sTransition);
+ ActionBarTransition.beginDelayedTransition(ActionBarView.this);
// Do this before detaching the actionview from the hierarchy, in case
// it needs to dismiss the soft keyboard, etc.
diff --git a/core/res/res/drawable-hdpi/ic_contact_picture.png b/core/res/res/drawable-hdpi/ic_contact_picture.png
index 2eef7b53cec8..00d0ec43a4ff 100644
--- a/core/res/res/drawable-hdpi/ic_contact_picture.png
+++ b/core/res/res/drawable-hdpi/ic_contact_picture.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
index 449d4272acd6..7fe402a59370 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
index 14f4ff8f3566..4052eed858a8 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
index 5cf908658cc2..738d0fe63025 100644
--- a/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-hdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/toast_frame.9.png b/core/res/res/drawable-hdpi/toast_frame.9.png
index ad2cb5a965b7..ca65994ad1fe 100644
--- a/core/res/res/drawable-hdpi/toast_frame.9.png
+++ b/core/res/res/drawable-hdpi/toast_frame.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/toast_frame_holo.9.png b/core/res/res/drawable-hdpi/toast_frame_holo.9.png
index f8f75db9baa6..ca65994ad1fe 100644
--- a/core/res/res/drawable-hdpi/toast_frame_holo.9.png
+++ b/core/res/res/drawable-hdpi/toast_frame_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_contact_picture.png b/core/res/res/drawable-mdpi/ic_contact_picture.png
index 6c7cb61d6035..771cb6bb871f 100644
--- a/core/res/res/drawable-mdpi/ic_contact_picture.png
+++ b/core/res/res/drawable-mdpi/ic_contact_picture.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.png
index 4c4adf2cfe34..5762e5f4b38a 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png
index cb5b31a06457..bfb0967c73f5 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
index 52c9e3a8e992..8c0386fd36cf 100644
--- a/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-mdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_more.png b/core/res/res/drawable-mdpi/stat_notify_more.png
index ca9e09e77145..52b40f8c14ba 100644
--- a/core/res/res/drawable-mdpi/stat_notify_more.png
+++ b/core/res/res/drawable-mdpi/stat_notify_more.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/toast_frame.9.png b/core/res/res/drawable-mdpi/toast_frame.9.png
index b9105deeefb8..9e93fe71619f 100644
--- a/core/res/res/drawable-mdpi/toast_frame.9.png
+++ b/core/res/res/drawable-mdpi/toast_frame.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/toast_frame_holo.9.png b/core/res/res/drawable-mdpi/toast_frame_holo.9.png
index da2d52da0bf7..9e93fe71619f 100644
--- a/core/res/res/drawable-mdpi/toast_frame_holo.9.png
+++ b/core/res/res/drawable-mdpi/toast_frame_holo.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_contact_picture.png b/core/res/res/drawable-xhdpi/ic_contact_picture.png
index 1a2bfde385b7..bdba57b6bc15 100644
--- a/core/res/res/drawable-xhdpi/ic_contact_picture.png
+++ b/core/res/res/drawable-xhdpi/ic_contact_picture.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png
index db1cbe6ca16c..6a9744570c92 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_default_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png
index de4ca916ca58..f0e9ab965da8 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_green_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png
index 853b0f0ced00..170b8333069e 100644
--- a/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png
+++ b/core/res/res/drawable-xhdpi/indicator_code_lock_point_area_red_holo.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/toast_frame.9.png b/core/res/res/drawable-xhdpi/toast_frame.9.png
index 9f39a774607a..1f63420602c2 100644
--- a/core/res/res/drawable-xhdpi/toast_frame.9.png
+++ b/core/res/res/drawable-xhdpi/toast_frame.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/toast_frame_holo.9.png b/core/res/res/drawable-xhdpi/toast_frame_holo.9.png
index 9cb7c10d8b6a..1f63420602c2 100644
--- a/core/res/res/drawable-xhdpi/toast_frame_holo.9.png
+++ b/core/res/res/drawable-xhdpi/toast_frame_holo.9.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow.png b/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow_am.png
index 7c4c1a699d3b..7c4c1a699d3b 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio_am.png
index 465838d1e27f..465838d1e27f 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_audio_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact_am.png
index 8f3b82c16768..8f3b82c16768 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_contact_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event_am.png
index a3df8936db0a..a3df8936db0a 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_event_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_generic.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_generic_am.png
index 55b9b7d3c256..55b9b7d3c256 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_generic.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_generic_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet_am.png
index 880564ec506c..880564ec506c 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_spreadsheet_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text_am.png
index cb6016588f77..cb6016588f77 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_text_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video_am.png
index 9a942d28e66a..9a942d28e66a 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_doc_video_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow.9.png b/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_am.9.png
index 4a710cede463..4a710cede463 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow.9.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_drawer_shadow_am.9.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect_am.png
index 8a88407fe1a6..8a88407fe1a6 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_disconnect_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder_am.png
index 638c8124e3d2..638c8124e3d2 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_rename.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_rename_am.png
index 27563277ea63..27563277ea63 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_rename.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_rename_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am.png
index 78638f736418..78638f736418 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_undo.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_undo_am.png
index 20dce0fa6793..20dce0fa6793 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_undo.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_undo_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_open.png b/packages/DocumentsUI/res/drawable-hdpi/ic_open_am.png
index 595c4b9039d4..595c4b9039d4 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_open.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_open_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_popout.png b/packages/DocumentsUI/res/drawable-hdpi/ic_popout_am.png
index 37005129bd85..37005129bd85 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_popout.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_popout_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_root_folder.png b/packages/DocumentsUI/res/drawable-hdpi/ic_root_folder_am.png
index 915e11826ea7..915e11826ea7 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_root_folder.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_root_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_subdirectory_arrow.png b/packages/DocumentsUI/res/drawable-hdpi/ic_subdirectory_arrow_am.png
index 99060cd6fe2c..99060cd6fe2c 100644
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_subdirectory_arrow.png
+++ b/packages/DocumentsUI/res/drawable-hdpi/ic_subdirectory_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow.png b/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow_am.png
index 09e77afb6b58..09e77afb6b58 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio_am.png
index cb94d991fe79..cb94d991fe79 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_audio_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact_am.png
index 290ad3a915e6..290ad3a915e6 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_contact_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event_am.png
index e5eda72cd528..e5eda72cd528 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_event_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_generic.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_generic_am.png
index a1bd14eafbb0..a1bd14eafbb0 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_generic.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_generic_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet_am.png
index 2934e5ace3da..2934e5ace3da 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_spreadsheet_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text_am.png
index 95565b3445d7..95565b3445d7 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_text_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video_am.png
index 3a5b798e11cb..3a5b798e11cb 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_doc_video_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow.9.png b/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_am.9.png
index 9343a3974873..9343a3974873 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow.9.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_drawer_shadow_am.9.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect_am.png
index 96b01b975572..96b01b975572 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_disconnect_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder_am.png
index ee9580947b58..ee9580947b58 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_rename.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_rename_am.png
index 9ab2f78b7bba..9ab2f78b7bba 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_rename.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_rename_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am.png
index 2155d02b03bc..2155d02b03bc 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_undo.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_undo_am.png
index d56db426f056..d56db426f056 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_undo.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_undo_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_open.png b/packages/DocumentsUI/res/drawable-mdpi/ic_open_am.png
index adfacc1e50f7..adfacc1e50f7 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_open.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_open_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_popout.png b/packages/DocumentsUI/res/drawable-mdpi/ic_popout_am.png
index b17de2d6a059..b17de2d6a059 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_popout.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_popout_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_root_folder.png b/packages/DocumentsUI/res/drawable-mdpi/ic_root_folder_am.png
index 4352d08d9b1b..4352d08d9b1b 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_root_folder.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_root_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_subdirectory_arrow.png b/packages/DocumentsUI/res/drawable-mdpi/ic_subdirectory_arrow_am.png
index a7a2b129c1d2..a7a2b129c1d2 100644
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_subdirectory_arrow.png
+++ b/packages/DocumentsUI/res/drawable-mdpi/ic_subdirectory_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow_am.png
index 33c8f278ea7a..33c8f278ea7a 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio_am.png
index 2e66f0372741..2e66f0372741 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_audio_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact_am.png
index 4cec994e6bbe..4cec994e6bbe 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_contact_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event_am.png
index 5e46b71eeb80..5e46b71eeb80 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_event_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_generic.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_generic_am.png
index e05c4b48d52d..e05c4b48d52d 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_generic.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_generic_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet_am.png
index 87c6538c1bc5..87c6538c1bc5 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_spreadsheet_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text_am.png
index 97c45002cbbc..97c45002cbbc 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_text_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video_am.png
index 1a8e632c2888..1a8e632c2888 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_doc_video_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow.9.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_am.9.png
index 027c64aa2925..027c64aa2925 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow.9.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_drawer_shadow_am.9.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect_am.png
index 91c31e3baecb..91c31e3baecb 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_disconnect_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder_am.png
index f06b298fdf82..f06b298fdf82 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_rename.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_rename_am.png
index 17e09b363a5f..17e09b363a5f 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_rename.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_rename_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am.png
index 85c87342bcab..85c87342bcab 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_undo.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_undo_am.png
index 82c1a30f1f1c..82c1a30f1f1c 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_undo.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_undo_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_open.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_open_am.png
index a56940a1d5b7..a56940a1d5b7 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_open.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_open_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_popout.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_popout_am.png
index f6a0af405a89..f6a0af405a89 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_popout.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_popout_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_folder.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_folder_am.png
index c916e0be7687..c916e0be7687 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_folder.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_subdirectory_arrow.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_subdirectory_arrow_am.png
index 1da819658882..1da819658882 100644
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_subdirectory_arrow.png
+++ b/packages/DocumentsUI/res/drawable-xhdpi/ic_subdirectory_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow_am.png
index 06681e3c1c35..06681e3c1c35 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio_am.png
index 48ab9c77f50a..48ab9c77f50a 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_audio_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact_am.png
index 5263365008a6..5263365008a6 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_contact_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event_am.png
index 77a0faec5c50..77a0faec5c50 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_event_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_generic.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_generic_am.png
index c098866320d2..c098866320d2 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_generic.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_generic_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet_am.png
index 2170e666d1fa..2170e666d1fa 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_spreadsheet_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text_am.png
index bc4ce7921cba..bc4ce7921cba 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_text_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video_am.png
index 42d8ec174bef..42d8ec174bef 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_doc_video_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow.9.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_am.9.png
index 1a59e1a8c091..1a59e1a8c091 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow.9.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_drawer_shadow_am.9.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect_am.png
index 676d0f76972b..676d0f76972b 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_disconnect_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder_am.png
index b17ba1d0c2c9..b17ba1d0c2c9 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_rename.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_rename_am.png
index eed0eafb9b07..eed0eafb9b07 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_rename.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_rename_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am.png
index 867c8e8a8467..867c8e8a8467 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_undo.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_undo_am.png
index e4c9f8aa0b79..e4c9f8aa0b79 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_undo.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_undo_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_open.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_open_am.png
index b467962459bf..b467962459bf 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_open.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_open_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_popout.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_popout_am.png
index 5f5a86f793f1..5f5a86f793f1 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_popout.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_popout_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_folder.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_folder_am.png
index 077c851cee28..077c851cee28 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_folder.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_folder_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_subdirectory_arrow.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_subdirectory_arrow_am.png
index db53a011f09d..db53a011f09d 100644
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_subdirectory_arrow.png
+++ b/packages/DocumentsUI/res/drawable-xxhdpi/ic_subdirectory_arrow_am.png
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml b/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml
new file mode 100644
index 000000000000..0de7ddc9ba30
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_breadcrumb_arrow_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_audio.xml b/packages/DocumentsUI/res/drawable/ic_doc_audio.xml
new file mode 100644
index 000000000000..c6ccea63c1b0
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_audio.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_audio_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_contact.xml b/packages/DocumentsUI/res/drawable/ic_doc_contact.xml
new file mode 100644
index 000000000000..e6455513928c
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_contact.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_contact_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_event.xml b/packages/DocumentsUI/res/drawable/ic_doc_event.xml
new file mode 100644
index 000000000000..dcbd91216d0a
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_event.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_event_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_generic.xml b/packages/DocumentsUI/res/drawable/ic_doc_generic.xml
new file mode 100644
index 000000000000..d5f64ed84852
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_generic.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_generic_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_spreadsheet.xml b/packages/DocumentsUI/res/drawable/ic_doc_spreadsheet.xml
new file mode 100644
index 000000000000..8c6e056be858
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_spreadsheet.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_spreadsheet_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_text.xml b/packages/DocumentsUI/res/drawable/ic_doc_text.xml
new file mode 100644
index 000000000000..ac63ecb7516e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_text.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_text_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_video.xml b/packages/DocumentsUI/res/drawable/ic_doc_video.xml
new file mode 100644
index 000000000000..e1962622ca7e
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_doc_video.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_doc_video_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_drawer_shadow.xml b/packages/DocumentsUI/res/drawable/ic_drawer_shadow.xml
new file mode 100644
index 000000000000..8d457be8a322
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_drawer_shadow.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_drawer_shadow_am"
+ android:autoMirrored="true">
+</nine-patch>
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_disconnect.xml b/packages/DocumentsUI/res/drawable/ic_menu_disconnect.xml
new file mode 100644
index 000000000000..e5b4c8d334bf
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_menu_disconnect.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_disconnect_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml b/packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml
new file mode 100644
index 000000000000..42e7f90fbe55
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_new_folder_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_rename.xml b/packages/DocumentsUI/res/drawable/ic_menu_rename.xml
new file mode 100644
index 000000000000..e332313cdce0
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_menu_rename.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_rename_am"
+ android:autoMirrored="true">
+</bitmap>
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_sortby.xml b/packages/DocumentsUI/res/drawable/ic_menu_sortby.xml
new file mode 100644
index 000000000000..d908582f0871
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_menu_sortby.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_sortby_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_undo.xml b/packages/DocumentsUI/res/drawable/ic_menu_undo.xml
new file mode 100644
index 000000000000..f25d90d24777
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_menu_undo.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_undo_am"
+ android:autoMirrored="true">
+</bitmap>
diff --git a/packages/DocumentsUI/res/drawable/ic_open.xml b/packages/DocumentsUI/res/drawable/ic_open.xml
new file mode 100644
index 000000000000..faeb03d4fe77
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_open.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_open_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_popout.xml b/packages/DocumentsUI/res/drawable/ic_popout.xml
new file mode 100644
index 000000000000..223598d166be
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_popout.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_popout_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_root_folder.xml b/packages/DocumentsUI/res/drawable/ic_root_folder.xml
new file mode 100644
index 000000000000..a3c8f617231f
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_root_folder.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_root_folder_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml b/packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml
new file mode 100644
index 000000000000..0f66e2a6c58b
--- /dev/null
+++ b/packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_subdirectory_arrow_am"
+ android:autoMirrored="true">
+</bitmap> \ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/item_background.xml b/packages/DocumentsUI/res/drawable/item_background.xml
index 7447aa8c0527..6fcab3c8264a 100644
--- a/packages/DocumentsUI/res/drawable/item_background.xml
+++ b/packages/DocumentsUI/res/drawable/item_background.xml
@@ -16,18 +16,16 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:state_selected="true" android:drawable="@*android:drawable/list_selector_disabled_holo_light" />
- <item android:state_enabled="false" android:state_focused="true" android:drawable="@*android:drawable/list_selector_disabled_holo_light" />
- <item android:state_enabled="false" android:state_pressed="true" android:drawable="@*android:drawable/list_selector_disabled_holo_light" />
+ <item android:state_window_focused="false" android:drawable="@android:color/transparent" />
- <item android:state_activated="true" android:state_pressed="true" android:drawable="@*android:drawable/list_activated_holo" />
- <item android:state_activated="true" android:drawable="@*android:drawable/list_activated_holo" />
+ <item android:state_focused="true" android:state_activated="true" android:drawable="@*android:drawable/list_selected_holo_light" />
+ <item android:state_focused="false" android:state_activated="true" android:drawable="@*android:drawable/list_selected_holo_light" />
- <item android:state_focused="true" android:drawable="@*android:drawable/list_focused_holo" />
- <item android:state_selected="true" android:drawable="@*android:drawable/list_focused_holo" />
-
- <item android:state_pressed="true" android:state_focused="true" android:drawable="@*android:drawable/list_selector_background_transition_holo_light" />
- <item android:state_pressed="true" android:drawable="@*android:drawable/list_selector_background_transition_holo_light" />
+ <item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@*android:drawable/list_selector_disabled_holo_light" />
+ <item android:state_focused="true" android:state_enabled="false" android:drawable="@*android:drawable/list_selector_disabled_holo_light" />
+ <item android:state_focused="true" android:state_pressed="true" android:drawable="@*android:drawable/list_selector_background_transition_holo_light" />
+ <item android:state_focused="false" android:state_pressed="true" android:drawable="@*android:drawable/list_selector_background_transition_holo_light" />
+ <item android:state_focused="true" android:drawable="@*android:drawable/list_focused_holo" />
<item android:drawable="@android:color/transparent" />
diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml
index 98ded3426fd2..77cdc3ba067e 100644
--- a/packages/DocumentsUI/res/layout/fragment_directory.xml
+++ b/packages/DocumentsUI/res/layout/fragment_directory.xml
@@ -42,6 +42,7 @@
android:paddingEnd="@dimen/grid_padding_horiz"
android:paddingTop="@dimen/grid_padding"
android:paddingBottom="@dimen/grid_padding"
+ android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"
android:listSelector="@android:color/transparent"
android:visibility="gone" />
diff --git a/packages/DocumentsUI/res/values/dimens.xml b/packages/DocumentsUI/res/values/dimens.xml
index 4a93cdbf657d..924a8d6c6d5a 100644
--- a/packages/DocumentsUI/res/values/dimens.xml
+++ b/packages/DocumentsUI/res/values/dimens.xml
@@ -17,8 +17,8 @@
<resources>
<dimen name="icon_size">32dp</dimen>
<dimen name="root_icon_size">24dp</dimen>
- <dimen name="grid_width">180dp</dimen>
- <dimen name="grid_height">180dp</dimen>
+ <dimen name="grid_width">160dp</dimen>
+ <dimen name="grid_height">170dp</dimen>
<dimen name="grid_padding">4dp</dimen>
<dimen name="grid_padding_horiz">4dp</dimen>
diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml
index 682ae4ab7ef2..b7dcb71ee76d 100644
--- a/packages/DocumentsUI/res/values/strings.xml
+++ b/packages/DocumentsUI/res/values/strings.xml
@@ -62,6 +62,8 @@
<!-- Toast shown when saving a document failed with an error [CHAR LIMIT=48] -->
<string name="save_error">Failed to save document</string>
+ <!-- Toast shown when creating a folder failed with an error [CHAR LIMIT=48] -->
+ <string name="create_error">Failed to create folder</string>
<!-- Title of storage root location that contains recently modified or used documents [CHAR LIMIT=24] -->
<string name="root_recent">Recent</string>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
index d8e60aa2eed3..9d92cd89596f 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -76,7 +76,7 @@ public class CreateDirectoryFragment extends DialogFragment {
final DocumentInfo childDoc = DocumentInfo.fromUri(resolver, childUri);
activity.onDocumentPicked(childDoc);
} catch (Exception e) {
- Toast.makeText(context, R.string.save_error, Toast.LENGTH_SHORT).show();
+ Toast.makeText(context, R.string.create_error, Toast.LENGTH_SHORT).show();
}
}
});
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
index de1f13022bbd..79ab28d08ec1 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
@@ -715,8 +715,16 @@ public class DirectoryFragment extends Fragment {
final FrameLayout grid = (FrameLayout) convertView;
final int gridPadding = getResources()
.getDimensionPixelSize(R.dimen.grid_padding);
- grid.setForeground(new InsetDrawable(grid.getForeground(), gridPadding));
- grid.setBackground(new InsetDrawable(grid.getBackground(), gridPadding));
+
+ // Tricksy hobbitses! We need to fully clear the drawable so
+ // the view doesn't clobber the new InsetDrawable callback
+ // when setting back later.
+ final Drawable fg = grid.getForeground();
+ final Drawable bg = grid.getBackground();
+ grid.setForeground(null);
+ grid.setBackground(null);
+ grid.setForeground(new InsetDrawable(fg, gridPadding));
+ grid.setBackground(new InsetDrawable(bg, gridPadding));
} else {
throw new IllegalStateException();
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 6d5475d75ee7..8d55ec4619da 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -285,6 +285,7 @@ public class DocumentsActivity extends Activity {
private class RestoreStackTask extends AsyncTask<Void, Void, Void> {
private volatile boolean mRestoredStack;
+ private volatile boolean mExternal;
@Override
protected Void doInBackground(Void... params) {
@@ -298,6 +299,7 @@ public class DocumentsActivity extends Activity {
cursor.getColumnIndex(ResumeColumns.STACK));
DurableUtils.readFromArray(rawStack, mState.stack);
mRestoredStack = true;
+ mExternal = cursor.getInt(cursor.getColumnIndex(ResumeColumns.EXTERNAL)) != 0;
}
} catch (IOException e) {
Log.w(TAG, "Failed to resume", e);
@@ -305,12 +307,17 @@ public class DocumentsActivity extends Activity {
IoUtils.closeQuietly(cursor);
}
- // If restored root isn't valid, fall back to recents
- final RootInfo root = getCurrentRoot();
- final Collection<RootInfo> matchingRoots = mRoots.getMatchingRootsBlocking(mState);
- if (!matchingRoots.contains(root)) {
- mState.stack.reset();
- mRestoredStack = false;
+ if (mRestoredStack) {
+ // Update the restored stack to ensure we have freshest data
+ final Collection<RootInfo> matchingRoots = mRoots.getMatchingRootsBlocking(mState);
+ try {
+ mState.stack.updateRoot(matchingRoots);
+ mState.stack.updateDocuments(getContentResolver());
+ } catch (FileNotFoundException e) {
+ Log.w(TAG, "Failed to restore stack: " + e);
+ mState.stack.reset();
+ mRestoredStack = false;
+ }
}
return null;
@@ -321,10 +328,22 @@ public class DocumentsActivity extends Activity {
if (isDestroyed()) return;
mState.restored = true;
- // Only open drawer when not restoring stack, and when not showing
- // visual content.
- if (!mRestoredStack
- && !MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mState.acceptMimes)) {
+ // Show drawer when no stack restored, but only when requesting
+ // non-visual content. However, if we last used an external app,
+ // drawer is always shown.
+
+ boolean showDrawer = false;
+ if (!mRestoredStack) {
+ showDrawer = true;
+ }
+ if (MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mState.acceptMimes)) {
+ showDrawer = false;
+ }
+ if (mExternal && mState.action == ACTION_GET_CONTENT) {
+ showDrawer = true;
+ }
+
+ if (showDrawer) {
setRootsDrawerOpen(true);
}
@@ -340,6 +359,7 @@ public class DocumentsActivity extends Activity {
mState.showSize = true;
} else {
mState.showSize = SettingsActivity.getDisplayFileSize(this);
+ invalidateOptionsMenu();
}
}
@@ -779,10 +799,10 @@ public class DocumentsActivity extends Activity {
} else {
DirectoryFragment.showRecentsOpen(fm, anim);
- // Start recents in relevant mode
- final boolean acceptImages = MimePredicate.mimeMatches(
- "image/*", mState.acceptMimes);
- mState.userMode = acceptImages ? MODE_GRID : MODE_LIST;
+ // Start recents in grid when requesting visual things
+ final boolean visualMimes = MimePredicate.mimeMatches(
+ MimePredicate.VISUAL_MIMES, mState.acceptMimes);
+ mState.userMode = visualMimes ? MODE_GRID : MODE_LIST;
mState.derivedMode = mState.userMode;
}
} else {
@@ -814,9 +834,17 @@ public class DocumentsActivity extends Activity {
}
public void onStackPicked(DocumentStack stack) {
- mState.stack = stack;
- mState.stackTouched = true;
- onCurrentDirectoryChanged(ANIM_SIDE);
+ try {
+ // Update the restored stack to ensure we have freshest data
+ stack.updateDocuments(getContentResolver());
+
+ mState.stack = stack;
+ mState.stackTouched = true;
+ onCurrentDirectoryChanged(ANIM_SIDE);
+
+ } catch (FileNotFoundException e) {
+ Log.w(TAG, "Failed to restore stack: " + e);
+ }
}
public void onRootPicked(RootInfo root, boolean closeDrawer) {
@@ -858,6 +886,14 @@ public class DocumentsActivity extends Activity {
// Only relay back results when not canceled; otherwise stick around to
// let the user pick another app/backend.
if (requestCode == CODE_FORWARD && resultCode != RESULT_CANCELED) {
+
+ // Remember that we last picked via external app
+ final String packageName = getCallingPackage();
+ final ContentValues values = new ContentValues();
+ values.put(ResumeColumns.EXTERNAL, 1);
+ getContentResolver().insert(RecentsProvider.buildResume(packageName), values);
+
+ // Pass back result to original caller
setResult(resultCode, data);
finish();
} else {
@@ -945,6 +981,7 @@ public class DocumentsActivity extends Activity {
final String packageName = getCallingPackage();
values.clear();
values.put(ResumeColumns.STACK, rawStack);
+ values.put(ResumeColumns.EXTERNAL, 0);
resolver.insert(RecentsProvider.buildResume(packageName), values);
final Intent intent = new Intent();
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
index a396f79f1691..670d5c0a076e 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
@@ -45,8 +45,10 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
+import com.android.documentsui.DocumentsActivity.State;
import com.android.documentsui.RecentsProvider.RecentColumns;
import com.android.documentsui.model.DocumentStack;
+import com.android.documentsui.model.RootInfo;
import com.google.android.collect.Lists;
import libcore.io.IoUtils;
@@ -55,6 +57,7 @@ import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
/**
@@ -89,10 +92,13 @@ public class RecentsCreateFragment extends Fragment {
mAdapter = new DocumentStackAdapter();
mListView.setAdapter(mAdapter);
+ final RootsCache roots = DocumentsApplication.getRootsCache(context);
+ final State state = ((DocumentsActivity) getActivity()).getDisplayState();
+
mCallbacks = new LoaderCallbacks<List<DocumentStack>>() {
@Override
public Loader<List<DocumentStack>> onCreateLoader(int id, Bundle args) {
- return new RecentsCreateLoader(context);
+ return new RecentsCreateLoader(context, roots, state);
}
@Override
@@ -131,12 +137,18 @@ public class RecentsCreateFragment extends Fragment {
};
public static class RecentsCreateLoader extends UriDerivativeLoader<Uri, List<DocumentStack>> {
- public RecentsCreateLoader(Context context) {
+ private final RootsCache mRoots;
+ private final State mState;
+
+ public RecentsCreateLoader(Context context, RootsCache roots, State state) {
super(context, RecentsProvider.buildRecent());
+ mRoots = roots;
+ mState = state;
}
@Override
public List<DocumentStack> loadInBackground(Uri uri, CancellationSignal signal) {
+ final Collection<RootInfo> matchingRoots = mRoots.getMatchingRootsBlocking(mState);
final ArrayList<DocumentStack> result = Lists.newArrayList();
final ContentResolver resolver = getContext().getContentResolver();
@@ -149,6 +161,12 @@ public class RecentsCreateFragment extends Fragment {
try {
final DocumentStack stack = new DocumentStack();
stack.read(new DataInputStream(new ByteArrayInputStream(rawStack)));
+
+ // Only update root here to avoid spinning up all
+ // providers; we update the stack during the actual
+ // restore. This also filters away roots that don't
+ // match current filter.
+ stack.updateRoot(matchingRoots);
result.add(stack);
} catch (IOException e) {
Log.w(TAG, "Failed to resolve stack: " + e);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java
index af79c9364122..7386cae9b84e 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java
@@ -72,6 +72,7 @@ public class RecentsProvider extends ContentProvider {
public static final String PACKAGE_NAME = "package_name";
public static final String STACK = "stack";
public static final String TIMESTAMP = "timestamp";
+ public static final String EXTERNAL = "external";
}
public static Uri buildRecent() {
@@ -97,9 +98,10 @@ public class RecentsProvider extends ContentProvider {
private static final int VERSION_INIT = 1;
private static final int VERSION_AS_BLOB = 3;
+ private static final int VERSION_ADD_EXTERNAL = 4;
public DatabaseHelper(Context context) {
- super(context, DB_NAME, null, VERSION_AS_BLOB);
+ super(context, DB_NAME, null, VERSION_ADD_EXTERNAL);
}
@Override
@@ -121,9 +123,10 @@ public class RecentsProvider extends ContentProvider {
")");
db.execSQL("CREATE TABLE " + TABLE_RESUME + " (" +
- ResumeColumns.PACKAGE_NAME + " TEXT PRIMARY KEY ON CONFLICT REPLACE," +
- ResumeColumns.STACK + " BLOB," +
- ResumeColumns.TIMESTAMP + " INTEGER" +
+ ResumeColumns.PACKAGE_NAME + " TEXT NOT NULL PRIMARY KEY," +
+ ResumeColumns.STACK + " BLOB DEFAULT NULL," +
+ ResumeColumns.TIMESTAMP + " INTEGER," +
+ ResumeColumns.EXTERNAL + " INTEGER NOT NULL DEFAULT 0" +
")");
}
@@ -176,6 +179,7 @@ public class RecentsProvider extends ContentProvider {
@Override
public Uri insert(Uri uri, ContentValues values) {
final SQLiteDatabase db = mHelper.getWritableDatabase();
+ final ContentValues key = new ContentValues();
switch (sMatcher.match(uri)) {
case URI_RECENT:
values.put(RecentColumns.TIMESTAMP, System.currentTimeMillis());
@@ -188,7 +192,6 @@ public class RecentsProvider extends ContentProvider {
final String rootId = uri.getPathSegments().get(2);
final String documentId = uri.getPathSegments().get(3);
- final ContentValues key = new ContentValues();
key.put(StateColumns.AUTHORITY, authority);
key.put(StateColumns.ROOT_ID, rootId);
key.put(StateColumns.DOCUMENT_ID, documentId);
@@ -201,10 +204,15 @@ public class RecentsProvider extends ContentProvider {
return uri;
case URI_RESUME:
- final String packageName = uri.getPathSegments().get(1);
- values.put(ResumeColumns.PACKAGE_NAME, packageName);
values.put(ResumeColumns.TIMESTAMP, System.currentTimeMillis());
- db.insert(TABLE_RESUME, null, values);
+
+ final String packageName = uri.getPathSegments().get(1);
+ key.put(ResumeColumns.PACKAGE_NAME, packageName);
+
+ // Ensure that row exists, then update with changed values
+ db.insertWithOnConflict(TABLE_RESUME, null, key, SQLiteDatabase.CONFLICT_IGNORE);
+ db.update(TABLE_RESUME, values, ResumeColumns.PACKAGE_NAME + "=?",
+ new String[] { packageName });
return uri;
default:
throw new UnsupportedOperationException("Unsupported Uri " + uri);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java b/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
index 7b7c3d53a075..1cc35a7d97de 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
@@ -27,6 +27,7 @@ import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
+import android.widget.ScrollView;
import android.widget.TextView;
import libcore.io.IoUtils;
@@ -52,6 +53,9 @@ public class TestActivity extends Activity {
final LinearLayout view = new LinearLayout(context);
view.setOrientation(LinearLayout.VERTICAL);
+ mResult = new TextView(context);
+ view.addView(mResult);
+
final CheckBox multiple = new CheckBox(context);
multiple.setText("ALLOW_MULTIPLE");
view.addView(multiple);
@@ -156,6 +160,23 @@ public class TestActivity extends Activity {
view.addView(button);
button = new Button(context);
+ button.setText("CREATE_DOC image/png");
+ button.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("image/png");
+ intent.putExtra(Intent.EXTRA_TITLE, "mypicture.png");
+ if (localOnly.isChecked()) {
+ intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
+ }
+ startActivityForResult(intent, CODE_WRITE);
+ }
+ });
+ view.addView(button);
+
+ button = new Button(context);
button.setText("GET_CONTENT */*");
button.setOnClickListener(new OnClickListener() {
@Override
@@ -174,10 +195,10 @@ public class TestActivity extends Activity {
});
view.addView(button);
- mResult = new TextView(context);
- view.addView(mResult);
+ final ScrollView scroll = new ScrollView(context);
+ scroll.addView(view);
- setContentView(view);
+ setContentView(scroll);
}
@Override
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
index 08a8c1366f84..5091a612365a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
@@ -23,6 +23,7 @@ import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.DocumentsContract;
+import android.provider.DocumentsProvider;
import android.provider.DocumentsContract.Document;
import com.android.documentsui.RootCursorWrapper;
@@ -141,23 +142,42 @@ public class DocumentInfo implements Durable, Parcelable {
}
public static DocumentInfo fromCursor(Cursor cursor, String authority) {
- final DocumentInfo doc = new DocumentInfo();
- doc.authority = authority;
- doc.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- doc.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- doc.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- doc.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- doc.displayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
- doc.lastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
- doc.flags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- doc.summary = getCursorString(cursor, Document.COLUMN_SUMMARY);
- doc.size = getCursorLong(cursor, Document.COLUMN_SIZE);
- doc.icon = getCursorInt(cursor, Document.COLUMN_ICON);
- doc.deriveFields();
- return doc;
- }
-
- public static DocumentInfo fromUri(ContentResolver resolver, Uri uri) throws FileNotFoundException {
+ final DocumentInfo info = new DocumentInfo();
+ info.updateFromCursor(cursor, authority);
+ return info;
+ }
+
+ public void updateFromCursor(Cursor cursor, String authority) {
+ this.authority = authority;
+ this.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
+ this.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
+ this.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
+ this.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
+ this.displayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
+ this.lastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
+ this.flags = getCursorInt(cursor, Document.COLUMN_FLAGS);
+ this.summary = getCursorString(cursor, Document.COLUMN_SUMMARY);
+ this.size = getCursorLong(cursor, Document.COLUMN_SIZE);
+ this.icon = getCursorInt(cursor, Document.COLUMN_ICON);
+ this.deriveFields();
+ }
+
+ public static DocumentInfo fromUri(ContentResolver resolver, Uri uri)
+ throws FileNotFoundException {
+ final DocumentInfo info = new DocumentInfo();
+ info.updateFromUri(resolver, uri);
+ return info;
+ }
+
+ /**
+ * Update a possibly stale restored document against a live
+ * {@link DocumentsProvider}.
+ */
+ public void updateSelf(ContentResolver resolver) throws FileNotFoundException {
+ updateFromUri(resolver, derivedUri);
+ }
+
+ public void updateFromUri(ContentResolver resolver, Uri uri) throws FileNotFoundException {
final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
uri.getAuthority());
Cursor cursor = null;
@@ -166,7 +186,7 @@ public class DocumentInfo implements Durable, Parcelable {
if (!cursor.moveToFirst()) {
throw new FileNotFoundException("Missing details for " + uri);
}
- return fromCursor(cursor, uri.getAuthority());
+ updateFromCursor(cursor, uri.getAuthority());
} catch (Throwable t) {
throw asFileNotFoundException(t);
} finally {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
index 254144065f8a..0a378c07532a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
@@ -16,10 +16,15 @@
package com.android.documentsui.model;
+import android.content.ContentResolver;
+import android.provider.DocumentsProvider;
+
import java.io.DataInputStream;
import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.ProtocolException;
+import java.util.Collection;
import java.util.LinkedList;
/**
@@ -46,6 +51,26 @@ public class DocumentStack extends LinkedList<DocumentInfo> implements Durable {
return size() == 0;
}
+ public void updateRoot(Collection<RootInfo> matchingRoots) throws FileNotFoundException {
+ for (RootInfo root : matchingRoots) {
+ if (root.equals(this.root)) {
+ this.root = root;
+ return;
+ }
+ }
+ throw new FileNotFoundException("Failed to find matching root for " + root);
+ }
+
+ /**
+ * Update a possibly stale restored stack against a live
+ * {@link DocumentsProvider}.
+ */
+ public void updateDocuments(ContentResolver resolver) throws FileNotFoundException {
+ for (DocumentInfo info : this) {
+ info.updateSelf(resolver);
+ }
+ }
+
@Override
public void reset() {
clear();
diff --git a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
index 72f6f0afb4fb..b4eb08a566d2 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/FusedPrintersProvider.java
@@ -86,10 +86,6 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
}
private void computeAndDeliverResult(Map<PrinterId, PrinterInfo> discoveredPrinters) {
- if (!isStarted()) {
- return;
- }
-
List<PrinterInfo> printers = new ArrayList<PrinterInfo>();
// Add the updated favorite printers.
@@ -123,8 +119,10 @@ public class FusedPrintersProvider extends Loader<List<PrinterInfo>> {
mPrinters.clear();
mPrinters.addAll(printers);
- // Deliver the printers.
- deliverResult(printers);
+ if (isStarted()) {
+ // Deliver the printers.
+ deliverResult(printers);
+ }
}
@Override
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
index fb2c935c3aba..ce1f6ecc3ad6 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintSpoolerService.java
@@ -74,7 +74,7 @@ public final class PrintSpoolerService extends Service {
private static final String LOG_TAG = "PrintSpoolerService";
- private static final boolean DEBUG_PRINT_JOB_LIFECYCLE = true;
+ private static final boolean DEBUG_PRINT_JOB_LIFECYCLE = false;
private static final boolean DEBUG_PERSISTENCE = false;
diff --git a/services/java/com/android/server/IntentResolver.java b/services/java/com/android/server/IntentResolver.java
index 54aa50cd85ce..64b0487fa320 100644
--- a/services/java/com/android/server/IntentResolver.java
+++ b/services/java/com/android/server/IntentResolver.java
@@ -38,6 +38,7 @@ import android.util.Printer;
import android.content.Intent;
import android.content.IntentFilter;
+import com.android.internal.util.FastPrintWriter;
/**
* {@hide}
@@ -229,8 +230,8 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0);
if (debug) Slog.v(
- TAG, "Resolving type " + resolvedType + " scheme " + scheme
- + " of intent " + intent);
+ TAG, "Resolving type=" + resolvedType + " scheme=" + scheme
+ + " defaultOnly=" + defaultOnly + " userId=" + userId + " of " + intent);
F[] firstTypeCut = null;
F[] secondTypeCut = null;
@@ -312,8 +313,8 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
if (debug) {
Slog.v(TAG, "Final result list:");
- for (R r : finalList) {
- Slog.v(TAG, " " + r);
+ for (int i=0; i<finalList.size(); i++) {
+ Slog.v(TAG, " " + finalList.get(i));
}
}
return finalList;
@@ -521,6 +522,16 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
final boolean excludingStopped = intent.isExcludingStopped();
+ final Printer logPrinter;
+ final PrintWriter logPrintWriter;
+ if (debug) {
+ logPrinter = new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM);
+ logPrintWriter = new FastPrintWriter(logPrinter);
+ } else {
+ logPrinter = null;
+ logPrintWriter = null;
+ }
+
final int N = src != null ? src.length : 0;
boolean hasNonDefaults = false;
int i;
@@ -555,11 +566,17 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
match = filter.match(action, resolvedType, scheme, data, categories, TAG);
if (match >= 0) {
if (debug) Slog.v(TAG, " Filter matched! match=0x" +
- Integer.toHexString(match));
+ Integer.toHexString(match) + " hasDefault="
+ + filter.hasCategory(Intent.CATEGORY_DEFAULT));
if (!defaultOnly || filter.hasCategory(Intent.CATEGORY_DEFAULT)) {
final R oneResult = newResult(filter, match, userId);
if (oneResult != null) {
dest.add(oneResult);
+ if (debug) {
+ dumpFilter(logPrintWriter, " ", filter);
+ logPrintWriter.flush();
+ filter.dump(logPrinter, " ");
+ }
}
} else {
hasNonDefaults = true;
@@ -579,8 +596,12 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> {
}
}
- if (dest.size() == 0 && hasNonDefaults) {
- Slog.w(TAG, "resolveIntent failed: found match, but none with Intent.CATEGORY_DEFAULT");
+ if (hasNonDefaults) {
+ if (dest.size() == 0) {
+ Slog.w(TAG, "resolveIntent failed: found match, but none with CATEGORY_DEFAULT");
+ } else if (dest.size() > 1) {
+ Slog.w(TAG, "resolveIntent: multiple matches, only some with CATEGORY_DEFAULT");
+ }
}
}
diff --git a/services/java/com/android/server/PreferredComponent.java b/services/java/com/android/server/PreferredComponent.java
index 134b1989a86e..a7af252ca2ed 100644
--- a/services/java/com/android/server/PreferredComponent.java
+++ b/services/java/com/android/server/PreferredComponent.java
@@ -80,7 +80,7 @@ public class PreferredComponent {
}
myPackages[i] = cn.getPackageName().intern();
myClasses[i] = cn.getClassName().intern();
- myComponents[i] = cn.flattenToShortString().intern();
+ myComponents[i] = cn.flattenToShortString();
}
mSetPackages = myPackages;
mSetClasses = myClasses;
@@ -219,9 +219,10 @@ public class PreferredComponent {
out.print(prefix); out.print(
Integer.toHexString(System.identityHashCode(ident)));
out.print(' ');
- out.print(mComponent.flattenToShortString());
- out.print(" match=0x");
- out.println( Integer.toHexString(mMatch));
+ out.println(mShortComponent);
+ out.print(prefix); out.print(" mMatch=0x");
+ out.print(Integer.toHexString(mMatch));
+ out.print(" mAlways="); out.println(mAlways);
if (mSetComponents != null) {
out.print(prefix); out.println(" Selected from:");
for (int i=0; i<mSetComponents.length; i++) {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 327c85492d58..4f735889ee86 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -2355,7 +2355,8 @@ public final class ActivityManagerService extends ActivityManagerNative
}
killUnneededProcessLocked(proc, Long.toString(proc.lastCachedPss)
+ "k from cached");
- } else if (proc != null && !keepIfLarge && mLastMemoryLevel > ProcessStats.ADJ_MEM_FACTOR_NORMAL
+ } else if (proc != null && !keepIfLarge
+ && mLastMemoryLevel > ProcessStats.ADJ_MEM_FACTOR_NORMAL
&& proc.setProcState >= ActivityManager.PROCESS_STATE_CACHED_EMPTY) {
if (DEBUG_PSS) Slog.d(TAG, "May not keep " + proc + ": pss=" + proc.lastCachedPss);
if (proc.lastCachedPss >= mProcessList.getCachedRestoreThreshold()) {
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index f22159866b02..6cf3223611db 100755
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -5713,7 +5713,7 @@ public class PackageManagerService extends IPackageManager.Stub {
out.print(prefix); out.print(
Integer.toHexString(System.identityHashCode(filter.activity)));
out.print(' ');
- out.print(filter.activity.getComponentShortName());
+ filter.activity.printComponentShortName(out);
out.print(" filter ");
out.println(Integer.toHexString(System.identityHashCode(filter)));
}
@@ -5912,7 +5912,7 @@ public class PackageManagerService extends IPackageManager.Stub {
out.print(prefix); out.print(
Integer.toHexString(System.identityHashCode(filter.service)));
out.print(' ');
- out.print(filter.service.getComponentShortName());
+ filter.service.printComponentShortName(out);
out.print(" filter ");
out.println(Integer.toHexString(System.identityHashCode(filter)));
}
@@ -10423,7 +10423,7 @@ public class PackageManagerService extends IPackageManager.Stub {
dumpState.getTitlePrinted()
? "\nPreferred Activities User " + user + ":"
: "Preferred Activities User " + user + ":", " ",
- packageName, dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
+ packageName, true)) {
dumpState.setTitlePrinted(true);
}
}
@@ -10467,7 +10467,7 @@ public class PackageManagerService extends IPackageManager.Stub {
pw.println("Registered ContentProviders:");
printedSomething = true;
}
- pw.print(" "); pw.print(p.getComponentShortName()); pw.println(":");
+ pw.print(" "); p.printComponentShortName(pw); pw.println(":");
pw.print(" "); pw.println(p.toString());
}
printedSomething = false;
diff --git a/services/java/com/android/server/print/RemotePrintService.java b/services/java/com/android/server/print/RemotePrintService.java
index a20973e2a9c7..5b9dc287eff0 100644
--- a/services/java/com/android/server/print/RemotePrintService.java
+++ b/services/java/com/android/server/print/RemotePrintService.java
@@ -85,7 +85,7 @@ final class RemotePrintService implements DeathRecipient {
private boolean mHasPrinterDiscoverySession;
- private boolean mServiceDead;
+ private boolean mServiceDied;
private List<PrinterId> mDiscoveryPriorityList;
@@ -107,7 +107,6 @@ final class RemotePrintService implements DeathRecipient {
mSpooler = spooler;
mHandler = new MyHandler(context.getMainLooper());
mPrintServiceClient = new RemotePrintServiceClient(this);
- mServiceDead = true;
}
public ComponentName getComponentName() {
@@ -157,7 +156,7 @@ final class RemotePrintService implements DeathRecipient {
private void handleBinderDied() {
mPrintService.asBinder().unlinkToDeath(this, 0);
mPrintService = null;
- mServiceDead = true;
+ mServiceDied = true;
mCallbacks.onServiceDied(this);
}
@@ -171,7 +170,7 @@ final class RemotePrintService implements DeathRecipient {
if (!isBound()) {
// The service is dead and neither has active jobs nor discovery
// session, so ensure we are unbound since the service has no work.
- if (mServiceDead && !mHasPrinterDiscoverySession) {
+ if (mServiceDied && !mHasPrinterDiscoverySession) {
ensureUnbound();
return;
}
@@ -286,7 +285,7 @@ final class RemotePrintService implements DeathRecipient {
if (!isBound()) {
// The service is dead and neither has active jobs nor discovery
// session, so ensure we are unbound since the service has no work.
- if (mServiceDead && !mHasActivePrintJobs) {
+ if (mServiceDied && !mHasActivePrintJobs) {
ensureUnbound();
return;
}
@@ -556,15 +555,15 @@ final class RemotePrintService implements DeathRecipient {
return;
}
// If the service died and there is a discovery session, recreate it.
- if (mServiceDead && mHasPrinterDiscoverySession) {
+ if (mServiceDied && mHasPrinterDiscoverySession) {
handleCreatePrinterDiscoverySession();
}
// If the service died and there is discovery started, restart it.
- if (mServiceDead && mDiscoveryPriorityList != null) {
+ if (mServiceDied && mDiscoveryPriorityList != null) {
handleStartPrinterDiscovery(mDiscoveryPriorityList);
}
// If the service died and printers were tracked, start tracking.
- if (mServiceDead && mTrackedPrinterList != null) {
+ if (mServiceDied && mTrackedPrinterList != null) {
final int trackedPrinterCount = mTrackedPrinterList.size();
for (int i = 0; i < trackedPrinterCount; i++) {
handleStartPrinterStateTracking(mTrackedPrinterList.get(i));
@@ -581,7 +580,7 @@ final class RemotePrintService implements DeathRecipient {
if (!mHasPrinterDiscoverySession && !mHasActivePrintJobs) {
ensureUnbound();
}
- mServiceDead = false;
+ mServiceDied = false;
}
@Override
diff --git a/services/java/com/android/server/print/UserState.java b/services/java/com/android/server/print/UserState.java
index fd4a3a48dbd8..8c2182732cea 100644
--- a/services/java/com/android/server/print/UserState.java
+++ b/services/java/com/android/server/print/UserState.java
@@ -1007,12 +1007,25 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks {
mHandler.obtainMessage(
SessionHandler.MSG_CREATE_PRINTER_DISCOVERY_SESSION,
service).sendToTarget();
- // If there are some observers that started discovery - tell the service.
- if (mDiscoveryObservers.getRegisteredCallbackCount() > 0) {
+ // Start printer discovery if necessary.
+ if (!mStartedPrinterDiscoveryTokens.isEmpty()) {
mHandler.obtainMessage(
SessionHandler.MSG_START_PRINTER_DISCOVERY,
service).sendToTarget();
}
+ // Start tracking printers if necessary
+ final int trackedPrinterCount = mStateTrackedPrinters.size();
+ for (int i = 0; i < trackedPrinterCount; i++) {
+ PrinterId printerId = mStateTrackedPrinters.get(i);
+ if (printerId.getServiceName().equals(service.getComponentName())) {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = service;
+ args.arg2 = printerId;
+ mHandler.obtainMessage(SessionHandler
+ .MSG_START_PRINTER_STATE_TRACKING, args)
+ .sendToTarget();
+ }
+ }
}
public void dump(PrintWriter pw, String prefix) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index e4f5c7c65efe..e330f8b91916 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -158,7 +158,7 @@ public class WindowManagerService extends IWindowManager.Stub
DisplayManagerService.WindowManagerFuncs, DisplayManager.DisplayListener {
static final String TAG = "WindowManager";
static final boolean DEBUG = false;
- static final boolean DEBUG_ADD_REMOVE = true;
+ static final boolean DEBUG_ADD_REMOVE = false;
static final boolean DEBUG_FOCUS = false;
static final boolean DEBUG_FOCUS_LIGHT = DEBUG_FOCUS || false;
static final boolean DEBUG_ANIM = false;
@@ -416,6 +416,7 @@ public class WindowManagerService extends IWindowManager.Stub
int mFocusedStackLayer;
final float[] mTmpFloats = new float[9];
+ final Rect mTmpContentRect = new Rect();
boolean mDisplayReady;
boolean mSafeMode;
@@ -8172,9 +8173,8 @@ public class WindowManagerService extends IWindowManager.Stub
mScreenRect.set(0, 0, dw, dh);
}
- Rect contentRect = new Rect();
- mPolicy.getContentRectLw(contentRect);
- displayContent.setStackBoxSize(contentRect);
+ mPolicy.getContentRectLw(mTmpContentRect);
+ displayContent.setStackBoxSize(mTmpContentRect);
int seq = mLayoutSeq+1;
if (seq < 0) seq = 0;
@@ -9770,21 +9770,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
private WindowState findFocusedWindowLocked(DisplayContent displayContent) {
- // Set nextApp to the first app and set taskNdx and tokenNdx to point to the app following.
- final ArrayList<Task> tasks = displayContent.getTasks();
- int taskNdx = tasks.size() - 1;
- AppTokenList tokens = taskNdx >= 0 ? tasks.get(taskNdx).mAppTokens : null;
- int tokenNdx = tokens != null ? tokens.size() - 1 : -1;
- WindowToken nextApp = tokenNdx >= 0 ? tokens.get(tokenNdx) : null;
- --tokenNdx;
- if (tokenNdx < 0) {
- --taskNdx;
- if (taskNdx >= 0) {
- tokens = tasks.get(taskNdx).mAppTokens;
- tokenNdx = tokens.size() - 1;
- }
- }
-
final WindowList windows = displayContent.getWindowList();
for (int i = windows.size() - 1; i >= 0; i--) {
final WindowState win = windows.get(i);
@@ -9795,59 +9780,51 @@ public class WindowManagerService extends IWindowManager.Stub
+ ", flags=" + win.mAttrs.flags
+ ", canReceive=" + win.canReceiveKeys());
- AppWindowToken thisApp = win.mAppToken;
+ AppWindowToken wtoken = win.mAppToken;
// If this window's application has been removed, just skip it.
- if (thisApp != null && (thisApp.removed || thisApp.sendingToBottom)) {
- if (DEBUG_FOCUS) Slog.v(TAG, "Skipping " + thisApp + " because "
- + (thisApp.removed ? "removed" : "sendingToBottom"));
+ if (wtoken != null && (wtoken.removed || wtoken.sendingToBottom)) {
+ if (DEBUG_FOCUS) Slog.v(TAG, "Skipping " + wtoken + " because "
+ + (wtoken.removed ? "removed" : "sendingToBottom"));
continue;
}
- // If there is a focused app, don't allow focus to go to any
- // windows below it. If this is an application window, step
- // through the app tokens until we find its app.
- if (thisApp != null && nextApp != null && thisApp != nextApp
- && win.mAttrs.type != TYPE_APPLICATION_STARTING) {
- final WindowToken origAppToken = nextApp;
- final int origTaskNdx = taskNdx;
- final int origTokenNdx = tokenNdx;
- for ( ; taskNdx >= 0; --taskNdx) {
- tokens = tasks.get(taskNdx).mAppTokens;
+ if (!win.canReceiveKeys()) {
+ continue;
+ }
+
+ // Descend through all of the app tokens and find the first that either matches
+ // win.mAppToken (return win) or mFocusedApp (return null).
+ if (wtoken != null && win.mAttrs.type != TYPE_APPLICATION_STARTING &&
+ mFocusedApp != null) {
+ ArrayList<Task> tasks = displayContent.getTasks();
+ for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) {
+ AppTokenList tokens = tasks.get(taskNdx).mAppTokens;
+ int tokenNdx = tokens.size() - 1;
for ( ; tokenNdx >= 0; --tokenNdx) {
- if (nextApp == mFocusedApp) {
+ final AppWindowToken token = tokens.get(tokenNdx);
+ if (wtoken == token) {
+ break;
+ }
+ if (mFocusedApp == token) {
// Whoops, we are below the focused app... no focus for you!
- if (localLOGV || DEBUG_FOCUS) Slog.v(
- TAG, "findFocusedWindow: Reached focused app=" + mFocusedApp);
+ if (localLOGV || DEBUG_FOCUS_LIGHT) Slog.v(TAG,
+ "findFocusedWindow: Reached focused app=" + mFocusedApp);
return null;
}
- nextApp = tokens.get(tokenNdx);
- if (nextApp == thisApp) {
- break;
- }
}
- if (thisApp == nextApp) {
+ if (tokenNdx >= 0) {
+ // Early exit from loop, must have found the matching token.
break;
}
}
- if (thisApp != nextApp) {
- // Uh oh, the app token doesn't exist! This shouldn't
- // happen, but if it does we can get totally hosed...
- // so restart at the original app.
- nextApp = origAppToken;
- // return indices to same place.
- taskNdx = origTaskNdx;
- tokenNdx = origTokenNdx;
- }
}
- // Dispatch to this window if it is wants key events.
- if (win.canReceiveKeys()) {
- if (DEBUG_FOCUS_LIGHT) Slog.v(
- TAG, "findFocusedWindow: Found new focus @ " + i + " = " + win);
- return win;
- }
+ if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "findFocusedWindow: Found new focus @ " + i +
+ " = " + win);
+ return win;
}
+
if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "findFocusedWindow: No focusable windows.");
return null;
}