/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package fragments;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.unfoldingword.mobile.R;
import butterknife.Bind;
import butterknife.ButterKnife;
import model.DataFileManager;
import model.DownloadState;
import model.daoModels.Version;
import model.parsers.MediaType;
import signing.Status;
import view.ViewContentHelper;
/**
* Created by PJ Fechner
* Fragment for showing the info of a Version
*/
public class VersionInfoFragment extends DialogFragment {
private static final String VERSION_PARAM = "VERSION_PARAM";
private static final String MEDIA_TYPE_PARAM = "MEDIA_TYPE_PARAM";
private Version version;
private MediaType type;
@Bind(R.id.version_information_checking_level_image)
ImageView checkingLevelImage;
@Bind(R.id.version_information_checking_level_text)
TextView checkingLevelText;
@Bind(R.id.version_information_resource_type_image)
ImageView resourceTypeImage;
@Bind(R.id.version_information_verification_information_status)
Button versionVerificationButton;
@Bind(R.id.version_information_verification_text_view)
TextView versionVerificationTextView;
@Bind(R.id.version_information_main_info_text_view)
TextView versionAuthenticationMainTextView;
//region setup
/**
* @param version Version that's desired to show
* @return
*/
public static VersionInfoFragment createFragment(Version version, MediaType type){
Bundle args = new Bundle();
args.putSerializable(VERSION_PARAM, version);
args.putSerializable(MEDIA_TYPE_PARAM, type);
VersionInfoFragment fragment = new VersionInfoFragment();
fragment.setArguments(args);
return fragment;
}
public VersionInfoFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
version = (Version) getArguments().getSerializable(VERSION_PARAM);
type = (MediaType) getArguments().getSerializable(MEDIA_TYPE_PARAM);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.version_information_view, container, false);
new VersionInfoViewHolder(getActivity().getApplicationContext(), view, version, type);
return view;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
//endregion
public static class VersionInfoViewHolder{
@Bind(R.id.version_information_checking_level_image)
ImageView checkingLevelImage;
@Bind(R.id.version_information_checking_level_text)
TextView checkingLevelText;
@Bind(R.id.version_information_resource_type_image)
ImageView resourceTypeImage;
@Bind(R.id.version_information_verification_information_status)
Button versionVerificationButton;
@Bind(R.id.version_information_verification_text_view)
TextView versionVerificationTextView;
@Bind(R.id.version_information_main_info_text_view)
TextView versionAuthenticationMainTextView;
public VersionInfoViewHolder(Context context, View view, Version version,MediaType type){
ButterKnife.bind(this, view);
updateViews(context, version, type);
}
private void updateViews(Context context, Version version, final MediaType type){
boolean notText = type != MediaType.MEDIA_TYPE_TEXT;
final int verificationStatus;
if(notText){
verificationStatus = Status.ERROR.ordinal();
}
else{
verificationStatus = version.getVerificationStatus();
}
versionVerificationTextView.setText((notText) ? "Cryptographic verification has not yet been added to media" : version.getVerificationText());
checkingLevelText.setText(ViewContentHelper.getCheckingLevelText(Integer.parseInt(version.getStatusCheckingLevel())));
checkingLevelImage.setImageResource(ViewContentHelper.getDarkCheckingLevelImageResource(Integer.parseInt(version.getStatusCheckingLevel())));
resourceTypeImage.setImageResource(MediaType.getImageResourceForType((notText) ? MediaType.MEDIA_TYPE_AUDIO : MediaType.MEDIA_TYPE_TEXT));
versionAuthenticationMainTextView.setText(getMainVerificationText(version));
versionVerificationButton.setVisibility(View.INVISIBLE);
DataFileManager.getStateOfContent(context, version, type, new DataFileManager.GetDownloadStateResponse() {
@Override
public void foundDownloadState(DownloadState state) {
if (state == DownloadState.DOWNLOAD_STATE_DOWNLOADED) {
versionVerificationButton.setText(ViewContentHelper.getVerificationButtonTextForStatus(verificationStatus));
versionVerificationButton.setBackgroundResource(ViewContentHelper.getDrawableForStatus(verificationStatus));
versionVerificationButton.setVisibility(View.VISIBLE);
}
if (type != MediaType.MEDIA_TYPE_TEXT) {
versionVerificationButton.setVisibility(View.INVISIBLE);
versionVerificationTextView.setVisibility(View.INVISIBLE);
}
}
});
}
private static String getMainVerificationText(Version version){
return "Version: " + version.getStatusVersion() + "\n\nPublished: " + version.getStatusPublishDate()
+ "\n\nAuthentication: " + version.getStatusCheckingEntity();
}
}
}