FileDocCategorySizeDatePackage
PreviewInflater.javaAPI DocAndroid 5.1 API5282Thu Mar 12 22:22:42 GMT 2015com.android.systemui.statusbar.policy

PreviewInflater

public class PreviewInflater extends Object
Utility class to inflate previews for phone and camera affordance.

Fields Summary
private static final String
TAG
private static final String
META_DATA_KEYGUARD_LAYOUT
private android.content.Context
mContext
private com.android.internal.widget.LockPatternUtils
mLockPatternUtils
Constructors Summary
public PreviewInflater(android.content.Context context, com.android.internal.widget.LockPatternUtils lockPatternUtils)


         
        mContext = context;
        mLockPatternUtils = lockPatternUtils;
    
Methods Summary
private com.android.systemui.statusbar.policy.PreviewInflater$WidgetInfogetWidgetInfo(android.content.Intent intent)

        WidgetInfo info = new WidgetInfo();
        PackageManager packageManager = mContext.getPackageManager();
        final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser(
                intent, PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser());
        if (appList.size() == 0) {
            return null;
        }
        ResolveInfo resolved = packageManager.resolveActivityAsUser(intent,
                PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_META_DATA,
                mLockPatternUtils.getCurrentUser());
        if (wouldLaunchResolverActivity(resolved, appList)) {
            return null;
        }
        if (resolved == null || resolved.activityInfo == null) {
            return null;
        }
        if (resolved.activityInfo.metaData == null || resolved.activityInfo.metaData.isEmpty()) {
            return null;
        }
        int layoutId = resolved.activityInfo.metaData.getInt(META_DATA_KEYGUARD_LAYOUT);
        if (layoutId == 0) {
            return null;
        }
        info.contextPackage = resolved.activityInfo.packageName;
        info.layoutId = layoutId;
        return info;
    
public android.view.ViewinflatePreview(android.content.Intent intent)

        WidgetInfo info = getWidgetInfo(intent);
        if (info == null) {
            return null;
        }
        View v = inflateWidgetView(info);
        if (v == null) {
            return null;
        }
        KeyguardPreviewContainer container = new KeyguardPreviewContainer(mContext, null);
        container.addView(v);
        return container;
    
private android.view.ViewinflateWidgetView(com.android.systemui.statusbar.policy.PreviewInflater$WidgetInfo widgetInfo)

        View widgetView = null;
        try {
            Context appContext = mContext.createPackageContext(
                    widgetInfo.contextPackage, Context.CONTEXT_RESTRICTED);
            LayoutInflater appInflater = (LayoutInflater)
                    appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            appInflater = appInflater.cloneInContext(appContext);
            widgetView = appInflater.inflate(widgetInfo.layoutId, null, false);
        } catch (PackageManager.NameNotFoundException|RuntimeException e) {
            Log.w(TAG, "Error creating widget view", e);
        }
        return widgetView;
    
public static booleanwouldLaunchResolverActivity(android.content.Context ctx, android.content.Intent intent, int currentUserId)

        PackageManager packageManager = ctx.getPackageManager();
        final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser(
                intent, PackageManager.MATCH_DEFAULT_ONLY, currentUserId);
        if (appList.size() == 0) {
            return false;
        }
        ResolveInfo resolved = packageManager.resolveActivityAsUser(intent,
                PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_META_DATA, currentUserId);
        return wouldLaunchResolverActivity(resolved, appList);
    
private static booleanwouldLaunchResolverActivity(android.content.pm.ResolveInfo resolved, java.util.List appList)

        // If the list contains the above resolved activity, then it can't be
        // ResolverActivity itself.
        for (int i = 0; i < appList.size(); i++) {
            ResolveInfo tmp = appList.get(i);
            if (tmp.activityInfo.name.equals(resolved.activityInfo.name)
                    && tmp.activityInfo.packageName.equals(resolved.activityInfo.packageName)) {
                return false;
            }
        }
        return true;