diff --git a/.idea/misc.xml b/.idea/misc.xml index 860da66..d5d35ec 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d137616..8d6c6a8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,14 +12,17 @@ android:supportsRtl="true" android:theme="@style/Theme.Acanthus" android:usesCleartextTraffic="true"> - - + + + + + diff --git a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java index 7560890..c4c6944 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java +++ b/app/src/main/java/org/ntlab/acanthus_client/Acanthus.java @@ -3,5 +3,7 @@ import android.app.Application; public class Acanthus extends Application { + private String password; + private String email; } diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/AccountsRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/AccountsRest.java index eb5af07..e8a3e82 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/AccountsRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/AccountsRest.java @@ -2,6 +2,7 @@ import org.ntlab.acanthus_client.entities.Account; import org.ntlab.acanthus_client.entities.AccountJson; +import org.ntlab.acanthus_client.entities.AccountTokenJson; import org.ntlab.acanthus_client.entities.AccountUidJson; import java.util.Collection; @@ -11,6 +12,7 @@ import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; @@ -40,5 +42,21 @@ @Query("token")String token ); //----------------------------------------------------------------- + //----------------------------------------------------------------- + // トークン認証 + @GET("accounts/login") + Call hasLoginToken( + @Query("uid") String uidStr, + @Query("token") String token + ); + //----------------------------------------------------------------- + // トークンの発行 + @FormUrlEncoded + @PUT("accounts/login") + Call issueLoginToken( + @Field("email")String email, + @Field("password")String password + ); + //----------------------------------------------------------------- } diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/LoginRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/LoginRest.java deleted file mode 100644 index a70eece..0000000 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/accounts/LoginRest.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.ntlab.acanthus_client.resources.accounts; - -import org.ntlab.acanthus_client.entities.AccountJson; -import org.ntlab.acanthus_client.entities.AccountTokenJson; - -import retrofit2.Call; -import retrofit2.http.Field; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.GET; -import retrofit2.http.PUT; -import retrofit2.http.Query; - -//----------------------------------------------------------------- -// RestAPI: accounts/login -public interface LoginRest { - - //----------------------------------------------------------------- - // トークン認証 - @GET("accounts/login") - Call hasLoginToken( - @Query("uid") String uidStr, - @Query("token") String token - ); - - //----------------------------------------------------------------- - // トークンの発行 - @FormUrlEncoded - @PUT("accounts/login") - Call issueLoginToken( - @Field("email")String email, - @Field("password")String password - ); - //----------------------------------------------------------------- -} diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/Login/LoginScreenActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/Login/LoginScreenActivity.java index 08a410b..6154b1d 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/Login/LoginScreenActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/Login/LoginScreenActivity.java @@ -1,26 +1,21 @@ package org.ntlab.acanthus_client.views.Login; -import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.ViewModelProvider; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.text.Editable; -import android.text.Layout; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import android.widget.TextView; import org.ntlab.acanthus_client.R; -import org.ntlab.acanthus_client.databinding.ActivityLoginScreenBinding; import org.ntlab.acanthus_client.entities.AccountTokenJson; -import org.ntlab.acanthus_client.resources.accounts.LoginRest; +import org.ntlab.acanthus_client.resources.accounts.AccountsRest; import org.ntlab.acanthus_client.views.MainActivity; import org.ntlab.acanthus_client.views.Paint.PaintActivity; +import org.ntlab.acanthus_client.views.SignUp.SignUpActivity; + +import java.util.ArrayList; import retrofit2.Call; import retrofit2.Callback; @@ -33,35 +28,57 @@ public class LoginScreenActivity extends AppCompatActivity { //----------------------------------------------------------------- + // 各Viewの列挙型 + public enum EditTexts { + emailForm(0), passwordForm(1), loginButton(2), redoSignUpButton(3); + + private int textId; + + //----------------------------------------------------------------- + private EditTexts(int textId) { + this.textId = textId; + } + + //----------------------------------------------------------------- + // getter + public int getTextId() { + return this.textId; + } + } + + //----------------------------------------------------------------- + private ArrayList views = new ArrayList<>(); + + //----------------------------------------------------------------- // @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login_screen); + initView(); + Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") .addConverterFactory(JacksonConverterFactory.create()) .build(); - final LoginRest loginRest = retrofit.create(LoginRest.class); + final AccountsRest accountsRest = retrofit.create(AccountsRest.class); - setContentView(R.layout.activity_login_screen); - - onClicked(loginRest); + onClickLogin(accountsRest); + onClickSignUp(); } + //----------------------------------------------------------------- // ログインボタン押下時の処理 - private void onClicked(LoginRest loginRest) { - - EditText editEmailTextView = findViewById(R.id.input_email); - EditText editPasswordTextView = findViewById(R.id.input_password); - Button loginButton = (Button) findViewById(R.id.login_button); + private void onClickLogin(AccountsRest accountsRest) { + Button loginButton = (Button) views.get(EditTexts.loginButton.getTextId()); loginButton.setOnClickListener(v -> { - String emailStr = editEmailTextView.getText().toString(); - String password = editPasswordTextView.getText().toString(); + String emailAddress = views.get(EditTexts.emailForm.getTextId()).getText().toString(); + String password = views.get(EditTexts.passwordForm.getTextId()).getText().toString(); // ログイン - Call call = loginRest.issueLoginToken(emailStr, password); + Call call = accountsRest.issueLoginToken(emailAddress, password); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -76,12 +93,40 @@ }); }); } + + //----------------------------------------------------------------- + // サインアップ画面に遷移 + private void onClickSignUp() { + Button signUpButton = (Button) views.get(EditTexts.redoSignUpButton.getTextId()); + + signUpButton.setOnClickListener(v -> { + transitionActivity(new SignUpActivity()); + }); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // + private void initView() { + views.add(findViewById(R.id.editTextTextLoginEmail)); + views.add(findViewById(R.id.editTextTextLoginPassword)); + views.add(findViewById(R.id.buttonLoginLogin)); + views.add(findViewById(R.id.buttonRedoSignUp)); + } + //----------------------------------------------------------------- // ログイン成功時の処理 - private void succeedLogin(){ - Intent intent = new Intent(getApplication(), MainActivity.class); + private void succeedLogin() { + transitionActivity(new MainActivity()); + } + + //----------------------------------------------------------------- + // ログイン成功時の処理 + private void transitionActivity(AppCompatActivity appCompatActivity) { + Intent intent = new Intent(getApplication(), appCompatActivity.getClass()); startActivity(intent); finish(); } //----------------------------------------------------------------- + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/Main_menu_ui/home/HomeViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/Main_menu_ui/home/HomeViewModel.java index 2fe991c..5e40da0 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/Main_menu_ui/home/HomeViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/Main_menu_ui/home/HomeViewModel.java @@ -1,17 +1,13 @@ package org.ntlab.acanthus_client.views.Main_menu_ui.home; -import android.os.Bundle; import android.widget.EditText; -import org.ntlab.acanthus_client.R; -import org.ntlab.acanthus_client.entities.AccountTokenJson; import org.ntlab.acanthus_client.resources.accounts.HelloWorldRest; -import org.ntlab.acanthus_client.resources.accounts.LoginRest; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -import okhttp3.ResponseBody; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/SignUp/SignUpActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/SignUp/SignUpActivity.java new file mode 100644 index 0000000..cc84d7d --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/SignUp/SignUpActivity.java @@ -0,0 +1,136 @@ +package org.ntlab.acanthus_client.views.SignUp; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.entities.AccountUidJson; +import org.ntlab.acanthus_client.resources.accounts.AccountsRest; +import org.ntlab.acanthus_client.views.Login.LoginScreenActivity; +import org.ntlab.acanthus_client.views.MainActivity; + +import java.util.ArrayList; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +//----------------------------------------------------------------- +// +public class SignUpActivity extends AppCompatActivity { + //----------------------------------------------------------------- + // 各Viewの列挙型 + public enum EditTexts { + nameForm(0), emailForm(1), passwordForm(2), signUpButton(3), loginButton(4); + + private int textId; + + //----------------------------------------------------------------- + private EditTexts(int textId) { + this.textId = textId; + } + + //----------------------------------------------------------------- + // getter + public int getTextId() { + return this.textId; + } + } + + //----------------------------------------------------------------- + private ArrayList views = new ArrayList<>(); + + //----------------------------------------------------------------- + // + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sign_up); + initView(); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + final AccountsRest accountsRest = retrofit.create(AccountsRest.class); + + onClickSignUp(accountsRest); + onClickAlreadyLoggedIn(); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // サインアップ時押下時 + private void onClickSignUp(AccountsRest accountsRest) { + Button signUpButton = (Button) views.get(EditTexts.signUpButton.getTextId()); + + // + signUpButton.setOnClickListener(v -> { + String name = views.get(EditTexts.nameForm.getTextId()).getText().toString(); + ; + String emailAddress = views.get(EditTexts.emailForm.getTextId()).getText().toString(); + ; + String password = views.get(EditTexts.passwordForm.getTextId()).getText().toString(); + ; + + Call call = accountsRest.createAccount(name, emailAddress, password); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) transitionLoginActivity(); + else clearForm(); + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + }); + } + + //----------------------------------------------------------------- + // アカウント所持ボタン押下処理 + private void onClickAlreadyLoggedIn() { + Button alreadyLoggedInButton = (Button) views.get(EditTexts.loginButton.getTextId()); + + // ログイン画面に遷移 + alreadyLoggedInButton.setOnClickListener(v -> { + transitionLoginActivity(); + }); + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // ログイン画面遷移 + private void transitionLoginActivity() { + Intent intent = new Intent(getApplication(), LoginScreenActivity.class); + startActivity(intent); + finish(); + } + + //----------------------------------------------------------------- + // 登録内容のクリア + private void clearForm() { + for (int i = EditTexts.nameForm.getTextId(); i <= EditTexts.passwordForm.getTextId(); i++) { + views.get(i).getEditableText().clear(); + } + + } + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + // + private void initView() { + views.add(findViewById(R.id.editTextTextSignUpPersonName)); + views.add(findViewById(R.id.editTextTextSignUpEmailAddress)); + views.add(findViewById(R.id.editTextTextSignUpPassword)); + views.add(findViewById(R.id.buttonSignUpRegister)); + views.add(findViewById(R.id.buttonAlreadyLoggedIn)); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login_screen.xml b/app/src/main/res/layout/activity_login_screen.xml index 6207014..19edf2b 100644 --- a/app/src/main/res/layout/activity_login_screen.xml +++ b/app/src/main/res/layout/activity_login_screen.xml @@ -7,7 +7,7 @@ tools:context=".views.Login.LoginScreenActivity">