package com.mopub.mobileads;
import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.mopub.common.util.Dips;
import com.mopub.common.util.Utils;
import com.mopub.mobileads.resource.CloseButtonDrawable;
import com.mopub.mobileads.resource.CountdownDrawable;
import com.mopub.mobileads.resource.LearnMoreDrawable;
import static android.graphics.Color.BLACK;
import static android.view.Gravity.CENTER_VERTICAL;
import static android.view.Gravity.LEFT;
import static android.view.Gravity.RIGHT;
import static android.view.ViewGroup.LayoutParams.FILL_PARENT;
class VastVideoToolbar extends LinearLayout {
private static final int TOOLBAR_HEIGHT_DIPS = 44;
private static final int THRESHOLD_FOR_HIDING_VIDEO_DURATION = 200;
private final ToolbarWidget mDurationWidget;
private final ToolbarWidget mLearnMoreWidget;
private final ToolbarWidget mCountdownWidget;
private final ToolbarWidget mCloseButtonWidget;
public VastVideoToolbar(final Context context) {
super(context);
setId((int) Utils.generateUniqueId());
// Consume all click events on the video toolbar
setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
final int videoToolbarHeight = Dips.dipsToIntPixels(TOOLBAR_HEIGHT_DIPS, getContext());
final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
FILL_PARENT,
videoToolbarHeight);
setLayoutParams(layoutParams);
setBackgroundColor(BLACK);
getBackground().setAlpha(180);
mDurationWidget = createDurationWidget();
mLearnMoreWidget = createLearnMoreWidget();
mCountdownWidget = createCountdownWidget();
mCloseButtonWidget = createCloseButtonWidget();
addView(mDurationWidget);
addView(mLearnMoreWidget);
addView(mCountdownWidget);
addView(mCloseButtonWidget);
}
String getDisplaySeconds(final long millisecondsRemaining) {
return String.valueOf(Math.round(Math.ceil(millisecondsRemaining / 1000f)));
}
void updateDurationWidget(final int remainingTime) {
if (remainingTime >= THRESHOLD_FOR_HIDING_VIDEO_DURATION) {
mDurationWidget.updateText("Ends in " + getDisplaySeconds(remainingTime) + " seconds");
} else if (remainingTime >= 0) {
mDurationWidget.updateText("Thanks for watching");
}
}
void updateCountdownWidget(final int remainingTime) {
if (remainingTime >= 0 && mCountdownWidget.getVisibility() == View.INVISIBLE) {
mCloseButtonWidget.setVisibility(View.GONE);
mCountdownWidget.setVisibility(View.VISIBLE);
}
mCountdownWidget.updateImageText(getDisplaySeconds(remainingTime));
}
void makeInteractable() {
// The countdown timer has ended and user can interact with close and learn more button
mCountdownWidget.setVisibility(View.GONE);
mLearnMoreWidget.setVisibility(View.VISIBLE);
mCloseButtonWidget.setVisibility(View.VISIBLE);
}
void setCloseButtonOnTouchListener(final OnTouchListener onTouchListener) {
mCloseButtonWidget.setOnTouchListener(onTouchListener);
}
void setLearnMoreButtonOnTouchListener(final OnTouchListener onTouchListener) {
mLearnMoreWidget.setOnTouchListener(onTouchListener);
}
private ToolbarWidget createDurationWidget() {
return new ToolbarWidget.Builder(getContext())
.weight(2f)
.widgetGravity(CENTER_VERTICAL | LEFT)
.hasText()
.textAlign(RelativeLayout.ALIGN_PARENT_LEFT)
.build();
}
private ToolbarWidget createLearnMoreWidget() {
return new ToolbarWidget.Builder(getContext())
.weight(1f)
.widgetGravity(CENTER_VERTICAL | RIGHT)
.defaultText("Learn More")
.drawable(new LearnMoreDrawable())
.visibility(View.INVISIBLE)
.build();
}
private ToolbarWidget createCountdownWidget() {
final CountdownDrawable countdownDrawable = new CountdownDrawable(getContext());
return new ToolbarWidget.Builder(getContext())
.weight(1f)
.widgetGravity(CENTER_VERTICAL | RIGHT)
.defaultText("Skip in")
.drawable(countdownDrawable)
.visibility(View.INVISIBLE)
.build();
}
private ToolbarWidget createCloseButtonWidget() {
return new ToolbarWidget.Builder(getContext())
.weight(1f)
.widgetGravity(CENTER_VERTICAL | RIGHT)
.defaultText("Close")
.drawable(new CloseButtonDrawable())
.visibility(View.GONE)
.build();
}
@Deprecated // for testing
ToolbarWidget getDurationWidget() {
return mDurationWidget;
}
@Deprecated // for testing
ToolbarWidget getLearnMoreWidget() {
return mLearnMoreWidget;
}
@Deprecated // for testing
ToolbarWidget getCountdownWidget() {
return mCountdownWidget;
}
@Deprecated // for testing
ToolbarWidget getCloseButtonWidget() {
return mCloseButtonWidget;
}
}