Commit 29b3cefc by 段启岩

短信登录定时器优化

parent 914302a8
...@@ -11,8 +11,6 @@ import android.widget.Toast; ...@@ -11,8 +11,6 @@ import android.widget.Toast;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import java.util.concurrent.ScheduledFuture;
import javax.inject.Inject; import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.R; import cn.yunliyunwai.beyondclouds.R;
...@@ -26,8 +24,6 @@ public class LoginActivity extends BaseActivity<AuthenticationViewModel, Activit ...@@ -26,8 +24,6 @@ public class LoginActivity extends BaseActivity<AuthenticationViewModel, Activit
private Handler handler = new Handler(); private Handler handler = new Handler();
private ScheduledFuture verifyCodeScheduledFuture;
@Inject @Inject
AuthenticationViewModel authenticationViewModel; AuthenticationViewModel authenticationViewModel;
...@@ -140,7 +136,7 @@ public class LoginActivity extends BaseActivity<AuthenticationViewModel, Activit ...@@ -140,7 +136,7 @@ public class LoginActivity extends BaseActivity<AuthenticationViewModel, Activit
binding.btnSendVerifyCode.setEnabled(false); binding.btnSendVerifyCode.setEnabled(false);
binding.btnSendVerifyCode.setClickable(false); binding.btnSendVerifyCode.setClickable(false);
binding.btnSendVerifyCode.setTextColor(getResources().getColor(R.color.colorTextLevel5)); binding.btnSendVerifyCode.setTextColor(getResources().getColor(R.color.colorTextLevel5));
verifyCodeScheduledFuture = authenticationViewModel.startVerifyCodeCountdown(); authenticationViewModel.startVerifyCodeCountdown();
binding.txtSeconds.setVisibility(View.VISIBLE); binding.txtSeconds.setVisibility(View.VISIBLE);
} }
...@@ -161,12 +157,6 @@ public class LoginActivity extends BaseActivity<AuthenticationViewModel, Activit ...@@ -161,12 +157,6 @@ public class LoginActivity extends BaseActivity<AuthenticationViewModel, Activit
public void onChanged(Integer leftSeconds) { public void onChanged(Integer leftSeconds) {
if (authenticationViewModel.getVerifyCodeState().getValue() != AuthenticationViewModel.VerifyCodeState.UN_SEND) { if (authenticationViewModel.getVerifyCodeState().getValue() != AuthenticationViewModel.VerifyCodeState.UN_SEND) {
binding.btnSendVerifyCode.setText(leftSeconds + ""); binding.btnSendVerifyCode.setText(leftSeconds + "");
if (leftSeconds == 0) {
if (null != verifyCodeScheduledFuture) {
verifyCodeScheduledFuture.cancel(true);
}
authenticationViewModel.resetVerifyCodeState();
}
} }
} }
}); });
......
...@@ -165,6 +165,8 @@ public class AuthenticationViewModel extends ViewModel { ...@@ -165,6 +165,8 @@ public class AuthenticationViewModel extends ViewModel {
private Context mContext; private Context mContext;
private ScheduledFuture mVerifyCodeScheduledFuture;
@Inject @Inject
public AuthenticationViewModel(Context context, Lazy<IUserRepository> userRepositoryLazy, AppExecutors appExecutors) { public AuthenticationViewModel(Context context, Lazy<IUserRepository> userRepositoryLazy, AppExecutors appExecutors) {
...@@ -177,6 +179,7 @@ public class AuthenticationViewModel extends ViewModel { ...@@ -177,6 +179,7 @@ public class AuthenticationViewModel extends ViewModel {
this.loginWay.setValue(LoginWay.ACCOUNT); this.loginWay.setValue(LoginWay.ACCOUNT);
this.passwordVisibility.setValue(false); this.passwordVisibility.setValue(false);
this.verifyCodeState.setValue(VerifyCodeState.UN_SEND); this.verifyCodeState.setValue(VerifyCodeState.UN_SEND);
this.verifyCodeLeftSeconds.setValue(0);
} }
public LiveData<AuthenticationState> getAuthenticationState() { public LiveData<AuthenticationState> getAuthenticationState() {
...@@ -417,24 +420,24 @@ public class AuthenticationViewModel extends ViewModel { ...@@ -417,24 +420,24 @@ public class AuthenticationViewModel extends ViewModel {
/** /**
* 开始倒计时 * 开始倒计时
*/ */
public ScheduledFuture startVerifyCodeCountdown() { public void startVerifyCodeCountdown() {
verifyCodeLeftSeconds.setValue(60); if (getVerifyCodeLeftSeconds().getValue() > 0 || getVerifyCodeState().getValue() == VerifyCodeState.UN_SEND) {
return appExecutors.scheduledExecutor().scheduleAtFixedRate(new Runnable() { return;
}
verifyCodeLeftSeconds.setValue(10);
mVerifyCodeScheduledFuture = appExecutors.scheduledExecutor().scheduleAtFixedRate(new Runnable() {
@Override @Override
public void run() { public void run() {
int leftTime = verifyCodeLeftSeconds.getValue(); int leftTime = verifyCodeLeftSeconds.getValue();
if (leftTime == 0) { verifyCodeLeftSeconds.postValue(leftTime - 1);
if (leftTime == 1) {
if (null != mVerifyCodeScheduledFuture) {
mVerifyCodeScheduledFuture.cancel(true);
}
verifyCodeState.postValue(VerifyCodeState.UN_SEND);
return; return;
} }
verifyCodeLeftSeconds.postValue(leftTime - 1);
} }
}, 1000, 1000, TimeUnit.MILLISECONDS); }, 1000, 1000, TimeUnit.MILLISECONDS);
} }
/**
* 重置短信发送状态
*/
public void resetVerifyCodeState() {
verifyCodeState.setValue(VerifyCodeState.UN_SEND);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment