StandardArrayAdapter.java
/*
* Copyright (C) 2003-2014 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.widget;
import android.util.Log;
import android.widget.*;
import greendroid.widget.LoaderActionBarItem;
import java.util.ArrayList;
import org.exoplatform.R;
import org.exoplatform.model.SocialActivityInfo;
import org.exoplatform.singleton.SocialDetailHelper;
import org.exoplatform.singleton.SocialServiceHelper;
import org.exoplatform.social.client.api.SocialClientLibException;
import org.exoplatform.social.client.api.model.RestActivity;
import org.exoplatform.ui.social.AllUpdatesFragment;
import org.exoplatform.ui.social.ComposeMessageActivity;
import org.exoplatform.ui.social.MyConnectionsFragment;
import org.exoplatform.ui.social.MySpacesFragment;
import org.exoplatform.ui.social.MyStatusFragment;
import org.exoplatform.ui.social.SocialDetailActivity;
import org.exoplatform.ui.social.SocialItem;
import org.exoplatform.ui.social.SocialTabsActivity;
import org.exoplatform.utils.ExoConnectionUtils;
import org.exoplatform.utils.ExoConstants;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewStub;
public class StandardArrayAdapter extends ArrayAdapter<SocialActivityInfo> {
private final ArrayList<SocialActivityInfo> items;
private Context mContext;
private LayoutInflater mInflater;
private ViewHolder holder = null;
private LikeLoadTask mLoadTask;
private static final String TAG = "eXo____StandardArrayAdapter____";
public StandardArrayAdapter(Context context, ArrayList<SocialActivityInfo> items) {
super(context, R.layout.activitybrowserviewcell, items);
mContext = context;
this.items = items;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final SocialActivityInfo actInfo = items.get(position);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.activitybrowserviewcell, null);
holder = new ViewHolder();
holder.imageViewAvatar = (ShaderImageView) convertView.findViewById(R.id.imageView_Avatar);
holder.imageViewAvatar.setDefaultImageResource(R.drawable.default_avatar);
holder.contentLayoutWrap = (LinearLayout) convertView.findViewById(R.id.relativeLayout_Content);
holder.textViewName = (TextView) convertView.findViewById(R.id.textView_Name);
holder.textViewName.setLinkTextColor(Color.rgb(21, 94, 173));
holder.textViewMessage = (TextView) convertView.findViewById(R.id.textView_Message);
holder.textViewTempMessage = (TextView) convertView.findViewById(R.id.textview_temp_message);
holder.textViewCommnet = (TextView) convertView.findViewById(R.id.activity_comment_view);
holder.buttonComment = (Button) convertView.findViewById(R.id.button_Comment);
holder.buttonLike = (Button) convertView.findViewById(R.id.button_Like);
holder.typeImageView = (ImageView) convertView.findViewById(R.id.activity_image_type);
holder.textViewTime = (TextView) convertView.findViewById(R.id.textView_Time);
holder.attachStubView = ((ViewStub) convertView.findViewById(R.id.attached_image_stub_activity)).inflate();
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
SocialItem socialItem = new SocialItem(mContext, holder, actInfo, false);
socialItem.initCommonInfo();
holder.contentLayoutWrap.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String activityId = actInfo.getActivityId();
SocialDetailHelper.getInstance().setActivityId(activityId);
SocialDetailHelper.getInstance().setAttachedImageUrl(actInfo.getAttachedImageUrl());
Intent intent = new Intent(mContext, SocialDetailActivity.class);
intent.putExtra(ExoConstants.ACTIVITY_CURRENT_POSITION, position);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mContext.startActivity(intent);
}
});
holder.buttonComment.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SocialDetailHelper.getInstance().setActivityId(actInfo.getActivityId());
Intent intent = new Intent(mContext, ComposeMessageActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(ExoConstants.ACTIVITY_CURRENT_POSITION, position);
intent.putExtra(ExoConstants.COMPOSE_TYPE, ExoConstants.COMPOSE_COMMENT_TYPE);
mContext.startActivity(intent);
}
});
holder.buttonLike.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (ExoConnectionUtils.isNetworkAvailableExt(mContext)) {
onLikeLoad(actInfo, position);
} else {
new ConnectionErrorDialog(mContext).show();
}
}
});
return convertView;
}
private void onLikeLoad(SocialActivityInfo info, int position) {
if (mLoadTask == null || mLoadTask.getStatus() == LikeLoadTask.Status.FINISHED) {
mLoadTask = (LikeLoadTask) new LikeLoadTask(SocialTabsActivity.instance.loaderItem, position).execute(info);
}
}
public static class ViewHolder {
public LinearLayout contentLayoutWrap;
public ShaderImageView imageViewAvatar;
public TextView textViewName;
public TextView textViewMessage;
public TextView textViewTempMessage;
public TextView textViewCommnet;
public Button buttonComment;
public Button buttonLike;
public ImageView typeImageView;
public TextView textViewTime;
public View attachStubView;
}
private class LikeLoadTask extends AsyncTask<SocialActivityInfo, Void, Boolean> {
private LoaderActionBarItem loaderItem;
private int currentPosition;
public LikeLoadTask(LoaderActionBarItem item, int pos) {
loaderItem = item;
currentPosition = pos;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
loaderItem.setLoading(true);
}
@Override
protected Boolean doInBackground(SocialActivityInfo... params) {
SocialActivityInfo actInfo = params[0];
try {
RestActivity activity = SocialServiceHelper.getInstance().activityService.get(actInfo.getActivityId());
if (activity.isLiked())
SocialServiceHelper.getInstance().activityService.unlike(activity);
else
SocialServiceHelper.getInstance().activityService.like(activity);
return true;
} catch (SocialClientLibException e) {
return false;
} catch (RuntimeException e) {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
loaderItem.setLoading(false);
if (result) {
if (SocialTabsActivity.instance != null) {
int tabId = SocialTabsActivity.instance.mPager.getCurrentItem();
switch (tabId) {
case SocialTabsActivity.ALL_UPDATES:
AllUpdatesFragment.instance.onPrepareLoad(ExoConstants.NUMBER_OF_ACTIVITY,
true,
currentPosition);
if (AllUpdatesFragment.instance.isLoading())
holder.buttonLike.setClickable(false);
else
holder.buttonLike.setClickable(true);
break;
case SocialTabsActivity.MY_CONNECTIONS:
MyConnectionsFragment.instance.onPrepareLoad(ExoConstants.NUMBER_OF_ACTIVITY,
true,
currentPosition);
if (MyConnectionsFragment.instance.isLoading())
holder.buttonLike.setClickable(false);
else
holder.buttonLike.setClickable(true);
break;
case SocialTabsActivity.MY_SPACES:
MySpacesFragment.instance.onPrepareLoad(ExoConstants.NUMBER_OF_ACTIVITY,
true,
currentPosition);
if (MySpacesFragment.instance.isLoading())
holder.buttonLike.setClickable(false);
else
holder.buttonLike.setClickable(true);
break;
case SocialTabsActivity.MY_STATUS:
MyStatusFragment.instance.onPrepareLoad(ExoConstants.NUMBER_OF_ACTIVITY,
true,
currentPosition);
if (MyStatusFragment.instance.isLoading())
holder.buttonLike.setClickable(false);
else
holder.buttonLike.setClickable(true);
break;
}
}
} else {
WarningDialog dialog = new WarningDialog(mContext,
mContext.getString(R.string.Warning),
mContext.getString(R.string.ErrorOnLike),
mContext.getString(R.string.OK));
dialog.show();
}
}
}
}