Browse Source

🎨 第一次注册时,需要填写一次信息

master
LiuSiXiang-007 1 year ago
parent
commit
071c0879c8
  1. 5
      app/src/main/java/com/kanglai/push/app/AppApplication.java
  2. 3
      app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java
  3. 119
      app/src/main/java/com/kanglai/push/entity/SsoUser.java
  4. 6
      app/src/main/java/com/kanglai/push/mapper/LoginMapper.java
  5. 6
      app/src/main/java/com/kanglai/push/service/Impl/LoginServiceImpl.java
  6. 4
      app/src/main/java/com/kanglai/push/service/LoginService.java
  7. 10
      app/src/main/java/com/kanglai/push/ui/activity/LoginSurveyActivity.java
  8. 5
      app/src/main/java/com/kanglai/push/ui/adapter/SearchRecyclerAdapter.java
  9. 3
      app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java
  10. 25
      app/src/main/java/com/kanglai/push/ui/vm/AuroraViewModel.java
  11. 102
      app/src/main/java/com/kanglai/push/ui/vm/LoginSurveyViewModel.java
  12. 8
      app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java
  13. 51
      app/src/main/java/com/kanglai/push/util/RandomUtil.java
  14. 66
      app/src/main/res/drawable-nodpi/icon_dice.xml
  15. 7
      app/src/main/res/drawable/icon_btn_border.xml
  16. 2
      app/src/main/res/drawable/icon_btn_swipeable_bg1.xml
  17. 91
      app/src/main/res/layout/activity_login_survey.xml
  18. 17
      app/src/main/res/values/array.xml

5
app/src/main/java/com/kanglai/push/app/AppApplication.java

@ -1,5 +1,7 @@
package com.kanglai.push.app; package com.kanglai.push.app;
import android.content.Context;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
@ -40,9 +42,12 @@ public class AppApplication extends BaseApplication {
public AppComponent appComponent; public AppComponent appComponent;
public static Context mContext;
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
mContext = this;
// 注入应用程序上下文 // 注入应用程序上下文
appComponent = DaggerAppComponent.builder() appComponent = DaggerAppComponent.builder()
.application(this) .application(this)

3
app/src/main/java/com/kanglai/push/di/component/ServiceComponent.java

@ -13,6 +13,7 @@ import com.kanglai.push.ui.vm.InstantDetailViewModel;
import com.kanglai.push.ui.vm.InstantViewModel; import com.kanglai.push.ui.vm.InstantViewModel;
import com.kanglai.push.ui.vm.LinkDetailViewModel; import com.kanglai.push.ui.vm.LinkDetailViewModel;
import com.kanglai.push.ui.vm.LinkViewModel; import com.kanglai.push.ui.vm.LinkViewModel;
import com.kanglai.push.ui.vm.LoginSurveyViewModel;
import com.kanglai.push.ui.vm.LoginViewModel; import com.kanglai.push.ui.vm.LoginViewModel;
import com.kanglai.push.ui.vm.MessageViewModel; import com.kanglai.push.ui.vm.MessageViewModel;
import com.kanglai.push.ui.vm.PushTypeViewModel; import com.kanglai.push.ui.vm.PushTypeViewModel;
@ -61,4 +62,6 @@ public interface ServiceComponent {
void inject(InstantDetailViewModel viewModel); void inject(InstantDetailViewModel viewModel);
void inject(FocusDetailViewModel viewModel); void inject(FocusDetailViewModel viewModel);
void inject(LoginSurveyViewModel viewModel);
} }

119
app/src/main/java/com/kanglai/push/entity/SsoUser.java

