package com.example.avoscloud_demo;

import android.app.Dialog;
import android.os.Bundle;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import ar.com.daidalos.afiledialog.FileChooserDialog;
import com.avos.avoscloud.*;
import junit.framework.Assert;

import java.io.Closeable;
import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.util.List;
import java.util.Random;

public class FileDemoActivity extends DemoBaseActivity {

    private String fileUrl = null;
    private String objectId = null;

    private byte[] readFile(File file) {
        RandomAccessFile rf = null;
        byte[] data = null;
        try {
            rf = new RandomAccessFile(file, "r");
            int length = (int)rf.length();
            if (length >= 5 * 1024 * 1024) {
                return null;
            }
            data = new byte[length];
            rf.readFully(data);
        } catch (Exception exception) {
            exception.printStackTrace();
        } finally {
            closeQuietly(rf);
        }
        return data;
    }

    private void uploadFileImpl(File file, final String string) {
        byte[] data = readFile(file);
        if (data == null) {
            Toast.makeText(this, "File is too big to upload.", Toast.LENGTH_LONG).show();
            return;
        }
        final AVFile avFile = new AVFile(file.getName(), data);
        avFile.saveInBackground(new SaveCallback() {
            @Override
            public void done(AVException e) {
                FileDemoActivity.this.showMessage(string, e, false);
                if (e == null) {
                    fileUrl = avFile.getUrl();
                    objectId = avFile.getObjectId();
                }
                setProgressBarIndeterminateVisibility(false);
            }
            }, new ProgressCallback() {
                @Override
                public void done(Integer percentDone) {
                    LogUtil.log.d("uploading: " + percentDone);
                }
        });
    }

    public void testFileUpload(final String string) throws AVException {
        FileChooserDialog dialog = new FileChooserDialog(this);
        dialog.show();
        dialog.addListener(new FileChooserDialog.OnFileSelectedListener() {
            public void onFileSelected(Dialog source, File file) {
                source.hide();
                FileDemoActivity.this.uploadFileImpl(file, string);
            }
            public void onFileSelected(Dialog source, File folder, String name) {
            }
        });
    }

    // create an object and query it.
    public void testFileDownload(final String string) throws AVException {
        if (isBlankString(fileUrl)) {
            showMessage("Please upload file at first.", null, false);
            return;
        }
        AVFile avFile = new AVFile("my_download_file", fileUrl);
        avFile.getDataInBackground(new GetDataCallback() {
            @Override
            public void done(byte[] bytes, AVException e) {
                showMessage(string, e, false);
            }
        });
    }

    // update an object
    public void testFileDelete(final String string) throws Exception {
        if (isBlankString(objectId)) {
            showMessage("Please upload file at first.", null, false);
            return;
        }
        AVFile.withObjectIdInBackground(objectId, new GetFileCallback<AVFile>() {
            @Override
            public void done(AVFile avFile, AVException e) {
                avFile.deleteInBackground(new DeleteCallback() {
                    @Override
                    public void done(AVException e) {
                        showMessage(string, e, false);
                    }
                });
            };
        });
    }
}

@@ -2916,16 +2916,21 @@
  fileUrl
+,null
 );%0A     

update AVFile constructor with file url