diff --git a/SMS/.gitignore b/.gitignore
similarity index 84%
rename from SMS/.gitignore
rename to .gitignore
index 5edb4ee..9ee7913 100644
--- a/SMS/.gitignore
+++ b/.gitignore
@@ -7,4 +7,4 @@
.DS_Store
/build
/captures
-.externalNativeBuild
+.externalNativeBuild
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..5acf5cb
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+bmob-android-demo-sms
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SMS/.idea/gradle.xml b/.idea/gradle.xml
similarity index 89%
rename from SMS/.idea/gradle.xml
rename to .idea/gradle.xml
index 7ac24c7..a9f4e52 100644
--- a/SMS/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -3,6 +3,7 @@
-
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..bdd9278
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SMS.zip b/SMS.zip
deleted file mode 100644
index 53baef7..0000000
Binary files a/SMS.zip and /dev/null differ
diff --git a/SMS/.idea/caches/build_file_checksums.ser b/SMS/.idea/caches/build_file_checksums.ser
deleted file mode 100644
index b47750b..0000000
Binary files a/SMS/.idea/caches/build_file_checksums.ser and /dev/null differ
diff --git a/SMS/.idea/codeStyles/Project.xml b/SMS/.idea/codeStyles/Project.xml
deleted file mode 100644
index 30aa626..0000000
--- a/SMS/.idea/codeStyles/Project.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SMS/.idea/misc.xml b/SMS/.idea/misc.xml
deleted file mode 100644
index b0c7b20..0000000
--- a/SMS/.idea/misc.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SMS/.idea/runConfigurations.xml b/SMS/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/SMS/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SMS/app/.gitignore b/SMS/app/.gitignore
deleted file mode 100644
index 796b96d..0000000
--- a/SMS/app/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
diff --git a/SMS/app/bmobsms.jks b/SMS/app/bmobsms.jks
deleted file mode 100644
index a597093..0000000
Binary files a/SMS/app/bmobsms.jks and /dev/null differ
diff --git a/SMS/app/build.gradle b/SMS/app/build.gradle
deleted file mode 100644
index 3a59ba3..0000000
--- a/SMS/app/build.gradle
+++ /dev/null
@@ -1,45 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 28
- defaultConfig {
- applicationId "cn.bmob.sms"
- minSdkVersion 15
- targetSdkVersion 28
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
- lintOptions {
- checkReleaseBuilds false
- // Or, if you prefer, you can continue to check for errors in release builds,
- // but continue the build even when errors are found:
- abortOnError false
- }
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-
- /**
- * bmob Data SDK
- */
- implementation 'cn.bmob.android:bmob-sdk:3.6.7'
-
- /**
- * ButterKnife
- */
- implementation 'com.jakewharton:butterknife:8.8.1'
- annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
-}
diff --git a/SMS/app/release/app-release.apk b/SMS/app/release/app-release.apk
deleted file mode 100644
index 573d23e..0000000
Binary files a/SMS/app/release/app-release.apk and /dev/null differ
diff --git a/SMS/app/release/output.json b/SMS/app/release/output.json
deleted file mode 100644
index 9f0c959..0000000
--- a/SMS/app/release/output.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/SMS/app/src/main/AndroidManifest.xml b/SMS/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 5312498..0000000
--- a/SMS/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SMS/app/src/main/java/cn/bmob/sms/App.java b/SMS/app/src/main/java/cn/bmob/sms/App.java
deleted file mode 100644
index 9117173..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/App.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.bmob.sms;
-
-import android.app.Application;
-
-import cn.bmob.v3.Bmob;
-
-/**
- * Created on 18/9/25 10:42
- *
- * @author zhangchaozhou
- */
-public class App extends Application {
- @Override
- public void onCreate() {
- super.onCreate();
-// Bmob.resetDomain("http://open-vip.bmob.cn/8/");
-// Bmob.initialize(this,"12784168944a56ae41c4575686b7b332");
- Bmob.initialize(this,"0a67093c2436a267e9bc52f27bc01dcf");
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/MainActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/MainActivity.java
deleted file mode 100644
index 7d2362e..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/MainActivity.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package cn.bmob.sms.activity;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
-import android.view.View;
-import android.widget.Toast;
-
-import java.util.Arrays;
-import java.util.List;
-
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.CollectionList;
-import cn.bmob.sms.DayBillBean;
-import cn.bmob.sms.R;
-import cn.bmob.sms.activity.user.UserLoginPasswordActivity;
-import cn.bmob.sms.activity.user.UserLoginSmsActivity;
-import cn.bmob.sms.activity.user.UserSignUpOrLoginSmsActivity;
-import cn.bmob.sms.activity.user.UserSignUpPasswordActivity;
-import cn.bmob.sms.activity.user.UserSignUpPasswordAndSmsActivity;
-import cn.bmob.v3.BmobQuery;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.FindListener;
-import cn.bmob.v3.listener.UpdateListener;
-
-/**
- * @author zhangchaozhou
- */
-public class MainActivity extends AppCompatActivity {
-
-
- /**
- * 本案例主要功能
- *
- * TODO 1、通常的短信验证:发送短信验证码->验证短信验证码->进行重要的用户操作。
- *
- * TODO 2、用户名密码注册
- *
- * TODO 3、手机号码注册或登录:发送短信验证码->验证短信验证码->若首次验证手机号码则进行注册并登录,若非首次验证手机号码则进行直接登录。
- *
- * TODO 4、用户名密码注册的同时绑定手机号码:发送短信验证码->验证短信验证码->进行用户名密码注册并登录,同时进行绑定手机号码。
- *
- * TODO 5、用户名密码登录。
- *
- * TODO 6、短信验证码登录。
- *
- * TODO 7、注册登录之后进行绑定或解绑手机号码:发送短信验证码->验证短信验证码->进行手机号码的绑定或解绑操作。
- *
- * TODO 8、注册登录之后进行短信验证密码重置:发送短信验证码->验证短信验证码->进行密码重置。
- *
- * TODO 9、注册登录之后进行原始密码重置。
- */
-
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ButterKnife.bind(this);
- }
-
-
- @OnClick({R.id.btn_test, R.id.btn_normal, R.id.btn_user_signup_password, R.id.btn_signup_or_login_sms, R.id.btn_user_signup_password_and_sms, R.id.btn_user_login_password, R.id.btn_user_login_sms})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_test:
-// DayBillBean dayBillBean = new DayBillBean();
-//
-// dayBillBean.removeAll("listData", Arrays.asList(new DayBillBean.BillBean(
-// "支出", "600.00", "2018-11-02", "知识付费", "现金", "", "自己", "357d922f0b")));
-// dayBillBean.update("357d922f0b", new UpdateListener() {
-// @Override
-// public void done(BmobException e) {
-//
-// if (e==null){
-// Log.e("done","SUCCESS");
-// Toast.makeText(MainActivity.this, "SUCCESS", Toast.LENGTH_SHORT).show();
-// }else {
-//
-// Log.e("done",e.getMessage());
-// }
-// }
-// });
-
- BmobQuery bmobQuery = new BmobQuery<>();
- bmobQuery.findObjects(new FindListener() {
- @Override
- public void done(List list, BmobException e) {
- if (e==null){
- Log.e("done",list==null?"null":list.size()+"");
- }else {
- Log.e("error",e.getMessage());
- }
- }
- });
- break;
- case R.id.btn_normal:
- startActivity(new Intent(this, NormalActivity.class));
- break;
- case R.id.btn_user_signup_password:
- startActivity(new Intent(this, UserSignUpPasswordActivity.class));
- break;
- case R.id.btn_signup_or_login_sms:
- startActivity(new Intent(this, UserSignUpOrLoginSmsActivity.class));
- break;
- case R.id.btn_user_signup_password_and_sms:
- startActivity(new Intent(this, UserSignUpPasswordAndSmsActivity.class));
- break;
- case R.id.btn_user_login_password:
- startActivity(new Intent(this, UserLoginPasswordActivity.class));
- break;
- case R.id.btn_user_login_sms:
- startActivity(new Intent(this, UserLoginSmsActivity.class));
- break;
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java
deleted file mode 100644
index 1a43d52..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package cn.bmob.sms.activity;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.v3.Bmob;
-import cn.bmob.v3.BmobInstallation;
-import cn.bmob.v3.BmobInstallationManager;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.InstallationListener;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.QueryListener;
-import cn.bmob.v3.listener.UpdateListener;
-
-/**
- * Created on 18/9/25 16:05
- *
- * @author zhangchaozhou
- */
-public class NormalActivity extends AppCompatActivity {
-
-
- @BindView(R.id.edt_phone)
- EditText mEdtPhone;
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_normal);
- ButterKnife.bind(this);
-
- Bmob.resetDomain("http://open-vip.bmob.cn/8/");
-
- BmobInstallationManager.getInstance().initialize(new InstallationListener() {
- @Override
- public void done(BmobInstallation bmobInstallation, BmobException e) {
-
- }
- });
- }
-
- @OnClick({R.id.btn_send, R.id.btn_verify})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- *
- * TODO 应用名称以及自定义短信内容,请使用不会被和谐的文字,防止发送短信验证码失败。
- *
- */
- BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- case R.id.btn_verify: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
- @Override
- public void done(BmobException e) {
- if (e == null) {
- mTvInfo.append("验证码验证成功,您可以在此时进行重要操作!\n");
- } else {
- mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
-
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java
deleted file mode 100644
index 1573104..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.sms.bean.User;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.BmobUser;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.QueryListener;
-import cn.bmob.v3.listener.UpdateListener;
-
-/**
- * Created on 18/9/26 09:40
- * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户
- *
- * @author zhangchaozhou
- */
-public class UserBindActivity extends AppCompatActivity {
-
-
- @BindView(R.id.edt_phone)
- EditText mEdtPhone;
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_bind);
- ButterKnife.bind(this);
- }
-
- @OnClick({R.id.btn_send, R.id.btn_bind})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send: {
- User user = BmobUser.getCurrentUser(User.class);
- String phone = user.getMobilePhoneNumber();
- Boolean verify = user.getMobilePhoneNumberVerified();
- if (!TextUtils.isEmpty(phone) && verify != null && verify) {
- Toast.makeText(this, "当前账号已经绑定了手机号码", Toast.LENGTH_SHORT).show();
- return;
- }else {
- final String phoneInput = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phoneInput)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- */
- BmobSMS.requestSMSCode(phoneInput, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- }
-
- break;
- }
- case R.id.btn_bind: {
- final String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
- @Override
- public void done(BmobException e) {
- if (e == null) {
- mTvInfo.append("验证码验证成功,您可以在此时进行绑定操作!\n");
- User user = BmobUser.getCurrentUser(User.class);
- user.setMobilePhoneNumber(phone);
- user.setMobilePhoneNumberVerified(true);
- user.update(new UpdateListener() {
- @Override
- public void done(BmobException e) {
- if (e == null) {
- mTvInfo.append("绑定手机号码成功");
- } else {
- mTvInfo.append("绑定手机号码失败:" + e.getErrorCode() + "-" + e.getMessage());
- }
- }
- });
- } else {
- mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
-
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java
deleted file mode 100644
index ed07a15..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.BmobUser;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.LogInListener;
-import cn.bmob.v3.listener.QueryListener;
-
-/**
- * Created on 18/9/26 09:39
- * TODO 通过短信登录,只针对已经通过短信验证注册的用户
- *
- * @author zhangchaozhou
- */
-public class UserLoginSmsActivity extends AppCompatActivity {
- @BindView(R.id.edt_phone)
- EditText mEdtPhone;
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_login_sms);
- ButterKnife.bind(this);
- }
-
- @OnClick({R.id.btn_send, R.id.btn_login})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- */
- BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- case R.id.btn_login: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO 此API需要在用户已经注册并验证的前提下才能使用
- */
- BmobUser.loginBySMSCode(phone, code, new LogInListener() {
- @Override
- public void done(BmobUser bmobUser, BmobException e) {
- if (e == null) {
- mTvInfo.append("短信登录成功:" + bmobUser.getObjectId() + "-" + bmobUser.getUsername());
- startActivity(new Intent(UserLoginSmsActivity.this, UserMainActivity.class));
- } else {
- mTvInfo.append("短信登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java
deleted file mode 100644
index 472a23e..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.v3.BmobUser;
-
-/**
- * Created on 18/9/26 09:52
- * TODO 用户登录后首页
- * @author zhangchaozhou
- */
-public class UserMainActivity extends AppCompatActivity {
-
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_main);
- ButterKnife.bind(this);
- }
-
- @OnClick({R.id.btn_reset_password, R.id.btn_reset_sms, R.id.btn_bind, R.id.btn_unbind, R.id.btn_exit})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_reset_password:
- startActivity(new Intent(this,UserResetPasswordActivity.class));
- break;
- case R.id.btn_reset_sms:
- startActivity(new Intent(this,UserResetSmsActivity.class));
- break;
- case R.id.btn_bind:
- startActivity(new Intent(this,UserBindActivity.class));
- break;
- case R.id.btn_unbind:
- startActivity(new Intent(this,UserUnBindActivity.class));
- break;
- case R.id.btn_exit:
- BmobUser.logOut();
- finish();
- break;
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java
deleted file mode 100644
index a29d338..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.sms.bean.User;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.BmobUser;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.QueryListener;
-import cn.bmob.v3.listener.UpdateListener;
-
-/**
- * Created on 18/9/26 09:39
- * TODO 通过短信重置密码,只针对已经通过密码注册并且通过短信验证绑定的用户
- *
- * @author zhangchaozhou
- */
-public class UserResetSmsActivity extends AppCompatActivity {
-
- @BindView(R.id.edt_new_password)
- EditText mEdtNewPassword;
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_reset_sms);
- ButterKnife.bind(this);
- }
-
- @OnClick({R.id.btn_send, R.id.btn_reset})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send:
- User user = BmobUser.getCurrentUser(User.class);
- String phone = user.getMobilePhoneNumber();
- Boolean verify = user.getMobilePhoneNumberVerified();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- if (verify == null || !verify) {
- Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- */
- BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- case R.id.btn_reset:
- String newPassword = mEdtNewPassword.getText().toString().trim();
- if (TextUtils.isEmpty(newPassword)) {
- Toast.makeText(this, "请输入新密码", Toast.LENGTH_SHORT).show();
- return;
- }
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- BmobUser.resetPasswordBySMSCode(code, newPassword, new UpdateListener() {
- @Override
- public void done(BmobException e) {
- if (e == null) {
- mTvInfo.append("重置成功");
- } else {
- mTvInfo.append("重置失败:" + e.getErrorCode() + "-" + e.getMessage());
- }
- }
- });
- break;
-
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java
deleted file mode 100644
index ea44df5..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.BmobUser;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.LogInListener;
-import cn.bmob.v3.listener.QueryListener;
-
-/**
- * Created on 18/9/25 16:12
- * TODO 通过短信验证注册或登录
- *
- * @author zhangchaozhou
- */
-public class UserSignUpOrLoginSmsActivity extends AppCompatActivity {
-
-
- @BindView(R.id.edt_phone)
- EditText mEdtPhone;
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_signup_or_login_sms);
- ButterKnife.bind(this);
-
- }
-
-
- @OnClick({R.id.btn_send, R.id.btn_signup_or_login})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- */
- BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- case R.id.btn_signup_or_login: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- BmobUser.signOrLoginByMobilePhone(phone, code, new LogInListener() {
- @Override
- public void done(BmobUser bmobUser, BmobException e) {
- if (e == null) {
- mTvInfo.append("短信注册或登录成功:" + bmobUser.getUsername());
- startActivity(new Intent(UserSignUpOrLoginSmsActivity.this, UserMainActivity.class));
- } else {
- mTvInfo.append("短信注册或登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
-
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java
deleted file mode 100644
index 8e65588..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.sms.bean.User;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.BmobUser;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.QueryListener;
-import cn.bmob.v3.listener.SaveListener;
-
-/**
- * Created on 18/9/25 16:23
- * TODO 通过密码注册并通过短信验证绑定手机号码
- * @author zhangchaozhou
- */
-public class UserSignUpPasswordAndSmsActivity extends AppCompatActivity{
-
-
- @BindView(R.id.edt_username)
- EditText mEdtUsername;
- @BindView(R.id.edt_password)
- EditText mEdtPassword;
- @BindView(R.id.edt_nickname)
- EditText mEdtNickname;
- @BindView(R.id.edt_phone)
- EditText mEdtPhone;
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_signup_password_and_sms);
- ButterKnife.bind(this);
- }
-
-
-
- @OnClick({R.id.btn_send, R.id.btn_signup})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send: {
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- */
- BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- case R.id.btn_signup: {
- String username = mEdtUsername.getText().toString().trim();
- if (TextUtils.isEmpty(username)) {
- Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
- return;
- }
- String nickname = mEdtNickname.getText().toString().trim();
- if (TextUtils.isEmpty(nickname)) {
- Toast.makeText(this, "请输入昵称", Toast.LENGTH_SHORT).show();
- return;
- }
- String password = mEdtPassword.getText().toString().trim();
- if (TextUtils.isEmpty(password)) {
- Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
- return;
- }
- String phone = mEdtPhone.getText().toString().trim();
- if (TextUtils.isEmpty(phone)) {
- Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- User user = new User();
- //TODO 设置手机号码(必填)
- user.setMobilePhoneNumber(phone);
- //TODO 设置用户名,如果没有传用户名,则默认为手机号码
- user.setUsername(username);
- //TODO 设置用户密码
- user.setPassword(password);
- //TODO 设置额外信息:此处为昵称
- user.setNickname(nickname);
- user.signOrLogin(code, new SaveListener() {
- @Override
- public void done(BmobUser bmobUser, BmobException e) {
- if (e == null) {
- mTvInfo.append("短信注册成功:" + bmobUser.getUsername());
- startActivity(new Intent(UserSignUpPasswordAndSmsActivity.this, UserMainActivity.class));
- } else {
- mTvInfo.append("短信注册失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java b/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java
deleted file mode 100644
index e35c92f..0000000
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package cn.bmob.sms.activity.user;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import cn.bmob.sms.R;
-import cn.bmob.sms.bean.User;
-import cn.bmob.v3.BmobSMS;
-import cn.bmob.v3.BmobUser;
-import cn.bmob.v3.exception.BmobException;
-import cn.bmob.v3.listener.QueryListener;
-import cn.bmob.v3.listener.UpdateListener;
-
-/**
- * Created on 18/9/26 09:40
- * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户
- *
- * @author zhangchaozhou
- */
-public class UserUnBindActivity extends AppCompatActivity {
-
-
- @BindView(R.id.edt_code)
- EditText mEdtCode;
- @BindView(R.id.tv_info)
- TextView mTvInfo;
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_user_unbind);
- ButterKnife.bind(this);
- }
-
- @OnClick({R.id.btn_send, R.id.btn_unbind})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.btn_send: {
- User user = BmobUser.getCurrentUser(User.class);
- String phone = user.getMobilePhoneNumber();
- Boolean verify = user.getMobilePhoneNumberVerified();
- if (TextUtils.isEmpty(phone) || verify == null || !verify) {
- Toast.makeText(this, "当前账号尚未绑定手机号码", Toast.LENGTH_SHORT).show();
- return;
- }
- /**
- * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
- */
- BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
- @Override
- public void done(Integer smsId, BmobException e) {
- if (e == null) {
- mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
- } else {
- mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
- case R.id.btn_unbind: {
- User user = BmobUser.getCurrentUser(User.class);
- final String phone = user.getMobilePhoneNumber();
- String code = mEdtCode.getText().toString().trim();
- if (TextUtils.isEmpty(code)) {
- Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
- return;
- }
- BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
- @Override
- public void done(BmobException e) {
- if (e == null) {
- mTvInfo.append("验证码验证成功,您可以在此时进行解绑操作!\n");
- User user = BmobUser.getCurrentUser(User.class);
- user.setMobilePhoneNumber("");
- user.setMobilePhoneNumberVerified(false);
- user.update(new UpdateListener() {
- @Override
- public void done(BmobException e) {
- if (e == null) {
- mTvInfo.append("解绑手机号码成功");
- } else {
- mTvInfo.append("解绑手机号码失败:" + e.getErrorCode() + "-" + e.getMessage());
- }
- }
- });
- } else {
- mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
- }
- }
- });
- break;
- }
-
- default:
- break;
- }
- }
-}
diff --git a/SMS/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/SMS/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index c3903ed..0000000
--- a/SMS/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index a2f5908..0000000
Binary files a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 1b52399..0000000
Binary files a/SMS/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index ff10afd..0000000
Binary files a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 115a4c7..0000000
Binary files a/SMS/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index dcd3cd8..0000000
Binary files a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 459ca60..0000000
Binary files a/SMS/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 8ca12fe..0000000
Binary files a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 8e19b41..0000000
Binary files a/SMS/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index b824ebd..0000000
Binary files a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 4c19a13..0000000
Binary files a/SMS/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/SMS/app/src/main/res/values/colors.xml b/SMS/app/src/main/res/values/colors.xml
deleted file mode 100644
index 3ab3e9c..0000000
--- a/SMS/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- #3F51B5
- #303F9F
- #FF4081
-
diff --git a/SMS/app/src/main/res/values/strings.xml b/SMS/app/src/main/res/values/strings.xml
deleted file mode 100644
index 1710f42..0000000
--- a/SMS/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- SMS
-
diff --git a/SMS/app/src/main/res/values/styles.xml b/SMS/app/src/main/res/values/styles.xml
deleted file mode 100644
index 5885930..0000000
--- a/SMS/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/SMS/build.gradle b/SMS/build.gradle
deleted file mode 100644
index 5608268..0000000
--- a/SMS/build.gradle
+++ /dev/null
@@ -1,32 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-
- repositories {
- google()
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.1.4'
-
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- google()
- jcenter()
-
- /**
- * bmob SDK 仓库
- */
- maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/SMS/gradle/wrapper/gradle-wrapper.jar b/SMS/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 7a3265e..0000000
Binary files a/SMS/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/SMS/settings.gradle b/SMS/settings.gradle
deleted file mode 100644
index e7b4def..0000000
--- a/SMS/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..3101ea4
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,44 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'cn.bmob.sms'
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "cn.bmob.sms"
+ minSdk 26
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation 'io.github.bmob:android-sdk:3.8.21'
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
+ implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
+ implementation 'com.squareup.okhttp3:okhttp:4.8.1'
+ implementation 'com.google.code.gson:gson:2.8.5'
+
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+}
\ No newline at end of file
diff --git a/SMS/app/proguard-rules.pro b/app/proguard-rules.pro
similarity index 94%
rename from SMS/app/proguard-rules.pro
rename to app/proguard-rules.pro
index f1b4245..481bb43 100644
--- a/SMS/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -18,4 +18,4 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/SMS/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java b/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java
similarity index 71%
rename from SMS/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java
rename to app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java
index af5f212..147f5fe 100644
--- a/SMS/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java
+++ b/app/src/androidTest/java/cn/bmob/sms/ExampleInstrumentedTest.java
@@ -1,8 +1,9 @@
package cn.bmob.sms;
import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -19,8 +20,7 @@ public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("cn.bmob.sms", appContext.getPackageName());
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..34aff26
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/cn/bmob/sms/App.java b/app/src/main/java/cn/bmob/sms/App.java
new file mode 100644
index 0000000..6b3f2e9
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/App.java
@@ -0,0 +1,13 @@
+package cn.bmob.sms;
+
+import android.app.Application;
+
+import cn.bmob.v3.Bmob;
+
+public class App extends Application {
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ Bmob.initialize(this,"Your Application ID");
+ }
+}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/CollectionList.java b/app/src/main/java/cn/bmob/sms/CollectionList.java
similarity index 100%
rename from SMS/app/src/main/java/cn/bmob/sms/CollectionList.java
rename to app/src/main/java/cn/bmob/sms/CollectionList.java
diff --git a/SMS/app/src/main/java/cn/bmob/sms/DayBillBean.java b/app/src/main/java/cn/bmob/sms/DayBillBean.java
similarity index 100%
rename from SMS/app/src/main/java/cn/bmob/sms/DayBillBean.java
rename to app/src/main/java/cn/bmob/sms/DayBillBean.java
diff --git a/app/src/main/java/cn/bmob/sms/activity/MainActivity.java b/app/src/main/java/cn/bmob/sms/activity/MainActivity.java
new file mode 100644
index 0000000..5d5f2e4
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/MainActivity.java
@@ -0,0 +1,95 @@
+package cn.bmob.sms.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+
+import java.util.List;
+
+import cn.bmob.sms.CollectionList;
+import cn.bmob.sms.R;
+import cn.bmob.sms.activity.user.UserLoginPasswordActivity;
+import cn.bmob.sms.activity.user.UserLoginSmsActivity;
+import cn.bmob.sms.activity.user.UserSignUpOrLoginSmsActivity;
+import cn.bmob.sms.activity.user.UserSignUpPasswordActivity;
+import cn.bmob.sms.activity.user.UserSignUpPasswordAndSmsActivity;
+import cn.bmob.v3.BmobQuery;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.FindListener;
+
+/**
+ * @author zhangchaozhou
+ */
+public class MainActivity extends AppCompatActivity {
+
+
+ /**
+ * 本案例主要功能
+ *
+ * TODO 1、通常的短信验证:发送短信验证码->验证短信验证码->进行重要的用户操作。
+ *
+ * TODO 2、用户名密码注册
+ *
+ * TODO 3、手机号码注册或登录:发送短信验证码->验证短信验证码->若首次验证手机号码则进行注册并登录,若非首次验证手机号码则进行直接登录。
+ *
+ * TODO 4、用户名密码注册的同时绑定手机号码:发送短信验证码->验证短信验证码->进行用户名密码注册并登录,同时进行绑定手机号码。
+ *
+ * TODO 5、用户名密码登录。
+ *
+ * TODO 6、短信验证码登录。
+ *
+ * TODO 7、注册登录之后进行绑定或解绑手机号码:发送短信验证码->验证短信验证码->进行手机号码的绑定或解绑操作。
+ *
+ * TODO 8、注册登录之后进行短信验证密码重置:发送短信验证码->验证短信验证码->进行密码重置。
+ *
+ * TODO 9、注册登录之后进行原始密码重置。
+ */
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ }
+
+ public void onTest(View view) {
+ BmobQuery bmobQuery = new BmobQuery<>();
+ bmobQuery.findObjects(new FindListener() {
+ @Override
+ public void done(List list, BmobException e) {
+ if (e==null){
+ Log.e("done",list==null?"null":list.size()+"");
+ }else {
+ Log.e("error",e.getMessage());
+ }
+ }
+ });
+ }
+
+ public void onNormal(View view) {
+ startActivity(new Intent(this, NormalActivity.class));
+ }
+
+ public void onUserSignupPassword(View view) {
+ startActivity(new Intent(this, UserSignUpPasswordActivity.class));
+ }
+
+ public void onSignupOrLoginSms(View view) {
+ startActivity(new Intent(this, UserSignUpOrLoginSmsActivity.class));
+ }
+
+ public void onUserSignupPasswordAndSms(View view) {
+ startActivity(new Intent(this, UserSignUpPasswordAndSmsActivity.class));
+ }
+
+ public void onUserLoginPassword(View view) {
+ startActivity(new Intent(this, UserLoginPasswordActivity.class));
+ }
+
+ public void onUserLoginSms(View view) {
+ startActivity(new Intent(this, UserLoginSmsActivity.class));
+ }
+
+}
diff --git a/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java b/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java
new file mode 100644
index 0000000..e382bc8
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/NormalActivity.java
@@ -0,0 +1,96 @@
+package cn.bmob.sms.activity;
+
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.bmob.sms.R;
+import cn.bmob.v3.Bmob;
+import cn.bmob.v3.BmobInstallation;
+import cn.bmob.v3.BmobInstallationManager;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.InstallationListener;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.QueryListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+/**
+ * Created on 18/9/25 16:05
+ *
+ * @author zhangchaozhou
+ */
+public class NormalActivity extends AppCompatActivity {
+
+ EditText mEdtPhone;
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_normal);
+ mEdtPhone = findViewById(R.id.edt_phone);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+
+ Bmob.resetDomain("http://open-vip.bmob.cn/8/");
+
+ BmobInstallationManager.getInstance().initialize(new InstallationListener() {
+ @Override
+ public void done(BmobInstallation bmobInstallation, BmobException e) {
+
+ }
+ });
+ }
+
+ public void onSendSMSCode(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ *
+ * TODO 应用名称以及自定义短信内容,请使用不会被和谐的文字,防止发送短信验证码失败。
+ *
+ */
+ BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+
+ public void onVerify(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
+ @Override
+ public void done(BmobException e) {
+ if (e == null) {
+ mTvInfo.append("验证码验证成功,您可以在此时进行重要操作!\n");
+ } else {
+ mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java
new file mode 100644
index 0000000..d97cad9
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserBindActivity.java
@@ -0,0 +1,105 @@
+package cn.bmob.sms.activity.user;
+
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.bmob.sms.R;
+import cn.bmob.sms.bean.User;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.QueryListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+/**
+ * Created on 18/9/26 09:40
+ * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户
+ *
+ * @author zhangchaozhou
+ */
+public class UserBindActivity extends AppCompatActivity {
+
+
+ EditText mEdtPhone;
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_bind);
+ mEdtPhone = findViewById(R.id.edt_phone);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+ }
+
+ public void onSend(View view) {
+ User user = BmobUser.getCurrentUser(User.class);
+ String phone = user.getMobilePhoneNumber();
+ Boolean verify = user.getMobilePhoneNumberVerified();
+ if (!TextUtils.isEmpty(phone) && verify != null && verify) {
+ Toast.makeText(this, "当前账号已经绑定了手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }else {
+ final String phoneInput = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phoneInput)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ */
+ BmobSMS.requestSMSCode(phoneInput, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+ }
+
+ public void onBind(View view) {
+ final String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
+ @Override
+ public void done(BmobException e) {
+ if (e == null) {
+ mTvInfo.append("验证码验证成功,您可以在此时进行绑定操作!\n");
+ User user = BmobUser.getCurrentUser(User.class);
+ user.setMobilePhoneNumber(phone);
+ user.setMobilePhoneNumberVerified(true);
+ user.update(new UpdateListener() {
+ @Override
+ public void done(BmobException e) {
+ if (e == null) {
+ mTvInfo.append("绑定手机号码成功");
+ } else {
+ mTvInfo.append("绑定手机号码失败:" + e.getErrorCode() + "-" + e.getMessage());
+ }
+ }
+ });
+ } else {
+ mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java
similarity index 80%
rename from SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java
rename to app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java
index eb605fc..bab548d 100644
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginPasswordActivity.java
@@ -2,16 +2,13 @@
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
+import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
import cn.bmob.sms.R;
import cn.bmob.sms.bean.User;
import cn.bmob.v3.exception.BmobException;
@@ -24,22 +21,20 @@
* @author zhangchaozhou
*/
public class UserLoginPasswordActivity extends AppCompatActivity {
- @BindView(R.id.edt_username)
EditText mEdtUsername;
- @BindView(R.id.edt_password)
EditText mEdtPassword;
- @BindView(R.id.tv_info)
TextView mTvInfo;
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_login_password);
- ButterKnife.bind(this);
+ mEdtUsername = findViewById(R.id.edt_username);
+ mEdtPassword = findViewById(R.id.edt_password);
+ mTvInfo = findViewById(R.id.tv_info);
}
- @OnClick(R.id.btn_login)
- public void onViewClicked() {
+ public void onLogin(View view) {
String username = mEdtUsername.getText().toString().trim();
if (TextUtils.isEmpty(username)) {
Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java
new file mode 100644
index 0000000..b43a17d
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserLoginSmsActivity.java
@@ -0,0 +1,86 @@
+package cn.bmob.sms.activity.user;
+
+import android.content.Intent;
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.bmob.sms.R;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.LogInListener;
+import cn.bmob.v3.listener.QueryListener;
+
+/**
+ * Created on 18/9/26 09:39
+ * TODO 通过短信登录,只针对已经通过短信验证注册的用户
+ *
+ * @author zhangchaozhou
+ */
+public class UserLoginSmsActivity extends AppCompatActivity {
+ EditText mEdtPhone;
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_login_sms);
+ mEdtPhone = findViewById(R.id.edt_phone);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+ }
+
+ public void onSend(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ */
+ BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+
+ public void onLogin(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO 此API需要在用户已经注册并验证的前提下才能使用
+ */
+ BmobUser.loginBySMSCode(phone, code, new LogInListener() {
+ @Override
+ public void done(BmobUser bmobUser, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("短信登录成功:" + bmobUser.getObjectId() + "-" + bmobUser.getUsername());
+ startActivity(new Intent(UserLoginSmsActivity.this, UserMainActivity.class));
+ } else {
+ mTvInfo.append("短信登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java
new file mode 100644
index 0000000..21243c3
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserMainActivity.java
@@ -0,0 +1,44 @@
+package cn.bmob.sms.activity.user;
+
+import android.content.Intent;
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.view.View;
+
+import cn.bmob.sms.R;
+import cn.bmob.v3.BmobUser;
+
+/**
+ * Created on 18/9/26 09:52
+ * TODO 用户登录后首页
+ * @author zhangchaozhou
+ */
+public class UserMainActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_main);
+ }
+
+ public void toResetPassword(View view) {
+ startActivity(new Intent(this,UserResetPasswordActivity.class));
+ }
+
+ public void toResetSms(View view) {
+ startActivity(new Intent(this,UserResetSmsActivity.class));
+ }
+
+ public void toBind(View view) {
+ startActivity(new Intent(this,UserBindActivity.class));
+ }
+
+ public void toUnBind(View view) {
+ startActivity(new Intent(this,UserUnBindActivity.class));
+ }
+
+ public void onExit(View view) {
+ BmobUser.logOut();
+ finish();
+ }
+}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java
similarity index 78%
rename from SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java
rename to app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java
index b12a6e5..3a22aff 100644
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserResetPasswordActivity.java
@@ -1,16 +1,13 @@
package cn.bmob.sms.activity.user;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
+import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
import cn.bmob.sms.R;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.exception.BmobException;
@@ -24,22 +21,20 @@
*/
public class UserResetPasswordActivity extends AppCompatActivity {
- @BindView(R.id.edt_origin_password)
EditText mEdtOriginPassword;
- @BindView(R.id.edt_new_password)
EditText mEdtNewPassword;
- @BindView(R.id.tv_info)
TextView mTvInfo;
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_reset_password);
- ButterKnife.bind(this);
+ mEdtOriginPassword = findViewById(R.id.edt_origin_password);
+ mEdtNewPassword = findViewById(R.id.edt_new_password);
+ mTvInfo = findViewById(R.id.tv_info);
}
- @OnClick(R.id.btn_reset)
- public void onViewClicked() {
+ public void onReset(View view) {
String originPassword = mEdtOriginPassword.getText().toString().trim();
if (TextUtils.isEmpty(originPassword)) {
Toast.makeText(this, "请输入原始密码", Toast.LENGTH_SHORT).show();
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java
new file mode 100644
index 0000000..0b2d940
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserResetSmsActivity.java
@@ -0,0 +1,89 @@
+package cn.bmob.sms.activity.user;
+
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.bmob.sms.R;
+import cn.bmob.sms.bean.User;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.QueryListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+/**
+ * Created on 18/9/26 09:39
+ * TODO 通过短信重置密码,只针对已经通过密码注册并且通过短信验证绑定的用户
+ *
+ * @author zhangchaozhou
+ */
+public class UserResetSmsActivity extends AppCompatActivity {
+
+ EditText mEdtNewPassword;
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_reset_sms);
+ mEdtNewPassword = findViewById(R.id.edt_new_password);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+ }
+
+ public void onSend(View view) {
+ User user = BmobUser.getCurrentUser(User.class);
+ String phone = user.getMobilePhoneNumber();
+ Boolean verify = user.getMobilePhoneNumberVerified();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ if (verify == null || !verify) {
+ Toast.makeText(this, "请先绑定手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ */
+ BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+
+ public void onReset(View view) {
+ String newPassword = mEdtNewPassword.getText().toString().trim();
+ if (TextUtils.isEmpty(newPassword)) {
+ Toast.makeText(this, "请输入新密码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ BmobUser.resetPasswordBySMSCode(code, newPassword, new UpdateListener() {
+ @Override
+ public void done(BmobException e) {
+ if (e == null) {
+ mTvInfo.append("重置成功");
+ } else {
+ mTvInfo.append("重置失败:" + e.getErrorCode() + "-" + e.getMessage());
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java
new file mode 100644
index 0000000..e1ce315
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpOrLoginSmsActivity.java
@@ -0,0 +1,84 @@
+package cn.bmob.sms.activity.user;
+
+import android.content.Intent;
+import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import cn.bmob.sms.R;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.LogInListener;
+import cn.bmob.v3.listener.QueryListener;
+
+/**
+ * Created on 18/9/25 16:12
+ * TODO 通过短信验证注册或登录
+ *
+ * @author zhangchaozhou
+ */
+public class UserSignUpOrLoginSmsActivity extends AppCompatActivity {
+
+ EditText mEdtPhone;
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_signup_or_login_sms);
+ mEdtPhone = findViewById(R.id.edt_phone);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+ }
+
+ public void onSend(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ */
+ BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+
+ public void onSignupOrLogin(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ BmobUser.signOrLoginByMobilePhone(phone, code, new LogInListener() {
+ @Override
+ public void done(BmobUser bmobUser, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("短信注册或登录成功:" + bmobUser.getUsername());
+ startActivity(new Intent(UserSignUpOrLoginSmsActivity.this, UserMainActivity.class));
+ } else {
+ mTvInfo.append("短信注册或登录失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java
similarity index 80%
rename from SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java
rename to app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java
index bb6c0cc..fc28e5a 100644
--- a/SMS/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordActivity.java
@@ -2,16 +2,13 @@
import android.content.Intent;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
+import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
import cn.bmob.sms.R;
import cn.bmob.sms.bean.User;
import cn.bmob.v3.exception.BmobException;
@@ -24,22 +21,20 @@
* @author zhangchaozhou
*/
public class UserSignUpPasswordActivity extends AppCompatActivity {
- @BindView(R.id.edt_username)
EditText mEdtUsername;
- @BindView(R.id.edt_password)
EditText mEdtPassword;
- @BindView(R.id.tv_info)
TextView mTvInfo;
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_signup_password);
- ButterKnife.bind(this);
+ mEdtUsername = findViewById(R.id.edt_username);
+ mEdtPassword = findViewById(R.id.edt_password);
+ mTvInfo = findViewById(R.id.tv_info);
}
- @OnClick(R.id.btn_signup)
- public void onViewClicked() {
+ public void onSignup(View view) {
String username = mEdtUsername.getText().toString().trim();
if (TextUtils.isEmpty(username)) {
Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java
new file mode 100644
index 0000000..f1d3b1c
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserSignUpPasswordAndSmsActivity.java
@@ -0,0 +1,115 @@
+package cn.bmob.sms.activity.user;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import cn.bmob.sms.R;
+import cn.bmob.sms.bean.User;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.QueryListener;
+import cn.bmob.v3.listener.SaveListener;
+
+/**
+ * Created on 18/9/25 16:23
+ * TODO 通过密码注册并通过短信验证绑定手机号码
+ * @author zhangchaozhou
+ */
+public class UserSignUpPasswordAndSmsActivity extends AppCompatActivity {
+
+ EditText mEdtUsername;
+ EditText mEdtPassword;
+ EditText mEdtNickname;
+ EditText mEdtPhone;
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_signup_password_and_sms);
+ mEdtUsername = findViewById(R.id.edt_username);
+ mEdtPassword = findViewById(R.id.edt_password);
+ mEdtNickname = findViewById(R.id.edt_nickname);
+ mEdtPhone = findViewById(R.id.edt_phone);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+ }
+
+ public void onSend(View view) {
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ */
+ BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+
+ public void onSignup(View view) {
+ String username = mEdtUsername.getText().toString().trim();
+ if (TextUtils.isEmpty(username)) {
+ Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String nickname = mEdtNickname.getText().toString().trim();
+ if (TextUtils.isEmpty(nickname)) {
+ Toast.makeText(this, "请输入昵称", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String password = mEdtPassword.getText().toString().trim();
+ if (TextUtils.isEmpty(password)) {
+ Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String phone = mEdtPhone.getText().toString().trim();
+ if (TextUtils.isEmpty(phone)) {
+ Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ User user = new User();
+ //TODO 设置手机号码(必填)
+ user.setMobilePhoneNumber(phone);
+ //TODO 设置用户名,如果没有传用户名,则默认为手机号码
+ user.setUsername(username);
+ //TODO 设置用户密码
+ user.setPassword(password);
+ //TODO 设置额外信息:此处为昵称
+ user.setNickname(nickname);
+ user.signOrLogin(code, new SaveListener() {
+ @Override
+ public void done(BmobUser bmobUser, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("短信注册成功:" + bmobUser.getUsername());
+ startActivity(new Intent(UserSignUpPasswordAndSmsActivity.this, UserMainActivity.class));
+ } else {
+ mTvInfo.append("短信注册失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java b/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java
new file mode 100644
index 0000000..c4e1c99
--- /dev/null
+++ b/app/src/main/java/cn/bmob/sms/activity/user/UserUnBindActivity.java
@@ -0,0 +1,94 @@
+package cn.bmob.sms.activity.user;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import cn.bmob.sms.R;
+import cn.bmob.sms.bean.User;
+import cn.bmob.v3.BmobSMS;
+import cn.bmob.v3.BmobUser;
+import cn.bmob.v3.exception.BmobException;
+import cn.bmob.v3.listener.QueryListener;
+import cn.bmob.v3.listener.UpdateListener;
+
+/**
+ * Created on 18/9/26 09:40
+ * TODO 通过短信绑定或解绑手机号码,只针对已经通过其他方式注册的用户
+ *
+ * @author zhangchaozhou
+ */
+public class UserUnBindActivity extends AppCompatActivity {
+
+ EditText mEdtCode;
+ TextView mTvInfo;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_user_unbind);
+ mEdtCode = findViewById(R.id.edt_code);
+ mTvInfo = findViewById(R.id.tv_info);
+ }
+
+ public void onSend(View view) {
+ User user = BmobUser.getCurrentUser(User.class);
+ String phone = user.getMobilePhoneNumber();
+ Boolean verify = user.getMobilePhoneNumberVerified();
+ if (TextUtils.isEmpty(phone) || verify == null || !verify) {
+ Toast.makeText(this, "当前账号尚未绑定手机号码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ /**
+ * TODO template 如果是自定义短信模板,此处替换为你在控制台设置的自定义短信模板名称;如果没有对应的自定义短信模板,则使用默认短信模板。
+ */
+ BmobSMS.requestSMSCode(phone, "DataSDK", new QueryListener() {
+ @Override
+ public void done(Integer smsId, BmobException e) {
+ if (e == null) {
+ mTvInfo.append("发送验证码成功,短信ID:" + smsId + "\n");
+ } else {
+ mTvInfo.append("发送验证码失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+
+ public void onUnbind(View view) {
+ User user = BmobUser.getCurrentUser(User.class);
+ final String phone = user.getMobilePhoneNumber();
+ String code = mEdtCode.getText().toString().trim();
+ if (TextUtils.isEmpty(code)) {
+ Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ BmobSMS.verifySmsCode(phone, code, new UpdateListener() {
+ @Override
+ public void done(BmobException e) {
+ if (e == null) {
+ mTvInfo.append("验证码验证成功,您可以在此时进行解绑操作!\n");
+ User user = BmobUser.getCurrentUser(User.class);
+ user.setMobilePhoneNumber("");
+ user.setMobilePhoneNumberVerified(false);
+ user.update(new UpdateListener() {
+ @Override
+ public void done(BmobException e) {
+ if (e == null) {
+ mTvInfo.append("解绑手机号码成功");
+ } else {
+ mTvInfo.append("解绑手机号码失败:" + e.getErrorCode() + "-" + e.getMessage());
+ }
+ }
+ });
+ } else {
+ mTvInfo.append("验证码验证失败:" + e.getErrorCode() + "-" + e.getMessage() + "\n");
+ }
+ }
+ });
+ }
+}
diff --git a/SMS/app/src/main/java/cn/bmob/sms/bean/User.java b/app/src/main/java/cn/bmob/sms/bean/User.java
similarity index 100%
rename from SMS/app/src/main/java/cn/bmob/sms/bean/User.java
rename to app/src/main/java/cn/bmob/sms/bean/User.java
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SMS/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
similarity index 52%
rename from SMS/app/src/main/res/drawable/ic_launcher_background.xml
rename to app/src/main/res/drawable/ic_launcher_background.xml
index 5713f34..07d5da9 100644
--- a/SMS/app/src/main/res/drawable/ic_launcher_background.xml
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -1,171 +1,170 @@
-
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
diff --git a/SMS/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
similarity index 81%
rename from SMS/app/src/main/res/layout/activity_main.xml
rename to app/src/main/res/layout/activity_main.xml
index 517332c..c55de24 100644
--- a/SMS/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,10 +1,10 @@
+ android:onClick="onNormal"
+ android:text="验证手机号码执行重要操作" />
+ android:onClick="onUserSignupPassword"
+ android:text="用户名密码注册" />
+ android:onClick="onSignupOrLoginSms"
+ android:text="验证手机号码注册或登录" />
+ android:onClick="onTest"
+ android:text="测试" />
+ android:onClick="onUserSignupPasswordAndSms"
+ android:text="用户名密码注册同时验证绑定手机号码" />
+ android:onClick="onUserLoginPassword"
+ android:text="用户名密码登录" />
+ android:onClick="onUserLoginSms"
+ android:text="验证手机号码登录" />
\ No newline at end of file
diff --git a/SMS/app/src/main/res/layout/activity_normal.xml b/app/src/main/res/layout/activity_normal.xml
similarity index 90%
rename from SMS/app/src/main/res/layout/activity_normal.xml
rename to app/src/main/res/layout/activity_normal.xml
index 20f794f..0960841 100644
--- a/SMS/app/src/main/res/layout/activity_normal.xml
+++ b/app/src/main/res/layout/activity_normal.xml
@@ -34,7 +34,8 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:text="发送验证码"/>
+ android:onClick="onSendSMSCode"
+ android:text="发送验证码" />
@@ -43,7 +44,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="验证"/>
+ android:onClick="onVerify"
+ android:text="验证" />
+ android:onClick="onSend"
+ android:text="发送验证码" />
@@ -43,7 +44,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="绑定"/>
+ android:onClick="onBind"
+ android:text="绑定" />
+ android:onClick="onLogin"
+ android:text="登录" />
+ android:onClick="onSend"
+ android:text="发送验证码" />
@@ -43,7 +44,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="登录"/>
+ android:onClick="onLogin"
+ android:text="登录" />
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context=".activity.user.UserMainActivity">
+ android:onClick="toResetPassword"
+ android:text="原始密码重置密码" />
+ android:onClick="toResetSms"
+ android:text="短信验证码重置密码" />
+ android:onClick="toBind"
+ android:text="绑定手机号码" />
+ android:onClick="toUnBind"
+ android:text="解绑手机号码" />
+ android:onClick="onExit"
+ android:text="退出登录" />
\ No newline at end of file
diff --git a/SMS/app/src/main/res/layout/activity_user_reset_password.xml b/app/src/main/res/layout/activity_user_reset_password.xml
similarity index 94%
rename from SMS/app/src/main/res/layout/activity_user_reset_password.xml
rename to app/src/main/res/layout/activity_user_reset_password.xml
index 281cb57..a769131 100644
--- a/SMS/app/src/main/res/layout/activity_user_reset_password.xml
+++ b/app/src/main/res/layout/activity_user_reset_password.xml
@@ -26,7 +26,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="重置"/>
+ android:onClick="onReset"
+ android:text="重置" />
+ android:onClick="onSend"
+ android:text="发送验证码" />
@@ -43,7 +44,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="重置"/>
+ android:onClick="onSend"
+ android:text="重置" />
+ android:onClick="onSend"
+ android:text="发送验证码" />
@@ -43,7 +44,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="注册或登录"/>
+ android:onClick="onSignupOrLogin"
+ android:text="注册或登录" />
+ android:onClick="onSignup"
+ android:text="注册" />
+ android:onClick="onSend"
+ android:text="发送验证码" />
@@ -68,7 +69,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
- android:text="注册"/>
+ android:onClick="onSignup"
+ android:text="注册" />
+ android:onClick="onSend"
+ android:text="发送验证码" />
@@ -37,7 +38,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
- android:text="解绑"/>
+ android:onClick="onUnbind"
+ android:text="解绑" />
-
-
+
+
\ No newline at end of file
diff --git a/SMS/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
similarity index 94%
rename from SMS/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index bbd3e02..eca70cf 100644
--- a/SMS/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..0e6170a
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..02f0c18
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ bmob-android-demo-sms
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..cb237db
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000..fa0f996
--- /dev/null
+++ b/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000..9ee9997
--- /dev/null
+++ b/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SMS/app/src/test/java/cn/bmob/sms/ExampleUnitTest.java b/app/src/test/java/cn/bmob/sms/ExampleUnitTest.java
similarity index 100%
rename from SMS/app/src/test/java/cn/bmob/sms/ExampleUnitTest.java
rename to app/src/test/java/cn/bmob/sms/ExampleUnitTest.java
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..71b99f4
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,5 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '7.3.1' apply false
+ id 'com.android.library' version '7.3.1' apply false
+}
\ No newline at end of file
diff --git a/SMS/gradle.properties b/gradle.properties
similarity index 55%
rename from SMS/gradle.properties
rename to gradle.properties
index 743d692..3e927b1 100644
--- a/SMS/gradle.properties
+++ b/gradle.properties
@@ -6,8 +6,16 @@
# 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.
-org.gradle.jvmargs=-Xmx1536m
+org.gradle.jvmargs=-Xmx2048m -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
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e708b1c
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/SMS/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
similarity index 80%
rename from SMS/gradle/wrapper/gradle-wrapper.properties
rename to gradle/wrapper/gradle-wrapper.properties
index 9740213..0c99ef7 100644
--- a/SMS/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Sep 25 09:55:24 CST 2018
+#Tue May 23 13:39:57 CST 2023
distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
+zipStoreBase=GRADLE_USER_HOME
diff --git a/SMS/gradlew b/gradlew
similarity index 75%
rename from SMS/gradlew
rename to gradlew
index cccdd3d..4f906e0 100755
--- a/SMS/gradlew
+++ b/gradlew
@@ -1,5 +1,21 @@
#!/usr/bin/env sh
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
##############################################################################
##
## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
@@ -66,6 +82,7 @@ esac
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
@@ -109,10 +126,11 @@ 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
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; 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
@@ -138,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $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" ;;
+ 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
@@ -159,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
exec "$JAVACMD" "$@"
diff --git a/SMS/gradlew.bat b/gradlew.bat
similarity index 66%
rename from SMS/gradlew.bat
rename to gradlew.bat
index e95643d..107acd3 100644
--- a/SMS/gradlew.bat
+++ b/gradlew.bat
@@ -1,84 +1,89 @@
-@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
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@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=
-
-@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 Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_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=%*
-
-: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
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@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
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@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="-Xmx64m" "-Xms64m"
+
+@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 execute
+
+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 execute
+
+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
+
+: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 %*
+
+: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
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..d580b87
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = "bmob-android-demo-sms"
+include ':app'