Newer
Older
CitrusClient / app / src / main / java / com / example / citrusclient / views / SignUpActivity.java
package com.example.citrusclient.views;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;

import com.example.citrusclient.Citrus;
import com.example.citrusclient.R;
import com.example.citrusclient.rest.AccountsRest;

import org.w3c.dom.Text;


public class SignUpActivity extends AppCompatActivity {

    private Retrofit retrofit;
    private AccountsRest accountsRest;
    private Citrus citrus;

    //画面起動時
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_sign_up);

        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;


        });

        //citrusと連携
        citrus = (Citrus) this.getApplication();

        //端末に情報が登録されているとき
        if ((citrus.getToken() != null)&&(citrus.getAccountId() != null)){
            System.out.println("アカウント登録済み");
            //MainActivityに遷移
            Intent  intent = new Intent(SignUpActivity.this,MainActivity.class);
            startActivity(intent);
        }

        //通信の初期化
        this.retrofit = new Retrofit.Builder()
                .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/")
                .addConverterFactory(JacksonConverterFactory.create())
                .build();
        this.accountsRest = retrofit.create(AccountsRest.class);



        findViewById(R.id.button_signup).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //IDとPWの登録
                EditText editid = (EditText) findViewById(R.id.text_id);
                String id = editid.getText().toString().trim();
                EditText editpw = (EditText) findViewById(R.id.put_pw);
                String pw = editpw.getText().toString().trim();
                final Handler handler = new Handler();
                System.out.println("テスト入力完了");

                //入力した文字に空白が含まれている場合
                //半角->全角 全てのスペースをなくす
                if(id.contains(" ") ||id.contains(" ") || pw.contains(" ") || pw.contains(" ")){
                    System.out.println("不適切入力");
                    ((TextView)findViewById(R.id.textView_respons)).setText("空白を含まないように入力してください");
                }

                //入力欄が空欄の時
                //半角->全角
                if(id.isEmpty() || pw.isEmpty() || id.trim().isEmpty() || pw.trim().isEmpty() ){
                    System.out.println("不適切入力");
                    ((TextView)findViewById(R.id.textView_respons)).setText("適切に入力してください");

                }else if(!id.isEmpty() && !pw.isEmpty() && !id.trim().isEmpty() && !pw.trim().isEmpty() && !id.contains(" ") && !id.contains(" ") && !pw.contains(" ") && !pw.contains(" ")){
                    //入力欄が全て適切に入力された場合の処理
                    Call<String> call = accountsRest.signup(id,pw);
                    call.enqueue(new Callback<String>() {
                        @Override
                        public void onResponse(Call<String> call, Response<String> response) {
                            if (response.isSuccessful()){
                                System.out.println("通信成功");
                                //端末にtoken.id登録
                                String token = response.body();
                                citrus.setToken(token);
                                citrus.setAccountId(id);
                                citrus.setAccountColor("#D5D5D5");

                                //画面遷移
                                handler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        Intent  intent = new Intent(SignUpActivity.this,MainActivity.class);
                                        startActivity(intent);
                                    }
                                });


                            }else{
                                //通信可能(ただしエラーが発生した場合)
                                //404がPW入力されてないときだけど、前で定義しているからいらないよね..?
                                System.out.println("通信可能");
                                if(response.code()==409){
                                    ((TextView)findViewById(R.id.textView_respons)).setText(("入力したアカウントIDは既に使用されています"));
                                }
                            }
                        }
                        //通信失敗
                        @Override
                        public void onFailure(Call<String> call, Throwable t) {
                            System.out.println("通信失敗");
                            System.out.println(t);
                        }
                    });
                }
            }
        });

        //ボタンを押してlogin画面に遷移
        Button button_login = (Button) findViewById(R.id.button_login);
        button_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(SignUpActivity.this,LoginActivity.class);
                startActivity(intent);
            }
        });
    }
}