feature/child_mode #155
|
@ -3,6 +3,9 @@ package one.nem.kidshift;
|
|||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
|
@ -12,8 +15,30 @@ import androidx.core.graphics.Insets;
|
|||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.hilt.android.AndroidEntryPoint;
|
||||
import one.nem.kidshift.data.ChildData;
|
||||
import one.nem.kidshift.data.UserSettings;
|
||||
import one.nem.kidshift.data.retrofit.KidShiftApiService;
|
||||
import one.nem.kidshift.data.retrofit.model.child.auth.ChildAuthRequest;
|
||||
import one.nem.kidshift.data.retrofit.model.child.auth.ChildAuthResponse;
|
||||
import one.nem.kidshift.utils.KSLogger;
|
||||
import one.nem.kidshift.utils.factory.KSLoggerFactory;
|
||||
import retrofit2.Call;
|
||||
|
||||
@AndroidEntryPoint
|
||||
public class ChildLoginActivity extends AppCompatActivity {
|
||||
|
||||
@Inject
|
||||
UserSettings userSettings;
|
||||
@Inject
|
||||
KSLoggerFactory loggerFactory;
|
||||
@Inject
|
||||
KidShiftApiService kidShiftApiService;
|
||||
|
||||
private KSLogger logger;
|
||||
|
||||
|
||||
private EditText loginCode1, loginCode2, loginCode3, loginCode4, loginCode5, loginCode6, loginCode7, loginCode8;
|
||||
|
||||
|
@ -28,6 +53,8 @@ public class ChildLoginActivity extends AppCompatActivity {
|
|||
return insets;
|
||||
});
|
||||
|
||||
logger = loggerFactory.create("ChildLoginActivity");
|
||||
|
||||
// コードのフォーカスを自動で移動する
|
||||
loginCode1 = findViewById(R.id.loginCode_1);
|
||||
loginCode2 = findViewById(R.id.loginCode_2);
|
||||
|
@ -38,18 +65,34 @@ public class ChildLoginActivity extends AppCompatActivity {
|
|||
loginCode7 = findViewById(R.id.loginCode_7);
|
||||
loginCode8 = findViewById(R.id.loginCode_8);
|
||||
|
||||
loginCode1.addTextChangedListener(new LoginCodeTextWatcher(loginCode1, loginCode2));
|
||||
loginCode2.addTextChangedListener(new LoginCodeTextWatcher(loginCode2, loginCode3));
|
||||
loginCode3.addTextChangedListener(new LoginCodeTextWatcher(loginCode3, loginCode4));
|
||||
loginCode4.addTextChangedListener(new LoginCodeTextWatcher(loginCode4, loginCode5));
|
||||
loginCode5.addTextChangedListener(new LoginCodeTextWatcher(loginCode5, loginCode6));
|
||||
loginCode6.addTextChangedListener(new LoginCodeTextWatcher(loginCode6, loginCode7));
|
||||
loginCode7.addTextChangedListener(new LoginCodeTextWatcher(loginCode7, loginCode8));
|
||||
loginCode8.addTextChangedListener(new LoginCodeTextWatcher(loginCode8, null));
|
||||
loginCode1.addTextChangedListener(new LoginCodeTextWatcher(loginCode1, loginCode2, null));
|
||||
loginCode2.addTextChangedListener(new LoginCodeTextWatcher(loginCode2, loginCode3, loginCode1));
|
||||
loginCode3.addTextChangedListener(new LoginCodeTextWatcher(loginCode3, loginCode4, loginCode2));
|
||||
loginCode4.addTextChangedListener(new LoginCodeTextWatcher(loginCode4, loginCode5, loginCode3));
|
||||
loginCode5.addTextChangedListener(new LoginCodeTextWatcher(loginCode5, loginCode6, loginCode4));
|
||||
loginCode6.addTextChangedListener(new LoginCodeTextWatcher(loginCode6, loginCode7, loginCode5));
|
||||
loginCode7.addTextChangedListener(new LoginCodeTextWatcher(loginCode7, loginCode8, loginCode6));
|
||||
loginCode8.addTextChangedListener(new LoginCodeTextWatcher(loginCode8, null, loginCode7));
|
||||
|
||||
// ログインボタンを押したときの処理
|
||||
findViewById(R.id.childLoginButton).setOnClickListener(v -> {
|
||||
Toast.makeText(this, "ログインコード: " + getLoginCode(), Toast.LENGTH_SHORT).show();
|
||||
logger.debug("ログインボタンが押されました");
|
||||
Call<ChildAuthResponse> call = kidShiftApiService.childLogin(new ChildAuthRequest(getLoginCode()));
|
||||
try {
|
||||
ChildAuthResponse childAuthResponse = call.execute().body();
|
||||
if (childAuthResponse == null || childAuthResponse.getAccessToken() == null) {
|
||||
// エラー処理
|
||||
logger.error("ChildAuthResponseがnullまたはAccessTokenがnullです");
|
||||
return;
|
||||
}
|
||||
UserSettings.AppCommonSetting appCommonSetting = userSettings.getAppCommonSetting();
|
||||
appCommonSetting.setLoggedIn(true);
|
||||
appCommonSetting.setAccessToken(childAuthResponse.getAccessToken());
|
||||
appCommonSetting.setChildMode(true);
|
||||
} catch (Exception e) {
|
||||
logger.error("リクエストに失敗しました");
|
||||
Toast.makeText(this, "ログインに失敗しました", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -64,13 +107,15 @@ public class ChildLoginActivity extends AppCompatActivity {
|
|||
loginCode8.getText().toString();
|
||||
}
|
||||
|
||||
private static class LoginCodeTextWatcher implements TextWatcher {
|
||||
private static class LoginCodeTextWatcher implements TextWatcher, View.OnKeyListener {
|
||||
private EditText currentView;
|
||||
private final EditText nextView;
|
||||
private final EditText previousView;
|
||||
|
||||
LoginCodeTextWatcher(EditText currentView, EditText nextView) {
|
||||
LoginCodeTextWatcher(EditText currentView, EditText nextView, EditText previousView) {
|
||||
this.currentView = currentView;
|
||||
this.nextView = nextView;
|
||||
this.previousView = previousView;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -85,5 +130,17 @@ public class ChildLoginActivity extends AppCompatActivity {
|
|||
nextView.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKey(View v, int keyCode, KeyEvent event) {
|
||||
// if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) { // TODO: バックスペースの処理
|
||||
// EditText currentView = (EditText) v;
|
||||
// if (currentView.getText().length() == 0 && previousView != null) {
|
||||
// previousView.requestFocus();
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -41,49 +41,49 @@
|
|||
<EditText
|
||||
android:id="@+id/loginCode_1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_3"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_4"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<TextView
|
||||
|
@ -92,55 +92,55 @@
|
|||
android:layout_weight="0"
|
||||
android:gravity="center"
|
||||
android:text="-"
|
||||
android:textSize="18sp"
|
||||
android:textSize="34sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_5"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_6"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_7"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/loginCode_8"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:maxWidth="48dp"
|
||||
android:maxLength="1"
|
||||
android:textSize="18sp"
|
||||
android:textSize="24sp"
|
||||
tools:ignore="Autofill,LabelFor" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -5,6 +5,8 @@ import one.nem.kidshift.data.retrofit.model.child.ChildAddRequest;
|
|||
import one.nem.kidshift.data.retrofit.model.child.ChildListResponse;
|
||||
import one.nem.kidshift.data.retrofit.model.child.ChildLoginCodeResponse;
|
||||
import one.nem.kidshift.data.retrofit.model.child.ChildResponse;
|
||||
import one.nem.kidshift.data.retrofit.model.child.auth.ChildAuthRequest;
|
||||
import one.nem.kidshift.data.retrofit.model.child.auth.ChildAuthResponse;
|
||||
import one.nem.kidshift.data.retrofit.model.parent.ParentInfoResponse;
|
||||
import one.nem.kidshift.data.retrofit.model.parent.auth.ParentAuthRequest;
|
||||
import one.nem.kidshift.data.retrofit.model.parent.auth.ParentAuthResponse;
|
||||
|
@ -43,6 +45,14 @@ public interface KidShiftApiService {
|
|||
@POST("/parent/auth/register")
|
||||
Call<ParentAuthResponse> parentRegister(@Body ParentAuthRequest request);
|
||||
|
||||
/**
|
||||
* 子供ログイン処理
|
||||
* @param request ChildAuthRequest
|
||||
* @return ChildAuthResponse
|
||||
*/
|
||||
@POST("/child/auth/login")
|
||||
Call<ChildAuthResponse> childLogin(@Body ChildAuthRequest request);
|
||||
|
||||
/**
|
||||
* 保護者アカウント情報取得処理
|
||||
* @return ParentInfoResponse
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package one.nem.kidshift.data.retrofit.model.child.auth;
|
||||
|
||||
public class ChildAuthRequest {
|
||||
private String loginCode;
|
||||
|
||||
public ChildAuthRequest(String loginCode) {
|
||||
this.loginCode = loginCode;
|
||||
}
|
||||
|
||||
public String getLoginCode() {
|
||||
return loginCode;
|
||||
}
|
||||
|
||||
public void setLoginCode(String loginCode) {
|
||||
this.loginCode = loginCode;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package one.nem.kidshift.data.retrofit.model.child.auth;
|
||||
|
||||
public class ChildAuthResponse {
|
||||
private String accessToken;
|
||||
|
||||
public ChildAuthResponse(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user