@ -0,0 +1,119 @@
package com.kanglai.push.entity;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* SSO用户表
* @Author: liusixiang007
* @since: 2024/1/9
*/
@Data
@Accessors
public class SsoUser implements Parcelable {
private String id;
/** 邮箱 */
private String email;
/** 头像 */
private String avatar;
/** 用户类型 */
private String identityProvider;
/** 登录ip */
private String loginIp;
/** 登录时间 */
private String loginTime;
/** 新密码 */
private String newPassword;
/** 昵称 */
private String nickName;
/** 密码 */
private String password;
/** 手机号 */
private String phone;
/** 性别 */
private String sex; // 0 男 1 女
/** 状态 */
private String status;
/** 多租户id */
private String tenantId;
/** 用户名 */
private String userName;
public SsoUser(){}
public SsoUser(String id, String sex, String nickName){
this.id = id;
this.sex = sex;
this.nickName = nickName;
}
protected SsoUser(Parcel in) {
id = in.readString();
email = in.readString();
avatar = in.readString();
identityProvider = in.readString();
loginIp = in.readString();
loginTime = in.readString();
newPassword = in.readString();
nickName = in.readString();
password = in.readString();
phone = in.readString();
sex = in.readString();
status = in.readString();
tenantId = in.readString();
userName = in.readString();
}
public static final Creator<SsoUser> CREATOR = new Creator<SsoUser>() {
@Override
public SsoUser createFromParcel(Parcel in) {
return new SsoUser(in);
}
@Override
public SsoUser[] newArray(int size) {
return new SsoUser[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(id);
parcel.writeString(email);
parcel.writeString(avatar);
parcel.writeString(identityProvider);
parcel.writeString(loginIp);
parcel.writeString(loginTime);
parcel.writeString(newPassword);
parcel.writeString(nickName);
parcel.writeString(password);
parcel.writeString(phone);
parcel.writeString(sex);
parcel.writeString(status);
parcel.writeString(tenantId);
parcel.writeString(userName);
}
}

6
app/src/main/java/com/kanglai/push/mapper/LoginMapper.java

@ -2,18 +2,21 @@ package com.kanglai.push.mapper;
import com.dolphin.core.entity.KiccUser; import com.dolphin.core.entity.KiccUser;
import com.dolphin.core.http.api.ResultResponse; import com.dolphin.core.http.api.ResultResponse;
import com.kanglai.push.entity.SsoUser;
import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.TokenEnhancer;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import java.util.Map; import java.util.Map;
import io.reactivex.Observable; import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.DELETE; import retrofit2.http.DELETE;
import retrofit2.http.FieldMap; import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded; import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Headers; import retrofit2.http.Headers;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path; import retrofit2.http.Path;
import retrofit2.http.QueryMap; import retrofit2.http.QueryMap;
@ -46,4 +49,7 @@ public interface LoginMapper {
@GET("system_proxy/system/app/phoneRegister") @GET("system_proxy/system/app/phoneRegister")
Observable<ResultResponse<User>> getPhoneRegister(@QueryMap Map<String, Object> fields); Observable<ResultResponse<User>> getPhoneRegister(@QueryMap Map<String, Object> fields);
@PUT("system_proxy/system/ssoUser/update")
Observable<ResultResponse> updateSsoUser(@Body SsoUser ssoUser);
} }

6
app/src/main/java/com/kanglai/push/service/Impl/LoginServiceImpl.java

@ -6,6 +6,7 @@ import com.blankj.utilcode.util.Utils;
import com.dolphin.core.entity.KiccUser; import com.dolphin.core.entity.KiccUser;
import com.kanglai.push.app.AppApplication; import com.kanglai.push.app.AppApplication;
import com.kanglai.push.di.component.DaggerMapperComponent; import com.kanglai.push.di.component.DaggerMapperComponent;
import com.kanglai.push.entity.SsoUser;
import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.TokenEnhancer;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.mapper.LoginMapper; import com.kanglai.push.mapper.LoginMapper;
@ -84,4 +85,9 @@ public class LoginServiceImpl implements LoginService {
return loginMapper.getPhoneRegister(fields); return loginMapper.getPhoneRegister(fields);
} }
@Override
public Observable<ResultResponse> updateSsoUser(SsoUser ssoUser) {
return loginMapper.updateSsoUser(ssoUser);
}
} }

4
app/src/main/java/com/kanglai/push/service/LoginService.java

@ -2,6 +2,7 @@ package com.kanglai.push.service;
import com.dolphin.core.entity.KiccUser; import com.dolphin.core.entity.KiccUser;
import com.dolphin.core.http.api.ResultResponse; import com.dolphin.core.http.api.ResultResponse;
import com.kanglai.push.entity.SsoUser;
import com.kanglai.push.entity.TokenEnhancer; import com.kanglai.push.entity.TokenEnhancer;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
@ -33,4 +34,7 @@ public interface LoginService {
/** 通过 手机号、验证码、用户类型、租户id 获取用户登录信息(用户看到的登录) */ /** 通过 手机号、验证码、用户类型、租户id 获取用户登录信息(用户看到的登录) */
Observable<ResultResponse<User>> getPhoneRegister(Map<String, Object> fields); Observable<ResultResponse<User>> getPhoneRegister(Map<String, Object> fields);
/** 更新用户信息 */
Observable<ResultResponse> updateSsoUser(SsoUser ssoUser);
} }

10
app/src/main/java/com/kanglai/push/ui/activity/LoginSurveyActivity.java

@ -1,6 +1,5 @@
package com.kanglai.push.ui.activity; package com.kanglai.push.ui.activity;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -41,13 +40,4 @@ public class LoginSurveyActivity extends BaseActivity<ActivityLoginSurveyBinding
woman_layout = findViewById(R.id.checkbox_man); woman_layout = findViewById(R.id.checkbox_man);
} }
public void selectMan(){
man_layout.setBackgroundResource(R.drawable.icon_btn_border);
woman_layout.setBackgroundColor(Color.WHITE);
}
public void selectWoman(){
woman_layout.setBackgroundResource(R.drawable.icon_btn_border);
man_layout.setBackgroundColor(Color.WHITE);
}
} }

5
app/src/main/java/com/kanglai/push/ui/adapter/SearchRecyclerAdapter.java

@ -43,12 +43,13 @@ public class SearchRecyclerAdapter extends DefaultRecyclerAdapter {
final LinkEntity item = mItemList.get(position); final LinkEntity item = mItemList.get(position);
viewHolder.layoutContent.setOnClickListener(view -> onItemViewClick(item)); viewHolder.layoutContent.setOnClickListener(view -> onItemViewClick(item));
viewHolder.titleLabel.setText(item.getName()); viewHolder.titleLabel.setText(item.getNikeName());
viewHolder.disclosureImage.setVisibility(View.GONE); // 隐藏返回箭头 viewHolder.disclosureImage.setVisibility(View.GONE); // 隐藏返回箭头
viewHolder.leftBadge.setVisibility(View.GONE); // 隐藏徽章 viewHolder.leftBadge.setVisibility(View.GONE); // 隐藏徽章
// 加载图片 // 加载图片
String avater = item.getAvatar(); String avater = "";
if (!TextUtils.isEmpty(avater)) { if (!TextUtils.isEmpty(avater)) {
avater = item.getAvatar();
if (!Patterns.WEB_URL.matcher(avater).matches()) avater = BuildConfig.HOST_URL + item.getAvatar().substring(1); if (!Patterns.WEB_URL.matcher(avater).matches()) avater = BuildConfig.HOST_URL + item.getAvatar().substring(1);
// 加载图片 // 加载图片
Glide.with(viewHolder.itemView.getContext()) Glide.with(viewHolder.itemView.getContext())

3
app/src/main/java/com/kanglai/push/ui/fragment/UserFragment.java

@ -81,7 +81,7 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode
new UserRecyclerAdapter.UserEntity().setCode("2").setTitle("关于我们").setBadge(0).setImage(R.drawable.icon_about).setHidesLeftImage(true), new UserRecyclerAdapter.UserEntity().setCode("2").setTitle("关于我们").setBadge(0).setImage(R.drawable.icon_about).setHidesLeftImage(true),
new UserRecyclerAdapter.UserEntity().setCode("3").setTitle("退出登录").setBadge(0).setImage(R.drawable.icon_exit).setHidesLeftImage(true), new UserRecyclerAdapter.UserEntity().setCode("3").setTitle("退出登录").setBadge(0).setImage(R.drawable.icon_exit).setHidesLeftImage(true),
// todo 发布时隐藏该入口 // todo 发布时隐藏该入口
new UserRecyclerAdapter.UserEntity().setCode("4").setTitle("ceshi").setBadge(0).setImage(R.drawable.icon_exit).setHidesLeftImage(true) new UserRecyclerAdapter.UserEntity().setCode("4").setTitle("测-第一次注册时修改用户信息").setBadge(0).setImage(R.drawable.icon_exit).setHidesLeftImage(true)
); );
final UserRecyclerAdapter userRecyclerAdapter = new UserRecyclerAdapter(list); final UserRecyclerAdapter userRecyclerAdapter = new UserRecyclerAdapter(list);
@ -131,7 +131,6 @@ public class UserFragment extends BaseFragment<FragmentUserBinding, UserViewMode
break; break;
case "4": case "4":
// todo 正式发布时隐藏该入口 // todo 正式发布时隐藏该入口
// startActivity(AuroraActivity.class);
startActivity(LoginSurveyActivity.class); startActivity(LoginSurveyActivity.class);
break; break;
} }

