package com.example.cosmosclient.views;
import android.content.Intent;
import android.os.Handler;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.cosmosclient.R;
import com.example.cosmosclient.app.Cosmos;
import com.example.cosmosclient.entities.AreaInformation;
import com.example.cosmosclient.entities.SigninResponse;
import com.example.cosmosclient.resources.UsersRest;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
public class SigninActivity extends RequestPermissionsActivity {
private boolean uIdEnable;
private boolean pwEnable;
private Button SigninButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signin);
//各種IDを取得
SigninButton = findViewById(R.id.SigninButton);
Button SignupButton = findViewById(R.id.SignupButton);
final EditText UserIdText = findViewById(R.id.UserIdText);
final EditText PasswordText = findViewById(R.id.PasswordText);
Button ForgotPasswordButton = findViewById(R.id.ForgotPasswordButton);
Cosmos app = (Cosmos) getApplication();
String account = app.getuId();
String token = app.getToken();
// //ログアウトしていない場合singnin画面を表示しない
// if(token != ""){
// Intent intent = new Intent(getApplication(), GroupListActivity.class);
// startActivity(intent);
// finish();
// }
// 空チェック
if (account != null && account.length() > 0) {
// 保存済の情報をログインID欄に設定
UserIdText.setText(account);
uIdEnable=true;
//UserIdText.setEnabled(false);
}
//ボタン無効化
SigninButton.setEnabled(false);
//TextWatcherで入力監視
UserIdText.addTextChangedListener(new SigninActivity.GenericTextWatcher(UserIdText));
PasswordText.addTextChangedListener(new SigninActivity.GenericTextWatcher(PasswordText));
//retrofitの処理
final Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/cosmos/rest/")
.addConverterFactory(JacksonConverterFactory.create())
.build();
//interfaceから実装を取得
final UsersRest signinService = retrofit.create(UsersRest.class);
//Sign inボタンの処理
SigninButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ボタン連打防止
SigninButton.setEnabled(false);
new Handler().postDelayed(new Runnable() {
public void run() {
SigninButton.setEnabled(true);
}
}, 1000L);
//APIに値を送信
Call<SigninResponse> call = signinService.login(UserIdText.getText().toString(), PasswordText.getText().toString());
//サーバからのレスポンス
call.enqueue(new Callback<SigninResponse>() {
//成功時
@Override
public void onResponse(Call<SigninResponse> call, Response<SigninResponse> response) {
if (response.isSuccessful()) {
if (response.body() == null){
//パスワードが違う際、アプリが落ちてしまうため
Toast.makeText(SigninActivity.this,
"パスワードが違います",Toast.LENGTH_LONG).show();
} else {
SigninResponse result = response.body();
//app/Cosmosに情報保存
Cosmos app = (Cosmos) getApplication();
app.setToken(result.token);
app.setuId(UserIdText.getText().toString());
//画面遷移
Intent intent = new Intent(getApplication(), GroupListActivity.class);
startActivity(intent);
Toast.makeText(SigninActivity.this,
"ログインしました", Toast.LENGTH_SHORT).show();
finish();
}
} else {
//onFailureでキャッチできないエラーの処理
Toast.makeText(SigninActivity.this,
"通信エラー",Toast.LENGTH_SHORT).show();
}
}
//失敗時
@Override
public void onFailure(Call<SigninResponse> call, Throwable t) {
t.printStackTrace();
Toast.makeText(SigninActivity.this,
"ユーザIDもしくはパスワードが間違っています",Toast.LENGTH_SHORT).show();
}
});
}
});
//サインアップ画面への遷移処理
SignupButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(getApplication(), SignupActivity.class);
startActivity(intent);
finish();
}
});
//パスワード再登録画面への遷移処理
ForgotPasswordButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent(getApplication(), ForgotPasswordActivity.class);
startActivity(intent);
//finish();
}
});
}
private class GenericTextWatcher implements TextWatcher{
private View view;
private GenericTextWatcher(View view){
this.view = view;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after){
/*記述不要*/
};
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){/*記述不要*/};
@Override
public void afterTextChanged(Editable s){
switch(view.getId()) {
case R.id.UserIdText:
if (s.length()>0) {
uIdEnable = true;
} else {
uIdEnable = false;
}
break;
case R.id.PasswordText:
if (s.length()>0){
pwEnable=true;
} else{
pwEnable=false;
}
break;
}
//ボタン有効&無効
if(uIdEnable && pwEnable){
SigninButton.setEnabled(true);
}else{
SigninButton.setEnabled(false);
}
}
}
}