AppWidgetManagerCompatVL.java revision 86222d23e28a09a7a26e7a0d4b4830ded2efb384
1ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal/* 2ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * Copyright (C) 2014 The Android Open Source Project 3ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * 4ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * Licensed under the Apache License, Version 2.0 (the "License"); 5ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * you may not use this file except in compliance with the License. 6ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * You may obtain a copy of the License at 7ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * 8ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * http://www.apache.org/licenses/LICENSE-2.0 9ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * 10ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * Unless required by applicable law or agreed to in writing, software 11ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * distributed under the License is distributed on an "AS IS" BASIS, 12ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * See the License for the specific language governing permissions and 14ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal * limitations under the License. 15ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal */ 16ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 17ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalpackage com.android.launcher3.compat; 18ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 19ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.app.Activity; 20ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.appwidget.AppWidgetHost; 21ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.appwidget.AppWidgetProviderInfo; 22ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.content.ActivityNotFoundException; 232e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyalimport android.content.ComponentName; 24ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.content.Context; 25ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.os.Bundle; 26ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.os.UserHandle; 27ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.os.UserManager; 2886222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickhamimport android.support.annotation.Nullable; 29ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport android.widget.Toast; 30ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 315940042d39b576553c2499bcf3d0641281e6ad52Adam Cohenimport com.android.launcher3.LauncherAppWidgetProviderInfo; 32ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport com.android.launcher3.R; 332e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyalimport com.android.launcher3.util.ComponentKey; 3486222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickhamimport com.android.launcher3.util.PackageUserKey; 35ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 36ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport java.util.ArrayList; 372e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyalimport java.util.HashMap; 3886222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickhamimport java.util.Iterator; 39ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalimport java.util.List; 40ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 41ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyalclass AppWidgetManagerCompatVL extends AppWidgetManagerCompat { 42ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 43ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal private final UserManager mUserManager; 44ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 45ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal AppWidgetManagerCompatVL(Context context) { 46ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal super(context); 47ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 48ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal } 49ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 50ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal @Override 5186222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham public List<AppWidgetProviderInfo> getAllProviders(@Nullable PackageUserKey packageUser) { 5286222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham if (packageUser == null) { 5386222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham ArrayList<AppWidgetProviderInfo> providers = new ArrayList<AppWidgetProviderInfo>(); 5486222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham for (UserHandle user : mUserManager.getUserProfiles()) { 5586222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham providers.addAll(mAppWidgetManager.getInstalledProvidersForProfile(user)); 5686222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham } 5786222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham return providers; 5886222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham } 5986222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham // Only get providers for the given package/user. 6086222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham List<AppWidgetProviderInfo> providers = new ArrayList<>(mAppWidgetManager 6186222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham .getInstalledProvidersForProfile(packageUser.mUser)); 6286222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham Iterator<AppWidgetProviderInfo> iterator = providers.iterator(); 6386222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham while (iterator.hasNext()) { 6486222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham if (!iterator.next().provider.getPackageName().equals(packageUser.mPackageName)) { 6586222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham iterator.remove(); 6686222d23e28a09a7a26e7a0d4b4830ded2efb384Tony Wickham } 67ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal } 68ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal return providers; 69ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal } 70ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 71ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal @Override 72ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal public boolean bindAppWidgetIdIfAllowed(int appWidgetId, AppWidgetProviderInfo info, 73ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal Bundle options) { 74ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal return mAppWidgetManager.bindAppWidgetIdIfAllowed( 75ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal appWidgetId, info.getProfile(), info.provider, options); 76ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal } 77ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 78ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal @Override 79ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal public void startConfigActivity(AppWidgetProviderInfo info, int widgetId, Activity activity, 80ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal AppWidgetHost host, int requestCode) { 81ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal try { 82ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal host.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null); 83b740f59c7d572d54402e3a74fb2a23c0f1b1af48Sunny Goyal } catch (ActivityNotFoundException | SecurityException e) { 84ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); 85ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal } 86ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal } 87ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal 88ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal @Override 897c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal public LauncherAppWidgetProviderInfo findProvider(ComponentName provider, UserHandle user) { 902e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal for (AppWidgetProviderInfo info : mAppWidgetManager 917c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal .getInstalledProvidersForProfile(user)) { 922e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal if (info.provider.equals(provider)) { 932e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal return LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info); 942e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal } 952e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal } 962e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal return null; 972e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal } 982e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal 992e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal @Override 1002e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal public HashMap<ComponentKey, AppWidgetProviderInfo> getAllProvidersMap() { 1012e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal HashMap<ComponentKey, AppWidgetProviderInfo> result = new HashMap<>(); 1022e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal for (UserHandle user : mUserManager.getUserProfiles()) { 1032e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal for (AppWidgetProviderInfo info : 1042e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal mAppWidgetManager.getInstalledProvidersForProfile(user)) { 1057c74e4ae641e76f73d74348e293c244a157f6585Sunny Goyal result.put(new ComponentKey(info.provider, user), info); 1062e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal } 1072e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal } 1082e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal return result; 1092e1efb480a9b77a97cb623d4f5faf6802a417422Sunny Goyal } 110ffe83f13319cdb833a25596d47cf1af098cc4c60Sunny Goyal} 111