diff --git a/app/build.gradle b/app/build.gradle index a4d2725..9395665 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,8 @@ dependencies { implementation project(':feature:child') implementation project(':feature:setting') + implementation project(':data') + implementation project(':shared') implementation project(':utils') @@ -57,4 +59,8 @@ dependencies { implementation libs.navigation.fragment implementation libs.navigation.ui implementation libs.navigation.dynamic.features.fragment + + // Retrofit + implementation libs.retrofit + implementation libs.converter.gson } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 03435ca..b6d3fd6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,10 @@ + + + diff --git a/app/src/main/java/one/nem/kidshift/LoginActivity.java b/app/src/main/java/one/nem/kidshift/LoginActivity.java new file mode 100644 index 0000000..d8a5fd7 --- /dev/null +++ b/app/src/main/java/one/nem/kidshift/LoginActivity.java @@ -0,0 +1,104 @@ +package one.nem.kidshift; + +import android.os.Bundle; +import android.widget.EditText; + +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 java.io.IOException; +import java.util.concurrent.CompletableFuture; + +import javax.inject.Inject; + +import dagger.hilt.android.AndroidEntryPoint; +import one.nem.kidshift.data.UserSettings; +import one.nem.kidshift.data.retrofit.KidShiftApiService; +import one.nem.kidshift.data.retrofit.model.parent.auth.ParentLoginRequest; +import one.nem.kidshift.data.retrofit.model.parent.auth.ParentLoginResponse; +import one.nem.kidshift.utils.KSLogger; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +@AndroidEntryPoint +public class LoginActivity extends AppCompatActivity { + + @Inject + KSLogger logger; + + @Inject + UserSettings userSettings; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_login); + 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; + }); + + // Retrofit init + KidShiftApiService apiService = new Retrofit.Builder() + .baseUrl("https://kidshift-beta.nem.one/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(KidShiftApiService.class); + + EditText emailEditText = findViewById(R.id.emailEditText); + EditText passwordEditText = findViewById(R.id.passwordEditText); + + findViewById(R.id.loginButton).setOnClickListener(v -> { + CompletableFuture.supplyAsync(() -> { + try { + Response response = apiService.parentLogin( + new ParentLoginRequest( + emailEditText.getText().toString(), + passwordEditText.getText().toString() + )).execute(); + + return response; + } catch (IOException e) { + logger.error("IOException"); + throw new RuntimeException(e); + } + }).thenAccept(response -> { + if (response.isSuccessful()) { + logger.info("Login Success"); + logger.debug("AccessToken: " + response.body().getAccessToken()); + + UserSettings.AppCommonSetting appCommonSetting = userSettings.getAppCommonSetting(); + appCommonSetting.setLoggedIn(true); + appCommonSetting.setAccessToken(response.body().getAccessToken()); + appCommonSetting.setChildMode(false); + + finish(); + } else { + logger.error("Login Failed"); + try { + logger.debug("Response: " + response.errorBody().string()); + } catch (IOException e) { + logger.error("IOException while reading error body"); + } + // ログイン失敗時の処理 + } + }).exceptionally(e -> { + logger.error("Exception occurred: " + e.getMessage()); + return null; + }); + }); + + // for Debug + findViewById(R.id.loginButton).setOnLongClickListener(v -> { + // ログイン画面をバイパスしてメイン画面に遷移 + finish(); + return true; + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/one/nem/kidshift/MainActivity.java b/app/src/main/java/one/nem/kidshift/MainActivity.java index a7c2f4b..bacc373 100644 --- a/app/src/main/java/one/nem/kidshift/MainActivity.java +++ b/app/src/main/java/one/nem/kidshift/MainActivity.java @@ -1,5 +1,6 @@ package one.nem.kidshift; +import android.content.Intent; import android.os.Bundle; import androidx.activity.EdgeToEdge; @@ -17,6 +18,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView; import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; +import one.nem.kidshift.data.UserSettings; import one.nem.kidshift.utils.KSLogger; @AndroidEntryPoint @@ -25,6 +27,9 @@ public class MainActivity extends AppCompatActivity { @Inject KSLogger ksLogger; + @Inject + UserSettings userSettings; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -51,5 +56,15 @@ public class MainActivity extends AppCompatActivity { } catch (Exception e) { e.printStackTrace(); } + + // Check logged in + if (userSettings.getAppCommonSetting().isLoggedIn()) { + ksLogger.info("User is logged in!"); + } else { + ksLogger.info("User is not logged in!"); + + Intent intent = new Intent(this, LoginActivity.class); + startActivity(intent); + } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..389d6ef --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + +