package com.wealthfront.magellan.sample.advanced.tide; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import com.wealthfront.magellan.BaseScreenView; import com.wealthfront.magellan.sample.advanced.R; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Locale; import butterknife.BindView; import static butterknife.ButterKnife.bind; class TideDetailsView extends BaseScreenView<TideDetailsScreen> { @BindView(R.id.loading) ProgressBar loading; @BindView(R.id.tideDetailsContent) View content; @BindView(R.id.currentWaterLevel) TextView currentWaterLevel; @BindView(R.id.highestWaterLevel) TextView highestWaterLevel; @BindView(R.id.lowestWaterLevel) TextView lowestWaterLevel; @BindView(R.id.currentWaterLevelBottomSpacing) View currentWaterLevelBottomSpacing; @BindView(R.id.currentWaterLevelTopSpacing) View currentWaterLevelTopSpacing; TideDetailsView(Context context) { super(context); inflate(context, R.layout.tide_detail, this); bind(this); } public void setTideHeights( BigDecimal latestMeasuredTideHeight, BigDecimal lowestMeasuredTideHeight, BigDecimal highestMeasuredTideHeight) { showContent(); displayWaterLevelText(latestMeasuredTideHeight, lowestMeasuredTideHeight, highestMeasuredTideHeight); setVisibleWaterLevel(latestMeasuredTideHeight, lowestMeasuredTideHeight, highestMeasuredTideHeight); } private void showContent() { content.setAlpha(0f); content.setVisibility(VISIBLE); loading.animate().alpha(0f).setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { content.animate().alpha(1f).start(); loading.setVisibility(GONE); } }).start(); } private void displayWaterLevelText( BigDecimal latestMeasuredTideHeight, BigDecimal lowestMeasuredTideHeight, BigDecimal highestMeasuredTideHeight) { currentWaterLevel.setText(String.format(Locale.US, "Current Water Level: %.2f ft", latestMeasuredTideHeight.setScale(2, RoundingMode.HALF_UP))); highestWaterLevel.setText(String.format(Locale.US, "Today's Highest Water Level: %.2f ft", highestMeasuredTideHeight.setScale(2, RoundingMode.HALF_UP))); lowestWaterLevel.setText(String.format(Locale.US, "Today's Lowest Water Level: %.2f ft", lowestMeasuredTideHeight.setScale(2, RoundingMode.HALF_UP))); } private void setVisibleWaterLevel( BigDecimal latestMeasuredTideHeight, BigDecimal lowestMeasuredTideHeight, BigDecimal highestMeasuredTideHeight) { float percentOfMax = latestMeasuredTideHeight.subtract(lowestMeasuredTideHeight) .divide(highestMeasuredTideHeight.subtract(lowestMeasuredTideHeight), RoundingMode.HALF_UP) .multiply(BigDecimal.valueOf(100)).setScale(0, BigDecimal.ROUND_HALF_UP).floatValue(); currentWaterLevelBottomSpacing.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 2, percentOfMax)); currentWaterLevelTopSpacing.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 2, 100 - percentOfMax)); } }