diff --git a/app/src/main/java/one/nem/kidshift/MainActivity.java b/app/src/main/java/one/nem/kidshift/MainActivity.java index bacc373..9efe1af 100644 --- a/app/src/main/java/one/nem/kidshift/MainActivity.java +++ b/app/src/main/java/one/nem/kidshift/MainActivity.java @@ -67,4 +67,11 @@ public class MainActivity extends AppCompatActivity { startActivity(intent); } } + + /** + * 起動時にバックグラウンドで行う各種更新処理とか + */ + private void startup() { + + } } \ No newline at end of file diff --git a/data/src/main/java/one/nem/kidshift/data/KSActions.java b/data/src/main/java/one/nem/kidshift/data/KSActions.java new file mode 100644 index 0000000..d4161ee --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/KSActions.java @@ -0,0 +1,17 @@ +package one.nem.kidshift.data; + +/** + * データの同期など, ユーザーからの操作に基づかない処理を行う + */ +public interface KSActions { + + void syncTasks(); + + void syncChildList(); + + /** + * 親ユーザー情報同期 + */ + void syncParent(); + +} diff --git a/data/src/main/java/one/nem/kidshift/data/ParentData.java b/data/src/main/java/one/nem/kidshift/data/ParentData.java index e1653cf..31d19e3 100644 --- a/data/src/main/java/one/nem/kidshift/data/ParentData.java +++ b/data/src/main/java/one/nem/kidshift/data/ParentData.java @@ -1,15 +1,17 @@ package one.nem.kidshift.data; +import java.util.concurrent.CompletableFuture; + import one.nem.kidshift.model.ParentModel; public interface ParentData { + /** * 親ユーザー情報取得 - * @param parentId 親ID - * @return ParentModel 親ユーザー情報 + * @return 親ユーザー情報 */ - ParentModel getParent(String parentId); + CompletableFuture getParent(); /** * 親ユーザー情報更新 diff --git a/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java new file mode 100644 index 0000000..b6dbc2a --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java @@ -0,0 +1,31 @@ +package one.nem.kidshift.data.impl; + +import javax.inject.Inject; + +import one.nem.kidshift.data.KSActions; +import one.nem.kidshift.data.UserSettings; + +public class KSActionsImpl implements KSActions { + + private UserSettings userSettings; + + @Inject + public KSActionsImpl(UserSettings userSettings) { + this.userSettings = userSettings; + } + + @Override + public void syncTasks() { + + } + + @Override + public void syncChildList() { + + } + + @Override + public void syncParent() { + + } +} diff --git a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataDummyImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataDummyImpl.java deleted file mode 100644 index 7913200..0000000 --- a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataDummyImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package one.nem.kidshift.data.impl; - -import javax.inject.Inject; - -import one.nem.kidshift.data.ParentData; -import one.nem.kidshift.model.ParentModel; - -public class ParentDataDummyImpl implements ParentData { - - @Inject - public ParentDataDummyImpl() { - } - - @Override - public ParentModel getParent(String parentId) { - return new ParentModel("ID", "Parent Name", "homeGroupId", "hoge@example.com"); - } - - @Override - public void updateParent(ParentModel parent) { - - } -} diff --git a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java new file mode 100644 index 0000000..6e166d7 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java @@ -0,0 +1,55 @@ +package one.nem.kidshift.data.impl; + +import android.util.Log; + +import java.io.IOException; +import java.util.concurrent.CompletableFuture; + +import javax.inject.Inject; + +import one.nem.kidshift.data.ParentData; +import one.nem.kidshift.data.UserSettings; +import one.nem.kidshift.data.retrofit.KidShiftApiService; +import one.nem.kidshift.data.retrofit.model.parent.ParentInfoResponse; +import one.nem.kidshift.model.ParentModel; +import retrofit2.Call; +import retrofit2.Response; + +public class ParentDataImpl implements ParentData { + + private KidShiftApiService kidshiftApiService; + + private UserSettings userSettings; + + @Inject + public ParentDataImpl(KidShiftApiService kidshiftApiService, UserSettings userSettings) { + this.kidshiftApiService = kidshiftApiService; + this.userSettings = userSettings; + } + + @Override + public CompletableFuture getParent() { + return CompletableFuture.supplyAsync(() -> { + Response parentInfoResponse; + Call response = kidshiftApiService.getParentInfo(); + try { + parentInfoResponse = response.execute(); + ParentInfoResponse responseBody = parentInfoResponse.body(); + ParentModel parent = new ParentModel(); + assert parentInfoResponse != null; + parent.setInternalId(responseBody.getId()); + parent.setEmail(responseBody.getEmail()); + parent.setDisplayName(responseBody.getEmail()); // Workaround + // TODO: 他のプロパティも処理する + return parent; + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + } + + @Override + public void updateParent(ParentModel parent) { + + } +} diff --git a/data/src/main/java/one/nem/kidshift/data/modules/ParentDataDummyModule.java b/data/src/main/java/one/nem/kidshift/data/modules/ParentDataModule.java similarity index 58% rename from data/src/main/java/one/nem/kidshift/data/modules/ParentDataDummyModule.java rename to data/src/main/java/one/nem/kidshift/data/modules/ParentDataModule.java index 149e7fe..6b738ae 100644 --- a/data/src/main/java/one/nem/kidshift/data/modules/ParentDataDummyModule.java +++ b/data/src/main/java/one/nem/kidshift/data/modules/ParentDataModule.java @@ -5,12 +5,12 @@ import dagger.Module; import dagger.hilt.InstallIn; import dagger.hilt.android.components.FragmentComponent; import one.nem.kidshift.data.ParentData; -import one.nem.kidshift.data.impl.ParentDataDummyImpl; +import one.nem.kidshift.data.impl.ParentDataImpl; @Module @InstallIn(FragmentComponent.class) -abstract public class ParentDataDummyModule { +public abstract class ParentDataModule { @Binds - public abstract ParentData bindParentData(ParentDataDummyImpl parentDataDummyImpl); + public abstract ParentData bindParentData(ParentDataImpl parentDataImpl); } diff --git a/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiService.java b/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiService.java index c5c24d9..c075559 100644 --- a/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiService.java +++ b/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiService.java @@ -1,9 +1,14 @@ package one.nem.kidshift.data.retrofit; +import one.nem.kidshift.data.retrofit.interceptor.AuthorizationInterceptor; +import one.nem.kidshift.data.retrofit.model.parent.ParentInfoResponse; import one.nem.kidshift.data.retrofit.model.parent.auth.ParentLoginRequest; import one.nem.kidshift.data.retrofit.model.parent.auth.ParentLoginResponse; import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; import retrofit2.http.POST; public interface KidShiftApiService { @@ -11,4 +16,8 @@ public interface KidShiftApiService { @POST("/parent/auth/login") Call parentLogin(@Body ParentLoginRequest request); + @GET("/parent/account") + @Headers(AuthorizationInterceptor.HEADER_PLACEHOLDER) + Call getParentInfo(); + } diff --git a/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiServiceModule.java b/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiServiceModule.java new file mode 100644 index 0000000..76ddd7f --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiServiceModule.java @@ -0,0 +1,60 @@ +package one.nem.kidshift.data.retrofit; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import dagger.hilt.InstallIn; +import dagger.hilt.components.SingletonComponent; +import okhttp3.OkHttpClient; +import one.nem.kidshift.data.UserSettings; +import one.nem.kidshift.data.retrofit.interceptor.AuthorizationInterceptor; +import one.nem.kidshift.utils.KSLogger; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +@Module +@InstallIn(SingletonComponent.class) +public class KidShiftApiServiceModule { + + @Inject + KSLogger logger; + + @Provides + @Singleton + public AuthorizationInterceptor provideAuthorizationInterceptor(UserSettings userSettings, KSLogger logger) { + return new AuthorizationInterceptor(userSettings, logger); + } + + // Gson + @Provides + @Singleton + public Gson provideGson() { + return new GsonBuilder() + .create(); + } + + @Provides + @Singleton + public OkHttpClient provideOkHttpClient(AuthorizationInterceptor authorizationInterceptor) { + return new OkHttpClient.Builder() + .addInterceptor(authorizationInterceptor) + .build(); + } + + @Provides + @Singleton + public KidShiftApiService provideKidShiftApiService(OkHttpClient okHttpClient) { + return new Retrofit.Builder() +// .baseUrl(userSettings.getApiSetting().getApiBaseUrl()) + .baseUrl("https://kidshift-beta.nem.one/") + .addConverterFactory(GsonConverterFactory.create(provideGson())) + .client(okHttpClient) + .build() + .create(KidShiftApiService.class); + } +} diff --git a/data/src/main/java/one/nem/kidshift/data/retrofit/interceptor/AuthorizationInterceptor.java b/data/src/main/java/one/nem/kidshift/data/retrofit/interceptor/AuthorizationInterceptor.java new file mode 100644 index 0000000..17ae555 --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/retrofit/interceptor/AuthorizationInterceptor.java @@ -0,0 +1,52 @@ +package one.nem.kidshift.data.retrofit.interceptor; + +import android.util.Log; + +import androidx.annotation.NonNull; + +import java.io.IOException; + +import javax.inject.Inject; + +import okhttp3.Interceptor; +import okhttp3.Response; +import one.nem.kidshift.data.UserSettings; +import one.nem.kidshift.utils.KSLogger; + +public class AuthorizationInterceptor implements Interceptor { + + private static final String HEADER_NAME = "Authorization"; + private static final String HEADER_VALUE = "VALUE"; + public static final String HEADER_PLACEHOLDER = HEADER_NAME + ": " + HEADER_VALUE; + + private final UserSettings userSettings; + private final KSLogger logger; + + public AuthorizationInterceptor(UserSettings userSettings, KSLogger logger) { + this.userSettings = userSettings; + this.logger = logger; + logger.setTag("Auth_Interceptor"); + } + + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + logger.debug("intercept"); + try { + if (chain.request().header(HEADER_NAME) == null) { + logger.debug("Authorization header is null"); + return chain.proceed(chain.request()); + } + if (!HEADER_VALUE.equals(chain.request().header(HEADER_NAME))) { + logger.debug("Authorization header is invalid"); + return chain.proceed(chain.request()); + } + + return chain.proceed(chain.request().newBuilder() + .header(HEADER_NAME, "Barer " + userSettings.getAppCommonSetting().getAccessToken()) + .build()); + } catch (Exception e) { + return chain.proceed(chain.request()); + } + } +} diff --git a/data/src/main/java/one/nem/kidshift/data/retrofit/model/parent/ParentInfoResponse.java b/data/src/main/java/one/nem/kidshift/data/retrofit/model/parent/ParentInfoResponse.java new file mode 100644 index 0000000..425c0ba --- /dev/null +++ b/data/src/main/java/one/nem/kidshift/data/retrofit/model/parent/ParentInfoResponse.java @@ -0,0 +1,38 @@ +package one.nem.kidshift.data.retrofit.model.parent; + +public class ParentInfoResponse { + + private String id; + private String email; + private String displayName; + + public ParentInfoResponse(String id, String email, String displayName) { + this.id = id; + this.email = email; + this.displayName = displayName; + } + + public String getId() { + return id; + } + + public String getEmail() { + return email; + } + + public String getDisplayName() { + return displayName; + } + + public void setId(String id) { + this.id = id; + } + + public void setEmail(String email) { + this.email = email; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } +} diff --git a/feature/setting/src/main/java/one/nem/kidshift/feature/setting/SettingMainFragment.java b/feature/setting/src/main/java/one/nem/kidshift/feature/setting/SettingMainFragment.java index 68271f9..4466854 100644 --- a/feature/setting/src/main/java/one/nem/kidshift/feature/setting/SettingMainFragment.java +++ b/feature/setting/src/main/java/one/nem/kidshift/feature/setting/SettingMainFragment.java @@ -86,7 +86,13 @@ public class SettingMainFragment extends Fragment { // Inflate the layout for this fragment //親の名前、アドレス表示 - ParentModel parent = parentData.getParent("poiuytrew"); + ParentModel parent = parentData.getParent().join(); + + if (parent == null) { + parent = new ParentModel(); // Workaround(非ログインデバッグ用) + parent.setDisplayName("親の名前"); + parent.setEmail("親のアドレス"); + } //RecyclerViewの処理 View view = inflater.inflate(R.layout.fragment_setting_main, container, false); diff --git a/model/src/main/java/one/nem/kidshift/model/ParentModel.java b/model/src/main/java/one/nem/kidshift/model/ParentModel.java index d329881..81a7a89 100644 --- a/model/src/main/java/one/nem/kidshift/model/ParentModel.java +++ b/model/src/main/java/one/nem/kidshift/model/ParentModel.java @@ -25,6 +25,9 @@ public class ParentModel { this.displayName = displayName; } + public ParentModel() { + } + // Getter public String getInternalId() {