浏览代码

feat:支持用户名+密码登录

yingjian.wu 3 月之前
父节点
当前提交
2eaf7d7dae
共有 2 个文件被更改,包括 229 次插入37 次删除
  1. 137 36
      app/src/main/java/com/paul/drone/activity/LoginActivity.java
  2. 92 1
      app/src/main/res/layout/activity_login.xml

+ 137 - 36
app/src/main/java/com/paul/drone/activity/LoginActivity.java

@@ -64,6 +64,33 @@ public class LoginActivity extends AppCompatActivity {
     private AlertDialog dialog;
     private SessionManager sessionManager;
 
+    // 添加新声明的视图变量
+    private LinearLayout layoutSmsLogin;
+    private LinearLayout layoutPasswordLogin;
+    private Button btnSwitchSms;
+    private Button btnSwitchPassword;
+    private Button btnSwitchSms2; // 第二组切换按钮
+    private Button btnSwitchPassword2; // 第二组切换按钮
+    private EditText etUsername; // 用户名输入框
+    private EditText etPassword; // 密码输入框
+    private Button btnPasswordLogin; // 密码登
+
+    // 切换到短信登录
+    private void switchToSmsLogin() {
+        layoutSmsLogin.setVisibility(View.VISIBLE);
+        layoutPasswordLogin.setVisibility(View.GONE);
+        btnSwitchSms.setEnabled(false);
+        btnSwitchPassword.setEnabled(true);
+    }
+
+    // 切换到密码登录
+    private void switchToPasswordLogin() {
+        layoutSmsLogin.setVisibility(View.GONE);
+        layoutPasswordLogin.setVisibility(View.VISIBLE);
+        btnSwitchSms.setEnabled(true);
+        btnSwitchPassword.setEnabled(false);
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -120,55 +147,90 @@ public class LoginActivity extends AppCompatActivity {
 
 
     private void initViews() {
+        // 短信登录相关视图
         editTextPhone = findViewById(R.id.et_phone_number);
         editTextSmsCode = findViewById(R.id.et_sms_code);
         buttonSendSms = findViewById(R.id.btn_send_sms_code);
         buttonLogin = findViewById(R.id.btn_login);
         tvSdkInitStatus = findViewById(R.id.tv_sdk_init_status);
+
+        // 登录方式切换相关视图
+        layoutSmsLogin = findViewById(R.id.layoutSmsLogin);
+        layoutPasswordLogin = findViewById(R.id.layoutPasswordLogin);
+        btnSwitchSms = findViewById(R.id.btn_switch_sms);
+        btnSwitchPassword = findViewById(R.id.btn_switch_password);
+        btnSwitchSms2 = findViewById(R.id.btn_switch_sms_2);
+        btnSwitchPassword2 = findViewById(R.id.btn_switch_password_2);
+
+        // 密码登录相关视图
+        etUsername = findViewById(R.id.et_username);
+        etPassword = findViewById(R.id.et_password);
+        btnPasswordLogin = findViewById(R.id.btn_password_login);
     }
 
     private void setupListeners() {
         // 发送验证码按钮点击事件
-        buttonSendSms.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                tvSdkInitStatus.setText(DJISDKManager.getInstance().isSDKRegistered() ? "Dji SDK 初始化成功" : "Dji SDK 初始化中。。。。");
-                String phoneNumber = editTextPhone.getText().toString().trim();
-                if (TextUtils.isEmpty(phoneNumber)) {
-                    Toast.makeText(LoginActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-                if (phoneNumber.length() != 11) {
-                    Toast.makeText(LoginActivity.this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-                
-                sendSmsCode(phoneNumber);
+        buttonSendSms.setOnClickListener(v -> {
+            tvSdkInitStatus.setText(DJISDKManager.getInstance().isSDKRegistered() ? "Dji SDK 初始化成功" : "Dji SDK 初始化中。。。。");
+            String phoneNumber = editTextPhone.getText().toString().trim();
+            if (TextUtils.isEmpty(phoneNumber)) {
+                Toast.makeText(LoginActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();
+                return;
             }
+            if (phoneNumber.length() != 11) {
+                Toast.makeText(LoginActivity.this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
+                return;
+            }
+
+            sendSmsCode(phoneNumber);
         });
 
-        // 登录按钮点击事件
-        buttonLogin.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                String phoneNumber = editTextPhone.getText().toString().trim();
-                String smsCode = editTextSmsCode.getText().toString().trim();
-                
-                if (TextUtils.isEmpty(phoneNumber)) {
-                    Toast.makeText(LoginActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-                if (TextUtils.isEmpty(smsCode)) {
-                    Toast.makeText(LoginActivity.this, "请输入验证码", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-                if (!DJISDKManager.getInstance().isSDKInitialized()) {
-                    Toast.makeText(LoginActivity.this, "SDK 未初始化,请稍后再试", Toast.LENGTH_SHORT).show();
-                    return;
-                }
-                
-                performLogin(phoneNumber, smsCode);
+        // 短信登录按钮点击事件
+        buttonLogin.setOnClickListener(v -> {
+            String phoneNumber = editTextPhone.getText().toString().trim();
+            String smsCode = editTextSmsCode.getText().toString().trim();
+
+            if (TextUtils.isEmpty(phoneNumber)) {
+                Toast.makeText(LoginActivity.this, "请输入手机号", Toast.LENGTH_SHORT).show();
+                return;
+            }
+            if (TextUtils.isEmpty(smsCode)) {
+                Toast.makeText(LoginActivity.this, "请输入验证码", Toast.LENGTH_SHORT).show();
+                return;
             }
+            if (!DJISDKManager.getInstance().isSDKInitialized()) {
+                Toast.makeText(LoginActivity.this, "SDK 未初始化,请稍后再试", Toast.LENGTH_SHORT).show();
+                return;
+            }
+
+            performLogin(phoneNumber, smsCode);
+        });
+
+        // 登录方式切换按钮点击事件
+        btnSwitchSms.setOnClickListener(v -> switchToSmsLogin());
+        btnSwitchPassword.setOnClickListener(v -> switchToPasswordLogin());
+        btnSwitchSms2.setOnClickListener(v -> switchToSmsLogin());
+        btnSwitchPassword2.setOnClickListener(v -> switchToPasswordLogin());
+
+        // 密码登录按钮点击事件
+        btnPasswordLogin.setOnClickListener(v -> {
+            String username = etUsername.getText().toString().trim();
+            String password = etPassword.getText().toString().trim();
+
+            if (TextUtils.isEmpty(username)) {
+                Toast.makeText(LoginActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();
+                return;
+            }
+            if (TextUtils.isEmpty(password)) {
+                Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
+                return;
+            }
+            if (!DJISDKManager.getInstance().isSDKInitialized()) {
+                Toast.makeText(LoginActivity.this, "SDK 未初始化,请稍后再试", Toast.LENGTH_SHORT).show();
+                return;
+            }
+
+            performPasswordLogin(username, password);
         });
     }
 
@@ -244,6 +306,45 @@ public class LoginActivity extends AppCompatActivity {
                         }
                 ));
     }
+
+
+    /**
+     * 执行登录
+     */
+    private void performPasswordLogin(String phoneNumber, String password) {
+        Log.i(TAG, "登录: " + phoneNumber + ", 密码: " + password);
+
+        // 禁用登录按钮
+        buttonLogin.setEnabled(false);
+        buttonLogin.setText("登录中...");
+
+        // 使用 NetworkRepository 执行登录
+        disposables.add(networkRepository.loginWithPassword(phoneNumber,password)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(
+                        response -> {
+                            buttonLogin.setEnabled(true);
+                            buttonLogin.setText("登录");
+
+                            if (response != null) {
+                                Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
+                                // 跳转到 MainActivity
+                                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
+                                startActivity(intent);
+                                finish();
+                            } else {
+                                Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
+                            }
+                        },
+                        throwable -> {
+                            buttonLogin.setEnabled(true);
+                            buttonLogin.setText("登录");
+                            String errorMessage = getErrorMessage(throwable);
+                            Toast.makeText(LoginActivity.this, "登录失败: " + errorMessage, Toast.LENGTH_SHORT).show();
+                        }
+                ));
+    }
     
     /**
      * 统一错误处理

+ 92 - 1
app/src/main/res/layout/activity_login.xml

@@ -23,6 +23,7 @@
         android:layout_marginBottom="16dp"
         android:visibility="gone"/>
 
+    <!-- 短信登录布局 -->
     <LinearLayout
         android:id="@+id/layoutSmsLogin"
         android:layout_width="match_parent"
@@ -66,6 +67,32 @@
 
         </LinearLayout>
 
+        <!-- 登录方式切换按钮移到这里 -->
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginBottom="16dp">
+
+            <Button
+                android:id="@+id/btn_switch_sms"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="短信登录"
+                android:layout_marginEnd="4dp"
+                android:enabled="false"/>
+
+            <Button
+                android:id="@+id/btn_switch_password"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="密码登录"
+                android:layout_marginStart="4dp" />
+
+        </LinearLayout>
+
         <Button
             android:id="@+id/btn_login"
             android:layout_width="match_parent"
@@ -75,4 +102,68 @@
 
     </LinearLayout>
 
-</LinearLayout>
+    <!-- 密码登录布局 (默认隐藏) -->
+    <LinearLayout
+        android:id="@+id/layoutPasswordLogin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="16dp"
+        android:visibility="gone">
+
+        <EditText
+            android:id="@+id/et_username"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="请输入用户名"
+            android:inputType="text"
+            android:layout_marginBottom="16dp"
+            android:padding="12dp"
+            android:background="@drawable/edit_text_border" />
+
+        <EditText
+            android:id="@+id/et_password"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="请输入密码"
+            android:inputType="textPassword"
+            android:layout_marginBottom="16dp"
+            android:padding="12dp"
+            android:background="@drawable/edit_text_border" />
+
+        <!-- 登录方式切换按钮移到这里 -->
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:layout_marginBottom="16dp">
+
+            <Button
+                android:id="@+id/btn_switch_sms_2"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="短信登录"
+                android:layout_marginEnd="4dp" />
+
+            <Button
+                android:id="@+id/btn_switch_password_2"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="密码登录"
+                android:layout_marginStart="4dp"
+                android:enabled="false"/>
+
+        </LinearLayout>
+
+        <Button
+            android:id="@+id/btn_password_login"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="登录"
+            android:padding="12dp" />
+
+    </LinearLayout>
+
+</LinearLayout>