添加主界面使用密码登录的功能 #9

Merged
plyf8vez7 merged 1 commits from fancanyu_branch into master 4 months ago

@ -165,7 +165,7 @@
<component name="ClangdSettings">
<option name="formatViaClangd" value="false" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[DeviceId(pluginId=LocalEmulator, isTemplate=false, identifier=path=C:\Users\fancanyu\.android\avd\Pixel_7.avd)]" />
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[DeviceId(pluginId=LocalEmulator, isTemplate=false, identifier=path=C:\Users\fancanyu\.android\avd\Pixel_5.avd)]" />
<component name="ExternalProjectsData">
<projectState path="$PROJECT_DIR$">
<ProjectState />
@ -188,6 +188,13 @@
</state>
</system>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
</list>
</option>
</component>
<component name="GradleScriptDefinitionsStorage" workingDir="$PROJECT_DIR$" gradleHome="C:\Users\fancanyu\.gradle\wrapper\dists\gradle-8.13-bin\bynj8867joaln2pdnozgpow3q\gradle-8.13" javaHome="D:\Program Files\AndroidStudio\jbr" gradleVersion="8.13" />
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 5

@ -1,4 +1,4 @@
#Mon Jan 19 20:21:19 CST 2026
#Tue Jan 20 08:46:37 CST 2026
base.0=D\:\\Projects\\Notes-master\\app\\build\\intermediates\\dex\\debug\\mergeExtDexDebug\\classes.dex
base.1=D\:\\Projects\\Notes-master\\app\\build\\intermediates\\dex\\debug\\mergeProjectDexDebug\\0\\classes.dex
base.2=D\:\\Projects\\Notes-master\\app\\build\\intermediates\\dex\\debug\\mergeProjectDexDebug\\11\\classes.dex

@ -122,6 +122,20 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 检查是否已经通过密码验证
Intent intent = getIntent();
boolean isPasswordVerified = intent.getBooleanExtra("PASSWORD_VERIFIED", false);
// 检查是否需要密码验证
if (!isPasswordVerified && PasswordVerifyActivity.isPasswordEnabled(this)) {
// 如果已启用密码锁且未验证,跳转到验证页面
Intent verifyIntent = new Intent(this, PasswordVerifyActivity.class);
startActivity(verifyIntent);
finish();
return;
}
setContentView(R.layout.note_list);
initResources();
// 首次使用时添加引导笔记

