Browse Source

ui bugs, core bugs

gradlePlay
Gutyn 9 years ago
parent
commit
12c32dbf5a
  1. 2
      .gitignore
  2. 22
      .idea/compiler.xml
  3. 7
      .idea/copyright/profiles_settings.xml
  4. 3
      .idea/dictionaries/Mihail.xml
  5. 9
      .idea/modules.xml
  6. 19
      BreadWallet.iml
  7. 146
      app/app.iml
  8. 4
      app/build.gradle
  9. 17
      app/src/main/java/com/breadwallet/presenter/activities/MainActivity.java
  10. 16
      app/src/main/java/com/breadwallet/presenter/fragments/FragmentRecoveryPhrase.java
  11. 27
      app/src/main/java/com/breadwallet/presenter/fragments/FragmentWipeWallet.java
  12. 56
      app/src/main/java/com/breadwallet/tools/animation/FragmentAnimator.java
  13. 4
      app/src/main/java/com/breadwallet/wallet/BRPeerManager.java
  14. 35
      app/src/main/java/com/breadwallet/wallet/BRWalletManager.java
  15. 4
      app/src/main/jni/Android.mk
  16. 36
      app/src/main/jni/transition/PeerManager.c
  17. 2
      app/src/main/jni/transition/wallet.c
  18. 21
      app/src/main/res/layout/fragment_currency.xml
  19. 1
      app/src/main/res/values/strings.xml
  20. 2
      gradle/wrapper/gradle-wrapper.properties

2
.gitignore

@ -32,7 +32,7 @@ proguard/
*.log
# Android Studio
*.iml
#*.iml
*.keystore
gradle.properties
*/local.properties

22
.idea/compiler.xml

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

7
.idea/copyright/profiles_settings.xml

@ -1,7 +0,0 @@
<component name="CopyrightManager">
<settings default="">
<LanguageOptions name="JAVA">
<option name="fileLocation" value="3" />
</LanguageOptions>
</settings>
</component>

3
.idea/dictionaries/Mihail.xml

@ -1,3 +0,0 @@
<component name="ProjectDictionaryState">
<dictionary name="Mihail" />
</component>

9
.idea/modules.xml

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/BreadWallet.iml" filepath="$PROJECT_DIR$/BreadWallet.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</component>
</project>

19
BreadWallet.iml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="BreadWallet" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

146
app/app.iml

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="BreadWallet" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-core/2.2.2/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-idling-resource/2.2.2/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test.uiautomator/uiautomator-v18/2.1.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test/exposed-instrumentation-api-publish/0.5/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test/rules/0.5/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test/runner/0.5/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/multidex/1.0.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v13/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.3.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="support-vector-drawable-23.3.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="uiautomator-v18-2.1.1" level="project" />
<orderEntry type="library" exported="" name="rules-0.5" level="project" />
<orderEntry type="library" exported="" name="multidex-1.0.1" level="project" />
<orderEntry type="library" exported="" name="espresso-idling-resource-2.2.2" level="project" />
<orderEntry type="library" exported="" name="acra-4.5.0" level="project" />
<orderEntry type="library" exported="" name="commons-io-2.4" level="project" />
<orderEntry type="library" exported="" name="support-v13-23.3.0" level="project" />
<orderEntry type="library" exported="" name="javawriter-2.1.1" level="project" />
<orderEntry type="library" exported="" name="javax.annotation-api-1.2" level="project" />
<orderEntry type="library" exported="" name="espresso-core-2.2.2" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.3.0" level="project" />
<orderEntry type="library" exported="" name="hamcrest-library-1.3" level="project" />
<orderEntry type="library" exported="" name="core-3.2.1" level="project" />
<orderEntry type="library" exported="" name="library-1.0.19" level="project" />
<orderEntry type="library" exported="" name="jsr305-2.0.1" level="project" />
<orderEntry type="library" exported="" name="runner-0.5" level="project" />
<orderEntry type="library" exported="" name="support-v4-23.3.0" level="project" />
<orderEntry type="library" exported="" name="recyclerview-v7-23.3.0" level="project" />
<orderEntry type="library" exported="" name="design-23.3.0" level="project" />
<orderEntry type="library" exported="" name="hamcrest-core-1.3" level="project" />
<orderEntry type="library" exported="" name="junit-4.12" level="project" />
<orderEntry type="library" exported="" name="support-annotations-23.3.0" level="project" />
<orderEntry type="library" exported="" name="animated-vector-drawable-23.3.0" level="project" />
<orderEntry type="library" exported="" name="org.apache.commons.io-2.4" level="project" />
<orderEntry type="library" exported="" name="javax.inject-1" level="project" />
<orderEntry type="library" exported="" name="exposed-instrumentation-api-publish-0.5" level="project" />
<orderEntry type="library" exported="" name="hamcrest-integration-1.3" level="project" />
<orderEntry type="library" exported="" name="rebound-0.3.8" level="project" />
</component>
</module>

