Home | History | Annotate | Download | only in compat
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.launcher3.compat;
     18 
     19 import android.app.Activity;
     20 import android.appwidget.AppWidgetHost;
     21 import android.appwidget.AppWidgetProviderInfo;
     22 import android.content.ActivityNotFoundException;
     23 import android.content.ComponentName;
     24 import android.content.Context;
     25 import android.os.Bundle;
     26 import android.os.UserHandle;
     27 import android.os.UserManager;
     28 import android.support.annotation.Nullable;
     29 import android.widget.Toast;
     30 
     31 import com.android.launcher3.LauncherAppWidgetProviderInfo;
     32 import com.android.launcher3.R;
     33 import com.android.launcher3.util.ComponentKey;
     34 import com.android.launcher3.util.PackageUserKey;
     35 
     36 import java.util.ArrayList;
     37 import java.util.HashMap;
     38 import java.util.Iterator;
     39 import java.util.List;
     40 
     41 class AppWidgetManagerCompatVL extends AppWidgetManagerCompat {
     42 
     43     private final UserManager mUserManager;
     44 
     45     AppWidgetManagerCompatVL(Context context) {
     46         super(context);
     47         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
     48     }
     49 
     50     @Override
     51     public List<AppWidgetProviderInfo> getAllProviders(@Nullable PackageUserKey packageUser) {
     52         if (packageUser == null) {
     53             ArrayList<AppWidgetProviderInfo> providers = new ArrayList<AppWidgetProviderInfo>();
     54             for (UserHandle user : mUserManager.getUserProfiles()) {
     55                 providers.addAll(mAppWidgetManager.getInstalledProvidersForProfile(user));
     56             }
     57             return providers;
     58         }
     59         // Only get providers for the given package/user.
     60         List<AppWidgetProviderInfo> providers = new ArrayList<>(mAppWidgetManager
     61                 .getInstalledProvidersForProfile(packageUser.mUser));
     62         Iterator<AppWidgetProviderInfo> iterator = providers.iterator();
     63         while (iterator.hasNext()) {
     64             if (!iterator.next().provider.getPackageName().equals(packageUser.mPackageName)) {
     65                 iterator.remove();
     66             }
     67         }
     68         return providers;
     69     }
     70 
     71     @Override
     72     public boolean bindAppWidgetIdIfAllowed(int appWidgetId, AppWidgetProviderInfo info,
     73             Bundle options) {
     74         return mAppWidgetManager.bindAppWidgetIdIfAllowed(
     75                 appWidgetId, info.getProfile(), info.provider, options);
     76     }
     77 
     78     @Override
     79     public void startConfigActivity(AppWidgetProviderInfo info, int widgetId, Activity activity,
     80             AppWidgetHost host, int requestCode) {
     81         try {
     82             host.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null);
     83         } catch (ActivityNotFoundException | SecurityException e) {
     84             Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
     85         }
     86     }
     87 
     88     @Override
     89     public LauncherAppWidgetProviderInfo findProvider(ComponentName provider, UserHandle user) {
     90         for (AppWidgetProviderInfo info : mAppWidgetManager
     91                 .getInstalledProvidersForProfile(user)) {
     92             if (info.provider.equals(provider)) {
     93                 return LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info);
     94             }
     95         }
     96         return null;
     97     }
     98 
     99     @Override
    100     public HashMap<ComponentKey, AppWidgetProviderInfo> getAllProvidersMap() {
    101         HashMap<ComponentKey, AppWidgetProviderInfo> result = new HashMap<>();
    102         for (UserHandle user : mUserManager.getUserProfiles()) {
    103             for (AppWidgetProviderInfo info :
    104                     mAppWidgetManager.getInstalledProvidersForProfile(user)) {
    105                 result.put(new ComponentKey(info.provider, user), info);
    106             }
    107         }
    108         return result;
    109     }
    110 }
    111