@ -17,6 +17,9 @@ import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.Toast;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.LayoutInflater;
@ -45,6 +48,7 @@ public class NotesPreferenceActivity extends PreferenceActivity {
private static final String PREFERENCE_SYNC_ACCOUNT_KEY = "pref_sync_account_key"; // 同步账号偏好分类键
private static final String AUTHORITIES_FILTER_KEY = "authorities"; // 账号权限过滤键
private static final String PREFERENCE_PASSWORD_SETTING_KEY = "pref_key_password_setting"; // 密码锁设置偏好键
private PreferenceCategory mAccountCategory; // 账号设置偏好分类
private GTaskReceiver mReceiver; // 同步状态广播接收器
@ -77,6 +81,21 @@ public class NotesPreferenceActivity extends PreferenceActivity {
Log.w(TAG, "onCreate: Account category not found");
}
// 设置密码锁点击事件
Preference passwordSettingPref = findPreference(PREFERENCE_PASSWORD_SETTING_KEY);
if (passwordSettingPref != null) {
passwordSettingPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
showPasswordSettingDialog();
return true;
}
});
Log.d(TAG, "onCreate: Password setting preference found and click listener set");
} else {
Log.w(TAG, "onCreate: Password setting preference not found");
}
mReceiver = new GTaskReceiver();
// 注册同步服务广播过滤器
IntentFilter filter = new IntentFilter();
@ -458,6 +477,54 @@ public class NotesPreferenceActivity extends PreferenceActivity {
return settings.getLong(PREFERENCE_LAST_SYNC_TIME, 0);
}
/**
*
*/
private void showPasswordSettingDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("密码锁设置");
// 创建密码输入框
final EditText passwordEditText = new EditText(this);
passwordEditText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD);
passwordEditText.setHint("请输入4位数字密码");
passwordEditText.setFilters(new android.text.InputFilter[]{new android.text.InputFilter.LengthFilter(4)});
passwordEditText.setGravity(android.view.Gravity.CENTER);
passwordEditText.setTextSize(18f);
builder.setView(passwordEditText);
// 检查是否已设置密码
boolean isPasswordEnabled = PasswordVerifyActivity.isPasswordEnabled(this);
String currentPassword = PasswordVerifyActivity.getSavedPassword(this);
if (isPasswordEnabled) {
builder.setMessage("当前已启用密码锁,输入新密码修改,留空则取消密码锁");
} else {
builder.setMessage("设置4位数字密码启用密码锁");
}
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = passwordEditText.getText().toString().trim();
if (TextUtils.isEmpty(password)) {
// 取消密码锁
PasswordVerifyActivity.clearPassword(NotesPreferenceActivity.this);
Toast.makeText(NotesPreferenceActivity.this, "密码锁已取消", Toast.LENGTH_SHORT).show();
} else if (password.length() != 4) {
Toast.makeText(NotesPreferenceActivity.this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
} else {
// 设置密码
PasswordVerifyActivity.setPassword(NotesPreferenceActivity.this, password);
Toast.makeText(NotesPreferenceActivity.this, "密码设置成功", Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
/**
* 广
* 广UI

@ -0,0 +1,143 @@
package net.micode.notes.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import net.micode.notes.R;
public class PasswordVerifyActivity extends Activity implements OnClickListener {
public static final String PREFERENCE_PASSWORD_ENABLED = "net.micode.notes.password_enabled";
public static final String PREFERENCE_PASSWORD = "net.micode.notes.password";
private EditText mPasswordEditText;
private Button mVerifyButton;
private Button mForgotPasswordButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_password_verify);
initViews();
}
private void initViews() {
mPasswordEditText = (EditText) findViewById(R.id.et_password);
mVerifyButton = (Button) findViewById(R.id.btn_verify);
mForgotPasswordButton = (Button) findViewById(R.id.btn_forgot_password);
mVerifyButton.setOnClickListener(this);
mForgotPasswordButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_verify:
verifyPassword();
break;
case R.id.btn_forgot_password:
showForgotPasswordDialog();
break;
default:
break;
}
}
private void verifyPassword() {
String inputPassword = mPasswordEditText.getText().toString().trim();
if (TextUtils.isEmpty(inputPassword)) {
Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
return;
}
if (inputPassword.length() != 4) {
Toast.makeText(this, "请输入4位数字密码", Toast.LENGTH_SHORT).show();
return;
}
String savedPassword = getSavedPassword(this);
if (inputPassword.equals(savedPassword)) {
// 密码正确,进入应用
Intent intent = new Intent(this, NotesListActivity.class);
intent.putExtra("PASSWORD_VERIFIED", true); // 添加验证通过标志
startActivity(intent);
finish();
} else {
Toast.makeText(this, "密码错误,请重新输入", Toast.LENGTH_SHORT).show();
mPasswordEditText.setText("");
}
}
private void showForgotPasswordDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("忘记密码")
.setMessage("确定要重置密码吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
resetPassword();
}
})
.setNegativeButton("取消", null)
.show();
}
private void resetPassword() {
// 重置密码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
Toast.makeText(this, "密码已重置", Toast.LENGTH_SHORT).show();
// 进入应用
Intent intent = new Intent(this, NotesListActivity.class);
startActivity(intent);
finish();
}
// 静态方法:判断密码锁是否已启用
public static boolean isPasswordEnabled(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getBoolean(PREFERENCE_PASSWORD_ENABLED, false);
}
// 静态方法:获取保存的密码
public static String getSavedPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(PREFERENCE_PASSWORD, "");
}
// 静态方法:设置密码
public static void setPassword(Context context, String password) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, true)
.putString(PREFERENCE_PASSWORD, password)
.apply();
}
// 静态方法:清除密码
public static void clearPassword(Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit()
.putBoolean(PREFERENCE_PASSWORD_ENABLED, false)
.putString(PREFERENCE_PASSWORD, "")
.apply();
}
}
Loading…
Cancel
Save