4
app/build.gradle

@ -8,7 +8,7 @@ android {
// set to true to turn off analysis progress reporting by lint
quiet false
// if true, stop the gradle build if errors are found
abortOnError true
abortOnError false
// if true, only report errors
ignoreWarnings false
}
@ -16,7 +16,6 @@ android {
packagingOptions {
exclude 'LICENSE.txt'
exclude 'META-INF/LICENSE.txt'
// exclude 'app/src/main/jni/breadwallet-core' //for API 19 to work
}
// signingConfigs {
@ -137,6 +136,7 @@ dependencies {
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:support-v13:23.3.0'
compile 'com.google.zxing:core:3.2.1'
compile 'com.android.support:multidex:1.0.1'
compile 'com.facebook.rebound:rebound:0.3.8'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.android.support.test.espresso:espresso-core:2.2.2'

17
app/src/main/java/com/breadwallet/presenter/activities/MainActivity.java

@ -68,9 +68,15 @@ import com.breadwallet.wallet.BRWalletManager;
import java.math.BigDecimal;
import java.security.spec.KeySpec;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Currency;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Observable;
import java.util.Observer;
@ -604,7 +610,14 @@ public class MainActivity extends FragmentActivity implements Observer {
final double amountToReduce = amountAsDouble - maxAmountDouble;
// String strToReduce = String.valueOf(amountToReduce);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(String.format("reduce payment amount by ƀ%s to accommodate the bitcoin network fee?", amountToReduce))
DecimalFormat currencyFormat;
currencyFormat = (DecimalFormat) DecimalFormat.getInstance();
currencyFormat.setMaximumFractionDigits(2);
currencyFormat.setMinimumFractionDigits(0);
currencyFormat.setGroupingUsed(true);
builder.setMessage(String.format("reduce payment amount by ƀ%s to accommodate the bitcoin network fee?", currencyFormat.format(amountToReduce)))
.setTitle("insufficient funds for bitcoin network fee")
.setCancelable(false)
.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@ -867,7 +880,7 @@ public class MainActivity extends FragmentActivity implements Observer {
finish();
}
},3500);
return;
}
m.createWallet(transactionsCount, pubkeyEncoded);

16
app/src/main/java/com/breadwallet/presenter/fragments/FragmentRecoveryPhrase.java

@ -59,14 +59,14 @@ public class FragmentRecoveryPhrase extends Fragment {
thePhrase = (TextView) rootView.findViewById(R.id.the_phrase);
// //TODO delete this code below which is for testing reasons only
// thePhrase.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// BRClipboardManager.copyToClipboard(getActivity(),thePhrase.getText().toString());
// ((BreadWalletApp)getActivity().getApplication()).showCustomToast(getActivity(),
// getString(R.string.copied), 300, Toast.LENGTH_SHORT,0);
// }
// });
thePhrase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BRClipboardManager.copyToClipboard(getActivity(),thePhrase.getText().toString());
((BreadWalletApp)getActivity().getApplication()).showCustomToast(getActivity(),
getString(R.string.copied), 300, Toast.LENGTH_SHORT,0);
}
});
// final long startTime = System.currentTimeMillis();
//return the new method if the API is 23+

27
app/src/main/java/com/breadwallet/presenter/fragments/FragmentWipeWallet.java

