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