Parcourir la source

image captcha code verify

hanjing il y a 6 ans
Parent
commit
cbe4b2f6df

+ 4 - 0
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -1923,4 +1923,8 @@ public interface ApiService {
     @GET("app/search/keywords")
     Observable<BaseMessage> keywords();
 
+    @GET("app/auth/getimgcaptcha")
+    Observable<BaseMessage> getImgCaptcha();
+
+
 }

+ 47 - 0
app/src/main/java/com/sheep/gamegroup/module/login/fragments/SignInFgt.java

@@ -1,6 +1,8 @@
 package com.sheep.gamegroup.module.login.fragments;
 
 
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.graphics.drawable.BitmapDrawable;
 import android.support.annotation.NonNull;
 import android.support.design.widget.Snackbar;
@@ -10,6 +12,7 @@ import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.text.method.HideReturnsTransformationMethod;
 import android.text.method.PasswordTransformationMethod;
+import android.util.Base64;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -76,6 +79,14 @@ public class SignInFgt extends AbsLoginFgt {
     ImageView accountMenuBtn;
     @BindView(R.id.show_hide_pwd_btn)
     ImageView showHidePwdBtn;
+    @BindView(R.id.verify_box)
+    TextView verifyBox;
+    @BindView(R.id.captcha_code_view)
+    ImageView verifyImageView;
+    @BindView(R.id.captcha_seperator)
+    View verifySeperator;
+
+    private String captchaId;
 
     public SignInFgt() {
         // Required empty public constructor
@@ -155,6 +166,10 @@ public class SignInFgt extends AbsLoginFgt {
         jsonObject.put("user_name", userNameBox.getText().toString().trim());
         jsonObject.put("password", passwordBox.getText().toString().trim());
         jsonObject.put("invitation_code", ChannelContent.getInstance().getChannel_name());
+        if (!TextUtils.isEmpty(captchaId)) {
+            jsonObject.put("captcha_id", captchaId);
+            jsonObject.put("captcha_code", verifyBox.getText().toString().trim());
+        }
         PreferenceUtils.setPrefString(SheepApp.getInstance(), UMConfigUtils.LOGIN_TYPE, UMConfigUtils.Source.SHEEP);
         SheepApp.getInstance().getNetComponent().getApiService().loginByUserName(jsonObject)
                 .subscribeOn(Schedulers.io())
@@ -164,6 +179,9 @@ public class SignInFgt extends AbsLoginFgt {
                     public void onError(BaseMessage baseMessage) {
                         hideProgress();
                         G.shortToast(baseMessage);
+                        if (baseMessage.getCode() == 400000004 || baseMessage.getCode() == 400000005) {
+                            getCaptchaImage();
+                        }
                     }
 
                     @Override
@@ -190,6 +208,35 @@ public class SignInFgt extends AbsLoginFgt {
                 });
     }
 
+    @OnClick(R.id.captcha_code_view)
+    public void getCaptchaImage() {
+        verifyBox.setVisibility(View.VISIBLE);
+        verifyImageView.setVisibility(View.VISIBLE);
+        verifySeperator.setVisibility(View.VISIBLE);
+        SheepApp.getInstance().getNetComponent().getApiService().getImgCaptcha()
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+                        JSONObject json = JSONObject.parseObject(baseMessage.getData().toString());
+                        captchaId = json.getString("captcha_id");
+                        String blob = json.getString("captcha_blob");
+                        blob = blob.substring(22);
+                        byte[] decodedString = Base64.decode(blob, Base64.DEFAULT);
+                        Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
+                        verifyImageView.setImageBitmap(decodedByte);
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+                        G.shortToast(baseMessage);
+                    }
+                });
+
+    }
+
     private boolean validatePhoneCaptcha() {
         String etCode = captchaBox.getText().toString().trim();
         if (TextUtils.isEmpty(etCode)) {

+ 31 - 4
app/src/main/res/layout/fragment_sign_in.xml

@@ -9,8 +9,7 @@
         android:id="@+id/for_account_pwd_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="50dp"
-        android:visibility="gone">
+        android:layout_marginTop="50dp">
 
         <EditText
             android:id="@+id/user_name_box"
@@ -44,13 +43,41 @@
         <View
             style="@style/login_separetor_line_style"
             android:layout_below="@+id/password_box" />
+
+        <EditText
+            android:id="@+id/verify_box"
+            style="@style/login_edit_style_name"
+            android:layout_below="@+id/password_box"
+            android:layout_width="60dp"
+            android:hint="验证码"
+            android:visibility="gone"
+            android:maxLength="16" />
+        
+        <ImageView
+            android:id="@+id/captcha_code_view"
+            android:background="@color/gray_F0F0F0"
+            android:layout_below="@+id/password_box"
+            android:layout_toRightOf="@+id/verify_box"
+            android:layout_marginLeft="16dp"
+            android:layout_marginTop="20dp"
+            android:visibility="gone"
+            android:layout_width="120dp"
+            android:layout_height="40dp" />
+
+        <View
+            android:id="@+id/captcha_seperator"
+            style="@style/login_separetor_line_style"
+            android:layout_width="60dp"
+            android:visibility="gone"
+            android:layout_below="@+id/verify_box" />
     </RelativeLayout>
 
     <RelativeLayout
         android:id="@+id/for_phone_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="50dp">
+        android:layout_marginTop="50dp"
+        android:visibility="gone">
 
         <EditText
             android:id="@+id/phone_number_box"
@@ -103,7 +130,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:layout_marginTop="185dp"
+        android:layout_marginTop="245dp"
         android:text="登录遇到问题?"
         android:textColor="@color/blue_34a6e7"
         android:textSize="12sp" />