package ryan.org.wordpress.android.util;
import java.util.HashMap;
import java.util.Vector;
import ryan.org.wordpress.android.R;
import ryan.org.wordpress.android.About;
import ryan.org.wordpress.android.EditPost;
import ryan.org.wordpress.android.Settings;
import ryan.org.wordpress.android.ViewComments;
import ryan.org.wordpress.android.ViewPosts;
import ryan.org.wordpress.android.ViewStats;
import ryan.org.wordpress.android.WordPress;
import ryan.org.wordpress.android.WordPressDB;
import ryan.org.wordpress.android.models.Blog;
import ryan.org.wordpress.android.util.ImageHelper.BitmapDownloaderTask;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class WPTitleBar extends RelativeLayout {
public CharSequence[] blogNames;
public int[] blogIDs;
public Vector<?> accounts;
private Context context;
TextView blogTitle;
public Button refreshButton;
OnBlogChangedListener onBlogChangedListener = null;
AlertDialog.Builder dialogBuilder;
public boolean showPopoverOnLoad;
public RelativeLayout rl, dashboard;
public WPTitleBar(final Context ctx, AttributeSet attrs) {
super(ctx, attrs);
context = ctx;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
final WordPressDB settingsDB = new WordPressDB(context);
accounts = settingsDB.getAccounts(context);
dashboard = (RelativeLayout) findViewById(R.id.dashboard);
blogNames = new CharSequence[accounts.size()];
blogIDs = new int[accounts.size()];
for (int i = 0; i < accounts.size(); i++) {
HashMap<?, ?> defHash = (HashMap<?, ?>) accounts.get(i);
String curBlogName = EscapeUtils.unescapeHtml(defHash.get(
"blogName").toString());
blogNames[i] = curBlogName;
blogIDs[i] = Integer.valueOf(defHash.get("id").toString());
blogTitle = (TextView) findViewById(R.id.blog_title);
}
int lastBlogID = settingsDB.getLastBlogID(context);
if (lastBlogID != -1) {
try {
boolean matchedID = false;
for (int i = 0; i < blogIDs.length; i++) {
if (blogIDs[i] == lastBlogID) {
matchedID = true;
WordPress.currentBlog = new Blog(blogIDs[i], context);
}
}
if (!matchedID) {
WordPress.currentBlog = new Blog(blogIDs[0], context);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (blogIDs.length > 0)
WordPress.currentBlog = new Blog(blogIDs[0], context);
}
if (WordPress.currentBlog != null) {
updateBlavatarImage();
refreshButton = (Button) findViewById(R.id.action_refresh);
blogTitle.setText(EscapeUtils.unescapeHtml(WordPress.currentBlog
.getBlogName()));
rl = (RelativeLayout) findViewById(R.id.blogSelector);
rl.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialogBuilder = new AlertDialog.Builder(context);
dialogBuilder.setTitle(getResources().getText(
R.string.choose_blog));
dialogBuilder.setItems(blogNames,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int pos) {
blogTitle.setText(blogNames[pos]);
WordPress.currentBlog = new Blog(
blogIDs[pos], context);
settingsDB.updateLastBlogID(context,
blogIDs[pos]);
updateBlavatarImage();
if (onBlogChangedListener != null) {
onBlogChangedListener.OnBlogChanged();
}
}
});
dialogBuilder.show();
}
});
ImageButton showDashboard = (ImageButton) findViewById(R.id.home_small);
showDashboard.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (dashboard.getVisibility() == View.GONE) {
showDashboardOverlay();
} else {
Animation fadeOutAnimation = AnimationUtils
.loadAnimation(
context,
R.anim.shrink_from_bottomleft_to_topright);
dashboard.startAnimation(fadeOutAnimation);
dashboard.setVisibility(View.GONE);
}
}
});
//dashboard button click handlers
Button writeButton = (Button) findViewById(R.id.dashboard_write_btn);
writeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, EditPost.class);
i.putExtra("id", WordPress.currentBlog.getId());
i.putExtra("isNew", true);
i.putExtra("option", "");
context.startActivity(i);
}
});
Button postsButton = (Button) findViewById(R.id.dashboard_posts_btn);
postsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, ViewPosts.class);
context.startActivity(i);
}
});
Button pagesButton = (Button) findViewById(R.id.dashboard_pages_btn);
pagesButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, ViewPosts.class);
i.putExtra("id", WordPress.currentBlog.getId());
i.putExtra("isNew", true);
i.putExtra("viewPages", true);
context.startActivity(i);
}
});
Button commentsButton = (Button) findViewById(R.id.dashboard_comments_btn);
commentsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, ViewComments.class);
i.putExtra("id", WordPress.currentBlog.getId());
i.putExtra("isNew", true);
context.startActivity(i);
}
});
Button statsButton = (Button) findViewById(R.id.dashboard_stats_btn);
statsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, ViewStats.class);
i.putExtra("id", WordPress.currentBlog.getId());
i.putExtra("isNew", true);
context.startActivity(i);
}
});
Button settingsButton = (Button) findViewById(R.id.dashboard_settings_btn);
settingsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, Settings.class);
i.putExtra("id", WordPress.currentBlog.getId());
i.putExtra("isNew", true);
context.startActivity(i);
}
});
Button subsButton = (Button) findViewById(R.id.dashboard_subs_btn);
subsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, About.class);
i.putExtra("id", WordPress.currentBlog.getId());
i.putExtra("loadReader", true);
context.startActivity(i);
}
});
Button picButton = (Button) findViewById(R.id.dashboard_picture_btn);
picButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, EditPost.class);
i.putExtra("option", "newphoto");
i.putExtra("isNew", true);
context.startActivity(i);
}
});
Button videoButton = (Button) findViewById(R.id.dashboard_video_btn);
videoButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(context, EditPost.class);
i.putExtra("option", "newvideo");
i.putExtra("isNew", true);
context.startActivity(i);
}
});
}
}
protected void showDashboardOverlay() {
dashboard.setVisibility(View.VISIBLE);
Animation fadeInAnimation = AnimationUtils
.loadAnimation(context,
R.anim.grow_from_topright_to_bottomleft);
dashboard.startAnimation(fadeInAnimation);
}
public void showDashboard() {
final ImageButton showDashboard = (ImageButton) findViewById(R.id.home_small);
showDashboard.postDelayed(new Runnable() {
public void run() {
if (dashboard.getVisibility() == View.GONE) {
showDashboardOverlay();
}
}
}, 0);
}
private void updateBlavatarImage() {
ImageView i = (ImageView) findViewById(R.id.blavatar_img);
i.setImageDrawable(getResources().getDrawable(R.drawable.wp_logo_home));
String url = WordPress.currentBlog.getUrl();
url = url.replace("http://", "");
url = url.replace("https://", "");
String[] urlSplit = url.split("/");
url = urlSplit[0];
url = "http://gravatar.com/blavatar/"
+ ViewComments.getMd5Hash(url.trim()) + "?s=60&d=404";
ImageHelper ih = new ImageHelper();
BitmapDownloaderTask task = ih.new BitmapDownloaderTask(i);
task.execute(url);
}
public void reloadBlogs() {
onFinishInflate();
}
// Listener for when user changes blog in the ActionBar
public interface OnBlogChangedListener {
public abstract void OnBlogChanged();
}
public void setOnBlogChangedListener(OnBlogChangedListener listener) {
onBlogChangedListener = listener;
}
public void startRotatingRefreshIcon() {
RotateAnimation anim = new RotateAnimation(0.0f, 180.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(800);
ImageView iv = (ImageView) findViewById(R.id.refresh_icon);
iv.startAnimation(anim);
}
public void stopRotatingRefreshIcon() {
ImageView iv = (ImageView) findViewById(R.id.refresh_icon);
iv.clearAnimation();
}
}