package com.dwdesign.tweetings.activity;
import static com.dwdesign.tweetings.Constants.INTENT_ACTION_VIEW_IMAGE;
import static com.dwdesign.tweetings.util.Utils.getActivatedAccountIds;
import static com.dwdesign.tweetings.util.Utils.getAllAvailableImage;
import static com.dwdesign.tweetings.util.Utils.getOriginalTwitterProfileImage;
import static com.dwdesign.tweetings.util.Utils.getPreviewImage;
import static com.dwdesign.tweetings.util.Utils.getTwitterInstance;
import static com.dwdesign.tweetings.util.Utils.isMyAccount;
import static com.dwdesign.tweetings.util.Utils.getDefaultAccountId;
import static com.dwdesign.tweetings.util.Utils.parseString;
import static com.dwdesign.tweetings.util.Utils.parseURL;
import static com.dwdesign.tweetings.util.Utils.openImage;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
import com.dwdesign.tweetings.Constants;
import com.dwdesign.tweetings.R;
import com.dwdesign.tweetings.adapter.ParcelableStatusesAdapter;
import com.dwdesign.tweetings.fragment.UserProfileFragment;
import com.dwdesign.tweetings.loader.UserTimelineLoader;
import com.dwdesign.tweetings.model.ImageSpec;
import com.dwdesign.tweetings.model.ParcelableStatus;
import com.dwdesign.tweetings.model.PreviewImage;
import com.dwdesign.tweetings.provider.TweetStore.Accounts;
import com.dwdesign.tweetings.provider.TweetStore.Drafts;
import com.dwdesign.popupmenu.PopupMenu;
import com.dwdesign.popupmenu.PopupMenu.OnMenuItemClickListener;
import com.dwdesign.tweetings.loader.UserMediaTimelineLoader;
import com.koushikdutta.urlimageviewhelper.UrlImageViewHelper;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.util.DisplayMetrics;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
public class GalleryActivity extends BaseActivity implements Constants {
//private ServiceInterface mService;
//private SharedPreferences mPreferences;
private MediaTimelineTask mMediaTimelineTask;
private ArrayList<ParcelableStatus> mStatuses;
private GridView gridview;
private long account_id;
private boolean mDisplaySensitiveContents;
@Override
public void onCreate(Bundle savedInstanceState) {
//mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
//mService = getTweetingsApplication().getServiceInterface();
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Intent intent = getIntent();
final String screen_name = intent.getStringExtra("screen_name");
account_id = intent.getLongExtra("account_id", -1);
if (account_id == -1) {
account_id = getDefaultAccountId(this);
}
gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
SharedPreferences mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mDisplaySensitiveContents = mPreferences.getBoolean(PREFERENCE_KEY_DISPLAY_SENSITIVE_CONTENTS, false);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int wwidth = displaymetrics.widthPixels;
float cellWidth = wwidth/220;
double cellWidthd = Math.floor(cellWidth);
int colWidth = (int)cellWidthd;
gridview.setNumColumns(colWidth);
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ParcelableStatus pStatus = mStatuses.get(position);
final ImageSpec spec = getAllAvailableImage(pStatus.image_orig_url_string);
if (spec != null) {
openImage(GalleryActivity.this, Uri.parse(spec.full_image_link), pStatus.is_possibly_sensitive);
}
}
});
mMediaTimelineTask = new MediaTimelineTask(this, account_id, screen_name);
if (mMediaTimelineTask != null) {
mMediaTimelineTask.execute();
}
}
class Response<T> {
public final T value;
public final TwitterException exception;
public Response(T value, TwitterException exception) {
this.value = value;
this.exception = exception;
}
}
@Override
public void onDestroy() {
mStatuses = null;
if (mMediaTimelineTask != null) {
mMediaTimelineTask.cancel(true);
}
super.onDestroy();
}
class MediaTimelineTask extends AsyncTask<Void, Void, ResponseList<twitter4j.Status>> {
private final Twitter twitter;
private final String screen_name;
private MediaTimelineTask(Context context, long account_id, String screen_name) {
twitter = getTwitterInstance(context, account_id, true);
this.screen_name = screen_name;
}
@Override
protected ResponseList<twitter4j.Status> doInBackground(Void... args) {
try {
final Paging paging = new Paging();
final int load_item_limit = 100;
paging.setCount(load_item_limit);
return twitter.getUserMediaTimeline(screen_name, paging);
} catch (final TwitterException e) {
return null;
}
}
@Override
protected void onCancelled() {
setProgressBarIndeterminateVisibility(false);
super.onCancelled();
}
@Override
protected void onPostExecute(ResponseList<twitter4j.Status> result) {
if (result == null) return;
mStatuses = new ArrayList<ParcelableStatus>();
for (twitter4j.Status status : result) {
ParcelableStatus pStatus = new ParcelableStatus(status, account_id, false);
if (pStatus != null && pStatus.image_preview_url_string != null) {
mStatuses.add(pStatus);
}
}
setProgressBarIndeterminateVisibility(false);
gridview.invalidateViews();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
setProgressBarIndeterminateVisibility(true);
super.onPreExecute();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_HOME: {
onBackPressed();
break;
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
private boolean isAllItemsLoaded = false;
public boolean isListLoadFinished() {
return isAllItemsLoaded;
}
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
if (mStatuses == null) {
return 0;
}
return mStatuses.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;
if (convertView == null) {
i = new ImageView(mContext);
i.setScaleType(ImageView.ScaleType.CENTER_CROP);
i.setLayoutParams(new GridView.LayoutParams(180, 180));
}
else {
i = (ImageView) convertView;
}
if (mStatuses != null && mStatuses.size() >= 1) {
ParcelableStatus pStatus = mStatuses.get(position);
if (pStatus.is_possibly_sensitive && !mDisplaySensitiveContents) {
i.setImageResource(R.drawable.image_preview_nsfw);
} else {
UrlImageViewHelper.setUrlDrawable(i, pStatus.image_preview_url_string);
}
//i.setImageURI(Uri.parse(pStatus.image_preview_url_string));
}
return i;
}
private Context mContext;
}
}