forked from divslinger/Android-Merchant-App
-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
WilliamHill
committed
Dec 1, 2015
1 parent
cd7fdc5
commit b9dc09c
Showing
142 changed files
with
6,581 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<module external.linked.project.id="BlockchainMerchant_v2" 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_6" 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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
<?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="BlockchainMerchant_v2" 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" /> | ||
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" /> | ||
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" /> | ||
<afterSyncTasks> | ||
<task>generateDebugAndroidTestSources</task> | ||
<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_6" inherit-compiler-output="false"> | ||
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" /> | ||
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/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/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/jni" isTestSource="false" /> | ||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> | ||
<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/classes" /> | ||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> | ||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> | ||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> | ||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> | ||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> | ||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> | ||
<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 19 Platform (1)" jdkType="Android SDK" /> | ||
<orderEntry type="sourceFolder" forTests="false" /> | ||
<orderEntry type="library" exported="" name="android-async-http-1.4.4" level="project" /> | ||
<orderEntry type="library" exported="" name="guava-16.0.1" level="project" /> | ||
<orderEntry type="library" exported="" name="slf4j-api-1.6.2" level="project" /> | ||
<orderEntry type="library" exported="" name="MyWalletHD" level="project" /> | ||
<orderEntry type="library" exported="" name="bitcoinj-core-0.13.3" level="project" /> | ||
<orderEntry type="library" exported="" name="support-v4-19.1.0" level="project" /> | ||
<orderEntry type="library" exported="" name="core" level="project" /> | ||
<orderEntry type="library" exported="" name="core-1.52.0.0" level="project" /> | ||
<orderEntry type="library" exported="" name="commons-io-2.4" level="project" /> | ||
<orderEntry type="library" exported="" name="java-api-0.90" level="project" /> | ||
<orderEntry type="library" exported="" name="zbar" level="project" /> | ||
</component> | ||
</module> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
apply plugin: 'com.android.application' | ||
|
||
android { | ||
compileSdkVersion 19 | ||
buildToolsVersion "22.0.1" | ||
|
||
defaultConfig { | ||
applicationId "info.blockchain.merchant" | ||
minSdkVersion 14 | ||
targetSdkVersion 18 | ||
} | ||
|
||
buildTypes { | ||
release { | ||
minifyEnabled false | ||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' | ||
} | ||
} | ||
} | ||
|
||
dependencies { | ||
compile 'com.android.support:support-v4:19.1.0' | ||
compile 'com.google.guava:guava:16.0.1' | ||
compile 'com.madgag.spongycastle:core:1.52.0.0' | ||
compile files('libs/android-async-http-1.4.4.jar') | ||
compile files('libs/commons-io-2.4.jar') | ||
compile files('libs/core.jar') | ||
compile files('libs/java-api-0.90.jar') | ||
compile files('libs/zbar.jar') | ||
compile files('libs/MyWalletHD.jar') | ||
compile files('libs/bitcoinj-core-0.13.3.jar') | ||
compile files('libs/slf4j-api-1.6.2.jar') | ||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="info.blockchain.merchant" | ||
android:versionCode="15" | ||
android:versionName="1.2.4" > | ||
|
||
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="18" /> | ||
|
||
<uses-permission android:name="android.permission.CAMERA" /> | ||
<uses-permission android:name="android.permission.INTERNET" /> | ||
|
||
<uses-feature android:name="android.hardware.camera" android:required="false"/> | ||
|
||
<application | ||
android:allowBackup="true" | ||
android:icon="@drawable/ic_launcher" | ||
android:label="@string/app_name" | ||
android:theme="@style/AppTheme" | ||
> | ||
|
||
<activity | ||
android:name="info.blockchain.merchant.SplashActivity" | ||
android:label="@string/app_name" | ||
android:screenOrientation="portrait" | ||
> | ||
<intent-filter> | ||
<action android:name="android.intent.action.MAIN" /> | ||
<category android:name="android.intent.category.LAUNCHER" /> | ||
</intent-filter> | ||
</activity> | ||
|
||
<activity | ||
android:name="info.blockchain.merchant.MainActivity" | ||
android:label="@string/app_name" | ||
android:screenOrientation="portrait" | ||
> | ||
</activity> | ||
|
||
<activity android:name="com.dm.zbar.android.scanner.ZBarScannerActivity" | ||
android:screenOrientation="landscape" | ||
android:label="@string/app_name" /> | ||
|
||
<activity android:name=".SettingsActivity" | ||
android:label="@string/app_name" | ||
android:theme="@android:style/Theme.Dialog" > | ||
</activity> | ||
|
||
<activity android:name=".OtherCurrencyActivity" | ||
android:label="@string/app_name" | ||
android:theme="@android:style/Theme.Dialog" > | ||
</activity> | ||
|
||
<activity android:name=".PinActivity" | ||
android:label="@string/app_name" | ||
android:theme="@android:style/Theme.Dialog" > | ||
</activity> | ||
|
||
<activity android:name=".AboutActivity" | ||
android:label="@string/app_name" | ||
android:theme="@android:style/Theme.Dialog" > | ||
</activity> | ||
|
||
</application> | ||
|
||
</manifest> |
Binary file not shown.
174 changes: 174 additions & 0 deletions
174
app/src/main/java/com/dm/zbar/android/scanner/CameraPreview.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
package com.dm.zbar.android.scanner; | ||
|
||
import android.content.Context; | ||
import android.hardware.Camera; | ||
import android.hardware.Camera.AutoFocusCallback; | ||
import android.hardware.Camera.PreviewCallback; | ||
import android.hardware.Camera.Size; | ||
import android.util.Log; | ||
import android.view.SurfaceHolder; | ||
import android.view.SurfaceView; | ||
import android.view.View; | ||
import android.view.ViewGroup; | ||
import java.io.IOException; | ||
import java.util.List; | ||
|
||
class CameraPreview extends ViewGroup implements SurfaceHolder.Callback { | ||
private final String TAG = "CameraPreview"; | ||
|
||
SurfaceView mSurfaceView; | ||
SurfaceHolder mHolder; | ||
Size mPreviewSize; | ||
List<Size> mSupportedPreviewSizes; | ||
Camera mCamera; | ||
PreviewCallback mPreviewCallback; | ||
AutoFocusCallback mAutoFocusCallback; | ||
|
||
CameraPreview(Context context, PreviewCallback previewCallback, AutoFocusCallback autoFocusCb) { | ||
super(context); | ||
|
||
mPreviewCallback = previewCallback; | ||
mAutoFocusCallback = autoFocusCb; | ||
mSurfaceView = new SurfaceView(context); | ||
addView(mSurfaceView); | ||
|
||
// Install a SurfaceHolder.Callback so we get notified when the | ||
// underlying surface is created and destroyed. | ||
mHolder = mSurfaceView.getHolder(); | ||
mHolder.addCallback(this); | ||
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); | ||
} | ||
|
||
public void setCamera(Camera camera) { | ||
mCamera = camera; | ||
if (mCamera != null) { | ||
mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes(); | ||
requestLayout(); | ||
} | ||
} | ||
|
||
@Override | ||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | ||
// We purposely disregard child measurements because act as a | ||
// wrapper to a SurfaceView that centers the camera preview instead | ||
// of stretching it. | ||
final int width = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec); | ||
final int height = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec); | ||
setMeasuredDimension(width, height); | ||
|
||
if (mSupportedPreviewSizes != null) { | ||
mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes, width, height); | ||
} | ||
} | ||
|
||
@Override | ||
protected void onLayout(boolean changed, int l, int t, int r, int b) { | ||
if (changed && getChildCount() > 0) { | ||
final View child = getChildAt(0); | ||
|
||
final int width = r - l; | ||
final int height = b - t; | ||
|
||
int previewWidth = width; | ||
int previewHeight = height; | ||
if (mPreviewSize != null) { | ||
previewWidth = mPreviewSize.width; | ||
previewHeight = mPreviewSize.height; | ||
} | ||
|
||
// Center the child SurfaceView within the parent. | ||
if (width * previewHeight > height * previewWidth) { | ||
final int scaledChildWidth = previewWidth * height / previewHeight; | ||
child.layout((width - scaledChildWidth) / 2, 0, | ||
(width + scaledChildWidth) / 2, height); | ||
} else { | ||
final int scaledChildHeight = previewHeight * width / previewWidth; | ||
child.layout(0, (height - scaledChildHeight) / 2, | ||
width, (height + scaledChildHeight) / 2); | ||
} | ||
} | ||
} | ||
|
||
public void hideSurfaceView() { | ||
mSurfaceView.setVisibility(View.INVISIBLE); | ||
} | ||
|
||
public void showSurfaceView() { | ||
mSurfaceView.setVisibility(View.VISIBLE); | ||
} | ||
|
||
public void surfaceCreated(SurfaceHolder holder) { | ||
// The Surface has been created, acquire the camera and tell it where | ||
// to draw. | ||
try { | ||
if (mCamera != null) { | ||
mCamera.setPreviewDisplay(holder); | ||
} | ||
} catch (IOException exception) { | ||
Log.e(TAG, "IOException caused by setPreviewDisplay()", exception); | ||
} | ||
} | ||
|
||
public void surfaceDestroyed(SurfaceHolder holder) { | ||
// Surface will be destroyed when we return, so stop the preview. | ||
if (mCamera != null) { | ||
mCamera.cancelAutoFocus(); | ||
mCamera.stopPreview(); | ||
} | ||
} | ||
|
||
|
||
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { | ||
final double ASPECT_TOLERANCE = 0.1; | ||
double targetRatio = (double) w / h; | ||
if (sizes == null) return null; | ||
|
||
Size optimalSize = null; | ||
double minDiff = Double.MAX_VALUE; | ||
|
||
int targetHeight = h; | ||
|
||
// Try to find an size match aspect ratio and size | ||
for (Size size : sizes) { | ||
double ratio = (double) size.width / size.height; | ||
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; | ||
if (Math.abs(size.height - targetHeight) < minDiff) { | ||
optimalSize = size; | ||
minDiff = Math.abs(size.height - targetHeight); | ||
} | ||
} | ||
|
||
// Cannot find the one match the aspect ratio, ignore the requirement | ||
if (optimalSize == null) { | ||
minDiff = Double.MAX_VALUE; | ||
for (Size size : sizes) { | ||
if (Math.abs(size.height - targetHeight) < minDiff) { | ||
optimalSize = size; | ||
minDiff = Math.abs(size.height - targetHeight); | ||
} | ||
} | ||
} | ||
return optimalSize; | ||
} | ||
|
||
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { | ||
if (holder.getSurface() == null){ | ||
// preview surface does not exist | ||
return; | ||
} | ||
|
||
if (mCamera != null) { | ||
// Now that the size is known, set up the camera parameters and begin | ||
// the preview. | ||
Camera.Parameters parameters = mCamera.getParameters(); | ||
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height); | ||
requestLayout(); | ||
|
||
mCamera.setParameters(parameters); | ||
mCamera.setPreviewCallback(mPreviewCallback); | ||
mCamera.startPreview(); | ||
mCamera.autoFocus(mAutoFocusCallback); | ||
} | ||
} | ||
|
||
} |
Oops, something went wrong.