Compare commits

...
Author SHA1 Message Date
r-ca b4135f9ec0 リファクタリング 2024-01-21 20:37:04 +09:00
r-ca a62d748c72 ログ追加 2024-01-21 20:35:20 +09:00
r-ca ea0b1a7665 初回起動の場合に初期化処理としてデフォルト値を書き込むように 2024-01-21 20:34:47 +09:00
r-ca 4cfc87a40b 初回起動フラグ追加 2024-01-21 20:32:29 +09:00
r-ca 40a0d08a1f デバッグメニューを無効に 2024-01-21 20:28:56 +09:00
r-ca fd850651b3 実装を単純にした 2024-01-21 20:28:33 +09:00
r-ca ec633a7238 FeatureSwitch実装仮 2024-01-21 20:16:38 +09:00
r-ca e10207959b Merge branch 'develop' into feature/switch 2024-01-21 19:53:55 +09:00
ろむねこ c46ec70d97 Merge pull request #88 from lacerta-doc/fix_versions
compileSDKバージョンを34にアップデート
2024-01-21 19:53:25 +09:00
r-ca 676a0e2772 WIP 2024-01-21 19:45:02 +09:00
r-ca d9d22198d5 FeatureSwitch実装WIP 2024-01-21 19:18:43 +09:00
r-ca 2dc3407217 FeatureSwitchのOverrideができるように 2024-01-21 19:11:25 +09:00
r-ca d40f61928c 依存関係追加 2024-01-21 19:10:03 +09:00
r-ca 19ff824591 Enum追加 2024-01-21 19:09:37 +09:00
r-ca ec7adbe331 SharedPrefUtilsメソッド追加 2024-01-21 19:07:33 +09:00
r-ca af626f4dc0 依存関係追加 2024-01-21 19:04:01 +09:00
r-ca acea8ba27d Revert "依存関係追加"
This reverts commit 8f1849591d.
2024-01-21 19:03:45 +09:00
r-ca 8f1849591d 依存関係追加 2024-01-21 19:02:33 +09:00
r-ca 882207682f FeatureSwitchクラス作成 WIP 2024-01-21 18:56:15 +09:00
10 changed files with 140 additions and 8 deletions

No files matched your search

