diff options
| author | 2017-01-01 19:42:45 -0800 | |
|---|---|---|
| committer | 2017-01-03 13:28:56 -0800 | |
| commit | 87a563e0707bb7e2be034c195e9827dfe3451cfd (patch) | |
| tree | f2767172e5276c264363127615a09effe7c0a1c4 /services/appwidget/java | |
| parent | 564e802a7ce1c429c11ad1f557c1abb40e87c396 (diff) | |
AppWidgetManager: direct add widget support.
Test: Manual test and all the unit tests:
adb shell am instrument -e class com.android.server.pm.ShortcutManagerTest1 -w com.android.frameworks.servicestests
... to test9
adb shell am instrument -e class com.android.server.appwidget.AppWidgetServiceImplTest -w com.android.frameworks.servicestests
Bug 32404406
Change-Id: Icd6d4cbd25d9cdf4508da725d95d6401cc3a46a7
Diffstat (limited to 'services/appwidget/java')
| -rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 6404604ca097..87eb380de15e 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -48,6 +48,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; +import android.content.pm.ShortcutServiceInternal; import android.content.pm.UserInfo; import android.content.res.Resources; import android.content.res.TypedArray; @@ -1542,6 +1543,36 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } @Override + public boolean requestPinAppWidget(String callingPackage, ComponentName componentName, + IntentSender resultSender) { + final int callingUid = Binder.getCallingUid(); + final int userId = UserHandle.getUserId(callingUid); + + if (DEBUG) { + Slog.i(TAG, "requestPinAppWidget() " + userId); + } + + final AppWidgetProviderInfo info; + + synchronized (mLock) { + ensureGroupStateLoadedLocked(userId); + + // Look for the widget associated with the caller. + Provider provider = lookupProviderLocked(new ProviderId(callingUid, componentName)); + if (provider == null || provider.zombie) { + return false; + } + info = provider.info; + if ((info.widgetCategory & AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN) == 0) { + return false; + } + } + + return LocalServices.getService(ShortcutServiceInternal.class) + .requestPinAppWidget(callingPackage, info, resultSender, userId); + } + + @Override public ParceledListSlice<AppWidgetProviderInfo> getInstalledProvidersForProfile(int categoryFilter, int profileId) { final int userId = UserHandle.getCallingUserId(); |