/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.javielinux.utils;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.javielinux.fragments.BaseListFragment;
import com.javielinux.infos.InfoSubMenuTweet;
import com.javielinux.infos.InfoTweet;
import com.javielinux.tweettopics2.R;
import com.javielinux.tweettopics2.ThemeManager;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
import java.util.ArrayList;
public class SplitActionBarMenu {
public interface SplitActionBarMenuListener {
void onShowSplitActionBarMenu(BaseListFragment fromFragment, InfoTweet infoTweet);
}
private FragmentActivity activity;
private int screenHeight;
private float splitActionBarMenuHeight;
private LinearLayout root_layout;
private HorizontalScrollView scroll_view_layout;
private LinearLayout main_layout;
/**
* Fragment desde el que se llama al SplitActionBar
*/
private BaseListFragment fromFragment;
public SplitActionBarMenu(FragmentActivity activity) {
init(activity);
}
public BaseListFragment getFromFragment() {
return fromFragment;
}
public void setFromFragment(BaseListFragment fromFragment) {
this.fromFragment = fromFragment;
}
private void init(FragmentActivity activity) {
this.activity = activity;
splitActionBarMenuHeight = activity.getResources().getDimension(R.dimen.actionbar_columns_height);
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
try {
Point size = new Point();
activity.getWindowManager().getDefaultDisplay().getSize(size);
screenHeight = size.y;
} catch (NoSuchMethodError e) {
screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
}
}
public void loadSplitActionBarMenu(ViewGroup root) {
View splitActionBarMenu = activity.getLayoutInflater().inflate(R.layout.split_action_bar_menu, null);
root_layout = (LinearLayout) splitActionBarMenu.findViewById(R.id.split_action_bar_menu_root);
scroll_view_layout = (HorizontalScrollView) splitActionBarMenu.findViewById(R.id.split_action_bar_menu_scroll_view);
main_layout = (LinearLayout) splitActionBarMenu.findViewById(R.id.split_action_bar_menu_container);
root_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
hideSplitActionBarMenu();
}
});
ThemeManager themeManager = new ThemeManager(activity);
themeManager.setTheme();
scroll_view_layout.setBackgroundDrawable(ImageUtils.createBackgroundDrawable(activity, themeManager.getColor("color_top_bar"), false, 0));
root.addView(splitActionBarMenu);
}
public void hideSplitActionBarMenu() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
root_layout.setVisibility(View.INVISIBLE);
} else {
ObjectAnimator translationY = ObjectAnimator.ofFloat(scroll_view_layout, "translationY", 0, - Utils.dip2px(activity, splitActionBarMenuHeight));
translationY.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(translationY);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
root_layout.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
animatorSet.start();
}
}
public boolean isShowing() {
return root_layout.getVisibility() == View.VISIBLE;
}
private void loadActionButtons(ArrayList<String> codes, final InfoTweet infoTweet, final long ownerColumn) {
main_layout.removeAllViews();
boolean is_first = true;
for (final String code : codes) {
if (is_first) {
is_first = false;
} else {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.0f);
layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
ImageView imageView = new ImageView(activity);
imageView.setBackgroundResource(R.drawable.action_bar_divider);
imageView.setLayoutParams(layoutParams);
main_layout.addView(imageView);
}
final InfoSubMenuTweet infoSubMenuTweet = new InfoSubMenuTweet(activity, code);
ImageButton imageButton = new ImageButton(activity);
imageButton.setBackgroundResource(R.drawable.default_background);
int padding = (int) activity.getResources().getDimension(R.dimen.default_padding);
imageButton.setPadding(padding, padding, padding, padding);
imageButton.setImageResource(infoSubMenuTweet.getResDrawable());
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
hideSplitActionBarMenu();
TweetActions.execByCode(code, activity, ownerColumn, infoTweet, getFromFragment());
}
});
imageButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Utils.showMessage(activity, activity.getResources().getString(infoSubMenuTweet.getResName()));
return true;
}
});
main_layout.addView(imageButton);
}
}
public void showSplitActionBarMenu(BaseListFragment fragment, InfoTweet infoTweet, long ownerColumn) {
setFromFragment(fragment);
ArrayList<String> codes = PreferenceUtils.getArraySubMenuTweet(activity);
if (codes.size() == 1) {
TweetActions.execByCode(codes.get(0), activity, ownerColumn, infoTweet);
} else {
loadActionButtons(codes, infoTweet, ownerColumn);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
root_layout.setVisibility(View.VISIBLE);
} else {
ObjectAnimator translationY = ObjectAnimator.ofFloat(scroll_view_layout, "translationY", - Utils.dip2px(activity, splitActionBarMenuHeight), 0);
translationY.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(translationY);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
root_layout.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animator) {
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
animatorSet.start();
}
}
}
}