-1
View File
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
+4
View File
@@ -78,4 +78,8 @@ dependencies {
implementation project(':data')
implementation project(':shared:ui')
implementation project(':model')
implementation project(':utils')
}
@@ -10,31 +10,45 @@ import androidx.navigation.ui.NavigationUI;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import one.nem.lacerta.model.pref.FeatureSwitchOverride;
import one.nem.lacerta.utils.FeatureSwitch;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.io.NotActiveException;
import dagger.hilt.android.AndroidEntryPoint;
import one.nem.lacerta.utils.repository.SharedPrefUtils;
import javax.inject.Inject;
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
SharedPrefUtils sharedPrefUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav);
// Initialize app
if (sharedPrefUtils.getIsFirstLaunch()) initializeApp();
// Init navigation
try {
FragmentManager supportFragmentManager = getSupportFragmentManager();
NavHostFragment navHostFragment = (NavHostFragment) supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
assert navHostFragment != null;
NavController navController = navHostFragment.getNavController();
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_nav);
NavigationUI.setupWithNavController(bottomNavigationView, navController);
}
catch (Exception e) {
@@ -44,10 +58,30 @@ public class MainActivity extends AppCompatActivity {
finish(); // Exit app
}
// Apply feature switch
applyFeatureSwitch(bottomNavigationView, FeatureSwitchOverride.ENABLE_SEARCH, FeatureSwitch.FeatureMaster.enableSearch, one.nem.lacerta.feature.search.R.id.feature_search_navigation);
applyFeatureSwitch(bottomNavigationView, FeatureSwitchOverride.ENABLE_DEBUG_MENU, FeatureSwitch.FeatureMaster.enableDebugMenu, one.nem.lacerta.feature.debug.R.id.feature_debug_navigation);
// Set navigation bar color
getWindow().setNavigationBarColor(ContextCompat.getColor(this, one.nem.lacerta.shared.ui.R.color.colorSecondaryContainer));
// Set status bar color
getWindow().setStatusBarColor(ContextCompat.getColor(this, one.nem.lacerta.shared.ui.R.color.colorSurface));
}
private void initializeApp() {
Log.d("Init", "Initializing app");
// Set feature switch override to default value
sharedPrefUtils.setFeatureSwitchOverride(FeatureSwitchOverride.ENABLE_SEARCH, FeatureSwitch.FeatureMaster.enableSearch);
sharedPrefUtils.setFeatureSwitchOverride(FeatureSwitchOverride.ENABLE_DEBUG_MENU, FeatureSwitch.FeatureMaster.enableDebugMenu);
// Set isFirstLaunch to false
sharedPrefUtils.setIsFirstLaunch(false);
}
private void applyFeatureSwitch(BottomNavigationView bottomNavigationView, FeatureSwitchOverride featureSwitchOverride, boolean defaultValue, int menuId) {
boolean isEnabled = FeatureSwitch.Meta.canOverrideSwitch ? sharedPrefUtils.getFeatureSwitchOverride(featureSwitchOverride) : defaultValue;
if (!isEnabled) bottomNavigationView.getMenu().removeItem(menuId);
}
}
+2 -3
View File
@@ -18,7 +18,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/main_nav"
tools:layout="@layout/fragment_debug_menu_container" />
tools:layout="@layout/fragment_home_top" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav"
@@ -31,7 +31,6 @@
app:labelVisibilityMode="selected"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_nav_menu"/>
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
+1 -1
View File
@@ -19,7 +19,7 @@
<item
android:id="@id/feature_debug_navigation"
android:icon="@drawable/developer_mode_24px"
android:title="@string/debug_menu_title"/>
android:title="@string/debug_menu_title" />
<item
android:id="@id/feature_setting_navigation"
+1 -1
View File
@@ -2,7 +2,7 @@
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/app_main_nav"
app:startDestination="@id/feature_debug_navigation">
app:startDestination="@id/feature_home_navigation">
<include app:graph="@navigation/feature_debug_navigation" />
@@ -0,0 +1,30 @@
package one.nem.lacerta.model.pref;
public enum FeatureSwitchOverride {
ENABLE_DEBUG_MENU("enableDebugMenu"),
ENABLE_SEARCH("enableSearch"),
SHOW_DISPLAY_MENU("showDisplayMenu"),
SHOW_DATA_MENU("showDataMenu"),
SHOW_SCAN_MENU("showScanMenu");
private final String key;
FeatureSwitchOverride(String key) {
this.key = key;
}
public String getKey() {
return key;
}
public static FeatureSwitchOverride fromKey(String key) {
for (FeatureSwitchOverride value : values()) {
if (value.getKey().equals(key)) {
return value;
}
}
return null;
}
}
@@ -0,0 +1,19 @@
package one.nem.lacerta.utils;
public class FeatureSwitch {
public static class Meta {
public static boolean canOverrideSwitch = true;
}
public static class FeatureMaster {
public static boolean enableSearch = true;
public static boolean enableDebugMenu = false;
}
public static class Setting {
public static boolean showDisplayMenu = false;
public static boolean showDataMenu = false;
public static boolean showScanMenu = false;
}
}
@@ -4,13 +4,17 @@ package one.nem.lacerta.utils.impl;
import android.content.Context;
import android.content.SharedPreferences;
import javax.inject.Inject;
import dagger.hilt.android.qualifiers.ApplicationContext;
import one.nem.lacerta.model.pref.FeatureSwitchOverride;
import one.nem.lacerta.utils.repository.SharedPrefUtils;
public class SharedPrefUtilsImpl implements SharedPrefUtils{
private final Context applicationContext;
@Inject
public SharedPrefUtilsImpl(@ApplicationContext Context applicationContext) {
this.applicationContext = applicationContext;
}
@@ -26,4 +30,34 @@ public class SharedPrefUtilsImpl implements SharedPrefUtils{
// Editorの取得
return applicationContext.getSharedPreferences(name, Context.MODE_PRIVATE).edit();
}
@Override
public SharedPreferences getSharedPreferences(String name) {
return applicationContext.getSharedPreferences(name, Context.MODE_PRIVATE);
}
@Override
public SharedPreferences getSharedPreferences() {
return applicationContext.getSharedPreferences("common", Context.MODE_PRIVATE); // TODO-rca: 決め打ちやめる?
}
@Override
public boolean getFeatureSwitchOverride(FeatureSwitchOverride featureSwitchOverride) {
return getSharedPreferences().getBoolean(featureSwitchOverride.getKey(), false);
}
@Override
public void setFeatureSwitchOverride(FeatureSwitchOverride featureSwitchOverride, boolean value) {
getEditor().putBoolean(featureSwitchOverride.getKey(), value).apply();
}
@Override
public boolean getIsFirstLaunch() {
return getSharedPreferences().getBoolean("isFirstLaunch", true);
}
@Override
public void setIsFirstLaunch(boolean value) {
getEditor().putBoolean("isFirstLaunch", value).apply();
}
}
@@ -2,6 +2,8 @@ package one.nem.lacerta.utils.repository;
import android.content.SharedPreferences;
import one.nem.lacerta.model.pref.FeatureSwitchOverride;
public interface SharedPrefUtils {
// Shared preferences editorの取得
@@ -10,4 +12,15 @@ public interface SharedPrefUtils {
// TODO-rca: 名称をenumで管理する?
SharedPreferences.Editor getEditor(String name);
SharedPreferences getSharedPreferences(String name);
SharedPreferences getSharedPreferences();
boolean getFeatureSwitchOverride(FeatureSwitchOverride featureSwitchOverride);
void setFeatureSwitchOverride(FeatureSwitchOverride featureSwitchOverride, boolean value);
boolean getIsFirstLaunch();
void setIsFirstLaunch(boolean value);
}