From eadbfc564d84aaf1d800da3d0d6edf6312f89648 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Wed, 4 Sep 2013 00:45:37 +0200 Subject: Move wallpapers to external activity Also renaming Launcher's ApplicationInfo to AppInfo since ApplicationInfo is already a framework class Change-Id: Ib3e91d2ba4ace458d790a26c0ce850870fd3f146 --- src/com/android/launcher3/AllAppsList.java | 38 +++--- src/com/android/launcher3/AppInfo.java | 151 ++++++++++++++++++++ src/com/android/launcher3/ApplicationInfo.java | 152 --------------------- .../android/launcher3/AppsCustomizePagedView.java | 30 ++-- src/com/android/launcher3/DeleteDropTarget.java | 8 +- src/com/android/launcher3/DragController.java | 4 +- src/com/android/launcher3/Folder.java | 4 +- src/com/android/launcher3/FolderIcon.java | 4 +- src/com/android/launcher3/Hotseat.java | 8 +- src/com/android/launcher3/IconCache.java | 2 +- src/com/android/launcher3/InfoDropTarget.java | 4 +- src/com/android/launcher3/Launcher.java | 19 +-- src/com/android/launcher3/LauncherModel.java | 58 ++++---- src/com/android/launcher3/PagedViewIcon.java | 2 +- src/com/android/launcher3/PagedViewIconCache.java | 6 +- src/com/android/launcher3/ShortcutInfo.java | 6 +- .../android/launcher3/WallpaperCropActivity.java | 11 +- .../android/launcher3/WallpaperPickerActivity.java | 50 ++++--- src/com/android/launcher3/Workspace.java | 12 +- src/com/android/photos/BitmapRegionTileSource.java | 21 +-- 20 files changed, 306 insertions(+), 284 deletions(-) create mode 100644 src/com/android/launcher3/AppInfo.java delete mode 100644 src/com/android/launcher3/ApplicationInfo.java (limited to 'src/com') diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java index 4d66eb3b0..5d3aa3ab7 100644 --- a/src/com/android/launcher3/AllAppsList.java +++ b/src/com/android/launcher3/AllAppsList.java @@ -34,15 +34,15 @@ class AllAppsList { public static final int DEFAULT_APPLICATIONS_NUMBER = 42; /** The list off all apps. */ - public ArrayList data = - new ArrayList(DEFAULT_APPLICATIONS_NUMBER); + public ArrayList data = + new ArrayList(DEFAULT_APPLICATIONS_NUMBER); /** The list of apps that have been added since the last notify() call. */ - public ArrayList added = - new ArrayList(DEFAULT_APPLICATIONS_NUMBER); + public ArrayList added = + new ArrayList(DEFAULT_APPLICATIONS_NUMBER); /** The list of apps that have been removed since the last notify() call. */ - public ArrayList removed = new ArrayList(); + public ArrayList removed = new ArrayList(); /** The list of apps that have been modified since the last notify() call. */ - public ArrayList modified = new ArrayList(); + public ArrayList modified = new ArrayList(); private IconCache mIconCache; @@ -59,7 +59,7 @@ class AllAppsList { * * If the app is already in the list, doesn't add it. */ - public void add(ApplicationInfo info) { + public void add(AppInfo info) { if (findActivity(data, info.componentName)) { return; } @@ -79,7 +79,7 @@ class AllAppsList { return data.size(); } - public ApplicationInfo get(int index) { + public AppInfo get(int index) { return data.get(index); } @@ -91,7 +91,7 @@ class AllAppsList { if (matches.size() > 0) { for (ResolveInfo info : matches) { - add(new ApplicationInfo(context.getPackageManager(), info, mIconCache, null)); + add(new AppInfo(context.getPackageManager(), info, mIconCache, null)); } } } @@ -100,9 +100,9 @@ class AllAppsList { * Remove the apps for the given apk identified by packageName. */ public void removePackage(String packageName) { - final List data = this.data; + final List data = this.data; for (int i = data.size() - 1; i >= 0; i--) { - ApplicationInfo info = data.get(i); + AppInfo info = data.get(i); final ComponentName component = info.intent.getComponent(); if (packageName.equals(component.getPackageName())) { removed.add(info); @@ -122,7 +122,7 @@ class AllAppsList { // Find disabled/removed activities and remove them from data and add them // to the removed list. for (int i = data.size() - 1; i >= 0; i--) { - final ApplicationInfo applicationInfo = data.get(i); + final AppInfo applicationInfo = data.get(i); final ComponentName component = applicationInfo.intent.getComponent(); if (packageName.equals(component.getPackageName())) { if (!findActivity(matches, component)) { @@ -138,11 +138,11 @@ class AllAppsList { int count = matches.size(); for (int i = 0; i < count; i++) { final ResolveInfo info = matches.get(i); - ApplicationInfo applicationInfo = findApplicationInfoLocked( + AppInfo applicationInfo = findApplicationInfoLocked( info.activityInfo.applicationInfo.packageName, info.activityInfo.name); if (applicationInfo == null) { - add(new ApplicationInfo(context.getPackageManager(), info, mIconCache, null)); + add(new AppInfo(context.getPackageManager(), info, mIconCache, null)); } else { mIconCache.remove(applicationInfo.componentName); mIconCache.getTitleAndIcon(applicationInfo, info, null); @@ -152,7 +152,7 @@ class AllAppsList { } else { // Remove all data for this package. for (int i = data.size() - 1; i >= 0; i--) { - final ApplicationInfo applicationInfo = data.get(i); + final AppInfo applicationInfo = data.get(i); final ComponentName component = applicationInfo.intent.getComponent(); if (packageName.equals(component.getPackageName())) { removed.add(applicationInfo); @@ -194,10 +194,10 @@ class AllAppsList { /** * Returns whether apps contains component. */ - private static boolean findActivity(ArrayList apps, ComponentName component) { + private static boolean findActivity(ArrayList apps, ComponentName component) { final int N = apps.size(); for (int i=0; i labelCache) { + final String packageName = info.activityInfo.applicationInfo.packageName; + + this.componentName = new ComponentName(packageName, info.activityInfo.name); + this.container = ItemInfo.NO_ID; + this.setActivity(componentName, + Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + + try { + PackageInfo pi = pm.getPackageInfo(packageName, 0); + flags = initFlags(pi); + firstInstallTime = initFirstInstallTime(pi); + } catch (NameNotFoundException e) { + Log.d(TAG, "PackageManager.getApplicationInfo failed for " + packageName); + } + + iconCache.getTitleAndIcon(this, info, labelCache); + } + + public static int initFlags(PackageInfo pi) { + int appFlags = pi.applicationInfo.flags; + int flags = 0; + if ((appFlags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) { + flags |= DOWNLOADED_FLAG; + + if ((appFlags & android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { + flags |= UPDATED_SYSTEM_APP_FLAG; + } + } + return flags; + } + + public static long initFirstInstallTime(PackageInfo pi) { + return pi.firstInstallTime; + } + + public AppInfo(AppInfo info) { + super(info); + componentName = info.componentName; + title = info.title.toString(); + intent = new Intent(info.intent); + flags = info.flags; + firstInstallTime = info.firstInstallTime; + } + + /** + * Creates the application intent based on a component name and various launch flags. + * Sets {@link #itemType} to {@link LauncherSettings.BaseLauncherColumns#ITEM_TYPE_APPLICATION}. + * + * @param className the class name of the component representing the intent + * @param launchFlags the launch flags + */ + final void setActivity(ComponentName className, int launchFlags) { + intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setComponent(className); + intent.setFlags(launchFlags); + itemType = LauncherSettings.BaseLauncherColumns.ITEM_TYPE_APPLICATION; + } + + @Override + public String toString() { + return "ApplicationInfo(title=" + title.toString() + " id=" + this.id + + " type=" + this.itemType + " container=" + this.container + + " screen=" + screenId + " cellX=" + cellX + " cellY=" + cellY + + " spanX=" + spanX + " spanY=" + spanY + " dropPos=" + dropPos + ")"; + } + + public static void dumpApplicationInfoList(String tag, String label, ArrayList list) { + Log.d(tag, label + " size=" + list.size()); + for (AppInfo info: list) { + Log.d(tag, " title=\"" + info.title + "\" iconBitmap=" + + info.iconBitmap + " firstInstallTime=" + + info.firstInstallTime); + } + } + + public ShortcutInfo makeShortcut() { + return new ShortcutInfo(this); + } +} diff --git a/src/com/android/launcher3/ApplicationInfo.java b/src/com/android/launcher3/ApplicationInfo.java deleted file mode 100644 index 1b396f752..000000000 --- a/src/com/android/launcher3/ApplicationInfo.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2008 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. - */ - -package com.android.launcher3; - -import android.content.ComponentName; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.PackageInfo; -import android.content.pm.ResolveInfo; -import android.graphics.Bitmap; -import android.util.Log; - -import java.util.ArrayList; -import java.util.HashMap; - -/** - * Represents an app in AllAppsView. - */ -class ApplicationInfo extends ItemInfo { - private static final String TAG = "Launcher2.ApplicationInfo"; - - /** - * The intent used to start the application. - */ - Intent intent; - - /** - * A bitmap version of the application icon. - */ - Bitmap iconBitmap; - - /** - * The time at which the app was first installed. - */ - long firstInstallTime; - - ComponentName componentName; - - static final int DOWNLOADED_FLAG = 1; - static final int UPDATED_SYSTEM_APP_FLAG = 2; - - int flags = 0; - - ApplicationInfo() { - itemType = LauncherSettings.BaseLauncherColumns.ITEM_TYPE_SHORTCUT; - } - - protected Intent getIntent() { - return intent; - } - - /** - * Must not hold the Context. - */ - public ApplicationInfo(PackageManager pm, ResolveInfo info, IconCache iconCache, - HashMap labelCache) { - final String packageName = info.activityInfo.applicationInfo.packageName; - - this.componentName = new ComponentName(packageName, info.activityInfo.name); - this.container = ItemInfo.NO_ID; - this.setActivity(componentName, - Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - - try { - PackageInfo pi = pm.getPackageInfo(packageName, 0); - flags = initFlags(pi); - firstInstallTime = initFirstInstallTime(pi); - } catch (NameNotFoundException e) { - Log.d(TAG, "PackageManager.getApplicationInfo failed for " + packageName); - } - - iconCache.getTitleAndIcon(this, info, labelCache); - } - - public static int initFlags(PackageInfo pi) { - int appFlags = pi.applicationInfo.flags; - int flags = 0; - if ((appFlags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) { - flags |= DOWNLOADED_FLAG; - - if ((appFlags & android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { - flags |= UPDATED_SYSTEM_APP_FLAG; - } - } - return flags; - } - - public static long initFirstInstallTime(PackageInfo pi) { - return pi.firstInstallTime; - } - - public ApplicationInfo(ApplicationInfo info) { - super(info); - componentName = info.componentName; - title = info.title.toString(); - intent = new Intent(info.intent); - flags = info.flags; - firstInstallTime = info.firstInstallTime; - } - - /** - * Creates the application intent based on a component name and various launch flags. - * Sets {@link #itemType} to {@link LauncherSettings.BaseLauncherColumns#ITEM_TYPE_APPLICATION}. - * - * @param className the class name of the component representing the intent - * @param launchFlags the launch flags - */ - final void setActivity(ComponentName className, int launchFlags) { - intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setComponent(className); - intent.setFlags(launchFlags); - itemType = LauncherSettings.BaseLauncherColumns.ITEM_TYPE_APPLICATION; - } - - @Override - public String toString() { - return "ApplicationInfo(title=" + title.toString() + " id=" + this.id - + " type=" + this.itemType + " container=" + this.container - + " screen=" + screenId + " cellX=" + cellX + " cellY=" + cellY - + " spanX=" + spanX + " spanY=" + spanY + " dropPos=" + dropPos + ")"; - } - - public static void dumpApplicationInfoList(String tag, String label, - ArrayList list) { - Log.d(tag, label + " size=" + list.size()); - for (ApplicationInfo info: list) { - Log.d(tag, " title=\"" + info.title + "\" iconBitmap=" - + info.iconBitmap + " firstInstallTime=" - + info.firstInstallTime); - } - } - - public ShortcutInfo makeShortcut() { - return new ShortcutInfo(this); - } -} diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 09a57120a..34fec46bf 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -168,7 +168,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen private PagedViewIcon mPressedIcon; // Content - private ArrayList mApps; + private ArrayList mApps; private ArrayList mWidgets; // Cling @@ -247,7 +247,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen super(context, attrs); mLayoutInflater = LayoutInflater.from(context); mPackageManager = context.getPackageManager(); - mApps = new ArrayList(); + mApps = new ArrayList(); mWidgets = new ArrayList(); mIconCache = (LauncherAppState.getInstance()).getIconCache(); mCanvas = new Canvas(); @@ -498,7 +498,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen if (v instanceof PagedViewIcon) { // Animate some feedback to the click - final ApplicationInfo appInfo = (ApplicationInfo) v.getTag(); + final AppInfo appInfo = (AppInfo) v.getTag(); // Lock the drawable state to pressed until we return to Launcher if (mPressedIcon != null) { @@ -1025,7 +1025,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen ArrayList items = new ArrayList(); ArrayList images = new ArrayList(); for (int i = startIndex; i < endIndex; ++i) { - ApplicationInfo info = mApps.get(i); + AppInfo info = mApps.get(i); PagedViewIcon icon = (PagedViewIcon) mLayoutInflater.inflate( R.layout.apps_customize_application, layout, false); icon.applyFromApplicationInfo(info, true, this); @@ -1541,59 +1541,59 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } - public void setApps(ArrayList list) { + public void setApps(ArrayList list) { if (!DISABLE_ALL_APPS) { mApps = list; Collections.sort(mApps, LauncherModel.getAppNameComparator()); updatePageCountsAndInvalidateData(); } } - private void addAppsWithoutInvalidate(ArrayList list) { + private void addAppsWithoutInvalidate(ArrayList list) { // We add it in place, in alphabetical order int count = list.size(); for (int i = 0; i < count; ++i) { - ApplicationInfo info = list.get(i); + AppInfo info = list.get(i); int index = Collections.binarySearch(mApps, info, LauncherModel.getAppNameComparator()); if (index < 0) { mApps.add(-(index + 1), info); } } } - public void addApps(ArrayList list) { + public void addApps(ArrayList list) { if (!DISABLE_ALL_APPS) { addAppsWithoutInvalidate(list); updatePageCountsAndInvalidateData(); } } - private int findAppByComponent(List list, ApplicationInfo item) { + private int findAppByComponent(List list, AppInfo item) { ComponentName removeComponent = item.intent.getComponent(); int length = list.size(); for (int i = 0; i < length; ++i) { - ApplicationInfo info = list.get(i); + AppInfo info = list.get(i); if (info.intent.getComponent().equals(removeComponent)) { return i; } } return -1; } - private void removeAppsWithoutInvalidate(ArrayList list) { + private void removeAppsWithoutInvalidate(ArrayList list) { // loop through all the apps and remove apps that have the same component int length = list.size(); for (int i = 0; i < length; ++i) { - ApplicationInfo info = list.get(i); + AppInfo info = list.get(i); int removeIndex = findAppByComponent(mApps, info); if (removeIndex > -1) { mApps.remove(removeIndex); } } } - public void removeApps(ArrayList appInfos) { + public void removeApps(ArrayList appInfos) { if (!DISABLE_ALL_APPS) { removeAppsWithoutInvalidate(appInfos); updatePageCountsAndInvalidateData(); } } - public void updateApps(ArrayList list) { + public void updateApps(ArrayList list) { // We remove and re-add the updated applications list because it's properties may have // changed (ie. the title), and this will ensure that the items will be in their proper // place in the list. @@ -1627,7 +1627,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen public void dumpState() { // TODO: Dump information related to current list of Applications, Widgets, etc. - ApplicationInfo.dumpApplicationInfoList(TAG, "mApps", mApps); + AppInfo.dumpApplicationInfoList(TAG, "mApps", mApps); dumpAppWidgetProviderInfoList(TAG, "mWidgets", mWidgets); } diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 01edb9eb6..09fad8378 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -96,7 +96,7 @@ public class DeleteDropTarget extends ButtonDropTarget { } private boolean isAllAppsApplication(DragSource source, Object info) { - return (source instanceof AppsCustomizePagedView) && (info instanceof ApplicationInfo); + return (source instanceof AppsCustomizePagedView) && (info instanceof AppInfo); } private boolean isAllAppsWidget(DragSource source, Object info) { if (source instanceof AppsCustomizePagedView) { @@ -149,7 +149,7 @@ public class DeleteDropTarget extends ButtonDropTarget { item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && item instanceof ShortcutInfo) { ShortcutInfo shortcutInfo = (ShortcutInfo) info; - return (shortcutInfo.flags & ApplicationInfo.DOWNLOADED_FLAG) != 0; + return (shortcutInfo.flags & AppInfo.DOWNLOADED_FLAG) != 0; } } return false; @@ -259,14 +259,14 @@ public class DeleteDropTarget extends ButtonDropTarget { mWaitingForUninstall = false; if (isAllAppsApplication(d.dragSource, item)) { // Uninstall the application if it is being dragged from AppsCustomize - ApplicationInfo appInfo = (ApplicationInfo) item; + AppInfo appInfo = (AppInfo) item; mLauncher.startApplicationUninstallActivity(appInfo.componentName, appInfo.flags); } else if (AppsCustomizePagedView.DISABLE_ALL_APPS && isWorkspaceOrFolderApplication(d)) { ShortcutInfo shortcut = (ShortcutInfo) item; if (shortcut.intent != null && shortcut.intent.getComponent() != null) { final ComponentName componentName = shortcut.intent.getComponent(); final DragSource dragSource = d.dragSource; - int flags = ApplicationInfo.initFlags( + int flags = AppInfo.initFlags( ShortcutInfo.getPackageInfo(getContext(), componentName.getPackageName())); mWaitingForUninstall = mLauncher.startApplicationUninstallActivity(componentName, flags); diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java index 07b25281b..f51366f86 100644 --- a/src/com/android/launcher3/DragController.java +++ b/src/com/android/launcher3/DragController.java @@ -327,13 +327,13 @@ public class DragController { } endDrag(); } - public void onAppsRemoved(ArrayList appInfos, Context context) { + public void onAppsRemoved(ArrayList appInfos, Context context) { // Cancel the current drag if we are removing an app that we are dragging if (mDragObject != null) { Object rawDragInfo = mDragObject.dragInfo; if (rawDragInfo instanceof ShortcutInfo) { ShortcutInfo dragInfo = (ShortcutInfo) rawDragInfo; - for (ApplicationInfo info : appInfos) { + for (AppInfo info : appInfos) { // Added null checks to prevent NPE we've seen in the wild if (dragInfo != null && dragInfo.intent != null) { diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index f57ff07a9..4b938d414 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1090,9 +1090,9 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList public void onDrop(DragObject d) { ShortcutInfo item; - if (d.dragInfo instanceof ApplicationInfo) { + if (d.dragInfo instanceof AppInfo) { // Came from all apps -- make a copy - item = ((ApplicationInfo) d.dragInfo).makeShortcut(); + item = ((AppInfo) d.dragInfo).makeShortcut(); item.spanX = 1; item.spanY = 1; } else { diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java index fd8337021..c00c9f850 100644 --- a/src/com/android/launcher3/FolderIcon.java +++ b/src/com/android/launcher3/FolderIcon.java @@ -429,9 +429,9 @@ public class FolderIcon extends LinearLayout implements FolderListener { public void onDrop(DragObject d) { ShortcutInfo item; - if (d.dragInfo instanceof ApplicationInfo) { + if (d.dragInfo instanceof AppInfo) { // Came from all apps -- make a copy - item = ((ApplicationInfo) d.dragInfo).makeShortcut(); + item = ((AppInfo) d.dragInfo).makeShortcut(); } else { item = (ShortcutInfo) d.dragInfo; } diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 2d3adf64d..ccdc56bc2 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -105,7 +105,7 @@ public class Hotseat extends FrameLayout { } void addAllAppsFolder(IconCache iconCache, - ArrayList allApps, ArrayList onWorkspace, + ArrayList allApps, ArrayList onWorkspace, Launcher launcher, Workspace workspace) { FolderInfo fi = new FolderInfo(); @@ -124,7 +124,7 @@ public class Hotseat extends FrameLayout { workspace.addInScreen(folder, fi.container, fi.screenId, fi.cellX, fi.cellY, fi.spanX, fi.spanY); - for (ApplicationInfo info: allApps) { + for (AppInfo info: allApps) { ComponentName cn = info.intent.getComponent(); if (!onWorkspace.contains(cn)) { Log.d(TAG, "Adding to 'more apps': " + info.intent); @@ -134,7 +134,7 @@ public class Hotseat extends FrameLayout { } } - void addAppsToAllAppsFolder(ArrayList apps) { + void addAppsToAllAppsFolder(ArrayList apps) { View v = mContent.getChildAt(getCellXFromOrder(mAllAppsButtonRank), getCellYFromOrder(mAllAppsButtonRank)); FolderIcon fi = null; @@ -145,7 +145,7 @@ public class Hotseat extends FrameLayout { } FolderInfo info = fi.getFolderInfo(); - for (ApplicationInfo a: apps) { + for (AppInfo a: apps) { ShortcutInfo si = a.makeShortcut(); info.add(si); } diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java index 6fc40e382..179782653 100644 --- a/src/com/android/launcher3/IconCache.java +++ b/src/com/android/launcher3/IconCache.java @@ -149,7 +149,7 @@ public class IconCache { /** * Fill in "application" with the icon and label for "info." */ - public void getTitleAndIcon(ApplicationInfo application, ResolveInfo info, + public void getTitleAndIcon(AppInfo application, ResolveInfo info, HashMap labelCache) { synchronized (mCache) { CacheEntry entry = cacheLocked(application.componentName, info, labelCache); diff --git a/src/com/android/launcher3/InfoDropTarget.java b/src/com/android/launcher3/InfoDropTarget.java index a643a0d81..2ad43b6ff 100644 --- a/src/com/android/launcher3/InfoDropTarget.java +++ b/src/com/android/launcher3/InfoDropTarget.java @@ -72,8 +72,8 @@ public class InfoDropTarget extends ButtonDropTarget { // in onDrop, because it allows us to reject the drop (by returning false) // so that the object being dragged isn't removed from the drag source. ComponentName componentName = null; - if (d.dragInfo instanceof ApplicationInfo) { - componentName = ((ApplicationInfo) d.dragInfo).componentName; + if (d.dragInfo instanceof AppInfo) { + componentName = ((AppInfo) d.dragInfo).componentName; } else if (d.dragInfo instanceof ShortcutInfo) { componentName = ((ShortcutInfo) d.dragInfo).intent.getComponent(); } else if (d.dragInfo instanceof PendingAddItemInfo) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 509560c74..81a962d0c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -113,8 +113,6 @@ import java.io.PrintWriter; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -2071,14 +2069,17 @@ public class Launcher extends Activity sFolders.remove(folder.id); } - private void startWallpaper() { + protected void startWallpaper() { showWorkspace(true); final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER); - pickWallpaper.setComponent( - new ComponentName(getPackageName(), WallpaperPickerActivity.class.getName())); + pickWallpaper.setComponent(getWallpaperPickerComponent()); startActivityForResult(pickWallpaper, REQUEST_PICK_WALLPAPER); } + protected ComponentName getWallpaperPickerComponent() { + return new ComponentName(getPackageName(), WallpaperPickerActivity.class.getName()); + } + /** * Registers various content observers. The current implementation registers * only a favorites observer to keep track of the favorites applications. @@ -2298,7 +2299,7 @@ public class Launcher extends Activity // returns true if the activity was started boolean startApplicationUninstallActivity(ComponentName componentName, int flags) { - if ((flags & ApplicationInfo.DOWNLOADED_FLAG) == 0) { + if ((flags & AppInfo.DOWNLOADED_FLAG) == 0) { // System applications cannot be installed. For now, show a toast explaining that. // We may give them the option of disabling apps this way. int messageId = R.string.uninstall_system_app_text; @@ -3873,7 +3874,7 @@ public class Launcher extends Activity * * Implementation of the method from LauncherModel.Callbacks. */ - public void bindAllApplications(final ArrayList apps) { + public void bindAllApplications(final ArrayList apps) { if (mIntentsOnWorkspaceFromUpgradePath != null) { if (LauncherModel.UPGRADE_USE_MORE_APPS_FOLDER) { getHotseat().addAllAppsFolder(mIconCache, apps, @@ -3888,7 +3889,7 @@ public class Launcher extends Activity * * Implementation of the method from LauncherModel.Callbacks. */ - public void bindAppsUpdated(final ArrayList apps) { + public void bindAppsUpdated(final ArrayList apps) { Runnable r = new Runnable() { public void run() { bindAppsUpdated(apps); @@ -3913,7 +3914,7 @@ public class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindComponentsRemoved(final ArrayList packageNames, - final ArrayList appInfos, + final ArrayList appInfos, final boolean packageRemoved) { Runnable r = new Runnable() { public void run() { diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 1c98522bc..fc3925a4f 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -156,13 +156,13 @@ public class LauncherModel extends BroadcastReceiver { public void bindFolders(HashMap folders); public void finishBindingItems(boolean upgradePath); public void bindAppWidget(LauncherAppWidgetInfo info); - public void bindAllApplications(ArrayList apps); + public void bindAllApplications(ArrayList apps); public void bindAppsAdded(ArrayList newScreens, ArrayList addNotAnimated, ArrayList addAnimated); - public void bindAppsUpdated(ArrayList apps); + public void bindAppsUpdated(ArrayList apps); public void bindComponentsRemoved(ArrayList packageNames, - ArrayList appInfos, + ArrayList appInfos, boolean matchPackageNamesOnly); public void bindPackagesUpdated(ArrayList widgetsAndShortcuts); public void bindSearchablesChanged(); @@ -347,8 +347,8 @@ public class LauncherModel extends BroadcastReceiver { ShortcutInfo shortcutInfo; if (a instanceof ShortcutInfo) { shortcutInfo = (ShortcutInfo) a; - } else if (a instanceof ApplicationInfo) { - shortcutInfo = ((ApplicationInfo) a).makeShortcut(); + } else if (a instanceof AppInfo) { + shortcutInfo = ((AppInfo) a).makeShortcut(); } else { throw new RuntimeException("Unexpected info type"); } @@ -1544,7 +1544,7 @@ public class LauncherModel extends BroadcastReceiver { ArrayList tmpInfos; ArrayList added = new ArrayList(); synchronized (sBgLock) { - for (ApplicationInfo app : mBgAllAppsList.data) { + for (AppInfo app : mBgAllAppsList.data) { tmpInfos = getItemInfoForComponentName(app.componentName); Launcher.addDumpLog(TAG, "10249126 - \t" + app.componentName.getPackageName() + ", " + tmpInfos.isEmpty(), true); if (tmpInfos.isEmpty()) { @@ -2397,8 +2397,8 @@ public class LauncherModel extends BroadcastReceiver { // shallow copy @SuppressWarnings("unchecked") - final ArrayList list - = (ArrayList) mBgAllAppsList.data.clone(); + final ArrayList list + = (ArrayList) mBgAllAppsList.data.clone(); Runnable r = new Runnable() { public void run() { final long t = SystemClock.uptimeMillis(); @@ -2463,13 +2463,13 @@ public class LauncherModel extends BroadcastReceiver { // Create the ApplicationInfos for (int i = 0; i < apps.size(); i++) { // This builds the icon bitmaps. - mBgAllAppsList.add(new ApplicationInfo(packageManager, apps.get(i), + mBgAllAppsList.add(new AppInfo(packageManager, apps.get(i), mIconCache, mLabelCache)); } final Callbacks callbacks = tryGetCallbacks(oldCallbacks); - final ArrayList added = mBgAllAppsList.added; - mBgAllAppsList.added = new ArrayList(); + final ArrayList added = mBgAllAppsList.added; + mBgAllAppsList.added = new ArrayList(); // Post callback on main thread mHandler.post(new Runnable() { @@ -2555,16 +2555,16 @@ public class LauncherModel extends BroadcastReceiver { break; } - ArrayList added = null; - ArrayList modified = null; - final ArrayList removedApps = new ArrayList(); + ArrayList added = null; + ArrayList modified = null; + final ArrayList removedApps = new ArrayList(); if (mBgAllAppsList.added.size() > 0) { - added = new ArrayList(mBgAllAppsList.added); + added = new ArrayList(mBgAllAppsList.added); mBgAllAppsList.added.clear(); } if (mBgAllAppsList.modified.size() > 0) { - modified = new ArrayList(mBgAllAppsList.modified); + modified = new ArrayList(mBgAllAppsList.modified); mBgAllAppsList.modified.clear(); } if (mBgAllAppsList.removed.size() > 0) { @@ -2585,10 +2585,10 @@ public class LauncherModel extends BroadcastReceiver { addAndBindAddedApps(context, addedInfos, cb); } if (modified != null) { - final ArrayList modifiedFinal = modified; + final ArrayList modifiedFinal = modified; // Update the launcher db to reflect the changes - for (ApplicationInfo a : modifiedFinal) { + for (AppInfo a : modifiedFinal) { ArrayList infos = getItemInfoForComponentName(a.componentName); for (ItemInfo i : infos) { @@ -2625,7 +2625,7 @@ public class LauncherModel extends BroadcastReceiver { } } } else { - for (ApplicationInfo a : removedApps) { + for (AppInfo a : removedApps) { ArrayList infos = getItemInfoForComponentName(a.componentName); for (ItemInfo i : infos) { @@ -3120,10 +3120,10 @@ public class LauncherModel extends BroadcastReceiver { return folderInfo; } - public static final Comparator getAppNameComparator() { + public static final Comparator getAppNameComparator() { final Collator collator = Collator.getInstance(); - return new Comparator() { - public final int compare(ApplicationInfo a, ApplicationInfo b) { + return new Comparator() { + public final int compare(AppInfo a, AppInfo b) { int result = collator.compare(a.title.toString(), b.title.toString()); if (result == 0) { result = a.componentName.compareTo(b.componentName); @@ -3132,9 +3132,9 @@ public class LauncherModel extends BroadcastReceiver { } }; } - public static final Comparator APP_INSTALL_TIME_COMPARATOR - = new Comparator() { - public final int compare(ApplicationInfo a, ApplicationInfo b) { + public static final Comparator APP_INSTALL_TIME_COMPARATOR + = new Comparator() { + public final int compare(AppInfo a, AppInfo b) { if (a.firstInstallTime < b.firstInstallTime) return 1; if (a.firstInstallTime > b.firstInstallTime) return -1; return 0; @@ -3223,10 +3223,10 @@ public class LauncherModel extends BroadcastReceiver { public void dumpState() { Log.d(TAG, "mCallbacks=" + mCallbacks); - ApplicationInfo.dumpApplicationInfoList(TAG, "mAllAppsList.data", mBgAllAppsList.data); - ApplicationInfo.dumpApplicationInfoList(TAG, "mAllAppsList.added", mBgAllAppsList.added); - ApplicationInfo.dumpApplicationInfoList(TAG, "mAllAppsList.removed", mBgAllAppsList.removed); - ApplicationInfo.dumpApplicationInfoList(TAG, "mAllAppsList.modified", mBgAllAppsList.modified); + AppInfo.dumpApplicationInfoList(TAG, "mAllAppsList.data", mBgAllAppsList.data); + AppInfo.dumpApplicationInfoList(TAG, "mAllAppsList.added", mBgAllAppsList.added); + AppInfo.dumpApplicationInfoList(TAG, "mAllAppsList.removed", mBgAllAppsList.removed); + AppInfo.dumpApplicationInfoList(TAG, "mAllAppsList.modified", mBgAllAppsList.modified); if (mLoaderTask != null) { mLoaderTask.dumpState(); } else { diff --git a/src/com/android/launcher3/PagedViewIcon.java b/src/com/android/launcher3/PagedViewIcon.java index 73f62d60e..501bc8f0b 100644 --- a/src/com/android/launcher3/PagedViewIcon.java +++ b/src/com/android/launcher3/PagedViewIcon.java @@ -52,7 +52,7 @@ public class PagedViewIcon extends TextView { super(context, attrs, defStyle); } - public void applyFromApplicationInfo(ApplicationInfo info, boolean scaleUp, + public void applyFromApplicationInfo(AppInfo info, boolean scaleUp, PagedViewIcon.PressedCallback cb) { mIcon = info.iconBitmap; mPressedCallback = cb; diff --git a/src/com/android/launcher3/PagedViewIconCache.java b/src/com/android/launcher3/PagedViewIconCache.java index 0d03b5a52..8d8924b7e 100644 --- a/src/com/android/launcher3/PagedViewIconCache.java +++ b/src/com/android/launcher3/PagedViewIconCache.java @@ -40,7 +40,7 @@ public class PagedViewIconCache { private final ComponentName mComponentName; private final Type mType; - public Key(ApplicationInfo info) { + public Key(AppInfo info) { mComponentName = info.componentName; mType = Type.ApplicationInfoKey; } @@ -95,9 +95,9 @@ public class PagedViewIconCache { } } /** Removes all the keys to applications that aren't in the passed in collection */ - public void retainAllApps(ArrayList keys) { + public void retainAllApps(ArrayList keys) { HashSet keysSet = new HashSet(); - for (ApplicationInfo info : keys) { + for (AppInfo info : keys) { keysSet.add(new Key(info)); } retainAll(keysSet, Key.Type.ApplicationInfoKey); diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index b4e564283..dafabb8d9 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -88,7 +88,7 @@ class ShortcutInfo extends ItemInfo { } /** TODO: Remove this. It's only called by ApplicationInfo.makeShortcut. */ - public ShortcutInfo(ApplicationInfo info) { + public ShortcutInfo(AppInfo info) { super(info); title = info.title.toString(); intent = new Intent(info.intent); @@ -109,8 +109,8 @@ class ShortcutInfo extends ItemInfo { } void initFlagsAndFirstInstallTime(PackageInfo pi) { - flags = ApplicationInfo.initFlags(pi); - firstInstallTime = ApplicationInfo.initFirstInstallTime(pi); + flags = AppInfo.initFlags(pi); + firstInstallTime = AppInfo.initFirstInstallTime(pi); } public void setIcon(Bitmap b) { diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/src/com/android/launcher3/WallpaperCropActivity.java index b08750683..3468f2fcf 100644 --- a/src/com/android/launcher3/WallpaperCropActivity.java +++ b/src/com/android/launcher3/WallpaperCropActivity.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.app.WallpaperManager; import android.content.Context; import android.content.SharedPreferences; +import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; @@ -73,8 +74,10 @@ public class WallpaperCropActivity extends Activity { boolean mSaveCroppedBitmap; Bitmap mCroppedBitmap; Runnable mOnEndRunnable; + Resources mResources; - public BitmapCropTask(Uri inUri, RectF cropBounds, int outWidth, int outHeight, + public BitmapCropTask(Uri inUri, + RectF cropBounds, int outWidth, int outHeight, boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { mInUri = inUri; mCropBounds = cropBounds; @@ -86,7 +89,8 @@ public class WallpaperCropActivity extends Activity { mOnEndRunnable = onEndRunnable; } - public BitmapCropTask(int inResId, RectF cropBounds, int outWidth, int outHeight, + public BitmapCropTask(Resources res, int inResId, + RectF cropBounds, int outWidth, int outHeight, boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { mInResId = inResId; mCropBounds = cropBounds; @@ -96,6 +100,7 @@ public class WallpaperCropActivity extends Activity { mSetWallpaper = setWallpaper; mSaveCroppedBitmap = saveCroppedBitmap; mOnEndRunnable = onEndRunnable; + mResources = res; } // Helper to setup input stream @@ -110,7 +115,7 @@ public class WallpaperCropActivity extends Activity { getContentResolver().openInputStream(mInUri)); } else { mInStream = new BufferedInputStream( - getResources().openRawResource(mInResId)); + mResources.openRawResource(mInResId)); } } catch (FileNotFoundException e) { Log.w(LOGTAG, "cannot read file: " + mInUri.toString(), e); diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/src/com/android/launcher3/WallpaperPickerActivity.java index 536775ace..8f323e809 100644 --- a/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/src/com/android/launcher3/WallpaperPickerActivity.java @@ -23,6 +23,7 @@ import android.content.ComponentName; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; @@ -34,6 +35,7 @@ import android.graphics.drawable.LevelListDrawable; import android.net.Uri; import android.os.Bundle; import android.util.Log; +import android.util.Pair; import android.view.Display; import android.view.LayoutInflater; import android.view.Menu; @@ -63,8 +65,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { private static final int PICK_WALLPAPER_THIRD_PARTY_ACTIVITY = 6; private static final float WALLPAPER_SCREENS_SPAN = 2f; - private ArrayList mThumbs; + private ArrayList mThumbs; private ArrayList mImages; + private Resources mWallpaperResources; private View mSelectedThumb; private CropView mCropView; @@ -98,7 +101,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { meta.mGalleryImageUri, 1024, 0), null); mCropView.setTouchEnabled(true); } else { - BitmapRegionTileSource source = new BitmapRegionTileSource( + BitmapRegionTileSource source = new BitmapRegionTileSource(mWallpaperResources, WallpaperPickerActivity.this, meta.mWallpaperResId, 1024, 0); mCropView.setTileSource(source, null); Point wallpaperSize = getDefaultWallpaperSize(getResources(), getWindowManager()); @@ -311,8 +314,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { updateWallpaperDimensions(0, 0); } }; - BitmapCropTask cropTask = new BitmapCropTask(meta.mWallpaperResId, - crop, outSize.x, outSize.y, + BitmapCropTask cropTask = new BitmapCropTask(mWallpaperResources, + meta.mWallpaperResId, crop, outSize.x, outSize.y, true, false, onEndCrop); cropTask.execute(); setResult(Activity.RESULT_OK); @@ -389,22 +392,35 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } private void findWallpapers() { - mThumbs = new ArrayList(24); + mThumbs = new ArrayList(24); mImages = new ArrayList(24); - final Resources resources = getResources(); + Pair r = getWallpaperArrayResourceId(); + if (r != null) { + try { + mWallpaperResources = getPackageManager().getResourcesForApplication(r.first); + addWallpapers(mWallpaperResources, r.first.packageName, r.second); + } catch (PackageManager.NameNotFoundException e) { + } + } + } + + public Pair getWallpaperArrayResourceId() { // Context.getPackageName() may return the "original" package name, // com.android.launcher3; Resources needs the real package name, // com.android.launcher3. So we ask Resources for what it thinks the // package name should be. - final String packageName = resources.getResourcePackageName(R.array.wallpapers); - - addWallpapers(resources, packageName, R.array.wallpapers); - addWallpapers(resources, packageName, R.array.extra_wallpapers); + final String packageName = getResources().getResourcePackageName(R.array.wallpapers); + try { + ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, 0); + return new Pair(info, R.array.wallpapers); + } catch (PackageManager.NameNotFoundException e) { + return null; + } } - private void addWallpapers(Resources resources, String packageName, int list) { - final String[] extras = resources.getStringArray(list); + private void addWallpapers(Resources resources, String packageName, int listResId) { + final String[] extras = resources.getStringArray(listResId); for (String extra : extras) { int res = resources.getIdentifier(extra, "drawable", packageName); if (res != 0) { @@ -412,7 +428,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { "drawable", packageName); if (thumbRes != 0) { - mThumbs.add(thumbRes); + mThumbs.add(resources.getDrawable(thumbRes)); mImages.add(res); // Log.d(TAG, "add: [" + packageName + "]: " + extra + " (" + res + ")"); } @@ -537,14 +553,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { ImageView image = (ImageView) view.findViewById(R.id.wallpaper_image); - int thumbRes = mThumbs.get(position); - image.setImageResource(thumbRes); - Drawable thumbDrawable = image.getDrawable(); + Drawable thumbDrawable = mThumbs.get(position); if (thumbDrawable != null) { + image.setImageDrawable(thumbDrawable); thumbDrawable.setDither(true); } else { - Log.e(TAG, "Error decoding thumbnail resId=" + thumbRes + " for wallpaper #" - + position); + Log.e(TAG, "Error decoding thumbnail for wallpaper #" + position); } return view; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 339f0abe6..01a8adf77 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -3246,9 +3246,9 @@ public class Workspace extends SmoothPagedView switch (info.itemType) { case LauncherSettings.Favorites.ITEM_TYPE_APPLICATION: case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT: - if (info.container == NO_ID && info instanceof ApplicationInfo) { + if (info.container == NO_ID && info instanceof AppInfo) { // Came from all apps -- make a copy - info = new ShortcutInfo((ApplicationInfo) info); + info = new ShortcutInfo((AppInfo) info); } view = mLauncher.createShortcut(R.layout.application, cellLayout, (ShortcutInfo) info); @@ -3943,10 +3943,10 @@ public class Workspace extends SmoothPagedView // Removes items that match the application info specified, when applications are removed // as a part of an update, this is called to ensure that other widgets and application // shortcuts are not removed. - void removeItemsByApplicationInfo(final ArrayList appInfos) { + void removeItemsByApplicationInfo(final ArrayList appInfos) { // Just create a hash table of all the specific components that this will affect HashSet cns = new HashSet(); - for (ApplicationInfo info : appInfos) { + for (AppInfo info : appInfos) { cns.add(info.componentName); } @@ -4024,7 +4024,7 @@ public class Workspace extends SmoothPagedView stripEmptyScreens(); } - void updateShortcuts(ArrayList apps) { + void updateShortcuts(ArrayList apps) { ArrayList childrenLayouts = getAllShortcutAndWidgetContainers(); for (ShortcutAndWidgetContainer layout: childrenLayouts) { int childCount = layout.getChildCount(); @@ -4039,7 +4039,7 @@ public class Workspace extends SmoothPagedView final ComponentName name = intent.getComponent(); final int appCount = apps.size(); for (int k = 0; k < appCount; k++) { - ApplicationInfo app = apps.get(k); + AppInfo app = apps.get(k); if (app.componentName.equals(name)) { BubbleTextView shortcut = (BubbleTextView) view; info.updateIcon(mIconCache); diff --git a/src/com/android/photos/BitmapRegionTileSource.java b/src/com/android/photos/BitmapRegionTileSource.java index 964748523..5f6401868 100644 --- a/src/com/android/photos/BitmapRegionTileSource.java +++ b/src/com/android/photos/BitmapRegionTileSource.java @@ -18,6 +18,7 @@ package com.android.photos; import android.annotation.TargetApi; import android.content.Context; +import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; @@ -68,18 +69,19 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { private Canvas mCanvas; public BitmapRegionTileSource(Context context, String path, int previewSize, int rotation) { - this(context, path, null, 0, previewSize, rotation); + this(null, context, path, null, 0, previewSize, rotation); } public BitmapRegionTileSource(Context context, Uri uri, int previewSize, int rotation) { - this(context, null, uri, 0, previewSize, rotation); + this(null, context, null, uri, 0, previewSize, rotation); } - public BitmapRegionTileSource(Context context, int resId, int previewSize, int rotation) { - this(context, null, null, resId, previewSize, rotation); + public BitmapRegionTileSource(Resources res, + Context context, int resId, int previewSize, int rotation) { + this(res, context, null, null, resId, previewSize, rotation); } - private BitmapRegionTileSource( + private BitmapRegionTileSource(Resources res, Context context, String path, Uri uri, int resId, int previewSize, int rotation) { mTileSize = TiledImageRenderer.suggestedTileSize(context); mRotation = rotation; @@ -91,7 +93,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { BufferedInputStream bis = new BufferedInputStream(is); mDecoder = BitmapRegionDecoder.newInstance(bis, true); } else { - InputStream is = context.getResources().openRawResource(resId); + InputStream is = res.openRawResource(resId); BufferedInputStream bis = new BufferedInputStream(is); mDecoder = BitmapRegionDecoder.newInstance(bis, true); } @@ -109,7 +111,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { // Although this is the same size as the Bitmap that is likely already // loaded, the lifecycle is different and interactions are on a different // thread. Thus to simplify, this source will decode its own bitmap. - Bitmap preview = decodePreview(context, path, uri, resId, previewSize); + Bitmap preview = decodePreview(res, context, path, uri, resId, previewSize); if (preview.getWidth() <= GL_SIZE_LIMIT && preview.getHeight() <= GL_SIZE_LIMIT) { mPreview = new BitmapTexture(preview); } else { @@ -213,7 +215,8 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { * Note that the returned bitmap may have a long edge that's longer * than the targetSize, but it will always be less than 2x the targetSize */ - private Bitmap decodePreview(Context context, String file, Uri uri, int resId, int targetSize) { + private Bitmap decodePreview( + Resources res, Context context, String file, Uri uri, int resId, int targetSize) { float scale = (float) targetSize / Math.max(mWidth, mHeight); mOptions.inSampleSize = BitmapUtils.computeSampleSizeLarger(scale); mOptions.inJustDecodeBounds = false; @@ -230,7 +233,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { Log.w("BitmapRegionTileSource", "getting preview failed", e); } } else { - result = BitmapFactory.decodeResource(context.getResources(), resId, mOptions); + result = BitmapFactory.decodeResource(res, resId, mOptions); } if (result == null) { return null; -- cgit v1.2.3