You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/astrid/src/main/java/com/todoroo/astrid/adapter/AddOnAdapter.java

157 lines
5.3 KiB
Java

/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.adapter;
import java.util.List;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import org.tasks.R;
import com.todoroo.astrid.data.AddOn;
import com.todoroo.astrid.utility.Constants;
/**
* Adapter for {@link AddOn}s
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class AddOnAdapter extends ArrayAdapter<AddOn> {
// --- instance variables
private final Activity activity;
private final LayoutInflater inflater;
private final boolean installed;
public AddOnAdapter(Activity activity, boolean installed, List<AddOn> objects) {
super(activity, R.id.title, objects);
this.installed = installed;
this.activity = activity;
inflater = (LayoutInflater) activity.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
}
// --- view construction
View.OnClickListener intentClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
ButtonTag buttonTag = (ButtonTag) v.getTag();
if(buttonTag != null) {
try {
activity.startActivity(buttonTag.intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(activity, R.string.market_unavailable, Toast.LENGTH_LONG).show();
}
}
}
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflater.inflate(R.layout.addon_adapter_row, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.icon = (ImageView) convertView.findViewById(R.id.icon);
viewHolder.free = (TextView) convertView.findViewById(R.id.free);
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.description = (TextView) convertView.findViewById(R.id.description);
viewHolder.market = (ImageButton) convertView.findViewById(R.id.button_market);
viewHolder.installedIcon = (ImageView) convertView.findViewById(R.id.check);
convertView.setTag(viewHolder);
viewHolder.market.setOnClickListener(intentClickListener);
}
((ViewHolder)convertView.getTag()).item = getItem(position);
initializeView(convertView);
return convertView;
}
private class ViewHolder {
public AddOn item;
public ImageView icon;
public TextView free;
public TextView title;
public TextView description;
public ImageButton market;
public ImageView installedIcon;
}
private class ButtonTag {
String event;
Intent intent;
public ButtonTag(String message, Intent intent) {
this.event = message;
this.intent = intent;
}
}
private void initializeView(View convertView) {
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
AddOn item = viewHolder.item;
viewHolder.icon.setImageBitmap(item.getIcon());
viewHolder.title.setText(item.getTitle());
viewHolder.description.setText(item.getDescription());
viewHolder.free.setVisibility(item.isFree() && !installed ? View.VISIBLE : View.GONE);
// populate buttons
if(installed) {
viewHolder.market.setVisibility(View.GONE);
viewHolder.installedIcon.setVisibility(View.VISIBLE);
} else {
viewHolder.market.setVisibility(View.VISIBLE);
viewHolder.installedIcon.setVisibility(View.GONE);
Intent marketIntent = Constants.MARKET_STRATEGY.generateMarketLink(item.getPackageName());
if (marketIntent == null) {
convertView.setVisibility(View.GONE);
} else {
convertView.setVisibility(View.VISIBLE);
viewHolder.market.setTag(new ButtonTag("market-" + item.getPackageName(), //$NON-NLS-1$
marketIntent));
Drawable icon = getIntentIcon(marketIntent);
if(icon == null) {
viewHolder.market.setImageResource(
android.R.drawable.stat_sys_download);
} else {
viewHolder.market.setImageDrawable(icon);
}
}
}
}
public Drawable getIntentIcon(Intent intent) {
PackageManager pm = activity.getPackageManager();
List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);
// if options > 1, display open with...
if(resolveInfoList.size() > 0) {
return resolveInfoList.get(0).activityInfo.loadIcon(pm);
}
return null;
}
}