Skip to content

Commit

Permalink
adapted QR Scanner from Lottie Preview (#248)
Browse files Browse the repository at this point in the history
  • Loading branch information
kudanai authored and gpeal committed Apr 8, 2017
1 parent a9f92cb commit 51a4c70
Show file tree
Hide file tree
Showing 9 changed files with 257 additions and 56 deletions.
86 changes: 45 additions & 41 deletions LottieSample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,56 @@ apply plugin: 'com.android.application'
apply plugin: 'com.facebook.testing.screenshot'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.airbnb.lottie"
minSdkVersion 16
targetSdkVersion 25
versionCode 9
versionName "2.0.0-beta3"
testInstrumentationRunner "com.airbnb.lottie.TestRunner"
}
buildTypes {
release {
minifyEnabled false
}
}
lintOptions {
ignore 'InvalidPackage'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.airbnb.lottie"
minSdkVersion 16
targetSdkVersion 25
versionCode 9
versionName "2.0.0-beta3"
testInstrumentationRunner "com.airbnb.lottie.TestRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
}
}
lintOptions {
ignore 'InvalidPackage'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
compile project(':lottie')
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.jakewharton:butterknife:8.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.matthew-tamlin:sliding-intro-screen:3.2.0'
compile project(':lottie')
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.jakewharton:butterknife:8.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.matthew-tamlin:sliding-intro-screen:3.2.0'
compile 'com.dlazaro66.qrcodereaderview:qrcodereaderview:2.0.2'


debugCompile 'com.github.brianPlummer:tinydancer:0.0.9'
debugCompile 'com.github.brianPlummer:tinydancer:0.0.9'

testCompile 'junit:junit:4.12'
testCompile 'junit:junit:4.12'

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'org.hamcrest', module: 'hamcrest-integration'
})
androidTestCompile('com.android.support.test:runner:0.5', {
exclude group: 'com.android.support', module: 'support-annotations'
})
androidTestCompile('com.android.support.test:rules:0.5', {
exclude group: 'com.android.support', module: 'support-annotations'
})
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'org.hamcrest', module: 'hamcrest-integration'
})
androidTestCompile('com.android.support.test:runner:0.5', {
exclude group: 'com.android.support', module: 'support-annotations'
})
androidTestCompile('com.android.support.test:rules:0.5', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support.constraint:constraint-layout:1.0.2'
}
25 changes: 14 additions & 11 deletions LottieSample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,37 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.airbnb.lottie.samples">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>

<application
android:name=".LottieApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name="com.airbnb.lottie.samples.LottieApplication">
android:theme="@style/AppTheme">
<activity
android:name="com.airbnb.lottie.samples.MainActivity"
android:name=".MainActivity"
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="com.airbnb.lottie.samples.FontActivity"
android:windowSoftInputMode="stateVisible"
android:name=".FontActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible"/>
<activity
android:name=".AppIntroActivity"
android:screenOrientation="portrait"/>

<activity
android:name="com.airbnb.lottie.samples.AppIntroActivity"
android:name=".QRScanActivity"
android:screenOrientation="portrait"/>
</application>

</manifest>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.airbnb.lottie.samples;

import android.Manifest;
import android.animation.Animator;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.util.Pair;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatSeekBar;
Expand Down Expand Up @@ -56,7 +61,12 @@ public class AnimationFragment extends Fragment {
private static final int RC_ASSET = 1337;
private static final int RC_FILE = 1338;
private static final int RC_URL = 1339;
private static final int RC_QR = 1340;
private static final int RC_CAMERA = 1341;


static final String EXTRA_ANIMATION_NAME = "animation_name";
static final String EXTRA_URL = "json_url";

static AnimationFragment newInstance() {
return new AnimationFragment();
Expand Down Expand Up @@ -183,6 +193,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
break;
case RC_URL:

break;
case RC_QR:
loadUrl(data.getExtras().getString(EXTRA_URL));
break;
}
}
Expand Down Expand Up @@ -216,6 +229,31 @@ void onLoopChanged() {
animationView.loop(loopButton.isActivated());
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode==RC_CAMERA && grantResults.length > 0 && grantResults[0] == PackageManager
.PERMISSION_GRANTED) {
startActivityForResult(new Intent(getContext(), QRScanActivity.class), RC_QR);
} else {
Toast.makeText(getContext(),R.string.permission_required,Toast.LENGTH_LONG).show();
}

}

