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 759aad6..e997a98 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 @@ -9,17 +9,22 @@ import dagger.hilt.EntryPoint; import dagger.hilt.InstallIn; import dagger.hilt.android.AndroidEntryPoint; import dagger.hilt.android.components.FragmentComponent; +import one.nem.kidshift.utils.FeatureFlag; import one.nem.kidshift.utils.KSLogger; import one.nem.kidshift.utils.models.LogModel; +import one.nem.kidshift.utils.models.feature.FeatureFlagItemModel; public class DebugCommandProcessor { KSLogger ksLogger; + FeatureFlag featureFlag; public DebugCommandProcessor( - KSLogger ksLogger + KSLogger ksLogger, + FeatureFlag featureFlag ) { this.ksLogger = ksLogger; + this.featureFlag = featureFlag; } public String execute(String command) { @@ -44,6 +49,8 @@ public class DebugCommandProcessor { return executeEcho(commandArray); case "log": return executeLog(commandArray); + case "flag": + return executeFlag(commandArray); default: throw new InvalidCommandException(); } @@ -93,6 +100,64 @@ public class DebugCommandProcessor { } } + private String executeFlag(String[] commandArray) { + switch (commandArray[1]) { + case "get": + if (commandArray.length == 3) { + FeatureFlagItemModel featureFlagItemModel = featureFlag.getFeatureFlagMap().get(commandArray[2]); + return makeFeatureFlagResponse(featureFlagItemModel); + } else { + if (commandArray[2].equals("all")) { + StringBuilder featureFlagString = new StringBuilder(); + for (FeatureFlagItemModel featureFlagItemModel : featureFlag.getFeatureFlagMap().values()) { + featureFlagString.append(makeFeatureFlagResponse(featureFlagItemModel)); + featureFlagString.append("\n"); + } + return featureFlagString.toString(); + } else { + return "TODO"; + } + } + case "set": + if (commandArray.length == 5) { + try { + boolean value = Boolean.parseBoolean(commandArray[4]); + featureFlag.getFeatureFlagMap().get(commandArray[2]).setValue(value); + } catch (IllegalArgumentException e) { + return e.getMessage(); + } catch (NullPointerException e) { + return "Feature Flag not found"; + } catch (Exception e) { + return "Something went wrong! \n" + e.getMessage(); + } + return "Success"; + } else { + return "TODO"; + } + case "reset": + if (commandArray.length == 3) { + featureFlag.getFeatureFlagMap().get(commandArray[2]).setValue(featureFlag.getFeatureFlagMap().get(commandArray[2]).getDefaultValue()); + return "Success"; + } else { + return "TODO"; + } + default: + // debug + if (this.featureFlag == null) { + return "Feature Flag is null"; + } else { + return "Feature Flag is not null"; + } + } + } + + private String makeFeatureFlagResponse(FeatureFlagItemModel featureFlagItemModel) { + return "Key: " + featureFlagItemModel.getKey() + "\n" + + "\tValue: " + featureFlagItemModel.getValue() + "\n" + + "\tDefault Value: " + featureFlagItemModel.getDefaultValue() + "\n" + + "\tIs Override Allowed: " + featureFlagItemModel.getIsOverrideAllowed(); + } + private String executeEcho(String[] commandArray) { String[] echoArray = Arrays.copyOfRange(commandArray, 1, commandArray.length); return String.join(" ", echoArray); 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 6b076a3..446a48c 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 @@ -19,6 +19,7 @@ import dagger.hilt.android.AndroidEntryPoint; import one.nem.kidshift.feature.debug.adapter.DebugCommandListItemAdapter; import one.nem.kidshift.feature.debug.adapter.DebugMenuListItemAdapter; import one.nem.kidshift.feature.debug.model.DebugCommandItemModel; +import one.nem.kidshift.utils.FeatureFlag; import one.nem.kidshift.utils.KSLogger; /** @@ -32,6 +33,9 @@ public class DebugDebugConsoleFragment extends Fragment { @Inject KSLogger ksLogger; + @Inject + FeatureFlag featureFlag; + private final List debugCommandItemModels = new ArrayList<>(); DebugCommandListItemAdapter debugCommandItemAdapter; @@ -98,7 +102,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); + ksLogger, featureFlag); debugCommandItemModels.add( new DebugCommandItemModel( debugCommandInput.getText().toString(), 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 26748fa..3dd1eb4 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 @@ -67,6 +67,7 @@ public class FeatureFlagImpl implements FeatureFlag { setFlag("isBaseEnabled", true, false); setFlag("isBetaEnabled", false, false); setFlag("isDevelopEnabled", false, false); + setFlag("overrideTest", false, true); } private void initBeta() { // 上書き