25
app/src/main/java/com/kanglai/push/ui/vm/AuroraViewModel.java

@ -1,25 +0,0 @@
package com.kanglai.push.ui.vm;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
/**
* AuroraIMUI 测试可行性
* @Author: liusixiang007
* @since: 2023/12/12
*/
public class AuroraViewModel extends ToolbarViewModel {
public AuroraViewModel(@NonNull Application application) {
super(application);
}
@Override
public void onCreate(@NonNull LifecycleOwner owner) {
super.onCreate(owner);
super.setTitleText("AuroraIMUI测试");
}
}

102
app/src/main/java/com/kanglai/push/ui/vm/LoginSurveyViewModel.java

@ -1,16 +1,34 @@
package com.kanglai.push.ui.vm; package com.kanglai.push.ui.vm;
import android.app.Application; import android.app.Application;
import android.widget.LinearLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.StringUtils;
import com.blankj.utilcode.util.Utils;
import com.dolphin.core.base.BaseViewModel; import com.dolphin.core.base.BaseViewModel;
import com.dolphin.core.binding.command.BindingCommand; import com.dolphin.core.binding.command.BindingCommand;
import com.kanglai.push.R; import com.dolphin.core.http.api.ResultResponse;
import com.dolphin.core.http.exception.ExceptionHandle;
import com.dolphin.core.util.RxUtil;
import com.dolphin.core.util.ToastUtil;
import com.kanglai.push.app.AppApplication;
import com.kanglai.push.constant.CacheConstant;
import com.kanglai.push.di.component.DaggerServiceComponent;
import com.kanglai.push.entity.SsoUser;
import com.kanglai.push.entity.User;
import com.kanglai.push.service.LoginService;
import com.kanglai.push.ui.activity.LoginSurveyActivity; import com.kanglai.push.ui.activity.LoginSurveyActivity;
import com.kanglai.push.ui.activity.TabBarActivity;
import com.kanglai.push.util.RandomUtil;
import javax.inject.Inject;
import io.reactivex.observers.DisposableObserver;
/** /**
* 登录问卷 - 用户第一次登录时必须填写的用户信息 * 登录问卷 - 用户第一次登录时必须填写的用户信息
@ -20,30 +38,106 @@ import com.kanglai.push.ui.activity.LoginSurveyActivity;
*/ */
public class LoginSurveyViewModel extends BaseViewModel<LoginSurveyActivity> { public class LoginSurveyViewModel extends BaseViewModel<LoginSurveyActivity> {
@Inject
LoginService loginService;
/** 女生单选框 */
public ObservableField<Boolean> womanCheckedStatus = new ObservableField<>(false); public ObservableField<Boolean> womanCheckedStatus = new ObservableField<>(false);
/** 男生单选框 默认值 */
public ObservableField<Boolean> manCheckedStatus = new ObservableField<>(true); public ObservableField<Boolean> manCheckedStatus = new ObservableField<>(true);
/** 名字输入框值 */
public ObservableField<String> inputName = new ObservableField<>("");
/** 女生单选框点击事件 */
public BindingCommand womanClickCommand = new BindingCommand(() ->{ public BindingCommand womanClickCommand = new BindingCommand(() ->{
// 选中女 // 选中女
womanCheckedStatus.set(true); womanCheckedStatus.set(true);
manCheckedStatus.set(false); manCheckedStatus.set(false);
mActivity.selectWoman();
}); });
/** 男生单选框点击事件 */
public BindingCommand manClickCommand = new BindingCommand(() ->{ public BindingCommand manClickCommand = new BindingCommand(() ->{
// 选中男 // 选中男
manCheckedStatus.set(true); manCheckedStatus.set(true);
womanCheckedStatus.set(false); womanCheckedStatus.set(false);
mActivity.selectMan(); });
/** 昵称输入框修改 */
public BindingCommand inputNameValueChangeCommand = new BindingCommand<String>(newName -> {
if (!StringUtils.isTrimEmpty(newName)) {
inputName.set(newName);
}
});
/** 获取随机姓名 */
public BindingCommand randomNameClickCommand = new BindingCommand(() -> {
inputName.set(RandomUtil.getRandomName(true, 3));
});
/** 跳过按钮 */
public BindingCommand skipBtnClickCommand = new BindingCommand(() ->{
if (StringUtils.isTrimEmpty(inputName.get())) inputName.set(RandomUtil.getRandomName(true, 3)); // 如果没输入名字 则随机一个
submitFormMsg(inputName.get(), womanCheckedStatus.get());
});
public BindingCommand submitBtnClickCommand = new BindingCommand(() ->{
if (StringUtils.isTrimEmpty(inputName.get())) { // 如果没输入名字 则随机一个
ToastUtil.show("请输入姓名");
return;
}
submitFormMsg(inputName.get(), womanCheckedStatus.get());
}); });
public LoginSurveyViewModel(@NonNull Application application) { public LoginSurveyViewModel(@NonNull Application application) {
super(application); super(application);
DaggerServiceComponent
.builder()
.appComponent(((AppApplication) Utils.getApp().getApplicationContext()).appComponent)
.build().inject(this);
} }
@Override @Override
public void onCreate(@NonNull LifecycleOwner owner) { public void onCreate(@NonNull LifecycleOwner owner) {
super.onCreate(owner); super.onCreate(owner);
inputName.set(RandomUtil.getRandomName(true, 3));
}
/**
* 表单提交
* @param name
* @param isMan
*/
private void submitFormMsg(String name, Boolean isMan) {
String sex = isMan ? "0" : "1";
LogUtils.d(name, sex);
User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
SsoUser ssoUser = new SsoUser(user.getId(), sex, name);
loginService.updateSsoUser(ssoUser)
.compose(RxUtil.schedulersTransformer())
.compose(RxUtil.exceptionTransformer())
.doOnSubscribe(this)
.subscribe(new DisposableObserver<ResultResponse>() {
@Override
public void onNext(ResultResponse R) {
if (R.getCode() == R.SUCCESS) {
user.setSex(sex);
user.setNickName(name);
CacheDiskUtils.getInstance().put(CacheConstant.USER_INFO, user);
}
}
@Override
public void onError(Throwable e) {
ExceptionHandle.baseExceptionMsg(e);
}
@Override
public void onComplete() {
startActivity(TabBarActivity.class);
} }
});
}
} }