@OnClick(R.id.qrscan)
void onQRScanClicked() {
animationView.cancelAnimation();
if(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) !=
PackageManager.PERMISSION_GRANTED) {

requestPermissions(new String[]{Manifest.permission.CAMERA}, RC_CAMERA);

} else {
startActivityForResult(new Intent(getContext(), QRScanActivity.class), RC_QR);
}
}

@OnClick(R.id.restart)
void onRestartClicked() {
boolean restart = animationView.isAnimating();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.airbnb.lottie.samples;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.PointF;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.dlazaro66.qrcodereaderview.QRCodeReaderView;

import butterknife.BindView;
import butterknife.ButterKnife;

public class QRScanActivity extends AppCompatActivity
implements QRCodeReaderView.OnQRCodeReadListener {

@BindView(R.id.qrdecoderview) QRCodeReaderView qrCodeReaderView;
private Vibrator vibrator;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qrscan);
ButterKnife.bind(this);

vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

/*
* Initialize the QR Scanner component
*/
qrCodeReaderView.setQRDecodingEnabled(true);
qrCodeReaderView.setAutofocusInterval(2000L);
qrCodeReaderView.setBackCamera();
qrCodeReaderView.setOnQRCodeReadListener(this);
qrCodeReaderView.setOnClickListener(v -> qrCodeReaderView.forceAutoFocus());

}

@Override
protected void onPause() {
super.onPause();
qrCodeReaderView.stopCamera();
}

@Override public void onQRCodeRead(String s, PointF[] pointFS) {
vibrator.vibrate(100);

Intent resultIntent = new Intent();
resultIntent.putExtra(AnimationFragment.EXTRA_URL, s);
setResult(Activity.RESULT_OK, resultIntent);
finish();
}

@Override
protected void onResume() {
super.onResume();
qrCodeReaderView.startCamera();
}



}
15 changes: 15 additions & 0 deletions LottieSample/src/main/res/drawable/ic_qr_overlay.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<vector android:height="24dp" android:viewportHeight="238.0"
android:viewportWidth="237.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#00000000"
android:pathData="M3,34.84l0,-31.84l35.42,0"
android:strokeColor="#FFFFFF" android:strokeLineCap="round" android:strokeWidth="6"/>
<path android:fillColor="#00000000"
android:pathData="M233.42,34.84l0,-31.84l-35.42,0"
android:strokeColor="#FFFFFF" android:strokeLineCap="round" android:strokeWidth="6"/>
<path android:fillColor="#00000000"
android:pathData="M233.42,203l0,31.84l-35.42,0"
android:strokeColor="#FFFFFF" android:strokeLineCap="round" android:strokeWidth="6"/>
<path android:fillColor="#00000000"
android:pathData="M3,203l0,31.84l35.42,0"
android:strokeColor="#FFFFFF" android:strokeLineCap="round" android:strokeWidth="6"/>
</vector>
8 changes: 8 additions & 0 deletions LottieSample/src/main/res/drawable/ic_qr_scan.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!-- drawable/qrcode_scan.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M4,4H10V10H4V4M20,4V10H14V4H20M14,15H16V13H14V11H16V13H18V11H20V13H18V15H20V18H18V20H16V18H13V20H11V16H14V15M16,15V18H18V15H16M4,20V14H10V20H4M6,6V8H8V6H6M16,6V8H18V6H16M6,16V18H8V16H6M4,11H6V13H4V11M9,11H13V15H11V13H9V11M11,6H13V10H11V6M2,2V6H0V2A2,2 0 0,1 2,0H6V2H2M22,0A2,2 0 0,1 24,2V6H22V2H18V0H22M2,18V22H6V24H2A2,2 0 0,1 0,22V18H2M22,22V18H24V22A2,2 0 0,1 22,24H18V22H22Z" />
</vector>
45 changes: 45 additions & 0 deletions LottieSample/src/main/res/layout/activity_qrscan.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.dlazaro66.qrcodereaderview.QRCodeReaderView
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/qrdecoderview"
android:layout_width="0dp"
android:layout_height="0dp" />

<TextView
app:layout_constraintVertical_bias="0.1"
android:id="@+id/textScanPrompt"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toTopOf="parent"
android:maxWidth="220dp"
android:gravity="center"
android:textColor="#fff"
android:text="@string/scan_prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />


<ImageView
android:id="@+id/scannerOverlay"
app:layout_constraintVertical_bias="0.4"
app:layout_constraintTop_toBottomOf="@+id/textScanPrompt"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="200dp"
android:layout_height="200dp"
app:srcCompat="@drawable/ic_qr_overlay" />


</android.support.constraint.ConstraintLayout>


Loading

0 comments on commit 51a4c70

Please sign in to comment.