// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
import java.util.List;
/**
* Adapter that provides the list of activities via which a web page can be shared.
*/
class ShareDialogAdapter extends ArrayAdapter<ResolveInfo> {
private final LayoutInflater mInflater;
private final PackageManager mManager;
/**
* @param context Context used to for layout inflation.
* @param manager PackageManager used to query for activity information.
* @param objects The list of possible share intents.
*/
public ShareDialogAdapter(Context context, PackageManager manager, List<ResolveInfo> objects) {
super(context, R.layout.share_dialog_item, objects);
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mManager = manager;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
view = mInflater.inflate(R.layout.share_dialog_item, parent, false);
} else {
view = convertView;
}
TextView text = (TextView) view.findViewById(R.id.text);
ImageView icon = (ImageView) view.findViewById(R.id.icon);
text.setText(getItem(position).loadLabel(mManager));
icon.setImageDrawable(loadIconForResolveInfo(getItem(position)));
return view;
}
private Drawable loadIconForResolveInfo(ResolveInfo info) {
try {
final int iconRes = info.getIconResource();
if (iconRes != 0) {
Resources res = mManager.getResourcesForApplication(info.activityInfo.packageName);
Drawable icon = ApiCompatibilityUtils.getDrawable(res, iconRes);
return icon;
}
} catch (NameNotFoundException | NotFoundException e) {
// Could not find the icon. loadIcon call below will return the default app icon.
}
return info.loadIcon(mManager);
}
}