Merge pull request 'API接続準備(baseUrlをDebugConsoleから設定出来るように)' (#78) from feature/add-api-configure into main
Reviewed-on: #78
This commit is contained in:
commit
f882eb9f67
|
@ -2,8 +2,19 @@ package one.nem.kidshift.data;
|
|||
|
||||
public interface UserSettings {
|
||||
|
||||
interface Task {
|
||||
ApiSetting getApiSetting();
|
||||
TaskSetting getTaskSetting();
|
||||
|
||||
interface ApiSetting {
|
||||
String getApiBaseUrl();
|
||||
void setApiBaseUrl(String url);
|
||||
}
|
||||
|
||||
interface TaskSetting {
|
||||
int getDefaultIconColor();
|
||||
void setDefaultIconColor(int color);
|
||||
String getDefaultIconEmoji();
|
||||
void setDefaultIconEmoji(String emoji);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,19 +2,58 @@ package one.nem.kidshift.data.impl;
|
|||
|
||||
import android.graphics.Color;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.Binds;
|
||||
import one.nem.kidshift.data.UserSettings;
|
||||
|
||||
public class UserSettingsDummyImpl implements UserSettings {
|
||||
|
||||
class Task implements UserSettings.Task {
|
||||
@Inject
|
||||
public UserSettingsDummyImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserSettings.TaskSetting getTaskSetting() {
|
||||
return new TaskSettingImpl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserSettings.ApiSetting getApiSetting() {
|
||||
return new ApiSettingImpl();
|
||||
}
|
||||
|
||||
public class ApiSettingImpl implements UserSettings.ApiSetting {
|
||||
@Override
|
||||
public String getApiBaseUrl() {
|
||||
return "https://kidshift-beta.nem.one/";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApiBaseUrl(String url) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class TaskSettingImpl implements UserSettings.TaskSetting {
|
||||
@Override
|
||||
public int getDefaultIconColor() {
|
||||
return Color.parseColor("#FF0000");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultIconColor(int color) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultIconEmoji() {
|
||||
return "🤔";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultIconEmoji(String emoji) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
package one.nem.kidshift.data.impl;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import one.nem.kidshift.data.UserSettings;
|
||||
import one.nem.kidshift.utils.SharedPrefUtils;
|
||||
import one.nem.kidshift.utils.factory.SharedPrefUtilsFactory;
|
||||
|
||||
public class UserSettingsImpl implements UserSettings {
|
||||
|
||||
SharedPrefUtilsFactory sharedPrefUtilsFactory;
|
||||
|
||||
@Inject
|
||||
public UserSettingsImpl(SharedPrefUtilsFactory sharedPrefUtilsFactory) {
|
||||
this.sharedPrefUtilsFactory = sharedPrefUtilsFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiSetting getApiSetting() {
|
||||
return new ApiSettingImpl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskSetting getTaskSetting() {
|
||||
return new TaskSettingImpl();
|
||||
}
|
||||
|
||||
public class ApiSettingImpl implements UserSettings.ApiSetting {
|
||||
|
||||
transient
|
||||
SharedPrefUtils sharedPrefUtils;
|
||||
|
||||
String apiBaseUrl;
|
||||
|
||||
ApiSettingImpl() {
|
||||
sharedPrefUtils = sharedPrefUtilsFactory.create("user_settings");
|
||||
ApiSettingImpl apiSetting = sharedPrefUtils.getObject("api_setting", ApiSettingImpl.class);
|
||||
// TODO: リフレクションつかって一括でやる?(プロパティ数があまりにも増えるなら?), 三項演算子やめる?, デフォルト値の設定方法を改善する
|
||||
if (apiSetting != null) {
|
||||
apiBaseUrl = apiSetting.apiBaseUrl.isEmpty() ? "https://kidshift-beta.nem.one/" : apiSetting.apiBaseUrl;
|
||||
} else {
|
||||
apiBaseUrl = "https://kidshift-beta.nem.one/";
|
||||
}
|
||||
}
|
||||
|
||||
private void save() {
|
||||
sharedPrefUtils.saveObject("api_setting", this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getApiBaseUrl() {
|
||||
return apiBaseUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApiBaseUrl(String url) {
|
||||
apiBaseUrl = url;
|
||||
save();
|
||||
}
|
||||
}
|
||||
|
||||
public class TaskSettingImpl implements UserSettings.TaskSetting {
|
||||
|
||||
transient
|
||||
SharedPrefUtils sharedPrefUtils;
|
||||
|
||||
int defaultIconColor;
|
||||
|
||||
String defaultIconEmoji;
|
||||
|
||||
TaskSettingImpl() {
|
||||
sharedPrefUtils = sharedPrefUtilsFactory.create("user_settings");
|
||||
TaskSettingImpl taskSetting = sharedPrefUtils.getObject("task_setting", TaskSettingImpl.class);
|
||||
if (taskSetting != null) {
|
||||
defaultIconColor = taskSetting.getDefaultIconColor() == 0 ? 0 : taskSetting.getDefaultIconColor();
|
||||
defaultIconEmoji = taskSetting.getDefaultIconEmoji().isEmpty() ? "" : taskSetting.getDefaultIconEmoji();
|
||||
} else {
|
||||
defaultIconColor = 0;
|
||||
defaultIconEmoji = "";
|
||||
}
|
||||
}
|
||||
|
||||
private void save() {
|
||||
sharedPrefUtils.saveObject("task_setting", this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDefaultIconColor() {
|
||||
return defaultIconColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultIconColor(int color) {
|
||||
defaultIconColor = color;
|
||||
save();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultIconEmoji() {
|
||||
return defaultIconEmoji;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultIconEmoji(String emoji) {
|
||||
defaultIconEmoji = emoji;
|
||||
save();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -4,13 +4,18 @@ import dagger.Binds;
|
|||
import dagger.Module;
|
||||
import dagger.hilt.InstallIn;
|
||||
import dagger.hilt.android.components.FragmentComponent;
|
||||
import dagger.hilt.components.SingletonComponent;
|
||||
import one.nem.kidshift.data.UserSettings;
|
||||
import one.nem.kidshift.data.impl.UserSettingsDummyImpl;
|
||||
import one.nem.kidshift.data.impl.UserSettingsImpl;
|
||||
|
||||
@Module
|
||||
@InstallIn(FragmentComponent.class)
|
||||
@InstallIn(SingletonComponent.class)
|
||||
abstract public class UserSettingsDummyModule {
|
||||
|
||||
// @Binds
|
||||
// abstract UserSettings bindUserSettings(UserSettingsDummyImpl userSettingsDummyImpl);
|
||||
|
||||
@Binds
|
||||
abstract UserSettings bindUserSettings(UserSettingsDummyImpl userSettingsDummyImpl);
|
||||
public abstract UserSettings bindUserSettings(UserSettingsImpl userSettingsImpl);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package one.nem.kidshift.feature.debug;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
@ -10,6 +12,7 @@ import dagger.hilt.EntryPoint;
|
|||
import dagger.hilt.InstallIn;
|
||||
import dagger.hilt.android.AndroidEntryPoint;
|
||||
import dagger.hilt.android.components.FragmentComponent;
|
||||
import one.nem.kidshift.data.UserSettings;
|
||||
import one.nem.kidshift.utils.FeatureFlag;
|
||||
import one.nem.kidshift.utils.KSLogger;
|
||||
import one.nem.kidshift.utils.models.LogModel;
|
||||
|
@ -20,12 +23,16 @@ public class DebugCommandProcessor {
|
|||
KSLogger ksLogger;
|
||||
FeatureFlag featureFlag;
|
||||
|
||||
UserSettings userSettings;
|
||||
|
||||
public DebugCommandProcessor(
|
||||
KSLogger ksLogger,
|
||||
FeatureFlag featureFlag
|
||||
FeatureFlag featureFlag,
|
||||
UserSettings userSettings
|
||||
) {
|
||||
this.ksLogger = ksLogger;
|
||||
this.featureFlag = featureFlag;
|
||||
this.userSettings = userSettings;
|
||||
}
|
||||
|
||||
public String execute(String command) {
|
||||
|
@ -52,11 +59,64 @@ public class DebugCommandProcessor {
|
|||
return executeLog(commandArray);
|
||||
case "flag":
|
||||
return executeFlag(commandArray);
|
||||
case "setting":
|
||||
return executeSetting(commandArray);
|
||||
default:
|
||||
throw new InvalidCommandException();
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: リフレクション処理切り出し, 複数の引数に対応, String以外の引数に対応
|
||||
private String executeSetting(String[] commandArray) {
|
||||
commandArray = shiftArray(commandArray);
|
||||
Class<?> settingClazz;
|
||||
switch (commandArray[0]) {
|
||||
case "get":
|
||||
commandArray = shiftArray(commandArray);
|
||||
// リフレクションで取得
|
||||
try {
|
||||
// userSettingsのgetterでsettingクラスを取得
|
||||
Method method = userSettings.getClass().getMethod("get" + commandArray[0]);
|
||||
Object setting = method.invoke(userSettings);
|
||||
|
||||
//settingクラスのgetterで値を取得
|
||||
Method settingMethod = setting.getClass().getMethod("get" + commandArray[1]);
|
||||
return settingMethod.invoke(setting).toString();
|
||||
} catch (NoSuchMethodException e) {
|
||||
return "Method" + commandArray[0] + " not found \n" + e.getMessage();
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException e) {
|
||||
return "Method" + commandArray[0] + " not accessible \n" + e.getMessage();
|
||||
} catch (Exception e) {
|
||||
return "Something went wrong! \n" + e.getMessage();
|
||||
}
|
||||
case "set":
|
||||
commandArray = shiftArray(commandArray);
|
||||
// リフレクションで取得
|
||||
try {
|
||||
// userSettingsのgetterでsettingクラスを取得
|
||||
Method method = userSettings.getClass().getMethod("get" + commandArray[0]);
|
||||
Object setting = method.invoke(userSettings);
|
||||
|
||||
//settingクラスのsetterで値を設定
|
||||
Method settingMethod = setting.getClass().getMethod("set" + commandArray[1], String.class); // TODO: String以外の型に対応
|
||||
settingMethod.invoke(setting, commandArray[2]);
|
||||
return "Setting set!";
|
||||
} catch (NoSuchMethodException e) {
|
||||
return "Method" + commandArray[0] + " not found \n" + e.getMessage();
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException e) {
|
||||
return "Method" + commandArray[0] + " not accessible \n" + e.getMessage();
|
||||
} catch (Exception e) {
|
||||
return "Something went wrong! \n" + e.getMessage();
|
||||
}
|
||||
default:
|
||||
return "TODO";
|
||||
}
|
||||
}
|
||||
|
||||
private String executeLog(String[] commandArray) {
|
||||
commandArray = shiftArray(commandArray);
|
||||
switch (commandArray[0]) {
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.util.List;
|
|||
import javax.inject.Inject;
|
||||
|
||||
import dagger.hilt.android.AndroidEntryPoint;
|
||||
import one.nem.kidshift.data.UserSettings;
|
||||
import one.nem.kidshift.feature.debug.adapter.DebugCommandListItemAdapter;
|
||||
import one.nem.kidshift.feature.debug.model.DebugCommandItemModel;
|
||||
import one.nem.kidshift.utils.FeatureFlag;
|
||||
|
@ -29,6 +30,9 @@ public class DebugDebugConsoleFragment extends Fragment {
|
|||
@Inject
|
||||
FeatureFlag featureFlag;
|
||||
|
||||
@Inject
|
||||
UserSettings userSettings;
|
||||
|
||||
private final List<DebugCommandItemModel> debugCommandItemModels = new ArrayList<>();
|
||||
DebugCommandListItemAdapter debugCommandItemAdapter;
|
||||
|
||||
|
@ -59,7 +63,7 @@ public class DebugDebugConsoleFragment extends Fragment {
|
|||
TextView debugCommandInput = view.findViewById(R.id.debugCommandEditText);
|
||||
view.findViewById(R.id.debugCommandExecuteButton).setOnClickListener(v -> {
|
||||
DebugCommandProcessor debugCommandProcessor = new DebugCommandProcessor(
|
||||
ksLogger, featureFlag);
|
||||
ksLogger, featureFlag, userSettings);
|
||||
debugCommandItemModels.add(
|
||||
new DebugCommandItemModel(
|
||||
debugCommandInput.getText().toString(),
|
||||
|
|
Loading…
Reference in New Issue
Block a user