package org.liberty.android.fantastischmemo.downloader.dropbox; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import org.greenrobot.eventbus.Subscribe; import org.liberty.android.fantastischmemo.R; import org.liberty.android.fantastischmemo.common.BaseActivity; import org.liberty.android.fantastischmemo.databinding.UploadDropboxScreenBinding; import org.liberty.android.fantastischmemo.ui.FileBrowserFragment; import org.liberty.android.fantastischmemo.utils.AMGUIUtility; import java.io.File; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.functions.Action; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; public class UploadDropboxActivity extends BaseActivity { public static final String EXTRA_AUTH_TOKEN = "authToken"; private static final String ANYMEMO_FOLDER = "AnyMemo"; private CompositeDisposable disposables = new CompositeDisposable(); private UploadDropboxScreenBinding binding; private String authToken; @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); binding = DataBindingUtil.setContentView(this, R.layout.upload_dropbox_screen); Bundle extras = getIntent().getExtras(); authToken = extras.getString(EXTRA_AUTH_TOKEN); setTitle(R.string.upload_text); setSupportActionBar(binding.toolbar); Fragment fileFragment = new FileBrowserFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.file_list_dropbox, fileFragment) .commit(); } @Override protected void onDestroy() { super.onDestroy(); disposables.dispose(); } @Override public void onStart() { super.onStart(); appComponents().eventBus().register(this); } @Override public void onStop() { super.onStop(); appComponents().eventBus().unregister(this); } @Subscribe public void onFileClickEvent(FileBrowserFragment.FileClickEvent event) { showUploadDialog(event.clickedFile); } private void showUploadDialog(final File file) { new AlertDialog.Builder(this) .setTitle(R.string.upload_text) .setMessage(String.format(getString(R.string.dropbox_upload_text), file.getName())) .setPositiveButton(R.string.ok_text,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { uploadToDropbox(file); setResult(Activity.RESULT_OK); } }).setNegativeButton(R.string.cancel_text, null).show(); } private void uploadToDropbox(@NonNull final File file) { final ProgressDialog progressDialog = new ProgressDialog(UploadDropboxActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setTitle(getString(R.string.loading_please_wait)); progressDialog.setMessage(getString(R.string.upload_wait)); progressDialog.setCancelable(false); progressDialog.show(); disposables.add(appComponents().dropboxApiHelper().uploadDropbox(authToken, file, String.format("/%1$s/%2$s", ANYMEMO_FOLDER, file.getName())) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action() { @Override public void run() throws Exception { progressDialog.dismiss(); new AlertDialog.Builder(UploadDropboxActivity.this) .setTitle(R.string.successfully_uploaded_text) .setMessage(R.string.dropbox_successfully_uploaded_message) .setPositiveButton(R.string.ok_text, null) .show(); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { progressDialog.dismiss(); AMGUIUtility.displayException(UploadDropboxActivity.this, getString(R.string.error_text), getString(R.string.error_text), throwable); } })); } }