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.annotation.TargetApi;
     20 import android.content.ComponentName;
     21 import android.content.Context;
     22 import android.content.Intent;
     23 import android.content.pm.LauncherActivityInfo;
     24 import android.content.pm.LauncherApps;
     25 import android.content.pm.ShortcutInfo;
     26 import android.graphics.Rect;
     27 import android.os.Build;
     28 import android.os.Bundle;
     29 import android.os.UserHandle;
     30 
     31 import com.android.launcher3.shortcuts.ShortcutInfoCompat;
     32 
     33 import java.util.ArrayList;
     34 import java.util.Collections;
     35 import java.util.HashMap;
     36 import java.util.List;
     37 import java.util.Map;
     38 
     39 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     40 public class LauncherAppsCompatVL extends LauncherAppsCompatV16 {
     41 
     42     protected LauncherApps mLauncherApps;
     43 
     44     private Map<OnAppsChangedCallbackCompat, WrappedCallback> mCallbacks
     45             = new HashMap<OnAppsChangedCallbackCompat, WrappedCallback>();
     46 
     47     LauncherAppsCompatVL(Context context) {
     48         super(context);
     49         mLauncherApps = (LauncherApps) context.getSystemService("launcherapps");
     50     }
     51 
     52     public List<LauncherActivityInfoCompat> getActivityList(String packageName,
     53             UserHandleCompat user) {
     54         List<LauncherActivityInfo> list = mLauncherApps.getActivityList(packageName,
     55                 user.getUser());
     56         if (list.size() == 0) {
     57             return Collections.emptyList();
     58         }
     59         ArrayList<LauncherActivityInfoCompat> compatList =
     60                 new ArrayList<LauncherActivityInfoCompat>(list.size());
     61         for (LauncherActivityInfo info : list) {
     62             compatList.add(new LauncherActivityInfoCompatVL(info));
     63         }
     64         return compatList;
     65     }
     66 
     67     public LauncherActivityInfoCompat resolveActivity(Intent intent, UserHandleCompat user) {
     68         LauncherActivityInfo activity = mLauncherApps.resolveActivity(intent, user.getUser());
     69         if (activity != null) {
     70             return new LauncherActivityInfoCompatVL(activity);
     71         } else {
     72             return null;
     73         }
     74     }
     75 
     76     public void startActivityForProfile(ComponentName component, UserHandleCompat user,
     77             Rect sourceBounds, Bundle opts) {
     78         mLauncherApps.startMainActivity(component, user.getUser(), sourceBounds, opts);
     79     }
     80 
     81     public void showAppDetailsForProfile(ComponentName component, UserHandleCompat user) {
     82         mLauncherApps.startAppDetailsActivity(component, user.getUser(), null, null);
     83     }
     84 
     85     public void addOnAppsChangedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
     86         WrappedCallback wrappedCallback = new WrappedCallback(callback);
     87         synchronized (mCallbacks) {
     88             mCallbacks.put(callback, wrappedCallback);
     89         }
     90         mLauncherApps.registerCallback(wrappedCallback);
     91     }
     92 
     93     public void removeOnAppsChangedCallback(
     94             LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
     95         WrappedCallback wrappedCallback = null;
     96         synchronized (mCallbacks) {
     97             wrappedCallback = mCallbacks.remove(callback);
     98         }
     99         if (wrappedCallback != null) {
    100             mLauncherApps.unregisterCallback(wrappedCallback);
    101         }
    102     }
    103 
    104     public boolean isPackageEnabledForProfile(String packageName, UserHandleCompat user) {
    105         return mLauncherApps.isPackageEnabled(packageName, user.getUser());
    106     }
    107 
    108     public boolean isActivityEnabledForProfile(ComponentName component, UserHandleCompat user) {
    109         return mLauncherApps.isActivityEnabled(component, user.getUser());
    110     }
    111 
    112     public boolean isPackageSuspendedForProfile(String packageName, UserHandleCompat user) {
    113         return false;
    114     }
    115 
    116     private static class WrappedCallback extends LauncherApps.Callback {
    117         private LauncherAppsCompat.OnAppsChangedCallbackCompat mCallback;
    118 
    119         public WrappedCallback(LauncherAppsCompat.OnAppsChangedCallbackCompat callback) {
    120             mCallback = callback;
    121         }
    122 
    123         public void onPackageRemoved(String packageName, UserHandle user) {
    124             mCallback.onPackageRemoved(packageName, UserHandleCompat.fromUser(user));
    125         }
    126 
    127         public void onPackageAdded(String packageName, UserHandle user) {
    128             mCallback.onPackageAdded(packageName, UserHandleCompat.fromUser(user));
    129         }
    130 
    131         public void onPackageChanged(String packageName, UserHandle user) {
    132             mCallback.onPackageChanged(packageName, UserHandleCompat.fromUser(user));
    133         }
    134 
    135         public void onPackagesAvailable(String[] packageNames, UserHandle user, boolean replacing) {
    136             mCallback.onPackagesAvailable(packageNames, UserHandleCompat.fromUser(user), replacing);
    137         }
    138 
    139         public void onPackagesUnavailable(String[] packageNames, UserHandle user,
    140                 boolean replacing) {
    141             mCallback.onPackagesUnavailable(packageNames, UserHandleCompat.fromUser(user),
    142                     replacing);
    143         }
    144 
    145         public void onPackagesSuspended(String[] packageNames, UserHandle user) {
    146             mCallback.onPackagesSuspended(packageNames, UserHandleCompat.fromUser(user));
    147         }
    148 
    149         public void onPackagesUnsuspended(String[] packageNames, UserHandle user) {
    150             mCallback.onPackagesUnsuspended(packageNames, UserHandleCompat.fromUser(user));
    151         }
    152 
    153         @Override
    154         public void onShortcutsChanged(String packageName, List<ShortcutInfo> shortcuts,
    155                 UserHandle user) {
    156             List<ShortcutInfoCompat> shortcutInfoCompats = new ArrayList<>(shortcuts.size());
    157             for (ShortcutInfo shortcutInfo : shortcuts) {
    158                 shortcutInfoCompats.add(new ShortcutInfoCompat(shortcutInfo));
    159             }
    160 
    161             mCallback.onShortcutsChanged(packageName, shortcutInfoCompats,
    162                     UserHandleCompat.fromUser(user));
    163         }
    164     }
    165 }
    166 
    167