package com.fastaccess.ui.modules.cloud.restore;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.widget.Toast;
import com.fastaccess.R;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.ui.base.BaseActivity;
import com.fastaccess.ui.modules.cloud.backup.BackupView;
import com.fastaccess.ui.widgets.dialog.MessageDialogView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import icepick.State;
/**
* Created by Kosh on 23 Oct 2016, 9:05 PM
*/
public class RestoreView extends BaseActivity<RestoreMvp.View, RestorePresenter> implements RestoreMvp.View {
public static final String USER_ID_INTENT = "user_id";
private RestorePresenter presenter;
private ProgressDialog progressDialog;
private DatabaseReference database;
private FirebaseUser user;
@State String userId;
@Override protected int layout() {
return 0;
}
@NonNull @Override protected RestorePresenter getPresenter() {
if (presenter == null) {
presenter = RestorePresenter.with(this);
}
return presenter;
}
@Override protected boolean isTransparent() {
return false;
}
@Override protected boolean canBack() {
return false;
}
@Override public void onShowProgress() {
if (!getProgressDialog().isShowing()) getProgressDialog().show();
}
@Override public void onHideProgress() {
if (getProgressDialog().isShowing()) getProgressDialog().dismiss();
}
@Override public void onShowMessage(@StringRes int resId) {
onShowMessage(getString(resId));
}
@Override public void onShowMessage(@NonNull String msg) {
onHideProgress();
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
@Override public void finishOnError() {
finish();
}
@Override public void onRestoreCompleted() {
onHideProgress();
onShowMessage(R.string.successfully_restored);
finish();
}
@Nullable @Override public FirebaseUser user() {
if (user == null) user = FirebaseAuth.getInstance().getCurrentUser();
return user;
}
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null && getIntent() != null && getIntent().getExtras() != null) {
userId = getIntent().getExtras().getString(USER_ID_INTENT);
}
if (!InputHelper.isEmpty(userId)) {
if (savedInstanceState == null) {
MessageDialogView.newInstance(R.string.restore, R.string.restore_warning)
.show(getSupportFragmentManager(), "MessageDialogView");
}
} else {
getPresenter().onRestore(getDatabase(), userId);
}
}
@Override protected void onStop() {
super.onStop();
try {// user might cancel if we never registered the listener
getDatabase().removeEventListener(getPresenter());
} catch (Exception ignored) {}
}
@Override public void onMessageDialogActionClicked(boolean isOk, int requestCode) {
super.onMessageDialogActionClicked(isOk, requestCode);
if (isOk) {
getPresenter().onRestore(getDatabase(), userId);
} else {
finish();
}
}
@Override public void onDialogDismissed() {
super.onDialogDismissed();
finish();
}
private ProgressDialog getProgressDialog() {
if (progressDialog == null) {
progressDialog = new ProgressDialog(this);
progressDialog.setCancelable(false);
progressDialog.setMessage(getString(R.string.restore_in_progress));
}
return progressDialog;
}
private DatabaseReference getDatabase() {
if (database == null) {
database = FirebaseDatabase.getInstance().getReference(BackupView.BACKUP_DATABASE_NAME);
}
return database;
}
}