8
app/src/main/java/com/kanglai/push/ui/vm/LoginViewModel.java

@ -32,6 +32,7 @@ import com.kanglai.push.entity.TokenEnhancer;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.LoginService; import com.kanglai.push.service.LoginService;
import com.kanglai.push.ui.activity.LoginActivity; import com.kanglai.push.ui.activity.LoginActivity;
import com.kanglai.push.ui.activity.LoginSurveyActivity;
import com.kanglai.push.ui.activity.TabBarActivity; import com.kanglai.push.ui.activity.TabBarActivity;
import com.kanglai.push.util.CountDownTimerUtils; import com.kanglai.push.util.CountDownTimerUtils;
import com.kongzue.dialogx.dialogs.WaitDialog; import com.kongzue.dialogx.dialogs.WaitDialog;
@ -268,12 +269,15 @@ public class LoginViewModel extends BaseViewModel<LoginActivity> {
if (!StringUtils.isTrimEmpty(user.getId())) { if (!StringUtils.isTrimEmpty(user.getId())) {
addAlias(user.getId(),1, 5); // 新增失败之后 利用递归重复新增 直到新增成功为止(最多6次) addAlias(user.getId(),1, 5); // 新增失败之后 利用递归重复新增 直到新增成功为止(最多6次)
} else throw new RuntimeException("用户对象为空请重新登录!"); } else throw new RuntimeException("用户对象为空请重新登录!");
// todo 判断是否第一次登录 isRegister
MMKV.defaultMMKV().putString(CacheConstant.LOGIN_USERNAME, R.getData().getNickName()); MMKV.defaultMMKV().putString(CacheConstant.LOGIN_USERNAME, R.getData().getNickName());
MMKV.defaultMMKV().putString(CacheConstant.LOGIN_PASSWORD, password.get()); MMKV.defaultMMKV().putString(CacheConstant.LOGIN_PASSWORD, password.get());
CacheDiskUtils.getInstance().put(CacheConstant.USER_INFO, user); CacheDiskUtils.getInstance().put(CacheConstant.USER_INFO, user);
if (isRegister) { // 判断是否第一次登录 isRegister
startActivity(LoginSurveyActivity.class);
return;
}
startActivity(TabBarActivity.class); startActivity(TabBarActivity.class);
finish(); // finish();
} }
} else ToastUtil.showBottomWarn(R.getMsg()); } else ToastUtil.showBottomWarn(R.getMsg());
} }

