package ams.android.linkit.Adapter;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import ams.android.linkit.Fragment.FragmentWebView;
import ams.android.linkit.Model.LinkitObject;
import ams.android.linkit.R;
import ams.android.linkit.Tools.GlobalApplication;
/**
* Created by Aidin on 2/3/2015.
*/
public class AdapterListview extends BaseAdapter {
private static String TAG = "linkitShopper";
private Context context;
private final FragmentManager fragmentManager;
private ArrayList<LinkitObject> items = new ArrayList<>();
private ImageLoader imageLoader = ImageLoader.getInstance();
private final DisplayImageOptions options;
private final ImageLoadingListener imageListener;
public AdapterListview(Context context, FragmentManager fragmentManager, ArrayList<LinkitObject> items) {
this.context = context;
this.fragmentManager = fragmentManager;
this.items = items;
options = new DisplayImageOptions.Builder()
.resetViewBeforeLoading(true)
.showImageOnFail(R.drawable.fail)
.showImageOnLoading(R.drawable.loading)
.showImageForEmptyUri(R.drawable.unlink)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageListener = new ImageDisplayListener();
if (!imageLoader.isInited()) {
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
}
imageLoader = ImageLoader.getInstance();
}
private static class ViewHolder {
public ImageView imgLink;
public ImageView imgInsta;
public ImageView imgProfile;
public TextView txtDesc;
public TextView txtOwner;
}
@Override
public View getView(final int position, View rootView, ViewGroup parent) {
final ViewHolder holder;
if (rootView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rootView = inflater.inflate(R.layout.item_list, null);
holder = new ViewHolder();
holder.imgLink = (ImageView) rootView.findViewById(R.id.img_link);
holder.imgInsta = (ImageView) rootView.findViewById(R.id.img_insta);
holder.imgProfile = (ImageView) rootView.findViewById(R.id.imgProfile);
holder.txtDesc = (TextView) rootView.findViewById(R.id.txtDesc);
holder.txtOwner = (TextView) rootView.findViewById(R.id.txtOwner);
rootView.setTag(holder);
} else {
holder = (ViewHolder) rootView.getTag();
}
imageLoader.displayImage(items.get(position).linkSrceenShot, holder.imgLink, options, imageListener);
imageLoader.displayImage(items.get(position).imageUrl, holder.imgInsta, options, imageListener);
imageLoader.displayImage(items.get(position).ownerProfilePic, holder.imgProfile, options, imageListener);
if (!items.get(position).caption.equals("null")) {
holder.txtDesc.setText(items.get(position).caption);
} else {
holder.txtDesc.setText("");
}
if (!items.get(position).owner.equals("null")) {
holder.txtOwner.setText(items.get(position).owner);
} else {
holder.txtOwner.setText("");
}
holder.imgLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentWebView f1 = new FragmentWebView();
Bundle bundle = new Bundle();
bundle.putParcelable("item", items.get(position));
f1.setArguments(bundle);
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.add(R.id.container, f1, "WebView");
ft.addToBackStack("WebView");
ft.commit();
new postOpenedAsync().execute(items.get(position).mediaID);
}
});
return rootView;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
private class ImageDisplayListener extends SimpleImageLoadingListener {
final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingStarted(String imageUri, View view) {
super.onLoadingStarted(imageUri, view);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 0);
displayedImages.add(imageUri);
}
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
super.onLoadingCancelled(imageUri, view);
}
}
private class postOpenedAsync extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... data) {
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000);
JSONObject json = new JSONObject();
try {
String urlJSON = context.getResources().getString(R.string.BASE_URL).toString() + "users/" + ((GlobalApplication) context.getApplicationContext()).getUserId() + "/opened/" + data[0];
HttpPost post = new HttpPost(urlJSON);
post.addHeader("token", ((GlobalApplication) context.getApplicationContext()).getRegistrationId());
post.addHeader("device", "android");
post.addHeader("userType", "buyer");
StringEntity se = new StringEntity(json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);
client.execute(post);
return "OK";
} catch (Exception e) {
Log.i("linkit Response: ", "error" + e.getMessage());
e.printStackTrace();
return "ERROR";
}
}
@Override
protected void onPostExecute(String result) {
}
}
}