@ -22,6 +22,7 @@ import com.breadwallet.presenter.BreadWalletApp;
import com.breadwallet.presenter.activities.IntroActivity;
import com.breadwallet.presenter.activities.MainActivity;
import com.breadwallet.tools.TypesConverter;
import com.breadwallet.tools.animation.FragmentAnimator;
import com.breadwallet.tools.security.KeyStoreManager;
import com.breadwallet.tools.sqlite.SQLiteManager;
import com.breadwallet.wallet.BRPeerManager;
@ -103,10 +104,11 @@ public class FragmentWipeWallet extends Fragment {
public void run() {
allowWipeButtonPress = true;
}
},500);
}, 500);
if (phraseIsValid(recoveryPhraseEditText.getText().toString().trim().toLowerCase())) {
m.wipeWallet(getActivity());
startIntroActivity();
FragmentAnimator.resetFragmentAnimator();
} else {
new AlertDialog.Builder(getActivity())
.setTitle(getString(R.string.attention))
@ -127,14 +129,12 @@ public class FragmentWipeWallet extends Fragment {
private boolean phraseIsValid(String insertedPhrase) {
String normalizedPhrase = Normalizer.normalize(insertedPhrase.trim(), Normalizer.Form.NFKD);
if (!BRWalletManager.getInstance(getActivity()).validatePhrase(getActivity(), normalizedPhrase))
return false;
String nullTerminatedPhrase = normalizedPhrase+ '\0';
String nullTerminatedPhrase = normalizedPhrase + '\0';
byte[] pubKey = m.getMasterPubKey(nullTerminatedPhrase);
byte[] pubKeyFromKeyStore = KeyStoreManager.getMasterPublicKey(getActivity());
return Arrays.equals(pubKey, pubKeyFromKeyStore);
}
@Override
@ -153,11 +153,18 @@ public class FragmentWipeWallet extends Fragment {
}
private void startIntroActivity() {
Intent intent;
intent = new Intent(getActivity(), IntroActivity.class);
startActivity(intent);
if (!getActivity().isDestroyed()) {
getActivity().finish();
}
Intent i = getActivity().getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
// Intent intent;
// intent = new Intent(getActivity(), IntroActivity.class);
// startActivity(intent);
// if (!getActivity().isDestroyed()) {
// getActivity().finish();
// }
}
}

56
app/src/main/java/com/breadwallet/tools/animation/FragmentAnimator.java

@ -55,7 +55,7 @@ public class FragmentAnimator {
private static final String TAG = FragmentAnimator.class.getName();
public static int level = 0;
public static boolean wipeWalletOpen = false;
private static final Stack<Fragment> previous = new Stack<>();
private static Stack<Fragment> previous = new Stack<>();
private static boolean multiplePressingAvailable = true;
private static final Object lockObject = new Object();
@ -313,53 +313,11 @@ public class FragmentAnimator {
app.setBurgerButtonImage(MainActivity.BURGER);
}
// public static void hideRequestFragment() {
// MainActivity app = MainActivity.app;
// if (app == null) return;
// Log.e(TAG, "hideRequestFragment");
// CustomPagerAdapter.adapter.showFragments(true);
// app.requestFragmentOn = false;
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
// FragmentAnimator.multiplePressingAvailable = true;
// }
// }, 300);
// FragmentManager fragmentManager = app.getFragmentManager();
// FragmentRequest fragmentRequest = (FragmentRequest)
// fragmentManager.findFragmentByTag(FragmentRequest.class.getName());
// fragmentManager.beginTransaction().
// setCustomAnimations(R.animator.from_left, R.animator.to_right).
// remove(fragmentRequest).commit();
// app.setBurgerButtonImage(app.BURGER);
// }
// public static boolean requestNeededPermission(Activity app) {
// int CAMERA_REQUEST_ID = 2;
// // Here, thisActivity is the current activity
// if (ContextCompat.checkSelfPermission(app,
// Manifest.permission.READ_CONTACTS)
// != PackageManager.PERMISSION_GRANTED) {
// // Should we show an explanation?
// if (ActivityCompat.shouldShowRequestPermissionRationale(app,
// Manifest.permission.READ_CONTACTS)) {
// Log.e(TAG, "YES explanation!");
// // Show an explanation to the user *asynchronously* -- don't block
// // this thread waiting for the user's response! After the user
// // sees the explanation, try again to request the permission.
// } else {
// Log.e(TAG, "NO explanation!");
// // No explanation needed, we can request the permission.
// ActivityCompat.requestPermissions(app,
// new String[]{Manifest.permission.CAMERA},
// CAMERA_REQUEST_ID);
// // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// // app-defined int constant. The callback method gets the
// // result of the request.
// }
// return false;
// }
// return true;
// }
public static void resetFragmentAnimator(){
level = 0;
wipeWalletOpen = false;
previous.clear();
multiplePressingAvailable = true;
}
}

4
app/src/main/java/com/breadwallet/wallet/BRPeerManager.java

@ -146,8 +146,8 @@ public class BRPeerManager {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < peerEntities.length; i++) {
SQLiteManager.getInstance(ctx).insertPeer(peerEntities[i].getPeerAddress(), peerEntities[i].getPeerPort(), peerEntities[i].getPeerTimeStamp());
for (PeerEntity peerEntity : peerEntities) {
SQLiteManager.getInstance(ctx).insertPeer(peerEntity.getPeerAddress(), peerEntity.getPeerPort(), peerEntity.getPeerTimeStamp());
}
}
}).start();