51
app/src/main/java/com/kanglai/push/util/RandomUtil.java

@ -0,0 +1,51 @@
package com.kanglai.push.util;
import com.kanglai.push.app.AppApplication;
import com.kanglai.push.R;
import java.util.Random;
/**
* 获取随机取名
* @Author: liusixiang007
* @since: 2024/1/9
*/
public class RandomUtil {
/**
* 随机获取一个名字
* @param simple 是否单姓
* @param len 名字长度
* @return
*/
public static String getRandomName(boolean simple, int len) {
String[] surName = AppApplication.mContext.getResources().getStringArray(R.array.random_sur_name_items);
String[] doubleSurName = AppApplication.mContext.getResources().getStringArray(R.array.random_double_sur_name_items);
String[] word = AppApplication.mContext.getResources().getStringArray(R.array.random_word_name_items);
int surNameLen = surName.length;
int doubleSurNameLen = doubleSurName.length;
int wordLen = word.length;
StringBuffer sb = new StringBuffer();
Random random = new Random();
if(simple){
sb.append(surName[random.nextInt(surNameLen)]);
int surLen = sb.toString().length();
for (int i = 0; i < len - surLen; i++) {
if(sb.toString().length() <= len){
sb.append(word[random.nextInt(wordLen)]);
}
}
}else{
sb.append(doubleSurName[random.nextInt(doubleSurNameLen)]);
int doubleSurLen = sb.toString().length();
for (int i = 0; i < len - doubleSurLen; i++) {
if(sb.toString().length() <= len){
sb.append(word[random.nextInt(wordLen)]);
}
}
}
return sb.toString();
}
}

66
app/src/main/res/drawable-nodpi/icon_dice.xml

