package com.eleybourn.bookcatalogue.filechooser;
import java.io.File;
import java.text.DateFormat;
import java.util.Date;
import android.content.Context;
import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.eleybourn.bookcatalogue.BookCatalogueApp;
import com.eleybourn.bookcatalogue.R;
import com.eleybourn.bookcatalogue.backup.BackupInfo;
import com.eleybourn.bookcatalogue.filechooser.FileChooserFragment.FileDetails;
import com.eleybourn.bookcatalogue.utils.Utils;
/**
* Implementation of FileDetails that record data about backup files in a background thread.
*
* @author pjw
*/
public class BackupFileDetails implements FileDetails {
// IMPORTANT NOTE: If fields are added, then writeToParcelable and the parcelable constructor
// must also be modified.
/** File for this item */
private File mFile;
/** The BackupInfo we use when displaying the object */
private BackupInfo mInfo;
/**
* Constructor
*
* @param file
*/
public BackupFileDetails(File file) {
mFile = file;
}
/**
* Accessor
*
* @param info
*/
public void setInfo(BackupInfo info) {
mInfo = info;
}
@Override
public File getFile() {
return mFile;
}
/**
* Return the view we use.
*
* THIS SHOULD ALWAYS RETURN THE SAME VIEW. IT IS NOT A MULTI-TYPE LIST.
*/
@Override
public int getViewId() {
return R.layout.backup_chooser_item;
}
/**
* Fill in the details for the view we returned above.
*/
@Override
public void onSetupView(Context c, int position, View target) {
// Set the basic data
TextView name = (TextView)target.findViewById(R.id.name);
name.setText(mFile.getName());
TextView date = (TextView)target.findViewById(R.id.date);
ImageView image = (ImageView)target.findViewById(R.id.icon);
TextView details = (TextView)target.findViewById(R.id.details);
// For directories, hide the extra data
if (mFile.isDirectory()) {
date.setVisibility(View.GONE);
details.setVisibility(View.GONE);
image.setImageDrawable(c.getResources().getDrawable(R.drawable.ic_closed_folder));
} else {
// Display date and backup details
image.setImageDrawable(c.getResources().getDrawable(R.drawable.ic_archive));
date.setVisibility(View.VISIBLE);
if (mInfo != null) {
details.setVisibility(View.VISIBLE);
Resources res = BookCatalogueApp.context.getResources();
String books = res.getQuantityString(R.plurals.n_books, mInfo.getBookCount(), mInfo.getBookCount());
String s;
if (mInfo.hasCoverCount()) {
String covers = res.getQuantityString(R.plurals.n_covers, mInfo.getCoverCount(), mInfo.getCoverCount());
s = res.getString(R.string.a_comma_b, books, covers);
} else {
s = books;
}
details.setText(s);
date.setText(Utils.formatFileSize(mFile.length()) + ", " + DateFormat.getDateTimeInstance().format(mInfo.getCreateDate()));
} else {
date.setText(Utils.formatFileSize(mFile.length()) + ", " + DateFormat.getDateTimeInstance().format(new Date(mFile.lastModified())));
details.setVisibility(View.GONE);
}
}
}
/**
* PARCELLABLE INTERFACE.
*
* Default to 0. Not really used.
*/
@Override
public int describeContents() {
return 0;
}
/**
* PARCELLABLE INTERFACE.
*
* Save all fields that must be persisted.
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeSerializable(mFile);
if (mInfo != null) {
dest.writeByte((byte) 1);
dest.writeBundle(mInfo.getBundle());
} else {
dest.writeByte((byte) 0);
}
}
/**
* PARCELLABLE INTERFACE.
*
* Constructor, using a Parcel as source.
*/
private BackupFileDetails(Parcel in) {
mFile = (File) in.readSerializable();
byte infoFlag = in.readByte();
if (infoFlag != (byte)0) {
mInfo = new BackupInfo(in.readBundle());
} else {
mInfo = null;
}
}
/**
* PARCELLABLE INTERFACE.
*
* Need a CREATOR
*/
public static final Parcelable.Creator<BackupFileDetails> CREATOR = new Parcelable.Creator<BackupFileDetails>() {
public BackupFileDetails createFromParcel(Parcel in) {
return new BackupFileDetails(in);
}
public BackupFileDetails[] newArray(int size) {
return new BackupFileDetails[size];
}
};
}