- Now Crystal can make file backups

This commit is contained in:
Javier Varona 2018-03-30 20:59:01 -04:00
parent db7ba760bd
commit ef18863c7c
4 changed files with 48 additions and 15 deletions

View file

@ -4,6 +4,8 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application <application
android:name=".application.CrystalApplication" android:name=".application.CrystalApplication"

View file

@ -1,7 +1,10 @@
package cy.agorise.crystalwallet.fragments; package cy.agorise.crystalwallet.fragments;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.Observer;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder;
@ -21,6 +24,8 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
import cy.agorise.crystalwallet.R; import cy.agorise.crystalwallet.R;
import cy.agorise.crystalwallet.dao.CrystalDatabase;
import cy.agorise.crystalwallet.models.GeneralSetting;
import cy.agorise.crystalwallet.requestmanagers.CreateBackupRequest; import cy.agorise.crystalwallet.requestmanagers.CreateBackupRequest;
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequest; import cy.agorise.crystalwallet.requestmanagers.FileServiceRequest;
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequestListener; import cy.agorise.crystalwallet.requestmanagers.FileServiceRequestListener;
@ -78,26 +83,38 @@ public class BackupsSettingsFragment extends Fragment{
@OnClick(R.id.btnBinFile) @OnClick(R.id.btnBinFile)
public void makeBackupFile(){ public void makeBackupFile(){
if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
final CreateBackupRequest backupFileRequest = new CreateBackupRequest(getContext()); LiveData<GeneralSetting> generalSettingLD = CrystalDatabase.getAppDatabase(getContext()).generalSettingDao().getByName(GeneralSetting.SETTING_PASSWORD);
backupFileRequest.setListener(new FileServiceRequestListener() { generalSettingLD.observe(this, new Observer<GeneralSetting>() {
@Override @Override
public void onCarryOut() { public void onChanged(@Nullable GeneralSetting generalSetting) {
if (backupFileRequest.getStatus() == CreateBackupRequest.StatusCode.SUCCEEDED){ String password = "";
Toast toast = Toast.makeText( if (generalSetting != null) {
getContext(), "Backup done! File: "+backupFileRequest.getFilePath(), Toast.LENGTH_LONG); password = generalSetting.getValue();
toast.show();
} else if (backupFileRequest.getStatus() == CreateBackupRequest.StatusCode.FAILED){
Toast toast = Toast.makeText(
getContext(), "An error ocurred while making the backup!", Toast.LENGTH_LONG);
toast.show();
} }
final CreateBackupRequest backupFileRequest = new CreateBackupRequest(getContext(), password);
backupFileRequest.setListener(new FileServiceRequestListener() {
@Override
public void onCarryOut() {
if (backupFileRequest.getStatus() == CreateBackupRequest.StatusCode.SUCCEEDED){
Toast toast = Toast.makeText(
getContext(), "Backup done! File: "+backupFileRequest.getFilePath(), Toast.LENGTH_LONG);
toast.show();
} else if (backupFileRequest.getStatus() == CreateBackupRequest.StatusCode.FAILED){
Toast toast = Toast.makeText(
getContext(), "An error ocurred while making the backup!", Toast.LENGTH_LONG);
toast.show();
}
}
});
FileServiceRequests.getInstance().addRequest(backupFileRequest);
} }
}); });
FileServiceRequests.getInstance().addRequest(backupFileRequest);
} }
} }
} }

View file

@ -100,6 +100,11 @@ public class FileBackupManager implements FileServiceRequestsListener {
String folder = Environment.getExternalStorageDirectory() + File.separator + "Crystal"; //TODO make constant String folder = Environment.getExternalStorageDirectory() + File.separator + "Crystal"; //TODO make constant
String path = folder + File.separator + fileName + dateHourString +".bin"; String path = folder + File.separator + fileName + dateHourString +".bin";
File folderFile = new File(folder);
if (!folderFile.exists()) {
folderFile.mkdir();
}
boolean success = saveBinFile(path,content,request); boolean success = saveBinFile(path,content,request);
if(success) { if(success) {
request.setFilePath(path); request.setFilePath(path);

View file

@ -15,6 +15,7 @@ import android.util.Log;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import cy.agorise.crystalwallet.manager.FileBackupManager;
import cy.agorise.crystalwallet.requestmanagers.CryptoNetInfoRequests; import cy.agorise.crystalwallet.requestmanagers.CryptoNetInfoRequests;
import cy.agorise.crystalwallet.dao.CrystalDatabase; import cy.agorise.crystalwallet.dao.CrystalDatabase;
import cy.agorise.crystalwallet.enums.CryptoNet; import cy.agorise.crystalwallet.enums.CryptoNet;
@ -26,6 +27,8 @@ import cy.agorise.crystalwallet.models.CryptoNetAccount;
import cy.agorise.crystalwallet.models.GeneralSetting; import cy.agorise.crystalwallet.models.GeneralSetting;
import cy.agorise.crystalwallet.models.GrapheneAccount; import cy.agorise.crystalwallet.models.GrapheneAccount;
import cy.agorise.crystalwallet.models.GrapheneAccountInfo; import cy.agorise.crystalwallet.models.GrapheneAccountInfo;
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequest;
import cy.agorise.crystalwallet.requestmanagers.FileServiceRequests;
/** /**
* Created by Henry Varona on 3/10/2017. * Created by Henry Varona on 3/10/2017.
@ -42,6 +45,8 @@ public class CrystalWalletService extends LifecycleService {
private boolean keepLoadingAccountTransactions; private boolean keepLoadingAccountTransactions;
private boolean keepLoadingEquivalences; private boolean keepLoadingEquivalences;
private CryptoNetInfoRequests cryptoNetInfoRequests; private CryptoNetInfoRequests cryptoNetInfoRequests;
private FileBackupManager fileBackupManager;
private FileServiceRequests fileServiceRequests;
// Handler that receives messages from the thread // Handler that receives messages from the thread
private final class ServiceHandler extends Handler { private final class ServiceHandler extends Handler {
@ -160,11 +165,15 @@ public class CrystalWalletService extends LifecycleService {
super.onCreate(); super.onCreate();
//Creates a instance for the cryptoNetInfoRequest and the managers //Creates a instance for the cryptoNetInfoRequest and the managers
this.cryptoNetInfoRequests = CryptoNetInfoRequests.getInstance(); this.cryptoNetInfoRequests = CryptoNetInfoRequests.getInstance();
this.fileServiceRequests = FileServiceRequests.getInstance();
this.bitsharesAccountManager = new BitsharesAccountManager(); this.bitsharesAccountManager = new BitsharesAccountManager();
this.fileBackupManager = new FileBackupManager();
//Add the managers as listeners of the CryptoNetInfoRequest so //Add the managers as listeners of the CryptoNetInfoRequest so
//they can carry out the info requests from the ui //they can carry out the info requests from the ui
this.cryptoNetInfoRequests.addListener(this.bitsharesAccountManager); this.cryptoNetInfoRequests.addListener(this.bitsharesAccountManager);
this.fileServiceRequests.addListener(this.fileBackupManager);
} }
@Override @Override