@ -0,0 +1,66 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M478.6,54a66.7,66.7 0,0 1,66.8 0l346.5,200.1a66.8,66.8 0,0 1,33.4 57.8v400.1a66.8,66.8 0,0 1,-33.4 57.8L545.4,970a66.7,66.7 0,0 1,-66.8 0L132.1,769.9a66.8,66.8 0,0 1,-33.4 -57.8V311.9a66.8,66.8 0,0 1,33.4 -57.8L478.6,54z"
android:fillColor="#C4D4F7"/>
<path
android:pathData="M106,281.7a66.9,66.9 0,0 1,15.2 -19.7C192.3,222.6 410.7,94.6 486.5,50.2a66.8,66.8 0,0 1,58.9 3.9l346.5,200.1a66.7,66.7 0,0 1,24.5 24.6l-361.8,201.2a89.5,89.5 0,0 1,-84.6 1.3c-95.4,-49.3 -320.8,-167 -364.1,-199.6z"
android:fillColor="#DFEDFD"/>
<path
android:pathData="M512.7,978.9l-0.3,-413.7a105.5,105.5 0,0 1,54.3 -92.3l349.8,-194.2a66.7,66.7 0,0 1,8.9 33.2v400.1a66.8,66.8 0,0 1,-33.4 57.8L545.4,970a66.7,66.7 0,0 1,-32.7 8.9z"
android:fillColor="#AAB5E3"/>
<path
android:pathData="M99.4,302.2a66.7,66.7 0,0 1,7.5 -22.3l405.5,223.1V978.9a66.7,66.7 0,0 1,-29.3 -6.6L126.4,766.2a66.8,66.8 0,0 1,-27 -44.5V302.2z"
android:fillColor="#C3D3F8"/>
<path
android:pathData="M462,262.8a50,40 0,1 0,100 0,50 40,0 1,0 -100,0z"
android:fillColor="#3A4971"/>
<path
android:pathData="M462.4,267.7c0.9,-21.5 22.9,-38.7 50,-38.7 25.5,0 46.6,15.3 49.6,35.1 -0.9,21.5 -22.9,38.7 -50,38.7 -25.5,0 -46.6,-15.3 -49.6,-35.1z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M811.9,422.8c16.6,-9.7 51.1,-18 50.9,11.6 -0.1,29.1 -27.7,57.1 -51.5,70.6 -16.4,9.3 -51.2,17.7 -50.9,-11.6 0.2,-28.9 28.1,-57 51.5,-70.6z"
android:fillColor="#3A4971"/>
<path
android:pathData="M760.7,498.3c1,-28.5 28.4,-55.9 51.4,-69.3 15.7,-9.1 47.1,-16.9 50.6,6.9 -1,28.6 -28.1,55.9 -51.4,69.2 -15.4,8.8 -47,16.6 -50.6,-6.7z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M728.8,601.4c16.6,-9.3 51.3,-17.2 51.1,12.1 -0.2,28.9 -28.2,56.2 -51.8,69.1 -16.4,9 -51.4,16.9 -51.1,-12.1 0.3,-28.7 28.5,-56 51.8,-69.1z"
android:fillColor="#3A4971"/>
<path
android:pathData="M677.4,675.4c1.1,-28.2 28.8,-55 51.8,-67.9 15.6,-8.7 47.1,-16.2 50.7,7.2 -1,28.4 -28.5,55.2 -51.8,67.9 -15.4,8.4 -47.2,15.9 -50.7,-7.2z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M645.1,776.9c16.6,-9 51.5,-16.5 51.2,12.6 -0.3,28.6 -28.6,55.2 -52.2,67.6 -16.4,8.6 -51.6,16.2 -51.2,-12.6 0.4,-28.4 28.9,-55.1 52.2,-67.6z"
android:fillColor="#3A4971"/>
<path
android:pathData="M593.2,849.4c1.1,-28 29.2,-54.1 52.2,-66.4 15.6,-8.4 47.3,-15.5 50.9,7.7 -1,28.2 -28.9,54.2 -52.1,66.4 -15.4,8.1 -47.4,15.3 -50.9,-7.8z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M197.4,437.4c25.4,12.6 44.6,43.3 44.2,71.7 -0.4,26.2 -22.2,38.5 -45.3,26.8 -25.1,-12.8 -44.4,-43.5 -44.2,-71.7 0.2,-26.3 22.3,-38.1 45.3,-26.8z"
android:fillColor="#3A4971"/>
<path
android:pathData="M241.2,514.6c-3.1,22.5 -23.5,32.2 -44.9,21.3 -23.2,-11.8 -41.5,-38.9 -43.9,-65.3 3,-22.5 23.5,-31.9 44.9,-21.3 23.5,11.6 41.7,38.8 43.9,65.3z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M195.3,626.5c25.1,13.1 43.8,44.2 43.4,72.5 -0.4,26 -21.7,38.2 -44.5,25.9 -24.8,-13.3 -43.6,-44.3 -43.4,-72.5 0.2,-26.1 21.8,-37.8 44.5,-25.9z"
android:fillColor="#3A4971"/>
<path
android:pathData="M238.2,704.4c-3.1,22.2 -22.9,31.9 -44.1,20.5 -22.9,-12.3 -40.7,-39.8 -43.1,-66.1 2.9,-22.3 23,-31.6 44.1,-20.5 23.2,12.2 40.9,39.6 43.1,66.1z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M382.7,529.1c25.6,12.7 44.2,44.1 43.3,72.6 -0.9,26.3 -22.6,39.7 -46.2,27.7 -25.3,-12.9 -44,-44.2 -43.3,-72.6 0.6,-26.3 22.7,-39.3 46.2,-27.7z"
android:fillColor="#3A4971"/>
<path
android:pathData="M425.5,607.2c-3.5,22.5 -23.8,33.3 -45.7,22.1 -23.4,-11.9 -41.1,-39.6 -43.1,-66.1 3.4,-22.6 23.9,-33 45.7,-22.1 23.7,11.8 41.3,39.5 43.1,66.1z"
android:fillColor="#4B5C83"/>
<path
android:pathData="M377.1,721.6c25.3,13.3 43.4,45 42.5,73.5 -0.9,26 -22.1,39.4 -45.4,26.8 -25,-13.5 -43.2,-45.1 -42.5,-73.5 0.6,-26.1 22.2,-39 45.4,-26.8z"
android:fillColor="#3A4971"/>
<path
android:pathData="M419.1,800.6c-3.5,22.3 -23.3,32.9 -44.9,21.3 -23.1,-12.4 -40.4,-40.4 -42.3,-66.9 3.3,-22.4 23.3,-32.6 44.9,-21.3 23.4,12.3 40.6,40.3 42.3,66.9z"
android:fillColor="#4B5C83"/>
</vector>

7
app/src/main/res/drawable/icon_btn_border.xml

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="15dp" />
<!-- 边框粗细-->
<stroke android:width="2dp" android:color="@color/black"/>
<solid android:color="@color/white" />
</shape>

