Import data implementation (begining)
- Adds an interface for the data import feature (not final) - Can read data from a manually created backup file
This commit is contained in:
parent
7b9282bfef
commit
de6fc36e6c
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
@ -15,7 +15,7 @@ android {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
lintOptions {
|
||||
disable 'MissingTranslation'
|
||||
//disable 'MissingTranslation'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
|
@ -514,9 +514,9 @@ public class Summary extends Fragment implements BalanceSwitchManagerInterface,
|
||||
public void onBalanceDataUpdated() {
|
||||
final List<Currency> balance = balanceManager.getTotalBalance();
|
||||
|
||||
if(balanceManager.getTotalBalance().size() > 0)
|
||||
if(balance.size() > 0)
|
||||
{
|
||||
for(int i = 0; i < balanceManager.getTotalBalance().size(); i++)
|
||||
for(int i = 0; i < balance.size(); i++)
|
||||
{
|
||||
balance.get(i).updatePrice(getActivity(), defaultCurrency, new Currency.CurrencyCallBack() {
|
||||
@Override
|
||||
|
@ -2,41 +2,58 @@ package com.herbron.moodl.Activities;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.KeyguardManager;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.media.Ringtone;
|
||||
import android.media.RingtoneManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.preference.RingtonePreference;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.security.keystore.KeyGenParameterSpec;
|
||||
import android.security.keystore.KeyPermanentlyInvalidatedException;
|
||||
import android.security.keystore.KeyProperties;
|
||||
import android.support.design.widget.TextInputLayout;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.text.TextUtils;
|
||||
import android.support.v7.view.ContextThemeWrapper;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.herbron.moodl.BuildConfig;
|
||||
import com.herbron.moodl.FingerprintToolkit.FingerprintDialogFragment;
|
||||
import com.herbron.moodl.FingerprintToolkit.FingerprintHandler;
|
||||
import com.herbron.moodl.MoodlBox;
|
||||
import com.herbron.moodl.R;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.KeyStore;
|
||||
@ -45,7 +62,12 @@ import java.security.NoSuchAlgorithmException;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.UnrecoverableKeyException;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.KeyGenerator;
|
||||
@ -147,11 +169,125 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
||||
bindPreferenceSummaryToValue(findPreference("default_currency"));
|
||||
bindPreferenceSummaryToValue(findPreference("minimum_value_displayed"));
|
||||
|
||||
findPreference("import").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
Context context = SettingsActivity.this;
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
|
||||
View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_import_data, null, true);
|
||||
dialogBuilder.setView(dialogView);
|
||||
|
||||
CheckBox enterPasswordCheckbox = dialogView.findViewById(R.id.checkboxEnterPassword);
|
||||
final TextInputLayout textInputLayoutPassword = dialogView.findViewById(R.id.textInputLayoutPassword);
|
||||
|
||||
enterPasswordCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
|
||||
if(b && textInputLayoutPassword.getVisibility() == View.GONE)
|
||||
{
|
||||
MoodlBox.expandH(textInputLayoutPassword);
|
||||
}
|
||||
|
||||
if(!b && textInputLayoutPassword.getVisibility() == View.VISIBLE)
|
||||
{
|
||||
MoodlBox.collapseH(textInputLayoutPassword);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
dialogBuilder.setTitle("Restore backup");
|
||||
dialogBuilder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
|
||||
checkPermissions();
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.getDefault());
|
||||
Date currentDate = new Date();
|
||||
//String fileName = getString(R.string.app_name) + "_" + formatter.format(currentDate) + ".backup";
|
||||
String fileName = "backup.moodl";
|
||||
|
||||
File dir = new File(Environment.getExternalStorageDirectory(), getString(R.string.app_name));
|
||||
|
||||
if (!dir.exists()) {
|
||||
if (!dir.mkdirs()) {
|
||||
Log.d("moodl", "Error while creating directory");
|
||||
}
|
||||
}
|
||||
|
||||
File backupFile = new File(dir + "/" + fileName);
|
||||
|
||||
if(backupFile.exists())
|
||||
{
|
||||
try (FileReader fileReader = new FileReader(backupFile)) {
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||
|
||||
String line;
|
||||
|
||||
while((line = bufferedReader.readLine()) != null)
|
||||
{
|
||||
Log.d("moodl", line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.d("moodl", "Error > " + e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.d("moodl", "Not backup file found");
|
||||
|
||||
try (PrintWriter printWriter = new PrintWriter(new FileWriter(backupFile, true))) {
|
||||
|
||||
printWriter.write("Some data");
|
||||
|
||||
printWriter.close();
|
||||
} catch (IOException e) {
|
||||
Log.d("moodl", "Error > " + e);
|
||||
}
|
||||
}
|
||||
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
AlertDialog alertDialog = dialogBuilder.create();
|
||||
alertDialog.show();
|
||||
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
EditTextPreference editTextPreference = (EditTextPreference) findPreference("minimum_value_displayed");
|
||||
editTextPreference.setPositiveButtonText("Save");
|
||||
editTextPreference.setNegativeButtonText("Cancel");
|
||||
}
|
||||
|
||||
private boolean checkPermissions() {
|
||||
|
||||
String[] permissions = new String[]{
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
};
|
||||
|
||||
int result;
|
||||
List<String> listPermissionsNeeded = new ArrayList<>();
|
||||
for (String p : permissions) {
|
||||
result = ContextCompat.checkSelfPermission(this, p);
|
||||
if (result != PackageManager.PERMISSION_GRANTED) {
|
||||
listPermissionsNeeded.add(p);
|
||||
}
|
||||
}
|
||||
if (!listPermissionsNeeded.isEmpty()) {
|
||||
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), 100);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the {@link android.app.ActionBar}, if the API is available.
|
||||
*/
|
||||
|
51
app/src/main/res/layout/dialog_import_data.xml
Normal file
51
app/src/main/res/layout/dialog_import_data.xml
Normal file
@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_gravity="center"
|
||||
android:theme="@style/AppTheme"
|
||||
android:padding="5dp"
|
||||
android:focusableInTouchMode="true">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkboxConserveData"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/conserve_data" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkboxRestoreEntries"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/restore_manual_entries" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkboxRestoreKeys"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/restore_keys" />
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkboxEnterPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/enter_password"/>
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/textInputLayoutPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/editTextPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password"
|
||||
android:inputType="textPassword"/>
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
</LinearLayout>
|
@ -14,6 +14,7 @@
|
||||
<!-- Example settings for Data & Sync -->
|
||||
<string name="pref_title_category_display">Display</string>
|
||||
<string name="pref_title_category_data_backup">Data backup</string>
|
||||
<string name="pref_title_category_synchronization">Synchronization</string>
|
||||
<string name="pref_title_category_other">Other</string>
|
||||
|
||||
<string name="pref_title_minimum_amount_displayed">Minimum amount displayed</string>
|
||||
@ -89,6 +90,7 @@
|
||||
|
||||
<!--Exchange strings-->
|
||||
<string name="pref_header_exchange">Exchanges settings</string>
|
||||
<string name="pref_header_wallet">Wallets settings</string>
|
||||
<string name="pref_fingerprint" translatable="false">Touch ID</string>
|
||||
|
||||
<!--HitBTC-->
|
||||
@ -198,5 +200,10 @@
|
||||
<string name="field_empty">This field cannot be blank</string>
|
||||
<string name="field_nan">This field must be a number</string>
|
||||
<string name="field_negative">This field must be positive</string>
|
||||
<string name="conserve_data">Conserve current data</string>
|
||||
<string name="restore_manual_entries">Restore manual entries</string>
|
||||
<string name="restore_keys">Restore API keys</string>
|
||||
<string name="enter_password">Enter password</string>
|
||||
<string name="password">Password</string>
|
||||
|
||||
</resources>
|
||||
|
@ -28,19 +28,30 @@
|
||||
android:title="@string/pref_title_category_data_backup">
|
||||
|
||||
<PreferenceScreen android:title="@string/pref_title_export"
|
||||
android:key="export"/>
|
||||
android:key="export"
|
||||
android:enabled="false"/>
|
||||
|
||||
<PreferenceScreen android:title="@string/pref_title_import"
|
||||
<Preference android:title="@string/pref_title_import"
|
||||
android:key="import"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_title_category_other">
|
||||
android:title="@string/pref_title_category_synchronization">
|
||||
|
||||
<Preference
|
||||
<PreferenceScreen
|
||||
android:fragment="com.herbron.moodl.Activities.SettingsActivity$ExchangePreferenceFragment"
|
||||
android:title="@string/pref_header_exchange" />
|
||||
android:title="@string/pref_header_exchange"
|
||||
android:enabled="false"/>
|
||||
|
||||
<PreferenceScreen
|
||||
android:title="@string/pref_header_wallet"
|
||||
android:enabled="false"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_title_category_other">
|
||||
|
||||
<PreferenceScreen android:title="@string/pref_title_version"
|
||||
android:key="version"/>
|
||||
|
@ -7,7 +7,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.1.2'
|
||||
classpath 'com.android.tools.build:gradle:3.1.3'
|
||||
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
@ -19,7 +19,9 @@ allprojects {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven { url "https://jitpack.io" }
|
||||
maven {
|
||||
url "https://jitpack.io"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user