package com.lovamimi;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;
//import com.facebook.Session;
import com.google.android.gcm.GCMRegistrar;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
import java.util.List;
public class MainActivity extends BaseActivity {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
com.facebook.Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
@Override
protected void onStart() {
super.onStart();
}
private void addSecretsToLayout(List<Secret> secrets) {
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.layout_main);
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mainLayout.removeAllViews();
for (Secret secret : secrets) {
addOneSecretToLayout(mainLayout, inflater, secret);
}
}
private void addOneSecretToLayout(LinearLayout mainLayout, LayoutInflater inflater, final Secret secret) {
RelativeLayout incLayout = (RelativeLayout) inflater.inflate(R.layout.secret, null);
TextView tv = (TextView) incLayout.findViewById(R.id.secret_body);
tv.setText(secret.body);
TextView secretDatetime = (TextView) incLayout.findViewById(R.id.secret_datetime);
secretDatetime.setText(secret.datetime);
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, CommentActivity.class);
intent.putExtra("secret", secret);
startActivity(intent);
}
};
TextView numComments = (TextView) incLayout.findViewById(R.id.num_comments);
numComments.setOnClickListener(listener);
numComments.setText("コメント(" + String.valueOf(secret.numComments) + ")");
ImageView commentIcon = (ImageView) incLayout.findViewById(R.id.comment_icon);
commentIcon.setImageResource(secret.numComments > 0 ? R.drawable.comment2 : R.drawable.comment);
commentIcon.setOnClickListener(listener);
TextView numLikes = (TextView) incLayout.findViewById(R.id.num_likes);
numLikes.setText("いいね(" + String.valueOf(secret.numLikes) + ")");
OnClickListener likeListener = new OnClickListener() {
@Override
public void onClick(final View v) {
track("Liked secret");
new AsyncTask<Secret, Void, Boolean>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
TextView view = (TextView) v;
secret.numLikes++;
view.setText("いいね(" + String.valueOf(secret.numLikes) + ")");
}
@Override
protected Boolean doInBackground(Secret... secrets) {
if (getSessionId() == null) {
return false;
}
Secret secret = secrets[0];
return secret.postLike(getSessionId());
}
@Override
protected void onPostExecute(Boolean isLikePosted) {
super.onPostExecute(isLikePosted);
}
}.execute(secret);
}
};
numLikes.setOnClickListener(likeListener);
ImageView icon = (ImageView) incLayout.findViewById(R.id.profile_image);
icon.setImageResource(secret.getIconResource());
mainLayout.addView(incLayout);
}
private void syncLoginStatus() {
// todo move to session class?
AsyncTask<Void, Void, Void> fetchTimeline = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPostExecute(Void notUsed) {
super.onPostExecute(notUsed);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void ... args) {
LovamimiApplication app = (LovamimiApplication) getApplication();
app.syncSession();
return null;
}
};
fetchTimeline.execute();
}
private void getSecrets() {
AsyncTask<Void, Void, List<Secret>> fetchTimeline = new AsyncTask<Void, Void, List<Secret>>() {
@Override
protected void onPostExecute(List<Secret> secrets) {
super.onPostExecute(secrets);
SecretsCache secretsCache = new SecretsCache(MainActivity.this);
for (Secret secret : secrets) {
secretsCache.insertSecret(secret);
}
addSecretsToLayout(secrets);
PullToRefreshScrollView pullToRefreshView = (PullToRefreshScrollView) findViewById(R.id.scroll);
pullToRefreshView.onRefreshComplete();
setProgressBarIndeterminateVisibility(Boolean.FALSE);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected List<Secret> doInBackground(Void ... args) {
return Secret.getSecrets();
}
};
fetchTimeline.execute();
}
private void getCachedSecrets() {
AsyncTask<Void, Void, List<Secret>> fetchTimeline = new AsyncTask<Void, Void, List<Secret>>() {
@Override
protected void onPostExecute(List<Secret> secrets) {
super.onPostExecute(secrets);
addSecretsToLayout(secrets);
PullToRefreshScrollView pullToRefreshView = (PullToRefreshScrollView) findViewById(R.id.scroll);
pullToRefreshView.onRefreshComplete();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected List<Secret> doInBackground(Void ... args) {
return (new SecretsCache(MainActivity.this).getAllSecrets());
}
};
fetchTimeline.execute();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
PullToRefreshScrollView pullToRefreshView = (PullToRefreshScrollView) findViewById(R.id.scroll);
pullToRefreshView.setOnRefreshListener(new OnRefreshListener<ScrollView>() {
@Override
public void onRefresh(PullToRefreshBase<ScrollView> refreshView) {
getSecrets();
syncLoginStatus();
}
});
track("Normal Secrets Loaded");
try {
GCMRegistrar.checkDevice(getApplicationContext());
GCMRegistrar.checkManifest(getApplicationContext());
String regId = GCMRegistrar.getRegistrationId(getApplicationContext());
if (TextUtils.isEmpty(regId)) {
GCMRegistrar.register(getApplicationContext(), "372350520876");
} else {
LovamimiApplication app = (LovamimiApplication) getApplication();
app.setDeviceToken(regId);
i("already registered");
}
} catch (Exception e) {
e("GCM error: " + e.toString());
}
getCachedSecrets();
getSecrets();
syncLoginStatus();
setProgressBarIndeterminateVisibility(Boolean.TRUE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_status_update) {
loginAndNextActivity(PostSecretActivity.class);
return true;
}
return false;
}
}