35
app/src/main/java/com/breadwallet/wallet/BRWalletManager.java

@ -62,35 +62,6 @@ public class BRWalletManager {
private static BRWalletManager instance;
private static Context ctx;
// public static final long SATOSHIS = 100000000;
// public static final long MAX_MONEY = 21000000 * SATOSHIS;
// public static final long DEFAULT_FEE_PER_KB = 4096 * 1000 / 225; // fee required by eligius pool, which supports child-pays-for-parent
// public static final long MAX_FEE_PER_KB = 100100 * 1000 / 225; // slightly higher than a 1000bit fee on a typical 225byte transaction
// public static final String UNSPENT_URL_1 = "https://api.chain.com/v2/"; // + a string
// public static final String UNSPENT_URL_2 = "/addresses/"; // + a string
// public static final String UNSPENT_URL_3 = "/unspents?api-key-id=eed0d7697a880144bb854676f88d123f";
// public static final String TICKER_URL = "https://bitpay.com/rates";
// public static final String FEE_PER_KB_URL = "https://api.breadwallet.com/v1/fee-per-kb";
// public static final int SEED_ENTROPY_LENGTH = 128 / 8;
// public static final String SEC_ATTR_SERVICE = "org.voisine.breadwallet";
// public static final String ANDROID_KEY_STORE = "AndroidKeyStore";
// ByteBuffer masterPublicKey; // master public key used to generate wallet addresses
// byte[] wallet;
// char[] seedPhrase; // requesting seedPhrase will trigger authentication
// long seedCreationTime; // interval since reference date, 00:00:00 01/01/01 GMT
// long secureTime; // last known time from an ssl server connection
// long spendingLimit; // amount that can be spent using touch id without pin entry
// boolean passcodeEnabled; // true if device passcode is enabled
// boolean didAuthenticate; // true if the user authenticated after this was last set to false
// NumberFormat format; // bitcoin currency formatter
// NumberFormat localFormat; // local currency formatter
// String localCurrencyCode; // local currency ISO code
// double localCurrencyPrice; // exchange rate in local currency units per bitcoin
// List<String> currencyCodes; // list of supported local currency codes
// List<String> currencyNames; // names for local currency codes
private BRWalletManager() {
}
@ -110,7 +81,6 @@ public class BRWalletManager {
try {
list = WordsReader.getWordList(ctx);
words = list.toArray(new String[list.size()]);
// CustomLogger.LogThis(words);
} catch (IOException e) {
e.printStackTrace();
}
@ -118,6 +88,8 @@ public class BRWalletManager {
if (words.length < 2000)
throw new IllegalArgumentException("the list is wrong, size: " + words.length);
byte[] phrase = encodeSeed(keyBytes, words);
if (phrase == null || phrase.length == 0)
throw new NullPointerException("failed to encodeSeed");
String strPhrase = null;
try {
strPhrase = new String(phrase, "UTF-8");
@ -272,7 +244,7 @@ public class BRWalletManager {
// if (amount > 0) {
// showWritePhraseDialog();
double absAmount = amount > 0 ? amount : amount * -1;
String strToShow = String.format(ctx.getString(amount > 0 ? R.string.received : R.string.sent), m.bitcoinLowercase + m.getBitsFromSatoshi(absAmount) + " ("+m.getExchangeForAmount(m.getRateFromPrefs(), m.getISOFromPrefs(), String.valueOf(m.getBitsFromSatoshi(absAmount))) + ")");
String strToShow = String.format(ctx.getString(amount > 0 ? R.string.received : R.string.sent), m.bitcoinLowercase + m.getBitsFromSatoshi(absAmount) + " (" + m.getExchangeForAmount(m.getRateFromPrefs(), m.getISOFromPrefs(), String.valueOf(m.getBitsFromSatoshi(absAmount))) + ")");
((BreadWalletApp) ctx.getApplicationContext()).showCustomToast((Activity) ctx, strToShow,
BreadWalletApp.DISPLAY_HEIGHT_PX / 2, Toast.LENGTH_LONG, 1);
// } else {
@ -321,7 +293,6 @@ public class BRWalletManager {
private native byte[] encodeSeed(byte[] seed, String[] wordList);
// public native void createWallet(ByteBuffer transactions[], int transactionCount);
public native void createWallet(int transactionCount, byte[] pubkey);
public native void putTransaction(byte[] transaction, long blockHeight, long timeStamp);

4
app/src/main/jni/Android.mk

@ -4,7 +4,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := core
LOCAL_CFLAGS := -std=c99 -DBITCOIN_TESTNET=0 -Wno-trigraphs -Wmissing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code-aggressive -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wunused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wconditional-uninitialized -Wno-unknown-pragmas -pedantic -Wshadow -Wfour-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wassign-enum -Wshorten-64-to-32 -Wpointer-sign -Wnewline-eof -Wdeprecated-declarations -Wno-sign-conversion
LOCAL_CFLAGS := -std=c99 -DBITCOIN_TESTNET=1 -Wno-trigraphs -Wmissing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code-aggressive -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wunused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wconditional-uninitialized -Wno-unknown-pragmas -pedantic -Wshadow -Wfour-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wassign-enum -Wshorten-64-to-32 -Wpointer-sign -Wnewline-eof -Wdeprecated-declarations -Wno-sign-conversion
LOCAL_LDLIBS := -llog -lm
@ -25,7 +25,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE := bread
LOCAL_CFLAGS := -std=c99 -DBITCOIN_TESTNET=0 -Wno-trigraphs -Wmissing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code-aggressive -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wunused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wconditional-uninitialized -Wno-unknown-pragmas -pedantic -Wshadow -Wfour-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wassign-enum -Wshorten-64-to-32 -Wpointer-sign -Wnewline-eof -Wdeprecated-declarations -Wno-sign-conversion
LOCAL_CFLAGS := -std=c99 -DBITCOIN_TESTNET=1 -Wno-trigraphs -Wmissing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code-aggressive -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wunused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wconditional-uninitialized -Wno-unknown-pragmas -pedantic -Wshadow -Wfour-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wassign-enum -Wshorten-64-to-32 -Wpointer-sign -Wnewline-eof -Wdeprecated-declarations -Wno-sign-conversion
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/breadwallet-core/secp256k1\
$(LOCAL_PATH)/breadwallet-core

36
app/src/main/jni/transition/PeerManager.c

@ -58,7 +58,7 @@ static JNIEnv* getEnv() {
static void syncStarted(void *info) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "syncStarted");
JNIEnv *globalEnv = getEnv();
@ -69,7 +69,7 @@ static void syncStarted(void *info) {
}
static void syncSucceeded(void *info) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "syncSucceeded: # of tx: %d",
(int) BRWalletTransactions(_wallet, NULL, 0) );
JNIEnv *globalEnv = getEnv();
@ -82,7 +82,7 @@ static void syncSucceeded(void *info) {
static void syncFailed(void *info, int error) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "syncFailed");
JNIEnv *globalEnv = getEnv();
@ -96,7 +96,7 @@ static void syncFailed(void *info, int error) {
}
static void txStatusUpdate(void *info) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "txStatusUpdate");
JNIEnv *globalEnv = getEnv();
@ -110,7 +110,7 @@ static void txStatusUpdate(void *info) {
}
static void txRejected(void *info, int rescanRecommended) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "txRejected");
JNIEnv *globalEnv = getEnv();
@ -123,7 +123,7 @@ static void txRejected(void *info, int rescanRecommended) {
static void saveBlocks(void *info, BRMerkleBlock *blocks[], size_t count) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "saveBlocks");
JNIEnv *env = getEnv();
@ -162,7 +162,7 @@ static void saveBlocks(void *info, BRMerkleBlock *blocks[], size_t count) {
}
static void savePeers(void *info, const BRPeer peers[], size_t count) {
if(!_peerManager || !_wallet) return;
if(!_peerManager) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "savePeers");
JNIEnv *env = getEnv();
@ -211,7 +211,6 @@ JNIEXPORT void Java_com_breadwallet_wallet_BRWalletManager_rescan(JNIEnv *env, j
}
static int networkIsReachable(void *info) {
if(!_peerManager || !_wallet) return 0;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "networkIsReachable");
JNIEnv *globalEnv = getEnv();
@ -245,16 +244,15 @@ JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_createAndConnect(JNIEnv
}
if (_wallet == NULL) {
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "NULL: blocks");
return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "NULL: _wallet");
}
if (!_peerManager) {
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "BRPeerManagerNew called: %d", ++_managerNewCounter);
_peerManager = BRPeerManagerNew(_wallet, earliestKeyTime > BIP39_CREATION_TIME ? earliestKeyTime
: BIP39_CREATION_TIME,
blocksCount == 0 ? NULL : _blocks,
blocksCount, peersCount == 0 ? NULL : _peers,
blocksCount == 0 || !_blocks ? NULL : _blocks,
blocksCount, peersCount == 0 || !_peers ? NULL : _peers,
peersCount);
BRPeerManagerSetCallbacks(_peerManager, NULL, syncStarted, syncSucceeded, syncFailed,
txStatusUpdate, txRejected, saveBlocks, savePeers,
@ -283,7 +281,10 @@ JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_putBlock(JNIEnv *env,
jobject thiz,
jbyteArray block,
int blockHeight) {
if(!_peerManager || !_wallet) return;
if(!_blocks) {
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", " >>>>>> _blocks is NULL");
return;
}
int bkLength = (*env)->GetArrayLength(env, block);
jbyte *byteBk = (*env)->GetByteArrayElements(env, block, 0);
BRMerkleBlock *tmpBk = BRMerkleBlockParse((const uint8_t *) byteBk, bkLength);
@ -296,7 +297,6 @@ JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_putBlock(JNIEnv *env,
JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_createBlockArrayWithCount(JNIEnv *env,
jobject thiz,
size_t bkCount) {
if(!_peerManager || !_wallet) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "block array created with count: %d", bkCount);
_blocks = calloc(bkCount, sizeof(BRMerkleBlock));
// need to call free();
@ -308,7 +308,10 @@ JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_putPeer(JNIEnv *env,
jbyteArray peerAddress,
jbyteArray peerPort,
jbyteArray peerTimeStamp) {
if(!_peerManager || !_wallet) return;
if(! _peers) {
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", " >>>>>> _peers is NULL");
return;
}
int addrLength = (*env)->GetArrayLength(env, peerAddress);
jbyte *byteAddr = (*env)->GetByteArrayElements(env, peerAddress, 0);
@ -339,7 +342,6 @@ JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_putPeer(JNIEnv *env,
JNIEXPORT void Java_com_breadwallet_wallet_BRPeerManager_createPeerArrayWithCount(JNIEnv *env,
jobject thiz,
size_t prCount) {
if(!_peerManager || !_wallet) return;
__android_log_print(ANDROID_LOG_ERROR, "Message from C: ", "peer array created with count: %d",prCount);
_peers = calloc(prCount, sizeof(BRPeer));
// need to call free();
@ -356,7 +358,7 @@ JNIEXPORT jdouble Java_com_breadwallet_wallet_BRPeerManager_syncProgress(JNIEnv
JNIEXPORT jint Java_com_breadwallet_wallet_BRPeerManager_getCurrentBlockHeight(JNIEnv *env,
jobject thiz) {
if(!_peerManager || !_wallet) return 0;
if(!_peerManager) return 0;
return (jint) BRPeerManagerLastBlockHeight(_peerManager);
}

2
app/src/main/jni/transition/wallet.c

File diff suppressed because one or more lines are too long

21
app/src/main/res/layout/fragment_currency.xml

@ -2,20 +2,25 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="90dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/separator_height"
android:background="@color/grey" />
<RelativeLayout
android:id="@+id/local_currency"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:layout_height="match_parent">
<ListView
android:id="@+id/currency_list_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:listSelector="@color/white"
android:cacheColorHint="@android:color/transparent"></ListView>
android:cacheColorHint="@android:color/transparent"
android:listSelector="@color/white" />
<TextView
android:id="@+id/noInternetConnectionText"
@ -24,7 +29,7 @@
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="136dp"
android:text="No Internet Connection"
android:text="@string/no_internet_connection"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/grey"
android:visibility="gone" />
@ -36,7 +41,7 @@
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@android:color/transparent"
android:text="Refresh"
android:text="@string/refresh"
android:textColor="@color/blue"
android:visibility="gone" />
@ -45,8 +50,8 @@
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
</LinearLayout>

1
app/src/main/res/values/strings.xml

@ -157,4 +157,5 @@
<string name="i_wrote_it_down">I wrote it down:</string>
<string name="no_transactions">no transactions</string>
<string name="recovery_phrase">recovery phrase:</string>
<string name="refresh">refresh</string>
</resources>

2
gradle/wrapper/gradle-wrapper.properties

@ -1,4 +1,4 @@
#Thu Apr 07 15:22:46 PDT 2016
#Thu Apr 14 11:51:21 PDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

Loading…
Cancel
Save