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(); } }