Permalink
Please sign in to comment.
Showing
with
1,531 additions
and 0 deletions.
- +8 −0 .gitignore
- +1 −0 .idea/.name
- +22 −0 .idea/compiler.xml
- +3 −0 .idea/copyright/profiles_settings.xml
- +6 −0 .idea/encodings.xml
- +25 −0 .idea/gradle.xml
- +62 −0 .idea/misc.xml
- +10 −0 .idea/modules.xml
- +12 −0 .idea/runConfigurations.xml
- +1 −0 app/.gitignore
- +31 −0 app/build.gradle
- +17 −0 app/proguard-rules.pro
- +13 −0 app/src/androidTest/java/com/nightonke/blurlockviewsample/ApplicationTest.java
- +22 −0 app/src/main/AndroidManifest.xml
- +29 −0 app/src/main/java/com/nightonke/blurlockviewsample/MainActivity.java
- BIN app/src/main/res/drawable/test_background.jpg
- +22 −0 app/src/main/res/layout/activity_main.xml
- BIN app/src/main/res/mipmap-hdpi/ic_launcher.png
- BIN app/src/main/res/mipmap-mdpi/ic_launcher.png
- BIN app/src/main/res/mipmap-xhdpi/ic_launcher.png
- BIN app/src/main/res/mipmap-xxhdpi/ic_launcher.png
- BIN app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
- +6 −0 app/src/main/res/values-w820dp/dimens.xml
- +6 −0 app/src/main/res/values/colors.xml
- +5 −0 app/src/main/res/values/dimens.xml
- +3 −0 app/src/main/res/values/strings.xml
- +11 −0 app/src/main/res/values/styles.xml
- +15 −0 app/src/test/java/com/nightonke/blurlockviewsample/ExampleUnitTest.java
- +1 −0 blurlockview/.gitignore
- +25 −0 blurlockview/build.gradle
- +17 −0 blurlockview/proguard-rules.pro
- +13 −0 blurlockview/src/androidTest/java/com/nightonke/blurlockview/ApplicationTest.java
- +11 −0 blurlockview/src/main/AndroidManifest.xml
- +147 −0 blurlockview/src/main/java/com/nightonke/blurlockview/BigButtonView.java
- +155 −0 blurlockview/src/main/java/com/nightonke/blurlockview/BlurLockView.java
- +170 −0 blurlockview/src/main/java/com/nightonke/blurlockview/BlurView.java
- +17 −0 blurlockview/src/main/java/com/nightonke/blurlockview/Password.java
- +20 −0 blurlockview/src/main/res/drawable/button_background.xml
- +8 −0 blurlockview/src/main/res/drawable/button_click_effect.xml
- +48 −0 blurlockview/src/main/res/layout/big_button_view.xml
- +174 −0 blurlockview/src/main/res/layout/number_blur_lock_view.xml
- BIN blurlockview/src/main/res/mipmap-hdpi/ic_launcher.png
- BIN blurlockview/src/main/res/mipmap-mdpi/ic_launcher.png
- BIN blurlockview/src/main/res/mipmap-xhdpi/ic_launcher.png
- BIN blurlockview/src/main/res/mipmap-xxhdpi/ic_launcher.png
- BIN blurlockview/src/main/res/mipmap-xxxhdpi/ic_launcher.png
- +15 −0 blurlockview/src/main/res/values/attrs.xml
- +6 −0 blurlockview/src/main/res/values/colors.xml
- +43 −0 blurlockview/src/main/res/values/defaults.xml
- +6 −0 blurlockview/src/main/res/values/dimens.xml
- +3 −0 blurlockview/src/main/res/values/strings.xml
- +8 −0 blurlockview/src/main/res/values/styles.xml
- +15 −0 blurlockview/src/test/java/com/nightonke/blurlockview/ExampleUnitTest.java
- +24 −0 build.gradle
- +18 −0 gradle.properties
- BIN gradle/wrapper/gradle-wrapper.jar
- +6 −0 gradle/wrapper/gradle-wrapper.properties
- +160 −0 gradlew
- +90 −0 gradlew.bat
- +1 −0 settings.gradle
8
.gitignore
| @@ -0,0 +1,8 @@ | ||
| +*.iml | ||
| +.gradle | ||
| +/local.properties | ||
| +/.idea/workspace.xml | ||
| +/.idea/libraries | ||
| +.DS_Store | ||
| +/build | ||
| +/captures |
1
.idea/.name
| @@ -0,0 +1 @@ | ||
| +BlurLockViewSample |
22
.idea/compiler.xml
| @@ -0,0 +1,22 @@ | ||
| +<?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> |
3
.idea/copyright/profiles_settings.xml
| @@ -0,0 +1,3 @@ | ||
| +<component name="CopyrightManager"> | ||
| + <settings default="" /> | ||
| +</component> |
6
.idea/encodings.xml
| @@ -0,0 +1,6 @@ | ||
| +<?xml version="1.0" encoding="UTF-8"?> | ||
| +<project version="4"> | ||
| + <component name="Encoding"> | ||
| + <file url="PROJECT" charset="UTF-8" /> | ||
| + </component> | ||
| +</project> |
25
.idea/gradle.xml
| @@ -0,0 +1,25 @@ | ||
| +<?xml version="1.0" encoding="UTF-8"?> | ||
| +<project version="4"> | ||
| + <component name="GradleSettings"> | ||
| + <option name="linkedExternalProjectsSettings"> | ||
| + <GradleProjectSettings> | ||
| + <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||
| + <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||
| + <option name="modules"> | ||
| + <set> | ||
| + <option value="$PROJECT_DIR$" /> | ||
| + <option value="$PROJECT_DIR$/app" /> | ||
| + <option value="$PROJECT_DIR$/blurlockview" /> | ||
| + </set> | ||
| + </option> | ||
| + <option name="myModules"> | ||
| + <set> | ||
| + <option value="$PROJECT_DIR$" /> | ||
| + <option value="$PROJECT_DIR$/app" /> | ||
| + <option value="$PROJECT_DIR$/blurlockview" /> | ||
| + </set> | ||
| + </option> | ||
| + </GradleProjectSettings> | ||
| + </option> | ||
| + </component> | ||
| +</project> |
62
.idea/misc.xml
| @@ -0,0 +1,62 @@ | ||
| +<?xml version="1.0" encoding="UTF-8"?> | ||
| +<project version="4"> | ||
| + <component name="EntryPointsManager"> | ||
| + <entry_points version="2.0" /> | ||
| + </component> | ||
| + <component name="NullableNotNullManager"> | ||
| + <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> | ||
| + <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> | ||
| + <option name="myNullables"> | ||
| + <value> | ||
| + <list size="4"> | ||
| + <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> | ||
| + <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> | ||
| + <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> | ||
| + <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> | ||
| + </list> | ||
| + </value> | ||
| + </option> | ||
| + <option name="myNotNulls"> | ||
| + <value> | ||
| + <list size="4"> | ||
| + <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> | ||
| + <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> | ||
| + <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> | ||
| + <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> | ||
| + </list> | ||
| + </value> | ||
| + </option> | ||
| + </component> | ||
| + <component name="ProjectLevelVcsManager" settingsEditedManually="false"> | ||
| + <OptionsSetting value="true" id="Add" /> | ||
| + <OptionsSetting value="true" id="Remove" /> | ||
| + <OptionsSetting value="true" id="Checkout" /> | ||
| + <OptionsSetting value="true" id="Update" /> | ||
| + <OptionsSetting value="true" id="Status" /> | ||
| + <OptionsSetting value="true" id="Edit" /> | ||
| + <ConfirmationsSetting value="0" id="Add" /> | ||
| + <ConfirmationsSetting value="0" id="Remove" /> | ||
| + </component> | ||
| + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||
| + <output url="file://$PROJECT_DIR$/build/classes" /> | ||
| + </component> | ||
| + <component name="ProjectType"> | ||
| + <option name="id" value="Android" /> | ||
| + </component> | ||
| + <component name="masterDetails"> | ||
| + <states> | ||
| + <state key="ProjectJDKs.UI"> | ||
| + <settings> | ||
| + <last-edited>1.8</last-edited> | ||
| + <splitter-proportions> | ||
| + <option name="proportions"> | ||
| + <list> | ||
| + <option value="0.2" /> | ||
| + </list> | ||
| + </option> | ||
| + </splitter-proportions> | ||
| + </settings> | ||
| + </state> | ||
| + </states> | ||
| + </component> | ||
| +</project> |
10
.idea/modules.xml
| @@ -0,0 +1,10 @@ | ||
| +<?xml version="1.0" encoding="UTF-8"?> | ||
| +<project version="4"> | ||
| + <component name="ProjectModuleManager"> | ||
| + <modules> | ||
| + <module fileurl="file://$PROJECT_DIR$/BlurLockViewSample.iml" filepath="$PROJECT_DIR$/BlurLockViewSample.iml" /> | ||
| + <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> | ||
| + <module fileurl="file://$PROJECT_DIR$/blurlockview/blurlockview.iml" filepath="$PROJECT_DIR$/blurlockview/blurlockview.iml" /> | ||
| + </modules> | ||
| + </component> | ||
| +</project> |
12
.idea/runConfigurations.xml
| @@ -0,0 +1,12 @@ | ||
| +<?xml version="1.0" encoding="UTF-8"?> | ||
| +<project version="4"> | ||
| + <component name="RunConfigurationProducerService"> | ||
| + <option name="ignoredProducers"> | ||
| + <set> | ||
| + <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> | ||
| + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> | ||
| + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> | ||
| + </set> | ||
| + </option> | ||
| + </component> | ||
| +</project> |
1
app/.gitignore
| @@ -0,0 +1 @@ | ||
| +/build |
31
app/build.gradle
| @@ -0,0 +1,31 @@ | ||
| +apply plugin: 'com.android.application' | ||
| + | ||
| +android { | ||
| + compileSdkVersion 23 | ||
| + buildToolsVersion "23.0.2" | ||
| + | ||
| + defaultConfig { | ||
| + applicationId "com.nightonke.blurlockviewsample" | ||
| + minSdkVersion 17 | ||
| + targetSdkVersion 23 | ||
| + versionCode 1 | ||
| + versionName "1.0" | ||
| + } | ||
| + buildTypes { | ||
| + release { | ||
| + minifyEnabled false | ||
| + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +dependencies { | ||
| + compile fileTree(include: ['*.jar'], dir: 'libs') | ||
| + testCompile 'junit:junit:4.12' | ||
| + compile 'com.android.support:appcompat-v7:23.2.0' | ||
| + compile project(':blurlockview') | ||
| + | ||
| + compile('com.github.afollestad.material-dialogs:core:0.8.5.7@aar') { | ||
| + transitive = true | ||
| + } | ||
| +} |
17
app/proguard-rules.pro
| @@ -0,0 +1,17 @@ | ||
| +# Add project specific ProGuard rules here. | ||
| +# By default, the flags in this file are appended to flags specified | ||
| +# in D:\Programs\SDK/tools/proguard/proguard-android.txt | ||
| +# You can edit the include path and order by changing the proguardFiles | ||
| +# directive in build.gradle. | ||
| +# | ||
| +# For more details, see | ||
| +# http://developer.android.com/guide/developing/tools/proguard.html | ||
| + | ||
| +# Add any project specific keep options here: | ||
| + | ||
| +# If your project uses WebView with JS, uncomment the following | ||
| +# and specify the fully qualified class name to the JavaScript interface | ||
| +# class: | ||
| +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
| +# public *; | ||
| +#} |
13
app/src/androidTest/java/com/nightonke/blurlockviewsample/ApplicationTest.java
| @@ -0,0 +1,13 @@ | ||
| +package com.nightonke.blurlockviewsample; | ||
| + | ||
| +import android.app.Application; | ||
| +import android.test.ApplicationTestCase; | ||
| + | ||
| +/** | ||
| + * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a> | ||
| + */ | ||
| +public class ApplicationTest extends ApplicationTestCase<Application> { | ||
| + public ApplicationTest() { | ||
| + super(Application.class); | ||
| + } | ||
| +} |
22
app/src/main/AndroidManifest.xml
| @@ -0,0 +1,22 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + package="com.nightonke.blurlockviewsample"> | ||
| + | ||
| + <application | ||
| + android:allowBackup="true" | ||
| + android:icon="@mipmap/ic_launcher" | ||
| + android:label="@string/app_name" | ||
| + android:supportsRtl="true" | ||
| + android:theme="@style/AppTheme"> | ||
| + <activity | ||
| + android:name=".MainActivity" | ||
| + android:theme="@style/Theme.AppCompat.NoActionBar"> | ||
| + <intent-filter> | ||
| + <action android:name="android.intent.action.MAIN" /> | ||
| + | ||
| + <category android:name="android.intent.category.LAUNCHER" /> | ||
| + </intent-filter> | ||
| + </activity> | ||
| + </application> | ||
| + | ||
| +</manifest> |
29
app/src/main/java/com/nightonke/blurlockviewsample/MainActivity.java
| @@ -0,0 +1,29 @@ | ||
| +package com.nightonke.blurlockviewsample; | ||
| + | ||
| +import android.support.v7.app.AppCompatActivity; | ||
| +import android.os.Bundle; | ||
| +import android.view.Window; | ||
| +import android.view.WindowManager; | ||
| + | ||
| +import com.nightonke.blurlockview.BlurLockView; | ||
| + | ||
| +public class MainActivity extends AppCompatActivity { | ||
| + | ||
| + private BlurLockView blurLockView; | ||
| + | ||
| + @Override | ||
| + protected void onCreate(Bundle savedInstanceState) { | ||
| + super.onCreate(savedInstanceState); | ||
| + | ||
| + requestWindowFeature(Window.FEATURE_NO_TITLE); | ||
| + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, | ||
| + WindowManager.LayoutParams.FLAG_FULLSCREEN); | ||
| + | ||
| + setContentView(R.layout.activity_main); | ||
| + | ||
| + blurLockView = (BlurLockView)findViewById(R.id.blurlockview); | ||
| + blurLockView.setBlurredView(findViewById(R.id.image)); | ||
| + blurLockView.setCorrectPassword("1234"); | ||
| + blurLockView.invalidate(); | ||
| + } | ||
| +} |
BIN
app/src/main/res/drawable/test_background.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22
app/src/main/res/layout/activity_main.xml
| @@ -0,0 +1,22 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + xmlns:tools="http://schemas.android.com/tools" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="match_parent" | ||
| + tools:context="com.nightonke.blurlockviewsample.MainActivity"> | ||
| + | ||
| + <ImageView | ||
| + android:id="@+id/image" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="match_parent" | ||
| + android:src="@drawable/test_background" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BlurLockView | ||
| + android:id="@+id/blurlockview" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="match_parent" | ||
| + /> | ||
| + | ||
| + | ||
| +</FrameLayout> |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6
app/src/main/res/values-w820dp/dimens.xml
| @@ -0,0 +1,6 @@ | ||
| +<resources> | ||
| + <!-- Example customization of dimensions originally defined in res/values/dimens.xml | ||
| + (such as screen margins) for screens with more than 820dp of available width. This | ||
| + would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> | ||
| + <dimen name="activity_horizontal_margin">64dp</dimen> | ||
| +</resources> |
6
app/src/main/res/values/colors.xml
| @@ -0,0 +1,6 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<resources> | ||
| + <color name="colorPrimary">#3F51B5</color> | ||
| + <color name="colorPrimaryDark">#303F9F</color> | ||
| + <color name="colorAccent">#FF4081</color> | ||
| +</resources> |
5
app/src/main/res/values/dimens.xml
| @@ -0,0 +1,5 @@ | ||
| +<resources> | ||
| + <!-- Default screen margins, per the Android Design guidelines. --> | ||
| + <dimen name="activity_horizontal_margin">16dp</dimen> | ||
| + <dimen name="activity_vertical_margin">16dp</dimen> | ||
| +</resources> |
3
app/src/main/res/values/strings.xml
| @@ -0,0 +1,3 @@ | ||
| +<resources> | ||
| + <string name="app_name">BlurLockViewSample</string> | ||
| +</resources> |
11
app/src/main/res/values/styles.xml
| @@ -0,0 +1,11 @@ | ||
| +<resources> | ||
| + | ||
| + <!-- Base application theme. --> | ||
| + <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> | ||
| + <!-- Customize your theme here. --> | ||
| + <item name="colorPrimary">@color/colorPrimary</item> | ||
| + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> | ||
| + <item name="colorAccent">@color/colorAccent</item> | ||
| + </style> | ||
| + | ||
| +</resources> |
15
app/src/test/java/com/nightonke/blurlockviewsample/ExampleUnitTest.java
| @@ -0,0 +1,15 @@ | ||
| +package com.nightonke.blurlockviewsample; | ||
| + | ||
| +import org.junit.Test; | ||
| + | ||
| +import static org.junit.Assert.*; | ||
| + | ||
| +/** | ||
| + * To work on unit tests, switch the Test Artifact in the Build Variants view. | ||
| + */ | ||
| +public class ExampleUnitTest { | ||
| + @Test | ||
| + public void addition_isCorrect() throws Exception { | ||
| + assertEquals(4, 2 + 2); | ||
| + } | ||
| +} |
1
blurlockview/.gitignore
| @@ -0,0 +1 @@ | ||
| +/build |
25
blurlockview/build.gradle
| @@ -0,0 +1,25 @@ | ||
| +apply plugin: 'com.android.library' | ||
| + | ||
| +android { | ||
| + compileSdkVersion 23 | ||
| + buildToolsVersion "23.0.2" | ||
| + | ||
| + defaultConfig { | ||
| + minSdkVersion 17 | ||
| + targetSdkVersion 23 | ||
| + versionCode 1 | ||
| + versionName "1.0" | ||
| + } | ||
| + buildTypes { | ||
| + release { | ||
| + minifyEnabled false | ||
| + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +dependencies { | ||
| + compile fileTree(dir: 'libs', include: ['*.jar']) | ||
| + testCompile 'junit:junit:4.12' | ||
| + compile 'com.android.support:appcompat-v7:23.2.0' | ||
| +} |
17
blurlockview/proguard-rules.pro
| @@ -0,0 +1,17 @@ | ||
| +# Add project specific ProGuard rules here. | ||
| +# By default, the flags in this file are appended to flags specified | ||
| +# in D:\Programs\SDK/tools/proguard/proguard-android.txt | ||
| +# You can edit the include path and order by changing the proguardFiles | ||
| +# directive in build.gradle. | ||
| +# | ||
| +# For more details, see | ||
| +# http://developer.android.com/guide/developing/tools/proguard.html | ||
| + | ||
| +# Add any project specific keep options here: | ||
| + | ||
| +# If your project uses WebView with JS, uncomment the following | ||
| +# and specify the fully qualified class name to the JavaScript interface | ||
| +# class: | ||
| +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
| +# public *; | ||
| +#} |
13
blurlockview/src/androidTest/java/com/nightonke/blurlockview/ApplicationTest.java
| @@ -0,0 +1,13 @@ | ||
| +package com.nightonke.blurlockview; | ||
| + | ||
| +import android.app.Application; | ||
| +import android.test.ApplicationTestCase; | ||
| + | ||
| +/** | ||
| + * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a> | ||
| + */ | ||
| +public class ApplicationTest extends ApplicationTestCase<Application> { | ||
| + public ApplicationTest() { | ||
| + super(Application.class); | ||
| + } | ||
| +} |
11
blurlockview/src/main/AndroidManifest.xml
| @@ -0,0 +1,11 @@ | ||
| +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + package="com.nightonke.blurlockview"> | ||
| + | ||
| + <application | ||
| + android:allowBackup="true" | ||
| + android:label="@string/app_name" | ||
| + android:supportsRtl="true"> | ||
| + | ||
| + </application> | ||
| + | ||
| +</manifest> |
147
blurlockview/src/main/java/com/nightonke/blurlockview/BigButtonView.java
| @@ -0,0 +1,147 @@ | ||
| +package com.nightonke.blurlockview; | ||
| + | ||
| +import android.animation.ObjectAnimator; | ||
| +import android.content.Context; | ||
| +import android.content.res.Resources; | ||
| +import android.support.v4.content.ContextCompat; | ||
| +import android.util.AttributeSet; | ||
| +import android.util.TypedValue; | ||
| +import android.view.Gravity; | ||
| +import android.view.LayoutInflater; | ||
| +import android.view.MotionEvent; | ||
| +import android.view.View; | ||
| +import android.view.ViewGroup; | ||
| +import android.widget.FrameLayout; | ||
| +import android.widget.LinearLayout; | ||
| +import android.widget.TextView; | ||
| + | ||
| +/** | ||
| + * Created by Weiping on 2016/3/16. | ||
| + */ | ||
| +public class BigButtonView extends FrameLayout { | ||
| + | ||
| + private FrameLayout frameLayout; | ||
| + private View clickEffect; | ||
| + private TextView text; | ||
| + private TextView subText; | ||
| + private String textString = ""; | ||
| + private String subTextString = ""; | ||
| + private ObjectAnimator clickEffectAnimator; | ||
| + private OnPressListener onPressListener; | ||
| + | ||
| + public BigButtonView(Context context) { | ||
| + this(context, null); | ||
| + } | ||
| + | ||
| + public BigButtonView(Context context, AttributeSet attrs) { | ||
| + super(context, attrs); | ||
| + | ||
| + LayoutInflater.from(context).inflate(R.layout.big_button_view, this, true); | ||
| + | ||
| + Resources resources = getResources(); | ||
| + | ||
| + frameLayout = (FrameLayout)findViewById(R.id.frame_layout); | ||
| + | ||
| + text = (TextView)findViewById(R.id.text); | ||
| + text.setText(textString); | ||
| + text.setTextColor(ContextCompat.getColor(context, R.color.default_big_button_text_color)); | ||
| + text.setTextSize(resources.getInteger(R.integer.default_big_button_text_size)); | ||
| + | ||
| + subText = (TextView)findViewById(R.id.sub_text); | ||
| + subText.setText(subTextString); | ||
| + subText.setTextColor(ContextCompat.getColor(context, R.color.default_big_button_sub_text_color)); | ||
| + subText.setTextSize(resources.getInteger(R.integer.default_big_button_sub_text_size)); | ||
| + | ||
| + clickEffect = findViewById(R.id.click_effect); | ||
| + clickEffect.setAlpha(0); | ||
| + clickEffectAnimator = ObjectAnimator.ofFloat(clickEffect, "alpha", 1f, 0f); | ||
| + clickEffectAnimator.setDuration(500); | ||
| + } | ||
| + | ||
| + public void setOnPressListener(OnPressListener onPressListener) { | ||
| + this.onPressListener = onPressListener; | ||
| + } | ||
| + | ||
| + public void setWidth(int width) { | ||
| + ViewGroup.LayoutParams layoutParams = frameLayout.getLayoutParams(); | ||
| + layoutParams.width = width; | ||
| + frameLayout.setLayoutParams(layoutParams); | ||
| + } | ||
| + | ||
| + public void setHeight(int height) { | ||
| + ViewGroup.LayoutParams layoutParams = frameLayout.getLayoutParams(); | ||
| + layoutParams.height = height; | ||
| + frameLayout.setLayoutParams(layoutParams); | ||
| + } | ||
| + | ||
| + /** | ||
| + * Set the string of the text. | ||
| + * | ||
| + * @param textString The new string. | ||
| + */ | ||
| + public void setText(String textString) { | ||
| + this.textString = textString; | ||
| + if (text != null) text.setText(textString); | ||
| + } | ||
| + | ||
| + /** | ||
| + * Set the string of the sub text. | ||
| + * | ||
| + * @param subTextString The new string. | ||
| + */ | ||
| + public void setSubText(String subTextString) { | ||
| + this.subTextString = subTextString; | ||
| + if (subText != null) subText.setText(subTextString); | ||
| + } | ||
| + | ||
| + /** | ||
| + * Set the visibility of sub textview. | ||
| + * | ||
| + * @param visibility The visibility. | ||
| + */ | ||
| + public void setSubTextVisibility(int visibility) { | ||
| + if (visibility == GONE) { | ||
| + text.setGravity(Gravity.CENTER); | ||
| + text.setLayoutParams(new LinearLayout.LayoutParams( | ||
| + LinearLayout.LayoutParams.MATCH_PARENT, | ||
| + 0, | ||
| + 10)); | ||
| + } else { | ||
| + text.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); | ||
| + text.setLayoutParams(new LinearLayout.LayoutParams( | ||
| + LinearLayout.LayoutParams.MATCH_PARENT, | ||
| + 0, | ||
| + 7)); | ||
| + } | ||
| + subText.setVisibility(visibility); | ||
| + } | ||
| + | ||
| + /** | ||
| + * Perform the click effect. | ||
| + * | ||
| + * @param event MotionEvent. | ||
| + * @return | ||
| + */ | ||
| + @Override | ||
| + public boolean dispatchTouchEvent(MotionEvent event) { | ||
| + if (event.getPointerCount() > 1) return true; | ||
| + switch(event.getAction()){ | ||
| + case MotionEvent.ACTION_DOWN: | ||
| + if (onPressListener != null) onPressListener.onPress(textString); | ||
| + clickEffectAnimator.cancel(); | ||
| + clickEffect.setAlpha(1); | ||
| + break; | ||
| + case MotionEvent.ACTION_UP: | ||
| + clickEffectAnimator.start(); | ||
| + break; | ||
| + default:break; | ||
| + } | ||
| + | ||
| + return super.dispatchTouchEvent(event); | ||
| + } | ||
| + | ||
| + public interface OnPressListener { | ||
| + void onPress(String string); | ||
| + } | ||
| + | ||
| +} |
155
blurlockview/src/main/java/com/nightonke/blurlockview/BlurLockView.java
| @@ -0,0 +1,155 @@ | ||
| +package com.nightonke.blurlockview; | ||
| + | ||
| +import android.content.Context; | ||
| +import android.util.AttributeSet; | ||
| +import android.view.LayoutInflater; | ||
| +import android.view.View; | ||
| +import android.widget.FrameLayout; | ||
| +import android.widget.TextView; | ||
| + | ||
| +import java.util.Stack; | ||
| + | ||
| +/** | ||
| + * Created by Weiping on 2016/3/16. | ||
| + */ | ||
| +public class BlurLockView extends FrameLayout | ||
| + implements BigButtonView.OnPressListener { | ||
| + | ||
| + private Password type = Password.NUMBER; | ||
| + | ||
| + private int passwordLength = 4; | ||
| + private String correctPassword = null; | ||
| + private int errorInputTimes = 0; | ||
| + private boolean returnInputPasswordAlways = false; | ||
| + private boolean autoQuit = true; | ||
| + | ||
| + private Stack<String> passwordStack = new Stack<>(); | ||
| + | ||
| + private BigButtonView[] bigButtonViews; | ||
| + private BlurView mBlurView; | ||
| + private TextView leftButton; | ||
| + private TextView rightButton; | ||
| + | ||
| + private OnLeftButtonClickListener onLeftButtonClickListener; | ||
| + private OnPasswordInputListener onPasswordInputListener; | ||
| + | ||
| + public BlurLockView(Context context) { | ||
| + this(context, null); | ||
| + } | ||
| + | ||
| + public BlurLockView(Context context, AttributeSet attrs) { | ||
| + super(context, attrs); | ||
| + | ||
| + if (type.equals(Password.NUMBER)) { | ||
| + // is number password | ||
| + LayoutInflater.from(context).inflate(R.layout.number_blur_lock_view, this, true); | ||
| + | ||
| + bigButtonViews = new BigButtonView[10]; | ||
| + bigButtonViews[0] = (BigButtonView)findViewById(R.id.button_0); | ||
| + bigButtonViews[1] = (BigButtonView)findViewById(R.id.button_1); | ||
| + bigButtonViews[2] = (BigButtonView)findViewById(R.id.button_2); | ||
| + bigButtonViews[3] = (BigButtonView)findViewById(R.id.button_3); | ||
| + bigButtonViews[4] = (BigButtonView)findViewById(R.id.button_4); | ||
| + bigButtonViews[5] = (BigButtonView)findViewById(R.id.button_5); | ||
| + bigButtonViews[6] = (BigButtonView)findViewById(R.id.button_6); | ||
| + bigButtonViews[7] = (BigButtonView)findViewById(R.id.button_7); | ||
| + bigButtonViews[8] = (BigButtonView)findViewById(R.id.button_8); | ||
| + bigButtonViews[9] = (BigButtonView)findViewById(R.id.button_9); | ||
| + | ||
| + String[] texts = getResources().getStringArray(R.array.default_big_button_text); | ||
| + String[] subTexts = getResources().getStringArray(R.array.default_big_button_sub_text); | ||
| + for (int i = 0; i < 10; i++) { | ||
| + bigButtonViews[i].setOnPressListener(this); | ||
| + bigButtonViews[i].setText(texts[i]); | ||
| + bigButtonViews[i].setSubText(subTexts[i]); | ||
| + } | ||
| + | ||
| + bigButtonViews[0].setSubTextVisibility(View.GONE); | ||
| + bigButtonViews[1].setSubTextVisibility(View.INVISIBLE); | ||
| + } | ||
| + | ||
| + mBlurView = (BlurView)findViewById(R.id.blurview); | ||
| + leftButton = (TextView)findViewById(R.id.left_button); | ||
| + leftButton.setOnClickListener(new OnClickListener() { | ||
| + @Override | ||
| + public void onClick(View v) { | ||
| + if (onLeftButtonClickListener != null) onLeftButtonClickListener.onClick(); | ||
| + } | ||
| + }); | ||
| + rightButton = (TextView)findViewById(R.id.right_button); | ||
| + rightButton.setOnClickListener(new OnClickListener() { | ||
| + @Override | ||
| + public void onClick(View v) { | ||
| + if (passwordStack.size() > 0) passwordStack.pop(); | ||
| + } | ||
| + }); | ||
| + } | ||
| + | ||
| + public void setBlurredView(View blurredView) { | ||
| + mBlurView.setBlurredView(blurredView); | ||
| + } | ||
| + | ||
| + @Override | ||
| + public void onPress(String string) { | ||
| + if (correctPassword == null) { | ||
| + throw new RuntimeException("The correct password has NOT been set!"); | ||
| + } | ||
| + passwordStack.push(string); | ||
| + StringBuilder nowPassword = new StringBuilder(""); | ||
| + for (String s : passwordStack) { | ||
| + nowPassword.append(s); | ||
| + } | ||
| + String nowPasswordString = nowPassword.toString(); | ||
| + if (correctPassword.equals(nowPasswordString)) { | ||
| + // correct password | ||
| + if (onPasswordInputListener != null) | ||
| + onPasswordInputListener.correct(nowPasswordString); | ||
| + if (autoQuit) { | ||
| + // perform the quit animation | ||
| + } else { | ||
| + | ||
| + } | ||
| + } else { | ||
| + if (correctPassword.length() > nowPasswordString.length()) { | ||
| + // input right now | ||
| + if (onPasswordInputListener != null) | ||
| + onPasswordInputListener.input(nowPasswordString); | ||
| + } else { | ||
| + // incorrect password | ||
| + if (onPasswordInputListener != null) | ||
| + onPasswordInputListener.incorrect(nowPasswordString); | ||
| + // perform the clear animation | ||
| + } | ||
| + } | ||
| + } | ||
| + | ||
| + public void setType(Password type) { | ||
| + this.type = type; | ||
| + } | ||
| + | ||
| + public void setCorrectPassword(String correctPassword) { | ||
| + this.correctPassword = correctPassword; | ||
| + } | ||
| + | ||
| + public void setErrorInputTimes(int errorInputTimes) { | ||
| + this.errorInputTimes = errorInputTimes; | ||
| + } | ||
| + | ||
| + public void setReturnInputPasswordAlways(boolean returnInputPasswordAlways) { | ||
| + this.returnInputPasswordAlways = returnInputPasswordAlways; | ||
| + } | ||
| + | ||
| + public void setAutoQuit(boolean autoQuit) { | ||
| + this.autoQuit = autoQuit; | ||
| + } | ||
| + | ||
| + public interface OnPasswordInputListener { | ||
| + void correct(String inputPassword); | ||
| + void incorrect(String inputPassword); | ||
| + void input(String inputPassword); | ||
| + } | ||
| + | ||
| + public interface OnLeftButtonClickListener { | ||
| + void onClick(); | ||
| + } | ||
| +} |
170
blurlockview/src/main/java/com/nightonke/blurlockview/BlurView.java
| @@ -0,0 +1,170 @@ | ||
| +package com.nightonke.blurlockview; | ||
| + | ||
| +import android.content.Context; | ||
| +import android.content.res.Resources; | ||
| +import android.content.res.TypedArray; | ||
| +import android.graphics.Bitmap; | ||
| +import android.graphics.Canvas; | ||
| +import android.graphics.Color; | ||
| +import android.graphics.drawable.ColorDrawable; | ||
| +import android.renderscript.Allocation; | ||
| +import android.renderscript.Element; | ||
| +import android.renderscript.RenderScript; | ||
| +import android.renderscript.ScriptIntrinsicBlur; | ||
| +import android.util.AttributeSet; | ||
| +import android.view.View; | ||
| + | ||
| +/** | ||
| + * Created by Weiping on 2016/3/16. | ||
| + */ | ||
| +public class BlurView extends View { | ||
| + | ||
| + private int mDownsampleFactor; | ||
| + private int mOverlayColor; | ||
| + | ||
| + private View mBlurredView; | ||
| + private int mBlurredViewWidth, mBlurredViewHeight; | ||
| + | ||
| + private boolean mDownsampleFactorChanged; | ||
| + private Bitmap mBitmapToBlur, mBlurredBitmap; | ||
| + private Canvas mBlurringCanvas; | ||
| + private RenderScript mRenderScript; | ||
| + private ScriptIntrinsicBlur mBlurScript; | ||
| + private Allocation mBlurInput, mBlurOutput; | ||
| + | ||
| + public BlurView(Context context) { | ||
| + this(context, null); | ||
| + } | ||
| + | ||
| + public BlurView(Context context, AttributeSet attrs) { | ||
| + super(context, attrs); | ||
| + | ||
| + final Resources res = getResources(); | ||
| + final int defaultBlurRadius = res.getInteger(R.integer.default_blur_radius); | ||
| + final int defaultDownsampleFactor = res.getInteger(R.integer.default_downsample_factor); | ||
| + final int defaultOverlayColor = res.getColor(R.color.default_overlay_color); | ||
| + | ||
| + initializeRenderScript(context); | ||
| + | ||
| + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BlurView); | ||
| + setBlurRadius(a.getInt(R.styleable.BlurView_blurRadius, defaultBlurRadius)); | ||
| + setDownsampleFactor(a.getInt(R.styleable.BlurView_downsampleFactor, | ||
| + defaultDownsampleFactor)); | ||
| + setOverlayColor(a.getColor(R.styleable.BlurView_overlayColor, defaultOverlayColor)); | ||
| + a.recycle(); | ||
| + } | ||
| + | ||
| + public void setBlurredView(View blurredView) { | ||
| + mBlurredView = blurredView; | ||
| + } | ||
| + | ||
| + @Override | ||
| + protected void onDraw(Canvas canvas) { | ||
| + super.onDraw(canvas); | ||
| + if (mBlurredView != null) { | ||
| + if (prepare()) { | ||
| + // If the background of the blurred view is a color drawable, we use it to clear | ||
| + // the blurring canvas, which ensures that edges of the child views are blurred | ||
| + // as well; otherwise we clear the blurring canvas with a transparent color. | ||
| + if (mBlurredView.getBackground() != null && mBlurredView.getBackground() instanceof ColorDrawable) { | ||
| + mBitmapToBlur.eraseColor(((ColorDrawable) mBlurredView.getBackground()).getColor()); | ||
| + } else { | ||
| + mBitmapToBlur.eraseColor(Color.TRANSPARENT); | ||
| + } | ||
| + | ||
| + mBlurredView.draw(mBlurringCanvas); | ||
| + blur(); | ||
| + | ||
| + canvas.save(); | ||
| + canvas.translate(mBlurredView.getX() - getX(), mBlurredView.getY() - getY()); | ||
| + canvas.scale(mDownsampleFactor, mDownsampleFactor); | ||
| + canvas.drawBitmap(mBlurredBitmap, 0, 0, null); | ||
| + canvas.restore(); | ||
| + } | ||
| + canvas.drawColor(mOverlayColor); | ||
| + } | ||
| + } | ||
| + | ||
| + public void setBlurRadius(int radius) { | ||
| + mBlurScript.setRadius(radius); | ||
| + } | ||
| + | ||
| + public void setDownsampleFactor(int factor) { | ||
| + if (factor <= 0) { | ||
| + throw new IllegalArgumentException("Downsample factor must be greater than 0."); | ||
| + } | ||
| + | ||
| + if (mDownsampleFactor != factor) { | ||
| + mDownsampleFactor = factor; | ||
| + mDownsampleFactorChanged = true; | ||
| + } | ||
| + } | ||
| + | ||
| + public void setOverlayColor(int color) { | ||
| + mOverlayColor = color; | ||
| + } | ||
| + | ||
| + private void initializeRenderScript(Context context) { | ||
| + mRenderScript = RenderScript.create(context); | ||
| + mBlurScript = ScriptIntrinsicBlur.create(mRenderScript, Element.U8_4(mRenderScript)); | ||
| + } | ||
| + | ||
| + protected boolean prepare() { | ||
| + final int width = mBlurredView.getWidth(); | ||
| + final int height = mBlurredView.getHeight(); | ||
| + | ||
| + if (mBlurringCanvas == null || mDownsampleFactorChanged | ||
| + || mBlurredViewWidth != width || mBlurredViewHeight != height) { | ||
| + mDownsampleFactorChanged = false; | ||
| + | ||
| + mBlurredViewWidth = width; | ||
| + mBlurredViewHeight = height; | ||
| + | ||
| + int scaledWidth = width / mDownsampleFactor; | ||
| + int scaledHeight = height / mDownsampleFactor; | ||
| + | ||
| + // The following manipulation is to avoid some RenderScript artifacts at the edge. | ||
| + scaledWidth = scaledWidth - scaledWidth % 4 + 4; | ||
| + scaledHeight = scaledHeight - scaledHeight % 4 + 4; | ||
| + | ||
| + if (mBlurredBitmap == null | ||
| + || mBlurredBitmap.getWidth() != scaledWidth | ||
| + || mBlurredBitmap.getHeight() != scaledHeight) { | ||
| + mBitmapToBlur = Bitmap.createBitmap(scaledWidth, scaledHeight, | ||
| + Bitmap.Config.ARGB_8888); | ||
| + if (mBitmapToBlur == null) { | ||
| + return false; | ||
| + } | ||
| + | ||
| + mBlurredBitmap = Bitmap.createBitmap(scaledWidth, scaledHeight, | ||
| + Bitmap.Config.ARGB_8888); | ||
| + if (mBlurredBitmap == null) { | ||
| + return false; | ||
| + } | ||
| + } | ||
| + | ||
| + mBlurringCanvas = new Canvas(mBitmapToBlur); | ||
| + mBlurringCanvas.scale(1f / mDownsampleFactor, 1f / mDownsampleFactor); | ||
| + mBlurInput = Allocation.createFromBitmap(mRenderScript, mBitmapToBlur, | ||
| + Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); | ||
| + mBlurOutput = Allocation.createTyped(mRenderScript, mBlurInput.getType()); | ||
| + } | ||
| + return true; | ||
| + } | ||
| + | ||
| + protected void blur() { | ||
| + mBlurInput.copyFrom(mBitmapToBlur); | ||
| + mBlurScript.setInput(mBlurInput); | ||
| + mBlurScript.forEach(mBlurOutput); | ||
| + mBlurOutput.copyTo(mBlurredBitmap); | ||
| + } | ||
| + | ||
| + @Override | ||
| + protected void onDetachedFromWindow() { | ||
| + super.onDetachedFromWindow(); | ||
| + if (mRenderScript != null) { | ||
| + mRenderScript.destroy(); | ||
| + } | ||
| + } | ||
| + | ||
| +} |
17
blurlockview/src/main/java/com/nightonke/blurlockview/Password.java
| @@ -0,0 +1,17 @@ | ||
| +package com.nightonke.blurlockview; | ||
| + | ||
| +/** | ||
| + * Created by Weiping on 2016/3/17. | ||
| + */ | ||
| +public enum Password { | ||
| + | ||
| + NUMBER(0), | ||
| + TEXT(1); | ||
| + | ||
| + private int type; | ||
| + | ||
| + private Password(int type) { | ||
| + this.type = type; | ||
| + } | ||
| + | ||
| +} |
20
blurlockview/src/main/res/drawable/button_background.xml
| @@ -0,0 +1,20 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<selector xmlns:android="http://schemas.android.com/apk/res/android" > | ||
| + <item android:state_pressed="true" > | ||
| + <shape android:shape="oval" > | ||
| + | ||
| + </shape> | ||
| + </item> | ||
| + <item android:state_focused="true"> | ||
| + <shape android:shape="oval" > | ||
| + <stroke android:width="1.5dip" android:color="@color/default_button_press" /> | ||
| + <solid android:color="@android:color/transparent"/> | ||
| + </shape> | ||
| + </item> | ||
| + <item > | ||
| + <shape android:shape="oval" > | ||
| + <stroke android:width="1.5dip" android:color="@color/default_button_press" /> | ||
| + <solid android:color="@android:color/transparent"/> | ||
| + </shape> | ||
| + </item> | ||
| +</selector> |
8
blurlockview/src/main/res/drawable/button_click_effect.xml
| @@ -0,0 +1,8 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<selector xmlns:android="http://schemas.android.com/apk/res/android" > | ||
| + <item > | ||
| + <shape android:shape="oval" > | ||
| + <solid android:color="@color/default_button_press"/> | ||
| + </shape> | ||
| + </item> | ||
| +</selector> |
48
blurlockview/src/main/res/layout/big_button_view.xml
| @@ -0,0 +1,48 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<FrameLayout | ||
| + xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + android:id="@+id/frame_layout" | ||
| + android:layout_width="@dimen/default_big_button_width" | ||
| + android:layout_height="@dimen/default_big_button_height" | ||
| + android:background="@drawable/button_background" | ||
| + android:clickable="true" | ||
| + > | ||
| + | ||
| + <View | ||
| + android:id="@+id/click_effect" | ||
| + android:layout_width="@dimen/default_big_button_width" | ||
| + android:layout_height="@dimen/default_big_button_height" | ||
| + android:background="@drawable/button_click_effect" | ||
| + /> | ||
| + | ||
| + <LinearLayout | ||
| + android:layout_height="match_parent" | ||
| + android:layout_width="match_parent" | ||
| + android:orientation="vertical" | ||
| + android:layout_gravity="center" | ||
| + android:weightSum="10" | ||
| + > | ||
| + | ||
| + <TextView | ||
| + android:id="@+id/text" | ||
| + android:layout_height="0dp" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_weight="7" | ||
| + android:text="5" | ||
| + android:textSize="35sp" | ||
| + android:gravity="center_horizontal|bottom" | ||
| + /> | ||
| + | ||
| + <TextView | ||
| + android:id="@+id/sub_text" | ||
| + android:layout_height="0dp" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_weight="3" | ||
| + android:layout_marginTop="-7dp" | ||
| + android:text="ABC" | ||
| + android:gravity="center_horizontal|top" | ||
| + /> | ||
| + | ||
| + </LinearLayout> | ||
| + | ||
| +</FrameLayout> |
174
blurlockview/src/main/res/layout/number_blur_lock_view.xml
| @@ -0,0 +1,174 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<FrameLayout | ||
| + xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="match_parent"> | ||
| + | ||
| + <com.nightonke.blurlockview.BlurView | ||
| + android:id="@+id/blurview" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="match_parent" | ||
| + /> | ||
| + | ||
| + <RelativeLayout | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="match_parent" | ||
| + > | ||
| + | ||
| + <LinearLayout | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="wrap_content" | ||
| + android:orientation="vertical" | ||
| + android:layout_above="@+id/layout_123" | ||
| + > | ||
| + | ||
| + <TextView | ||
| + android:id="@+id/title" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="wrap_content" | ||
| + android:gravity="center" | ||
| + android:text="Input Password" | ||
| + android:textSize="20sp" | ||
| + android:layout_marginBottom="15dp" | ||
| + android:layout_marginTop="56dp" | ||
| + /> | ||
| + | ||
| + <TextView | ||
| + android:id="@+id/indicator" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="wrap_content" | ||
| + android:gravity="center" | ||
| + android:text="Indicator here" | ||
| + android:layout_marginBottom="30dp" | ||
| + /> | ||
| + | ||
| + </LinearLayout> | ||
| + | ||
| + <RelativeLayout | ||
| + android:id="@+id/layout_123" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="wrap_content" | ||
| + android:layout_above="@+id/layout_456" | ||
| + > | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_1" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_toStartOf="@+id/button_2" | ||
| + android:layout_marginEnd="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_2" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_centerHorizontal="true" | ||
| + android:layout_marginBottom="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_3" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_toEndOf="@id/button_2" | ||
| + android:layout_marginStart="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + </RelativeLayout> | ||
| + | ||
| + <RelativeLayout | ||
| + android:id="@+id/layout_456" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="wrap_content" | ||
| + android:layout_centerInParent="true" | ||
| + > | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_4" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_toStartOf="@+id/button_5" | ||
| + android:layout_marginEnd="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_5" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_centerHorizontal="true" | ||
| + android:layout_marginBottom="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_6" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_toEndOf="@id/button_5" | ||
| + android:layout_marginStart="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + </RelativeLayout> | ||
| + | ||
| + <RelativeLayout | ||
| + android:id="@+id/layout_789" | ||
| + android:layout_width="match_parent" | ||
| + android:layout_height="wrap_content" | ||
| + android:layout_below="@+id/layout_456" | ||
| + > | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_7" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_toStartOf="@+id/button_8" | ||
| + android:layout_marginEnd="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_8" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_centerHorizontal="true" | ||
| + android:layout_marginBottom="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_9" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_toEndOf="@id/button_8" | ||
| + android:layout_marginStart="@dimen/button_margin" | ||
| + /> | ||
| + | ||
| + </RelativeLayout> | ||
| + | ||
| + <com.nightonke.blurlockview.BigButtonView | ||
| + android:id="@+id/button_0" | ||
| + android:layout_width="80dp" | ||
| + android:layout_height="80dp" | ||
| + android:layout_centerHorizontal="true" | ||
| + android:layout_below="@+id/layout_789" | ||
| + /> | ||
| + | ||
| + </RelativeLayout> | ||
| + | ||
| + <TextView | ||
| + android:id="@+id/left_button" | ||
| + android:layout_width="100dp" | ||
| + android:layout_height="50dp" | ||
| + android:text="紧急情况" | ||
| + android:gravity="center" | ||
| + android:layout_gravity="bottom|start" | ||
| + /> | ||
| + | ||
| + <TextView | ||
| + android:id="@+id/right_button" | ||
| + android:layout_width="100dp" | ||
| + android:layout_height="50dp" | ||
| + android:text="删除" | ||
| + android:gravity="center" | ||
| + android:layout_gravity="bottom|end" | ||
| + /> | ||
| + | ||
| +</FrameLayout> |
BIN
blurlockview/src/main/res/mipmap-hdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
blurlockview/src/main/res/mipmap-mdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
blurlockview/src/main/res/mipmap-xhdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
blurlockview/src/main/res/mipmap-xxhdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN
blurlockview/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15
blurlockview/src/main/res/values/attrs.xml
| @@ -0,0 +1,15 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<resources> | ||
| + | ||
| + <declare-styleable name="BlurView"> | ||
| + <attr name="blurRadius" format="integer"/> | ||
| + <attr name="downsampleFactor" format="integer"/> | ||
| + <attr name="overlayColor" format="color"/> | ||
| + </declare-styleable> | ||
| + | ||
| + <declare-styleable name="BigButtonView"> | ||
| + <attr name="text" format="string"/> | ||
| + <attr name="subText" format="string"/> | ||
| + </declare-styleable> | ||
| + | ||
| +</resources> |
6
blurlockview/src/main/res/values/colors.xml
| @@ -0,0 +1,6 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<resources> | ||
| + | ||
| + <color name="default_button_press">#66ffffff</color> | ||
| + | ||
| +</resources> |
43
blurlockview/src/main/res/values/defaults.xml
| @@ -0,0 +1,43 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<resources> | ||
| + | ||
| + <dimen name="default_big_button_width">80dp</dimen> | ||
| + <dimen name="default_big_button_height">80dp</dimen> | ||
| + <color name="default_big_button_text_color">#ffffff</color> | ||
| + <integer name="default_big_button_text_size">35</integer> | ||
| + <color name="default_big_button_sub_text_color">#ffffff</color> | ||
| + <integer name="default_big_button_sub_text_size">12</integer> | ||
| + | ||
| + <string-array | ||
| + name="default_big_button_text"> | ||
| + <item>0</item> | ||
| + <item>1</item> | ||
| + <item>2</item> | ||
| + <item>3</item> | ||
| + <item>4</item> | ||
| + <item>5</item> | ||
| + <item>6</item> | ||
| + <item>7</item> | ||
| + <item>8</item> | ||
| + <item>9</item> | ||
| + </string-array> | ||
| + | ||
| + <string-array | ||
| + name="default_big_button_sub_text"> | ||
| + <item>0</item> | ||
| + <item>1</item> | ||
| + <item>ABC</item> | ||
| + <item>DEF</item> | ||
| + <item>GHI</item> | ||
| + <item>JKL</item> | ||
| + <item>MNO</item> | ||
| + <item>PQRS</item> | ||
| + <item>TUV</item> | ||
| + <item>WXYZ</item> | ||
| + </string-array> | ||
| + | ||
| + <integer name="default_blur_radius">11</integer> | ||
| + <integer name="default_downsample_factor">6</integer> | ||
| + <color name="default_overlay_color">#99FFFFFF</color> | ||
| + | ||
| +</resources> |
6
blurlockview/src/main/res/values/dimens.xml
| @@ -0,0 +1,6 @@ | ||
| +<?xml version="1.0" encoding="utf-8"?> | ||
| +<resources> | ||
| + | ||
| + <dimen name="button_margin">15dp</dimen> | ||
| + | ||
| +</resources> |
3
blurlockview/src/main/res/values/strings.xml
| @@ -0,0 +1,3 @@ | ||
| +<resources> | ||
| + <string name="app_name">BlurLockView</string> | ||
| +</resources> |
8
blurlockview/src/main/res/values/styles.xml
| @@ -0,0 +1,8 @@ | ||
| +<resources> | ||
| + | ||
| + <!-- Base application theme. --> | ||
| + <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> | ||
| + <!-- Customize your theme here. --> | ||
| + </style> | ||
| + | ||
| +</resources> |
15
blurlockview/src/test/java/com/nightonke/blurlockview/ExampleUnitTest.java
| @@ -0,0 +1,15 @@ | ||
| +package com.nightonke.blurlockview; | ||
| + | ||
| +import org.junit.Test; | ||
| + | ||
| +import static org.junit.Assert.*; | ||
| + | ||
| +/** | ||
| + * To work on unit tests, switch the Test Artifact in the Build Variants view. | ||
| + */ | ||
| +public class ExampleUnitTest { | ||
| + @Test | ||
| + public void addition_isCorrect() throws Exception { | ||
| + assertEquals(4, 2 + 2); | ||
| + } | ||
| +} |
24
build.gradle
| @@ -0,0 +1,24 @@ | ||
| +// Top-level build file where you can add configuration options common to all sub-projects/modules. | ||
| + | ||
| +buildscript { | ||
| + repositories { | ||
| + jcenter() | ||
| + } | ||
| + dependencies { | ||
| + classpath 'com.android.tools.build:gradle:2.0.0-beta6' | ||
| + | ||
| + // NOTE: Do not place your application dependencies here; they belong | ||
| + // in the individual module build.gradle files | ||
| + } | ||
| +} | ||
| + | ||
| +allprojects { | ||
| + repositories { | ||
| + jcenter() | ||
| + maven { url "https://jitpack.io" } | ||
| + } | ||
| +} | ||
| + | ||
| +task clean(type: Delete) { | ||
| + delete rootProject.buildDir | ||
| +} |
18
gradle.properties
| @@ -0,0 +1,18 @@ | ||
| +# Project-wide Gradle settings. | ||
| + | ||
| +# IDE (e.g. Android Studio) users: | ||
| +# Gradle settings configured through the IDE *will override* | ||
| +# any settings specified in this file. | ||
| + | ||
| +# For more details on how to configure your build environment visit | ||
| +# http://www.gradle.org/docs/current/userguide/build_environment.html | ||
| + | ||
| +# Specifies the JVM arguments used for the daemon process. | ||
| +# The setting is particularly useful for tweaking memory settings. | ||
| +# Default value: -Xmx10248m -XX:MaxPermSize=256m | ||
| +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 | ||
| + | ||
| +# When configured, Gradle will run in incubating parallel mode. | ||
| +# This option should only be used with decoupled projects. More details, visit | ||
| +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | ||
| +# org.gradle.parallel=true |
BIN
gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
6
gradle/wrapper/gradle-wrapper.properties
| @@ -0,0 +1,6 @@ | ||
| +#Mon Dec 28 10:00:20 PST 2015 | ||
| +distributionBase=GRADLE_USER_HOME | ||
| +distributionPath=wrapper/dists | ||
| +zipStoreBase=GRADLE_USER_HOME | ||
| +zipStorePath=wrapper/dists | ||
| +distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip |
160
gradlew
| @@ -0,0 +1,160 @@ | ||
| +#!/usr/bin/env bash | ||
| + | ||
| +############################################################################## | ||
| +## | ||
| +## Gradle start up script for UN*X | ||
| +## | ||
| +############################################################################## | ||
| + | ||
| +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
| +DEFAULT_JVM_OPTS="" | ||
| + | ||
| +APP_NAME="Gradle" | ||
| +APP_BASE_NAME=`basename "$0"` | ||
| + | ||
| +# Use the maximum available, or set MAX_FD != -1 to use that value. | ||
| +MAX_FD="maximum" | ||
| + | ||
| +warn ( ) { | ||
| + echo "$*" | ||
| +} | ||
| + | ||
| +die ( ) { | ||
| + echo | ||
| + echo "$*" | ||
| + echo | ||
| + exit 1 | ||
| +} | ||
| + | ||
| +# OS specific support (must be 'true' or 'false'). | ||
| +cygwin=false | ||
| +msys=false | ||
| +darwin=false | ||
| +case "`uname`" in | ||
| + CYGWIN* ) | ||
| + cygwin=true | ||
| + ;; | ||
| + Darwin* ) | ||
| + darwin=true | ||
| + ;; | ||
| + MINGW* ) | ||
| + msys=true | ||
| + ;; | ||
| +esac | ||
| + | ||
| +# Attempt to set APP_HOME | ||
| +# Resolve links: $0 may be a link | ||
| +PRG="$0" | ||
| +# Need this for relative symlinks. | ||
| +while [ -h "$PRG" ] ; do | ||
| + ls=`ls -ld "$PRG"` | ||
| + link=`expr "$ls" : '.*-> \(.*\)$'` | ||
| + if expr "$link" : '/.*' > /dev/null; then | ||
| + PRG="$link" | ||
| + else | ||
| + PRG=`dirname "$PRG"`"/$link" | ||
| + fi | ||
| +done | ||
| +SAVED="`pwd`" | ||
| +cd "`dirname \"$PRG\"`/" >/dev/null | ||
| +APP_HOME="`pwd -P`" | ||
| +cd "$SAVED" >/dev/null | ||
| + | ||
| +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||
| + | ||
| +# Determine the Java command to use to start the JVM. | ||
| +if [ -n "$JAVA_HOME" ] ; then | ||
| + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
| + # IBM's JDK on AIX uses strange locations for the executables | ||
| + JAVACMD="$JAVA_HOME/jre/sh/java" | ||
| + else | ||
| + JAVACMD="$JAVA_HOME/bin/java" | ||
| + fi | ||
| + if [ ! -x "$JAVACMD" ] ; then | ||
| + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||
| + | ||
| +Please set the JAVA_HOME variable in your environment to match the | ||
| +location of your Java installation." | ||
| + fi | ||
| +else | ||
| + JAVACMD="java" | ||
| + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
| + | ||
| +Please set the JAVA_HOME variable in your environment to match the | ||
| +location of your Java installation." | ||
| +fi | ||
| + | ||
| +# Increase the maximum file descriptors if we can. | ||
| +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | ||
| + MAX_FD_LIMIT=`ulimit -H -n` | ||
| + if [ $? -eq 0 ] ; then | ||
| + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||
| + MAX_FD="$MAX_FD_LIMIT" | ||
| + fi | ||
| + ulimit -n $MAX_FD | ||
| + if [ $? -ne 0 ] ; then | ||
| + warn "Could not set maximum file descriptor limit: $MAX_FD" | ||
| + fi | ||
| + else | ||
| + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||
| + fi | ||
| +fi | ||
| + | ||
| +# For Darwin, add options to specify how the application appears in the dock | ||
| +if $darwin; then | ||
| + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||
| +fi | ||
| + | ||
| +# For Cygwin, switch paths to Windows format before running java | ||
| +if $cygwin ; then | ||
| + APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||
| + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||
| + JAVACMD=`cygpath --unix "$JAVACMD"` | ||
| + | ||
| + # We build the pattern for arguments to be converted via cygpath | ||
| + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||
| + SEP="" | ||
| + for dir in $ROOTDIRSRAW ; do | ||
| + ROOTDIRS="$ROOTDIRS$SEP$dir" | ||
| + SEP="|" | ||
| + done | ||
| + OURCYGPATTERN="(^($ROOTDIRS))" | ||
| + # Add a user-defined pattern to the cygpath arguments | ||
| + if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||
| + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||
| + fi | ||
| + # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||
| + i=0 | ||
| + for arg in "$@" ; do | ||
| + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||
| + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | ||
| + | ||
| + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | ||
| + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||
| + else | ||
| + eval `echo args$i`="\"$arg\"" | ||
| + fi | ||
| + i=$((i+1)) | ||
| + done | ||
| + case $i in | ||
| + (0) set -- ;; | ||
| + (1) set -- "$args0" ;; | ||
| + (2) set -- "$args0" "$args1" ;; | ||
| + (3) set -- "$args0" "$args1" "$args2" ;; | ||
| + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||
| + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||
| + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||
| + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||
| + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||
| + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||
| + esac | ||
| +fi | ||
| + | ||
| +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules | ||
| +function splitJvmOpts() { | ||
| + JVM_OPTS=("$@") | ||
| +} | ||
| +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS | ||
| +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" | ||
| + | ||
| +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
90
gradlew.bat
| @@ -0,0 +1,90 @@ | ||
| +@if "%DEBUG%" == "" @echo off | ||
| +@rem ########################################################################## | ||
| +@rem | ||
| +@rem Gradle startup script for Windows | ||
| +@rem | ||
| +@rem ########################################################################## | ||
| + | ||
| +@rem Set local scope for the variables with windows NT shell | ||
| +if "%OS%"=="Windows_NT" setlocal | ||
| + | ||
| +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
| +set DEFAULT_JVM_OPTS= | ||
| + | ||
| +set DIRNAME=%~dp0 | ||
| +if "%DIRNAME%" == "" set DIRNAME=. | ||
| +set APP_BASE_NAME=%~n0 | ||
| +set APP_HOME=%DIRNAME% | ||
| + | ||
| +@rem Find java.exe | ||
| +if defined JAVA_HOME goto findJavaFromJavaHome | ||
| + | ||
| +set JAVA_EXE=java.exe | ||
| +%JAVA_EXE% -version >NUL 2>&1 | ||
| +if "%ERRORLEVEL%" == "0" goto init | ||
| + | ||
| +echo. | ||
| +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
| +echo. | ||
| +echo Please set the JAVA_HOME variable in your environment to match the | ||
| +echo location of your Java installation. | ||
| + | ||
| +goto fail | ||
| + | ||
| +:findJavaFromJavaHome | ||
| +set JAVA_HOME=%JAVA_HOME:"=% | ||
| +set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||
| + | ||
| +if exist "%JAVA_EXE%" goto init | ||
| + | ||
| +echo. | ||
| +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||
| +echo. | ||
| +echo Please set the JAVA_HOME variable in your environment to match the | ||
| +echo location of your Java installation. | ||
| + | ||
| +goto fail | ||
| + | ||
| +:init | ||
| +@rem Get command-line arguments, handling Windowz variants | ||
| + | ||
| +if not "%OS%" == "Windows_NT" goto win9xME_args | ||
| +if "%@eval[2+2]" == "4" goto 4NT_args | ||
| + | ||
| +:win9xME_args | ||
| +@rem Slurp the command line arguments. | ||
| +set CMD_LINE_ARGS= | ||
| +set _SKIP=2 | ||
| + | ||
| +:win9xME_args_slurp | ||
| +if "x%~1" == "x" goto execute | ||
| + | ||
| +set CMD_LINE_ARGS=%* | ||
| +goto execute | ||
| + | ||
| +:4NT_args | ||
| +@rem Get arguments from the 4NT Shell from JP Software | ||
| +set CMD_LINE_ARGS=%$ | ||
| + | ||
| +:execute | ||
| +@rem Setup the command line | ||
| + | ||
| +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||
| + | ||
| +@rem Execute Gradle | ||
| +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||
| + | ||
| +:end | ||
| +@rem End local scope for the variables with windows NT shell | ||
| +if "%ERRORLEVEL%"=="0" goto mainEnd | ||
| + | ||
| +:fail | ||
| +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||
| +rem the _cmd.exe /c_ return code! | ||
| +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||
| +exit /b 1 | ||
| + | ||
| +:mainEnd | ||
| +if "%OS%"=="Windows_NT" endlocal | ||
| + | ||
| +:omega |
1
settings.gradle
| @@ -0,0 +1 @@ | ||
| +include ':app', ':blurlockview' |
0 comments on commit
cc52b3f