diff --git a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugCommandProcessor.java b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugCommandProcessor.java index 7535d89..d34b5f2 100644 --- a/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugCommandProcessor.java +++ b/feature/debug/src/main/java/one/nem/kidshift/feature/debug/DebugCommandProcessor.java @@ -58,9 +58,11 @@ public class DebugCommandProcessor { } private String executeLog(String[] commandArray) { - switch (commandArray[1]) { + commandArray = shiftArray(commandArray); + switch (commandArray[0]) { case "get": - switch (commandArray[2]) { + commandArray = shiftArray(commandArray); + switch (commandArray[0]) { case "all": List logs = ksLogger.getHistory(); StringBuilder logString = new StringBuilder(); @@ -73,8 +75,9 @@ public class DebugCommandProcessor { return "TODO"; } case "insert": - String[] logArray = Arrays.copyOfRange(commandArray, 3, commandArray.length); - switch (commandArray[2]) { + commandArray = shiftArray(commandArray); + String[] logArray = Arrays.copyOfRange(commandArray, 1, commandArray.length); + switch (commandArray[0]) { case "info": ksLogger.info(String.join(" ", logArray)); return "Log inserted"; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 201eeef..8278c18 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,6 @@ [versions] agp = "8.3.2" +gson = "2.11.0" junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" @@ -10,6 +11,7 @@ constraintlayout = "2.1.4" nav = "2.7.7" [libraries] +gson = { module = "com.google.code.gson:gson", version.ref = "gson" } junit = { group = "junit", name = "junit", version.ref = "junit" } ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } diff --git a/utils/build.gradle b/utils/build.gradle index eeb2026..6b146d9 100644 --- a/utils/build.gradle +++ b/utils/build.gradle @@ -37,4 +37,7 @@ dependencies { // Hilt (DI) implementation libs.com.google.dagger.hilt.android annotationProcessor libs.com.google.dagger.hilt.compiler + + // Gson + implementation libs.gson } \ No newline at end of file diff --git a/utils/src/main/java/one/nem/kidshift/utils/SharedPrefUtils.java b/utils/src/main/java/one/nem/kidshift/utils/SharedPrefUtils.java new file mode 100644 index 0000000..f042c0f --- /dev/null +++ b/utils/src/main/java/one/nem/kidshift/utils/SharedPrefUtils.java @@ -0,0 +1,18 @@ +package one.nem.kidshift.utils; + +import android.content.SharedPreferences; + +import java.util.List; + +public interface SharedPrefUtils { + + // Single + String saveObject(String key, T object); + String saveObject(T object); // auto generate key + T getObject(String key, Class clazz); + List getObjects(Class clazz); + + // Common + void reset(); + void remove(String key); +} diff --git a/utils/src/main/java/one/nem/kidshift/utils/factory/SharedPrefUtilsFactory.java b/utils/src/main/java/one/nem/kidshift/utils/factory/SharedPrefUtilsFactory.java new file mode 100644 index 0000000..85bc2ab --- /dev/null +++ b/utils/src/main/java/one/nem/kidshift/utils/factory/SharedPrefUtilsFactory.java @@ -0,0 +1,9 @@ +package one.nem.kidshift.utils.factory; + +import dagger.assisted.AssistedFactory; +import one.nem.kidshift.utils.impl.SharedPrefUtilsImpl; + +@AssistedFactory +public interface SharedPrefUtilsFactory { + SharedPrefUtilsImpl create(String name); +} 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 5d07bf1..2413577 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 @@ -10,18 +10,21 @@ import java.util.List; import javax.inject.Inject; import one.nem.kidshift.utils.KSLogger; +import one.nem.kidshift.utils.SharedPrefUtils; import one.nem.kidshift.utils.enums.LogLevelEnum; +import one.nem.kidshift.utils.factory.SharedPrefUtilsFactory; import one.nem.kidshift.utils.models.LogModel; public class KSLoggerImpl implements KSLogger { - private ArrayList logs = new ArrayList(); - private ArrayList tags = new ArrayList(); + private SharedPrefUtils sharedPrefUtils; + @Inject - public KSLoggerImpl() { + public KSLoggerImpl(SharedPrefUtilsFactory sharedPrefUtilsFactory) { tags.add("UNTAGGED"); + this.sharedPrefUtils = sharedPrefUtilsFactory.create("KSLogger"); } public KSLoggerImpl(String tag) { @@ -54,7 +57,7 @@ public class KSLoggerImpl implements KSLogger { @Override public List getHistory() { - return logs; + return sharedPrefUtils.getObjects(LogModel.class); } @Override @@ -93,7 +96,7 @@ public class KSLoggerImpl implements KSLogger { } private void addLog(LogModel log) { - logs.add(log); + sharedPrefUtils.saveObject(log); } private void outputLog(LogModel log) { diff --git a/utils/src/main/java/one/nem/kidshift/utils/impl/SharedPrefUtilsImpl.java b/utils/src/main/java/one/nem/kidshift/utils/impl/SharedPrefUtilsImpl.java new file mode 100644 index 0000000..c75c2d6 --- /dev/null +++ b/utils/src/main/java/one/nem/kidshift/utils/impl/SharedPrefUtilsImpl.java @@ -0,0 +1,77 @@ +package one.nem.kidshift.utils.impl; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.List; + +import dagger.assisted.Assisted; +import dagger.assisted.AssistedInject; +import dagger.hilt.android.qualifiers.ApplicationContext; +import one.nem.kidshift.utils.SharedPrefUtils; + +public class SharedPrefUtilsImpl implements SharedPrefUtils { + + private final Context applicationContext; + private final String name; + private final Gson gson; + + private SharedPreferences sharedPreferences; + private SharedPreferences.Editor editor; + + @AssistedInject + public SharedPrefUtilsImpl(@ApplicationContext Context applicationContext, @Assisted String name) { + this.applicationContext = applicationContext; + this.name = name; + this.gson = new Gson(); + + // Get the shared preferences + sharedPreferences = applicationContext.getSharedPreferences(name, Context.MODE_PRIVATE); + editor = sharedPreferences.edit(); + } + + + @Override + public String saveObject(String key, T object) { + String json = gson.toJson(object); + editor.putString(key, json).apply(); + return key; + } + + @Override + public String saveObject(T object) { + String key = String.valueOf(sharedPreferences.getAll().size()); + return saveObject(key, object); + } + + @Override + public T getObject(String key, Class clazz) { + String json = sharedPreferences.getString(key, null); + return gson.fromJson(json, clazz); + } + + @Override + public List getObjects(Class clazz) { + // SharedPreferenceの中身を全て取得 + List list = new ArrayList<>(); + for (String key : sharedPreferences.getAll().keySet()) { + String json = sharedPreferences.getString(key, null); + T object = gson.fromJson(json, clazz); + list.add(object); + } + return list; + } + + @Override + public void reset() { + editor.clear().apply(); + } + + @Override + public void remove(String key) { + editor.remove(key).apply(); + } +}