mirror of https://github.com/tasks/tasks
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.
157 lines
5.3 KiB
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;
|
|
}
|
|
|
|
}
|