/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package view;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.unfoldingword.mobile.R;
import model.DownloadState;
import model.daoModels.Version;
import utils.RowStatusHelper;
import utils.ViewHelper;
/**
* Created by Fechner on 8/19/15.
*/
public class VersionRowViewHolder {
private View baseView;
private VersionInformationViewHolder versionInformationHolder;
private TextView languageNameTextView;
private ImageView languageTypeImageView;
private LinearLayout versionInfoLayout;
private LinearLayout clickableLayout;
private FrameLayout infoFrame;
private Button status;
private Button informationStatus;
private ImageView downloadButton;
private FrameLayout downloadFrame;
private ProgressBar downloadProgressBar;
private Button downloadAudioButton;
private ViewGroup downloadingAudioLayout;
private Button downloadVideoButton;
private ViewGroup downloadingVideoLayout;
private Button deleteButton;
private Context context;
private Version version;
private VersionRowViewHolderListener listener;
public VersionRowViewHolder(Context context, Version version, View baseView, VersionRowViewHolderListener listener) {
this.listener = listener;
this.context = context;
this.version = version;
setupViews(baseView);
setupOnClickListeners();
}
private void setupViews(View parentView){
baseView = parentView;
languageNameTextView = (TextView) baseView.findViewById(R.id.language_name_text_view);
languageTypeImageView = (ImageView) baseView.findViewById(R.id.language_type_image_view);
versionInfoLayout = (LinearLayout) baseView.findViewById(R.id.version_information_layout);
infoFrame = (FrameLayout) baseView.findViewById(R.id.info_image_frame);
status = (Button) baseView.findViewById(R.id.verification_status);
// informationStatus = (Button) baseView.findViewById(R.id.verification_information_status);
downloadFrame = (FrameLayout) baseView.findViewById(R.id.download_status_frame);
downloadProgressBar = (ProgressBar) baseView.findViewById(R.id.download_progress_bar);
downloadButton = (ImageView) baseView.findViewById(R.id.download_status_image);
// downloadAudioButton = (Button) baseView.findViewById(R.id.download_audio_button);
// downloadingAudioLayout = (ViewGroup) baseView.findViewById(R.id.versions_downloading_audio_layout);
// downloadVideoButton = (Button) baseView.findViewById(R.id.download_video_button);
// downloadingVideoLayout = (ViewGroup) baseView.findViewById(R.id.versions_downloading_video_layout);
deleteButton = (Button) baseView.findViewById(R.id.delete_button);
clickableLayout = (LinearLayout) baseView.findViewById(R.id.clickableRow);
versionInformationHolder = new VersionInformationViewHolder(baseView);
}
public void setupViewForVersion(final Version version, boolean isSelected){
this.version = version;
int state = isSelected? 2 : 1;
setRowState();
versionInformationHolder.setInfoForVersion(context, version);
languageNameTextView.setTextColor(RowStatusHelper.getColorForState(context, state));
languageTypeImageView.setImageResource(ViewContentHelper.getDarkCheckingLevelImageResource(Integer.parseInt(version.getStatusCheckingLevel())));
languageNameTextView.setText(version.getName());
int verificationStatus = version.getVerificationStatus();
status.setBackgroundResource(RowStatusHelper.getColorForStatus(verificationStatus));
status.setText(RowStatusHelper.getButtonTextForStatus(context, verificationStatus));
informationStatus.setBackgroundResource(RowStatusHelper.getColorForStatus(verificationStatus));
informationStatus.setText(RowStatusHelper.getButtonTextForStatus(context, verificationStatus));
// setupForAudioDownloadState(version.getAudioDownloadState(), version.hasAudio() && version.getSaveState() == DownloadState.DOWNLOAD_STATE_DOWNLOADED.ordinal());
// setupForVideoDownloadState(version.getVideoDownloadState(), false);
}
private void setupOnClickListeners(){
final VersionRowViewHolder finalHolder = this;
clickableLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.versionWasSelected(version);
}
});
downloadFrame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.downloadWasPressed(finalHolder, version);
}
});
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.deletePressed(version);
}
});
infoFrame.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
infoWasClicked();
}
});
downloadAudioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.audioButtonWasClicked(finalHolder, version);
}
});
downloadVideoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.videoButtonWasClicked(finalHolder, version);
}
});
}
private void infoWasClicked() {
if (versionInfoLayout.getVisibility() == View.GONE) {
ViewHelper.expand(versionInfoLayout);
// CustomSlideAnimationRelativeLayout animationRelativeLayout = new CustomSlideAnimationRelativeLayout(versionInfoLayout, 300, CustomSlideAnimationRelativeLayout.EXPAND);
// versionInfoLayout.startAnimation(animationRelativeLayout);
} else {
ViewHelper.collapse(versionInfoLayout);
// CustomSlideAnimationRelativeLayout animationRelativeLayout = new CustomSlideAnimationRelativeLayout(versionInfoLayout, 300, CustomSlideAnimationRelativeLayout.COLLAPSE);
// versionInfoLayout.startAnimation(animationRelativeLayout);
}
}
private void setRowState(){
DownloadState state = DownloadState.DOWNLOAD_STATE_DOWNLOADING;
boolean isDownloaded = (state == DownloadState.DOWNLOAD_STATE_DOWNLOADED);
versionInformationHolder.setRowState(isDownloaded);
status.setVisibility((isDownloaded) ? View.VISIBLE : View.GONE);
downloadButton.setVisibility((state == DownloadState.DOWNLOAD_STATE_NONE)? View.VISIBLE : View.GONE);
downloadProgressBar.setVisibility((state == DownloadState.DOWNLOAD_STATE_DOWNLOADING) ? View.VISIBLE : View.GONE);
deleteButton.setVisibility((isDownloaded) ? View.VISIBLE : View.GONE);
clickableLayout.setClickable(isDownloaded);
downloadFrame.setClickable(!isDownloaded);
downloadFrame.setVisibility((!isDownloaded) ? View.VISIBLE : View.GONE);
}
public void setupForAudioDownloadState(DownloadState state, boolean canDownload){
final VersionRowViewHolder finalHolder = this;
setupForDownloadingAudio(state == DownloadState.DOWNLOAD_STATE_DOWNLOADING);
if(!canDownload) {
downloadAudioButton.setVisibility( View.GONE);
}
else if(state == DownloadState.DOWNLOAD_STATE_DOWNLOADED){
downloadAudioButton.setText("Delete Audio");
downloadAudioButton.setTextColor(context.getResources().getColor(R.color.delete_button_text_color));
downloadAudioButton.setBackgroundResource(R.drawable.delete_button_click);
downloadAudioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.deleteAudioWasPressed(version);
}
});
}
else{
downloadAudioButton.setText("Download Audio");
downloadAudioButton.setTextColor(context.getResources().getColor(R.color.black));
downloadAudioButton.setBackgroundResource(R.drawable.gray_button_selector);
downloadAudioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.audioButtonWasClicked(finalHolder, version);
}
});
}
}
public void setupForVideoDownloadState(DownloadState state, boolean canDownload) {
setupForDownloadingVideo(state == DownloadState.DOWNLOAD_STATE_DOWNLOADING);
downloadVideoButton.setVisibility((canDownload) ? View.VISIBLE : View.GONE);
}
private void setupForDownloadingAudio(boolean downloading){
this.downloadingAudioLayout.setVisibility((downloading)? View.VISIBLE : View.GONE);
this.downloadAudioButton.setVisibility((downloading)? View.GONE : View.VISIBLE);
}
private void setupForDownloadingVideo(boolean downloading){
this.downloadingVideoLayout.setVisibility((downloading)? View.VISIBLE : View.GONE);
this.downloadVideoButton.setVisibility((downloading)? View.GONE : View.VISIBLE);
}
public interface VersionRowViewHolderListener{
void deleteAudioWasPressed(Version version);
void downloadWasPressed(VersionRowViewHolder holder, Version version);
void deletePressed(Version version);
void versionWasSelected(Version version);
void audioButtonWasClicked(VersionRowViewHolder holder, Version version);
void videoButtonWasClicked(VersionRowViewHolder holder, Version version);
}
}