mirror of
https://github.com/lacerta-doc/Lacerta.git
synced 2024-11-23 00:13:16 +00:00
commit
95d808dc75
|
@ -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">
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
19
utils/src/main/java/one/nem/lacerta/utils/FeatureSwitch.java
Normal file
19
utils/src/main/java/one/nem/lacerta/utils/FeatureSwitch.java
Normal file
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user