2
app/src/main/res/drawable/icon_btn_swipeable_bg1.xml

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/swipeable_btn_bg1"/> <solid android:color="@color/swipeable_btn_bg1"/>
<!-- 圆角的半径 -->
<corners android:radius="14dp"/>
</shape> </shape>

91
app/src/main/res/layout/activity_login_survey.xml

@ -8,6 +8,16 @@
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<!-- 标题 1 -->
<TextView
android:layout_marginTop="@dimen/dp_30"
android:layout_marginLeft="@dimen/dp_26"
android:textSize="@dimen/dp_22"
android:text="你 是?"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!--性别图片-->
<LinearLayout <LinearLayout
android:paddingTop="@dimen/dp_30" android:paddingTop="@dimen/dp_30"
android:paddingBottom="@dimen/dp_10" android:paddingBottom="@dimen/dp_10"
@ -17,14 +27,15 @@
<!-- 男 按钮 --> <!-- 男 按钮 -->
<LinearLayout <LinearLayout
android:id="@+id/checkbox_man" android:id="@+id/checkbox_man"
android:background="@drawable/icon_btn_border"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center" android:gravity="center"
android:layout_marginRight="@dimen/dp_20" android:layout_marginRight="@dimen/dp_20"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<Button <Button
binding:onClickCommand="@{viewModel.manClickCommand}"
android:background="@drawable/sex_select_man" android:background="@drawable/sex_select_man"
android:layout_width="@dimen/dp_120" android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"/> android:layout_height="@dimen/dp_120"/>
@ -38,13 +49,13 @@
<!-- 女 按钮 --> <!-- 女 按钮 -->
<LinearLayout <LinearLayout
android:id="@+id/checkbox_woman" android:id="@+id/checkbox_woman"
android:background="@drawable/icon_btn_border"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center" android:gravity="center"
android:layout_marginLeft="@dimen/dp_20" android:layout_marginLeft="@dimen/dp_20"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<Button <Button
binding:onClickCommand="@{viewModel.womanClickCommand}"
android:background="@drawable/sex_select_woman" android:background="@drawable/sex_select_woman"
android:layout_width="@dimen/dp_120" android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"/> android:layout_height="@dimen/dp_120"/>
@ -56,8 +67,10 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<!-- 性别单选 -->
<LinearLayout <LinearLayout
android:gravity="center" android:gravity="center"
android:layout_marginBottom="@dimen/dp_30"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -75,5 +88,79 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
</LinearLayout> </LinearLayout>
<!-- 标题 2 -->
<TextView
android:layout_marginTop="@dimen/dp_30"
android:layout_marginLeft="@dimen/dp_26"
android:textSize="@dimen/dp_22"
android:text="怎么称呼你呢?"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- 输入框 -->
<LinearLayout
android:orientation="horizontal"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginLeft="@dimen/dp_36"
android:layout_marginRight="@dimen/dp_36"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et_captcha"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_10"
android:background="@null"
android:letterSpacing="0.03"
android:hint="请输入姓名"
android:text="@={viewModel.inputName}"
android:textColor="@color/black"
android:textColorHint="@color/black30"
android:textSize="@dimen/dp_22"
binding:textChanged="@{viewModel.inputNameValueChangeCommand}"/>
<Button
binding:onClickCommand="@{viewModel.randomNameClickCommand}"
android:background="@drawable/icon_dice"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"/>
</LinearLayout>
<!-- 下划线 -->
<View
style="@style/underline"
android:layout_marginBottom="@dimen/dp_36"
android:alpha="0.3"
android:layout_marginLeft="@dimen/dp_38"
android:layout_marginRight="@dimen/dp_84" />
<!-- 两个按钮 -->
<LinearLayout
android:layout_marginLeft="@dimen/dp_26"
android:layout_marginRight="@dimen/dp_26"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
binding:onClickCommand="@{viewModel.skipBtnClickCommand}"
android:layout_marginRight="@dimen/dp_10"
android:text="跳 过"
android:textColor="@color/white80"
android:textSize="@dimen/dp_16"
android:background="@drawable/icon_btn_swipeable_bg1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"/>
<Button
binding:onClickCommand="@{viewModel.submitBtnClickCommand}"
android:layout_marginLeft="@dimen/dp_10"
android:text="确 定"
android:textSize="@dimen/dp_16"
android:textColor="#226731"
android:layout_width="0dp"
android:background="@drawable/icon_text_red_border"
android:layout_weight="1"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
</layout> </layout>

17
app/src/main/res/values/array.xml

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save