diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/LauncherActivity.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/LauncherActivity.java index da57832..fc69c3d 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/LauncherActivity.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/LauncherActivity.java @@ -15,6 +15,7 @@ import androidx.core.content.ContextCompat; import com.google.android.material.bottomnavigation.BottomNavigationView; +import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.dialogs.PermissionsRequestDialog; import static android.content.pm.PackageManager.PERMISSION_GRANTED; @@ -23,6 +24,7 @@ public class LauncherActivity extends AppCompatActivity { private static final int REQUEST_WRITE_PERMISSION = 70; private static final String TAG = "LauncherActivity"; private static final long timerDelay = 2_000; + private static final long timerQuickDelay = 250; // Give LauncherActivity enough time to do first paint private static final long timerDelayAfterPermissionRequest = 500; @Override @@ -45,7 +47,15 @@ public class LauncherActivity extends AppCompatActivity { }); if (havePermissions()) { - startTimer(timerDelay); + if (Backend.instance() == null) { + new Backend(); + } + + if (Backend.instance().getSettings().mobileDisableLauncherDelay) { + startTimer(timerQuickDelay); + } else { + startTimer(timerDelay); + } } else { new PermissionsRequestDialog().show(getSupportFragmentManager(), null); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java index 16de1f0..bd9e1b5 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java @@ -5,6 +5,7 @@ import android.content.IntentFilter; import android.os.Build; import android.os.Bundle; import android.util.Log; +import android.view.View; import androidx.appcompat.app.AppCompatActivity; import androidx.navigation.NavController; @@ -13,6 +14,7 @@ import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.bottomnavigation.LabelVisibilityMode; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.backend.TAC; @@ -45,6 +47,10 @@ public class MainActivity extends AppCompatActivity { Backend.instance().applicationContext = getApplicationContext(); + if (Backend.instance().getSettings().mobileShowNavigationLabels) { + navView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED); + } + // Auto start TACNET server if allowed and device model contains AUTO_START_MODEL if (TAC.allowAutoServerStart() && Backend.instance().getServer() == null) { Log.i(TAG, "Detected " + Build.MANUFACTURER + " " + Build.MODEL + " (" + Build.HARDWARE + "), starting TACNET Server Service..."); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java index 7de3ed1..cc5a578 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java @@ -327,7 +327,7 @@ public class Backend { } public void writeDefaultSettings() { - settings = new Settings(TACNET.DEFAULT_HOSTNAME, TACNET.DEFAULT_PORT, ""); + settings = new Settings(TACNET.DEFAULT_HOSTNAME, TACNET.DEFAULT_PORT, "", false, false, false); saveSettings(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Settings.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Settings.java index b093e73..9a0d6c5 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Settings.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Settings.java @@ -3,10 +3,16 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend; public class Settings { public String hostname, config; public int port; + public boolean mobileShowNavigationLabels, mobileDisableLauncherDelay, mobileStartServerAtBoot; - public Settings(String hostname, int port, String config) { + public Settings(String hostname, int port, String config, boolean mobileShowNavigationLabels, + boolean mobileDisableLauncherDelay, boolean mobileStartServerAtBoot) { this.hostname = hostname; this.port = port; this.config = config; + + this.mobileShowNavigationLabels = mobileShowNavigationLabels; + this.mobileDisableLauncherDelay = mobileDisableLauncherDelay; + this.mobileStartServerAtBoot = mobileStartServerAtBoot; } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TAC.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TAC.java index 632b410..8a91054 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TAC.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TAC.java @@ -20,7 +20,8 @@ public class TAC { static public boolean allowAutoServerStart() { return !TAC.BUILD_COMPETITION_MODE && - TAC.BUILD_AUTO_START && - Build.MODEL.toLowerCase().contains(TAC.BUILD_AUTO_START_MODEL); + ((TAC.BUILD_AUTO_START && + Build.MODEL.toLowerCase().contains(TAC.BUILD_AUTO_START_MODEL)) || + (Backend.instance() != null && Backend.instance().getSettings().mobileStartServerAtBoot)); } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsDeserializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsDeserializer.java index 9406c46..d4e1f5c 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsDeserializer.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsDeserializer.java @@ -16,10 +16,25 @@ public class SettingsDeserializer implements JsonDeserializer { JsonObject jsonObject = json.getAsJsonObject(); JsonObject data = jsonObject.get("data").getAsJsonObject(); + /* Upgrade Settings */ + if (data.get("mobile_show_navigation_labels") == null) { + data.addProperty("mobile_show_navigation_labels", false); + } + if (data.get("mobile_disable_launcher_delay") == null) { + data.addProperty("mobile_disable_launcher_delay", false); + } + if (data.get("mobile_start_server_at_boot") == null) { + data.addProperty("mobile_start_server_at_boot", false); + } + return new Settings( data.get("hostname").getAsString(), data.get("port").getAsInt(), - data.get("config").getAsString() + data.get("config").getAsString(), + + data.get("mobile_show_navigation_labels").getAsBoolean(), + data.get("mobile_disable_launcher_delay").getAsBoolean(), + data.get("mobile_start_server_at_boot").getAsBoolean() ); } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsSerializer.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsSerializer.java index 9a10bb8..de59b41 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsSerializer.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/serializers/SettingsSerializer.java @@ -22,6 +22,10 @@ public class SettingsSerializer implements JsonSerializer { result.add("port", new JsonPrimitive(settings.port)); result.add("config", new JsonPrimitive(settings.config)); + result.add("mobile_show_navigation_labels", new JsonPrimitive(settings.mobileShowNavigationLabels)); + result.add("mobile_disable_launcher_delay", new JsonPrimitive(settings.mobileDisableLauncherDelay)); + result.add("mobile_start_server_at_boot", new JsonPrimitive(settings.mobileStartServerAtBoot)); + container.add("data", result); return container; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java index 1afdcbf..6c9c45c 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/SettingsFragment.java @@ -5,14 +5,17 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.Switch; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; import androidx.navigation.Navigation; +import com.google.android.material.bottomnavigation.BottomNavigationView; +import com.google.android.material.bottomnavigation.LabelVisibilityMode; + import org.timecrafters.TimeCraftersConfigurationTool.R; +import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; public class SettingsFragment extends TimeCraftersFragment { @@ -22,6 +25,11 @@ public class SettingsFragment extends TimeCraftersFragment { final View root = inflater.inflate(R.layout.fragment_settings, container, false); final Button managePresets = root.findViewById(R.id.manage_presets); final Button manageConfigurations = root.findViewById(R.id.manage_configurations); + final Switch showNavigationLabels = root.findViewById(R.id.show_navigation_labels); + final Switch disableLauncherDelay = root.findViewById(R.id.disable_launcher_delay); + final Switch startServerAtBoot = root.findViewById(R.id.start_server_at_boot); + + final BottomNavigationView navView = getActivity().findViewById(R.id.nav_view); managePresets.setOnClickListener(new View.OnClickListener() { @Override @@ -37,6 +45,51 @@ public class SettingsFragment extends TimeCraftersFragment { } }); + showNavigationLabels.setChecked(Backend.instance().getSettings().mobileShowNavigationLabels); + styleSwitch(showNavigationLabels, Backend.instance().getSettings().mobileShowNavigationLabels); + + disableLauncherDelay.setChecked(Backend.instance().getSettings().mobileDisableLauncherDelay); + styleSwitch(disableLauncherDelay, Backend.instance().getSettings().mobileDisableLauncherDelay); + + startServerAtBoot.setChecked(Backend.instance().getSettings().mobileStartServerAtBoot); + styleSwitch(startServerAtBoot, Backend.instance().getSettings().mobileStartServerAtBoot); + + showNavigationLabels.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Backend.instance().getSettings().mobileShowNavigationLabels = isChecked; + Backend.instance().saveSettings(); + + if (isChecked) { + navView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED); + } else { + navView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_UNLABELED); + } + + styleSwitch(buttonView, isChecked); + } + }); + + disableLauncherDelay.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Backend.instance().getSettings().mobileDisableLauncherDelay = isChecked; + Backend.instance().saveSettings(); + + styleSwitch(buttonView, isChecked); + } + }); + + startServerAtBoot.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Backend.instance().getSettings().mobileStartServerAtBoot = isChecked; + Backend.instance().saveSettings(); + + styleSwitch(buttonView, isChecked); + } + }); + return root; } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index acaf9f8..18db6cd 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,41 +1,79 @@ - + android:layout_height="match_parent"> + tools:context=".ui.settings.SettingsFragment"> -