Merge "Load shared library dependencies for AppWidgets" into lmp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1a98dd5cc7
@ -80,6 +80,9 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
private final static boolean DEBUG = false;
|
||||
private final static boolean DEBUG_ICONS = false;
|
||||
|
||||
// Default flags to use with PackageManager when no flags are given.
|
||||
private final static int sDefaultFlags = PackageManager.GET_SHARED_LIBRARY_FILES;
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
@GuardedBy("mLock")
|
||||
@ -730,7 +733,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
}
|
||||
if (appInfo == null) {
|
||||
try {
|
||||
appInfo = getApplicationInfo(packageName, 0);
|
||||
appInfo = getApplicationInfo(packageName, sDefaultFlags);
|
||||
} catch (NameNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
@ -770,7 +773,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
|
||||
@Override public Drawable getActivityIcon(ComponentName activityName)
|
||||
throws NameNotFoundException {
|
||||
return getActivityInfo(activityName, 0).loadIcon(this);
|
||||
return getActivityInfo(activityName, sDefaultFlags).loadIcon(this);
|
||||
}
|
||||
|
||||
@Override public Drawable getActivityIcon(Intent intent)
|
||||
@ -799,13 +802,13 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
|
||||
@Override public Drawable getApplicationIcon(String packageName)
|
||||
throws NameNotFoundException {
|
||||
return getApplicationIcon(getApplicationInfo(packageName, 0));
|
||||
return getApplicationIcon(getApplicationInfo(packageName, sDefaultFlags));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable getActivityBanner(ComponentName activityName)
|
||||
throws NameNotFoundException {
|
||||
return getActivityInfo(activityName, 0).loadBanner(this);
|
||||
return getActivityInfo(activityName, sDefaultFlags).loadBanner(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -832,13 +835,13 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
@Override
|
||||
public Drawable getApplicationBanner(String packageName)
|
||||
throws NameNotFoundException {
|
||||
return getApplicationBanner(getApplicationInfo(packageName, 0));
|
||||
return getApplicationBanner(getApplicationInfo(packageName, sDefaultFlags));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable getActivityLogo(ComponentName activityName)
|
||||
throws NameNotFoundException {
|
||||
return getActivityInfo(activityName, 0).loadLogo(this);
|
||||
return getActivityInfo(activityName, sDefaultFlags).loadLogo(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -865,7 +868,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
@Override
|
||||
public Drawable getApplicationLogo(String packageName)
|
||||
throws NameNotFoundException {
|
||||
return getApplicationLogo(getApplicationInfo(packageName, 0));
|
||||
return getApplicationLogo(getApplicationInfo(packageName, sDefaultFlags));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -914,7 +917,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
@Override public Resources getResourcesForActivity(
|
||||
ComponentName activityName) throws NameNotFoundException {
|
||||
return getResourcesForApplication(
|
||||
getActivityInfo(activityName, 0).applicationInfo);
|
||||
getActivityInfo(activityName, sDefaultFlags).applicationInfo);
|
||||
}
|
||||
|
||||
@Override public Resources getResourcesForApplication(
|
||||
@ -926,7 +929,8 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
Resources r = mContext.mMainThread.getTopLevelResources(
|
||||
sameUid ? app.sourceDir : app.publicSourceDir,
|
||||
sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs,
|
||||
app.resourceDirs, null, Display.DEFAULT_DISPLAY, null, mContext.mPackageInfo);
|
||||
app.resourceDirs, app.sharedLibraryFiles, Display.DEFAULT_DISPLAY,
|
||||
null, mContext.mPackageInfo);
|
||||
if (r != null) {
|
||||
return r;
|
||||
}
|
||||
@ -936,7 +940,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
@Override public Resources getResourcesForApplication(
|
||||
String appPackageName) throws NameNotFoundException {
|
||||
return getResourcesForApplication(
|
||||
getApplicationInfo(appPackageName, 0));
|
||||
getApplicationInfo(appPackageName, sDefaultFlags));
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@ -951,7 +955,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
return mContext.mMainThread.getSystemContext().getResources();
|
||||
}
|
||||
try {
|
||||
ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, 0, userId);
|
||||
ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, sDefaultFlags, userId);
|
||||
if (ai != null) {
|
||||
return getResourcesForApplication(ai);
|
||||
}
|
||||
@ -1136,7 +1140,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
}
|
||||
if (appInfo == null) {
|
||||
try {
|
||||
appInfo = getApplicationInfo(packageName, 0);
|
||||
appInfo = getApplicationInfo(packageName, sDefaultFlags);
|
||||
} catch (NameNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
@ -1164,7 +1168,7 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
ApplicationInfo appInfo) {
|
||||
if (appInfo == null) {
|
||||
try {
|
||||
appInfo = getApplicationInfo(packageName, 0);
|
||||
appInfo = getApplicationInfo(packageName, sDefaultFlags);
|
||||
} catch (NameNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
|
@ -2207,9 +2207,15 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
|
||||
private List<ResolveInfo> queryIntentReceivers(Intent intent, int userId) {
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
int flags = PackageManager.GET_META_DATA;
|
||||
|
||||
// Widgets referencing shared libraries need to have their
|
||||
// dependencies loaded.
|
||||
flags |= PackageManager.GET_SHARED_LIBRARY_FILES;
|
||||
|
||||
return mPackageManager.queryIntentReceivers(intent,
|
||||
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
|
||||
PackageManager.GET_META_DATA, userId);
|
||||
flags, userId);
|
||||
} catch (RemoteException re) {
|
||||
return Collections.emptyList();
|
||||
} finally {
|
||||
|
@ -25,5 +25,13 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<receiver android:name="DependentAppwidgetProvider">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.appwidget.provider"
|
||||
android:resource="@xml/dependent_appwidget_info" />
|
||||
</receiver>
|
||||
</application>
|
||||
</manifest>
|
||||
|
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView android:id="@+id/label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@com.google.android.test.shared_library:string/shared_string"
|
||||
style="@com.google.android.test.shared_library:style/CodeFont"/>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@com.google.android.test.shared_library:drawable/size_48x48"/>
|
||||
</LinearLayout>
|
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 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.
|
||||
-->
|
||||
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:minWidth="40dp"
|
||||
android:minHeight="40dp"
|
||||
android:updatePeriodMillis="0"
|
||||
android:initialLayout="@layout/dependent_appwidget"
|
||||
android:resizeMode="horizontal|vertical" />
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) 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.
|
||||
*/
|
||||
|
||||
package com.google.android.test.lib_client;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
public class DependentAppwidgetProvider extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
|
||||
}
|
||||
}
|
@ -13,5 +13,7 @@
|
||||
<public type="attr" name="zip" id="0x00010005" />
|
||||
<public type="attr" name="country" id="0x00010006" />
|
||||
|
||||
<public type="drawable" name="size_48x48" id="0x00030000" />
|
||||
|
||||
<public type="array" name="animals" id="0x02050000" />
|
||||
</resources>
|
||||
|
Reference in New Issue
Block a user