/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.controller;
import java.util.ArrayList;
import java.util.List;
import WriteReviewOperation.MediaRef;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.LinearLayout;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.ui.view.ColumnGridView;
import com.galaxy.meetup.client.android.ui.view.ColumnGridView.OnScrollListener;
import com.galaxy.meetup.client.android.ui.view.ComposeBarView;
import com.galaxy.meetup.client.android.ui.view.ComposeBarView.OnComposeBarMeasuredListener;
import com.galaxy.meetup.client.android.ui.view.ImageResourceView;
/**
*
* @author sihai
*
*/
public class ComposeBarController implements OnClickListener, OnScrollListener,
OnComposeBarMeasuredListener {
private static int sActionBarHeight;
private static Drawable sOverlayDrawable;
private static int sRecentImagesDefaultPadding;
private static int sRecentImagesDimension;
private static Drawable sSelectorDrawable;
private boolean mAlwaysHide;
private ComposeBarListener mComposeBarListener;
private int mCumulativeTouchSlop;
private float mCurrentOffset;
private int mCurrentTouchDelta;
private View mFloatingBarView;
private boolean mLandscape;
private List mRecentImageRefs;
private List mRecentImageViews;
private int mRecentImagesMargin;
private int mRecentImagesThatFitOnScreen;
private int mState;
private final android.view.animation.Animation.AnimationListener mSlideInListener = new android.view.animation.Animation.AnimationListener() {
public final void onAnimationEnd(Animation animation) {
if(1 == mState) {
mState = 2;
mCurrentOffset = 0.0F;
} else if(2 == mState) {
} else if(3 == mState) {
mState = 0;
ComposeBarController composebarcontroller = ComposeBarController.this;
float f;
if(mLandscape)
f = mFloatingBarView.getWidth();
else
f = mFloatingBarView.getHeight();
composebarcontroller.mCurrentOffset = f;
} else {
}
updateVisibility();
}
public final void onAnimationRepeat(Animation animation)
{
}
public final void onAnimationStart(Animation animation) {
if(0 == mState) {
mState = 1;
} else if(1 == mState) {
} else if(2 == mState) {
mState = 3;
} else {
}
updateVisibility();
}
};
public ComposeBarController(View view, boolean flag, ComposeBarListener composebarlistener) {
mRecentImagesThatFitOnScreen = 10;
mRecentImageViews = new ArrayList(10);
mState = 0;
mFloatingBarView = view;
mLandscape = flag;
mComposeBarListener = composebarlistener;
((ComposeBarView)mFloatingBarView).setOnComposeBarMeasuredListener(this);
if(sRecentImagesDimension == 0) {
Resources resources = view.getResources();
sOverlayDrawable = resources.getDrawable(R.drawable.recent_images_border);
sSelectorDrawable = resources.getDrawable(R.drawable.list_selected_holo);
sRecentImagesDimension = (int)resources.getDimension(R.dimen.compose_bar_recent_images_dimension);
sRecentImagesDefaultPadding = (int)resources.getDimension(R.dimen.compose_bar_recent_images_default_padding);
sActionBarHeight = (int)resources.getDimension(R.dimen.host_action_bar_height);
}
android.content.Context context = view.getContext();
mCumulativeTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
for(int i = 9; i >= 0; i--) {
ImageResourceView imageresourceview = new ImageResourceView(context);
imageresourceview.setLayoutParams(new android.widget.LinearLayout.LayoutParams(sRecentImagesDimension, sRecentImagesDimension));
imageresourceview.setPadding(sRecentImagesDefaultPadding, sRecentImagesDefaultPadding, sRecentImagesDefaultPadding, sRecentImagesDefaultPadding);
imageresourceview.setSizeCategory(2);
imageresourceview.setScaleMode(1);
imageresourceview.setFadeIn(true);
imageresourceview.setClickable(true);
imageresourceview.setSelector(sSelectorDrawable);
mRecentImageViews.add(imageresourceview);
}
}
public final void forceHide()
{
mAlwaysHide = true;
mFloatingBarView.clearAnimation();
mState = 0;
float f;
if(mLandscape)
f = mFloatingBarView.getWidth();
else
f = mFloatingBarView.getHeight();
startAnimation(f, 0);
updateVisibility();
}
public final void forceShow()
{
mAlwaysHide = false;
mFloatingBarView.clearAnimation();
mState = 2;
startAnimation(0.0F, 0);
updateVisibility();
}
public final void onClick(View view)
{
boolean flag = true;
int i = view.getId();
if(i == R.id.compose_image_bar_close)
dismissRecentImages(flag);
else
if(i == R.id.compose_image_bar_share)
{
ArrayList arraylist = new ArrayList();
int j = 0;
for(int k = mRecentImageRefs.size(); j < k; j++)
if(((ImageResourceView)mRecentImageViews.get(j)).isSelected())
arraylist.add(mRecentImageRefs.get(j));
if(mComposeBarListener != null)
mComposeBarListener.onShareRecentImages(arraylist);
dismissRecentImages(false);
} else
{
if(view.isSelected())
flag = false;
view.setSelected(flag);
updateShareButton();
}
}
public final void onComposeBarMeasured(int i, int j)
{
int k;
int l;
if(mLandscape)
k = j - sActionBarHeight;
else
k = i;
l = sRecentImagesDefaultPadding + sRecentImagesDimension;
mRecentImagesThatFitOnScreen = Math.max(0, Math.min(10, k / l));
if(mRecentImagesThatFitOnScreen > 0)
mRecentImagesMargin = (k - l * mRecentImagesThatFitOnScreen) / (2 * mRecentImagesThatFitOnScreen);
else
mRecentImagesMargin = 0;
updateBarView();
}
public final void onScroll(ColumnGridView columngridview, int i, int j, int k, int l, int i1) {
if(mAlwaysHide || j >= k) {
return;
}
boolean flag;
if(i1 < 0 && mCurrentTouchDelta > 0 || i1 > 0 && mCurrentTouchDelta < 0)
mCurrentTouchDelta = 0;
mCurrentTouchDelta = i1 + mCurrentTouchDelta;
if(mCurrentTouchDelta > 0)
flag = true;
else
flag = false;
if(mState == 0 && shouldShowRecentImages())
dismissRecentImages(false);
if(mCurrentTouchDelta <= -mCumulativeTouchSlop || mCurrentTouchDelta >= mCumulativeTouchSlop)
{
if(!(mState != 0 && mState != 3 || !flag))
startAnimation(0.0F, 200);
else if(!(mState != 2 && mState != 1 || flag)) {
if(mLandscape)
{
startAnimation(mFloatingBarView.getWidth(), 200);
mCurrentOffset = mFloatingBarView.getWidth();
} else
{
startAnimation(mFloatingBarView.getHeight(), 200);
mCurrentOffset = mFloatingBarView.getHeight();
}
}
}
updateVisibility();
}
public final void onScrollStateChanged(ColumnGridView columngridview, int i)
{
if(!mAlwaysHide && i != 1)
mCurrentTouchDelta = 0;
}
public final void setRecentImageRefs(ArrayList arraylist)
{
mRecentImageRefs = arraylist;
updateBarView();
updateShareButton();
}
private void dismissRecentImages(boolean flag)
{
setRecentImageRefs(null);
if(mComposeBarListener != null)
mComposeBarListener.onDismissRecentImages(flag);
}
private android.widget.LinearLayout.LayoutParams getRecentImagesLayoutParams()
{
android.widget.LinearLayout.LayoutParams layoutparams = new android.widget.LinearLayout.LayoutParams(sRecentImagesDimension, sRecentImagesDimension, 1.0F);
if(mLandscape)
layoutparams.setMargins(0, mRecentImagesMargin, 0, mRecentImagesMargin);
else
layoutparams.setMargins(mRecentImagesMargin, 0, mRecentImagesMargin, 0);
return layoutparams;
}
private boolean shouldShowRecentImages()
{
boolean flag;
if(mRecentImageRefs != null && mRecentImageRefs.size() > 0)
flag = true;
else
flag = false;
return flag;
}
private void startAnimation(float f, int i)
{
TranslateAnimation translateanimation;
if(mLandscape)
translateanimation = new TranslateAnimation(mCurrentOffset, f, 0.0F, 0.0F);
else
translateanimation = new TranslateAnimation(0.0F, 0.0F, mCurrentOffset, f);
translateanimation.setDuration(i);
translateanimation.setFillAfter(true);
if(i > 0)
translateanimation.setAnimationListener(mSlideInListener);
mFloatingBarView.startAnimation(translateanimation);
}
private void updateBarView()
{
byte byte0 = 8;
View view = mFloatingBarView.findViewById(R.id.compose_image_bar);
if(mRecentImageRefs == null || mRecentImageViews == null)
{
view.setVisibility(byte0);
} else
{
boolean flag = shouldShowRecentImages();
if(flag)
byte0 = 0;
view.setVisibility(byte0);
LinearLayout linearlayout = (LinearLayout)view.findViewById(R.id.compose_image_container);
linearlayout.removeAllViews();
View view1 = mFloatingBarView.findViewById(R.id.compose_image_bar_close);
ComposeBarController composebarcontroller;
if(flag)
composebarcontroller = this;
else
composebarcontroller = null;
view1.setOnClickListener(composebarcontroller);
if(flag)
{
int i = Math.min(mRecentImageRefs.size(), mRecentImagesThatFitOnScreen);
for(int j = 0; j < i; j++)
{
ImageResourceView imageresourceview2 = (ImageResourceView)mRecentImageViews.get(j);
imageresourceview2.onRecycle();
imageresourceview2.setMediaRef((MediaRef)mRecentImageRefs.get(j));
imageresourceview2.setOnClickListener(this);
imageresourceview2.setOverlay(sOverlayDrawable);
linearlayout.addView(imageresourceview2, getRecentImagesLayoutParams());
}
for(int k = i; k < mRecentImagesThatFitOnScreen; k++)
{
ImageResourceView imageresourceview1 = (ImageResourceView)mRecentImageViews.get(k);
imageresourceview1.onRecycle();
imageresourceview1.setBackgroundResource(R.drawable.empty_recent_image);
imageresourceview1.setOnClickListener(null);
imageresourceview1.setSelected(false);
linearlayout.addView(imageresourceview1, getRecentImagesLayoutParams());
}
for(int l = Math.max(mRecentImageRefs.size(), mRecentImagesThatFitOnScreen); l < 10; l++)
{
ImageResourceView imageresourceview = (ImageResourceView)mRecentImageViews.get(l);
imageresourceview.onRecycle();
imageresourceview.setBackgroundResource(0);
imageresourceview.setOnClickListener(null);
imageresourceview.setSelected(false);
}
}
view.invalidate();
}
}
private void updateShareButton() {
if(null == mRecentImageRefs || null == mRecentImageViews) {
return;
}
int j;
j = mRecentImageRefs.size();
boolean flag = false;
for(int i = 0; i < j; i++) {
if(((ImageResourceView)mRecentImageViews.get(i)).isSelected()) {
flag = true;
break;
}
}
Button button = (Button)mFloatingBarView.findViewById(R.id.compose_image_bar_share);
int k;
if(flag)
k = R.color.compose_bar_share_button_enabled;
else
k = R.color.compose_bar_share_button_disabled;
button.setEnabled(flag);
button.setTextColor(button.getResources().getColor(k));
button.setOnClickListener(this);
}
private void updateVisibility() {
boolean flag;
View view;
int i;
if(mState == 0)
flag = false;
else
if(mLandscape && mFloatingBarView.getWidth() > 0 && mCurrentOffset > (float)mFloatingBarView.getWidth() || !mLandscape && mFloatingBarView.getHeight() > 0 && mCurrentOffset > (float)mFloatingBarView.getHeight())
flag = false;
else
flag = true;
view = mFloatingBarView;
if(flag)
i = 0;
else
i = 8;
view.setVisibility(i);
mFloatingBarView.setClickable(flag);
mFloatingBarView.findViewById(R.id.compose_post).setClickable(flag);
mFloatingBarView.findViewById(R.id.compose_photos).setClickable(flag);
mFloatingBarView.findViewById(R.id.compose_location).setClickable(flag);
mFloatingBarView.findViewById(R.id.compose_custom).setClickable(flag);
mFloatingBarView.findViewById(R.id.compose_image_bar_share).setClickable(flag);
mFloatingBarView.findViewById(R.id.compose_image_bar_close).setClickable(flag);
for(int j = -1 + mRecentImageViews.size(); j >= 0; j--)
((ImageResourceView)mRecentImageViews.get(j)).setClickable(flag);
if(flag)
mFloatingBarView.requestLayout();
}
public static interface ComposeBarListener {
void onDismissRecentImages(boolean flag);
void onShareRecentImages(ArrayList arraylist);
}
}