/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package view;
import android.app.Activity;
import android.os.Build;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.unfoldingword.mobile.R;
/**
* Created by Fechner on 7/1/15.
*/
public class UWReadingToolbarViewGroup {
private Activity activity;
private UWReadingToolbarListener listener;
private Toolbar toolbar;
private ImageButton leftButton;
private LinearLayout chapterLayout;
private TextView chapterTextView;
private LinearLayout mainVersionLayout;
private TextView mainVersionTextView;
private LinearLayout secondaryVersionLayout;
private TextView secondaryVersionTextView;
private FrameLayout centerMarker;
private FrameLayout rightButtonPlaceholder;
private boolean isMinni = false;
private boolean hasTwoVersions = false;
private ReadingToolbarViewData viewData;
public UWReadingToolbarViewGroup(Toolbar toolbar, Activity activity, ReadingToolbarViewData viewData, UWReadingToolbarListener listener) {
this.viewData = viewData;
this.listener = listener;
this.toolbar = toolbar;
this.activity = activity;
setupViews();
}
private void setupViews(){
getViews();
setupClickListeners();
updateLabels();
layoutViews();
}
private void getViews(){
this.leftButton = (ImageButton) activity.findViewById(R.id.reading_bar_back_button);
this.chapterLayout = (LinearLayout) activity.findViewById(R.id.reading_toolbar_chapter_button);
this.chapterTextView = (TextView) activity.findViewById(R.id.reading_toolbar_chapter_text);
this.mainVersionLayout = (LinearLayout) activity.findViewById(R.id.reading_toolbar_main_version_button);
this.mainVersionTextView = (TextView) activity.findViewById(R.id.reading_toolbar_main_version_text);
this.secondaryVersionLayout = (LinearLayout) activity.findViewById(R.id.reading_toolbar_secondary_version_button);
this.secondaryVersionTextView = (TextView) activity.findViewById(R.id.reading_toolbar_secondary_version_text);
this.rightButtonPlaceholder = (FrameLayout) activity.findViewById(R.id.reading_toolbar_right_button_placeholder);
this.centerMarker = (FrameLayout) activity.findViewById(R.id.center_marker);
}
private void setupClickListeners(){
this.leftButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.backButtonClicked();
}
});
this.chapterLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.chaptersButtonClicked();
}
});
this.mainVersionLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.mainVersionButtonClicked();
}
});
this.secondaryVersionLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.secondaryVersionButtonClicked();
}
});
}
public void setViewData(ReadingToolbarViewData viewData) {
this.viewData = viewData;
updateLabels();
}
private void updateLabels(){
updateLabel(viewData.getTitleText(), chapterTextView, chapterLayout);
updateLabel(viewData.getMainVersionText(), mainVersionTextView, mainVersionLayout);
updateLabel(viewData.getSecondaryVersionText(), secondaryVersionTextView, secondaryVersionLayout);
if(!hasTwoVersions){
secondaryVersionLayout.setVisibility(View.GONE);
}
}
private boolean isValidToDisplay(String text){
return text != null && text.length() > 0;
}
private void updateLabel(String text, TextView textView, ViewGroup containingLayout){
if(isValidToDisplay(text)){
textView.setText(text);
containingLayout.setVisibility(View.VISIBLE);
}
else{
containingLayout.setVisibility(View.INVISIBLE);
}
}
public boolean hasTwoVersions() {
return hasTwoVersions;
}
public void setHasTwoVersions(boolean hasTwoVersions) {
this.hasTwoVersions = hasTwoVersions;
layoutViews();
}
public boolean isMinni() {
return isMinni;
}
public void setIsMinni(boolean isSmall) {
this.isMinni = isSmall;
layoutViews();
}
public boolean toggleIsMinni(){
setIsMinni(!isMinni);
return isMinni;
}
public void setViewState(boolean isMinni, boolean hasTwoVersions){
this.isMinni = isMinni;
this.hasTwoVersions = hasTwoVersions;
layoutViews();
}
private void layoutViews(){
layoutChapterView();
layoutMainVersionView();
layoutSecondaryVersionView();
layoutToolbar();
setViewVisibilities();
}
private void setViewVisibilities(){
rightButtonPlaceholder.setVisibility((!isMinni && hasTwoVersions) ? View.INVISIBLE : View.GONE);
if(hasTwoVersions){
secondaryVersionLayout.setVisibility((isValidToDisplay(viewData.getSecondaryVersionText())) ? View.VISIBLE : View.INVISIBLE);
leftButton.setVisibility((isMinni) ? View.GONE : View.VISIBLE);
}
else{
secondaryVersionLayout.setVisibility(View.GONE);
leftButton.setVisibility((isMinni) ? View.INVISIBLE : View.VISIBLE);
}
}
private void layoutToolbar(){
ViewGroup.LayoutParams toolbarParams = toolbar.getLayoutParams();
toolbarParams.height = (isMinni)? getSizeForDp(30) : ViewGroup.LayoutParams.WRAP_CONTENT;
toolbar.setLayoutParams(toolbarParams);
}
private void layoutChapterView(){
RelativeLayout.LayoutParams chapterParams = new RelativeLayout.LayoutParams(chapterLayout.getLayoutParams());
chapterParams.addRule((!isMinni && !hasTwoVersions) ? RelativeLayout.CENTER_IN_PARENT : RelativeLayout.CENTER_HORIZONTAL);
chapterParams.height = getSizeForDp((!isMinni && !hasTwoVersions)? 50 : 25);
chapterParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
chapterTextView.setMaxLines((isMinni)? 1 : 2);
if(isMinni || hasTwoVersions){
chapterParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
}
if(!isMinni && !hasTwoVersions){
chapterParams.addRule(getSDKSafeRightOf(), leftButton.getId());
chapterParams.addRule(getSDKSafeLeftOf(), mainVersionLayout.getId());
chapterParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
}
else if (!hasTwoVersions && isMinni){
chapterParams.addRule(getSDKSafeLeftOf(), mainVersionLayout.getId());
chapterParams.addRule(getSDKSafeAlignParentLeft());
chapterParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
}
else if( hasTwoVersions && isMinni){
chapterParams.addRule(getSDKSafeRightOf(), secondaryVersionLayout.getId());
chapterParams.addRule(getSDKSafeLeftOf(), mainVersionLayout.getId());
}
else{
chapterParams.addRule(getSDKSafeRightOf(), leftButton.getId());
chapterParams.addRule(getSDKSafeLeftOf(), rightButtonPlaceholder.getId());
}
chapterLayout.setLayoutParams(chapterParams);
}
private void layoutMainVersionView(){
RelativeLayout.LayoutParams versionParams = new RelativeLayout.LayoutParams(mainVersionLayout.getLayoutParams());
versionParams.height = getSizeForDp((!isMinni && !hasTwoVersions)? 50 : 25);
versionParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
if(hasTwoVersions && !isMinni){
versionParams.addRule(getSDKSafeLeftOf(), rightButtonPlaceholder.getId());
versionParams.addRule(getSDKSafeRightOf(), centerMarker.getId());
versionParams.addRule(RelativeLayout.BELOW, chapterLayout.getId());
}
else{
versionParams.addRule(getSDKSafeAlignParentRight());
}
mainVersionLayout.setLayoutParams(versionParams);
}
private void layoutSecondaryVersionView(){
if(hasTwoVersions) {
RelativeLayout.LayoutParams secondaryVersionParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, getSizeForDp(25));
if(isMinni){
secondaryVersionParams.addRule(getSDKSafeAlignParentLeft());
}
else{
secondaryVersionParams.addRule(RelativeLayout.BELOW, chapterLayout.getId());
secondaryVersionParams.addRule(getSDKSafeRightOf(), leftButton.getId());
secondaryVersionParams.addRule(getSDKSafeLeftOf(), centerMarker.getId());
}
secondaryVersionLayout.setLayoutParams(secondaryVersionParams);
}
}
public void setBackgroundColor(int color){
this.toolbar.setBackgroundColor(color);
}
public interface UWReadingToolbarListener{
/**
* Toolbar's back button was
*/
void backButtonClicked();
/**
* Toolbar's chapters button was clicked
*/
void chaptersButtonClicked();
/**
* Toolbar's main version button was clicked
*/
void mainVersionButtonClicked();
/**
* Toolbar's secondary version button was clicked
*/
void secondaryVersionButtonClicked();
}
private int getSizeForDp(int sizeInDP){
return (int) (sizeInDP * activity.getResources().getDisplayMetrics().density + 0.5f) ;
}
private static int getSDKSafeAlignParentRight(){
return (Build.VERSION.SDK_INT >= 17) ? RelativeLayout.ALIGN_PARENT_END : RelativeLayout.ALIGN_PARENT_RIGHT;
}
private static int getSDKSafeAlignParentLeft(){
return (Build.VERSION.SDK_INT >= 17) ? RelativeLayout.ALIGN_PARENT_START : RelativeLayout.ALIGN_PARENT_LEFT;
}
private static int getSDKSafeLeftOf(){
return (Build.VERSION.SDK_INT >= 17) ? RelativeLayout.START_OF : RelativeLayout.LEFT_OF;
}
private static int getSDKSafeRightOf(){
return (Build.VERSION.SDK_INT >= 17) ? RelativeLayout.END_OF : RelativeLayout.RIGHT_OF;
}
}