diff --git a/app/src/main/java/one/nem/kidshift/KidShiftApplication.java b/app/src/main/java/one/nem/kidshift/KidShiftApplication.java index d3c9f6f..cf4aa3b 100644 --- a/app/src/main/java/one/nem/kidshift/KidShiftApplication.java +++ b/app/src/main/java/one/nem/kidshift/KidShiftApplication.java @@ -9,6 +9,7 @@ import javax.inject.Inject; import dagger.hilt.android.HiltAndroidApp; import one.nem.kidshift.utils.FeatureFlag; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; @HiltAndroidApp public class KidShiftApplication extends Application { @@ -17,13 +18,16 @@ public class KidShiftApplication extends Application { FeatureFlag featureFlag; @Inject - KSLogger logger; + KSLoggerFactory loggerFactory; + + private KSLogger logger; @Override public void onCreate() { super.onCreate(); - logger.setTag("KidShiftApplication"); + this.logger = loggerFactory.create("KidShiftApplication"); + logger.info("super.onCreate() completed"); if(featureFlag.isEnabled("dynamicColorEnable")) { diff --git a/app/src/main/java/one/nem/kidshift/LoginActivity.java b/app/src/main/java/one/nem/kidshift/LoginActivity.java index d8a5fd7..d9a6a9b 100644 --- a/app/src/main/java/one/nem/kidshift/LoginActivity.java +++ b/app/src/main/java/one/nem/kidshift/LoginActivity.java @@ -20,6 +20,7 @@ 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 one.nem.kidshift.utils.factory.KSLoggerFactory; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; @@ -28,7 +29,9 @@ import retrofit2.converter.gson.GsonConverterFactory; public class LoginActivity extends AppCompatActivity { @Inject - KSLogger logger; + KSLoggerFactory loggerFactory; + + private KSLogger logger; @Inject UserSettings userSettings; @@ -44,6 +47,8 @@ public class LoginActivity extends AppCompatActivity { return insets; }); + logger = loggerFactory.create("LoginActivity"); + // Retrofit init KidShiftApiService apiService = new Retrofit.Builder() .baseUrl("https://kidshift-beta.nem.one/") diff --git a/app/src/main/java/one/nem/kidshift/MainActivity.java b/app/src/main/java/one/nem/kidshift/MainActivity.java index 9efe1af..5faaaca 100644 --- a/app/src/main/java/one/nem/kidshift/MainActivity.java +++ b/app/src/main/java/one/nem/kidshift/MainActivity.java @@ -20,12 +20,15 @@ import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; import one.nem.kidshift.data.UserSettings; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; @AndroidEntryPoint public class MainActivity extends AppCompatActivity { @Inject - KSLogger ksLogger; + KSLoggerFactory loggerFactory; + + private KSLogger logger; @Inject UserSettings userSettings; @@ -41,7 +44,9 @@ public class MainActivity extends AppCompatActivity { return insets; }); - ksLogger.info("MainActivity started!"); + logger = loggerFactory.create("MainActivity"); + + logger.info("MainActivity started!"); BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav); @@ -59,9 +64,9 @@ public class MainActivity extends AppCompatActivity { // Check logged in if (userSettings.getAppCommonSetting().isLoggedIn()) { - ksLogger.info("User is logged in!"); + logger.info("User is logged in!"); } else { - ksLogger.info("User is not logged in!"); + logger.info("User is not logged in!"); Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); diff --git a/data/src/main/java/one/nem/kidshift/data/ChildData.java b/data/src/main/java/one/nem/kidshift/data/ChildData.java index e6c3e08..75460be 100644 --- a/data/src/main/java/one/nem/kidshift/data/ChildData.java +++ b/data/src/main/java/one/nem/kidshift/data/ChildData.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import one.nem.kidshift.model.ChildModel; +import one.nem.kidshift.model.callback.ChildModelCallback; public interface ChildData { @@ -18,7 +19,7 @@ public interface ChildData { * 子ユーザー一覧取得 * @return List 子ユーザー一覧 */ - CompletableFuture> getChildList(); + CompletableFuture> getChildList(ChildModelCallback callback); /** * 子ユーザー情報更新 diff --git a/data/src/main/java/one/nem/kidshift/data/impl/ChildDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/ChildDataImpl.java index 1eb718e..bf0417d 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/ChildDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/ChildDataImpl.java @@ -1,30 +1,37 @@ package one.nem.kidshift.data.impl; +import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import javax.inject.Inject; import one.nem.kidshift.data.ChildData; +import one.nem.kidshift.data.KSActions; import one.nem.kidshift.data.retrofit.KidShiftApiService; import one.nem.kidshift.data.retrofit.model.child.ChildListResponse; import one.nem.kidshift.data.retrofit.model.converter.ChildModelConverter; +import one.nem.kidshift.data.room.utils.CacheWrapper; import one.nem.kidshift.model.ChildModel; +import one.nem.kidshift.model.callback.ChildModelCallback; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; import retrofit2.Call; import retrofit2.Response; public class ChildDataImpl implements ChildData { - private KidShiftApiService kidShiftApiService; - - private KSLogger logger; + private final KSActions ksActions; + private final CacheWrapper cacheWrapper; + private final KSLogger logger; @Inject - public ChildDataImpl(KidShiftApiService kidShiftApiService, KSLogger logger) { - this.kidShiftApiService = kidShiftApiService; - this.logger = logger; + public ChildDataImpl(KSActions ksActions, CacheWrapper cacheWrapper, KSLoggerFactory loggerFactory) { + this.ksActions = ksActions; + this.cacheWrapper = cacheWrapper; + this.logger = loggerFactory.create("ChildDataImpl"); } @Override @@ -33,21 +40,53 @@ public class ChildDataImpl implements ChildData { } @Override - public CompletableFuture> getChildList() { // TODO-rca: DBにキャッシュするように修正する + public CompletableFuture> getChildList(ChildModelCallback callback) { // TODO: リファクタリング return CompletableFuture.supplyAsync(() -> { - Call call = kidShiftApiService.getChildList(); - try { - Response response = call.execute(); - if (!response.isSuccessful()) return null; // TODO-rca: nullとするかは検討 - - ChildListResponse body = response.body(); - if (body == null) return null; - - return ChildModelConverter.childListResponseToChildModelList(body); - } catch (Exception e) { - logger.error(e.getMessage()); - return null; - } + logger.debug("子供リスト取得開始"); + AtomicReference> childListTmp = new AtomicReference<>(); + Thread thread = new Thread(() -> { + ksActions.syncChildList().thenAccept(childList -> { + if (childListTmp.get() == null || childListTmp.get().isEmpty()) { + logger.debug("子供リスト取得完了: キャッシュよりはやく取得完了 or キャッシュ無し"); + if (childList == null || childList.isEmpty()) { + callback.onUnchanged(); + } else { + callback.onUpdated(childList); + } + } else { + boolean isChanged = + childList.size() != childListTmp.get().size() || + childList.stream().anyMatch(child -> childListTmp.get().stream().noneMatch(childTmp -> child.getId().equals(childTmp.getId()))); + if (isChanged) { + logger.debug("子供リスト取得完了: キャッシュと比較して変更あり"); + callback.onUpdated(childList); + } else { + logger.debug("子供リスト取得完了: キャッシュと比較して変更なし"); + callback.onUnchanged(); + } + } + }).exceptionally(e -> { + logger.error("子供リスト取得失敗: " + e.getMessage()); + callback.onFailed(e.getMessage()); + return null; + }); + }); + thread.start(); + return cacheWrapper.getChildList().thenApply(childList -> { + if (childList == null || childList.isEmpty()) { + try { + logger.debug("キャッシュ無: 子供リスト取得スレッド待機"); + thread.join(); + return cacheWrapper.getChildList().join(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } else { + logger.debug("キャッシュ有 (子供数: " + childList.size() + ")"); + childListTmp.set(childList); + return childList; + } + }).join(); }); } 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 index 786bb38..c00b152 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java @@ -19,23 +19,23 @@ import one.nem.kidshift.model.ChildModel; import one.nem.kidshift.model.ParentModel; import one.nem.kidshift.model.tasks.TaskItemModel; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; import retrofit2.Call; import retrofit2.Response; public class KSActionsImpl implements KSActions { - private UserSettings userSettings; - private KidShiftApiService kidShiftApiService; - private KSLogger logger; - private CacheWrapper cacheWrapper; + private final UserSettings userSettings; + private final KidShiftApiService kidShiftApiService; + private final KSLogger logger; + private final CacheWrapper cacheWrapper; @Inject - public KSActionsImpl(UserSettings userSettings, KidShiftApiService kidShiftApiService, KSLogger logger, CacheWrapper cacheWrapper) { + public KSActionsImpl(UserSettings userSettings, KidShiftApiService kidShiftApiService, KSLoggerFactory ksLoggerFactory, CacheWrapper cacheWrapper) { this.userSettings = userSettings; this.kidShiftApiService = kidShiftApiService; - this.logger = logger; + this.logger = ksLoggerFactory.create("KSActionsImpl"); this.cacheWrapper = cacheWrapper; - logger.setTag("KSActions"); } @Override 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 index a8f70d6..e3334b8 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java @@ -11,25 +11,21 @@ import one.nem.kidshift.data.retrofit.KidShiftApiService; import one.nem.kidshift.model.ParentModel; import one.nem.kidshift.model.callback.ParentModelCallback; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; public class ParentDataImpl implements ParentData { - private KidShiftApiService kidshiftApiService; + private final UserSettings userSettings; - private UserSettings userSettings; + private final KSLogger logger; - private KSLogger logger; - - private KSActions ksActions; + private final KSActions ksActions; @Inject - public ParentDataImpl(KidShiftApiService kidshiftApiService, UserSettings userSettings, KSLogger logger, KSActions ksActions) { - this.kidshiftApiService = kidshiftApiService; + public ParentDataImpl(KidShiftApiService kidshiftApiService, UserSettings userSettings, KSLoggerFactory ksLoggerFactory, KSActions ksActions) { this.userSettings = userSettings; - this.logger = logger; + this.logger = ksLoggerFactory.create("ParentDataImpl"); this.ksActions = ksActions; - - logger.setTag("ParentData"); } // 一旦キャッシュを返して, その後非同期でAPIから取得→更新があればコールバックで通知 diff --git a/data/src/main/java/one/nem/kidshift/data/impl/RewardDataDummyImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/RewardDataDummyImpl.java index e7b6653..a6cb049 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/RewardDataDummyImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/RewardDataDummyImpl.java @@ -13,9 +13,6 @@ public class RewardDataDummyImpl implements RewardData { private final Faker faker; - @Inject - KSLogger logger; - @Inject public RewardDataDummyImpl() { faker = new Faker(); diff --git a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java index 4e13e85..38b1792 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java @@ -2,40 +2,63 @@ package one.nem.kidshift.data.impl; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; +import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; -import javax.security.auth.callback.Callback; import one.nem.kidshift.data.KSActions; import one.nem.kidshift.data.TaskData; -import one.nem.kidshift.data.retrofit.model.converter.TaskModelConverter; -import one.nem.kidshift.data.retrofit.model.task.TaskListResponse; import one.nem.kidshift.data.room.utils.CacheWrapper; import one.nem.kidshift.model.callback.TaskItemModelCallback; import one.nem.kidshift.model.tasks.TaskItemModel; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; public class TaskDataImpl implements TaskData { - private KSActions ksActions; - private CacheWrapper cacheWrapper; - private KSLogger logger; + private final KSActions ksActions; + private final CacheWrapper cacheWrapper; + private final KSLogger logger; @Inject - public TaskDataImpl(KSActions ksActions, CacheWrapper cacheWrapper, KSLogger logger) { + public TaskDataImpl(KSActions ksActions, CacheWrapper cacheWrapper, KSLoggerFactory loggerFactory) { this.ksActions = ksActions; this.cacheWrapper = cacheWrapper; - this.logger = logger.setTag("TaskDataImpl"); + this.logger = loggerFactory.create("TaskDataImpl"); } @Override public CompletableFuture> getTasks(TaskItemModelCallback callback) { return CompletableFuture.supplyAsync(() -> { logger.debug("タスク取得開始"); + AtomicReference> taskListTmp = new AtomicReference<>(); Thread thread = new Thread(() -> { - // TODO-rca: ちゃんと比較して呼ぶ - ksActions.syncTasks().thenAccept(callback::onUpdated); + ksActions.syncTasks().thenAccept(taskList -> { + if (taskListTmp.get() == null || taskListTmp.get().isEmpty()) { + logger.debug("タスク取得完了: キャッシュよりはやく取得完了 or キャッシュ無し"); + if (taskList == null || taskList.isEmpty()) { + callback.onUnchanged(); + } else { + callback.onUpdated(taskList); + } + } else { + // キャッシュと比較して変更の有無を確認 + boolean isChanged = + taskList.size() != taskListTmp.get().size() || + taskList.stream().anyMatch(task -> taskListTmp.get().stream().noneMatch(taskTmp -> task.getId().equals(taskTmp.getId()))); + if (isChanged) { + logger.debug("タスク取得完了: キャッシュと比較して変更あり"); + callback.onUpdated(taskList); + } else { + logger.debug("タスク取得完了: キャッシュと比較して変更なし"); + callback.onUnchanged(); + } + } + }).exceptionally(e -> { + logger.error("タスク取得失敗: " + e.getMessage()); + callback.onFailed(e.getMessage()); + return null; + }); }); thread.start(); return cacheWrapper.getTaskList().thenApply(taskList -> { @@ -49,6 +72,7 @@ public class TaskDataImpl implements TaskData { } } else { logger.debug("キャッシュ有 (タスク数: " + taskList.size() + ")"); + taskListTmp.set(taskList); return taskList; } }).join(); 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 index 76ddd7f..0d10ee2 100644 --- a/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiServiceModule.java +++ b/data/src/main/java/one/nem/kidshift/data/retrofit/KidShiftApiServiceModule.java @@ -14,6 +14,7 @@ import okhttp3.OkHttpClient; import one.nem.kidshift.data.UserSettings; import one.nem.kidshift.data.retrofit.interceptor.AuthorizationInterceptor; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; @@ -22,12 +23,12 @@ import retrofit2.converter.gson.GsonConverterFactory; public class KidShiftApiServiceModule { @Inject - KSLogger logger; + KSLoggerFactory ksLoggerFactory; @Provides @Singleton - public AuthorizationInterceptor provideAuthorizationInterceptor(UserSettings userSettings, KSLogger logger) { - return new AuthorizationInterceptor(userSettings, logger); + public AuthorizationInterceptor provideAuthorizationInterceptor(UserSettings userSettings, KSLoggerFactory ksLoggerFactory) { + return new AuthorizationInterceptor(userSettings, ksLoggerFactory); } // Gson 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 index fd3953c..69c0603 100644 --- 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 @@ -12,6 +12,7 @@ import okhttp3.Interceptor; import okhttp3.Response; import one.nem.kidshift.data.UserSettings; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; /** * Authorization placeholderが指定されている場合にアクセストークンで置換するインターセプター @@ -25,10 +26,9 @@ public class AuthorizationInterceptor implements Interceptor { private final UserSettings userSettings; private final KSLogger logger; - public AuthorizationInterceptor(UserSettings userSettings, KSLogger logger) { + public AuthorizationInterceptor(UserSettings userSettings, KSLoggerFactory loggerFactory) { this.userSettings = userSettings; - this.logger = logger; - logger.setTag("Auth_Interceptor"); + this.logger = loggerFactory.create("Auth_Interceptor"); } @NonNull diff --git a/data/src/main/java/one/nem/kidshift/data/room/utils/CacheWrapper.java b/data/src/main/java/one/nem/kidshift/data/room/utils/CacheWrapper.java index 22ff584..81490ef 100644 --- a/data/src/main/java/one/nem/kidshift/data/room/utils/CacheWrapper.java +++ b/data/src/main/java/one/nem/kidshift/data/room/utils/CacheWrapper.java @@ -18,6 +18,7 @@ import one.nem.kidshift.data.room.utils.converter.TaskCacheConverter; import one.nem.kidshift.model.ChildModel; import one.nem.kidshift.model.tasks.TaskItemModel; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; @Module @InstallIn(SingletonComponent.class) @@ -27,9 +28,9 @@ public class CacheWrapper { private KSLogger logger; @Inject - public CacheWrapper(KidShiftDatabase kidShiftDatabase, KSLogger logger) { + public CacheWrapper(KidShiftDatabase kidShiftDatabase, KSLoggerFactory loggerFactory) { this.kidShiftDatabase = kidShiftDatabase; - this.logger = logger; + this.logger = loggerFactory.create("CacheWrapper"); } /** @@ -92,8 +93,8 @@ public class CacheWrapper { */ public CompletableFuture> getChildList() { return CompletableFuture.supplyAsync(() -> { - // Get a list of children from the database - return null; + List result = kidShiftDatabase.childCacheDao().getChildList(); + return ChildCacheConverter.childCacheEntityListToChildModelList(result); }); } diff --git a/data/src/main/java/one/nem/kidshift/data/room/utils/converter/ChildCacheConverter.java b/data/src/main/java/one/nem/kidshift/data/room/utils/converter/ChildCacheConverter.java index 99dff2c..d2a68d1 100644 --- a/data/src/main/java/one/nem/kidshift/data/room/utils/converter/ChildCacheConverter.java +++ b/data/src/main/java/one/nem/kidshift/data/room/utils/converter/ChildCacheConverter.java @@ -38,4 +38,12 @@ public class ChildCacheConverter { public static ChildModel childCacheEntityToChildModel(ChildCacheEntity entity) { return new ChildModel(entity.id, entity.name); } + + public static List childCacheEntityListToChildModelList(List result) { + List childList = new ArrayList<>(); + for (ChildCacheEntity entity : result) { + childList.add(childCacheEntityToChildModel(entity)); + } + return childList; + } } diff --git a/feature/child/src/main/java/one/nem/kidshift/feature/child/ChildMainFragment.java b/feature/child/src/main/java/one/nem/kidshift/feature/child/ChildMainFragment.java index e092f5a..f5d16f6 100644 --- a/feature/child/src/main/java/one/nem/kidshift/feature/child/ChildMainFragment.java +++ b/feature/child/src/main/java/one/nem/kidshift/feature/child/ChildMainFragment.java @@ -19,6 +19,7 @@ import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; import one.nem.kidshift.data.RewardData; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; /** * A simple {@link Fragment} subclass. @@ -29,7 +30,9 @@ import one.nem.kidshift.utils.KSLogger; @AndroidEntryPoint public class ChildMainFragment extends Fragment { @Inject - KSLogger ksLogger; + KSLoggerFactory loggerFactory; + + private KSLogger logger; @Inject RewardData rewardData; @@ -72,6 +75,8 @@ public class ChildMainFragment extends Fragment { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } + + logger = loggerFactory.create("ChildMainFragment"); } @Override @@ -86,11 +91,11 @@ public class ChildMainFragment extends Fragment { super.onViewCreated(view, savedInstanceState); - ksLogger.addTag("ChildMainFragment"); + logger.addTag("ChildMainFragment"); Integer reward = rewardData.getTotalReward().join(); - ksLogger.debug("取得したデータ: " + reward); + logger.debug("取得したデータ: " + reward); Calendar cl = Calendar.getInstance(); TextView tr = view.findViewById(R.id.totalReward); diff --git a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugDebugConsoleFragment.java b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugDebugConsoleFragment.java index 1c6ccd9..d2f3f4e 100644 --- a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugDebugConsoleFragment.java +++ b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugDebugConsoleFragment.java @@ -21,12 +21,16 @@ import one.nem.kidshift.feature.debug.adapter.DebugCommandListItemAdapter; import one.nem.kidshift.feature.debug.model.DebugCommandItemModel; import one.nem.kidshift.utils.FeatureFlag; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; @AndroidEntryPoint public class DebugDebugConsoleFragment extends Fragment { @Inject - KSLogger ksLogger; + KSLoggerFactory loggerFactory; + + private KSLogger ksLogger; + @Inject FeatureFlag featureFlag; @@ -40,6 +44,12 @@ public class DebugDebugConsoleFragment extends Fragment { // Required empty public constructor } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ksLogger = loggerFactory.create("DebugConsole"); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugMainFragment.java b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugMainFragment.java index 1c0722a..e5124e6 100644 --- a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugMainFragment.java +++ b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugMainFragment.java @@ -12,17 +12,26 @@ import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; @AndroidEntryPoint public class DebugMainFragment extends Fragment { @Inject - KSLogger ksLogger; + KSLoggerFactory loggerFactory; + + private KSLogger logger; public DebugMainFragment() { // Required empty public constructor } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + logger = loggerFactory.create("DebugMain"); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugTempLoginFragment.java b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugTempLoginFragment.java index 072135d..918692c 100644 --- a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugTempLoginFragment.java +++ b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugTempLoginFragment.java @@ -32,6 +32,7 @@ import javax.inject.Inject; import dagger.hilt.android.AndroidEntryPoint; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; /** * A simple {@link Fragment} subclass. @@ -42,7 +43,9 @@ import one.nem.kidshift.utils.KSLogger; public class DebugTempLoginFragment extends Fragment { @Inject - KSLogger logger; + KSLoggerFactory loggerFactory; + + private KSLogger logger; // TODO: Rename parameter arguments, choose names that match @@ -91,8 +94,8 @@ public class DebugTempLoginFragment extends Fragment { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_debug_temp_login, container, false); - logger.setTag("Login"); + this.logger = loggerFactory.create("DebugTempLoginFragment"); //xmlレイアウトからid取得 EditText id = (EditText) view.findViewById(R.id.idtext); 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 c446dae..db634a0 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 @@ -19,7 +19,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.concurrent.CompletableFuture; import javax.inject.Inject; @@ -29,8 +28,10 @@ import one.nem.kidshift.data.ChildData; import one.nem.kidshift.data.ParentData; import one.nem.kidshift.model.ChildModel; import one.nem.kidshift.model.ParentModel; +import one.nem.kidshift.model.callback.ChildModelCallback; import one.nem.kidshift.model.callback.ParentModelCallback; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; @AndroidEntryPoint public class SettingMainFragment extends Fragment { @@ -42,7 +43,9 @@ public class SettingMainFragment extends Fragment { ParentData parentData; @Inject - KSLogger logger; + KSLoggerFactory ksLoggerFactory; + + private KSLogger logger; TextView username; @@ -56,6 +59,12 @@ public class SettingMainFragment extends Fragment { // Required empty public constructor } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + logger = ksLoggerFactory.create("SettingMainFragment"); + } + private CompletableFuture updateParentInfo(){ return parentData.getParent(new ParentModelCallback() { @Override @@ -81,7 +90,22 @@ public class SettingMainFragment extends Fragment { @SuppressLint("NotifyDataSetChanged") private CompletableFuture updateChildInfo(){ - return childData.getChildList().thenAccept(childModels -> { + return childData.getChildList(new ChildModelCallback() { + @Override + public void onUnchanged() { + + } + + @Override + public void onUpdated(List childModelList) { + + } + + @Override + public void onFailed(String message) { + + } + }).thenAccept(childModels -> { mainAdapter.setChildDataList(childModels); requireActivity().runOnUiThread(() -> { @@ -107,66 +131,49 @@ public class SettingMainFragment extends Fragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_setting_main, container, false); + View view = inflater.inflate(R.layout.fragment_setting_main, container, false); - username = view.findViewById(R.id.username); - useradress = view.findViewById(R.id.useradress); + username = view.findViewById(R.id.username); + useradress = view.findViewById(R.id.useradress); - RecyclerView recyclerView = view.findViewById(R.id.childrecyclerview); + RecyclerView recyclerView = view.findViewById(R.id.childrecyclerview); - // Pull-to-refresh(スワイプで更新) - swipeRefreshLayout = view.findViewById(R.id.swipe_refresh_layout); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); + recyclerView.setLayoutManager(layoutManager); + mainAdapter = new SettingAdapter(); + recyclerView.setAdapter(mainAdapter); - recyclerView.setHasFixedSize(true); + // Pull-to-refresh(スワイプで更新) + swipeRefreshLayout = view.findViewById(R.id.swipe_refresh_layout); - RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); - recyclerView.setLayoutManager(layoutManager); + try { -// List child = childData.getChildList().join(); + /* + TODO: + - コールバックの処理を実装 + - 結果に応じてRecyclerViewを更新する + - キャッシュ受け取りの時にjoinでUIスレッドをブロックしないように + - Placeholderの表示? + - エラーハンドリング try catch文 + - onFailed時にそれを通知 + */ - mainAdapter = new SettingAdapter(); - recyclerView.setAdapter(mainAdapter); + updateInfo(); + swipeRefreshLayout.setOnRefreshListener(() ->{ - try { + updateInfo(); - /* - TODO: - - コールバックの処理を実装 - - 結果に応じてRecyclerViewを更新する - - キャッシュ受け取りの時にjoinでUIスレッドをブロックしないように - - Placeholderの表示? - - エラーハンドリング try catch文 - - onFailed時にそれを通知 - */ + }); -// updateParentInfo(); -// updateChildInfo(); - - updateInfo(); - - swipeRefreshLayout.setOnRefreshListener(() ->{ - -// updateParentInfo(); -// -// updateChildInfo(); - - updateInfo(); -// -// swipeRefreshLayout.setRefreshing(false); - - }); - - // username.setText(parent.getName()); - // useradress.setText(parent.getEmail()); - } catch (Exception e) { - - } + } catch (Exception e) { + // + } LayoutInflater inflater1 = requireActivity().getLayoutInflater(); View view1 = inflater1.inflate(R.layout.add_child_list_dialog,null); diff --git a/model/src/main/java/one/nem/kidshift/model/callback/ChildModelCallback.java b/model/src/main/java/one/nem/kidshift/model/callback/ChildModelCallback.java new file mode 100644 index 0000000..a6e622d --- /dev/null +++ b/model/src/main/java/one/nem/kidshift/model/callback/ChildModelCallback.java @@ -0,0 +1,11 @@ +package one.nem.kidshift.model.callback; + +import java.util.List; + +import one.nem.kidshift.model.ChildModel; + +public interface ChildModelCallback { + void onUnchanged(); + void onUpdated(List childModelList); + void onFailed(String message); +} \ No newline at end of file diff --git a/utils/src/main/java/one/nem/kidshift/utils/KSLogger.java b/utils/src/main/java/one/nem/kidshift/utils/KSLogger.java index 5d54822..7d7c62e 100644 --- a/utils/src/main/java/one/nem/kidshift/utils/KSLogger.java +++ b/utils/src/main/java/one/nem/kidshift/utils/KSLogger.java @@ -5,9 +5,6 @@ import java.util.List; import one.nem.kidshift.utils.models.LogModel; public interface KSLogger { - KSLogger getChildLogger(String tag); - KSLogger get(String tag); - KSLogger setTag(String tag); KSLogger addTag(String tag); List getHistory(); void info(String message); diff --git a/utils/src/main/java/one/nem/kidshift/utils/factory/KSLoggerFactory.java b/utils/src/main/java/one/nem/kidshift/utils/factory/KSLoggerFactory.java new file mode 100644 index 0000000..4d036ee --- /dev/null +++ b/utils/src/main/java/one/nem/kidshift/utils/factory/KSLoggerFactory.java @@ -0,0 +1,10 @@ +package one.nem.kidshift.utils.factory; + +import dagger.assisted.AssistedFactory; +import one.nem.kidshift.utils.impl.KSLoggerImpl; + +@AssistedFactory +public interface KSLoggerFactory { + + KSLoggerImpl create(String name); +} diff --git a/utils/src/main/java/one/nem/kidshift/utils/impl/FeatureFlagImpl.java b/utils/src/main/java/one/nem/kidshift/utils/impl/FeatureFlagImpl.java index 632eba9..024f149 100644 --- a/utils/src/main/java/one/nem/kidshift/utils/impl/FeatureFlagImpl.java +++ b/utils/src/main/java/one/nem/kidshift/utils/impl/FeatureFlagImpl.java @@ -11,6 +11,7 @@ import javax.inject.Inject; import dagger.hilt.android.qualifiers.ApplicationContext; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.factory.KSLoggerFactory; import one.nem.kidshift.utils.models.feature.FeatureFlagItemModel; import one.nem.kidshift.utils.FeatureFlag; @@ -40,10 +41,9 @@ public class FeatureFlagImpl implements FeatureFlag { } @Inject - public FeatureFlagImpl(@ApplicationContext Context applicationContext, KSLogger logger) { + public FeatureFlagImpl(@ApplicationContext Context applicationContext, KSLoggerFactory loggerFactory) { this.applicationContext = applicationContext; - this.logger = logger; - this.logger.setTag("FeatureFlagImpl"); + this.logger = loggerFactory.create("FeatureFlag"); this.sharedPreferences = applicationContext.getSharedPreferences("feat_flg", Context.MODE_PRIVATE); init(); } diff --git a/utils/src/main/java/one/nem/kidshift/utils/impl/KSLoggerImpl.java b/utils/src/main/java/one/nem/kidshift/utils/impl/KSLoggerImpl.java index 2413577..ce33eaf 100644 --- a/utils/src/main/java/one/nem/kidshift/utils/impl/KSLoggerImpl.java +++ b/utils/src/main/java/one/nem/kidshift/utils/impl/KSLoggerImpl.java @@ -5,10 +5,13 @@ import static one.nem.kidshift.utils.enums.LogLevelEnum.INFO; import android.util.Log; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.inject.Inject; +import dagger.assisted.Assisted; +import dagger.assisted.AssistedInject; import one.nem.kidshift.utils.KSLogger; import one.nem.kidshift.utils.SharedPrefUtils; import one.nem.kidshift.utils.enums.LogLevelEnum; @@ -21,32 +24,11 @@ public class KSLoggerImpl implements KSLogger { private SharedPrefUtils sharedPrefUtils; - @Inject - public KSLoggerImpl(SharedPrefUtilsFactory sharedPrefUtilsFactory) { - tags.add("UNTAGGED"); - this.sharedPrefUtils = sharedPrefUtilsFactory.create("KSLogger"); - } - - public KSLoggerImpl(String tag) { - tags.add(tag); - } - - @Override - public KSLogger getChildLogger(String tag) { - tags.add(tag); - return this; - } - - @Override - public KSLogger get(String tag) { - return new KSLoggerImpl(tag); - } - - @Override - public KSLogger setTag(String tag) { + @AssistedInject + public KSLoggerImpl(SharedPrefUtilsFactory sharedPrefUtilsFactory, @Assisted String name) { + sharedPrefUtils = sharedPrefUtilsFactory.create("KSLogger"); tags.clear(); - tags.add(tag); - return this; + tags.add(name); } @Override @@ -62,32 +44,32 @@ public class KSLoggerImpl implements KSLogger { @Override public void info(String message) { - log(new LogModel(LogLevelEnum.INFO, new String[]{}, message)); + log(new LogModel(LogLevelEnum.INFO, tags.toArray(new String[0]), message)); } @Override public void warn(String message) { - log(new LogModel(LogLevelEnum.WARN, new String[]{}, message)); + log(new LogModel(LogLevelEnum.WARN, tags.toArray(new String[0]), message)); } @Override public void error(String message) { - log(new LogModel(LogLevelEnum.ERROR, new String[]{}, message)); + log(new LogModel(LogLevelEnum.ERROR, tags.toArray(new String[0]), message)); } @Override public void debug(String message) { - log(new LogModel(LogLevelEnum.DEBUG, new String[]{}, message)); + log(new LogModel(LogLevelEnum.DEBUG, tags.toArray(new String[0]), message)); } @Override public void trace(String message) { - log(new LogModel(LogLevelEnum.TRACE, new String[]{}, message)); + log(new LogModel(LogLevelEnum.TRACE, tags.toArray(new String[0]), message)); } @Override public void fatal(String message) { - log(new LogModel(LogLevelEnum.FATAL, new String[]{}, message)); + log(new LogModel(LogLevelEnum.FATAL, tags.toArray(new String[0]), message)); } private void log(LogModel log) { diff --git a/utils/src/main/java/one/nem/kidshift/utils/modules/KSLoggerModule.java b/utils/src/main/java/one/nem/kidshift/utils/modules/KSLoggerModule.java deleted file mode 100644 index 87261f8..0000000 --- a/utils/src/main/java/one/nem/kidshift/utils/modules/KSLoggerModule.java +++ /dev/null @@ -1,16 +0,0 @@ -package one.nem.kidshift.utils.modules; - -import dagger.Binds; -import dagger.Module; -import dagger.hilt.InstallIn; -import dagger.hilt.components.SingletonComponent; -import one.nem.kidshift.utils.KSLogger; -import one.nem.kidshift.utils.impl.KSLoggerImpl; - -@Module -@InstallIn(SingletonComponent.class) -abstract public class KSLoggerModule { - - @Binds - public abstract KSLogger bindKSLogger(KSLoggerImpl ksLoggerImpl); -}