diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..6176faa8 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,104 @@ +version: 2.1 +executors: + kin-executor: + working_directory: ~/code + docker: + - image: circleci/android:api-28 + resource_class: xlarge + environment: + JVM_OPTS: -Xmx3200m + +references: + gradle_key: &gradle_key + jars-{{ checksum "build.gradle" }}-{{ checksum "kin-backup-and-restore/kin-backup-and-restore-lib/build.gradle" }}-{{ checksum "kin-backup-and-restore/kin-backup-and-restore-sample/build.gradle" }}-{{ checksum "kin-backup-and-restore/kin-backup-and-restore-ui-tests/build.gradle" }}-{{ checksum "kin-sdk/kin-base/build.gradle" }}-{{ checksum "kin-sdk/kin-sdk-lib/build.gradle" }}-{{ checksum "kin-sdk/kin-sdk-sample/build.gradle" }} + + restore_gradle_cache: &restore_gradle_cache + restore_cache: + key: *gradle_key + + save_gradle_cache: &save_gradle_cache + save_cache: + key: *gradle_key + paths: + - ~/.gradle + - ~/.m2 + + android_dependencies: &android_dependencies + run: + name: Download Android Dependencies + command: ./gradlew androidDependencies + + gcloud_init: &gcloud_init + run: + name: gcloud Init + command: | + ./scripts/ci_gcloud_init.sh + +jobs: + build: + executor: kin-executor + steps: + - checkout + - *restore_gradle_cache + - *android_dependencies + - *save_gradle_cache + - run: + name: Assemble + command: ./gradlew assemble + + unit_and_integration_test: + executor: kin-executor + steps: + - checkout + - *restore_gradle_cache + - *android_dependencies + - *save_gradle_cache + - run: + name: Run Unit & Integration Tests + command: ./gradlew testDebugUnitTest jacocoTestReport + + android_tests_sdk_lib: + executor: kin-executor + steps: + - checkout + - *restore_gradle_cache + - *android_dependencies + - *save_gradle_cache + - *gcloud_init + - run: + name: Run kin-sdk-lib Android Tests + command: ./scripts/ci_android_test_with_firebase.sh kin-sdk kin-sdk-sample kin-sdk-lib 2 + + android_tests_backup_and_restore: + executor: kin-executor + steps: + - checkout + - *restore_gradle_cache + - *android_dependencies + - *save_gradle_cache + - *gcloud_init + - run: + name: Run kin-backup-and-restore-lib Android Tests + command: ./scripts/ci_android_test_with_firebase.sh kin-backup-and-restore kin-backup-and-restore-sample kin-backup-and-restore-lib 0 + + ui_autormator_tests: + executor: kin-executor + steps: + - checkout + - *restore_gradle_cache + - *android_dependencies + - *save_gradle_cache + - *gcloud_init + - run: + name: Run kin-backup-and-restore-ui-tests Ui Automator Tests + command: ./scripts/ci_android_test_with_firebase.sh kin-backup-and-restore kin-backup-and-restore-ui-tests kin-backup-and-restore-ui-tests 0 + +workflows: + version: 2 + build-sdk: + jobs: + - build + - unit_and_integration_test + - android_tests_backup_and_restore + - android_tests_sdk_lib + - ui_autormator_tests diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index 9f7f0b59..bc3a764b 100644 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -1,592 +1,509 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .*:.*Style + + http://schemas.android.com/apk/res/android + + + BY_NAME + +
+
+ + + + .*:layout_width + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_height + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_weight + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_margin + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_marginTop + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_marginBottom + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_marginStart + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_marginEnd + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_marginLeft + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_marginRight + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:layout_.* + + http://schemas.android.com/apk/res/android + + + BY_NAME + +
+
+ + + + .*:padding + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:paddingTop + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:paddingBottom + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:paddingStart + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:paddingEnd + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:paddingLeft + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:paddingRight + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .* + http://schemas.android.com/apk/res/android + + + BY_NAME + +
+
+ + + + .* + http://schemas.android.com/apk/res-auto + + + BY_NAME + +
+
+ + + + .* + http://schemas.android.com/tools + + + BY_NAME + +
+
+ + + + .* + .* + + + BY_NAME + +
+
+
+
+ + + \ No newline at end of file diff --git a/.travis.yml b/OLD.travis.yml similarity index 89% rename from .travis.yml rename to OLD.travis.yml index adba78bc..51f2d35d 100644 --- a/.travis.yml +++ b/OLD.travis.yml @@ -1,13 +1,10 @@ sudo: required language: android +dist: trusty services: - docker -before_install: - - yes | sdkmanager "platforms;android-26" - - yes | sdkmanager "platforms;android-28" - before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ @@ -31,10 +28,10 @@ env: android: components: - - tools - - platform-tools - - build-tools-26.0.2 - - android-26 + - tools + - platform-tools + - build-tools-28.0.3 + - android-28 script: - if [ $TEST_MATRIX == "assemble" ]; then ./scripts/ci_assemble.sh; fi diff --git a/README.md b/README.md index d702a9ea..17142520 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ -![Kin Token](../kin_android.png) # Kin Android SDK +==================================================================================== +# THIS VERSION IS NOW DEPRECATED AND NO LONGER ACTIVELY MAINTAINED +## Please check out the Kin SDK for Android [here](https://github.com/kinecosystem/kin-android) +## The `:base` module replaces what's here and provides additional functionality +## The `:base-compat` module is a drop in replacement for this older version of the SDK to aid in the transition +==================================================================================== With the Kin SDK for Android you can give your users fun ways to earn and spend Kin in your app, and help us build a whole new digital world. diff --git a/build.gradle b/build.gradle index 6fa07c33..0e6dfed7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,21 +1,52 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -apply from: './dependencies.gradle' - ext { projectName = ':kin-sdk-android' } buildscript { - ext.kotlin_version = '1.2.30' + ext { + android_minsdk_version = 16 + android_compilesdk_version = 28 + android_targetsdk_version = 26 + + // Plugins + androidgradle_version = '3.4.2' + jaccoco_version = '0.8.5' + + // 3rd Party + kotlin_version = '1.3.41' + okhttp_version = '3.12.6' + toml4j_version = '0.5.1' + gson_version = '2.8.2' + eddsa_version = '0.3.0' + androidsupport_version = '28.0.0' + constraintlayout_version = '1.1.3' + sodium_version = '2.0.1' + zxing_version = '3.3.3' + + // Kin + oksse_version = '4121e87e8c' + kinutilsandroid_version = '1.1' + + // Test + mockito_version = '2.10.0' + mockitokotlin_version = '2.1.0' + junit_version = '4.12' + hamcrest_version = '1.3' + robolectric_version = '4.3' + supporttest_version = '1.0.2' + multidex_version = '1.0.2' + espresso_version = '3.0.2' + uiautomator_version = '2.1.3' + } repositories { google() jcenter() } dependencies { - classpath "com.android.tools.build:gradle:3.0.1" - classpath 'org.jacoco:org.jacoco.core:0.8.1' + classpath "com.android.tools.build:gradle:$androidgradle_version" + classpath "org.jacoco:org.jacoco.core:$jaccoco_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - + classpath("com.github.dcendents:android-maven-gradle-plugin:2.1") } } diff --git a/dependencies.gradle b/dependencies.gradle deleted file mode 100644 index 5c67b78a..00000000 --- a/dependencies.gradle +++ /dev/null @@ -1,50 +0,0 @@ -ext { - - //Version - supportVersion = '26.1.0' - junitVersion = '4.12' - mockitoAndroidVersion = '2.10.0' - mockitoVersion = '2.13.0' - androidTestVersion = '1.0.1' - mockWebServerVersion = '3.8.1' - robolectricVersion = '3.6.1' - hamcrestVersion = '1.3' - gsonVersion = '2.4' - jacocoVersion = '0.8.0' - multiDexVersion = '1.0.3' - - //Packages - supportPackage = 'com.android.support' - mockitoPackage = 'org.mockito' - junitPackage = 'junit' - androidTestPackage = 'com.android.support.test' - okHttpPackage = 'com.squareup.okhttp3' - robolectricPackage = 'org.robolectric' - hamcrestPackage = 'org.hamcrest' - gsonPackage = 'com.google.code.gson' - kinecosystem = 'com.github.kinecosystem' - kotlinPackage = 'org.jetbrains.kotlin' - - supportDependencies = [ - supportAnnotations: buildDependency(supportPackage, 'support-annotations', supportVersion) - ] - - testingDependencies = [ - junit : buildDependency(junitPackage, 'junit', junitVersion), - mockitoAndroid : buildDependency(mockitoPackage, 'mockito-android', mockitoAndroidVersion), - mockito : buildDependency(mockitoPackage, 'mockito-core', mockitoVersion), - androidTestRunner: buildDependency(androidTestPackage, 'runner', androidTestVersion), - androidTestRules : buildDependency(androidTestPackage, 'rules', androidTestVersion), - mockWebServer : buildDependency(okHttpPackage, 'mockwebserver', mockWebServerVersion), - robolectric : buildDependency(robolectricPackage, 'robolectric', robolectricVersion), - hamcrest : buildDependency(hamcrestPackage, 'hamcrest-library', hamcrestVersion), - gson : buildDependency(gsonPackage, 'gson', gsonVersion), - multidex : buildDependency(supportPackage, 'multidex', multiDexVersion), - kotlin : buildDependency(kotlinPackage, 'kotlin-stdlib-jre7', kotlin_version), - kotlinJUnitTest : buildDependency(kotlinPackage, 'kotlin-test-junit', kotlin_version) - ] -} - -static String buildDependency(String pack, String dependency, String version) { - return "${pack}:${dependency}:${version}" -} \ No newline at end of file diff --git a/firebase-test-lab-key.json.enc b/firebase-test-lab-key.json.enc deleted file mode 100644 index e653054c..00000000 Binary files a/firebase-test-lab-key.json.enc and /dev/null differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d8f5c99b..26017f51 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Oct 30 16:29:10 IST 2017 +#Sun Jul 28 21:42:00 EDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/kin-backup-and-restore/README.md b/kin-backup-and-restore/README.md index 723f0ce6..5316701c 100644 --- a/kin-backup-and-restore/README.md +++ b/kin-backup-and-restore/README.md @@ -73,9 +73,12 @@ Both callbacks have the same 3 methods: - `onSuccess` is called when the operation is completed successfully. In the Restore callback, it has a `KinClient`(the updated one) and `KinAccount` object, which is the restored account. - `onCancel` is called when the user leaves the backup or restore activity and returns to the previous activity. - `onFailure()` is called if there is an error in the backup or restore process. + ###### Creating Backup Callbacks + ```java backupAndRestoreManager.registerBackupCallback(new BackupCallback() { + @Override public void onSuccess() { // Here you can handle the success. @@ -92,9 +95,11 @@ backupAndRestoreManager.registerBackupCallback(new BackupCallback() { } }); ``` + ###### Creating Restore Callbacks ```java backupAndRestoreManager.registerRestoreCallback(new RestoreCallback() { + @Override public void onSuccess(KinClient kinClient, KinAccount kinAccount) { // Here you can handle the success. diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/.gitignore b/kin-backup-and-restore/kin-backup-and-restore-lib/.gitignore index 796b96d1..d7dcdba5 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/.gitignore +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/.gitignore @@ -1 +1,2 @@ /build +**/jacoco.exec \ No newline at end of file diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/build.gradle b/kin-backup-and-restore/kin-backup-and-restore-lib/build.gradle index 7642e4f9..77c51ea3 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/build.gradle +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/build.gradle @@ -1,14 +1,13 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'jacoco' -apply from: '../../dependencies.gradle' android { - compileSdkVersion 26 + compileSdkVersion android_compilesdk_version defaultConfig { - minSdkVersion 16 - targetSdkVersion 26 + minSdkVersion android_minsdk_version + targetSdkVersion android_targetsdk_version versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -35,27 +34,26 @@ android { dependencies { implementation project(':kin-sdk:kin-sdk-lib') - implementation 'com.android.support.constraint:constraint-layout:1.1.2' - implementation 'com.android.support:support-annotations:26.1.0' - implementation 'com.android.support:appcompat-v7:26.1.0' - implementation 'com.google.zxing:core:3.3.3' + implementation "com.android.support.constraint:constraint-layout:$constraintlayout_version" + implementation "com.android.support:support-annotations:$androidsupport_version" + implementation "com.android.support:appcompat-v7:$androidsupport_version" + implementation "com.google.zxing:core:$zxing_version" - androidTestImplementation 'junit:junit:4.12' - androidTestImplementation 'org.mockito:mockito-core:2.10.0' - androidTestImplementation 'org.hamcrest:hamcrest-library:1.3' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - - testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:1.2.71' - testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.0.0-RC1' - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.13.0' - testImplementation 'org.robolectric:robolectric:3.6.1' + testImplementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:$mockitokotlin_version" + testImplementation "junit:junit:$junit_version" + testImplementation "org.mockito:mockito-core:$mockito_version" + testImplementation "org.robolectric:robolectric:$robolectric_version" + androidTestImplementation "junit:junit:$junit_version" + androidTestImplementation "org.mockito:mockito-core:$mockito_version" + androidTestImplementation "org.hamcrest:hamcrest-library:$hamcrest_version" + androidTestImplementation "com.android.support.test:runner:$supporttest_version" } //jacoco unified code coverage jacoco { - toolVersion = '0.8.1' + toolVersion = jaccoco_version } tasks.withType(Test) { diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/AndroidManifest.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/AndroidManifest.xml index 9f4b6f52..76c9434b 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/AndroidManifest.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRBarcodeGeneratorImplTest.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRBarcodeGeneratorImplTest.java index d68187b6..77535913 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRBarcodeGeneratorImplTest.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRBarcodeGeneratorImplTest.java @@ -1,107 +1,133 @@ package kin.backupandrestore.qr; -import static junit.framework.TestCase.assertNotNull; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.MatcherAssert.assertThat; - import android.graphics.Bitmap; import android.net.Uri; import android.support.annotation.NonNull; -import java.util.HashMap; -import kin.backupandrestore.qr.QRBarcodeGenerator.QRNotFoundInImageException; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.MockitoAnnotations; +import java.util.HashMap; + +import kin.backupandrestore.qr.QRBarcodeGenerator.QRNotFoundInImageException; + +import static junit.framework.TestCase.assertNotNull; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + public class QRBarcodeGeneratorImplTest { - private static final String TEST_DATA = "{\n" - + " \"pkey\": \"GCJS54LFY5H5UXSAKLWP3GXCNKAZZLRAPO45B6PLAAINRVKJSWZGZAF4\",\n" - + " \"seed\": \"cb60a6afa2427194f4fbdc19969dd2b34677e2cae5108d34f51970a43f47eacf36520ebe26c34064ab6d1cd29e9e8c362685651a81f0ce0525dd728028b7956e037545ec223b72d8\",\n" - + " \"salt\": \"f16fa85a112efdd00eb0134239f53c37\"\n" - + "}"; - - private static final String EXPECTED_TEXT_QR_IMAGE = "{\n" - + " \"pkey\": \"GCJS54LFY5H5UXSAKLWP3GXCNKAZZLRAPO45B6PLAAINRVKJSWZGZAF4\",\n" - + " \"seed\": \"c71d8965df716fb0a6edb53b5f4215f9f5b29552aef761e44b0d3fd9a26eb8fae3001e5be27e1d0df1f3baf72b2ddea38075cd0783d14e842c555d1b7264211546503fab7b647b09\",\n" - + " \"salt\": \"ad1b920b16e4f7b519ac5117af77069d\"\n" - + "}"; - - private static final String EXPECTED_TEXT_QR_IMAGE_TRY_HARDER = "{\n" - + " \"pkey\": \"GCSFMCRAJ7UQU7MDA5TUBY3ROFYU6L6D2JPKXUM4YGSL2SLZOTKCS647\",\n" - + " \"seed\": \"6f9e2fe953d37a0122347df582e57f9f7a2a7a91eccb3c5b13450c4ac7b94987ebd330e546b020e930062ed01c32d228f557e74979d3170d66644a6407ba56f70d9d508e2f4c5b7a\",\n" - + " \"salt\": \"0586cdddfa57a2cfa8d02ca78103f3c7\"\n" - + "}"; - - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - private QRBarcodeGeneratorImpl qrBarcodeGenerator; - - private FakeQRFileUriHandler fakeQRFileHandler; - - class FakeQRFileUriHandler implements QRFileUriHandler { - - private int counter = 0; - private HashMap map = new HashMap<>(); - - @NonNull - @Override - public Bitmap loadFile(@NonNull Uri uri) { - return map.get(uri); - } - - @NonNull - @Override - public Uri saveFile(@NonNull Bitmap image) { - Uri fakeUri = Uri.parse("file://test/" + counter + ".png"); - map.put(fakeUri, image); - return fakeUri; - } - } - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - fakeQRFileHandler = new FakeQRFileUriHandler(); - qrBarcodeGenerator = new QRBarcodeGeneratorImpl(fakeQRFileHandler); - } - - @Test - public void generate_success() throws Exception { - Uri uri = qrBarcodeGenerator.generate(TEST_DATA); - assertNotNull(uri); - assertNotNull(fakeQRFileHandler.loadFile(uri)); - } - - @Test - public void decodeQR_success() throws Exception { - // test a QR that was being able to be decoded only with TRY_HARDER flag in zxing library - Bitmap bitmap = TestUtils.loadBitmapFromResource(this.getClass(), "backup_qr_try_harder.png"); - Uri uri = fakeQRFileHandler.saveFile(bitmap); - String decodedQR = qrBarcodeGenerator.decodeQR(uri); - assertThat(decodedQR, equalTo(EXPECTED_TEXT_QR_IMAGE_TRY_HARDER)); - - Bitmap bitmap2 = TestUtils.loadBitmapFromResource(this.getClass(), "qr_test.png"); - Uri uri2 = fakeQRFileHandler.saveFile(bitmap2); - String decodedQR2 = qrBarcodeGenerator.decodeQR(uri2); - assertThat(decodedQR2, equalTo(EXPECTED_TEXT_QR_IMAGE)); - } - - @Test - public void decodeQR_EmptyImage_NotFoundException() throws Exception { - expectedEx.expect(QRNotFoundInImageException.class); - Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); - Uri uri = fakeQRFileHandler.saveFile(bitmap); - qrBarcodeGenerator.decodeQR(uri); - } - - @Test - public void generateAndDecode_success() throws Exception { - Uri uri = qrBarcodeGenerator.generate(TEST_DATA); - String decodedQR = qrBarcodeGenerator.decodeQR(uri); - assertThat(decodedQR, equalTo(TEST_DATA)); - } - -} \ No newline at end of file + private static final String TEST_DATA = "{\n" +<<<<<<< HEAD + + " \"pkey\": \"GCJS54LFY5H5UXSAKLWP3GXCNKAZZLRAPO45B6PLAAINRVKJSWZGZAF4\",\n" + + " \"seed\": \"cb60a6afa2427194f4fbdc19969dd2b34677e2cae5108d34f51970a43f47eacf36520ebe26c34064ab6d1cd29e9e8c362685651a81f0ce0525dd728028b7956e037545ec223b72d8\",\n" + + " \"salt\": \"f16fa85a112efdd00eb0134239f53c37\"\n" + + "}"; + + private static final String EXPECTED_TEXT_QR_IMAGE = "{\n" + + " \"pkey\": \"GCJS54LFY5H5UXSAKLWP3GXCNKAZZLRAPO45B6PLAAINRVKJSWZGZAF4\",\n" + + " \"seed\": \"c71d8965df716fb0a6edb53b5f4215f9f5b29552aef761e44b0d3fd9a26eb8fae3001e5be27e1d0df1f3baf72b2ddea38075cd0783d14e842c555d1b7264211546503fab7b647b09\",\n" + + " \"salt\": \"ad1b920b16e4f7b519ac5117af77069d\"\n" + + "}"; + + private static final String EXPECTED_TEXT_QR_IMAGE_TRY_HARDER = "{\n" + + " \"pkey\": \"GCSFMCRAJ7UQU7MDA5TUBY3ROFYU6L6D2JPKXUM4YGSL2SLZOTKCS647\",\n" + + " \"seed\": \"6f9e2fe953d37a0122347df582e57f9f7a2a7a91eccb3c5b13450c4ac7b94987ebd330e546b020e930062ed01c32d228f557e74979d3170d66644a6407ba56f70d9d508e2f4c5b7a\",\n" + + " \"salt\": \"0586cdddfa57a2cfa8d02ca78103f3c7\"\n" + + "}"; +======= + + " \"pkey\": \"GCJS54LFY5H5UXSAKLWP3GXCNKAZZLRAPO45B6PLAAINRVKJSWZGZAF4\",\n" + + " \"seed\": \"cb60a6afa2427194f4fbdc19969dd2b34677e2cae5108d34f51970a43f47eacf36520ebe26c34064ab6d1cd29e9e8c362685651a81f0ce0525dd728028b7956e037545ec223b72d8\",\n" + + " \"salt\": \"f16fa85a112efdd00eb0134239f53c37\"\n" + + "}"; + + private static final String EXPECTED_TEXT_QR_IMAGE = "{\n" + + " \"pkey\": \"GCJS54LFY5H5UXSAKLWP3GXCNKAZZLRAPO45B6PLAAINRVKJSWZGZAF4\",\n" + + " \"seed\": \"c71d8965df716fb0a6edb53b5f4215f9f5b29552aef761e44b0d3fd9a26eb8fae3001e5be27e1d0df1f3baf72b2ddea38075cd0783d14e842c555d1b7264211546503fab7b647b09\",\n" + + " \"salt\": \"ad1b920b16e4f7b519ac5117af77069d\"\n" + + "}"; + + private static final String EXPECTED_TEXT_QR_IMAGE_TRY_HARDER = "{\n" + + " \"pkey\": \"GCSFMCRAJ7UQU7MDA5TUBY3ROFYU6L6D2JPKXUM4YGSL2SLZOTKCS647\",\n" + + " \"seed\": \"6f9e2fe953d37a0122347df582e57f9f7a2a7a91eccb3c5b13450c4ac7b94987ebd330e546b020e930062ed01c32d228f557e74979d3170d66644a6407ba56f70d9d508e2f4c5b7a\",\n" + + " \"salt\": \"0586cdddfa57a2cfa8d02ca78103f3c7\"\n" + + "}"; +>>>>>>> master + + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + private QRBarcodeGeneratorImpl qrBarcodeGenerator; + + private FakeQRFileUriHandler fakeQRFileHandler; + + class FakeQRFileUriHandler implements QRFileUriHandler { + + private int counter = 0; + private HashMap map = new HashMap<>(); + + @NonNull + @Override + public Bitmap loadFile(@NonNull Uri uri) { + return map.get(uri); + } + + @NonNull + @Override + public Uri saveFile(@NonNull Bitmap image) { + Uri fakeUri = Uri.parse("file://test/" + counter + ".png"); + map.put(fakeUri, image); + return fakeUri; + } + } + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + fakeQRFileHandler = new FakeQRFileUriHandler(); + qrBarcodeGenerator = new QRBarcodeGeneratorImpl(fakeQRFileHandler); + } + + @Test + public void generate_success() throws Exception { + Uri uri = qrBarcodeGenerator.generate(TEST_DATA); + assertNotNull(uri); + assertNotNull(fakeQRFileHandler.loadFile(uri)); + } + + @Test + public void decodeQR_success() throws Exception { + // test a QR that was being able to be decoded only with TRY_HARDER flag in zxing library + Bitmap bitmap = TestUtils.loadBitmapFromResource(this.getClass(), "backup_qr_try_harder.png"); + Uri uri = fakeQRFileHandler.saveFile(bitmap); + String decodedQR = qrBarcodeGenerator.decodeQR(uri); + assertThat(decodedQR, equalTo(EXPECTED_TEXT_QR_IMAGE_TRY_HARDER)); + + Bitmap bitmap2 = TestUtils.loadBitmapFromResource(this.getClass(), "qr_test.png"); + Uri uri2 = fakeQRFileHandler.saveFile(bitmap2); + String decodedQR2 = qrBarcodeGenerator.decodeQR(uri2); + assertThat(decodedQR2, equalTo(EXPECTED_TEXT_QR_IMAGE)); + } + + @Test + public void decodeQR_EmptyImage_NotFoundException() throws Exception { + expectedEx.expect(QRNotFoundInImageException.class); + Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); + Uri uri = fakeQRFileHandler.saveFile(bitmap); + qrBarcodeGenerator.decodeQR(uri); + } + + @Test + public void generateAndDecode_success() throws Exception { + Uri uri = qrBarcodeGenerator.generate(TEST_DATA); + String decodedQR = qrBarcodeGenerator.decodeQR(uri); + assertThat(decodedQR, equalTo(TEST_DATA)); + } + +<<<<<<< HEAD +} +======= +} +>>>>>>> master diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRFileUriHandlerImplTest.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRFileUriHandlerImplTest.java index 9ba0d50b..c77913db 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRFileUriHandlerImplTest.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/androidTest/java/kin/backupandrestore/qr/QRFileUriHandlerImplTest.java @@ -3,6 +3,7 @@ import android.graphics.Bitmap; import android.net.Uri; import android.support.test.InstrumentationRegistry; + import org.junit.Before; import org.junit.Test; @@ -36,4 +37,4 @@ public void saveFile_Success() throws Exception { ".KinRecoveryFileProvider/qr_codes/backup_qr.png")); } -} \ No newline at end of file +} diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/AndroidManifest.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/AndroidManifest.xml index 3388a07b..1bd392a7 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/AndroidManifest.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/AndroidManifest.xml @@ -10,20 +10,20 @@ android:name=".KinRecoveryFileProvider"> + android:resource="@xml/backup_and_restore_file_provider_paths" /> + android:theme="@style/BackupAndRestoreNoActionBar" /> + android:windowSoftInputMode="adjustResize" /> - \ No newline at end of file + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/AccountExtractor.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/AccountExtractor.java index a6b404d1..4897fff3 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/AccountExtractor.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/AccountExtractor.java @@ -1,25 +1,30 @@ package kin.backupandrestore; import android.support.annotation.Nullable; -import android.text.TextUtils; + import kin.sdk.KinAccount; import kin.sdk.KinClient; +import kin.sdk.Utils; public class AccountExtractor { - @Nullable - public static KinAccount getKinAccount(KinClient kinClient, String publicAddress) { - KinAccount kinAccount = null; - if (kinClient != null && !TextUtils.isEmpty(publicAddress)) { - int numOfAccounts = kinClient.getAccountCount(); - for (int i = 0; i < numOfAccounts; i++) { - KinAccount account = kinClient.getAccount(i); - if (account != null && account.getPublicAddress().equals(publicAddress)) { - kinAccount = account; - break; - } - } - } - return kinAccount; - } + @Nullable + public static KinAccount getKinAccount(KinClient kinClient, String publicAddress) { + KinAccount kinAccount = null; +<<<<<<< HEAD + if (kinClient != null && !TextUtils.isEmpty(publicAddress)) { +======= + if (kinClient != null && !Utils.isEmpty(publicAddress)) { +>>>>>>> master + int numOfAccounts = kinClient.getAccountCount(); + for (int i = 0; i < numOfAccounts; i++) { + KinAccount account = kinClient.getAccount(i); + if (account != null && account.getPublicAddress().equals(publicAddress)) { + kinAccount = account; + break; + } + } + } + return kinAccount; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupAndRestoreManager.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupAndRestoreManager.java index fb9cf99c..c689ab04 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupAndRestoreManager.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupAndRestoreManager.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.content.Intent; import android.support.annotation.NonNull; + import kin.backupandrestore.events.BroadcastManagerImpl; import kin.backupandrestore.events.CallbackManager; import kin.backupandrestore.events.EventDispatcherImpl; @@ -13,65 +14,73 @@ public final class BackupAndRestoreManager { - public static final String NETWORK_URL_EXTRA = "networkUrlExtra"; - public static final String NETWORK_PASSPHRASE_EXTRA = "networkPassphraseExtra"; - public static final String APP_ID_EXTRA = "appIdExtra"; - public static final String STORE_KEY_EXTRA = "storeKeyExtra"; - public static final String PUBLIC_ADDRESS_EXTRA = "publicAddressExtra"; - - private final CallbackManager callbackManager; - private final int reqCodeBackup; - private final int reqCodeRestore; - private KinClient kinClient; - private Activity activity; - - public BackupAndRestoreManager(@NonNull final Activity activity, int reqCodeBackup, int reqCodeRestore) { - Validator.checkNotNull(activity, "activity"); - this.activity = activity; - this.callbackManager = new CallbackManager( - new EventDispatcherImpl(new BroadcastManagerImpl(activity)), reqCodeBackup, reqCodeRestore); - this.reqCodeBackup = reqCodeBackup; - this.reqCodeRestore = reqCodeRestore; - } - - public void backup(KinClient kinClient, KinAccount kinAccount) { - this.kinClient = kinClient; - new Launcher(activity, kinClient).backupFlow(kinAccount, reqCodeBackup); - } - - public void restore(KinClient kinClient) { - this.kinClient = kinClient; - new Launcher(activity, kinClient).restoreFlow(reqCodeRestore); - } - - public void registerBackupCallback(@NonNull final BackupCallback backupCallback) { - Validator.checkNotNull(backupCallback, "backupCallback"); - this.callbackManager.setBackupCallback(backupCallback); - } - - public void registerRestoreCallback(@NonNull final RestoreCallback restoreCallback) { - Validator.checkNotNull(restoreCallback, "restoreCallback"); - this.callbackManager.setInternalRestoreCallback(new InternalRestoreCallback() { - - @Override - public void onSuccess(String publicAddress) { - // Because we recovered a new account then we need to refresh the kinClient so we create a new one. - kinClient = new KinClient(activity, kinClient.getEnvironment(), kinClient.getAppId(), - kinClient.getStoreKey()); - restoreCallback.onSuccess(kinClient, AccountExtractor.getKinAccount(kinClient, publicAddress)); - } - - @Override - public void onCancel() { - restoreCallback.onCancel(); - } - - @Override - public void onFailure(BackupAndRestoreException throwable) { - restoreCallback.onFailure(throwable); - } - }); - } + public static final String NETWORK_URL_EXTRA = "networkUrlExtra"; + public static final String NETWORK_PASSPHRASE_EXTRA = "networkPassphraseExtra"; + public static final String APP_ID_EXTRA = "appIdExtra"; + public static final String STORE_KEY_EXTRA = "storeKeyExtra"; + public static final String PUBLIC_ADDRESS_EXTRA = "publicAddressExtra"; + + private final CallbackManager callbackManager; + private final int reqCodeBackup; + private final int reqCodeRestore; + private KinClient kinClient; + private Activity activity; + + public BackupAndRestoreManager(@NonNull final Activity activity, int reqCodeBackup, int reqCodeRestore) { + Validator.checkNotNull(activity, "activity"); + this.activity = activity; + this.callbackManager = new CallbackManager( +<<<<<<< HEAD + new EventDispatcherImpl(new BroadcastManagerImpl(activity)), reqCodeBackup, reqCodeRestore); +======= + new EventDispatcherImpl(new BroadcastManagerImpl(activity)), reqCodeBackup, reqCodeRestore); +>>>>>>> master + this.reqCodeBackup = reqCodeBackup; + this.reqCodeRestore = reqCodeRestore; + } + + public void backup(KinClient kinClient, KinAccount kinAccount) { + this.kinClient = kinClient; + new Launcher(activity, kinClient).backupFlow(kinAccount, reqCodeBackup); + } + + public void restore(KinClient kinClient) { + this.kinClient = kinClient; + new Launcher(activity, kinClient).restoreFlow(reqCodeRestore); + } + + public void registerBackupCallback(@NonNull final BackupCallback backupCallback) { + Validator.checkNotNull(backupCallback, "backupCallback"); + this.callbackManager.setBackupCallback(backupCallback); + } + + public void registerRestoreCallback(@NonNull final RestoreCallback restoreCallback) { + Validator.checkNotNull(restoreCallback, "restoreCallback"); + this.callbackManager.setInternalRestoreCallback(new InternalRestoreCallback() { + + @Override + public void onSuccess(String publicAddress) { + // Because we recovered a new account then we need to refresh the kinClient so we create a new one. + kinClient = new KinClient(activity, kinClient.getEnvironment(), kinClient.getAppId(), +<<<<<<< HEAD + kinClient.getStoreKey()); +======= + kinClient.getStoreKey()); +>>>>>>> master + restoreCallback.onSuccess(kinClient, AccountExtractor.getKinAccount(kinClient, publicAddress)); + } + + @Override + public void onCancel() { + restoreCallback.onCancel(); + } + + @Override + public void onFailure(BackupAndRestoreException throwable) { + restoreCallback.onFailure(throwable); + } + }); + } // public void registerBackupEvents(@NonNull final BackupEvents backupEvents) { // Validator.checkNotNull(backupEvents, "backupEvents"); @@ -83,12 +92,12 @@ public void onFailure(BackupAndRestoreException throwable) { // this.callbackManager.setRestoreEvents(restoreEvents); // } - public void release() { - this.callbackManager.unregisterCallbacksAndEvents(); - } + public void release() { + this.callbackManager.unregisterCallbacksAndEvents(); + } - public void onActivityResult(int requestCode, int resultCode, Intent data) { - this.callbackManager.onActivityResult(requestCode, resultCode, data); - } + public void onActivityResult(int requestCode, int resultCode, Intent data) { + this.callbackManager.onActivityResult(requestCode, resultCode, data); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupCallback.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupCallback.java index 368d43dc..bae08447 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupCallback.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupCallback.java @@ -4,9 +4,9 @@ public interface BackupCallback { - void onSuccess(); + void onSuccess(); - void onCancel(); + void onCancel(); - void onFailure(BackupAndRestoreException exception); + void onFailure(BackupAndRestoreException exception); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupEvents.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupEvents.java index 1678598f..b3042a59 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupEvents.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/BackupEvents.java @@ -2,31 +2,31 @@ public interface BackupEvents { - void onBackupWelcomePageViewed(); + void onBackupWelcomePageViewed(); - void onBackupWelcomePageBackButtonTapped(); + void onBackupWelcomePageBackButtonTapped(); - void onBackupStartButtonTapped(); + void onBackupStartButtonTapped(); - void onBackupCreatePasswordPageViewed(); + void onBackupCreatePasswordPageViewed(); - void onBackupCreatePasswordBackButtonTapped(); + void onBackupCreatePasswordBackButtonTapped(); - void onBackupCreatePasswordNextButtonTapped(); + void onBackupCreatePasswordNextButtonTapped(); - void onBackupQrCodePageViewed(); + void onBackupQrCodePageViewed(); - void onBackupQrCodeBackButtonTapped(); + void onBackupQrCodeBackButtonTapped(); - void onBackupQrCodeSendButtonTapped(); + void onBackupQrCodeSendButtonTapped(); - void onBackupQrCodeMyQrCodeButtonTapped(); + void onBackupQrCodeMyQrCodeButtonTapped(); - void onBackupCompletedPageViewed(); + void onBackupCompletedPageViewed(); - void onBackupPopupPageViewed(); + void onBackupPopupPageViewed(); - void onBackupPopupButtonTapped(); + void onBackupPopupButtonTapped(); - void onBackupPopupLaterButtonTapped(); + void onBackupPopupLaterButtonTapped(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Launcher.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Launcher.java index 43434301..a37fda86 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Launcher.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Launcher.java @@ -1,52 +1,57 @@ package kin.backupandrestore; -import static kin.backupandrestore.BackupAndRestoreManager.APP_ID_EXTRA; -import static kin.backupandrestore.BackupAndRestoreManager.NETWORK_PASSPHRASE_EXTRA; -import static kin.backupandrestore.BackupAndRestoreManager.NETWORK_URL_EXTRA; -import static kin.backupandrestore.BackupAndRestoreManager.PUBLIC_ADDRESS_EXTRA; -import static kin.backupandrestore.BackupAndRestoreManager.STORE_KEY_EXTRA; - import android.app.Activity; import android.content.Intent; import android.support.annotation.NonNull; + import kin.backupandrestore.backup.view.BackupActivity; import kin.backupandrestore.restore.view.RestoreActivity; import kin.sdk.KinAccount; import kin.sdk.KinClient; +import static kin.backupandrestore.BackupAndRestoreManager.APP_ID_EXTRA; +import static kin.backupandrestore.BackupAndRestoreManager.NETWORK_PASSPHRASE_EXTRA; +import static kin.backupandrestore.BackupAndRestoreManager.NETWORK_URL_EXTRA; +import static kin.backupandrestore.BackupAndRestoreManager.PUBLIC_ADDRESS_EXTRA; +import static kin.backupandrestore.BackupAndRestoreManager.STORE_KEY_EXTRA; + class Launcher { - private final Activity activity; - private final KinClient kinClient; - - Launcher(@NonNull final Activity activity, @NonNull final KinClient kinClient) { - this.activity = activity; - this.kinClient = kinClient; - } - - void backupFlow(KinAccount kinAccount, int reqCodeBackup) { - Intent intent = new Intent(activity, BackupActivity.class); - addKinClientExtras(intent); - intent.putExtra(PUBLIC_ADDRESS_EXTRA, kinAccount.getPublicAddress()); - startForResult(intent, reqCodeBackup); - } - - void restoreFlow(int reqCodeRestore) { - Intent intent = new Intent(activity, RestoreActivity.class); - addKinClientExtras(intent); - startForResult(intent, reqCodeRestore); - } - - private void addKinClientExtras(Intent intent) { - intent.putExtra(NETWORK_URL_EXTRA, kinClient.getEnvironment().getNetworkUrl()); - intent.putExtra(NETWORK_PASSPHRASE_EXTRA, kinClient.getEnvironment().getNetworkPassphrase()); - intent.putExtra(APP_ID_EXTRA, kinClient.getAppId()); - intent.putExtra(STORE_KEY_EXTRA, kinClient.getStoreKey()); - } - - private void startForResult(@NonNull final Intent intent, final int reqCode) { - activity.startActivityForResult(intent, reqCode); + private final Activity activity; + private final KinClient kinClient; + + Launcher(@NonNull final Activity activity, @NonNull final KinClient kinClient) { + this.activity = activity; + this.kinClient = kinClient; + } + + void backupFlow(KinAccount kinAccount, int reqCodeBackup) { + Intent intent = new Intent(activity, BackupActivity.class); + addKinClientExtras(intent); + intent.putExtra(PUBLIC_ADDRESS_EXTRA, kinAccount.getPublicAddress()); + startForResult(intent, reqCodeBackup); + } + + void restoreFlow(int reqCodeRestore) { + Intent intent = new Intent(activity, RestoreActivity.class); + addKinClientExtras(intent); + startForResult(intent, reqCodeRestore); + } + + private void addKinClientExtras(Intent intent) { + intent.putExtra(NETWORK_URL_EXTRA, kinClient.getEnvironment().getNetworkUrl()); + intent.putExtra(NETWORK_PASSPHRASE_EXTRA, kinClient.getEnvironment().getNetworkPassphrase()); + intent.putExtra(APP_ID_EXTRA, kinClient.getAppId()); + intent.putExtra(STORE_KEY_EXTRA, kinClient.getStoreKey()); + } + + private void startForResult(@NonNull final Intent intent, final int reqCode) { + activity.startActivityForResult(intent, reqCode); activity.overridePendingTransition(R.anim.backup_and_restore_slide_in_right, +<<<<<<< HEAD R.anim.backup_and_restore_slide_out_left); - } +======= + R.anim.backup_and_restore_slide_out_left); +>>>>>>> master + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreCallback.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreCallback.java index 2c6eb683..171a3248 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreCallback.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreCallback.java @@ -6,9 +6,9 @@ public interface RestoreCallback { - void onSuccess(KinClient kinClient, KinAccount kinAccount); + void onSuccess(KinClient kinClient, KinAccount kinAccount); - void onCancel(); + void onCancel(); - void onFailure(BackupAndRestoreException throwable); + void onFailure(BackupAndRestoreException throwable); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreEvents.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreEvents.java index 7861a63e..1f6c7a3a 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreEvents.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/RestoreEvents.java @@ -2,20 +2,20 @@ public interface RestoreEvents { - void onRestoreUploadQrCodePageViewed(); + void onRestoreUploadQrCodePageViewed(); - void onRestoreUploadQrCodeBackButtonTapped(); + void onRestoreUploadQrCodeBackButtonTapped(); - void onRestoreUploadQrCodeButtonTapped(); + void onRestoreUploadQrCodeButtonTapped(); - void onRestoreAreYouSureOkButtonTapped(); + void onRestoreAreYouSureOkButtonTapped(); - void onRestoreAreYouSureCancelButtonTapped(); + void onRestoreAreYouSureCancelButtonTapped(); - void onRestorePasswordEntryPageViewed(); + void onRestorePasswordEntryPageViewed(); - void onRestorePasswordEntryBackButtonTapped(); + void onRestorePasswordEntryBackButtonTapped(); - void onRestorePasswordDoneButtonTapped(); + void onRestorePasswordDoneButtonTapped(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Validator.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Validator.java index 71a30ab1..5ce72ef0 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Validator.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/Validator.java @@ -2,10 +2,10 @@ public class Validator { - public static void checkNotNull(Object object, String paramName) { - if (object == null) { - throw new IllegalArgumentException(paramName + " is null"); - } - } + public static void checkNotNull(Object object, String paramName) { + if (object == null) { + throw new IllegalArgumentException(paramName + " is null"); + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenter.java index 092b4882..44bafa32 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenter.java @@ -5,5 +5,5 @@ public interface BackupInfoPresenter extends BasePresenter { - void letsGoButtonClicked(); + void letsGoButtonClicked(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenterImpl.java index df2fd0c7..f2f53534 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupInfoPresenterImpl.java @@ -1,38 +1,43 @@ package kin.backupandrestore.backup.presenter; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_START_TAPPED; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_VIEWED; - import android.support.annotation.NonNull; + import kin.backupandrestore.backup.view.BackupNavigator; import kin.backupandrestore.base.BasePresenterImpl; import kin.backupandrestore.base.BaseView; import kin.backupandrestore.events.CallbackManager; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_START_TAPPED; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_VIEWED; + public class BackupInfoPresenterImpl extends BasePresenterImpl implements BackupInfoPresenter { - private final BackupNavigator backupNavigator; - private final CallbackManager callbackManager; - - public BackupInfoPresenterImpl(@NonNull CallbackManager callbackManager, - BackupNavigator backupNavigator) { - this.backupNavigator = backupNavigator; - this.callbackManager = callbackManager; - this.callbackManager.sendBackupEvent(BACKUP_WELCOME_PAGE_VIEWED); - this.callbackManager.setCancelledResult(); // make sure cancel will be called if nothing happened. - } - - @Override - public void onBackClicked() { - backupNavigator.closeFlow(); - } - - @Override - public void letsGoButtonClicked() { - callbackManager.sendBackupEvent(BACKUP_WELCOME_PAGE_START_TAPPED); - if (view != null) { - backupNavigator.navigateToCreatePasswordPage(); - } - } + private final BackupNavigator backupNavigator; + private final CallbackManager callbackManager; + + public BackupInfoPresenterImpl(@NonNull CallbackManager callbackManager, +<<<<<<< HEAD + BackupNavigator backupNavigator) { +======= + BackupNavigator backupNavigator) { +>>>>>>> master + this.backupNavigator = backupNavigator; + this.callbackManager = callbackManager; + this.callbackManager.sendBackupEvent(BACKUP_WELCOME_PAGE_VIEWED); + this.callbackManager.setCancelledResult(); // make sure cancel will be called if nothing happened. + } + + @Override + public void onBackClicked() { + backupNavigator.closeFlow(); + } + + @Override + public void letsGoButtonClicked() { + callbackManager.sendBackupEvent(BACKUP_WELCOME_PAGE_START_TAPPED); + if (view != null) { + backupNavigator.navigateToCreatePasswordPage(); + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenter.java index eead485d..8ffa70cb 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenter.java @@ -1,6 +1,7 @@ package kin.backupandrestore.backup.presenter; import android.os.Bundle; + import kin.backupandrestore.backup.view.BackupNavigator; import kin.backupandrestore.backup.view.BackupView; import kin.backupandrestore.base.BasePresenter; @@ -8,9 +9,9 @@ public interface BackupPresenter extends BasePresenter, BackupNavigator { - void onSaveInstanceState(Bundle outState); + void onSaveInstanceState(Bundle outState); - void setAccountKey(String key); + void setAccountKey(String key); - KinAccount getKinAccount(); + KinAccount getKinAccount(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenterImpl.java index 399e2e1d..bd2c6089 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/BackupPresenterImpl.java @@ -1,148 +1,153 @@ package kin.backupandrestore.backup.presenter; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_PAGE_BACK_TAPPED; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_BACK_TAPPED; - import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; + import kin.backupandrestore.backup.view.BackupView; import kin.backupandrestore.base.BasePresenterImpl; import kin.backupandrestore.events.CallbackManager; import kin.sdk.KinAccount; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_PAGE_BACK_TAPPED; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_BACK_TAPPED; + public class BackupPresenterImpl extends BasePresenterImpl implements BackupPresenter { - static final String KEY_STEP = "kinrecovery_backup_step"; - public static final String KEY_ACCOUNT_KEY = "kinrecovery_backup_account_key"; - - private @Step - int step; - private final CallbackManager callbackManager; - private final KinAccount kinAccount; - private boolean isBackupSucceed = false; - private String accountKey; - - - public BackupPresenterImpl(@NonNull CallbackManager callbackManager, @NonNull KinAccount kinAccount, - @Nullable final Bundle savedInstanceState) { - this.callbackManager = callbackManager; - this.step = getStep(savedInstanceState); - this.kinAccount = kinAccount; - this.accountKey = getAccountKey(savedInstanceState); - } - - private int getStep(Bundle savedInstanceState) { - return savedInstanceState != null ? savedInstanceState.getInt(KEY_STEP, STEP_START) : STEP_START; - } - - private String getAccountKey(Bundle savedInstanceState) { - return savedInstanceState != null ? savedInstanceState.getString(KEY_ACCOUNT_KEY) : null; - } - - @Override - public void onAttach(BackupView view) { - super.onAttach(view); - switchToStep(step); - } - - @Override - public void onBackClicked() { - sendBackEvent(step); - if (step == STEP_WELL_DONE) { - switchToStep(STEP_CLOSE); - } else { - if (view != null) { - if (!isBackupSucceed && step == STEP_CREATE_PASSWORD) { - callbackManager.setCancelledResult(); - } - step--; - view.onBackButtonClicked(); - } - } - } - - private void sendBackEvent(@Step final int step) { - switch (step) { - case STEP_START: - callbackManager.sendBackupEvent(BACKUP_WELCOME_PAGE_BACK_TAPPED); - break; - case STEP_CREATE_PASSWORD: - callbackManager.sendBackupEvent(BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED); - break; - case STEP_SAVE_AND_SHARE: - callbackManager.sendBackupEvent(BACKUP_QR_PAGE_BACK_TAPPED); - break; - } - } - - - private void switchToStep(@Step final int step) { - if (view != null) { - this.step = step; - switch (step) { - case STEP_START: - view.startBackupFlow(); - break; - case STEP_CREATE_PASSWORD: - view.moveToCreatePasswordPage(); - break; - case STEP_SAVE_AND_SHARE: - if (accountKey != null) { - view.moveToSaveAndSharePage(accountKey); - isBackupSucceed = true; - callbackManager.sendBackupSuccessResult(); - } else { - view.showError(); - view.close(); - } - break; - case STEP_WELL_DONE: - view.moveToWellDonePage(); - break; - case STEP_CLOSE: - view.close(); - break; - } - } - } - - @Override - public void navigateToCreatePasswordPage() { - switchToStep(STEP_CREATE_PASSWORD); - } - - @Override - public void navigateToSaveAndSharePage(@NonNull String accountKey) { - this.accountKey = accountKey; - switchToStep(STEP_SAVE_AND_SHARE); - } - - @Override - public void navigateToWellDonePage() { - switchToStep(STEP_WELL_DONE); - } - - @Override - public void closeFlow() { - switchToStep(STEP_CLOSE); - } - - @Override - public void setAccountKey(String accountKey) { - this.accountKey = accountKey; - } - - @Override - public KinAccount getKinAccount() { - return kinAccount; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - outState.putInt(KEY_STEP, step); - outState.putString(KEY_ACCOUNT_KEY, accountKey); - } + static final String KEY_STEP = "kinrecovery_backup_step"; + public static final String KEY_ACCOUNT_KEY = "kinrecovery_backup_account_key"; + + private @Step + int step; + private final CallbackManager callbackManager; + private final KinAccount kinAccount; + private boolean isBackupSucceed = false; + private String accountKey; + + + public BackupPresenterImpl(@NonNull CallbackManager callbackManager, @NonNull KinAccount kinAccount, +<<<<<<< HEAD + @Nullable final Bundle savedInstanceState) { +======= + @Nullable final Bundle savedInstanceState) { +>>>>>>> master + this.callbackManager = callbackManager; + this.step = getStep(savedInstanceState); + this.kinAccount = kinAccount; + this.accountKey = getAccountKey(savedInstanceState); + } + + private int getStep(Bundle savedInstanceState) { + return savedInstanceState != null ? savedInstanceState.getInt(KEY_STEP, STEP_START) : STEP_START; + } + + private String getAccountKey(Bundle savedInstanceState) { + return savedInstanceState != null ? savedInstanceState.getString(KEY_ACCOUNT_KEY) : null; + } + + @Override + public void onAttach(BackupView view) { + super.onAttach(view); + switchToStep(step); + } + + @Override + public void onBackClicked() { + sendBackEvent(step); + if (step == STEP_WELL_DONE) { + switchToStep(STEP_CLOSE); + } else { + if (view != null) { + if (!isBackupSucceed && step == STEP_CREATE_PASSWORD) { + callbackManager.setCancelledResult(); + } + step--; + view.onBackButtonClicked(); + } + } + } + + private void sendBackEvent(@Step final int step) { + switch (step) { + case STEP_START: + callbackManager.sendBackupEvent(BACKUP_WELCOME_PAGE_BACK_TAPPED); + break; + case STEP_CREATE_PASSWORD: + callbackManager.sendBackupEvent(BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED); + break; + case STEP_SAVE_AND_SHARE: + callbackManager.sendBackupEvent(BACKUP_QR_PAGE_BACK_TAPPED); + break; + } + } + + + private void switchToStep(@Step final int step) { + if (view != null) { + this.step = step; + switch (step) { + case STEP_START: + view.startBackupFlow(); + break; + case STEP_CREATE_PASSWORD: + view.moveToCreatePasswordPage(); + break; + case STEP_SAVE_AND_SHARE: + if (accountKey != null) { + view.moveToSaveAndSharePage(accountKey); + isBackupSucceed = true; + callbackManager.sendBackupSuccessResult(); + } else { + view.showError(); + view.close(); + } + break; + case STEP_WELL_DONE: + view.moveToWellDonePage(); + break; + case STEP_CLOSE: + view.close(); + break; + } + } + } + + @Override + public void navigateToCreatePasswordPage() { + switchToStep(STEP_CREATE_PASSWORD); + } + + @Override + public void navigateToSaveAndSharePage(@NonNull String accountKey) { + this.accountKey = accountKey; + switchToStep(STEP_SAVE_AND_SHARE); + } + + @Override + public void navigateToWellDonePage() { + switchToStep(STEP_WELL_DONE); + } + + @Override + public void closeFlow() { + switchToStep(STEP_CLOSE); + } + + @Override + public void setAccountKey(String accountKey) { + this.accountKey = accountKey; + } + + @Override + public KinAccount getKinAccount() { + return kinAccount; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt(KEY_STEP, step); + outState.putString(KEY_ACCOUNT_KEY, accountKey); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/CreatePasswordPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/CreatePasswordPresenter.java index e5c9aa14..87098d41 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/CreatePasswordPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/CreatePasswordPresenter.java @@ -9,9 +9,9 @@ public interface CreatePasswordPresenter extends BasePresenter implements - CreatePasswordPresenter { - - private final BackupNavigator backupNavigator; - private final CallbackManager callbackManager; - private KinAccount kinAccount; - - private boolean isPasswordRulesOK = false; - private boolean isIUnderstandChecked = false; - private final Pattern pattern; - - public CreatePasswordPresenterImpl(@NonNull final CallbackManager callbackManager, - @NonNull final BackupNavigator backupNavigator, @NonNull KinAccount kinAccount) { - this.backupNavigator = backupNavigator; - this.callbackManager = callbackManager; - this.callbackManager.sendBackupEvent(BACKUP_CREATE_PASSWORD_PAGE_VIEWED); - this.kinAccount = kinAccount; - this.pattern = getPattern(); - } - - @Override - public void onBackClicked() { - backupNavigator.closeFlow(); - } - - @Override - public void passwordCheck(String changedPassword, String otherPassword, boolean isConfirmPassword) { - boolean changedPasswordIsEmpty = changedPassword.isEmpty(); - if (validatePassword(changedPassword)) { - isPasswordRulesOK = true; - handlePasswordCorrectness(isConfirmPassword, true); - } else { - isPasswordRulesOK = false; - if (changedPasswordIsEmpty) { - handlePasswordIsEmpty(isConfirmPassword); - } else { - handlePasswordCorrectness(isConfirmPassword, false); - } - } - checkAllCompleted(otherPassword, changedPassword); - } - - private void handlePasswordCorrectness(boolean isConfirmPassword, boolean isCorrect) { - if (view != null) { - if (isConfirmPassword) { - view.setConfirmPasswordIsCorrect(isCorrect); - } else { - view.setEnterPasswordIsCorrect(isCorrect); - } - } - } - - private void handlePasswordIsEmpty(boolean isConfirmPassword) { - if (view != null) { - if (isConfirmPassword) { - view.resetConfirmPasswordField(); - } else { - view.resetEnterPasswordField(); - } - } - } - - @Override - public void iUnderstandChecked(boolean isChecked, String enterPassword, String confirmPassword) { - isIUnderstandChecked = isChecked; - checkAllCompleted(enterPassword, confirmPassword); - } - - @Override - public void nextButtonClicked(String confirmPassword, String password) { - if (confirmPassword.equals(password)) { - callbackManager.sendBackupEvent(BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED); - exportAccount(password); - } else { - if (view != null) { - view.setPasswordDoesNotMatch(); - } - } - } - - private void exportAccount(String password) { - try { - final String accountKey = kinAccount.export(password); - backupNavigator.navigateToSaveAndSharePage(accountKey); - } catch (CryptoException e) { - if (view != null) { - view.showBackupFailed(); - } - } - } - - @Override - public void onRetryClicked(String password) { - exportAccount(password); - } - - @Override - public void checkAllCompleted(String password, String otherPassword) { - if (isPasswordRulesOK && isIUnderstandChecked && !(password.isEmpty() || otherPassword.isEmpty())) { - enableNextButton(); - } else { - disableNextButton(); - } - } - - private void disableNextButton() { - if (view != null) { - view.disableNextButton(); - } - } - - private void enableNextButton() { - if (view != null) { - view.enableNextButton(); - } - } - - private Pattern getPattern() { - String digit = "(?=.*\\d)"; - String upper = "(?=.*[A-Z])"; - String lower = "(?=.*[a-z])"; - String special = "(?=.*[!@#$%^&*()_+{}\\[\\]])"; - int min = 9; - int max = 20; - StringBuilder sb = new StringBuilder() - .append("^") - .append(digit) - .append(upper) - .append(lower) - .append(special) - .append("(.{") - .append(min).append(",") - .append(max).append("})$"); - return Pattern.compile(sb.toString()); - } - - - private boolean validatePassword(@NonNull final String password) { - Validator.checkNotNull(password, "password"); - return pattern.matcher(password).matches(); - } +<<<<<<< HEAD + CreatePasswordPresenter { +======= + CreatePasswordPresenter { +>>>>>>> master + + private final BackupNavigator backupNavigator; + private final CallbackManager callbackManager; + private KinAccount kinAccount; + + private boolean isPasswordRulesOK = false; + private boolean isIUnderstandChecked = false; + private final Pattern pattern; + + public CreatePasswordPresenterImpl(@NonNull final CallbackManager callbackManager, +<<<<<<< HEAD + @NonNull final BackupNavigator backupNavigator, @NonNull KinAccount kinAccount) { +======= + @NonNull final BackupNavigator backupNavigator, @NonNull KinAccount kinAccount) { +>>>>>>> master + this.backupNavigator = backupNavigator; + this.callbackManager = callbackManager; + this.callbackManager.sendBackupEvent(BACKUP_CREATE_PASSWORD_PAGE_VIEWED); + this.kinAccount = kinAccount; + this.pattern = getPattern(); + } + + @Override + public void onBackClicked() { + backupNavigator.closeFlow(); + } + + @Override + public void passwordCheck(String changedPassword, String otherPassword, boolean isConfirmPassword) { + boolean changedPasswordIsEmpty = changedPassword.isEmpty(); + if (validatePassword(changedPassword)) { + isPasswordRulesOK = true; + handlePasswordCorrectness(isConfirmPassword, true); + } else { + isPasswordRulesOK = false; + if (changedPasswordIsEmpty) { + handlePasswordIsEmpty(isConfirmPassword); + } else { + handlePasswordCorrectness(isConfirmPassword, false); + } + } + checkAllCompleted(otherPassword, changedPassword); + } + + private void handlePasswordCorrectness(boolean isConfirmPassword, boolean isCorrect) { + if (view != null) { + if (isConfirmPassword) { + view.setConfirmPasswordIsCorrect(isCorrect); + } else { + view.setEnterPasswordIsCorrect(isCorrect); + } + } + } + + private void handlePasswordIsEmpty(boolean isConfirmPassword) { + if (view != null) { + if (isConfirmPassword) { + view.resetConfirmPasswordField(); + } else { + view.resetEnterPasswordField(); + } + } + } + + @Override + public void iUnderstandChecked(boolean isChecked, String enterPassword, String confirmPassword) { + isIUnderstandChecked = isChecked; + checkAllCompleted(enterPassword, confirmPassword); + } + + @Override + public void nextButtonClicked(String confirmPassword, String password) { + if (confirmPassword.equals(password)) { + callbackManager.sendBackupEvent(BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED); + exportAccount(password); + } else { + if (view != null) { + view.setPasswordDoesNotMatch(); + } + } + } + + private void exportAccount(String password) { + try { + final String accountKey = kinAccount.export(password); + backupNavigator.navigateToSaveAndSharePage(accountKey); + } catch (CryptoException e) { + if (view != null) { + view.showBackupFailed(); + } + } + } + + @Override + public void onRetryClicked(String password) { + exportAccount(password); + } + + @Override + public void checkAllCompleted(String password, String otherPassword) { + if (isPasswordRulesOK && isIUnderstandChecked && !(password.isEmpty() || otherPassword.isEmpty())) { + enableNextButton(); + } else { + disableNextButton(); + } + } + + private void disableNextButton() { + if (view != null) { + view.disableNextButton(); + } + } + + private void enableNextButton() { + if (view != null) { + view.enableNextButton(); + } + } + + private Pattern getPattern() { + String digit = "(?=.*\\d)"; + String upper = "(?=.*[A-Z])"; + String lower = "(?=.*[a-z])"; + String special = "(?=.*[!@#$%^&*()_+{}\\[\\]])"; + int min = 9; + int max = 20; + StringBuilder sb = new StringBuilder() +<<<<<<< HEAD + .append("^") + .append(digit) + .append(upper) + .append(lower) + .append(special) + .append("(.{") + .append(min).append(",") + .append(max).append("})$"); +======= + .append("^") + .append(digit) + .append(upper) + .append(lower) + .append(special) + .append("(.{") + .append(min).append(",") + .append(max).append("})$"); +>>>>>>> master + return Pattern.compile(sb.toString()); + } + + + private boolean validatePassword(@NonNull final String password) { + Validator.checkNotNull(password, "password"); + return pattern.matcher(password).matches(); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenter.java index 75bc7128..4d69de71 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenter.java @@ -1,16 +1,17 @@ package kin.backupandrestore.backup.presenter; import android.os.Bundle; + import kin.backupandrestore.backup.view.SaveAndShareView; import kin.backupandrestore.base.BasePresenter; public interface SaveAndSharePresenter extends BasePresenter { - void iHaveSavedChecked(boolean isChecked); + void iHaveSavedChecked(boolean isChecked); - void sendQREmailClicked(); + void sendQREmailClicked(); - void couldNotLoadQRImage(); + void couldNotLoadQRImage(); - void onSaveInstanceState(Bundle outState); + void onSaveInstanceState(Bundle outState); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenterImpl.java index 12b8f144..ba69bcb3 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/presenter/SaveAndSharePresenterImpl.java @@ -1,12 +1,9 @@ package kin.backupandrestore.backup.presenter; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_CODE_PAGE_VIEWED; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_PAGE_QR_SAVED_TAPPED; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_PAGE_SEND_QR_TAPPED; - import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; + import kin.backupandrestore.backup.view.BackupNavigator; import kin.backupandrestore.backup.view.SaveAndShareView; import kin.backupandrestore.base.BasePresenterImpl; @@ -14,92 +11,101 @@ import kin.backupandrestore.qr.QRBarcodeGenerator; import kin.backupandrestore.qr.QRBarcodeGenerator.QRBarcodeGeneratorException; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_CODE_PAGE_VIEWED; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_PAGE_QR_SAVED_TAPPED; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_QR_PAGE_SEND_QR_TAPPED; + public class SaveAndSharePresenterImpl extends BasePresenterImpl implements SaveAndSharePresenter { - static final String IS_SEND_EMAIL_CLICKED = "is_send_email_clicked"; - private final BackupNavigator backupNavigator; - private final QRBarcodeGenerator qrBarcodeGenerator; - private final CallbackManager callbackManager; - - private Uri qrURI; - private boolean isSendQREmailClicked; - private boolean couldNotGenerateQR = false; - - - public SaveAndSharePresenterImpl(@NonNull final CallbackManager callbackManager, - BackupNavigator backupNavigator, - QRBarcodeGenerator qrBarcodeGenerator, String key, Bundle savedInstanceState) { - this.backupNavigator = backupNavigator; - this.qrBarcodeGenerator = qrBarcodeGenerator; - this.callbackManager = callbackManager; - this.isSendQREmailClicked = getIsSendQrEmailClicked(savedInstanceState); - this.callbackManager.sendBackupEvent(BACKUP_QR_CODE_PAGE_VIEWED); - createQR(key); - } - - private boolean getIsSendQrEmailClicked(Bundle savedInstanceState) { - return savedInstanceState != null && savedInstanceState.getBoolean(IS_SEND_EMAIL_CLICKED); - } - - private void createQR(String key) { - try { - this.qrURI = this.qrBarcodeGenerator.generate(key); - } catch (QRBarcodeGeneratorException e) { - couldNotGenerateQR = true; - } - } - - @Override - public void onAttach(SaveAndShareView view) { - super.onAttach(view); - if (couldNotGenerateQR) { - couldNotLoadQRImage(); - } else { - setQRImage(); - } - if (isSendQREmailClicked && view != null) { - view.showIHaveSavedCheckBox(); - } - } - - private void setQRImage() { - if (view != null) { - view.setQRImage(qrURI); - } - } - - @Override - public void onBackClicked() { - - } - - @Override - public void iHaveSavedChecked(boolean isChecked) { - if (isChecked) { - callbackManager.sendBackupEvent(BACKUP_QR_PAGE_QR_SAVED_TAPPED); - backupNavigator.navigateToWellDonePage(); - } - } - - @Override - public void sendQREmailClicked() { - callbackManager.sendBackupEvent(BACKUP_QR_PAGE_SEND_QR_TAPPED); - isSendQREmailClicked = true; - if (qrURI != null && view != null) { - view.showSendIntent(qrURI); - view.showIHaveSavedCheckBox(); - } - } - - @Override - public void couldNotLoadQRImage() { - if (view != null) { - view.showErrorTryAgainLater(); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - outState.putBoolean(IS_SEND_EMAIL_CLICKED, isSendQREmailClicked); - } + static final String IS_SEND_EMAIL_CLICKED = "is_send_email_clicked"; + private final BackupNavigator backupNavigator; + private final QRBarcodeGenerator qrBarcodeGenerator; + private final CallbackManager callbackManager; + + private Uri qrURI; + private boolean isSendQREmailClicked; + private boolean couldNotGenerateQR = false; + + + public SaveAndSharePresenterImpl(@NonNull final CallbackManager callbackManager, +<<<<<<< HEAD + BackupNavigator backupNavigator, + QRBarcodeGenerator qrBarcodeGenerator, String key, Bundle savedInstanceState) { +======= + BackupNavigator backupNavigator, + QRBarcodeGenerator qrBarcodeGenerator, String key, Bundle savedInstanceState) { +>>>>>>> master + this.backupNavigator = backupNavigator; + this.qrBarcodeGenerator = qrBarcodeGenerator; + this.callbackManager = callbackManager; + this.isSendQREmailClicked = getIsSendQrEmailClicked(savedInstanceState); + this.callbackManager.sendBackupEvent(BACKUP_QR_CODE_PAGE_VIEWED); + createQR(key); + } + + private boolean getIsSendQrEmailClicked(Bundle savedInstanceState) { + return savedInstanceState != null && savedInstanceState.getBoolean(IS_SEND_EMAIL_CLICKED); + } + + private void createQR(String key) { + try { + this.qrURI = this.qrBarcodeGenerator.generate(key); + } catch (QRBarcodeGeneratorException e) { + couldNotGenerateQR = true; + } + } + + @Override + public void onAttach(SaveAndShareView view) { + super.onAttach(view); + if (couldNotGenerateQR) { + couldNotLoadQRImage(); + } else { + setQRImage(); + } + if (isSendQREmailClicked && view != null) { + view.showIHaveSavedCheckBox(); + } + } + + private void setQRImage() { + if (view != null) { + view.setQRImage(qrURI); + } + } + + @Override + public void onBackClicked() { + + } + + @Override + public void iHaveSavedChecked(boolean isChecked) { + if (isChecked) { + callbackManager.sendBackupEvent(BACKUP_QR_PAGE_QR_SAVED_TAPPED); + backupNavigator.navigateToWellDonePage(); + } + } + + @Override + public void sendQREmailClicked() { + callbackManager.sendBackupEvent(BACKUP_QR_PAGE_SEND_QR_TAPPED); + isSendQREmailClicked = true; + if (qrURI != null && view != null) { + view.showSendIntent(qrURI); + view.showIHaveSavedCheckBox(); + } + } + + @Override + public void couldNotLoadQRImage() { + if (view != null) { + view.showErrorTryAgainLater(); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putBoolean(IS_SEND_EMAIL_CLICKED, isSendQREmailClicked); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupActivity.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupActivity.java index 1852eb56..c53c6a6a 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupActivity.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupActivity.java @@ -12,6 +12,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; + import kin.backupandrestore.AccountExtractor; import kin.backupandrestore.BackupAndRestoreManager; import kin.backupandrestore.R; @@ -27,202 +28,245 @@ public class BackupActivity extends BaseToolbarActivity implements BackupView { - public static final String MOVE_TO_SAVE_AND_SHARE = "move_to_save_and_share"; - public static final int TOOLBAR_COLOR_ANIM_DURATION = 500; - public static final String TAG_WELL_DONE_PAGE = WellDoneBackupFragment.class.getSimpleName(); - public static final String TAG_SAVE_AND_SHARE_PAGE = SaveAndShareFragment.class.getSimpleName(); - public static final String TAG_CREATE_PASSWORD_PAGE = CreatePasswordFragment.class.getSimpleName(); - private BackupPresenter backupPresenter; - - @Override - protected int getContentLayout() { - return R.layout.backup_and_restore_frgment_activity; - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - KinAccount kinAccount = getKinAccountFromClient(); - backupPresenter = new BackupPresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(this))), kinAccount, - savedInstanceState); - backupPresenter.onAttach(this); - setNavigationClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - backupPresenter.onBackClicked(); - } - }); - } - - @Nullable - private KinAccount getKinAccountFromClient() { - KinAccount kinAccount = null; - Intent intent = getIntent(); - if (intent != null) { - KinClient kinClient = getKinClientFromIntent(intent); - String publicAddress = intent.getStringExtra(BackupAndRestoreManager.PUBLIC_ADDRESS_EXTRA); - kinAccount = AccountExtractor.getKinAccount(kinClient, publicAddress); - } - return kinAccount; - } - - @NonNull - private KinClient getKinClientFromIntent(Intent intent) { - String networkUrl = intent.getStringExtra(BackupAndRestoreManager.NETWORK_URL_EXTRA); - String networkPassphrase = intent.getStringExtra(BackupAndRestoreManager.NETWORK_PASSPHRASE_EXTRA); - String appId = intent.getStringExtra(BackupAndRestoreManager.APP_ID_EXTRA); - String storeKey = intent.getStringExtra(BackupAndRestoreManager.STORE_KEY_EXTRA); - return new KinClient(getApplicationContext(), new Environment(networkUrl, - networkPassphrase), appId, storeKey); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - backupPresenter.onSaveInstanceState(outState); - super.onSaveInstanceState(outState); - } - - @Override - public void startBackupFlow() { - setToolbarColor(android.R.color.white); - Drawable vectorDrawable = AppCompatResources.getDrawable(this, R.drawable.back); - setNavigationIcon(vectorDrawable); - setToolbarTitle(EMPTY_TITLE); - BackupInfoFragment backupInfoFragment = (BackupInfoFragment) getSupportFragmentManager() - .findFragmentByTag(BackupInfoFragment.class.getSimpleName()); - - if (backupInfoFragment == null) { - backupInfoFragment = BackupInfoFragment.newInstance(backupPresenter); - } else { - backupInfoFragment.setNextStepListener(backupPresenter); - } - - getSupportFragmentManager().beginTransaction() - .replace(R.id.fragment_frame, backupInfoFragment) - .commit(); - } - - @Override - public void moveToCreatePasswordPage() { - setToolbarColorWithAnim(android.R.color.white, TOOLBAR_COLOR_ANIM_DURATION); - setNavigationIcon(R.drawable.back); - setToolbarTitle(R.string.backup_and_restore_create_password); - setStep(1, 2); - CreatePasswordFragment createPasswordFragment = getSavedCreatePasswordFragment(); - - if (createPasswordFragment == null) { - createPasswordFragment = CreatePasswordFragment - .newInstance(backupPresenter, this, backupPresenter.getKinAccount()); - } else { - setCreatePasswordFragmentAttributes(createPasswordFragment); - } - - replaceFragment(createPasswordFragment, null, TAG_CREATE_PASSWORD_PAGE); - } - - @Override - public void moveToSaveAndSharePage(String key) { - setNavigationIcon(R.drawable.back); - setToolbarTitle(R.string.backup_and_restore_my_kin_wallet_qr_code); - setStep(2, 2); - backupPresenter.setAccountKey(key); - SaveAndShareFragment saveAndShareFragment = (SaveAndShareFragment) getSupportFragmentManager() - .findFragmentByTag(TAG_SAVE_AND_SHARE_PAGE); - - if (saveAndShareFragment == null) { - saveAndShareFragment = SaveAndShareFragment.newInstance(backupPresenter, key); - replaceFragment(saveAndShareFragment, MOVE_TO_SAVE_AND_SHARE, TAG_SAVE_AND_SHARE_PAGE); - } else { - saveAndShareFragment.setNextStepListener(backupPresenter); - // We should not add to back stack because it's already in stack. - replaceFragment(saveAndShareFragment, null, TAG_SAVE_AND_SHARE_PAGE); - } - } - - @Override - public void moveToWellDonePage() { - setToolbarColorWithAnim(android.R.color.white, TOOLBAR_COLOR_ANIM_DURATION); - setNavigationIcon(R.drawable.close); - setToolbarTitle(EMPTY_TITLE); - clearSteps(); - WellDoneBackupFragment wellDoneFragment = (WellDoneBackupFragment) getSupportFragmentManager() - .findFragmentByTag(TAG_WELL_DONE_PAGE); - - if (wellDoneFragment == null) { - wellDoneFragment = WellDoneBackupFragment.newInstance(); - } - - replaceFragment(wellDoneFragment, null, TAG_WELL_DONE_PAGE); - } - - private void replaceFragment(Fragment backupFragment, @Nullable String backStackName, @NonNull String tag) { - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction() - .setCustomAnimations( + public static final String MOVE_TO_SAVE_AND_SHARE = "move_to_save_and_share"; + public static final int TOOLBAR_COLOR_ANIM_DURATION = 500; + public static final String TAG_WELL_DONE_PAGE = WellDoneBackupFragment.class.getSimpleName(); + public static final String TAG_SAVE_AND_SHARE_PAGE = SaveAndShareFragment.class.getSimpleName(); + public static final String TAG_CREATE_PASSWORD_PAGE = CreatePasswordFragment.class.getSimpleName(); + private BackupPresenter backupPresenter; + + @Override + protected int getContentLayout() { + return R.layout.backup_and_restore_frgment_activity; + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + KinAccount kinAccount = getKinAccountFromClient(); + backupPresenter = new BackupPresenterImpl( +<<<<<<< HEAD + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(this))), kinAccount, + savedInstanceState); +======= + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(this))), kinAccount, + savedInstanceState); +>>>>>>> master + backupPresenter.onAttach(this); + setNavigationClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + backupPresenter.onBackClicked(); + } + }); + } + + @Nullable + private KinAccount getKinAccountFromClient() { + KinAccount kinAccount = null; + Intent intent = getIntent(); + if (intent != null) { + KinClient kinClient = getKinClientFromIntent(intent); + String publicAddress = intent.getStringExtra(BackupAndRestoreManager.PUBLIC_ADDRESS_EXTRA); + kinAccount = AccountExtractor.getKinAccount(kinClient, publicAddress); + } + return kinAccount; + } + + @NonNull + private KinClient getKinClientFromIntent(Intent intent) { + String networkUrl = intent.getStringExtra(BackupAndRestoreManager.NETWORK_URL_EXTRA); + String networkPassphrase = intent.getStringExtra(BackupAndRestoreManager.NETWORK_PASSPHRASE_EXTRA); + String appId = intent.getStringExtra(BackupAndRestoreManager.APP_ID_EXTRA); + String storeKey = intent.getStringExtra(BackupAndRestoreManager.STORE_KEY_EXTRA); + return new KinClient(getApplicationContext(), new Environment(networkUrl, +<<<<<<< HEAD + networkPassphrase), appId, storeKey); +======= + networkPassphrase), appId, storeKey); +>>>>>>> master + } + + @Override + public void onSaveInstanceState(Bundle outState) { + backupPresenter.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + + @Override + public void startBackupFlow() { + setToolbarColor(android.R.color.white); + Drawable vectorDrawable = AppCompatResources.getDrawable(this, R.drawable.back); + setNavigationIcon(vectorDrawable); + setToolbarTitle(EMPTY_TITLE); + BackupInfoFragment backupInfoFragment = (BackupInfoFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(BackupInfoFragment.class.getSimpleName()); +======= + .findFragmentByTag(BackupInfoFragment.class.getSimpleName()); +>>>>>>> master + + if (backupInfoFragment == null) { + backupInfoFragment = BackupInfoFragment.newInstance(backupPresenter); + } else { + backupInfoFragment.setNextStepListener(backupPresenter); + } + + getSupportFragmentManager().beginTransaction() +<<<<<<< HEAD + .replace(R.id.fragment_frame, backupInfoFragment) + .commit(); +======= + .replace(R.id.fragment_frame, backupInfoFragment) + .commit(); +>>>>>>> master + } + + @Override + public void moveToCreatePasswordPage() { + setToolbarColorWithAnim(android.R.color.white, TOOLBAR_COLOR_ANIM_DURATION); + setNavigationIcon(R.drawable.back); + setToolbarTitle(R.string.backup_and_restore_create_password); + setStep(1, 2); + CreatePasswordFragment createPasswordFragment = getSavedCreatePasswordFragment(); + + if (createPasswordFragment == null) { + createPasswordFragment = CreatePasswordFragment +<<<<<<< HEAD + .newInstance(backupPresenter, this, backupPresenter.getKinAccount()); +======= + .newInstance(backupPresenter, this, backupPresenter.getKinAccount()); +>>>>>>> master + } else { + setCreatePasswordFragmentAttributes(createPasswordFragment); + } + + replaceFragment(createPasswordFragment, null, TAG_CREATE_PASSWORD_PAGE); + } + + @Override + public void moveToSaveAndSharePage(String key) { + setNavigationIcon(R.drawable.back); + setToolbarTitle(R.string.backup_and_restore_my_kin_wallet_qr_code); + setStep(2, 2); + backupPresenter.setAccountKey(key); + SaveAndShareFragment saveAndShareFragment = (SaveAndShareFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(TAG_SAVE_AND_SHARE_PAGE); +======= + .findFragmentByTag(TAG_SAVE_AND_SHARE_PAGE); +>>>>>>> master + + if (saveAndShareFragment == null) { + saveAndShareFragment = SaveAndShareFragment.newInstance(backupPresenter, key); + replaceFragment(saveAndShareFragment, MOVE_TO_SAVE_AND_SHARE, TAG_SAVE_AND_SHARE_PAGE); + } else { + saveAndShareFragment.setNextStepListener(backupPresenter); + // We should not add to back stack because it's already in stack. + replaceFragment(saveAndShareFragment, null, TAG_SAVE_AND_SHARE_PAGE); + } + } + + @Override + public void moveToWellDonePage() { + setToolbarColorWithAnim(android.R.color.white, TOOLBAR_COLOR_ANIM_DURATION); + setNavigationIcon(R.drawable.close); + setToolbarTitle(EMPTY_TITLE); + clearSteps(); + WellDoneBackupFragment wellDoneFragment = (WellDoneBackupFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(TAG_WELL_DONE_PAGE); +======= + .findFragmentByTag(TAG_WELL_DONE_PAGE); +>>>>>>> master + + if (wellDoneFragment == null) { + wellDoneFragment = WellDoneBackupFragment.newInstance(); + } + + replaceFragment(wellDoneFragment, null, TAG_WELL_DONE_PAGE); + } + + private void replaceFragment(Fragment backupFragment, @Nullable String backStackName, @NonNull String tag) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction() +<<<<<<< HEAD + .setCustomAnimations( R.anim.backup_and_restore_slide_in_right, R.anim.backup_and_restore_slide_out_left, R.anim.backup_and_restore_slide_in_left, R.anim.backup_and_restore_slide_out_right) - .replace(R.id.fragment_frame, backupFragment, tag); - - if (backStackName != null) { - transaction.addToBackStack(backStackName); - } - transaction.commit(); - } - - @Override - public void close() { - closeKeyboard(); // Verify the keyboard is hidden - finish(); + .replace(R.id.fragment_frame, backupFragment, tag); +======= + .setCustomAnimations( + R.anim.backup_and_restore_slide_in_right, + R.anim.backup_and_restore_slide_out_left, + R.anim.backup_and_restore_slide_in_left, + R.anim.backup_and_restore_slide_out_right) + .replace(R.id.fragment_frame, backupFragment, tag); +>>>>>>> master + + if (backStackName != null) { + transaction.addToBackStack(backStackName); + } + transaction.commit(); + } + + @Override + public void close() { + closeKeyboard(); // Verify the keyboard is hidden + finish(); overridePendingTransition(0, R.anim.backup_and_restore_slide_out_right); - } - - @Override - public void showError() { - Toast.makeText(this, R.string.backup_and_restore_something_went_wrong_title, Toast.LENGTH_SHORT).show(); - } - - @Override - public void onBackPressed() { - backupPresenter.onBackClicked(); - } - - @Override - protected void onStop() { - super.onStop(); - closeKeyboard(); // Verify the keyboard is hidden - } - - @Override - public void onBackButtonClicked() { - int count = getSupportFragmentManager().getBackStackEntryCount(); - if (count >= 1) { - BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(count - 1); - if (entry.getName().equals(MOVE_TO_SAVE_AND_SHARE)) { - // After pressing back from SaveAndShareFragment, should put the attrs again. - // Because this is the only fragment that should be in stack. - CreatePasswordFragment createPasswordFragment = getSavedCreatePasswordFragment(); - if (createPasswordFragment != null) { - setCreatePasswordFragmentAttributes(createPasswordFragment); - } - } - } - super.onBackPressed(); - if (count == 0) { - closeKeyboard(); // Verify the keyboard is hidden + } + + @Override + public void showError() { + Toast.makeText(this, R.string.backup_and_restore_something_went_wrong_title, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onBackPressed() { + backupPresenter.onBackClicked(); + } + + @Override + protected void onStop() { + super.onStop(); + closeKeyboard(); // Verify the keyboard is hidden + } + + @Override + public void onBackButtonClicked() { + int count = getSupportFragmentManager().getBackStackEntryCount(); + if (count >= 1) { + BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(count - 1); + if (entry.getName().equals(MOVE_TO_SAVE_AND_SHARE)) { + // After pressing back from SaveAndShareFragment, should put the attrs again. + // Because this is the only fragment that should be in stack. + CreatePasswordFragment createPasswordFragment = getSavedCreatePasswordFragment(); + if (createPasswordFragment != null) { + setCreatePasswordFragmentAttributes(createPasswordFragment); + } + } + } + super.onBackPressed(); + if (count == 0) { + closeKeyboard(); // Verify the keyboard is hidden overridePendingTransition(0, R.anim.backup_and_restore_slide_out_right); - } - } - - private void setCreatePasswordFragmentAttributes(CreatePasswordFragment createPasswordFragment) { - createPasswordFragment.setNextStepListener(backupPresenter); - createPasswordFragment.setKeyboardHandler(this); - createPasswordFragment.setKinAccount(backupPresenter.getKinAccount()); - } - - private CreatePasswordFragment getSavedCreatePasswordFragment() { - return (CreatePasswordFragment) getSupportFragmentManager() - .findFragmentByTag(TAG_CREATE_PASSWORD_PAGE); - } + } + } + + private void setCreatePasswordFragmentAttributes(CreatePasswordFragment createPasswordFragment) { + createPasswordFragment.setNextStepListener(backupPresenter); + createPasswordFragment.setKeyboardHandler(this); + createPasswordFragment.setKinAccount(backupPresenter.getKinAccount()); + } + + private CreatePasswordFragment getSavedCreatePasswordFragment() { + return (CreatePasswordFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(TAG_CREATE_PASSWORD_PAGE); +======= + .findFragmentByTag(TAG_CREATE_PASSWORD_PAGE); +>>>>>>> master + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupInfoFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupInfoFragment.java index d1037232..24b302f8 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupInfoFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupInfoFragment.java @@ -8,6 +8,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; + import kin.backupandrestore.R; import kin.backupandrestore.backup.presenter.BackupInfoPresenter; import kin.backupandrestore.backup.presenter.BackupInfoPresenterImpl; @@ -18,38 +19,46 @@ public class BackupInfoFragment extends Fragment implements BaseView { - public static BackupInfoFragment newInstance(@NonNull final BackupNavigator nextStepListener) { - BackupInfoFragment fragment = new BackupInfoFragment(); - fragment.setNextStepListener(nextStepListener); - return fragment; - } - - private BackupNavigator nextStepListener; - private BackupInfoPresenter backupInfoPresenter; - - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.backup_and_restore_fragment_backup_info, container, false); - initViews(root); - backupInfoPresenter = new BackupInfoPresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener); - backupInfoPresenter.onAttach(this); - return root; - } - - private void initViews(View root) { - root.findViewById(R.id.lets_go_button).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - backupInfoPresenter.letsGoButtonClicked(); - } - }); - } - - public void setNextStepListener(@NonNull final BackupNavigator nextStepListener) { - this.nextStepListener = nextStepListener; - } + public static BackupInfoFragment newInstance(@NonNull final BackupNavigator nextStepListener) { + BackupInfoFragment fragment = new BackupInfoFragment(); + fragment.setNextStepListener(nextStepListener); + return fragment; + } + + private BackupNavigator nextStepListener; + private BackupInfoPresenter backupInfoPresenter; + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, +<<<<<<< HEAD + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.backup_and_restore_fragment_backup_info, container, false); + initViews(root); + backupInfoPresenter = new BackupInfoPresenterImpl( + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener); +======= + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.backup_and_restore_fragment_backup_info, container, false); + initViews(root); + backupInfoPresenter = new BackupInfoPresenterImpl( + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener); +>>>>>>> master + backupInfoPresenter.onAttach(this); + return root; + } + + private void initViews(View root) { + root.findViewById(R.id.lets_go_button).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + backupInfoPresenter.letsGoButtonClicked(); + } + }); + } + + public void setNextStepListener(@NonNull final BackupNavigator nextStepListener) { + this.nextStepListener = nextStepListener; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupNavigator.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupNavigator.java index 563f2af1..ca6249bb 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupNavigator.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupNavigator.java @@ -2,30 +2,31 @@ import android.support.annotation.IntDef; import android.support.annotation.NonNull; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; public interface BackupNavigator { - int STEP_START = 0x00000000; - int STEP_CREATE_PASSWORD = 0x00000001; - int STEP_SAVE_AND_SHARE = 0x00000002; - int STEP_WELL_DONE = 0x00000003; - int STEP_CLOSE = 0x00000004; + int STEP_START = 0x00000000; + int STEP_CREATE_PASSWORD = 0x00000001; + int STEP_SAVE_AND_SHARE = 0x00000002; + int STEP_WELL_DONE = 0x00000003; + int STEP_CLOSE = 0x00000004; - @IntDef({STEP_START, STEP_CREATE_PASSWORD, STEP_SAVE_AND_SHARE, STEP_WELL_DONE, STEP_CLOSE}) - @Retention(RetentionPolicy.SOURCE) - @interface Step { + @IntDef({STEP_START, STEP_CREATE_PASSWORD, STEP_SAVE_AND_SHARE, STEP_WELL_DONE, STEP_CLOSE}) + @Retention(RetentionPolicy.SOURCE) + @interface Step { - } + } - void navigateToCreatePasswordPage(); + void navigateToCreatePasswordPage(); - void navigateToSaveAndSharePage(@NonNull String accountKey); + void navigateToSaveAndSharePage(@NonNull String accountKey); - void navigateToWellDonePage(); + void navigateToWellDonePage(); - void closeFlow(); + void closeFlow(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupView.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupView.java index d79b9933..26bae84e 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupView.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/BackupView.java @@ -5,17 +5,17 @@ public interface BackupView extends BaseView, KeyboardHandler { - void startBackupFlow(); + void startBackupFlow(); - void moveToCreatePasswordPage(); + void moveToCreatePasswordPage(); - void moveToSaveAndSharePage(String key); + void moveToSaveAndSharePage(String key); - void onBackButtonClicked(); + void onBackButtonClicked(); - void moveToWellDonePage(); + void moveToWellDonePage(); - void close(); + void close(); - void showError(); + void showError(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordFragment.java index b235447c..25003ac6 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordFragment.java @@ -16,6 +16,7 @@ import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; + import kin.backupandrestore.R; import kin.backupandrestore.backup.presenter.CreatePasswordPresenter; import kin.backupandrestore.backup.presenter.CreatePasswordPresenterImpl; @@ -29,228 +30,272 @@ public class CreatePasswordFragment extends Fragment implements CreatePasswordView { - public static CreatePasswordFragment newInstance(@NonNull final BackupNavigator nextStepListener, - @NonNull final KeyboardHandler keyboardHandler, @NonNull KinAccount kinAccount) { - CreatePasswordFragment fragment = new CreatePasswordFragment(); - fragment.setNextStepListener(nextStepListener); - fragment.setKeyboardHandler(keyboardHandler); - fragment.setKinAccount(kinAccount); - return fragment; - } - - private TextWatcherAdapter confirmPassTextWatcherAdapter; - private TextWatcherAdapter enterPassTextWatcherAdapter; - - private BackupNavigator nextStepListener; - private KeyboardHandler keyboardHandler; - private CreatePasswordPresenter createPasswordPresenter; - private KinAccount kinAccount; - - private PasswordEditText enterPassEditText; - private PasswordEditText confirmPassEditText; - private Button nextButton; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.backup_and_restore_fragment_backup_create_password, container, false); - initViews(root); - createPasswordPresenter = new CreatePasswordPresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener, - kinAccount); - createPasswordPresenter.onAttach(this); - return root; - } - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - final CheckBox iUnderstandCheckbox = view.findViewById(R.id.understand_checkbox); - iUnderstandCheckbox.setChecked(false); - } - - private void initViews(View root) { - enterPassEditText = root.findViewById(R.id.enter_pass_edittext); - confirmPassEditText = root.findViewById(R.id.confirm_pass_edittext); - nextButton = root.findViewById(R.id.next_button); - - initEnterPasswordText(); - initConfirmPassword(); - setNextButtonListener(); - - final CheckBox iUnderstandCheckbox = root.findViewById(R.id.understand_checkbox); - iUnderstandCheckbox.post(new Runnable() { - @Override - public void run() { - iUnderstandCheckbox.setChecked(false); - } - }); - iUnderstandCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - createPasswordPresenter - .iUnderstandChecked(isChecked, enterPassEditText.getText(), confirmPassEditText.getText()); - enterPassEditText.clearFocus(); - confirmPassEditText.clearFocus(); - closeKeyboard(); - } - }); - - root.findViewById(R.id.understand_description).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - iUnderstandCheckbox.performClick(); - } - }); - } - - private void setNextButtonListener() { - nextButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - createPasswordPresenter.nextButtonClicked(confirmPassEditText.getText(), enterPassEditText.getText()); - } - }); - } - - private void initEnterPasswordText() { - enterPassTextWatcherAdapter = createTextWatcheListener(enterPassEditText, confirmPassEditText); - setOnFocusChangeListener(enterPassEditText, confirmPassEditText, false); - enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); - openKeyboard(enterPassEditText); - } - - private void initConfirmPassword() { - confirmPassTextWatcherAdapter = createTextWatcheListener(confirmPassEditText, enterPassEditText); - setOnFocusChangeListener(confirmPassEditText, enterPassEditText, true); - confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); - } - - private TextWatcherAdapter createTextWatcheListener(PasswordEditText watchedPassEditText, - final PasswordEditText otherPassEditText) { - TextWatcherAdapter textWatcherAdapter = new TextWatcherAdapter(new TextChangeListener() { - @Override - public void afterTextChanged(Editable editable) { - createPasswordPresenter.checkAllCompleted(editable.toString(), otherPassEditText.getText()); - } - }); - watchedPassEditText.addTextChangedListener(textWatcherAdapter); - return textWatcherAdapter; - } - - private void setOnFocusChangeListener(final PasswordEditText checkedPassEditText, - final PasswordEditText otherPassEditText, final boolean isConfirmPassword) { - OnFocusChangeListener onFocusChangeListener = new OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (!hasFocus) { - if (createPasswordPresenter != null) { - createPasswordPresenter - .passwordCheck(checkedPassEditText.getText(), otherPassEditText.getText(), - isConfirmPassword); - } - } - } - }; - checkedPassEditText.setOnFocusChangeListener(onFocusChangeListener); - } - - public void setNextStepListener(@NonNull final BackupNavigator nextStepListener) { - this.nextStepListener = nextStepListener; - } - - public void setKeyboardHandler(KeyboardHandler keyboardHandler) { - this.keyboardHandler = keyboardHandler; - } - - public void setKinAccount(KinAccount kinAccount) { - this.kinAccount = kinAccount; - } - - private void openKeyboard(View view) { - keyboardHandler.openKeyboard(view); - } - - @Override - public void closeKeyboard() { - keyboardHandler.closeKeyboard(); - } - - @Override - public void resetEnterPasswordField() { - enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); - enterPassEditText.removeError(); - } - - @Override - public void resetConfirmPasswordField() { - confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); - confirmPassEditText.removeError(); - } - - @Override - public void setEnterPasswordIsCorrect(boolean isCorrect) { - if (isCorrect) { - enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_purple_blue); - enterPassEditText.removeError(); - } else { - enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_red); - enterPassEditText.showError(R.string.backup_and_restore_password_does_not_meet_req_above); - } - } - - @Override - public void setConfirmPasswordIsCorrect(boolean isCorrect) { - if (isCorrect) { - confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_purple_blue); - confirmPassEditText.removeError(); - } else { - confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_red); - confirmPassEditText.showError(R.string.backup_and_restore_password_does_not_meet_req_above); - } - } - - @Override - public void setPasswordDoesNotMatch() { - confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_red); - confirmPassEditText.showError(R.string.backup_and_restore_password_does_not_match); - } - - @Override - public void enableNextButton() { - nextButton.setEnabled(true); - nextButton.setClickable(true); - } - - - @Override - public void disableNextButton() { - nextButton.setEnabled(false); - nextButton.setClickable(false); - } - - @Override - public void showBackupFailed() { - new Builder(getActivity(), R.style.BackupAndRestoreAlertDialogTheme) - .setTitle(R.string.backup_and_restore_something_went_wrong_title) - .setMessage(R.string.backup_and_restore_we_had_some_issues_to_create_backup) - .setPositiveButton(R.string.backup_and_restore_try_again, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - createPasswordPresenter.onRetryClicked(enterPassEditText.getText()); - } - }) - .setNegativeButton(R.string.backup_and_restore_cancel, null) - .create() - .show(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - confirmPassTextWatcherAdapter.release(); - enterPassTextWatcherAdapter.release(); - } + public static CreatePasswordFragment newInstance(@NonNull final BackupNavigator nextStepListener, +<<<<<<< HEAD + @NonNull final KeyboardHandler keyboardHandler, @NonNull KinAccount kinAccount) { +======= + @NonNull final KeyboardHandler keyboardHandler, @NonNull KinAccount kinAccount) { +>>>>>>> master + CreatePasswordFragment fragment = new CreatePasswordFragment(); + fragment.setNextStepListener(nextStepListener); + fragment.setKeyboardHandler(keyboardHandler); + fragment.setKinAccount(kinAccount); + return fragment; + } + + private TextWatcherAdapter confirmPassTextWatcherAdapter; + private TextWatcherAdapter enterPassTextWatcherAdapter; + + private BackupNavigator nextStepListener; + private KeyboardHandler keyboardHandler; + private CreatePasswordPresenter createPasswordPresenter; + private KinAccount kinAccount; + + private PasswordEditText enterPassEditText; + private PasswordEditText confirmPassEditText; + private Button nextButton; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, +<<<<<<< HEAD + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.backup_and_restore_fragment_backup_create_password, container, false); + initViews(root); + createPasswordPresenter = new CreatePasswordPresenterImpl( + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener, + kinAccount); +======= + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.backup_and_restore_fragment_backup_create_password, container, false); + initViews(root); + createPasswordPresenter = new CreatePasswordPresenterImpl( + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener, + kinAccount); +>>>>>>> master + createPasswordPresenter.onAttach(this); + return root; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + final CheckBox iUnderstandCheckbox = view.findViewById(R.id.understand_checkbox); + iUnderstandCheckbox.setChecked(false); + } + + private void initViews(View root) { + enterPassEditText = root.findViewById(R.id.enter_pass_edittext); + confirmPassEditText = root.findViewById(R.id.confirm_pass_edittext); + nextButton = root.findViewById(R.id.next_button); + + initEnterPasswordText(); + initConfirmPassword(); + setNextButtonListener(); + + final CheckBox iUnderstandCheckbox = root.findViewById(R.id.understand_checkbox); + iUnderstandCheckbox.post(new Runnable() { + @Override + public void run() { + iUnderstandCheckbox.setChecked(false); + } + }); + iUnderstandCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + createPasswordPresenter +<<<<<<< HEAD + .iUnderstandChecked(isChecked, enterPassEditText.getText(), confirmPassEditText.getText()); +======= + .iUnderstandChecked(isChecked, enterPassEditText.getText(), confirmPassEditText.getText()); +>>>>>>> master + enterPassEditText.clearFocus(); + confirmPassEditText.clearFocus(); + closeKeyboard(); + } + }); + + root.findViewById(R.id.understand_description).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + iUnderstandCheckbox.performClick(); + } + }); + } + + private void setNextButtonListener() { + nextButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + createPasswordPresenter.nextButtonClicked(confirmPassEditText.getText(), enterPassEditText.getText()); + } + }); + } + + private void initEnterPasswordText() { + enterPassTextWatcherAdapter = createTextWatcheListener(enterPassEditText, confirmPassEditText); + setOnFocusChangeListener(enterPassEditText, confirmPassEditText, false); + enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); + openKeyboard(enterPassEditText); + } + + private void initConfirmPassword() { + confirmPassTextWatcherAdapter = createTextWatcheListener(confirmPassEditText, enterPassEditText); + setOnFocusChangeListener(confirmPassEditText, enterPassEditText, true); + confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); + } + + private TextWatcherAdapter createTextWatcheListener(PasswordEditText watchedPassEditText, +<<<<<<< HEAD + final PasswordEditText otherPassEditText) { +======= + final PasswordEditText otherPassEditText) { +>>>>>>> master + TextWatcherAdapter textWatcherAdapter = new TextWatcherAdapter(new TextChangeListener() { + @Override + public void afterTextChanged(Editable editable) { + createPasswordPresenter.checkAllCompleted(editable.toString(), otherPassEditText.getText()); + } + }); + watchedPassEditText.addTextChangedListener(textWatcherAdapter); + return textWatcherAdapter; + } + + private void setOnFocusChangeListener(final PasswordEditText checkedPassEditText, +<<<<<<< HEAD + final PasswordEditText otherPassEditText, final boolean isConfirmPassword) { +======= + final PasswordEditText otherPassEditText, final boolean isConfirmPassword) { +>>>>>>> master + OnFocusChangeListener onFocusChangeListener = new OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus) { + if (createPasswordPresenter != null) { + createPasswordPresenter +<<<<<<< HEAD + .passwordCheck(checkedPassEditText.getText(), otherPassEditText.getText(), + isConfirmPassword); +======= + .passwordCheck(checkedPassEditText.getText(), otherPassEditText.getText(), + isConfirmPassword); +>>>>>>> master + } + } + } + }; + checkedPassEditText.setOnFocusChangeListener(onFocusChangeListener); + } + + public void setNextStepListener(@NonNull final BackupNavigator nextStepListener) { + this.nextStepListener = nextStepListener; + } + + public void setKeyboardHandler(KeyboardHandler keyboardHandler) { + this.keyboardHandler = keyboardHandler; + } + + public void setKinAccount(KinAccount kinAccount) { + this.kinAccount = kinAccount; + } + + private void openKeyboard(View view) { + keyboardHandler.openKeyboard(view); + } + + @Override + public void closeKeyboard() { + keyboardHandler.closeKeyboard(); + } + + @Override + public void resetEnterPasswordField() { + enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); + enterPassEditText.removeError(); + } + + @Override + public void resetConfirmPasswordField() { + confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_black); + confirmPassEditText.removeError(); + } + + @Override + public void setEnterPasswordIsCorrect(boolean isCorrect) { + if (isCorrect) { + enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_purple_blue); + enterPassEditText.removeError(); + } else { + enterPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_red); + enterPassEditText.showError(R.string.backup_and_restore_password_does_not_meet_req_above); + } + } + + @Override + public void setConfirmPasswordIsCorrect(boolean isCorrect) { + if (isCorrect) { + confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_purple_blue); + confirmPassEditText.removeError(); + } else { + confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_red); + confirmPassEditText.showError(R.string.backup_and_restore_password_does_not_meet_req_above); + } + } + + @Override + public void setPasswordDoesNotMatch() { + confirmPassEditText.setFrameBackgroundColor(R.color.backup_and_restore_red); + confirmPassEditText.showError(R.string.backup_and_restore_password_does_not_match); + } + + @Override + public void enableNextButton() { + nextButton.setEnabled(true); + nextButton.setClickable(true); + } + + + @Override + public void disableNextButton() { + nextButton.setEnabled(false); + nextButton.setClickable(false); + } + + @Override + public void showBackupFailed() { + new Builder(getActivity(), R.style.BackupAndRestoreAlertDialogTheme) +<<<<<<< HEAD + .setTitle(R.string.backup_and_restore_something_went_wrong_title) + .setMessage(R.string.backup_and_restore_we_had_some_issues_to_create_backup) + .setPositiveButton(R.string.backup_and_restore_try_again, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + createPasswordPresenter.onRetryClicked(enterPassEditText.getText()); + } + }) + .setNegativeButton(R.string.backup_and_restore_cancel, null) + .create() + .show(); +======= + .setTitle(R.string.backup_and_restore_something_went_wrong_title) + .setMessage(R.string.backup_and_restore_we_had_some_issues_to_create_backup) + .setPositiveButton(R.string.backup_and_restore_try_again, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + createPasswordPresenter.onRetryClicked(enterPassEditText.getText()); + } + }) + .setNegativeButton(R.string.backup_and_restore_cancel, null) + .create() + .show(); +>>>>>>> master + } + + @Override + public void onDestroy() { + super.onDestroy(); + + confirmPassTextWatcherAdapter.release(); + enterPassTextWatcherAdapter.release(); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordView.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordView.java index 93586b74..09d6dfd7 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordView.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/CreatePasswordView.java @@ -4,21 +4,21 @@ public interface CreatePasswordView extends BaseView { - void setEnterPasswordIsCorrect(boolean isCorrect); + void setEnterPasswordIsCorrect(boolean isCorrect); - void setConfirmPasswordIsCorrect(boolean isCorrect); + void setConfirmPasswordIsCorrect(boolean isCorrect); - void enableNextButton(); + void enableNextButton(); - void disableNextButton(); + void disableNextButton(); - void showBackupFailed(); + void showBackupFailed(); - void closeKeyboard(); + void closeKeyboard(); - void resetEnterPasswordField(); + void resetEnterPasswordField(); - void resetConfirmPasswordField(); + void resetConfirmPasswordField(); - void setPasswordDoesNotMatch(); + void setPasswordDoesNotMatch(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareFragment.java index 685f1727..a3528e8a 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareFragment.java @@ -1,7 +1,5 @@ package kin.backupandrestore.backup.view; -import static kin.backupandrestore.backup.presenter.BackupPresenterImpl.KEY_ACCOUNT_KEY; - import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; @@ -20,11 +18,13 @@ import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageView; import android.widget.TextView; + import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; + import kin.backupandrestore.R; import kin.backupandrestore.backup.presenter.SaveAndSharePresenter; import kin.backupandrestore.backup.presenter.SaveAndSharePresenterImpl; @@ -34,123 +34,163 @@ import kin.backupandrestore.qr.QRBarcodeGenerator; import kin.backupandrestore.qr.QRBarcodeGeneratorImpl; import kin.backupandrestore.qr.QRFileUriHandlerImpl; +import kin.backupandrestore.utils.ViewUtils; + +import static kin.backupandrestore.backup.presenter.BackupPresenterImpl.KEY_ACCOUNT_KEY; public class SaveAndShareFragment extends Fragment implements SaveAndShareView { - public static SaveAndShareFragment newInstance(BackupNavigator listener, String key) { - SaveAndShareFragment fragment = new SaveAndShareFragment(); - fragment.setNextStepListener(listener); - Bundle bundle = new Bundle(); - bundle.putString(KEY_ACCOUNT_KEY, key); - fragment.setArguments(bundle); - return fragment; - } - - private BackupNavigator nextStepListener; - private SaveAndSharePresenter saveAndSharePresenter; - - private CheckBox iHaveSavedCheckbox; - private TextView iHaveSavedText; - private ImageView qrImageView; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.backup_and_restore_fragment_save_and_share_qr, container, false); - initViews(root); - String key = getArguments().getString(KEY_ACCOUNT_KEY, null); - final QRBarcodeGenerator qrBarcodeGenerator = new QRBarcodeGeneratorImpl( - new QRFileUriHandlerImpl(getContext())); - saveAndSharePresenter = new SaveAndSharePresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener, - qrBarcodeGenerator, key, savedInstanceState); - saveAndSharePresenter.onAttach(this); - return root; - } - - private void initViews(View root) { - iHaveSavedCheckbox = root.findViewById(R.id.i_saved_my_qr_checkbox); - iHaveSavedText = root.findViewById(R.id.i_saved_my_qr_text); - qrImageView = root.findViewById(R.id.qr_image); - - iHaveSavedCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - saveAndSharePresenter.iHaveSavedChecked(isChecked); - } - }); - iHaveSavedText.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - iHaveSavedCheckbox.performClick(); - } - }); - - root.findViewById(R.id.send_email_button).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - saveAndSharePresenter.sendQREmailClicked(); - } - }); - - } - - @Override - public void onSaveInstanceState(Bundle outState) { - saveAndSharePresenter.onSaveInstanceState(outState); - super.onSaveInstanceState(outState); - } - - @Override - public void showIHaveSavedCheckBox() { - iHaveSavedCheckbox.setVisibility(View.VISIBLE); - iHaveSavedText.setVisibility(View.VISIBLE); - } - - @Override - public void showErrorTryAgainLater() { - new Builder(getActivity(), R.style.BackupAndRestoreAlertDialogTheme) - .setTitle(R.string.backup_and_restore_something_went_wrong_title) - .setMessage(R.string.backup_and_restore_could_not_load_the_qr_please_try_again_later) - .setNegativeButton(R.string.backup_and_restore_cancel, null) - .create() - .show(); - } - - public void setNextStepListener(@NonNull final BackupNavigator nextStepListener) { - this.nextStepListener = nextStepListener; - } - - @Override - public void setQRImage(Uri qrURI) { - Bitmap qrBitmap; - try { - qrBitmap = Media.getBitmap(getContext().getContentResolver(), qrURI); - qrImageView.setImageBitmap(qrBitmap); - } catch (IOException e) { - saveAndSharePresenter.couldNotLoadQRImage(); - } - } - - @Override - public void showSendIntent(Uri qrURI) { - String myKinWallet = getString(R.string.backup_and_restore_my_kin_wallet_qr_code); - String backupCreated = getString(R.string.backup_and_restore_backup_created_on); - Date date = Calendar.getInstance(TimeZone.getDefault()).getTime(); - String dateString = SimpleDateFormat.getDateInstance().format(date); - SimpleDateFormat timeFormat = new SimpleDateFormat("kk:mm"); - String time = timeFormat.format(date); - - StringBuilder subjectBuilder = new StringBuilder(myKinWallet).append("\n") - .append(backupCreated).append(" ").append(dateString).append(" | ").append(time); - - Intent emailIntent = new Intent(Intent.ACTION_SEND) - .setType("Image/*") - .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) - .putExtra(Intent.EXTRA_STREAM, qrURI) - .putExtra(Intent.EXTRA_SUBJECT, myKinWallet) - .putExtra(Intent.EXTRA_TEXT, subjectBuilder.toString()); - startActivity(Intent.createChooser(emailIntent, getString(R.string.backup_and_restore_send_email))); - } + public static SaveAndShareFragment newInstance(BackupNavigator listener, String key) { + SaveAndShareFragment fragment = new SaveAndShareFragment(); + fragment.setNextStepListener(listener); + Bundle bundle = new Bundle(); + bundle.putString(KEY_ACCOUNT_KEY, key); + fragment.setArguments(bundle); + return fragment; + } + + private BackupNavigator nextStepListener; + private SaveAndSharePresenter saveAndSharePresenter; + + private CheckBox iHaveSavedCheckbox; + private TextView iHaveSavedText; + private ImageView qrImageView; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, +<<<<<<< HEAD + @Nullable Bundle savedInstanceState) { +======= + @Nullable Bundle savedInstanceState) { +>>>>>>> master + View root = inflater.inflate(R.layout.backup_and_restore_fragment_save_and_share_qr, container, false); + initViews(root); + String key = getArguments().getString(KEY_ACCOUNT_KEY, null); + final QRBarcodeGenerator qrBarcodeGenerator = new QRBarcodeGeneratorImpl( +<<<<<<< HEAD + new QRFileUriHandlerImpl(getContext())); + saveAndSharePresenter = new SaveAndSharePresenterImpl( + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener, + qrBarcodeGenerator, key, savedInstanceState); +======= + new QRFileUriHandlerImpl(getContext())); + saveAndSharePresenter = new SaveAndSharePresenterImpl( + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), nextStepListener, + qrBarcodeGenerator, key, savedInstanceState); +>>>>>>> master + saveAndSharePresenter.onAttach(this); + return root; + } + + private void initViews(View root) { + iHaveSavedCheckbox = root.findViewById(R.id.i_saved_my_qr_checkbox); + iHaveSavedText = root.findViewById(R.id.i_saved_my_qr_text); + qrImageView = root.findViewById(R.id.qr_image); + + iHaveSavedCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + saveAndSharePresenter.iHaveSavedChecked(isChecked); + } + }); + iHaveSavedText.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + iHaveSavedCheckbox.performClick(); + } + }); + + root.findViewById(R.id.send_email_button).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + saveAndSharePresenter.sendQREmailClicked(); + } + }); + + } + + @Override + public void onSaveInstanceState(Bundle outState) { + saveAndSharePresenter.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + + @Override + public void showIHaveSavedCheckBox() { + iHaveSavedCheckbox.setVisibility(View.VISIBLE); + iHaveSavedText.setVisibility(View.VISIBLE); + } + + @Override + public void showErrorTryAgainLater() { + new Builder(getActivity(), R.style.BackupAndRestoreAlertDialogTheme) +<<<<<<< HEAD + .setTitle(R.string.backup_and_restore_something_went_wrong_title) + .setMessage(R.string.backup_and_restore_could_not_load_the_qr_please_try_again_later) + .setNegativeButton(R.string.backup_and_restore_cancel, null) + .create() + .show(); +======= + .setTitle(R.string.backup_and_restore_something_went_wrong_title) + .setMessage(R.string.backup_and_restore_could_not_load_the_qr_please_try_again_later) + .setNegativeButton(R.string.backup_and_restore_cancel, null) + .create() + .show(); +>>>>>>> master + } + + public void setNextStepListener(@NonNull final BackupNavigator nextStepListener) { + this.nextStepListener = nextStepListener; + } + + @Override + public void setQRImage(Uri qrURI) { + Bitmap qrBitmap; + try { + qrBitmap = Media.getBitmap(getContext().getContentResolver(), qrURI); + qrImageView.setImageBitmap(qrBitmap); + } catch (IOException e) { + saveAndSharePresenter.couldNotLoadQRImage(); + } + } + + @Override + public void showSendIntent(Uri qrURI) { +<<<<<<< HEAD + String myKinWallet = getString(R.string.backup_and_restore_my_kin_wallet_qr_code); +======= + String appName = ViewUtils.getApplicationName(getContext()); + String subject = getString(R.string.your_app_qr_code_subject, appName); + String body = getString(R.string.your_app_qr_code_body, appName); +>>>>>>> master + String backupCreated = getString(R.string.backup_and_restore_backup_created_on); + Date date = Calendar.getInstance(TimeZone.getDefault()).getTime(); + String dateString = SimpleDateFormat.getDateInstance().format(date); + SimpleDateFormat timeFormat = new SimpleDateFormat("kk:mm"); + String time = timeFormat.format(date); + +<<<<<<< HEAD + StringBuilder subjectBuilder = new StringBuilder(myKinWallet).append("\n") + .append(backupCreated).append(" ").append(dateString).append(" | ").append(time); + + Intent emailIntent = new Intent(Intent.ACTION_SEND) + .setType("Image/*") + .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + .putExtra(Intent.EXTRA_STREAM, qrURI) + .putExtra(Intent.EXTRA_SUBJECT, myKinWallet) + .putExtra(Intent.EXTRA_TEXT, subjectBuilder.toString()); +======= + StringBuilder bodyBuilder = new StringBuilder(body).append("\n") + .append(backupCreated).append(" ").append(dateString).append(" | ").append(time); + + Intent emailIntent = new Intent(Intent.ACTION_SEND) + .setType("Image/*") + .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + .putExtra(Intent.EXTRA_STREAM, qrURI) + .putExtra(Intent.EXTRA_SUBJECT, subject) + .putExtra(Intent.EXTRA_TEXT, bodyBuilder.toString()); +>>>>>>> master + startActivity(Intent.createChooser(emailIntent, getString(R.string.backup_and_restore_send_email))); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareView.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareView.java index 4dddd2ae..14a08717 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareView.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/SaveAndShareView.java @@ -1,15 +1,16 @@ package kin.backupandrestore.backup.view; import android.net.Uri; + import kin.backupandrestore.base.BaseView; public interface SaveAndShareView extends BaseView { - void setQRImage(Uri qrURI); + void setQRImage(Uri qrURI); - void showSendIntent(Uri qrURI); + void showSendIntent(Uri qrURI); - void showIHaveSavedCheckBox(); + void showIHaveSavedCheckBox(); - void showErrorTryAgainLater(); + void showErrorTryAgainLater(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/TextWatcherAdapter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/TextWatcherAdapter.java index 8130776d..733ef183 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/TextWatcherAdapter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/TextWatcherAdapter.java @@ -4,50 +4,51 @@ import android.os.Looper; import android.text.Editable; import android.text.TextWatcher; + import kin.backupandrestore.Validator; public class TextWatcherAdapter implements TextWatcher { - private final static long DELAY_MILLIS = 500; + private final static long DELAY_MILLIS = 500; - private final Handler mainThreadHandler; - private final TextChangeListener listener; + private final Handler mainThreadHandler; + private final TextChangeListener listener; - public TextWatcherAdapter(final TextChangeListener textChangeListener) { - Validator.checkNotNull(textChangeListener, "listener"); - this.mainThreadHandler = new Handler(Looper.getMainLooper()); - this.listener = textChangeListener; - } + public TextWatcherAdapter(final TextChangeListener textChangeListener) { + Validator.checkNotNull(textChangeListener, "listener"); + this.mainThreadHandler = new Handler(Looper.getMainLooper()); + this.listener = textChangeListener; + } - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } - @Override - public void afterTextChanged(final Editable editable) { - removeCallbacks(); - mainThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - listener.afterTextChanged(editable); - } - }, DELAY_MILLIS); - } + @Override + public void afterTextChanged(final Editable editable) { + removeCallbacks(); + mainThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + listener.afterTextChanged(editable); + } + }, DELAY_MILLIS); + } - private void removeCallbacks() { - mainThreadHandler.removeCallbacksAndMessages(null); - } + private void removeCallbacks() { + mainThreadHandler.removeCallbacksAndMessages(null); + } - public void release() { - removeCallbacks(); - } + public void release() { + removeCallbacks(); + } - public interface TextChangeListener { + public interface TextChangeListener { - void afterTextChanged(Editable editable); - } + void afterTextChanged(Editable editable); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/WellDoneBackupFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/WellDoneBackupFragment.java index b616162d..347fd260 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/WellDoneBackupFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/backup/view/WellDoneBackupFragment.java @@ -1,32 +1,40 @@ package kin.backupandrestore.backup.view; -import static kin.backupandrestore.events.BackupEventCode.BACKUP_COMPLETED_PAGE_VIEWED; - import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; + import kin.backupandrestore.R; import kin.backupandrestore.events.BroadcastManagerImpl; import kin.backupandrestore.events.CallbackManager; import kin.backupandrestore.events.EventDispatcherImpl; +import static kin.backupandrestore.events.BackupEventCode.BACKUP_COMPLETED_PAGE_VIEWED; + public class WellDoneBackupFragment extends Fragment { - public static WellDoneBackupFragment newInstance() { - return new WellDoneBackupFragment(); - } + public static WellDoneBackupFragment newInstance() { + return new WellDoneBackupFragment(); + } - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.backup_and_restore_fragment_well_done_backup, container, false); - final CallbackManager callbackManager = new CallbackManager( - new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))); - callbackManager.sendBackupEvent(BACKUP_COMPLETED_PAGE_VIEWED); - return root; - } + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, +<<<<<<< HEAD + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.backup_and_restore_fragment_well_done_backup, container, false); + final CallbackManager callbackManager = new CallbackManager( + new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))); +======= + @Nullable Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.backup_and_restore_fragment_well_done_backup, container, false); + final CallbackManager callbackManager = new CallbackManager( + new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))); +>>>>>>> master + callbackManager.sendBackupEvent(BACKUP_COMPLETED_PAGE_VIEWED); + return root; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenter.java index 324fb6f0..24064cff 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenter.java @@ -3,11 +3,11 @@ public interface BasePresenter { - void onAttach(T view); + void onAttach(T view); - void onDetach(); + void onDetach(); - T getView(); + T getView(); - void onBackClicked(); + void onBackClicked(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenterImpl.java index 846961d1..f8da78b0 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BasePresenterImpl.java @@ -5,24 +5,24 @@ public abstract class BasePresenterImpl implements BasePresenter { - protected T view; + protected T view; - @CallSuper - @Override - public void onAttach(T view) { - this.view = view; + @CallSuper + @Override + public void onAttach(T view) { + this.view = view; - } + } - @CallSuper - @Override - public void onDetach() { - view = null; - } + @CallSuper + @Override + public void onDetach() { + view = null; + } - @Override - public T getView() { - return view; - } + @Override + public T getView() { + return view; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BaseToolbarActivity.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BaseToolbarActivity.java index e74ba405..740557bc 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BaseToolbarActivity.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/BaseToolbarActivity.java @@ -20,132 +20,137 @@ import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; + import kin.backupandrestore.R; public abstract class BaseToolbarActivity extends AppCompatActivity implements KeyboardHandler { - public static final int EMPTY_TITLE = -1; - public static final String BACKGROUND_COLOR = "background_color"; - - protected abstract @LayoutRes - int getContentLayout(); - - private Toolbar topToolBar; - private TextView stepsText; - private ValueAnimator colorAnimation; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(getContentLayout()); - setupToolbar(savedInstanceState); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - saveToolbarBackgroundColor(outState); - super.onSaveInstanceState(outState); - - } - - private void saveToolbarBackgroundColor(Bundle outState) { - ColorDrawable colorDrawable = ((ColorDrawable) topToolBar.getBackground()); - if (colorDrawable != null) { - outState.putInt(BACKGROUND_COLOR, colorDrawable.getColor()); - } - } - - private void setupToolbar(Bundle savedInstanceState) { - topToolBar = findViewById(R.id.toolbar); - int color = getColorFromBundle(savedInstanceState); - topToolBar.setBackgroundColor(color); - setSupportActionBar(topToolBar); - } - - private int getColorFromBundle(Bundle savedInstanceState) { - final int defaultColor = ContextCompat.getColor(getApplicationContext(), android.R.color.white); - return savedInstanceState != null ? savedInstanceState - .getInt(BACKGROUND_COLOR, defaultColor) : defaultColor; - } - - public void setToolbarTitle(@StringRes int titleRes) { - topToolBar = findViewById(R.id.toolbar); - stepsText = findViewById(R.id.steps_text); - if (titleRes != EMPTY_TITLE) { - getSupportActionBar().setTitle(titleRes); - } else { - getSupportActionBar().setTitle(""); - } - } - - public void setNavigationIcon(@DrawableRes int iconRes) { - topToolBar.setNavigationIcon(iconRes); - } + public static final int EMPTY_TITLE = -1; + public static final String BACKGROUND_COLOR = "background_color"; + + protected abstract @LayoutRes + int getContentLayout(); + + private Toolbar topToolBar; + private TextView stepsText; + private ValueAnimator colorAnimation; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getContentLayout()); + setupToolbar(savedInstanceState); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + saveToolbarBackgroundColor(outState); + super.onSaveInstanceState(outState); + + } + + private void saveToolbarBackgroundColor(Bundle outState) { + ColorDrawable colorDrawable = ((ColorDrawable) topToolBar.getBackground()); + if (colorDrawable != null) { + outState.putInt(BACKGROUND_COLOR, colorDrawable.getColor()); + } + } + + private void setupToolbar(Bundle savedInstanceState) { + topToolBar = findViewById(R.id.toolbar); + int color = getColorFromBundle(savedInstanceState); + topToolBar.setBackgroundColor(color); + setSupportActionBar(topToolBar); + } + + private int getColorFromBundle(Bundle savedInstanceState) { + final int defaultColor = ContextCompat.getColor(getApplicationContext(), android.R.color.white); + return savedInstanceState != null ? savedInstanceState +<<<<<<< HEAD + .getInt(BACKGROUND_COLOR, defaultColor) : defaultColor; +======= + .getInt(BACKGROUND_COLOR, defaultColor) : defaultColor; +>>>>>>> master + } + + public void setToolbarTitle(@StringRes int titleRes) { + topToolBar = findViewById(R.id.toolbar); + stepsText = findViewById(R.id.steps_text); + if (titleRes != EMPTY_TITLE) { + getSupportActionBar().setTitle(titleRes); + } else { + getSupportActionBar().setTitle(""); + } + } + + public void setNavigationIcon(@DrawableRes int iconRes) { + topToolBar.setNavigationIcon(iconRes); + } public void setNavigationIcon(Drawable drawable) { topToolBar.setNavigationIcon(drawable); - } - - public void hideNavigationIcon() { - topToolBar.setNavigationIcon(new ColorDrawable(Color.TRANSPARENT)); - } - - public void setToolbarColor(@ColorRes int colorRes) { - stopToolbarColorAnim(); - topToolBar.setBackgroundResource(colorRes); - } - - private void stopToolbarColorAnim() { - if (colorAnimation != null) { - colorAnimation.cancel(); - } - } - - public void setToolbarColorWithAnim(@ColorRes int toColorRes, final int durationMilis) { - int colorFrom = ((ColorDrawable) topToolBar.getBackground()).getColor(); - int colorTo = ContextCompat.getColor(getApplicationContext(), toColorRes); - colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); - colorAnimation.setDuration(durationMilis); // milliseconds - colorAnimation.addUpdateListener(new AnimatorUpdateListener() { - - @Override - public void onAnimationUpdate(ValueAnimator animator) { - topToolBar.setBackgroundColor((int) animator.getAnimatedValue()); - } - }); - - colorAnimation.start(); - } - - public void setStep(int current, int total) { - stepsText.setText(getString(R.string.backup_and_restore_steps_format, current, total)); - } - - public void clearSteps() { - stepsText.setText(""); - } - - public void setNavigationClickListener(View.OnClickListener clickListener) { - topToolBar.setNavigationOnClickListener(clickListener); - } - - @Override - public void openKeyboard(View view) { - InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); - if (inputMethodManager != null) { - view.requestFocus(); - inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); - } - } - - @Override - public void closeKeyboard() { - if (getCurrentFocus() != null) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - if (imm != null) { - imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); - } - } - } + } + + public void hideNavigationIcon() { + topToolBar.setNavigationIcon(new ColorDrawable(Color.TRANSPARENT)); + } + + public void setToolbarColor(@ColorRes int colorRes) { + stopToolbarColorAnim(); + topToolBar.setBackgroundResource(colorRes); + } + + private void stopToolbarColorAnim() { + if (colorAnimation != null) { + colorAnimation.cancel(); + } + } + + public void setToolbarColorWithAnim(@ColorRes int toColorRes, final int durationMilis) { + int colorFrom = ((ColorDrawable) topToolBar.getBackground()).getColor(); + int colorTo = ContextCompat.getColor(getApplicationContext(), toColorRes); + colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); + colorAnimation.setDuration(durationMilis); // milliseconds + colorAnimation.addUpdateListener(new AnimatorUpdateListener() { + + @Override + public void onAnimationUpdate(ValueAnimator animator) { + topToolBar.setBackgroundColor((int) animator.getAnimatedValue()); + } + }); + + colorAnimation.start(); + } + + public void setStep(int current, int total) { + stepsText.setText(getString(R.string.backup_and_restore_steps_format, current, total)); + } + + public void clearSteps() { + stepsText.setText(""); + } + + public void setNavigationClickListener(View.OnClickListener clickListener) { + topToolBar.setNavigationOnClickListener(clickListener); + } + + @Override + public void openKeyboard(View view) { + InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + view.requestFocus(); + inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); + } + } + + @Override + public void closeKeyboard() { + if (getCurrentFocus() != null) { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm != null) { + imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); + } + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/KeyboardHandler.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/KeyboardHandler.java index 53644098..437d8bb1 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/KeyboardHandler.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/base/KeyboardHandler.java @@ -4,7 +4,7 @@ public interface KeyboardHandler { - void openKeyboard(View view); + void openKeyboard(View view); - void closeKeyboard(); + void closeKeyboard(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BackupEventCode.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BackupEventCode.java index 8352e6de..e2e62b81 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BackupEventCode.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BackupEventCode.java @@ -1,5 +1,10 @@ package kin.backupandrestore.events; +import android.support.annotation.IntDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + import static kin.backupandrestore.events.BackupEventCode.BACKUP_COMPLETED_PAGE_VIEWED; import static kin.backupandrestore.events.BackupEventCode.BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED; import static kin.backupandrestore.events.BackupEventCode.BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED; @@ -12,37 +17,46 @@ import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_START_TAPPED; import static kin.backupandrestore.events.BackupEventCode.BACKUP_WELCOME_PAGE_VIEWED; -import android.support.annotation.IntDef; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - @IntDef({BACKUP_WELCOME_PAGE_VIEWED, - BACKUP_WELCOME_PAGE_BACK_TAPPED, - BACKUP_WELCOME_PAGE_START_TAPPED, - BACKUP_CREATE_PASSWORD_PAGE_VIEWED, - BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED, - BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED, - BACKUP_QR_CODE_PAGE_VIEWED, - BACKUP_QR_PAGE_BACK_TAPPED, - BACKUP_QR_PAGE_SEND_QR_TAPPED, - BACKUP_QR_PAGE_QR_SAVED_TAPPED, - BACKUP_COMPLETED_PAGE_VIEWED}) +<<<<<<< HEAD + BACKUP_WELCOME_PAGE_BACK_TAPPED, + BACKUP_WELCOME_PAGE_START_TAPPED, + BACKUP_CREATE_PASSWORD_PAGE_VIEWED, + BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED, + BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED, + BACKUP_QR_CODE_PAGE_VIEWED, + BACKUP_QR_PAGE_BACK_TAPPED, + BACKUP_QR_PAGE_SEND_QR_TAPPED, + BACKUP_QR_PAGE_QR_SAVED_TAPPED, + BACKUP_COMPLETED_PAGE_VIEWED}) +======= + BACKUP_WELCOME_PAGE_BACK_TAPPED, + BACKUP_WELCOME_PAGE_START_TAPPED, + BACKUP_CREATE_PASSWORD_PAGE_VIEWED, + BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED, + BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED, + BACKUP_QR_CODE_PAGE_VIEWED, + BACKUP_QR_PAGE_BACK_TAPPED, + BACKUP_QR_PAGE_SEND_QR_TAPPED, + BACKUP_QR_PAGE_QR_SAVED_TAPPED, + BACKUP_COMPLETED_PAGE_VIEWED}) +>>>>>>> master @Retention(RetentionPolicy.SOURCE) public @interface BackupEventCode { - // Welcome page - int BACKUP_WELCOME_PAGE_VIEWED = 70000; - int BACKUP_WELCOME_PAGE_BACK_TAPPED = 70001; - int BACKUP_WELCOME_PAGE_START_TAPPED = 70002; - // Create Password page - int BACKUP_CREATE_PASSWORD_PAGE_VIEWED = 71000; - int BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED = 71001; - int BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED = 71002; - // QR page - int BACKUP_QR_CODE_PAGE_VIEWED = 72000; - int BACKUP_QR_PAGE_BACK_TAPPED = 72001; - int BACKUP_QR_PAGE_SEND_QR_TAPPED = 72002; - int BACKUP_QR_PAGE_QR_SAVED_TAPPED = 72003; - // Completed page - int BACKUP_COMPLETED_PAGE_VIEWED = 73000; + // Welcome page + int BACKUP_WELCOME_PAGE_VIEWED = 70000; + int BACKUP_WELCOME_PAGE_BACK_TAPPED = 70001; + int BACKUP_WELCOME_PAGE_START_TAPPED = 70002; + // Create Password page + int BACKUP_CREATE_PASSWORD_PAGE_VIEWED = 71000; + int BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED = 71001; + int BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED = 71002; + // QR page + int BACKUP_QR_CODE_PAGE_VIEWED = 72000; + int BACKUP_QR_PAGE_BACK_TAPPED = 72001; + int BACKUP_QR_PAGE_SEND_QR_TAPPED = 72002; + int BACKUP_QR_PAGE_QR_SAVED_TAPPED = 72003; + // Completed page + int BACKUP_COMPLETED_PAGE_VIEWED = 73000; } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManager.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManager.java index 005a7e6f..e926d366 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManager.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManager.java @@ -2,21 +2,22 @@ import android.content.Intent; import android.support.annotation.NonNull; + import kin.backupandrestore.events.BroadcastManagerImpl.ActionName; public interface BroadcastManager { - interface Listener { + interface Listener { - void onReceive(Intent data); - } + void onReceive(Intent data); + } - void register(@NonNull final Listener listener, @ActionName final String actionName); + void register(@NonNull final Listener listener, @ActionName final String actionName); - void unregisterAll(); + void unregisterAll(); - void sendEvent(Intent data, @ActionName final String actionName); + void sendEvent(Intent data, @ActionName final String actionName); - void setActivityResult(int resultCode, Intent data); + void setActivityResult(int resultCode, Intent data); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManagerImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManagerImpl.java index 25d2f160..992f4da8 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManagerImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/BroadcastManagerImpl.java @@ -8,6 +8,7 @@ import android.support.annotation.NonNull; import android.support.annotation.StringDef; import android.support.v4.content.LocalBroadcastManager; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; @@ -15,52 +16,52 @@ public class BroadcastManagerImpl implements BroadcastManager { - private final Activity activity; - private final List receiversList; + private final Activity activity; + private final List receiversList; - static final String ACTION_EVENTS_BACKUP = "ACTION_EVENTS_BACKUP"; - static final String ACTION_EVENTS_RESTORE = "ACTION_EVENTS_RESTORE"; + static final String ACTION_EVENTS_BACKUP = "ACTION_EVENTS_BACKUP"; + static final String ACTION_EVENTS_RESTORE = "ACTION_EVENTS_RESTORE"; - @StringDef({ACTION_EVENTS_BACKUP, ACTION_EVENTS_RESTORE}) - @Retention(RetentionPolicy.SOURCE) - @interface ActionName { + @StringDef({ACTION_EVENTS_BACKUP, ACTION_EVENTS_RESTORE}) + @Retention(RetentionPolicy.SOURCE) + @interface ActionName { - } + } - public BroadcastManagerImpl(@NonNull Activity activity) { - this.activity = activity; - this.receiversList = new ArrayList<>(); - } + public BroadcastManagerImpl(@NonNull Activity activity) { + this.activity = activity; + this.receiversList = new ArrayList<>(); + } - @Override - public void register(@NonNull final Listener listener, @ActionName final String actionName) { - BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent data) { - listener.onReceive(data); - } - }; - receiversList.add(broadcastReceiver); - LocalBroadcastManager.getInstance(activity).registerReceiver(broadcastReceiver, new IntentFilter(actionName)); - } + @Override + public void register(@NonNull final Listener listener, @ActionName final String actionName) { + BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent data) { + listener.onReceive(data); + } + }; + receiversList.add(broadcastReceiver); + LocalBroadcastManager.getInstance(activity).registerReceiver(broadcastReceiver, new IntentFilter(actionName)); + } - @Override - public void unregisterAll() { - if (!receiversList.isEmpty()) { - for (BroadcastReceiver receiver : receiversList) { - LocalBroadcastManager.getInstance(activity).unregisterReceiver(receiver); - } - } - } + @Override + public void unregisterAll() { + if (!receiversList.isEmpty()) { + for (BroadcastReceiver receiver : receiversList) { + LocalBroadcastManager.getInstance(activity).unregisterReceiver(receiver); + } + } + } - @Override - public void sendEvent(Intent data, @ActionName final String actionName) { - data.setAction(actionName); - LocalBroadcastManager.getInstance(activity).sendBroadcast(data); - } + @Override + public void sendEvent(Intent data, @ActionName final String actionName) { + data.setAction(actionName); + LocalBroadcastManager.getInstance(activity).sendBroadcast(data); + } - @Override - public void setActivityResult(int resultCode, Intent data) { - activity.setResult(resultCode, data); - } + @Override + public void setActivityResult(int resultCode, Intent data) { + activity.setResult(resultCode, data); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/CallbackManager.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/CallbackManager.java index 489a1503..d81f53bf 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/CallbackManager.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/CallbackManager.java @@ -1,146 +1,161 @@ package kin.backupandrestore.events; -import static kin.backupandrestore.exception.BackupAndRestoreException.CODE_UNEXPECTED; - import android.content.Intent; import android.support.annotation.NonNull; import android.support.annotation.Nullable; + import kin.backupandrestore.BackupCallback; import kin.backupandrestore.BackupEvents; import kin.backupandrestore.RestoreEvents; import kin.backupandrestore.exception.BackupAndRestoreException; +import static kin.backupandrestore.exception.BackupAndRestoreException.CODE_UNEXPECTED; + public class CallbackManager { - // Result Code - static final int RES_CODE_SUCCESS = 5000; - static final int RES_CODE_CANCEL = 5001; - static final int RES_CODE_FAILED = 5002; - static final String EXTRA_KEY_ERROR_MESSAGE = "EXTRA_KEY_ERROR_MESSAGE"; - static final String EXTRA_KEY_ERROR_CODE = "EXTRA_KEY_ERROR_CODE"; - static final String EXTRA_KEY_PUBLIC_ADDRESS = "EXTRA_KEY_PUBLIC_ADDRESS"; - - // Request Codes - private int reqCodeBackup; - private int reqCodeRestore; - - @Nullable - private BackupCallback backupCallback; - @Nullable - private InternalRestoreCallback internalRestoreCallback; - - private final EventDispatcher eventDispatcher; - - public CallbackManager(@NonNull final EventDispatcher eventDispatcher) { - this.eventDispatcher = eventDispatcher; - } - - public CallbackManager(@NonNull final EventDispatcher eventDispatcher, int reqCodeBackup, int reqCodeRestore) { - this.eventDispatcher = eventDispatcher; - this.reqCodeBackup = reqCodeBackup; - this.reqCodeRestore = reqCodeRestore; - } - - public void setBackupCallback(@Nullable BackupCallback backupCallback) { - this.backupCallback = backupCallback; - } - - public void setInternalRestoreCallback(@Nullable InternalRestoreCallback internalRestoreCallback) { - this.internalRestoreCallback = internalRestoreCallback; - } - - public void setBackupEvents(@Nullable BackupEvents backupEvents) { - this.eventDispatcher.setBackupEvents(backupEvents); - } - - public void setRestoreEvents(@Nullable RestoreEvents restoreEvents) { - this.eventDispatcher.setRestoreEvents(restoreEvents); - } - - public void unregisterCallbacksAndEvents() { - this.eventDispatcher.unregister(); - this.backupCallback = null; - this.internalRestoreCallback = null; - } - - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == reqCodeBackup) { - handleBackupResult(resultCode, data); - } else if (requestCode == reqCodeRestore) { - handleRestoreResult(resultCode, data); - } - } - - public void sendRestoreSuccessResult(String publicAddress) { - Intent intent = new Intent(); - intent.putExtra(EXTRA_KEY_PUBLIC_ADDRESS, publicAddress); - eventDispatcher.setActivityResult(RES_CODE_SUCCESS, intent); - } - - public void sendBackupSuccessResult() { - eventDispatcher.setActivityResult(RES_CODE_SUCCESS, null); - } - - public void setCancelledResult() { - eventDispatcher.setActivityResult(RES_CODE_CANCEL, null); - } - - private void handleRestoreResult(int resultCode, Intent data) { - if (internalRestoreCallback != null) { - switch (resultCode) { - case RES_CODE_SUCCESS: - final String publicAddress = data.getStringExtra(EXTRA_KEY_PUBLIC_ADDRESS); - if (publicAddress == null) { - internalRestoreCallback.onFailure(new BackupAndRestoreException(CODE_UNEXPECTED, - "Unexpected error - imported account public address not found")); - } - internalRestoreCallback.onSuccess(publicAddress); - break; - case RES_CODE_CANCEL: - internalRestoreCallback.onCancel(); - break; - case RES_CODE_FAILED: - String errorMessage = data.getStringExtra(EXTRA_KEY_ERROR_MESSAGE); - int code = data.getIntExtra(EXTRA_KEY_ERROR_CODE, 0); - internalRestoreCallback.onFailure(new BackupAndRestoreException(code, errorMessage)); - break; - default: - internalRestoreCallback.onFailure( - new BackupAndRestoreException(CODE_UNEXPECTED, - "Unexpected error - unknown result code " + resultCode)); - break; - } - } - } - - private void handleBackupResult(int resultCode, Intent data) { - if (backupCallback != null) { - switch (resultCode) { - case RES_CODE_SUCCESS: - backupCallback.onSuccess(); - break; - case RES_CODE_CANCEL: - backupCallback.onCancel(); - break; - case RES_CODE_FAILED: - String errorMessage = data.getStringExtra(EXTRA_KEY_ERROR_MESSAGE); - int code = data.getIntExtra(EXTRA_KEY_ERROR_CODE, 0); - backupCallback.onFailure(new BackupAndRestoreException(code, errorMessage)); - break; - default: - backupCallback.onFailure( - new BackupAndRestoreException(CODE_UNEXPECTED, - "Unexpected error - unknown result code " + resultCode)); - break; - } - } - } - - public void sendBackupEvent(@BackupEventCode int eventCode) { - eventDispatcher.sendEvent(EventDispatcher.BACKUP_EVENTS, eventCode); - } - - public void sendRestoreEvent(@RestoreEventCode int eventCode) { - eventDispatcher.sendEvent(EventDispatcher.RESTORE_EVENTS, eventCode); - } + // Result Code + static final int RES_CODE_SUCCESS = 5000; + static final int RES_CODE_CANCEL = 5001; + static final int RES_CODE_FAILED = 5002; + static final String EXTRA_KEY_ERROR_MESSAGE = "EXTRA_KEY_ERROR_MESSAGE"; + static final String EXTRA_KEY_ERROR_CODE = "EXTRA_KEY_ERROR_CODE"; + static final String EXTRA_KEY_PUBLIC_ADDRESS = "EXTRA_KEY_PUBLIC_ADDRESS"; + + // Request Codes + private int reqCodeBackup; + private int reqCodeRestore; + + @Nullable + private BackupCallback backupCallback; + @Nullable + private InternalRestoreCallback internalRestoreCallback; + + private final EventDispatcher eventDispatcher; + + public CallbackManager(@NonNull final EventDispatcher eventDispatcher) { + this.eventDispatcher = eventDispatcher; + } + + public CallbackManager(@NonNull final EventDispatcher eventDispatcher, int reqCodeBackup, int reqCodeRestore) { + this.eventDispatcher = eventDispatcher; + this.reqCodeBackup = reqCodeBackup; + this.reqCodeRestore = reqCodeRestore; + } + + public void setBackupCallback(@Nullable BackupCallback backupCallback) { + this.backupCallback = backupCallback; + } + + public void setInternalRestoreCallback(@Nullable InternalRestoreCallback internalRestoreCallback) { + this.internalRestoreCallback = internalRestoreCallback; + } + + public void setBackupEvents(@Nullable BackupEvents backupEvents) { + this.eventDispatcher.setBackupEvents(backupEvents); + } + + public void setRestoreEvents(@Nullable RestoreEvents restoreEvents) { + this.eventDispatcher.setRestoreEvents(restoreEvents); + } + + public void unregisterCallbacksAndEvents() { + this.eventDispatcher.unregister(); + this.backupCallback = null; + this.internalRestoreCallback = null; + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == reqCodeBackup) { + handleBackupResult(resultCode, data); + } else if (requestCode == reqCodeRestore) { + handleRestoreResult(resultCode, data); + } + } + + public void sendRestoreSuccessResult(String publicAddress) { + Intent intent = new Intent(); + intent.putExtra(EXTRA_KEY_PUBLIC_ADDRESS, publicAddress); + eventDispatcher.setActivityResult(RES_CODE_SUCCESS, intent); + } + + public void sendBackupSuccessResult() { + eventDispatcher.setActivityResult(RES_CODE_SUCCESS, null); + } + + public void setCancelledResult() { + eventDispatcher.setActivityResult(RES_CODE_CANCEL, null); + } + + private void handleRestoreResult(int resultCode, Intent data) { + if (internalRestoreCallback != null) { + switch (resultCode) { + case RES_CODE_SUCCESS: + final String publicAddress = data.getStringExtra(EXTRA_KEY_PUBLIC_ADDRESS); + if (publicAddress == null) { + internalRestoreCallback.onFailure(new BackupAndRestoreException(CODE_UNEXPECTED, +<<<<<<< HEAD + "Unexpected error - imported account public address not found")); +======= + "Unexpected error - imported account public address not found")); +>>>>>>> master + } + internalRestoreCallback.onSuccess(publicAddress); + break; + case RES_CODE_CANCEL: + internalRestoreCallback.onCancel(); + break; + case RES_CODE_FAILED: + String errorMessage = data.getStringExtra(EXTRA_KEY_ERROR_MESSAGE); + int code = data.getIntExtra(EXTRA_KEY_ERROR_CODE, 0); + internalRestoreCallback.onFailure(new BackupAndRestoreException(code, errorMessage)); + break; + default: + internalRestoreCallback.onFailure( +<<<<<<< HEAD + new BackupAndRestoreException(CODE_UNEXPECTED, + "Unexpected error - unknown result code " + resultCode)); +======= + new BackupAndRestoreException(CODE_UNEXPECTED, + "Unexpected error - unknown result code " + resultCode)); +>>>>>>> master + break; + } + } + } + + private void handleBackupResult(int resultCode, Intent data) { + if (backupCallback != null) { + switch (resultCode) { + case RES_CODE_SUCCESS: + backupCallback.onSuccess(); + break; + case RES_CODE_CANCEL: + backupCallback.onCancel(); + break; + case RES_CODE_FAILED: + String errorMessage = data.getStringExtra(EXTRA_KEY_ERROR_MESSAGE); + int code = data.getIntExtra(EXTRA_KEY_ERROR_CODE, 0); + backupCallback.onFailure(new BackupAndRestoreException(code, errorMessage)); + break; + default: + backupCallback.onFailure( +<<<<<<< HEAD + new BackupAndRestoreException(CODE_UNEXPECTED, + "Unexpected error - unknown result code " + resultCode)); +======= + new BackupAndRestoreException(CODE_UNEXPECTED, + "Unexpected error - unknown result code " + resultCode)); +>>>>>>> master + break; + } + } + } + + public void sendBackupEvent(@BackupEventCode int eventCode) { + eventDispatcher.sendEvent(EventDispatcher.BACKUP_EVENTS, eventCode); + } + + public void sendRestoreEvent(@RestoreEventCode int eventCode) { + eventDispatcher.sendEvent(EventDispatcher.RESTORE_EVENTS, eventCode); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcher.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcher.java index 9cf8f6f5..b58b015d 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcher.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcher.java @@ -3,33 +3,35 @@ import android.content.Intent; import android.support.annotation.IntDef; import android.support.annotation.Nullable; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; + import kin.backupandrestore.BackupEvents; import kin.backupandrestore.RestoreEvents; public interface EventDispatcher { - @IntDef({BACKUP_EVENTS, RESTORE_EVENTS}) - @Retention(RetentionPolicy.SOURCE) - @interface EventType { + @IntDef({BACKUP_EVENTS, RESTORE_EVENTS}) + @Retention(RetentionPolicy.SOURCE) + @interface EventType { - } + } - int BACKUP_EVENTS = 0x00000001; - int RESTORE_EVENTS = 0x00000002; + int BACKUP_EVENTS = 0x00000001; + int RESTORE_EVENTS = 0x00000002; - String EXTRA_KEY_EVENT_TYPE = "EVENT_TYPE"; - String EXTRA_KEY_EVENT_ID = "EVENT_ID"; + String EXTRA_KEY_EVENT_TYPE = "EVENT_TYPE"; + String EXTRA_KEY_EVENT_ID = "EVENT_ID"; - void setBackupEvents(@Nullable BackupEvents backupEvents); + void setBackupEvents(@Nullable BackupEvents backupEvents); - void setRestoreEvents(@Nullable RestoreEvents restoreEvents); + void setRestoreEvents(@Nullable RestoreEvents restoreEvents); - void sendEvent(@EventType final int eventType, final int eventID); + void sendEvent(@EventType final int eventType, final int eventID); - void setActivityResult(int resultCode, Intent data); + void setActivityResult(int resultCode, Intent data); - void unregister(); + void unregister(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcherImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcherImpl.java index 7fe477d7..8d7aaaf6 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcherImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/EventDispatcherImpl.java @@ -1,5 +1,14 @@ package kin.backupandrestore.events; +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import kin.backupandrestore.BackupEvents; +import kin.backupandrestore.RestoreEvents; +import kin.backupandrestore.events.BroadcastManager.Listener; +import kin.backupandrestore.events.BroadcastManagerImpl.ActionName; + import static kin.backupandrestore.events.BackupEventCode.BACKUP_COMPLETED_PAGE_VIEWED; import static kin.backupandrestore.events.BackupEventCode.BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED; import static kin.backupandrestore.events.BackupEventCode.BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED; @@ -22,159 +31,151 @@ import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED; import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED; -import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import kin.backupandrestore.BackupEvents; -import kin.backupandrestore.RestoreEvents; -import kin.backupandrestore.events.BroadcastManager.Listener; -import kin.backupandrestore.events.BroadcastManagerImpl.ActionName; - public class EventDispatcherImpl implements EventDispatcher { - @Nullable - private BackupEvents backupEvents; - @Nullable - private RestoreEvents restoreEvents; - - @NonNull - private final BroadcastManager broadcastManager; - private Listener broadcastListener; - - public EventDispatcherImpl(@NonNull final BroadcastManager broadcastManager) { - this.broadcastManager = broadcastManager; - } - - @Override - public void setBackupEvents(@Nullable BackupEvents backupEvents) { - this.backupEvents = backupEvents; - if (backupEvents != null) { - registerBroadcastListener(ACTION_EVENTS_BACKUP); - } - } - - @Override - public void setRestoreEvents(@Nullable RestoreEvents restoreEvents) { - this.restoreEvents = restoreEvents; - if (restoreEvents != null) { - registerBroadcastListener(ACTION_EVENTS_RESTORE); - } - } - - @Override - public void sendEvent(@EventType final int eventType, final int eventID) { - Intent data = new Intent(); - data.putExtra(EXTRA_KEY_EVENT_TYPE, eventType); - data.putExtra(EXTRA_KEY_EVENT_ID, eventID); - broadcastManager.sendEvent(data, eventType == BACKUP_EVENTS ? ACTION_EVENTS_BACKUP : ACTION_EVENTS_RESTORE); - } - - @Override - public void setActivityResult(int resultCode, Intent data) { - broadcastManager.setActivityResult(resultCode, data); - } - - @Override - public void unregister() { - if (broadcastListener != null) { - broadcastManager.unregisterAll(); - } - } - - private void registerBroadcastListener(@ActionName final String actionName) { - if (broadcastListener == null) { - broadcastListener = new Listener() { - @Override - public void onReceive(Intent data) { - parseData(data); - } - }; - } - broadcastManager.register(broadcastListener, actionName); - } - - private void parseData(Intent data) { - final int eventType = data.getIntExtra(EXTRA_KEY_EVENT_TYPE, -1); - final int eventID = data.getIntExtra(EXTRA_KEY_EVENT_ID, -1); - if (eventType == BACKUP_EVENTS) { - handleBackupEvents(eventID); - } else { - if (eventType == RESTORE_EVENTS) { - handleRestoreEvents(eventID); - } - } - } - - private void handleBackupEvents(@BackupEventCode int eventID) { - if (backupEvents != null) { - switch (eventID) { - case BACKUP_WELCOME_PAGE_VIEWED: - backupEvents.onBackupWelcomePageViewed(); - break; - case BACKUP_WELCOME_PAGE_BACK_TAPPED: - backupEvents.onBackupWelcomePageBackButtonTapped(); - break; - case BACKUP_WELCOME_PAGE_START_TAPPED: - backupEvents.onBackupStartButtonTapped(); - break; - case BACKUP_CREATE_PASSWORD_PAGE_VIEWED: - backupEvents.onBackupCreatePasswordPageViewed(); - break; - case BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED: - backupEvents.onBackupCreatePasswordBackButtonTapped(); - break; - case BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED: - backupEvents.onBackupCreatePasswordNextButtonTapped(); - break; - case BACKUP_QR_CODE_PAGE_VIEWED: - backupEvents.onBackupQrCodePageViewed(); - break; - case BACKUP_QR_PAGE_BACK_TAPPED: - backupEvents.onBackupQrCodeBackButtonTapped(); - break; - case BACKUP_QR_PAGE_QR_SAVED_TAPPED: - backupEvents.onBackupQrCodeMyQrCodeButtonTapped(); - break; - case BACKUP_QR_PAGE_SEND_QR_TAPPED: - backupEvents.onBackupQrCodeSendButtonTapped(); - break; - case BACKUP_COMPLETED_PAGE_VIEWED: - backupEvents.onBackupCompletedPageViewed(); - break; - } - } - } - - private void handleRestoreEvents(@RestoreEventCode int eventID) { - if (restoreEvents != null) { - switch (eventID) { - case RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED: - restoreEvents.onRestoreUploadQrCodePageViewed(); - break; - case RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED: - restoreEvents.onRestoreUploadQrCodeButtonTapped(); - break; - case RESTORE_UPLOAD_QR_CODE_BACK_TAPPED: - restoreEvents.onRestoreUploadQrCodeBackButtonTapped(); - break; - case RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED: - restoreEvents.onRestoreAreYouSureCancelButtonTapped(); - break; - case RESTORE_PASSWORD_ENTRY_PAGE_VIEWED: - restoreEvents.onRestorePasswordEntryPageViewed(); - break; - case RESTORE_PASSWORD_DONE_TAPPED: - restoreEvents.onRestorePasswordDoneButtonTapped(); - break; - case RESTORE_ARE_YOUR_SURE_OK_TAPPED: - restoreEvents.onRestoreAreYouSureOkButtonTapped(); - break; - case RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED: - restoreEvents.onRestorePasswordEntryBackButtonTapped(); - break; - - } - } - } + @Nullable + private BackupEvents backupEvents; + @Nullable + private RestoreEvents restoreEvents; + + @NonNull + private final BroadcastManager broadcastManager; + private Listener broadcastListener; + + public EventDispatcherImpl(@NonNull final BroadcastManager broadcastManager) { + this.broadcastManager = broadcastManager; + } + + @Override + public void setBackupEvents(@Nullable BackupEvents backupEvents) { + this.backupEvents = backupEvents; + if (backupEvents != null) { + registerBroadcastListener(ACTION_EVENTS_BACKUP); + } + } + + @Override + public void setRestoreEvents(@Nullable RestoreEvents restoreEvents) { + this.restoreEvents = restoreEvents; + if (restoreEvents != null) { + registerBroadcastListener(ACTION_EVENTS_RESTORE); + } + } + + @Override + public void sendEvent(@EventType final int eventType, final int eventID) { + Intent data = new Intent(); + data.putExtra(EXTRA_KEY_EVENT_TYPE, eventType); + data.putExtra(EXTRA_KEY_EVENT_ID, eventID); + broadcastManager.sendEvent(data, eventType == BACKUP_EVENTS ? ACTION_EVENTS_BACKUP : ACTION_EVENTS_RESTORE); + } + + @Override + public void setActivityResult(int resultCode, Intent data) { + broadcastManager.setActivityResult(resultCode, data); + } + + @Override + public void unregister() { + if (broadcastListener != null) { + broadcastManager.unregisterAll(); + } + } + + private void registerBroadcastListener(@ActionName final String actionName) { + if (broadcastListener == null) { + broadcastListener = new Listener() { + @Override + public void onReceive(Intent data) { + parseData(data); + } + }; + } + broadcastManager.register(broadcastListener, actionName); + } + + private void parseData(Intent data) { + final int eventType = data.getIntExtra(EXTRA_KEY_EVENT_TYPE, -1); + final int eventID = data.getIntExtra(EXTRA_KEY_EVENT_ID, -1); + if (eventType == BACKUP_EVENTS) { + handleBackupEvents(eventID); + } else { + if (eventType == RESTORE_EVENTS) { + handleRestoreEvents(eventID); + } + } + } + + private void handleBackupEvents(@BackupEventCode int eventID) { + if (backupEvents != null) { + switch (eventID) { + case BACKUP_WELCOME_PAGE_VIEWED: + backupEvents.onBackupWelcomePageViewed(); + break; + case BACKUP_WELCOME_PAGE_BACK_TAPPED: + backupEvents.onBackupWelcomePageBackButtonTapped(); + break; + case BACKUP_WELCOME_PAGE_START_TAPPED: + backupEvents.onBackupStartButtonTapped(); + break; + case BACKUP_CREATE_PASSWORD_PAGE_VIEWED: + backupEvents.onBackupCreatePasswordPageViewed(); + break; + case BACKUP_CREATE_PASSWORD_PAGE_BACK_TAPPED: + backupEvents.onBackupCreatePasswordBackButtonTapped(); + break; + case BACKUP_CREATE_PASSWORD_PAGE_NEXT_TAPPED: + backupEvents.onBackupCreatePasswordNextButtonTapped(); + break; + case BACKUP_QR_CODE_PAGE_VIEWED: + backupEvents.onBackupQrCodePageViewed(); + break; + case BACKUP_QR_PAGE_BACK_TAPPED: + backupEvents.onBackupQrCodeBackButtonTapped(); + break; + case BACKUP_QR_PAGE_QR_SAVED_TAPPED: + backupEvents.onBackupQrCodeMyQrCodeButtonTapped(); + break; + case BACKUP_QR_PAGE_SEND_QR_TAPPED: + backupEvents.onBackupQrCodeSendButtonTapped(); + break; + case BACKUP_COMPLETED_PAGE_VIEWED: + backupEvents.onBackupCompletedPageViewed(); + break; + } + } + } + + private void handleRestoreEvents(@RestoreEventCode int eventID) { + if (restoreEvents != null) { + switch (eventID) { + case RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED: + restoreEvents.onRestoreUploadQrCodePageViewed(); + break; + case RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED: + restoreEvents.onRestoreUploadQrCodeButtonTapped(); + break; + case RESTORE_UPLOAD_QR_CODE_BACK_TAPPED: + restoreEvents.onRestoreUploadQrCodeBackButtonTapped(); + break; + case RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED: + restoreEvents.onRestoreAreYouSureCancelButtonTapped(); + break; + case RESTORE_PASSWORD_ENTRY_PAGE_VIEWED: + restoreEvents.onRestorePasswordEntryPageViewed(); + break; + case RESTORE_PASSWORD_DONE_TAPPED: + restoreEvents.onRestorePasswordDoneButtonTapped(); + break; + case RESTORE_ARE_YOUR_SURE_OK_TAPPED: + restoreEvents.onRestoreAreYouSureOkButtonTapped(); + break; + case RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED: + restoreEvents.onRestorePasswordEntryBackButtonTapped(); + break; + + } + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/InternalRestoreCallback.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/InternalRestoreCallback.java index 6be85534..df4ae279 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/InternalRestoreCallback.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/InternalRestoreCallback.java @@ -4,10 +4,10 @@ public interface InternalRestoreCallback { - void onSuccess(String publicAddress); + void onSuccess(String publicAddress); - void onCancel(); + void onCancel(); - void onFailure(BackupAndRestoreException throwable); + void onFailure(BackupAndRestoreException throwable); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/RestoreEventCode.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/RestoreEventCode.java index 8b5036c3..90858131 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/RestoreEventCode.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/events/RestoreEventCode.java @@ -1,5 +1,10 @@ package kin.backupandrestore.events; +import android.support.annotation.IntDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + import static kin.backupandrestore.events.RestoreEventCode.RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED; import static kin.backupandrestore.events.RestoreEventCode.RESTORE_ARE_YOUR_SURE_OK_TAPPED; import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_DONE_TAPPED; @@ -9,30 +14,36 @@ import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED; import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED; -import android.support.annotation.IntDef; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - @IntDef({RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED, - RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED, - RESTORE_UPLOAD_QR_CODE_BACK_TAPPED, - RESTORE_ARE_YOUR_SURE_OK_TAPPED, - RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED, - RESTORE_PASSWORD_ENTRY_PAGE_VIEWED, - RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED, - RESTORE_PASSWORD_DONE_TAPPED}) +<<<<<<< HEAD + RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED, + RESTORE_UPLOAD_QR_CODE_BACK_TAPPED, + RESTORE_ARE_YOUR_SURE_OK_TAPPED, + RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED, + RESTORE_PASSWORD_ENTRY_PAGE_VIEWED, + RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED, + RESTORE_PASSWORD_DONE_TAPPED}) +======= + RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED, + RESTORE_UPLOAD_QR_CODE_BACK_TAPPED, + RESTORE_ARE_YOUR_SURE_OK_TAPPED, + RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED, + RESTORE_PASSWORD_ENTRY_PAGE_VIEWED, + RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED, + RESTORE_PASSWORD_DONE_TAPPED}) +>>>>>>> master @Retention(RetentionPolicy.SOURCE) public @interface RestoreEventCode { - // Upload qr page - int RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED = 80000; - int RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED = 80001; - int RESTORE_UPLOAD_QR_CODE_BACK_TAPPED = 80002; - int RESTORE_ARE_YOUR_SURE_OK_TAPPED = 80003; - int RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED = 80004; - // Enter Password page - int RESTORE_PASSWORD_ENTRY_PAGE_VIEWED = 81000; - int RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED = 81001; - // Complete page - int RESTORE_PASSWORD_DONE_TAPPED = 82000; + // Upload qr page + int RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED = 80000; + int RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED = 80001; + int RESTORE_UPLOAD_QR_CODE_BACK_TAPPED = 80002; + int RESTORE_ARE_YOUR_SURE_OK_TAPPED = 80003; + int RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED = 80004; + // Enter Password page + int RESTORE_PASSWORD_ENTRY_PAGE_VIEWED = 81000; + int RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED = 81001; + // Complete page + int RESTORE_PASSWORD_DONE_TAPPED = 82000; } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/exception/BackupAndRestoreException.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/exception/BackupAndRestoreException.java index 27ecd991..5cafbf6a 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/exception/BackupAndRestoreException.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/exception/BackupAndRestoreException.java @@ -2,26 +2,26 @@ public class BackupAndRestoreException extends Exception { - public static final int CODE_UNEXPECTED = 501; + public static final int CODE_UNEXPECTED = 501; - public static final int CODE_BACKUP_FAILED = 100; - public static final int CODE_RESTORE_FAILED = 101; - public static final int CODE_RESTORE_INVALID_KEYSTORE_FORMAT = 102; + public static final int CODE_BACKUP_FAILED = 100; + public static final int CODE_RESTORE_FAILED = 101; + public static final int CODE_RESTORE_INVALID_KEYSTORE_FORMAT = 102; - private final int code; + private final int code; - public BackupAndRestoreException(int code, String message) { - super(message); - this.code = code; - } + public BackupAndRestoreException(int code, String message) { + super(message); + this.code = code; + } - public BackupAndRestoreException(int code, String message, Throwable cause) { - super(message, cause); - this.code = code; - } + public BackupAndRestoreException(int code, String message, Throwable cause) { + super(message, cause); + this.code = code; + } - public int getCode() { - return code; - } + public int getCode() { + return code; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGenerator.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGenerator.java index 53bee803..ef7ae434 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGenerator.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGenerator.java @@ -7,30 +7,30 @@ public interface QRBarcodeGenerator { - @NonNull - Uri generate(@NonNull String text) throws QRBarcodeGeneratorException; + @NonNull + Uri generate(@NonNull String text) throws QRBarcodeGeneratorException; - @NonNull - String decodeQR(@NonNull Uri uri) throws QRBarcodeGeneratorException; + @NonNull + String decodeQR(@NonNull Uri uri) throws QRBarcodeGeneratorException; - class QRBarcodeGeneratorException extends Exception { + class QRBarcodeGeneratorException extends Exception { - QRBarcodeGeneratorException(String msg, Throwable throwable) { - super(msg, throwable); - } - } + QRBarcodeGeneratorException(String msg, Throwable throwable) { + super(msg, throwable); + } + } - class QRNotFoundInImageException extends QRBarcodeGeneratorException { + class QRNotFoundInImageException extends QRBarcodeGeneratorException { - QRNotFoundInImageException(String msg, Throwable throwable) { - super(msg, throwable); - } - } + QRNotFoundInImageException(String msg, Throwable throwable) { + super(msg, throwable); + } + } - class QRFileHandlingException extends QRBarcodeGeneratorException { + class QRFileHandlingException extends QRBarcodeGeneratorException { - QRFileHandlingException(String msg, Throwable throwable) { - super(msg, throwable); - } - } + QRFileHandlingException(String msg, Throwable throwable) { + super(msg, throwable); + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGeneratorImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGeneratorImpl.java index 172570b5..e8776f5c 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGeneratorImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRBarcodeGeneratorImpl.java @@ -1,12 +1,10 @@ package kin.backupandrestore.qr; -import static android.graphics.Color.BLACK; -import static android.graphics.Color.WHITE; - import android.graphics.Bitmap; import android.net.Uri; import android.support.annotation.NonNull; + import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.ChecksumException; @@ -20,84 +18,96 @@ import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.qrcode.QRCodeReader; + import java.io.IOException; import java.util.EnumMap; import java.util.EnumSet; import java.util.Map; + import kin.backupandrestore.utils.Logger; +import static android.graphics.Color.BLACK; +import static android.graphics.Color.WHITE; + public class QRBarcodeGeneratorImpl implements QRBarcodeGenerator { - private static final int QR_PIXELS = 600; - private final QRFileUriHandler fileUriHandler; + private static final int QR_PIXELS = 600; + private final QRFileUriHandler fileUriHandler; - public QRBarcodeGeneratorImpl(QRFileUriHandler fileUriHandler) { - this.fileUriHandler = fileUriHandler; - } + public QRBarcodeGeneratorImpl(QRFileUriHandler fileUriHandler) { + this.fileUriHandler = fileUriHandler; + } - @NonNull - @Override - public Uri generate(@NonNull String text) throws QRBarcodeGeneratorException { - try { - BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, QR_PIXELS, QR_PIXELS); - Bitmap bitmap = bitMatrixToBitmap(bitMatrix); - return fileUriHandler.saveFile(bitmap); - } catch (WriterException e) { - Logger.e("decodeQR failed. ", e); - throw new QRBarcodeGeneratorException("Cannot generate a QR, caused by : " + e.getMessage(), e); - } catch (IOException e) { - Logger.e("decodeQR failed. ", e); - throw new QRFileHandlingException("Cannot load QR file, caused by :" + e.getMessage(), e); - } - } + @NonNull + @Override + public Uri generate(@NonNull String text) throws QRBarcodeGeneratorException { + try { + BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, QR_PIXELS, QR_PIXELS); + Bitmap bitmap = bitMatrixToBitmap(bitMatrix); + return fileUriHandler.saveFile(bitmap); + } catch (WriterException e) { + Logger.e("decodeQR failed. ", e); + throw new QRBarcodeGeneratorException("Cannot generate a QR, caused by : " + e.getMessage(), e); + } catch (IOException e) { + Logger.e("decodeQR failed. ", e); + throw new QRFileHandlingException("Cannot load QR file, caused by :" + e.getMessage(), e); + } + } - private Bitmap bitMatrixToBitmap(BitMatrix matrix) { - int width = matrix.getWidth(); - int height = matrix.getHeight(); - int[] pixels = new int[width * height]; - for (int y = 0; y < height; y++) { - int offset = y * width; - for (int x = 0; x < width; x++) { - pixels[offset + x] = matrix.get(x, y) ? BLACK : WHITE; - } - } + private Bitmap bitMatrixToBitmap(BitMatrix matrix) { + int width = matrix.getWidth(); + int height = matrix.getHeight(); + int[] pixels = new int[width * height]; + for (int y = 0; y < height; y++) { + int offset = y * width; + for (int x = 0; x < width; x++) { + pixels[offset + x] = matrix.get(x, y) ? BLACK : WHITE; + } + } - Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - bitmap.setPixels(pixels, 0, width, 0, 0, width, height); - return bitmap; - } + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, width, 0, 0, width, height); + return bitmap; + } - @NonNull - @Override - public String decodeQR(@NonNull Uri uri) throws QRBarcodeGeneratorException { - try { - Bitmap bitmap = fileUriHandler.loadFile(uri); - int width = bitmap.getWidth(); - int height = bitmap.getHeight(); - int[] pixels = new int[width * height]; - bitmap.getPixels(pixels, 0, width, 0, 0, width, height); + @NonNull + @Override + public String decodeQR(@NonNull Uri uri) throws QRBarcodeGeneratorException { + try { + Bitmap bitmap = fileUriHandler.loadFile(uri); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + int[] pixels = new int[width * height]; + bitmap.getPixels(pixels, 0, width, 0, 0, width, height); - RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels); - BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); + RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels); + BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); - QRCodeReader reader = new QRCodeReader(); - Map - hintsMap = new EnumMap<>(DecodeHintType.class); - hintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); - hintsMap.put(DecodeHintType.POSSIBLE_FORMATS, EnumSet - .allOf(BarcodeFormat.class)); - hintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.FALSE); - Result result = reader.decode(binaryBitmap, hintsMap); - return result.getText(); - } catch (IOException e) { - Logger.e("decodeQR failed. ", e); - throw new QRFileHandlingException("Cannot load QR file, caused by :" + e.getMessage(), e); - } catch (NotFoundException e) { - Logger.e("decodeQR failed. ", e); - throw new QRNotFoundInImageException("Cannot find a QR code in given image.", e); - } catch (FormatException | ChecksumException e) { - Logger.e("decodeQR failed. ", e); - throw new QRBarcodeGeneratorException("Cannot find a QR code in given image.", e); - } - } + QRCodeReader reader = new QRCodeReader(); + Map +<<<<<<< HEAD + hintsMap = new EnumMap<>(DecodeHintType.class); + hintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); + hintsMap.put(DecodeHintType.POSSIBLE_FORMATS, EnumSet + .allOf(BarcodeFormat.class)); +======= + hintsMap = new EnumMap<>(DecodeHintType.class); + hintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); + hintsMap.put(DecodeHintType.POSSIBLE_FORMATS, EnumSet + .allOf(BarcodeFormat.class)); +>>>>>>> master + hintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.FALSE); + Result result = reader.decode(binaryBitmap, hintsMap); + return result.getText(); + } catch (IOException e) { + Logger.e("decodeQR failed. ", e); + throw new QRFileHandlingException("Cannot load QR file, caused by :" + e.getMessage(), e); + } catch (NotFoundException e) { + Logger.e("decodeQR failed. ", e); + throw new QRNotFoundInImageException("Cannot find a QR code in given image.", e); + } catch (FormatException | ChecksumException e) { + Logger.e("decodeQR failed. ", e); + throw new QRBarcodeGeneratorException("Cannot find a QR code in given image.", e); + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandler.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandler.java index b9f45d16..98d07b7a 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandler.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandler.java @@ -4,13 +4,14 @@ import android.graphics.Bitmap; import android.net.Uri; import android.support.annotation.NonNull; + import java.io.IOException; interface QRFileUriHandler { - @NonNull - Bitmap loadFile(@NonNull Uri uri) throws IOException; + @NonNull + Bitmap loadFile(@NonNull Uri uri) throws IOException; - @NonNull - Uri saveFile(@NonNull Bitmap image) throws IOException; + @NonNull + Uri saveFile(@NonNull Bitmap image) throws IOException; } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandlerImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandlerImpl.java index 24a0c0f3..e5be2ce0 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandlerImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/qr/QRFileUriHandlerImpl.java @@ -8,6 +8,7 @@ import android.os.ParcelFileDescriptor; import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; + import java.io.File; import java.io.FileDescriptor; import java.io.FileOutputStream; @@ -15,60 +16,66 @@ public class QRFileUriHandlerImpl implements QRFileUriHandler { - private static final String RELATIVE_PATH_FILENAME_QR_IMAGE = "/kinrecovery_qr_codes/backup_qr.png"; - private static final String AUTHORITY_FORMAT = "%s.KinRecoveryFileProvider"; - private final String AUTHORITY; - private final Context context; + private static final String RELATIVE_PATH_FILENAME_QR_IMAGE = "/kinrecovery_qr_codes/backup_qr.png"; + private static final String AUTHORITY_FORMAT = "%s.KinRecoveryFileProvider"; + private final String AUTHORITY; + private final Context context; - public QRFileUriHandlerImpl(@NonNull Context context) { - this.context = context; - this.AUTHORITY = String.format(AUTHORITY_FORMAT, context.getPackageName()); - } + public QRFileUriHandlerImpl(@NonNull Context context) { + this.context = context; + this.AUTHORITY = String.format(AUTHORITY_FORMAT, context.getPackageName()); + } - @NonNull - @Override - public Bitmap loadFile(@NonNull Uri uri) throws IOException { - ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r"); - if (pfd != null) { - FileDescriptor fd = pfd.getFileDescriptor(); - Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd); - if (bitmap != null) { - return bitmap; - } - } - throw new IOException("decoding file as bitmap failed."); - } + @NonNull + @Override + public Bitmap loadFile(@NonNull Uri uri) throws IOException { + ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r"); + if (pfd != null) { + FileDescriptor fd = pfd.getFileDescriptor(); + Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd); + if (bitmap != null) { + return bitmap; + } + } + throw new IOException("decoding file as bitmap failed."); + } - @NonNull - @Override - public Uri saveFile(@NonNull Bitmap bitmap) throws IOException { - File file = getOrCreateSaveFile(); - FileOutputStream stream = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); - stream.close(); - return FileProvider.getUriForFile( - context, - AUTHORITY, - file); - } + @NonNull + @Override + public Uri saveFile(@NonNull Bitmap bitmap) throws IOException { + File file = getOrCreateSaveFile(); + FileOutputStream stream = new FileOutputStream(file); + bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); + stream.close(); + return FileProvider.getUriForFile( +<<<<<<< HEAD + context, + AUTHORITY, + file); +======= + context, + AUTHORITY, + file); +>>>>>>> master + } - @NonNull - private File getOrCreateSaveFile() throws IOException { - String filepath = context.getFilesDir().getAbsolutePath() + RELATIVE_PATH_FILENAME_QR_IMAGE; - File file = new File(filepath); - if (!file.exists()) { - if (!file.getParentFile().exists()) { - boolean dirCreated = file.getParentFile().mkdir(); - if (!dirCreated) { - throw new IOException("Cannot create folder at target location."); - } - } - boolean fileCreated = file.createNewFile(); - if (!fileCreated) { - throw new IOException("Cannot create file at target location."); - } - } - return file; - } + @NonNull + private File getOrCreateSaveFile() throws IOException { + String filepath = context.getFilesDir().getAbsolutePath() + RELATIVE_PATH_FILENAME_QR_IMAGE; + File file = new File(filepath); + if (!file.exists()) { + if (!file.getParentFile().exists()) { + boolean dirCreated = file.getParentFile().mkdir(); + if (!dirCreated) { + throw new IOException("Cannot create folder at target location."); + } + } + boolean fileCreated = file.createNewFile(); + if (!fileCreated) { + throw new IOException("Cannot create file at target location."); + } + } + return file; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenter.java index 9751bb79..7d7219cd 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenter.java @@ -6,5 +6,5 @@ interface BaseChildPresenter extends BasePresenter { - void onAttach(T view, RestorePresenter restorePresenter); + void onAttach(T view, RestorePresenter restorePresenter); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenterImpl.java index c4e6da1c..a319d387 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/BaseChildPresenterImpl.java @@ -5,18 +5,22 @@ import kin.backupandrestore.base.BaseView; abstract class BaseChildPresenterImpl extends BasePresenterImpl implements - BaseChildPresenter { +<<<<<<< HEAD + BaseChildPresenter { +======= + BaseChildPresenter { +>>>>>>> master - private RestorePresenter parentPresenter; + private RestorePresenter parentPresenter; - @Override - public void onAttach(T view, RestorePresenter restorePresenter) { - super.onAttach(view); - this.parentPresenter = restorePresenter; - onAttach(view); - } + @Override + public void onAttach(T view, RestorePresenter restorePresenter) { + super.onAttach(view); + this.parentPresenter = restorePresenter; + onAttach(view); + } - RestorePresenter getParentPresenter() { - return parentPresenter; - } + RestorePresenter getParentPresenter() { + return parentPresenter; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/FileSharingHelper.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/FileSharingHelper.java index 9cb8cc3b..eafb87ac 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/FileSharingHelper.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/FileSharingHelper.java @@ -9,68 +9,76 @@ public class FileSharingHelper { - static final int REQUEST_RESULT_CANCELED = 0; - static final int REQUEST_RESULT_OK = 1; - static final int REQUEST_RESULT_FAILED = 2; + static final int REQUEST_RESULT_CANCELED = 0; + static final int REQUEST_RESULT_OK = 1; + static final int REQUEST_RESULT_FAILED = 2; - static final String INTENT_TYPE_ALL_IMAGE = "image/*"; - static final int REQUEST_CODE_IMAGE = 800; - private final Fragment fragment; + static final String INTENT_TYPE_ALL_IMAGE = "image/*"; + static final int REQUEST_CODE_IMAGE = 800; + private final Fragment fragment; - public FileSharingHelper(Fragment fragment) { - this.fragment = fragment; - } + public FileSharingHelper(Fragment fragment) { + this.fragment = fragment; + } - void requestImageFile(String chooserTitle) { - Intent intent; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { - intent = new Intent(Intent.ACTION_OPEN_DOCUMENT) - .addCategory(Intent.CATEGORY_OPENABLE) - .setType(INTENT_TYPE_ALL_IMAGE); - } else { - intent = new Intent(Intent.ACTION_PICK) - .setType(INTENT_TYPE_ALL_IMAGE); - } - fragment.startActivityForResult(Intent.createChooser(intent, chooserTitle), REQUEST_CODE_IMAGE); - } + void requestImageFile(String chooserTitle) { + Intent intent; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + intent = new Intent(Intent.ACTION_OPEN_DOCUMENT) +<<<<<<< HEAD + .addCategory(Intent.CATEGORY_OPENABLE) + .setType(INTENT_TYPE_ALL_IMAGE); + } else { + intent = new Intent(Intent.ACTION_PICK) + .setType(INTENT_TYPE_ALL_IMAGE); +======= + .addCategory(Intent.CATEGORY_OPENABLE) + .setType(INTENT_TYPE_ALL_IMAGE); + } else { + intent = new Intent(Intent.ACTION_PICK) + .setType(INTENT_TYPE_ALL_IMAGE); +>>>>>>> master + } + fragment.startActivityForResult(Intent.createChooser(intent, chooserTitle), REQUEST_CODE_IMAGE); + } - RequestFileResult extractUriFromActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_CODE_IMAGE) { - if (resultCode == Activity.RESULT_CANCELED) { - return new RequestFileResult(REQUEST_RESULT_CANCELED, null); - } else if (resultCode == Activity.RESULT_OK) { - return new RequestFileResult(REQUEST_RESULT_OK, data.getData()); - } - } - return new RequestFileResult(REQUEST_RESULT_FAILED, null); - } + RequestFileResult extractUriFromActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_CODE_IMAGE) { + if (resultCode == Activity.RESULT_CANCELED) { + return new RequestFileResult(REQUEST_RESULT_CANCELED, null); + } else if (resultCode == Activity.RESULT_OK) { + return new RequestFileResult(REQUEST_RESULT_OK, data.getData()); + } + } + return new RequestFileResult(REQUEST_RESULT_FAILED, null); + } - @NonNull - public Intent getShareableIntent(@NonNull Uri uri) { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.setAction(Intent.ACTION_SEND); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.setType("image/*"); - return intent; - } + @NonNull + public Intent getShareableIntent(@NonNull Uri uri) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_STREAM, uri); + intent.setType("image/*"); + return intent; + } - static class RequestFileResult { + static class RequestFileResult { - private final int result; - private final Uri fileUri; + private final int result; + private final Uri fileUri; - RequestFileResult(int result, Uri fileUri) { - this.result = result; - this.fileUri = fileUri; - } + RequestFileResult(int result, Uri fileUri) { + this.result = result; + this.fileUri = fileUri; + } - public int getResult() { - return result; - } + public int getResult() { + return result; + } - public Uri getFileUri() { - return fileUri; - } - } + public Uri getFileUri() { + return fileUri; + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenter.java index ff27048d..97a770a3 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenter.java @@ -5,5 +5,5 @@ public interface RestoreCompletedPresenter extends BaseChildPresenter { - void close(); + void close(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenterImpl.java index 7135a078..310e9df5 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreCompletedPresenterImpl.java @@ -3,19 +3,23 @@ import kin.backupandrestore.restore.view.RestoreCompletedView; public class RestoreCompletedPresenterImpl extends BaseChildPresenterImpl implements - RestoreCompletedPresenter { +<<<<<<< HEAD + RestoreCompletedPresenter { +======= + RestoreCompletedPresenter { +>>>>>>> master - public RestoreCompletedPresenterImpl() { - } + public RestoreCompletedPresenterImpl() { + } - @Override - public void onBackClicked() { - getParentPresenter().previousStep(); - } + @Override + public void onBackClicked() { + getParentPresenter().previousStep(); + } - @Override - public void close() { - getParentPresenter().closeFlow(); - } + @Override + public void close() { + getParentPresenter().closeFlow(); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenter.java index 073defb3..b64d334d 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenter.java @@ -2,13 +2,14 @@ import android.os.Bundle; + import kin.backupandrestore.restore.view.RestoreEnterPasswordView; public interface RestoreEnterPasswordPresenter extends BaseChildPresenter { - void onPasswordChanged(String password); + void onPasswordChanged(String password); - void restoreClicked(String password); + void restoreClicked(String password); - void onSaveInstanceState(Bundle outState); + void onSaveInstanceState(Bundle outState); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenterImpl.java index 0ade2bab..20dba5f2 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestoreEnterPasswordPresenterImpl.java @@ -1,15 +1,9 @@ package kin.backupandrestore.restore.presenter; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_DONE_TAPPED; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_ENTRY_PAGE_VIEWED; -import static kin.backupandrestore.exception.BackupAndRestoreException.CODE_RESTORE_FAILED; -import static kin.backupandrestore.exception.BackupAndRestoreException.CODE_RESTORE_INVALID_KEYSTORE_FORMAT; -import static kin.backupandrestore.restore.presenter.RestorePresenterImpl.KEY_ACCOUNT_KEY; - import android.os.Bundle; import android.support.annotation.NonNull; + import kin.backupandrestore.Validator; import kin.backupandrestore.events.CallbackManager; import kin.backupandrestore.exception.BackupAndRestoreException; @@ -20,75 +14,94 @@ import kin.sdk.exception.CreateAccountException; import kin.sdk.exception.CryptoException; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_DONE_TAPPED; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_PASSWORD_ENTRY_PAGE_VIEWED; +import static kin.backupandrestore.exception.BackupAndRestoreException.CODE_RESTORE_FAILED; +import static kin.backupandrestore.exception.BackupAndRestoreException.CODE_RESTORE_INVALID_KEYSTORE_FORMAT; +import static kin.backupandrestore.restore.presenter.RestorePresenterImpl.KEY_ACCOUNT_KEY; + public class RestoreEnterPasswordPresenterImpl extends BaseChildPresenterImpl implements - RestoreEnterPasswordPresenter { +<<<<<<< HEAD + RestoreEnterPasswordPresenter { +======= + RestoreEnterPasswordPresenter { +>>>>>>> master - private final String keystoreData; - private final CallbackManager callbackManager; + private final String keystoreData; + private final CallbackManager callbackManager; - public RestoreEnterPasswordPresenterImpl(@NonNull final CallbackManager callbackManager, String keystoreData) { - this.callbackManager = callbackManager; - this.keystoreData = keystoreData; - this.callbackManager.sendRestoreEvent(RESTORE_PASSWORD_ENTRY_PAGE_VIEWED); - } + public RestoreEnterPasswordPresenterImpl(@NonNull final CallbackManager callbackManager, String keystoreData) { + this.callbackManager = callbackManager; + this.keystoreData = keystoreData; + this.callbackManager.sendRestoreEvent(RESTORE_PASSWORD_ENTRY_PAGE_VIEWED); + } - @Override - public void onPasswordChanged(String password) { - RestoreEnterPasswordView view = getView(); - if (view != null) { - if (password.isEmpty()) { - view.disableDoneButton(); - } else { - view.enableDoneButton(); - } - } - } + @Override + public void onPasswordChanged(String password) { + RestoreEnterPasswordView view = getView(); + if (view != null) { + if (password.isEmpty()) { + view.disableDoneButton(); + } else { + view.enableDoneButton(); + } + } + } - @Override - public void restoreClicked(String password) { - callbackManager.sendRestoreEvent(RESTORE_PASSWORD_DONE_TAPPED); - try { - KinAccount kinAccount = importAccount(keystoreData, password); - getParentPresenter().navigateToRestoreCompletedPage(kinAccount); - } catch (BackupAndRestoreException e) { - Logger.e("RestoreEnterPasswordPresenterImpl - restore failed.", e); - RestoreEnterPasswordView view = getView(); - if (view != null) { - if (e.getCode() == CODE_RESTORE_INVALID_KEYSTORE_FORMAT) { - view.invalidQrError(); - } else { - view.decodeError(); - } - } - } - } + @Override + public void restoreClicked(String password) { + callbackManager.sendRestoreEvent(RESTORE_PASSWORD_DONE_TAPPED); + try { + KinAccount kinAccount = importAccount(keystoreData, password); + getParentPresenter().navigateToRestoreCompletedPage(kinAccount); + } catch (BackupAndRestoreException e) { + Logger.e("RestoreEnterPasswordPresenterImpl - restore failed.", e); + RestoreEnterPasswordView view = getView(); + if (view != null) { + if (e.getCode() == CODE_RESTORE_INVALID_KEYSTORE_FORMAT) { + view.invalidQrError(); + } else { + view.decodeError(); + } + } + } + } - private KinAccount importAccount(@NonNull final String keystore, @NonNull final String password) - throws BackupAndRestoreException { - Validator.checkNotNull(keystore, "keystore"); - Validator.checkNotNull(keystore, "password"); - KinAccount importedAccount; - try { - importedAccount = getParentPresenter().getKinClient().importAccount(keystore, password); - } catch (CryptoException e) { - throw new BackupAndRestoreException(CODE_RESTORE_FAILED, "Could not import the account"); - } catch (CreateAccountException e) { - throw new BackupAndRestoreException(CODE_RESTORE_FAILED, "Could not create the account"); - } catch (CorruptedDataException e) { - throw new BackupAndRestoreException(CODE_RESTORE_INVALID_KEYSTORE_FORMAT, - "The keystore is invalid - wrong format"); - } - return importedAccount; - } + private KinAccount importAccount(@NonNull final String keystore, @NonNull final String password) +<<<<<<< HEAD + throws BackupAndRestoreException { +======= + throws BackupAndRestoreException { +>>>>>>> master + Validator.checkNotNull(keystore, "keystore"); + Validator.checkNotNull(keystore, "password"); + KinAccount importedAccount; + try { + importedAccount = getParentPresenter().getKinClient().importAccount(keystore, password); + } catch (CryptoException e) { + throw new BackupAndRestoreException(CODE_RESTORE_FAILED, "Could not import the account"); + } catch (CreateAccountException e) { + throw new BackupAndRestoreException(CODE_RESTORE_FAILED, "Could not create the account"); + } catch (CorruptedDataException e) { + throw new BackupAndRestoreException(CODE_RESTORE_INVALID_KEYSTORE_FORMAT, +<<<<<<< HEAD + "The keystore is invalid - wrong format"); +======= + "The keystore is invalid - wrong format"); +>>>>>>> master + } + return importedAccount; + } - @Override - public void onSaveInstanceState(Bundle outState) { - outState.putString(KEY_ACCOUNT_KEY, keystoreData); - } + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putString(KEY_ACCOUNT_KEY, keystoreData); + } - @Override - public void onBackClicked() { - callbackManager.sendRestoreEvent(RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED); - getParentPresenter().previousStep(); - } + @Override + public void onBackClicked() { + callbackManager.sendRestoreEvent(RESTORE_PASSWORD_ENTRY_PAGE_BACK_TAPPED); + getParentPresenter().previousStep(); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenter.java index b8ed11b6..35c380ab 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenter.java @@ -3,6 +3,7 @@ import android.content.Intent; import android.os.Bundle; + import kin.backupandrestore.base.BasePresenter; import kin.backupandrestore.restore.view.RestoreView; import kin.sdk.KinAccount; @@ -10,17 +11,17 @@ public interface RestorePresenter extends BasePresenter { - void navigateToEnterPasswordPage(final String accountKey); + void navigateToEnterPasswordPage(final String accountKey); - void navigateToRestoreCompletedPage(final KinAccount kinAccount); + void navigateToRestoreCompletedPage(final KinAccount kinAccount); - void closeFlow(); + void closeFlow(); - void previousStep(); + void previousStep(); - void onActivityResult(int requestCode, int resultCode, Intent data); + void onActivityResult(int requestCode, int resultCode, Intent data); - void onSaveInstanceState(Bundle outState); + void onSaveInstanceState(Bundle outState); - KinClient getKinClient(); + KinClient getKinClient(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenterImpl.java index 2ba1d86b..9d65843e 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/RestorePresenterImpl.java @@ -3,6 +3,7 @@ import android.content.Intent; import android.os.Bundle; + import kin.backupandrestore.AccountExtractor; import kin.backupandrestore.base.BasePresenterImpl; import kin.backupandrestore.events.CallbackManager; @@ -12,156 +13,160 @@ public class RestorePresenterImpl extends BasePresenterImpl implements RestorePresenter { - static final int STEP_UPLOAD = 0; - static final int STEP_ENTER_PASSWORD = 1; - static final int STEP_RESTORE_COMPLETED = 2; - static final int STEP_FINISH = 3; - - static final String KEY_RESTORE_STEP = "kinrecovery_restore_step"; - public static final String KEY_ACCOUNT_KEY = "kinrecovery_restore_account_key"; - public static final String KEY_PUBLIC_ADDRESS = "kinrecovery_restore_public_address"; - - private int currentStep; - private String accountKey; - private KinClient kinClient; - private KinAccount kinAccount; - - private final CallbackManager callbackManager; - - public RestorePresenterImpl(CallbackManager callbackManager, KinClient kinClient, Bundle saveInstanceState) { - this.callbackManager = callbackManager; - this.kinClient = kinClient; - this.kinAccount = getKinAccount(saveInstanceState); - this.currentStep = getStep(saveInstanceState); - this.accountKey = getAccountKey(saveInstanceState); - this.callbackManager.setCancelledResult(); - } - - @Override - public void onAttach(RestoreView view) { - super.onAttach(view); - switchToStep(currentStep); - } - - private int getStep(Bundle saveInstanceState) { - return saveInstanceState != null ? saveInstanceState.getInt(KEY_RESTORE_STEP, STEP_UPLOAD) : STEP_UPLOAD; - } - - private String getAccountKey(Bundle saveInstanceState) { - return saveInstanceState != null ? saveInstanceState.getString(KEY_ACCOUNT_KEY) : null; - } - - private KinAccount getKinAccount(Bundle saveInstanceState) { - return saveInstanceState != null ? AccountExtractor - .getKinAccount(kinClient, saveInstanceState.getString(KEY_PUBLIC_ADDRESS)) : null; - } - - @Override - public void onBackClicked() { - previousStep(); - } - - private void switchToStep(int step) { - RestoreView view = getView(); - currentStep = step; - switch (step) { - case STEP_UPLOAD: - if (view != null) { - view.navigateToUpload(); - } - break; - case STEP_ENTER_PASSWORD: - if (view != null) { - if (accountKey != null) { - view.navigateToEnterPassword(accountKey); - } else { - view.showError(); - } - } - break; - case STEP_RESTORE_COMPLETED: - if (view != null) { - view.closeKeyboard(); - if (kinAccount != null) { - view.navigateToRestoreCompleted(); - } else { - view.showError(); - } - } - break; - case STEP_FINISH: - if (kinAccount != null) { - callbackManager.sendRestoreSuccessResult(kinAccount.getPublicAddress()); - } else { - if (view != null) { - view.showError(); - } - } - if (view != null) { - view.close(); - } - break; - } - } - - @Override - public void navigateToEnterPasswordPage(final String accountKey) { - this.accountKey = accountKey; - switchToStep(STEP_ENTER_PASSWORD); - } - - @Override - public void navigateToRestoreCompletedPage(final KinAccount kinAccount) { - this.kinAccount = kinAccount; - switchToStep(STEP_RESTORE_COMPLETED); - } - - @Override - public void closeFlow() { - switchToStep(STEP_FINISH); - } - - - @Override - public void previousStep() { - RestoreView view = getView(); - if (view != null) { - switch (currentStep) { - case STEP_UPLOAD: - view.close(); - break; - case STEP_ENTER_PASSWORD: - view.navigateBack(); - view.closeKeyboard(); - break; - case STEP_RESTORE_COMPLETED: - view.navigateBack(); - break; - case STEP_FINISH: - view.navigateBack(); - break; - } - } - currentStep--; - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - callbackManager.onActivityResult(requestCode, resultCode, data); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - outState.putInt(KEY_RESTORE_STEP, currentStep); - outState.putString(KEY_ACCOUNT_KEY, accountKey); - if (kinAccount != null) { - outState.putString(KEY_PUBLIC_ADDRESS, kinAccount.getPublicAddress()); - } - } - - @Override - public KinClient getKinClient() { - return kinClient; - } + static final int STEP_UPLOAD = 0; + static final int STEP_ENTER_PASSWORD = 1; + static final int STEP_RESTORE_COMPLETED = 2; + static final int STEP_FINISH = 3; + + static final String KEY_RESTORE_STEP = "kinrecovery_restore_step"; + public static final String KEY_ACCOUNT_KEY = "kinrecovery_restore_account_key"; + public static final String KEY_PUBLIC_ADDRESS = "kinrecovery_restore_public_address"; + + private int currentStep; + private String accountKey; + private KinClient kinClient; + private KinAccount kinAccount; + + private final CallbackManager callbackManager; + + public RestorePresenterImpl(CallbackManager callbackManager, KinClient kinClient, Bundle saveInstanceState) { + this.callbackManager = callbackManager; + this.kinClient = kinClient; + this.kinAccount = getKinAccount(saveInstanceState); + this.currentStep = getStep(saveInstanceState); + this.accountKey = getAccountKey(saveInstanceState); + this.callbackManager.setCancelledResult(); + } + + @Override + public void onAttach(RestoreView view) { + super.onAttach(view); + switchToStep(currentStep); + } + + private int getStep(Bundle saveInstanceState) { + return saveInstanceState != null ? saveInstanceState.getInt(KEY_RESTORE_STEP, STEP_UPLOAD) : STEP_UPLOAD; + } + + private String getAccountKey(Bundle saveInstanceState) { + return saveInstanceState != null ? saveInstanceState.getString(KEY_ACCOUNT_KEY) : null; + } + + private KinAccount getKinAccount(Bundle saveInstanceState) { + return saveInstanceState != null ? AccountExtractor +<<<<<<< HEAD + .getKinAccount(kinClient, saveInstanceState.getString(KEY_PUBLIC_ADDRESS)) : null; +======= + .getKinAccount(kinClient, saveInstanceState.getString(KEY_PUBLIC_ADDRESS)) : null; +>>>>>>> master + } + + @Override + public void onBackClicked() { + previousStep(); + } + + private void switchToStep(int step) { + RestoreView view = getView(); + currentStep = step; + switch (step) { + case STEP_UPLOAD: + if (view != null) { + view.navigateToUpload(); + } + break; + case STEP_ENTER_PASSWORD: + if (view != null) { + if (accountKey != null) { + view.navigateToEnterPassword(accountKey); + } else { + view.showError(); + } + } + break; + case STEP_RESTORE_COMPLETED: + if (view != null) { + view.closeKeyboard(); + if (kinAccount != null) { + view.navigateToRestoreCompleted(); + } else { + view.showError(); + } + } + break; + case STEP_FINISH: + if (kinAccount != null) { + callbackManager.sendRestoreSuccessResult(kinAccount.getPublicAddress()); + } else { + if (view != null) { + view.showError(); + } + } + if (view != null) { + view.close(); + } + break; + } + } + + @Override + public void navigateToEnterPasswordPage(final String accountKey) { + this.accountKey = accountKey; + switchToStep(STEP_ENTER_PASSWORD); + } + + @Override + public void navigateToRestoreCompletedPage(final KinAccount kinAccount) { + this.kinAccount = kinAccount; + switchToStep(STEP_RESTORE_COMPLETED); + } + + @Override + public void closeFlow() { + switchToStep(STEP_FINISH); + } + + + @Override + public void previousStep() { + RestoreView view = getView(); + if (view != null) { + switch (currentStep) { + case STEP_UPLOAD: + view.close(); + break; + case STEP_ENTER_PASSWORD: + view.navigateBack(); + view.closeKeyboard(); + break; + case STEP_RESTORE_COMPLETED: + view.navigateBack(); + break; + case STEP_FINISH: + view.navigateBack(); + break; + } + } + currentStep--; + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + callbackManager.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt(KEY_RESTORE_STEP, currentStep); + outState.putString(KEY_ACCOUNT_KEY, accountKey); + if (kinAccount != null) { + outState.putString(KEY_PUBLIC_ADDRESS, kinAccount.getPublicAddress()); + } + } + + @Override + public KinClient getKinClient() { + return kinClient; + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenter.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenter.java index 0a7cae76..a9a01e19 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenter.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenter.java @@ -2,15 +2,16 @@ import android.content.Intent; + import kin.backupandrestore.restore.view.UploadQRView; public interface UploadQRPresenter extends BaseChildPresenter { - void uploadClicked(); + void uploadClicked(); - void onActivityResult(int requestCode, int resultCode, Intent data); + void onActivityResult(int requestCode, int resultCode, Intent data); - void onOkPressed(String chooserTitle); + void onOkPressed(String chooserTitle); - void onCancelPressed(); + void onCancelPressed(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenterImpl.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenterImpl.java index 49cfa4ad..96655610 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenterImpl.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/presenter/UploadQRPresenterImpl.java @@ -1,14 +1,9 @@ package kin.backupandrestore.restore.presenter; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_ARE_YOUR_SURE_OK_TAPPED; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_BACK_TAPPED; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED; -import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED; - import android.content.Intent; import android.net.Uri; import android.support.annotation.NonNull; + import kin.backupandrestore.events.CallbackManager; import kin.backupandrestore.qr.QRBarcodeGenerator; import kin.backupandrestore.qr.QRBarcodeGenerator.QRBarcodeGeneratorException; @@ -17,71 +12,81 @@ import kin.backupandrestore.restore.view.UploadQRView; import kin.backupandrestore.utils.Logger; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_ARE_YOUR_SURE_OK_TAPPED; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_BACK_TAPPED; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED; +import static kin.backupandrestore.events.RestoreEventCode.RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED; + public class UploadQRPresenterImpl extends BaseChildPresenterImpl implements UploadQRPresenter { - private final FileSharingHelper fileRequester; - private final QRBarcodeGenerator qrBarcodeGenerator; - private final CallbackManager callbackManager; + private final FileSharingHelper fileRequester; + private final QRBarcodeGenerator qrBarcodeGenerator; + private final CallbackManager callbackManager; - public UploadQRPresenterImpl(@NonNull final CallbackManager callbackManager, FileSharingHelper fileRequester, - QRBarcodeGenerator qrBarcodeGenerator) { - this.callbackManager = callbackManager; - this.fileRequester = fileRequester; - this.qrBarcodeGenerator = qrBarcodeGenerator; - this.callbackManager.sendRestoreEvent(RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED); - } + public UploadQRPresenterImpl(@NonNull final CallbackManager callbackManager, FileSharingHelper fileRequester, +<<<<<<< HEAD + QRBarcodeGenerator qrBarcodeGenerator) { +======= + QRBarcodeGenerator qrBarcodeGenerator) { +>>>>>>> master + this.callbackManager = callbackManager; + this.fileRequester = fileRequester; + this.qrBarcodeGenerator = qrBarcodeGenerator; + this.callbackManager.sendRestoreEvent(RESTORE_UPLOAD_QR_CODE_PAGE_VIEWED); + } - @Override - public void uploadClicked() { - UploadQRView view = getView(); - if (view != null) { - view.showConsentDialog(); - } - callbackManager.sendRestoreEvent(RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED); - } + @Override + public void uploadClicked() { + UploadQRView view = getView(); + if (view != null) { + view.showConsentDialog(); + } + callbackManager.sendRestoreEvent(RESTORE_UPLOAD_QR_CODE_BUTTON_TAPPED); + } - @Override - public void onOkPressed(String chooserTitle) { - callbackManager.sendRestoreEvent(RESTORE_ARE_YOUR_SURE_OK_TAPPED); - fileRequester.requestImageFile(chooserTitle); - } + @Override + public void onOkPressed(String chooserTitle) { + callbackManager.sendRestoreEvent(RESTORE_ARE_YOUR_SURE_OK_TAPPED); + fileRequester.requestImageFile(chooserTitle); + } - @Override - public void onCancelPressed() { - callbackManager.sendRestoreEvent(RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED); - } + @Override + public void onCancelPressed() { + callbackManager.sendRestoreEvent(RESTORE_ARE_YOUR_SURE_CANCEL_TAPPED); + } - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - RequestFileResult requestFileResult = fileRequester.extractUriFromActivityResult(requestCode, resultCode, data); - switch (requestFileResult.getResult()) { - case FileSharingHelper.REQUEST_RESULT_CANCELED: - break; - case FileSharingHelper.REQUEST_RESULT_FAILED: - view.showErrorLoadingFileDialog(); - break; - case FileSharingHelper.REQUEST_RESULT_OK: - loadEncryptedKeyStore(requestFileResult.getFileUri()); - break; - } - } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + RequestFileResult requestFileResult = fileRequester.extractUriFromActivityResult(requestCode, resultCode, data); + switch (requestFileResult.getResult()) { + case FileSharingHelper.REQUEST_RESULT_CANCELED: + break; + case FileSharingHelper.REQUEST_RESULT_FAILED: + view.showErrorLoadingFileDialog(); + break; + case FileSharingHelper.REQUEST_RESULT_OK: + loadEncryptedKeyStore(requestFileResult.getFileUri()); + break; + } + } - private void loadEncryptedKeyStore(Uri fileUri) { - try { - String encryptedKeyStore = qrBarcodeGenerator.decodeQR(fileUri); - getParentPresenter().navigateToEnterPasswordPage(encryptedKeyStore); - } catch (QRFileHandlingException e) { - Logger.e("loadEncryptedKeyStore - loading file failed.", e); - view.showErrorLoadingFileDialog(); - } catch (QRBarcodeGeneratorException e) { - Logger.e("loadEncryptedKeyStore - decoding QR failed.", e); - view.showErrorDecodingQRDialog(); - } - } + private void loadEncryptedKeyStore(Uri fileUri) { + try { + String encryptedKeyStore = qrBarcodeGenerator.decodeQR(fileUri); + getParentPresenter().navigateToEnterPasswordPage(encryptedKeyStore); + } catch (QRFileHandlingException e) { + Logger.e("loadEncryptedKeyStore - loading file failed.", e); + view.showErrorLoadingFileDialog(); + } catch (QRBarcodeGeneratorException e) { + Logger.e("loadEncryptedKeyStore - decoding QR failed.", e); + view.showErrorDecodingQRDialog(); + } + } - @Override - public void onBackClicked() { - callbackManager.sendRestoreEvent(RESTORE_UPLOAD_QR_CODE_BACK_TAPPED); - getParentPresenter().previousStep(); - } + @Override + public void onBackClicked() { + callbackManager.sendRestoreEvent(RESTORE_UPLOAD_QR_CODE_BACK_TAPPED); + getParentPresenter().previousStep(); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreActivity.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreActivity.java index 971efa65..bc50a423 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreActivity.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreActivity.java @@ -8,6 +8,7 @@ import android.support.v4.app.FragmentManager.BackStackEntry; import android.support.v4.app.FragmentTransaction; import android.widget.Toast; + import kin.backupandrestore.BackupAndRestoreManager; import kin.backupandrestore.R; import kin.backupandrestore.base.BaseToolbarActivity; @@ -21,159 +22,195 @@ public class RestoreActivity extends BaseToolbarActivity implements RestoreView { - private RestorePresenter presenter; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - KinClient kinClient = getKinClientFromIntent(); - presenter = new RestorePresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(this))), kinClient, - savedInstanceState); - presenter.onAttach(this); - } - - @NonNull - private KinClient getKinClientFromIntent() { - Intent intent = getIntent(); - String networkUrl = intent.getStringExtra(BackupAndRestoreManager.NETWORK_URL_EXTRA); - String networkPassphrase = intent.getStringExtra(BackupAndRestoreManager.NETWORK_PASSPHRASE_EXTRA); - String appId = intent.getStringExtra(BackupAndRestoreManager.APP_ID_EXTRA); - String storeKey = intent.getStringExtra(BackupAndRestoreManager.STORE_KEY_EXTRA); - return new KinClient(getApplicationContext(), new Environment(networkUrl, - networkPassphrase), appId, storeKey); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - presenter.onSaveInstanceState(outState); - super.onSaveInstanceState(outState); - } - - @Override - protected void onStop() { - super.onStop(); - closeKeyboard(); - } - - @Override - protected int getContentLayout() { - return R.layout.backup_and_restore_frgment_activity; - } - - @Override - public void navigateToUpload() { - final String fragmentName = UploadQRFragment.class.getSimpleName(); - UploadQRFragment fragment = (UploadQRFragment) getSupportFragmentManager() - .findFragmentByTag(fragmentName); - - if (fragment == null) { - fragment = UploadQRFragment.newInstance(); - replaceFragment(fragment, fragmentName, fragmentName, false); - } else { - // We should not add to back stack because it's already in stack. - replaceFragment(fragment, null, fragmentName, false); - } - } - - @Override - public void navigateToEnterPassword(String keystoreData) { - final String fragmentName = RestoreEnterPasswordFragment.class.getSimpleName(); - RestoreEnterPasswordFragment fragment = getSavedRestoreEnterPasswordFragment(); - - if (fragment == null) { - fragment = RestoreEnterPasswordFragment.newInstance(keystoreData, this); - replaceFragment(fragment, fragmentName, fragmentName, true); - } else { - fragment.setKeyboardHandler(this); - // We should not add to back stack because it's already in stack. - replaceFragment(fragment, null, fragmentName, true); - } - } - - @Override - public void navigateToRestoreCompleted() { - final String fragmentName = RestoreCompletedFragment.class.getSimpleName(); - RestoreCompletedFragment fragment = (RestoreCompletedFragment) getSupportFragmentManager() - .findFragmentByTag(fragmentName); - - if (fragment == null) { - fragment = RestoreCompletedFragment.newInstance(); - replaceFragment(fragment, fragmentName, fragmentName, true); - } else { - // We should not add to back stack because it's already in stack. - replaceFragment(fragment, null, fragmentName, true); - } - } - - private void replaceFragment(Fragment fragment, String backStackName, String tag, boolean addAnimation) { - FragmentTransaction transaction = getSupportFragmentManager() - .beginTransaction(); - - if (backStackName != null) { - transaction.addToBackStack(backStackName); - } - - if (addAnimation) { - transaction.setCustomAnimations( - 0, - 0, - R.anim.backup_and_restore_slide_in_left, - R.anim.backup_and_restore_slide_out_right); - } - - transaction.replace(R.id.fragment_frame, fragment, tag).commit(); - } - - @Override - public void navigateBack() { - int count = getSupportFragmentManager().getBackStackEntryCount(); - if (count >= 1) { - BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(count - 1); - if (entry.getName().equals(RestoreEnterPasswordFragment.class.getSimpleName())) { - // After pressing back from RestoreCompletedPage, should put the attrs again. - // This is the only fragment that should set arguments again on back. - RestoreEnterPasswordFragment enterPasswordFragment = getSavedRestoreEnterPasswordFragment(); - if (enterPasswordFragment != null) { - enterPasswordFragment.setKeyboardHandler(this); - } - } else if (entry.getName().equals(RestoreCompletedFragment.class.getSimpleName())) { - presenter.closeFlow(); - return; - } - } - super.onBackPressed(); - } - - private RestoreEnterPasswordFragment getSavedRestoreEnterPasswordFragment() { - return (RestoreEnterPasswordFragment) getSupportFragmentManager() - .findFragmentByTag(RestoreEnterPasswordFragment.class.getSimpleName()); - } - - @Override - public void close() { - closeKeyboard(); // Verify the keyboard is hidden - finish(); - overridePendingTransition(0, R.anim.backup_and_restore_slide_out_right); - } - - @Override - public void showError() { - Toast.makeText(this, R.string.backup_and_restore_something_went_wrong_title, Toast.LENGTH_SHORT).show(); - } - - public RestorePresenter getPresenter() { - return presenter; - } - - @Override - public void onBackPressed() { - presenter.previousStep(); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - presenter.onActivityResult(requestCode, resultCode, data); - } -} \ No newline at end of file + private RestorePresenter presenter; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + KinClient kinClient = getKinClientFromIntent(); + presenter = new RestorePresenterImpl( +<<<<<<< HEAD + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(this))), kinClient, + savedInstanceState); +======= + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(this))), kinClient, + savedInstanceState); +>>>>>>> master + presenter.onAttach(this); + } + + @NonNull + private KinClient getKinClientFromIntent() { + Intent intent = getIntent(); + String networkUrl = intent.getStringExtra(BackupAndRestoreManager.NETWORK_URL_EXTRA); + String networkPassphrase = intent.getStringExtra(BackupAndRestoreManager.NETWORK_PASSPHRASE_EXTRA); + String appId = intent.getStringExtra(BackupAndRestoreManager.APP_ID_EXTRA); + String storeKey = intent.getStringExtra(BackupAndRestoreManager.STORE_KEY_EXTRA); + return new KinClient(getApplicationContext(), new Environment(networkUrl, +<<<<<<< HEAD + networkPassphrase), appId, storeKey); +======= + networkPassphrase), appId, storeKey); +>>>>>>> master + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + presenter.onSaveInstanceState(outState); + super.onSaveInstanceState(outState); + } + + @Override + protected void onStop() { + super.onStop(); + closeKeyboard(); + } + + @Override + protected int getContentLayout() { + return R.layout.backup_and_restore_frgment_activity; + } + + @Override + public void navigateToUpload() { + final String fragmentName = UploadQRFragment.class.getSimpleName(); + UploadQRFragment fragment = (UploadQRFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(fragmentName); +======= + .findFragmentByTag(fragmentName); +>>>>>>> master + + if (fragment == null) { + fragment = UploadQRFragment.newInstance(); + replaceFragment(fragment, fragmentName, fragmentName, false); + } else { + // We should not add to back stack because it's already in stack. + replaceFragment(fragment, null, fragmentName, false); + } + } + + @Override + public void navigateToEnterPassword(String keystoreData) { + final String fragmentName = RestoreEnterPasswordFragment.class.getSimpleName(); + RestoreEnterPasswordFragment fragment = getSavedRestoreEnterPasswordFragment(); + + if (fragment == null) { + fragment = RestoreEnterPasswordFragment.newInstance(keystoreData, this); + replaceFragment(fragment, fragmentName, fragmentName, true); + } else { + fragment.setKeyboardHandler(this); + // We should not add to back stack because it's already in stack. + replaceFragment(fragment, null, fragmentName, true); + } + } + + @Override + public void navigateToRestoreCompleted() { + final String fragmentName = RestoreCompletedFragment.class.getSimpleName(); + RestoreCompletedFragment fragment = (RestoreCompletedFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(fragmentName); +======= + .findFragmentByTag(fragmentName); +>>>>>>> master + + if (fragment == null) { + fragment = RestoreCompletedFragment.newInstance(); + replaceFragment(fragment, fragmentName, fragmentName, true); + } else { + // We should not add to back stack because it's already in stack. + replaceFragment(fragment, null, fragmentName, true); + } + } + + private void replaceFragment(Fragment fragment, String backStackName, String tag, boolean addAnimation) { + FragmentTransaction transaction = getSupportFragmentManager() +<<<<<<< HEAD + .beginTransaction(); +======= + .beginTransaction(); +>>>>>>> master + + if (backStackName != null) { + transaction.addToBackStack(backStackName); + } + + if (addAnimation) { + transaction.setCustomAnimations( +<<<<<<< HEAD + 0, + 0, + R.anim.backup_and_restore_slide_in_left, + R.anim.backup_and_restore_slide_out_right); +======= + 0, + 0, + R.anim.backup_and_restore_slide_in_left, + R.anim.backup_and_restore_slide_out_right); +>>>>>>> master + } + + transaction.replace(R.id.fragment_frame, fragment, tag).commit(); + } + + @Override + public void navigateBack() { + int count = getSupportFragmentManager().getBackStackEntryCount(); + if (count >= 1) { + BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(count - 1); + if (entry.getName().equals(RestoreEnterPasswordFragment.class.getSimpleName())) { + // After pressing back from RestoreCompletedPage, should put the attrs again. + // This is the only fragment that should set arguments again on back. + RestoreEnterPasswordFragment enterPasswordFragment = getSavedRestoreEnterPasswordFragment(); + if (enterPasswordFragment != null) { + enterPasswordFragment.setKeyboardHandler(this); + } + } else if (entry.getName().equals(RestoreCompletedFragment.class.getSimpleName())) { + presenter.closeFlow(); + return; + } + } + super.onBackPressed(); + } + + private RestoreEnterPasswordFragment getSavedRestoreEnterPasswordFragment() { + return (RestoreEnterPasswordFragment) getSupportFragmentManager() +<<<<<<< HEAD + .findFragmentByTag(RestoreEnterPasswordFragment.class.getSimpleName()); +======= + .findFragmentByTag(RestoreEnterPasswordFragment.class.getSimpleName()); +>>>>>>> master + } + + @Override + public void close() { + closeKeyboard(); // Verify the keyboard is hidden + finish(); + overridePendingTransition(0, R.anim.backup_and_restore_slide_out_right); + } + + @Override + public void showError() { + Toast.makeText(this, R.string.backup_and_restore_something_went_wrong_title, Toast.LENGTH_SHORT).show(); + } + + public RestorePresenter getPresenter() { + return presenter; + } + + @Override + public void onBackPressed() { + presenter.previousStep(); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + presenter.onActivityResult(requestCode, resultCode, data); + } +<<<<<<< HEAD +} +======= +} +>>>>>>> master diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreCompletedFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreCompletedFragment.java index 1bf559fd..af97fdab 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreCompletedFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreCompletedFragment.java @@ -7,6 +7,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; + import kin.backupandrestore.R; import kin.backupandrestore.base.BaseToolbarActivity; import kin.backupandrestore.restore.presenter.RestoreCompletedPresenter; @@ -15,49 +16,53 @@ public class RestoreCompletedFragment extends Fragment implements RestoreCompletedView { - private RestoreCompletedPresenter presenter; + private RestoreCompletedPresenter presenter; - public static RestoreCompletedFragment newInstance() { - return new RestoreCompletedFragment(); - } + public static RestoreCompletedFragment newInstance() { + return new RestoreCompletedFragment(); + } - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.backup_and_restore_fragment_restore_completed, container, false); + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, +<<<<<<< HEAD + @Nullable Bundle savedInstanceState) { +======= + @Nullable Bundle savedInstanceState) { +>>>>>>> master + View root = inflater.inflate(R.layout.backup_and_restore_fragment_restore_completed, container, false); - injectPresenter(); - presenter.onAttach(this, ((RestoreActivity) getActivity()).getPresenter()); + injectPresenter(); + presenter.onAttach(this, ((RestoreActivity) getActivity()).getPresenter()); - initToolbar(); - initViews(root); - return root; - } + initToolbar(); + initViews(root); + return root; + } - private void injectPresenter() { - presenter = new RestoreCompletedPresenterImpl(); - } + private void injectPresenter() { + presenter = new RestoreCompletedPresenterImpl(); + } - private void initToolbar() { - BaseToolbarActivity toolbarActivity = (BaseToolbarActivity) getActivity(); + private void initToolbar() { + BaseToolbarActivity toolbarActivity = (BaseToolbarActivity) getActivity(); toolbarActivity.hideNavigationIcon(); - toolbarActivity.setToolbarColor(android.R.color.white); - toolbarActivity.setToolbarTitle(R.string.backup_and_restore_restore_completed_title); - toolbarActivity.setNavigationClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - } - }); - } - - private void initViews(View root) { + toolbarActivity.setToolbarColor(android.R.color.white); + toolbarActivity.setToolbarTitle(R.string.backup_and_restore_restore_completed_title); + toolbarActivity.setNavigationClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + } + }); + } + + private void initViews(View root) { root.findViewById(R.id.backup_and_restore_v_btn).setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - presenter.close(); - } - }); - } + @Override + public void onClick(View v) { + presenter.close(); + } + }); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordFragment.java index b139c798..ba9a2d54 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordFragment.java @@ -13,6 +13,7 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; + import kin.backupandrestore.R; import kin.backupandrestore.backup.view.TextWatcherAdapter; import kin.backupandrestore.backup.view.TextWatcherAdapter.TextChangeListener; @@ -40,7 +41,7 @@ public class RestoreEnterPasswordFragment extends Fragment implements RestoreEnt private TextWatcherAdapter textWatcherAdapter; public static RestoreEnterPasswordFragment newInstance(String keystoreData, - @NonNull KeyboardHandler keyboardHandler) { + @NonNull KeyboardHandler keyboardHandler) { RestoreEnterPasswordFragment fragment = new RestoreEnterPasswordFragment(); fragment.setKeyboardHandler(keyboardHandler); if (keystoreData != null) { @@ -58,7 +59,7 @@ public void setKeyboardHandler(@NonNull KeyboardHandler keyboardHandler) { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { + @Nullable Bundle savedInstanceState) { View root = inflater.inflate(R.layout.backup_and_restore_fragment_password_restore, container, false); initToolbar(); initViews(root); @@ -90,16 +91,16 @@ private String extractKeyStoreData(@Nullable Bundle savedInstanceState) { private void injectPresenter(String keystoreData) { presenter = new RestoreEnterPasswordPresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), keystoreData); + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), keystoreData); presenter.onAttach(this, ((RestoreActivity) getActivity()).getPresenter()); } private void initToolbar() { BaseToolbarActivity toolbarActivity = (BaseToolbarActivity) getActivity(); toolbarActivity - .setNavigationIcon(R.drawable.back); + .setNavigationIcon(R.drawable.back); toolbarActivity.setToolbarColor(android.R.color.white); - toolbarActivity.setToolbarTitle(R.string.backup_and_restore_upload_qr_title); + toolbarActivity.setToolbarTitle(R.string.backup_and_restore_upload_qr_toolbar_title); toolbarActivity.setNavigationClickListener(new OnClickListener() { @Override public void onClick(View v) { diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordView.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordView.java index a6361580..8ee4f4aa 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordView.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreEnterPasswordView.java @@ -5,11 +5,11 @@ public interface RestoreEnterPasswordView extends BaseView { - void enableDoneButton(); + void enableDoneButton(); - void disableDoneButton(); + void disableDoneButton(); - void decodeError(); + void decodeError(); - void invalidQrError(); + void invalidQrError(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreView.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreView.java index a8f5921f..e8b631dd 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreView.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/RestoreView.java @@ -5,17 +5,17 @@ public interface RestoreView extends BaseView { - void navigateToUpload(); + void navigateToUpload(); - void navigateToEnterPassword(String keystoreData); + void navigateToEnterPassword(String keystoreData); - void navigateToRestoreCompleted(); + void navigateToRestoreCompleted(); - void navigateBack(); + void navigateBack(); - void close(); + void close(); - void closeKeyboard(); + void closeKeyboard(); - void showError(); + void showError(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRFragment.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRFragment.java index 91b53492..38230ae7 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRFragment.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRFragment.java @@ -1,7 +1,5 @@ package kin.backupandrestore.restore.view; -import static kin.backupandrestore.base.BaseToolbarActivity.EMPTY_TITLE; - import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; @@ -16,6 +14,7 @@ import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; + import kin.backupandrestore.R; import kin.backupandrestore.base.BaseToolbarActivity; import kin.backupandrestore.events.BroadcastManagerImpl; @@ -28,117 +27,152 @@ import kin.backupandrestore.restore.presenter.UploadQRPresenterImpl; import kin.backupandrestore.utils.ViewUtils; +import static kin.backupandrestore.base.BaseToolbarActivity.EMPTY_TITLE; + public class UploadQRFragment extends Fragment implements UploadQRView { - private UploadQRPresenter presenter; - - public static UploadQRFragment newInstance() { - return new UploadQRFragment(); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View root = inflater.inflate(R.layout.backup_and_restore_fragment_upload_qr, container, false); - - injectPresenter(); - presenter.onAttach(this, ((RestoreActivity) getActivity()).getPresenter()); - - initToolbar(); - initViews(root); - return root; - } - - private void injectPresenter() { - presenter = new UploadQRPresenterImpl( - new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), - new FileSharingHelper(this), - new QRBarcodeGeneratorImpl(new QRFileUriHandlerImpl(getContext()))); - } - - private void initViews(View root) { - Group btnUploadGroup = root.findViewById(R.id.btn_group); - ViewUtils.registerToGroupOnClickListener(btnUploadGroup, root, new View.OnClickListener() { - @Override - public void onClick(View view) { - presenter.uploadClicked(); - } - }); - } - - private void initToolbar() { - BaseToolbarActivity toolbarActivity = (BaseToolbarActivity) getActivity(); - toolbarActivity.setNavigationIcon(R.drawable.back); - toolbarActivity.setToolbarColor(android.R.color.white); - toolbarActivity.setToolbarTitle(EMPTY_TITLE); - toolbarActivity.setNavigationClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - presenter.onBackClicked(); - } - }); - } - - @Override - public void showConsentDialog() { - int leftRightPadding = (int) getResources().getDimension(R.dimen.backup_and_restore_dialog_left_right_padding); - AlertDialog alertDialog = new Builder(getActivity(), R.style.BackupAndRestoreAlertDialogTheme) - .setCustomTitle(getDialogTitle(leftRightPadding)) - .setMessage(R.string.backup_and_restore_consent_message) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String chooserTitle = getString(R.string.backup_and_restore_choose_qr_image); - presenter.onOkPressed(chooserTitle); - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - presenter.onCancelPressed(); - } - }) - .create(); - alertDialog.show(); - setDialogMessage(leftRightPadding, alertDialog); - } - - private TextView getDialogTitle(int leftRightPadding) { - TextView titleTxtView = new TextView(getActivity()); - titleTxtView.setTextAppearance(getActivity(), R.style.BackupAndRestoreAlertDialogTitleText); - titleTxtView.setText(R.string.backup_and_restore_restore_consent_title); - int titleTopPadding = (int) getResources().getDimension(R.dimen.backup_and_restore_dialog_title_top_padding); - titleTxtView.setPadding(leftRightPadding, titleTopPadding, leftRightPadding, 0); - return titleTxtView; - } - - private void setDialogMessage(int leftRightPadding, AlertDialog alertDialog) { - TextView messageTextView = alertDialog.findViewById(android.R.id.message); - if (messageTextView != null) { - messageTextView.setTextAppearance(getActivity(), R.style.BackupAndRestoreAlertDialogMessageText); - messageTextView.setText(R.string.backup_and_restore_consent_message); - int messageTopPadding = (int) getResources() - .getDimension(R.dimen.backup_and_restore_dialog_message_top_padding); - messageTextView.setPadding(leftRightPadding, messageTopPadding, leftRightPadding, 0); - } - } - - @Override - public void showErrorDecodingQRDialog() { - Toast.makeText(getContext(), R.string.backup_and_restore_error_decoding_QR, Toast.LENGTH_SHORT).show(); - } - - @Override - public void showErrorLoadingFileDialog() { - Toast.makeText(getContext(), R.string.backup_and_restore_loading_file_error, Toast.LENGTH_SHORT).show(); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - presenter.onActivityResult(requestCode, resultCode, data); - } + private UploadQRPresenter presenter; + + public static UploadQRFragment newInstance() { + return new UploadQRFragment(); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, +<<<<<<< HEAD + @Nullable Bundle savedInstanceState) { +======= + @Nullable Bundle savedInstanceState) { +>>>>>>> master + View root = inflater.inflate(R.layout.backup_and_restore_fragment_upload_qr, container, false); + + injectPresenter(); + presenter.onAttach(this, ((RestoreActivity) getActivity()).getPresenter()); + + initToolbar(); + initViews(root); + return root; + } + + private void injectPresenter() { + presenter = new UploadQRPresenterImpl( +<<<<<<< HEAD + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), + new FileSharingHelper(this), + new QRBarcodeGeneratorImpl(new QRFileUriHandlerImpl(getContext()))); +======= + new CallbackManager(new EventDispatcherImpl(new BroadcastManagerImpl(getActivity()))), + new FileSharingHelper(this), + new QRBarcodeGeneratorImpl(new QRFileUriHandlerImpl(getContext()))); +>>>>>>> master + } + + private void initViews(View root) { + Group btnUploadGroup = root.findViewById(R.id.btn_group); + ViewUtils.registerToGroupOnClickListener(btnUploadGroup, root, new View.OnClickListener() { + @Override + public void onClick(View view) { + presenter.uploadClicked(); + } + }); + } + + private void initToolbar() { + BaseToolbarActivity toolbarActivity = (BaseToolbarActivity) getActivity(); + toolbarActivity.setNavigationIcon(R.drawable.back); + toolbarActivity.setToolbarColor(android.R.color.white); + toolbarActivity.setToolbarTitle(EMPTY_TITLE); + toolbarActivity.setNavigationClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + presenter.onBackClicked(); + } + }); + } + + @Override + public void showConsentDialog() { + int leftRightPadding = (int) getResources().getDimension(R.dimen.backup_and_restore_dialog_left_right_padding); + AlertDialog alertDialog = new Builder(getActivity(), R.style.BackupAndRestoreAlertDialogTheme) +<<<<<<< HEAD + .setCustomTitle(getDialogTitle(leftRightPadding)) + .setMessage(R.string.backup_and_restore_consent_message) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String chooserTitle = getString(R.string.backup_and_restore_choose_qr_image); + presenter.onOkPressed(chooserTitle); + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + presenter.onCancelPressed(); + } + }) + .create(); +======= + .setCustomTitle(getDialogTitle(leftRightPadding)) + .setMessage(R.string.backup_and_restore_consent_message) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String chooserTitle = getString(R.string.backup_and_restore_choose_qr_image); + presenter.onOkPressed(chooserTitle); + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + presenter.onCancelPressed(); + } + }) + .create(); +>>>>>>> master + alertDialog.show(); + setDialogMessage(leftRightPadding, alertDialog); + } + + private TextView getDialogTitle(int leftRightPadding) { + TextView titleTxtView = new TextView(getActivity()); + titleTxtView.setTextAppearance(getActivity(), R.style.BackupAndRestoreAlertDialogTitleText); + titleTxtView.setText(R.string.backup_and_restore_restore_consent_title); + int titleTopPadding = (int) getResources().getDimension(R.dimen.backup_and_restore_dialog_title_top_padding); + titleTxtView.setPadding(leftRightPadding, titleTopPadding, leftRightPadding, 0); + return titleTxtView; + } + + private void setDialogMessage(int leftRightPadding, AlertDialog alertDialog) { + TextView messageTextView = alertDialog.findViewById(android.R.id.message); + if (messageTextView != null) { + messageTextView.setTextAppearance(getActivity(), R.style.BackupAndRestoreAlertDialogMessageText); + messageTextView.setText(R.string.backup_and_restore_consent_message); + int messageTopPadding = (int) getResources() +<<<<<<< HEAD + .getDimension(R.dimen.backup_and_restore_dialog_message_top_padding); +======= + .getDimension(R.dimen.backup_and_restore_dialog_message_top_padding); +>>>>>>> master + messageTextView.setPadding(leftRightPadding, messageTopPadding, leftRightPadding, 0); + } + } + + @Override + public void showErrorDecodingQRDialog() { + Toast.makeText(getContext(), R.string.backup_and_restore_error_decoding_QR, Toast.LENGTH_SHORT).show(); + } + + @Override + public void showErrorLoadingFileDialog() { + Toast.makeText(getContext(), R.string.backup_and_restore_loading_file_error, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + presenter.onActivityResult(requestCode, resultCode, data); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRView.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRView.java index e9579344..2e1f0e44 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRView.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/restore/view/UploadQRView.java @@ -5,9 +5,9 @@ public interface UploadQRView extends BaseView { - void showConsentDialog(); + void showConsentDialog(); - void showErrorLoadingFileDialog(); + void showErrorLoadingFileDialog(); - void showErrorDecodingQRDialog(); + void showErrorDecodingQRDialog(); } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/Logger.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/Logger.java index 5f1a008c..a18ab1aa 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/Logger.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/Logger.java @@ -2,25 +2,30 @@ import android.util.Log; + import kin.backupandrestore.BuildConfig; public class Logger { - private static final String TAG = "kin.backup"; - private static boolean shouldLog = BuildConfig.DEBUG || Log.isLoggable(TAG, Log.DEBUG); + private static final String TAG = "kin.backup"; + private static boolean shouldLog = BuildConfig.DEBUG || Log.isLoggable(TAG, Log.DEBUG); - private Logger() { - } + private Logger() { + } - public static void d(String msg) { - if (shouldLog) { - Log.d(TAG, msg); - } - } + public static void d(String msg) { + if (shouldLog) { + Log.d(TAG, msg); + } + } - public static void e(String msg, Throwable throwable) { - if (shouldLog) { - Log.e(TAG, msg, throwable); - } - } -} \ No newline at end of file + public static void e(String msg, Throwable throwable) { + if (shouldLog) { + Log.e(TAG, msg, throwable); + } + } +<<<<<<< HEAD +} +======= +} +>>>>>>> master diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/ViewUtils.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/ViewUtils.java index 64385276..a916f9fd 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/ViewUtils.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/utils/ViewUtils.java @@ -1,22 +1,33 @@ package kin.backupandrestore.utils; +import android.content.Context; +import android.content.pm.ApplicationInfo; import android.support.constraint.Group; import android.view.View; public class ViewUtils { - public static void registerToGroupOnClickListener(Group group, View root, View.OnClickListener listener) { - int refIds[] = group.getReferencedIds(); - for (int id : refIds) { - root.findViewById(id).setOnClickListener(listener); - } - } + public static void registerToGroupOnClickListener(Group group, View root, View.OnClickListener listener) { + int refIds[] = group.getReferencedIds(); + for (int id : refIds) { + root.findViewById(id).setOnClickListener(listener); + } + } - public static void setGroupEnable(Group group, View root, boolean enable) { - int refIds[] = group.getReferencedIds(); - for (int id : refIds) { - root.findViewById(id).setEnabled(enable); - } - } + public static void setGroupEnable(Group group, View root, boolean enable) { + int refIds[] = group.getReferencedIds(); + for (int id : refIds) { + root.findViewById(id).setEnabled(enable); + } + } +<<<<<<< HEAD +======= + + public static String getApplicationName(Context context) { + ApplicationInfo applicationInfo = context.getApplicationInfo(); + int stringId = applicationInfo.labelRes; + return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId); + } +>>>>>>> master } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/LargePasswordDotsTransformationMethod.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/LargePasswordDotsTransformationMethod.java index 16496abd..ab25a916 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/LargePasswordDotsTransformationMethod.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/LargePasswordDotsTransformationMethod.java @@ -5,46 +5,46 @@ public class LargePasswordDotsTransformationMethod extends PasswordTransformationMethod { - private static LargePasswordDotsTransformationMethod instance; + private static LargePasswordDotsTransformationMethod instance; - public static LargePasswordDotsTransformationMethod getInstance() { - if (instance == null) { - synchronized (LargePasswordDotsTransformationMethod.class) { - if (instance == null) { - instance = new LargePasswordDotsTransformationMethod(); - } - } - } - return instance; - } + public static LargePasswordDotsTransformationMethod getInstance() { + if (instance == null) { + synchronized (LargePasswordDotsTransformationMethod.class) { + if (instance == null) { + instance = new LargePasswordDotsTransformationMethod(); + } + } + } + return instance; + } - private LargePasswordDotsTransformationMethod() { + private LargePasswordDotsTransformationMethod() { - } + } - @Override - public CharSequence getTransformation(CharSequence source, View view) { - return new PasswordCharSequence(source); - } + @Override + public CharSequence getTransformation(CharSequence source, View view) { + return new PasswordCharSequence(source); + } - private class PasswordCharSequence implements CharSequence { + private class PasswordCharSequence implements CharSequence { - private CharSequence source; + private CharSequence source; - public PasswordCharSequence(CharSequence source) { - this.source = source; - } + public PasswordCharSequence(CharSequence source) { + this.source = source; + } - public char charAt(int index) { - return '●'; // large dot unicode char (https://unicode-table.com/en/2B24/) - } + public char charAt(int index) { + return '●'; // large dot unicode char (https://unicode-table.com/en/2B24/) + } - public int length() { - return source.length(); - } + public int length() { + return source.length(); + } - public CharSequence subSequence(int start, int end) { - return source.subSequence(start, end); - } - } + public CharSequence subSequence(int start, int end) { + return source.subSequence(start, end); + } + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/PasswordEditText.java b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/PasswordEditText.java index b10e23ef..f52d1c47 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/PasswordEditText.java +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/java/kin/backupandrestore/widget/PasswordEditText.java @@ -30,244 +30,275 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; + import kin.backupandrestore.R; public class PasswordEditText extends LinearLayout { - private static final float LETTER_SPACING_PASSWORD = 0.2f; - private static final float NO_LETTER_SPACING = 0f; - private static final int DRAWABLE_RIGHT = 2; - - private EditText passwordField; - private TextView errorText; - - private final int sidesPadding = getResources() - .getDimensionPixelSize(R.dimen.backup_and_restore_password_edittext_text_sidesPadding); - private final int strokeWidth = getResources() - .getDimensionPixelSize(R.dimen.backup_and_restore_edittext_stroke_width); - - private boolean isRevealIconVisible; - private boolean isRevealPressed; - private final int passInputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD; - private Typeface passwordTextTypeface; - private OnFocusChangeListener externalOnFocusChangedLister; - - public PasswordEditText(Context context) { - super(context, null); - } - - public PasswordEditText(Context context, AttributeSet attrs) { - super(context, attrs); - setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT)); - setLayoutTransition(new LayoutTransition()); - setOrientation(VERTICAL); - boolean addRevealIcon; - String hint; - TypedArray styledAttributes = context.getTheme() - .obtainStyledAttributes(attrs, R.styleable.BackupAndRestorePasswordEditText, 0, 0); - - try { - addRevealIcon = styledAttributes - .getBoolean(R.styleable.BackupAndRestorePasswordEditText_backup_and_restore_show_reveal_icon, false); - hint = styledAttributes.getString(R.styleable.BackupAndRestorePasswordEditText_backup_and_restore_hint); - - } finally { - styledAttributes.recycle(); - } - passwordField = new EditText(getContext()); - errorText = new TextView(getContext()); - - setupErrorText(); - setupPasswordField(addRevealIcon, hint); - - addView(passwordField, 0); - addView(errorText, 1); - } - - @SuppressLint("ClickableViewAccessibility") - private void setupPasswordField(boolean addRevealIcon, String hint) { - final int topBottomPadding = getResources().getDimensionPixelSize(R.dimen.backup_and_restore_margin_block); - final int textSize = getResources().getDimensionPixelSize(R.dimen.backup_and_restore_password_edit_text_size); - final int colorGray = ContextCompat.getColor(getContext(), R.color.backup_and_restore_gray); - if (!TextUtils.isEmpty(hint)) { - passwordField.setHint(hint); - } - passwordField.setMaxLines(1); - passwordField.setSingleLine(); - passwordField.setLongClickable(false); - passwordTextTypeface = ResourcesCompat.getFont(getContext(), R.font.work_sans_regular); - passwordField.setTypeface(passwordTextTypeface); - passwordField.setTextColor(colorGray); - passwordField.setHintTextColor(colorGray); - passwordField.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); - passwordField.setPadding(sidesPadding, topBottomPadding, sidesPadding, topBottomPadding); - passwordField.setHeight(getResources().getDimensionPixelSize(R.dimen.backup_and_restore_edittext_height)); - passwordField.setWidth(getResources().getDimensionPixelSize(R.dimen.backup_and_restore_edittext_height)); - passwordField.setFocusable(true); - passwordField.setOnFocusChangeListener(new OnFocusChangeListener() { - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (hasFocus) { - openKeyboard(); - } - - if (externalOnFocusChangedLister != null) { - externalOnFocusChangedLister.onFocusChange(v, hasFocus); - } - - } - }); - passwordField.setGravity(Gravity.CENTER_VERTICAL); - passwordField.setBackgroundResource(R.drawable.backup_and_restore_edittext_frame); - passwordField.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } - - @Override - public void afterTextChanged(Editable s) { - if (s.toString().length() > 0) { - if (passwordField.getInputType() == passInputType) { - setLetterSpacing(LETTER_SPACING_PASSWORD); - } else { - setLetterSpacing(NO_LETTER_SPACING); - } - } else { - setLetterSpacing(NO_LETTER_SPACING); - } - } - }); - setInputAsPasswordDots(); - if (addRevealIcon) { - setRevealIconVisibility(true); - } - - passwordField.setOnTouchListener(new OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - if (isRevealIconVisible) { - if (isInRevealIconBounds(event)) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - setInputAsVisibleChars(); - return true; - case MotionEvent.ACTION_UP: - setInputAsPasswordDots(); - return true; - default: - return false; - } - } - if (event.getAction() == MotionEvent.ACTION_MOVE && isRevealPressed) { - setInputAsPasswordDots(); - - } - return false; - } - return false; - } - }); - } - - private void openKeyboard() { - InputMethodManager inputMethodManager = (InputMethodManager) getContext() - .getSystemService(Activity.INPUT_METHOD_SERVICE); - if (inputMethodManager != null) { - inputMethodManager.showSoftInput(passwordField, InputMethodManager.SHOW_IMPLICIT); - } - } - - private void setLetterSpacing(float spacing) { - if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { - passwordField.setLetterSpacing(spacing); - } - } - - private void setupErrorText() { - final int textSize = getResources() - .getDimensionPixelSize(R.dimen.backup_and_restore_password_edittext_error_size); - final int color = ContextCompat.getColor(getContext(), R.color.backup_and_restore_red); - errorText.setVisibility(GONE); - errorText.setTextColor(color); - errorText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); - errorText.setTypeface(passwordTextTypeface); - errorText.setPadding(sidesPadding, 0, 0, 0); - } - - private boolean isInRevealIconBounds(MotionEvent event) { - final int drawableWidth = passwordField.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width(); - return (event.getRawX() >= (getRight() - drawableWidth - sidesPadding)) - && (event.getRawX() <= (getRight() - sidesPadding)); - } - - private void setInputAsPasswordDots() { - passwordField.setInputType(passInputType); - passwordField.setTransformationMethod(LargePasswordDotsTransformationMethod.getInstance()); - passwordField.setTypeface(passwordTextTypeface); - passwordField.setSelection(passwordField.getText().length()); - if (errorText.getVisibility() == View.GONE) { - passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_black)); - } else { - passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_gray)); - } - isRevealPressed = false; - } - - private void setInputAsVisibleChars() { - passwordField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER); - passwordField.setTransformationMethod(null); - passwordField.setTypeface(passwordTextTypeface); - passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_black)); - isRevealPressed = true; - } - - public void setFrameBackgroundColor(@ColorRes final int colorRes) { - GradientDrawable background = (GradientDrawable) passwordField.getBackground(); - if (background != null) { - final int color = ContextCompat.getColor(getContext(), colorRes); - background.setStroke(strokeWidth, color); - - } - } - - public void setRevealIconVisibility(final boolean isVisible) { - Drawable revealDrawable = passwordField.getCompoundDrawables()[DRAWABLE_RIGHT]; - if (isVisible) { - isRevealIconVisible = true; - if (revealDrawable == null) { - revealDrawable = AppCompatResources.getDrawable(getContext(), R.drawable.show_password); - passwordField.setCompoundDrawablesWithIntrinsicBounds(null, null, revealDrawable, null); - } else { - revealDrawable.setVisible(true, true); - } - - } else { - isRevealIconVisible = false; - if (revealDrawable != null) { - revealDrawable.setVisible(false, true); - } - } - } - - public void addTextChangedListener(final TextWatcher textWatcher) { - passwordField.addTextChangedListener(textWatcher); - } - - public void setOnFocusChangeListener(OnFocusChangeListener onFocusChangeListener) { - this.externalOnFocusChangedLister = onFocusChangeListener; - } - - public String getText() { - return passwordField.getText().toString(); - } + private static final float LETTER_SPACING_PASSWORD = 0.2f; + private static final float NO_LETTER_SPACING = 0f; + private static final int DRAWABLE_RIGHT = 2; + + private EditText passwordField; + private TextView errorText; + + private final int sidesPadding = getResources() +<<<<<<< HEAD + .getDimensionPixelSize(R.dimen.backup_and_restore_password_edittext_text_sidesPadding); + private final int strokeWidth = getResources() + .getDimensionPixelSize(R.dimen.backup_and_restore_edittext_stroke_width); +======= + .getDimensionPixelSize(R.dimen.backup_and_restore_password_edittext_text_sidesPadding); + private final int strokeWidth = getResources() + .getDimensionPixelSize(R.dimen.backup_and_restore_edittext_stroke_width); +>>>>>>> master + + private boolean isRevealIconVisible; + private boolean isRevealPressed; + private final int passInputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD; + private Typeface passwordTextTypeface; + private OnFocusChangeListener externalOnFocusChangedLister; + + public PasswordEditText(Context context) { + super(context, null); + } + + public PasswordEditText(Context context, AttributeSet attrs) { + super(context, attrs); + setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, +<<<<<<< HEAD + ViewGroup.LayoutParams.WRAP_CONTENT)); +======= + ViewGroup.LayoutParams.WRAP_CONTENT)); +>>>>>>> master + setLayoutTransition(new LayoutTransition()); + setOrientation(VERTICAL); + boolean addRevealIcon; + String hint; + TypedArray styledAttributes = context.getTheme() +<<<<<<< HEAD + .obtainStyledAttributes(attrs, R.styleable.BackupAndRestorePasswordEditText, 0, 0); + + try { + addRevealIcon = styledAttributes + .getBoolean(R.styleable.BackupAndRestorePasswordEditText_backup_and_restore_show_reveal_icon, false); +======= + .obtainStyledAttributes(attrs, R.styleable.BackupAndRestorePasswordEditText, 0, 0); + + try { + addRevealIcon = styledAttributes + .getBoolean(R.styleable.BackupAndRestorePasswordEditText_backup_and_restore_show_reveal_icon, false); +>>>>>>> master + hint = styledAttributes.getString(R.styleable.BackupAndRestorePasswordEditText_backup_and_restore_hint); + + } finally { + styledAttributes.recycle(); + } + passwordField = new EditText(getContext()); + errorText = new TextView(getContext()); + + setupErrorText(); + setupPasswordField(addRevealIcon, hint); + + addView(passwordField, 0); + addView(errorText, 1); + } + + @SuppressLint("ClickableViewAccessibility") + private void setupPasswordField(boolean addRevealIcon, String hint) { + final int topBottomPadding = getResources().getDimensionPixelSize(R.dimen.backup_and_restore_margin_block); + final int textSize = getResources().getDimensionPixelSize(R.dimen.backup_and_restore_password_edit_text_size); + final int colorGray = ContextCompat.getColor(getContext(), R.color.backup_and_restore_gray); + if (!TextUtils.isEmpty(hint)) { + passwordField.setHint(hint); + } + passwordField.setMaxLines(1); + passwordField.setSingleLine(); + passwordField.setLongClickable(false); + passwordTextTypeface = ResourcesCompat.getFont(getContext(), R.font.work_sans_regular); + passwordField.setTypeface(passwordTextTypeface); + passwordField.setTextColor(colorGray); + passwordField.setHintTextColor(colorGray); + passwordField.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); + passwordField.setPadding(sidesPadding, topBottomPadding, sidesPadding, topBottomPadding); + passwordField.setHeight(getResources().getDimensionPixelSize(R.dimen.backup_and_restore_edittext_height)); + passwordField.setWidth(getResources().getDimensionPixelSize(R.dimen.backup_and_restore_edittext_height)); + passwordField.setFocusable(true); + passwordField.setOnFocusChangeListener(new OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) { + openKeyboard(); + } + + if (externalOnFocusChangedLister != null) { + externalOnFocusChangedLister.onFocusChange(v, hasFocus); + } + + } + }); + passwordField.setGravity(Gravity.CENTER_VERTICAL); + passwordField.setBackgroundResource(R.drawable.backup_and_restore_edittext_frame); + passwordField.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (s.toString().length() > 0) { + if (passwordField.getInputType() == passInputType) { + setLetterSpacing(LETTER_SPACING_PASSWORD); + } else { + setLetterSpacing(NO_LETTER_SPACING); + } + } else { + setLetterSpacing(NO_LETTER_SPACING); + } + } + }); + setInputAsPasswordDots(); + if (addRevealIcon) { + setRevealIconVisibility(true); + } + + passwordField.setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if (isRevealIconVisible) { + if (isInRevealIconBounds(event)) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + setInputAsVisibleChars(); + return true; + case MotionEvent.ACTION_UP: + setInputAsPasswordDots(); + return true; + default: + return false; + } + } + if (event.getAction() == MotionEvent.ACTION_MOVE && isRevealPressed) { + setInputAsPasswordDots(); + + } + return false; + } + return false; + } + }); + } + + private void openKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) getContext() +<<<<<<< HEAD + .getSystemService(Activity.INPUT_METHOD_SERVICE); +======= + .getSystemService(Activity.INPUT_METHOD_SERVICE); +>>>>>>> master + if (inputMethodManager != null) { + inputMethodManager.showSoftInput(passwordField, InputMethodManager.SHOW_IMPLICIT); + } + } + + private void setLetterSpacing(float spacing) { + if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { + passwordField.setLetterSpacing(spacing); + } + } + + private void setupErrorText() { + final int textSize = getResources() +<<<<<<< HEAD + .getDimensionPixelSize(R.dimen.backup_and_restore_password_edittext_error_size); +======= + .getDimensionPixelSize(R.dimen.backup_and_restore_password_edittext_error_size); +>>>>>>> master + final int color = ContextCompat.getColor(getContext(), R.color.backup_and_restore_red); + errorText.setVisibility(GONE); + errorText.setTextColor(color); + errorText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); + errorText.setTypeface(passwordTextTypeface); + errorText.setPadding(sidesPadding, 0, 0, 0); + } + + private boolean isInRevealIconBounds(MotionEvent event) { + final int drawableWidth = passwordField.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width(); + return (event.getRawX() >= (getRight() - drawableWidth - sidesPadding)) +<<<<<<< HEAD + && (event.getRawX() <= (getRight() - sidesPadding)); +======= + && (event.getRawX() <= (getRight() - sidesPadding)); +>>>>>>> master + } + + private void setInputAsPasswordDots() { + passwordField.setInputType(passInputType); + passwordField.setTransformationMethod(LargePasswordDotsTransformationMethod.getInstance()); + passwordField.setTypeface(passwordTextTypeface); + passwordField.setSelection(passwordField.getText().length()); + if (errorText.getVisibility() == View.GONE) { + passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_black)); + } else { + passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_gray)); + } + isRevealPressed = false; + } + + private void setInputAsVisibleChars() { + passwordField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER); + passwordField.setTransformationMethod(null); + passwordField.setTypeface(passwordTextTypeface); + passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_black)); + isRevealPressed = true; + } + + public void setFrameBackgroundColor(@ColorRes final int colorRes) { + GradientDrawable background = (GradientDrawable) passwordField.getBackground(); + if (background != null) { + final int color = ContextCompat.getColor(getContext(), colorRes); + background.setStroke(strokeWidth, color); + + } + } + + public void setRevealIconVisibility(final boolean isVisible) { + Drawable revealDrawable = passwordField.getCompoundDrawables()[DRAWABLE_RIGHT]; + if (isVisible) { + isRevealIconVisible = true; + if (revealDrawable == null) { + revealDrawable = AppCompatResources.getDrawable(getContext(), R.drawable.show_password); + passwordField.setCompoundDrawablesWithIntrinsicBounds(null, null, revealDrawable, null); + } else { + revealDrawable.setVisible(true, true); + } + + } else { + isRevealIconVisible = false; + if (revealDrawable != null) { + revealDrawable.setVisible(false, true); + } + } + } + + public void addTextChangedListener(final TextWatcher textWatcher) { + passwordField.addTextChangedListener(textWatcher); + } + + public void setOnFocusChangeListener(OnFocusChangeListener onFocusChangeListener) { + this.externalOnFocusChangedLister = onFocusChangeListener; + } + + public String getText() { + return passwordField.getText().toString(); + } public String getHint() { return passwordField.getHint().toString(); @@ -279,15 +310,15 @@ public void showError(@StringRes final int stringRes) { errorText.setVisibility(VISIBLE); } - public void removeError() { - if (errorText.getVisibility() == VISIBLE) { - passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_black)); - errorText.setVisibility(GONE); - errorText.setText(""); - } - } - - public void setTextColor(@ColorRes final int colorRes) { - passwordField.setTextColor(ContextCompat.getColor(getContext(), colorRes)); - } + public void removeError() { + if (errorText.getVisibility() == VISIBLE) { + passwordField.setTextColor(ContextCompat.getColor(getContext(), R.color.backup_and_restore_black)); + errorText.setVisibility(GONE); + errorText.setText(""); + } + } + + public void setTextColor(@ColorRes final int colorRes) { + passwordField.setTextColor(ContextCompat.getColor(getContext(), colorRes)); + } } diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_left.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_left.xml index 0aee10cc..03a4f904 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_left.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_left.xml @@ -3,6 +3,6 @@ + android:toXDelta="0" /> - \ No newline at end of file + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_right.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_right.xml index 3ce7b680..e9fedda5 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_right.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_in_right.xml @@ -3,6 +3,6 @@ + android:toXDelta="0" /> - \ No newline at end of file + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_left.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_left.xml index 9177de84..9454b21e 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_left.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_left.xml @@ -3,6 +3,6 @@ + android:toXDelta="-100%p" /> - \ No newline at end of file + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_right.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_right.xml index a4657232..cc83a2bc 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_right.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/anim/backup_and_restore_slide_out_right.xml @@ -4,6 +4,6 @@ + android:toXDelta="100%p" /> - \ No newline at end of file + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/arrow_upload.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/arrow_upload.xml index 424cf922..f3a6e12f 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/arrow_upload.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/arrow_upload.xml @@ -10,19 +10,19 @@ android:fillColor="#00000000" android:fillType="nonZero" android:strokeColor="#FFFFFF" - android:strokeLineCap="round"/> + android:strokeLineCap="round" /> + android:strokeLineCap="round" /> + android:strokeLineCap="round" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/back.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/back.xml index ba902808..add6c674 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/back.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/back.xml @@ -6,13 +6,13 @@ + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_purple_blue.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_purple_blue.xml index 91ee595d..326c2aef 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_purple_blue.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_purple_blue.xml @@ -2,7 +2,7 @@ - + - - \ No newline at end of file + + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_restore_btn_disabled.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_restore_btn_disabled.xml index a07b002a..c752c08e 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_restore_btn_disabled.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_restore_btn_disabled.xml @@ -2,7 +2,7 @@ - + - - \ No newline at end of file + + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_state_list.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_state_list.xml index ed3dde86..2a246e91 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_state_list.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_btn_state_list.xml @@ -1,9 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_edittext_frame.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_edittext_frame.xml index d075576d..9ac11eb6 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_edittext_frame.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/backup_and_restore_edittext_frame.xml @@ -2,12 +2,12 @@ - + + android:width="@dimen/backup_and_restore_edittext_stroke_width" /> - + - \ No newline at end of file + diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/circle_v_mark_icon.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/circle_v_mark_icon.xml index 7d333020..d575e4ba 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/circle_v_mark_icon.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/circle_v_mark_icon.xml @@ -6,9 +6,9 @@ + android:fillType="nonZero" /> + android:fillType="nonZero" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/close.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/close.xml index 99dd7274..a34ca193 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/close.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/close.xml @@ -6,17 +6,17 @@ + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> + android:fillType="evenOdd" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/purple_blue_v_mark.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/purple_blue_v_mark.xml index dcafe558..e753de1e 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/purple_blue_v_mark.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/purple_blue_v_mark.xml @@ -8,9 +8,9 @@ android:strokeWidth="3" android:fillColor="#6F41E8" android:strokeColor="#FFF" - android:fillType="nonZero"/> + android:fillType="nonZero" /> + android:fillType="nonZero" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/qr.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/qr.xml index 1ff09ac3..659cda1c 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/qr.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/qr.xml @@ -8,139 +8,139 @@ android:strokeWidth="2" android:fillColor="#00000000" android:fillType="nonZero" - android:strokeColor="#6F41E8"/> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:fillAlpha="0.1" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/safe.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/safe.xml index f2c54415..c8d28b2f 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/safe.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/safe.xml @@ -8,155 +8,155 @@ android:strokeWidth="2" android:fillColor="#00000000" android:fillType="nonZero" - android:strokeColor="#6F41E8"/> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#6F41E8" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> + android:strokeColor="#00000000" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/show_password.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/show_password.xml index 31a1db9b..36112b21 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/show_password.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/drawable/show_password.xml @@ -8,11 +8,11 @@ android:strokeWidth="1.5" android:fillColor="#00000000" android:fillType="nonZero" - android:strokeColor="#1F1F1F"/> + android:strokeColor="#1F1F1F" /> + android:strokeColor="#1F1F1F" /> diff --git a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/layout/backup_and_restore_fragment_backup_create_password.xml b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/layout/backup_and_restore_fragment_backup_create_password.xml index 555896a9..e725e3a3 100644 --- a/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/layout/backup_and_restore_fragment_backup_create_password.xml +++ b/kin-backup-and-restore/kin-backup-and-restore-lib/src/main/res/layout/backup_and_restore_fragment_backup_create_password.xml @@ -18,7 +18,7 @@ android:text="@string/backup_and_restore_create_password_description_part_a" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/password_description_part_b" /> + app:layout_constraintTop_toBottomOf="@id/enter_pass_edittext" /> + app:layout_constraintTop_toBottomOf="@id/confirm_pass_edittext" /> + app:layout_constraintTop_toTopOf="@id/understand_checkbox" />