diff --git a/android/.gradle/8.5/checksums/checksums.lock b/android/.gradle/8.5/checksums/checksums.lock
index 2ae4c2e..ecdbbb3 100644
Binary files a/android/.gradle/8.5/checksums/checksums.lock and b/android/.gradle/8.5/checksums/checksums.lock differ
diff --git a/android/.gradle/8.5/checksums/md5-checksums.bin b/android/.gradle/8.5/checksums/md5-checksums.bin
new file mode 100644
index 0000000..727fdec
Binary files /dev/null and b/android/.gradle/8.5/checksums/md5-checksums.bin differ
diff --git a/android/.gradle/8.5/checksums/sha1-checksums.bin b/android/.gradle/8.5/checksums/sha1-checksums.bin
new file mode 100644
index 0000000..b4c7026
Binary files /dev/null and b/android/.gradle/8.5/checksums/sha1-checksums.bin differ
diff --git a/android/.gradle/8.5/executionHistory/executionHistory.bin b/android/.gradle/8.5/executionHistory/executionHistory.bin
index dd85478..dc10710 100644
Binary files a/android/.gradle/8.5/executionHistory/executionHistory.bin and b/android/.gradle/8.5/executionHistory/executionHistory.bin differ
diff --git a/android/.gradle/8.5/executionHistory/executionHistory.lock b/android/.gradle/8.5/executionHistory/executionHistory.lock
index 851d733..c5e5d82 100644
Binary files a/android/.gradle/8.5/executionHistory/executionHistory.lock and b/android/.gradle/8.5/executionHistory/executionHistory.lock differ
diff --git a/android/.gradle/8.5/fileHashes/fileHashes.bin b/android/.gradle/8.5/fileHashes/fileHashes.bin
index 601bd35..6611f0c 100644
Binary files a/android/.gradle/8.5/fileHashes/fileHashes.bin and b/android/.gradle/8.5/fileHashes/fileHashes.bin differ
diff --git a/android/.gradle/8.5/fileHashes/fileHashes.lock b/android/.gradle/8.5/fileHashes/fileHashes.lock
index 6feed94..05a7984 100644
Binary files a/android/.gradle/8.5/fileHashes/fileHashes.lock and b/android/.gradle/8.5/fileHashes/fileHashes.lock differ
diff --git a/android/.gradle/8.5/fileHashes/resourceHashesCache.bin b/android/.gradle/8.5/fileHashes/resourceHashesCache.bin
index cda62dc..c08a6ac 100644
Binary files a/android/.gradle/8.5/fileHashes/resourceHashesCache.bin and b/android/.gradle/8.5/fileHashes/resourceHashesCache.bin differ
diff --git a/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index c1876c5..7485eb7 100644
Binary files a/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/android/.gradle/buildOutputCleanup/outputFiles.bin b/android/.gradle/buildOutputCleanup/outputFiles.bin
index 3629606..605b9ab 100644
Binary files a/android/.gradle/buildOutputCleanup/outputFiles.bin and b/android/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/android/.gradle/config.properties b/android/.gradle/config.properties
index 2caad98..6b0e7f7 100644
--- a/android/.gradle/config.properties
+++ b/android/.gradle/config.properties
@@ -1,2 +1,7 @@
+<<<<<<< HEAD
+#Mon May 26 14:33:47 GMT+08:00 2025
+java.home=D\:\\Android\\AS_INstall\\jbr
+=======
#Sat May 24 23:39:46 CST 2025
java.home=D\:\\Andr\\jbr
+>>>>>>> a11e684a7b53b2288bd2435ed63bc73bcd82db22
diff --git a/android/.gradle/file-system.probe b/android/.gradle/file-system.probe
index d2f11f8..61691d3 100644
Binary files a/android/.gradle/file-system.probe and b/android/.gradle/file-system.probe differ
diff --git a/android/.idea/android.iml b/android/.idea/android.iml
index 12bbf74..d6ebd48 100644
--- a/android/.idea/android.iml
+++ b/android/.idea/android.iml
@@ -1 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/codeStyles/Project.xml b/android/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..7643783
--- /dev/null
+++ b/android/.idea/codeStyles/Project.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ xmlns:android
+
+ ^$
+
+
+
+
+
+
+
+
+ xmlns:.*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*:id
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ .*:name
+
+ http://schemas.android.com/apk/res/android
+
+
+
+
+
+
+
+
+ name
+
+ ^$
+
+
+
+
+
+
+
+
+ style
+
+ ^$
+
+
+
+
+
+
+
+
+ .*
+
+ ^$
+
+
+ BY_NAME
+
+
+
+
+
+
+ .*
+
+ http://schemas.android.com/apk/res/android
+
+
+ ANDROID_ATTRIBUTE_ORDER
+
+
+
+
+
+
+ .*
+
+ .*
+
+
+ BY_NAME
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/codeStyles/codeStyleConfig.xml b/android/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/android/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/.idea/deploymentTargetSelector.xml b/android/.idea/deploymentTargetSelector.xml
index d9dbf01..531a5e8 100644
--- a/android/.idea/deploymentTargetSelector.xml
+++ b/android/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,14 @@
+
+
+
+
+
+
+
+
diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml
index e756225..d15a481 100644
--- a/android/.idea/misc.xml
+++ b/android/.idea/misc.xml
@@ -1,3 +1,4 @@
+
diff --git a/android/app/build.gradle b/android/app/build.gradle
index d1545ae..5bada6c 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -49,8 +49,11 @@ dependencies {
implementation 'org.tensorflow:tensorflow-lite:2.14.0'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.5.0'
implementation 'org.tensorflow:tensorflow-lite-support:0.3.0'
+ implementation 'org.mindrot:jbcrypt:0.4'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation "com.google.truth:truth:1.1.3"
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/LoginActivity.kt b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/LoginActivity.kt
index e718156..5ca3ab3 100644
--- a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/LoginActivity.kt
+++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/LoginActivity.kt
@@ -2,18 +2,24 @@ package org.tensorflow.lite.examples.poseestimation
import android.content.Intent
import android.os.Bundle
-import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
-import com.google.android.material.textfield.TextInputEditText
import android.widget.Button
-import android.widget.TextView
import android.widget.EditText
+import android.widget.TextView
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import org.tensorflow.lite.examples.poseestimation.auth.UserDao
+import org.tensorflow.lite.examples.poseestimation.utils.PasswordUtils
class LoginActivity : AppCompatActivity() {
+ private lateinit var userDao: UserDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
+ // 初始化 UserDao
+ userDao = UserDao(this)
+
+
// 获取从上一个页面传递的数据
val selectedGender = intent.getStringExtra("selected_gender")
val selectedAge = intent.getIntExtra("selected_age", 0)
@@ -42,16 +48,44 @@ class LoginActivity : AppCompatActivity() {
return@setOnClickListener
}
+ // 执行数据库查询验证
+ val user = userDao.getUserByUsername(email)
+ if (user != null) {
+ // 验证密码
+
+
+ if (PasswordUtils.verifyPassword(password, user.passwordHash)) {
+ // 登录成功
+ Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show()
+
+ val intent = Intent(this, MainActivity::class.java)
+ intent.putExtra("selected_gender", selectedGender)
+ intent.putExtra("selected_age", selectedAge)
+ intent.putExtra("selected_weight", selectedWeight)
+ intent.putExtra("selected_height", selectedHeight)
+ //intent.putExtra("user_id", user.id) // 传递用户ID
+ startActivity(intent)
+ finish()
+ } else {
+ //密码错误
+ passwordEdit.error = "密码不正确"
+ }
+
+ }else {
+ //用户不存在
+ emailEdit.error = "用户不存在"
+ }
+
// TODO: 这里添加实际的登录验证逻辑
// 目前仅做演示,直接跳转到主页面
- val intent = Intent(this, MainActivity::class.java)
- intent.putExtra("selected_gender", selectedGender)
- intent.putExtra("selected_age", selectedAge)
- intent.putExtra("selected_weight", selectedWeight)
- intent.putExtra("selected_height", selectedHeight)
- startActivity(intent)
- finish()
- }
+// val intent = Intent(this, MainActivity::class.java)
+// intent.putExtra("selected_gender", selectedGender)
+// intent.putExtra("selected_age", selectedAge)
+// intent.putExtra("selected_weight", selectedWeight)
+// intent.putExtra("selected_height", selectedHeight)
+// startActivity(intent)
+// finish()
+ }
// 忘记密码点击事件
forgotPassword.setOnClickListener {
diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/SignupActivity.kt b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/SignupActivity.kt
index 6c60c2e..9c5b85c 100644
--- a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/SignupActivity.kt
+++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/SignupActivity.kt
@@ -6,12 +6,18 @@ import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
+import org.tensorflow.lite.examples.poseestimation.auth.UserDao
+import org.tensorflow.lite.examples.poseestimation.auth.User
+import org.tensorflow.lite.examples.poseestimation.utils.PasswordUtils
class SignupActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_signup)
+ // 初始化 UserDao
+ var userDao = UserDao(this)
+
// 绑定控件
val usernameEdit = findViewById(R.id.editUsername)
val passwordEdit = findViewById(R.id.editPassword)
@@ -46,9 +52,29 @@ class SignupActivity : AppCompatActivity() {
return@setOnClickListener
}
- // TODO: 这里添加实际的注册逻辑
- Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show()
- finish()
+ // 检查用户名是否已存在
+ if (userDao.checkUsernameExists(username)) {
+ usernameEdit.error = "用户名已存在"
+ Toast.makeText(this, "用户名已存在", Toast.LENGTH_SHORT).show()
+ return@setOnClickListener
+ }
+ // 加密密码
+ val passwordHash = PasswordUtils.hashPassword(password)
+
+ val user = User()
+ user.setUsername(username)
+ user.setPasswordHash(passwordHash)
+
+
+
+// 保存到数据库
+ val userId = userDao.addUser(user)
+ if (userId != (-1).toLong()) {
+ Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show()
+ finish()
+ } else {
+ Toast.makeText(this, "注册失败,请重试", Toast.LENGTH_SHORT).show()
+ }
}
// Login Tab点击事件
diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/DatabaseHelper.java b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/DatabaseHelper.java
new file mode 100644
index 0000000..35aea9f
--- /dev/null
+++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/DatabaseHelper.java
@@ -0,0 +1,49 @@
+package org.tensorflow.lite.examples.poseestimation.auth;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+public class DatabaseHelper extends SQLiteOpenHelper{
+
+ // 数据库信息
+ private static final String DATABASE_NAME = "user_database";
+ private static final int DATABASE_VERSION = 1;
+
+ // 表名和列名
+ public static final String TABLE_USERS = "users";
+ public static final String COLUMN_ID = "_id";
+ public static final String COLUMN_USERNAME = "username";
+ public static final String COLUMN_PASSWORD_HASH = "password_hash";
+ public static final String COLUMN_AGE = "age";
+ public static final String COLUMN_WEIGHT = "weight";
+ public static final String COLUMN_GENDER = "gender";
+ public static final String COLUMN_HEIGHT = "height";
+
+ // 创建表的SQL语句
+ private static final String CREATE_TABLE_USERS =
+ "CREATE TABLE " + TABLE_USERS + "("
+ + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ + COLUMN_USERNAME + " TEXT UNIQUE NOT NULL,"
+ + COLUMN_PASSWORD_HASH + " TEXT NOT NULL"
+// + COLUMN_AGE + " INTEGER,"
+// + COLUMN_WEIGHT + " REAL,"
+// + COLUMN_GENDER + " TEXT,"
+// + COLUMN_HEIGHT + " REAL"
+ + ")";
+
+ // 构造函数
+ public DatabaseHelper(Context context) {
+ super(context, DATABASE_NAME, null, DATABASE_VERSION);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(CREATE_TABLE_USERS);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_USERS);
+ onCreate(db);
+ }
+}
diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/User.java b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/User.java
new file mode 100644
index 0000000..7ec6a62
--- /dev/null
+++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/User.java
@@ -0,0 +1,46 @@
+package org.tensorflow.lite.examples.poseestimation.auth;
+
+import java.io.Serializable;
+public class User implements Serializable{
+ private long id;
+ private String username;
+ private String passwordHash;
+// private int age;
+// private float weight;
+// private String gender;
+// private float height;
+
+ // 构造函数、Getter和Setter方法
+ public User() {}
+
+ public User(String username, String passwordHash) {
+ this.username = username;
+ this.passwordHash = passwordHash;
+// this.age = age;
+// this.weight = weight;
+// this.gender = gender;
+// this.height = height;
+ }
+
+ // Getter和Setter方法
+ public long getId() { return id; }
+ public void setId(long id) { this.id = id; }
+
+ public String getUsername() { return username; }
+ public void setUsername(String username) { this.username = username; }
+
+ public String getPasswordHash() { return passwordHash; }
+ public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }
+
+// public int getAge() { return age; }
+// public void setAge(int age) { this.age = age; }
+//
+// public float getWeight() { return weight; }
+// public void setWeight(float weight) { this.weight = weight; }
+//
+// public String getGender() { return gender; }
+// public void setGender(String gender) { this.gender = gender; }
+//
+// public float getHeight() { return height; }
+// public void setHeight(float height) { this.height = height; }
+}
diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/UserDao.java b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/UserDao.java
new file mode 100644
index 0000000..e719854
--- /dev/null
+++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/auth/UserDao.java
@@ -0,0 +1,130 @@
+package org.tensorflow.lite.examples.poseestimation.auth;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import org.tensorflow.lite.examples.poseestimation.auth.User;
+import java.util.ArrayList;
+import java.util.List;
+public class UserDao {
+ private DatabaseHelper databaseHelper;
+
+ public UserDao(Context context) {
+ databaseHelper = new DatabaseHelper(context);
+ }
+
+ // 添加用户
+ public long addUser(User user) {
+ SQLiteDatabase db = databaseHelper.getWritableDatabase();
+
+ ContentValues values = new ContentValues();
+ values.put(DatabaseHelper.COLUMN_USERNAME, user.getUsername());
+ values.put(DatabaseHelper.COLUMN_PASSWORD_HASH, user.getPasswordHash());
+// values.put(DatabaseHelper.COLUMN_AGE, user.getAge());
+// values.put(DatabaseHelper.COLUMN_WEIGHT, user.getWeight());
+// values.put(DatabaseHelper.COLUMN_GENDER, user.getGender());
+// values.put(DatabaseHelper.COLUMN_HEIGHT, user.getHeight());
+
+ long id = db.insert(DatabaseHelper.TABLE_USERS, null, values);
+ db.close();
+ return id;
+ }
+
+ // 根据用户名获取用户
+ public User getUserByUsername(String username) {
+ SQLiteDatabase db = databaseHelper.getReadableDatabase();
+
+ String[] projection = {
+ DatabaseHelper.COLUMN_ID,
+ DatabaseHelper.COLUMN_USERNAME,
+ DatabaseHelper.COLUMN_PASSWORD_HASH,
+// DatabaseHelper.COLUMN_AGE,
+// DatabaseHelper.COLUMN_WEIGHT,
+// DatabaseHelper.COLUMN_GENDER,
+// DatabaseHelper.COLUMN_HEIGHT
+ };
+
+ String selection = DatabaseHelper.COLUMN_USERNAME + " = ?";
+ String[] selectionArgs = { username };
+
+ Cursor cursor = db.query(
+ DatabaseHelper.TABLE_USERS,
+ projection,
+ selection,
+ selectionArgs,
+ null,
+ null,
+ null
+ );
+
+ User user = null;
+ if (cursor.moveToFirst()) {
+ user = new User();
+ user.setId(cursor.getLong(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
+ user.setUsername(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_USERNAME)));
+ user.setPasswordHash(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_PASSWORD_HASH)));
+// user.setAge(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_AGE)));
+// user.setWeight(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.COLUMN_WEIGHT)));
+// user.setGender(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_GENDER)));
+// user.setHeight(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.COLUMN_HEIGHT)));
+ }
+
+ cursor.close();
+ db.close();
+ return user;
+ }
+
+ // 检查用户名是否存在
+ public boolean checkUsernameExists(String username) {
+ SQLiteDatabase db = databaseHelper.getReadableDatabase();
+
+ String[] projection = { DatabaseHelper.COLUMN_USERNAME };
+ String selection = DatabaseHelper.COLUMN_USERNAME + " = ?";
+ String[] selectionArgs = { username };
+
+ Cursor cursor = db.query(
+ DatabaseHelper.TABLE_USERS,
+ projection,
+ selection,
+ selectionArgs,
+ null,
+ null,
+ null
+ );
+
+ boolean exists = cursor.moveToFirst();
+ cursor.close();
+ db.close();
+
+ return exists;
+ }
+
+ // 获取所有用户
+ public List getAllUsers() {
+ List userList = new ArrayList<>();
+ String selectQuery = "SELECT * FROM " + DatabaseHelper.TABLE_USERS;
+
+ SQLiteDatabase db = databaseHelper.getReadableDatabase();
+ Cursor cursor = db.rawQuery(selectQuery, null);
+
+ if (cursor.moveToFirst()) {
+ do {
+ User user = new User();
+ user.setId(cursor.getLong(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
+ user.setUsername(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_USERNAME)));
+ user.setPasswordHash(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_PASSWORD_HASH)));
+// user.setAge(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_AGE)));
+// user.setWeight(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.COLUMN_WEIGHT)));
+// user.setGender(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_GENDER)));
+// user.setHeight(cursor.getFloat(cursor.getColumnIndex(DatabaseHelper.COLUMN_HEIGHT)));
+
+ userList.add(user);
+ } while (cursor.moveToNext());
+ }
+
+ cursor.close();
+ db.close();
+ return userList;
+ }
+}
diff --git a/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/utils/PasswordUtils.java b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/utils/PasswordUtils.java
new file mode 100644
index 0000000..8758521
--- /dev/null
+++ b/android/app/src/main/java/org/tensorflow/lite/examples/poseestimation/utils/PasswordUtils.java
@@ -0,0 +1,40 @@
+package org.tensorflow.lite.examples.poseestimation.utils;
+
+import android.util.Base64;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+public class PasswordUtils {
+ private static final String ALGORITHM = "SHA-256";
+ private static final String SECRET_KEY = "YourSecretKey123"; // 实际应用中应存储在安全位置
+
+ // 生成密码哈希
+ public static String hashPassword(String password) {
+ try {
+ MessageDigest digest = MessageDigest.getInstance(ALGORITHM);
+ byte[] encodedHash = digest.digest(password.getBytes());
+
+ StringBuilder hexString = new StringBuilder(2 * encodedHash.length);
+ for (byte b : encodedHash) {
+ String hex = Integer.toHexString(0xff & b);
+ if (hex.length() == 1) {
+ hexString.append('0');
+ }
+ hexString.append(hex);
+ }
+ return hexString.toString();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ // 验证密码
+ public static boolean verifyPassword(String password, String hashedPassword) {
+ String hashedInput = hashPassword(password);
+ return hashedInput != null && hashedInput.equals(hashedPassword);
+ }
+}
diff --git a/android/local.properties b/android/local.properties
index c55b0ee..8b9df9c 100644
--- a/android/local.properties
+++ b/android/local.properties
@@ -4,5 +4,10 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
+<<<<<<< HEAD
+#Mon May 26 14:34:26 GMT+08:00 2025
+sdk.dir=D\:\\wangjiachen\\sdk
+=======
#Sat May 24 23:39:55 CST 2025
sdk.dir=C\:\\Users\\26891\\AppData\\Local\\Android\\Sdk
+>>>>>>> a11e684a7b53b2288bd2435ed63bc73bcd82db22