diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5a770d5..15c8ea6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,9 @@ xmlns:tools="http://schemas.android.com/tools" package="org.timecrafters.TimeCraftersConfigurationTool"> - + + @@ -11,6 +13,7 @@ + android:hasFragileUserData="true" + tools:targetApi="34"> @@ -49,8 +53,6 @@ - - 0 && grantResults[0] == PERMISSION_GRANTED) { - // Permission granted - startTimer(timerDelayAfterPermissionRequest); - } else { - // Permission not given - new PermissionsRequestDialog().show(getSupportFragmentManager(), null); - } - } + if (Backend.instance().getSettings().mobileDisableLauncherDelay) { + startTimer(timerQuickDelay); + } else { + startTimer(timerDelay); } } @@ -72,14 +47,4 @@ public class LauncherActivity extends AppCompatActivity { } }, milliseconds); } - - private boolean havePermissions() { - return ContextCompat.checkSelfPermission(LauncherActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_GRANTED; - } - - public void requestStoragePermissions() { - ActivityCompat.requestPermissions(LauncherActivity.this, - new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - REQUEST_WRITE_PERMISSION); - } } \ No newline at end of file diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java index 6c04de2..2d01b30 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java @@ -8,8 +8,10 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.util.Log; +import android.view.MenuItem; import android.view.View; +import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.navigation.NavController; @@ -53,10 +55,9 @@ public class MainActivity extends AppCompatActivity { NavigationUI.setupWithNavController(navView, navController); if (Backend.instance() == null) { - new Backend(); + new Backend(getApplicationContext()); } - Backend.instance().applicationContext = getApplicationContext(); Backend.instance().mainActivity = this; if (Backend.instance().getSettings().mobileShowNavigationLabels) { @@ -77,7 +78,11 @@ public class MainActivity extends AppCompatActivity { registerReceiver(new TACNETOnBootReceiver(), new IntentFilter(Intent.ACTION_BOOT_COMPLETED)); if (getIntent().getBooleanExtra("navigate_to_tacnet", false)) { - navController.navigate(R.id.navigation_tacnet); + //--- Emulate clicking on menu item... + navView.getMenu().performIdentifierAction(R.id.navigation_tacnet, 0); + + //--- ...because using this function breaks the Editor nav button, for reasons :| + // navController.navigate(R.id.navigation_tacnet, null); } startTACNETStatusIndictator(); 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 6313410..d1c1ac3 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java @@ -67,13 +67,15 @@ public class Backend { return storage; } - public Backend() { + public Backend(Context applicationContext) { if (Backend.instance() != null) { throw(new RuntimeException("Backend instance already exists!")); } else { instance = this; } + this.applicationContext = applicationContext; + loadSettings(); if (!settings.config.isEmpty()) { loadConfig(settings.config); @@ -120,6 +122,18 @@ public class Backend { return lastServerError; } + public String getRootPath() { + return String.format("%s%s", applicationContext.getExternalFilesDir("").getAbsolutePath(), File.separator + "TimeCrafters_Configuration_Tool"); + } + + public String getConfigsPath() { + return String.format("%s%s", getRootPath(), File.separator + "/configs"); + } + + public String getSettingsPath() { + return String.format("%s%s", getRootPath(), File.separator + "settings.json"); + } + public Config getConfig() { return config; } @@ -147,7 +161,7 @@ public class Backend { public boolean hasConfigChanged() { return configChanged; } public String configPath(String name) { - return TAC.CONFIGS_PATH + File.separator + name + ".json"; + return getConfigsPath() + File.separator + name + ".json"; } public void loadConfig(String name) { @@ -249,7 +263,7 @@ public class Backend { public ArrayList configsList() { ArrayList list = new ArrayList<>(); - File directory = new File(TAC.CONFIGS_PATH); + File directory = new File(getConfigsPath()); FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { @@ -302,7 +316,7 @@ public class Backend { } public void loadSettings() { - File settingsFile = new File(TAC.SETTINGS_PATH); + File settingsFile = new File(getSettingsPath()); if (!settingsFile.exists()) { Log.i(TAG, "Writing default settings.json"); @@ -319,7 +333,7 @@ public class Backend { public void saveSettings() { Log.i(TAG, "Settings: " + gsonForSettings().toJson(settings)); - writeToFile(TAC.SETTINGS_PATH, gsonForSettings().toJson(settings)); + writeToFile(getSettingsPath(), gsonForSettings().toJson(settings)); } public void sortGroups() { @@ -369,7 +383,7 @@ public class Backend { } public void writeDefaultSettings() { - settings = new Settings(TACNET.DEFAULT_HOSTNAME, TACNET.DEFAULT_PORT, "", false, false, false); + settings = new Settings(TACNET.DEFAULT_HOSTNAME, TACNET.DEFAULT_PORT, "", true, false, false); saveSettings(); } @@ -402,7 +416,7 @@ public class Backend { public boolean writeToFile(String filePath, String content) { try { - if (filePath.startsWith(TAC.ROOT_PATH)) { + if (filePath.startsWith(getRootPath())) { createFolders(filePath); FileWriter writer = new FileWriter(filePath); @@ -422,8 +436,8 @@ public class Backend { } private void createFolders(String filePath) throws IOException { - File rootPath = new File(TAC.ROOT_PATH); - File configsPath = new File(TAC.CONFIGS_PATH); + File rootPath = new File(getRootPath()); + File configsPath = new File(getConfigsPath()); if (!rootPath.exists()) { rootPath.mkdir(); 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 0c612b3..5937a1a 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TAC.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TAC.java @@ -1,25 +1,15 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend; +import android.app.Application; import android.os.Build; import android.os.Environment; import java.io.File; public class TAC { - // TODO: Update filesystem handling - public static final String ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "TimeCrafters_Configuration_Tool", - CONFIGS_PATH = ROOT_PATH + File.separator + "/configs", - SETTINGS_PATH = ROOT_PATH + File.separator + "settings.json"; - public static final int CONFIG_SPEC_VERSION = 2; - // Set COMPETITION_MODE to true to disable automatic TACNET server start - public static final boolean BUILD_COMPETITION_MODE = false; - public static final boolean BUILD_AUTO_START = true; - static public boolean allowAutoServerStart() { - return !TAC.BUILD_COMPETITION_MODE && - TAC.BUILD_AUTO_START || - Backend.instance() != null && Backend.instance().getSettings().mobileStartServerAtBoot; + return Backend.instance().getSettings().mobileStartServerAtBoot; } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java index 280f9b1..de372f5 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ActionDialog.java @@ -110,7 +110,7 @@ public class ActionDialog extends TimeCraftersDialog { Backend.instance().sortActions(group); Backend.instance().configChanged(); - ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment(); + ActionsFragment fragment = (ActionsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateActions(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/AddFromPresetDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/AddFromPresetDialog.java index 79da135..78299c4 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/AddFromPresetDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/AddFromPresetDialog.java @@ -72,7 +72,7 @@ public class AddFromPresetDialog extends TimeCraftersDialog { bundle.putBoolean("is_cloning_preset", true); bundle.putInt("group_index", index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "clone_group_preset"); + dialog.show(getParentFragmentManager(), "clone_group_preset"); dismiss(); } @@ -107,7 +107,7 @@ public class AddFromPresetDialog extends TimeCraftersDialog { bundle.putInt("group_index", getArguments().getInt("group_index")); bundle.putInt("action_index", index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "clone_action_preset"); + dialog.show(getParentFragmentManager(), "clone_action_preset"); dismiss(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/CloneDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/CloneDialog.java index 06c6a5b..6176013 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/CloneDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/CloneDialog.java @@ -110,7 +110,7 @@ public class CloneDialog extends TimeCraftersDialog { Backend.instance().sortActions(group); Backend.instance().configChanged(); - ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment(); + ActionsFragment fragment = (ActionsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateActions(); } @@ -124,7 +124,7 @@ public class CloneDialog extends TimeCraftersDialog { Backend.instance().sortGroups(); Backend.instance().configChanged(); - GroupsFragment fragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment(); + GroupsFragment fragment = (GroupsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateGroups(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java index c43a494..2779e0b 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java @@ -110,7 +110,7 @@ public class ConfigurationDialog extends TimeCraftersDialog { } } - ConfigurationsFragment fragment = (ConfigurationsFragment) getFragmentManager().getPrimaryNavigationFragment(); + ConfigurationsFragment fragment = (ConfigurationsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateConfigFiles(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java index f1da3ae..9ec4402 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java @@ -96,7 +96,7 @@ public class GroupDialog extends TimeCraftersDialog { Backend.instance().sortGroups(); Backend.instance().configChanged(); - GroupsFragment fragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment(); + GroupsFragment fragment = (GroupsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateGroups(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java deleted file mode 100644 index c73a98c..0000000 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PermissionsRequestDialog.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.timecrafters.TimeCraftersConfigurationTool.dialogs; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.timecrafters.TimeCraftersConfigurationTool.LauncherActivity; -import org.timecrafters.TimeCraftersConfigurationTool.MainActivity; -import org.timecrafters.TimeCraftersConfigurationTool.R; -import org.timecrafters.TimeCraftersConfigurationTool.backend.TAC; -import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; - -public class PermissionsRequestDialog extends TimeCraftersDialog { - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - setCancelable(false); - - View root = super.onCreateView(inflater, container, savedInstanceState); - - ((TextView)root.findViewById(R.id.dialog_title)).setText("Storage Permission Required"); - LinearLayout view = root.findViewById(R.id.dialog_content); - view.addView(getLayoutInflater().inflate(R.layout.dialog_permission_request, null)); - ((TextView)view.findViewById(R.id.message)).setText("Permission is required to access external storage:\n\n" + TAC.ROOT_PATH); - - Button quitButton = view.findViewById(R.id.quit_button); - Button continueButton = view.findViewById(R.id.continue_button); - - quitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dismiss(); - ((MainActivity) getActivity()).close(); - } - }); - - continueButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dismiss(); - ((LauncherActivity) getActivity()).requestStoragePermissions(); - } - }); - - - return root; - } -} diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PresetDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PresetDialog.java index 434934f..bf5e8af 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PresetDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/PresetDialog.java @@ -190,10 +190,10 @@ public class PresetDialog extends TimeCraftersDialog { Backend.instance().getConfig().getPresets().getGroups().add(groupClone); Backend.instance().sortGroupPresets(); - GroupsFragment fragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment(); + GroupsFragment fragment = (GroupsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); Snackbar.make(fragment.getActivity().findViewById(R.id.snackbar_host), "Saved group preset: " + presetName, Snackbar.LENGTH_LONG).show(); } else { // Don't repopulate presets when it is not possible - PresetsFragment fragment = (PresetsFragment) getFragmentManager().getPrimaryNavigationFragment(); + PresetsFragment fragment = (PresetsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { Backend.instance().sortGroupPresets(); fragment.populatePresets(); @@ -224,10 +224,10 @@ public class PresetDialog extends TimeCraftersDialog { Backend.instance().getConfig().getPresets().getActions().add(actionClone); Backend.instance().sortActionsPresets(); - ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment(); + ActionsFragment fragment = (ActionsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); Snackbar.make(fragment.getActivity().findViewById(R.id.snackbar_host), "Saved action preset: " + presetName, Snackbar.LENGTH_LONG).show(); } else { // Don't repopulate presets when it is not possible - PresetsFragment fragment = (PresetsFragment) getFragmentManager().getPrimaryNavigationFragment(); + PresetsFragment fragment = (PresetsFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { Backend.instance().sortActionsPresets(); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java index 0130db2..7f54a99 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/VariableDialog.java @@ -164,7 +164,7 @@ public class VariableDialog extends TimeCraftersDialog { Backend.instance().sortVariables(action); Backend.instance().configChanged(); - VariablesFragment fragment = (VariablesFragment) getFragmentManager().getPrimaryNavigationFragment(); + VariablesFragment fragment = (VariablesFragment) getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateVariables(); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/PacketHandler.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/PacketHandler.java index 31c4edd..2234f9d 100755 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/PacketHandler.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/PacketHandler.java @@ -130,7 +130,7 @@ public class PacketHandler { return; } - final String path = TAC.CONFIGS_PATH + File.separator + configName + ".json"; + final String path = Backend.instance().getConfigsPath() + File.separator + configName + ".json"; Backend.instance().writeToFile(path, json); @@ -145,7 +145,7 @@ public class PacketHandler { Log.i(TAG, "Got request for config: " + packet.getContent()); Packet pkt; if (Backend.instance().configsList().contains(configName)) { - final String path = TAC.CONFIGS_PATH + File.separator + configName + ".json"; + final String path = Backend.instance().getConfigsPath() + File.separator + configName + ".json"; String content = Backend.instance().readFromFile(path); pkt = packetUploadConfig(configName, content); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETConnectionService.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETConnectionService.java index 669f495..e172a81 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETConnectionService.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETConnectionService.java @@ -61,7 +61,7 @@ public class TACNETConnectionService extends Service { private void foregroundify() { Intent notificationIntent = new Intent(this, MainActivity.class); notificationIntent.putExtra("navigate_to_tacnet", true); - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_MUTABLE); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("TACNET Connection") diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETServerService.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETServerService.java index 8f7aa2e..01fcc7c 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETServerService.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/TACNETServerService.java @@ -38,7 +38,7 @@ public class TACNETServerService extends Service { @Override public void onCreate() { if (Backend.instance() == null) { - new Backend(); + new Backend(getApplicationContext()); } } @@ -102,7 +102,7 @@ public class TACNETServerService extends Service { private void foregroundify() { Intent notificationIntent = new Intent(this, MainActivity.class); notificationIntent.putExtra("navigate_to_tacnet", true); - PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, FLAG_UPDATE_CURRENT); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_MUTABLE | FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("TACNET Server") diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java index 1d86141..acca46c 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/ActionsFragment.java @@ -78,7 +78,7 @@ public class ActionsFragment extends TimeCraftersFragment { } bundle.putInt("group_index", getArguments().getInt("group_index")); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "add_action"); + dialog.show(getParentFragmentManager(), "add_action"); } }); @@ -164,7 +164,7 @@ public class ActionsFragment extends TimeCraftersFragment { bundle.putInt("group_index", getArguments().getInt("group_index")); bundle.putInt("action_index", group.getActions().indexOf(action)); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "edit_action"); + dialog.show(getParentFragmentManager(), "edit_action"); } }); @@ -184,7 +184,7 @@ public class ActionsFragment extends TimeCraftersFragment { Backend.instance().configChanged(); Backend.getStorage().remove(deleteActionKey); - ActionsFragment fragment = (ActionsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + ActionsFragment fragment = (ActionsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateActions(); } @@ -192,7 +192,7 @@ public class ActionsFragment extends TimeCraftersFragment { }; Backend.getStorage().put(deleteActionKey, actionRunner); - dialog.show(getFragmentManager(), deleteActionKey); + dialog.show(getParentFragmentManager(), deleteActionKey); } }); @@ -217,7 +217,7 @@ public class ActionsFragment extends TimeCraftersFragment { bundle.putInt("group_index", getArguments().getInt("group_index")); bundle.putInt("action_index", action_index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "clone_dialog"); + dialog.show(getParentFragmentManager(), "clone_dialog"); return true; } else if (itemID == R.id.save_as_preset) { PresetDialog dialog = new PresetDialog(); @@ -226,7 +226,7 @@ public class ActionsFragment extends TimeCraftersFragment { bundle.putInt("action_index", action_index); bundle.putBoolean("is_new_preset", true); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "preset_dialog"); + dialog.show(getParentFragmentManager(), "preset_dialog"); return true; } else { return false; @@ -256,7 +256,7 @@ public class ActionsFragment extends TimeCraftersFragment { } bundle.putInt("group_index", getArguments().getInt("group_index")); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "add_from_preset_dialog"); + dialog.show(getParentFragmentManager(), "add_from_preset_dialog"); return true; } else { return false; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java index 3656b33..2a5ee88 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/GroupsFragment.java @@ -62,7 +62,7 @@ public class GroupsFragment extends TimeCraftersFragment { @Override public void onClick(View v) { GroupDialog dialog = new GroupDialog(); - dialog.show(getFragmentManager(), "add_group"); + dialog.show(getParentFragmentManager(), "add_group"); } }); @@ -141,7 +141,7 @@ public class GroupsFragment extends TimeCraftersFragment { bundle.putInt("group_index", config.getGroups().indexOf(group)); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "rename_group"); + dialog.show(getParentFragmentManager(), "rename_group"); } }); @@ -162,7 +162,7 @@ public class GroupsFragment extends TimeCraftersFragment { Backend.instance().configChanged(); Backend.getStorage().remove(deleteActionKey); - GroupsFragment fragment = (GroupsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + GroupsFragment fragment = (GroupsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateGroups(); } @@ -170,7 +170,7 @@ public class GroupsFragment extends TimeCraftersFragment { }; Backend.getStorage().put(deleteActionKey, action); - dialog.show(getFragmentManager(), deleteActionKey); + dialog.show(getParentFragmentManager(), deleteActionKey); } }); @@ -194,7 +194,7 @@ public class GroupsFragment extends TimeCraftersFragment { Bundle bundle = new Bundle(); bundle.putInt("group_index", group_index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "clone_dialog"); + dialog.show(getParentFragmentManager(), "clone_dialog"); return true; } else if (itemID == R.id.save_as_preset) { @@ -203,7 +203,7 @@ public class GroupsFragment extends TimeCraftersFragment { bundle.putBoolean("is_new_preset", true); bundle.putInt("group_index", group_index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "preset_dialog"); + dialog.show(getParentFragmentManager(), "preset_dialog"); return true; } else { @@ -230,7 +230,7 @@ public class GroupsFragment extends TimeCraftersFragment { Bundle bundle = new Bundle(); bundle.putBoolean("show_actions", false); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "add_from_preset_dialog"); + dialog.show(getParentFragmentManager(), "add_from_preset_dialog"); return true; } else { return false; diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java index c196025..24785a2 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/VariablesFragment.java @@ -79,7 +79,7 @@ public class VariablesFragment extends TimeCraftersFragment { } bundle.putInt("action_index", getArguments().getInt("action_index")); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "add_variable"); + dialog.show(getParentFragmentManager(), "add_variable"); } }); @@ -122,7 +122,7 @@ public class VariablesFragment extends TimeCraftersFragment { bundle.putInt("action_index", getArguments().getInt("action_index")); bundle.putInt("variable_index", action.getVariables().indexOf(variable)); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "edit_variable"); + dialog.show(getParentFragmentManager(), "edit_variable"); } }); @@ -142,7 +142,7 @@ public class VariablesFragment extends TimeCraftersFragment { Backend.instance().configChanged(); Backend.getStorage().remove(deleteActionKey); - VariablesFragment fragment = (VariablesFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + VariablesFragment fragment = (VariablesFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateVariables(); } @@ -150,7 +150,7 @@ public class VariablesFragment extends TimeCraftersFragment { }; Backend.getStorage().put(deleteActionKey, actionRunner); - dialog.show(getFragmentManager(), deleteActionKey); + dialog.show(getParentFragmentManager(), deleteActionKey); } }); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java index c63672c..ca44429 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/configurations/ConfigurationsFragment.java @@ -43,7 +43,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment { @Override public void onClick(View v) { ConfigurationDialog dialog = new ConfigurationDialog(); - dialog.show(getFragmentManager(), "add_configuration"); + dialog.show(getParentFragmentManager(), "add_configuration"); } }); @@ -93,7 +93,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment { bundle.putString("config_name", configFile); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "rename_configuration"); + dialog.show(getParentFragmentManager(), "rename_configuration"); } }); @@ -118,7 +118,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment { Backend.instance().loadConfig(""); } - ConfigurationsFragment fragment = (ConfigurationsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + ConfigurationsFragment fragment = (ConfigurationsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populateConfigFiles(); } @@ -131,7 +131,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment { Backend.getStorage().put(deleteActionKey, action); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), deleteActionKey); + dialog.show(getParentFragmentManager(), deleteActionKey); } }); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java index 4921f7b..4aa51a8 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/settings/presets/PresetsFragment.java @@ -85,7 +85,7 @@ public class PresetsFragment extends TimeCraftersFragment { Bundle bundle = new Bundle(); bundle.putInt("group_index", group_index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "preset_dialog"); + dialog.show(getParentFragmentManager(), "preset_dialog"); } }); @@ -109,7 +109,7 @@ public class PresetsFragment extends TimeCraftersFragment { Backend.instance().configChanged(); } - PresetsFragment fragment = (PresetsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + PresetsFragment fragment = (PresetsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populatePresets(); } @@ -118,7 +118,7 @@ public class PresetsFragment extends TimeCraftersFragment { Backend.getStorage().put(deletePresetKey, action); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), deletePresetKey); + dialog.show(getParentFragmentManager(), deletePresetKey); } }); @@ -163,7 +163,7 @@ public class PresetsFragment extends TimeCraftersFragment { Bundle bundle = new Bundle(); bundle.putInt("action_index", action_index); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), "preset_dialog"); + dialog.show(getParentFragmentManager(), "preset_dialog"); } }); @@ -187,7 +187,7 @@ public class PresetsFragment extends TimeCraftersFragment { Backend.instance().configChanged(); } - PresetsFragment fragment = (PresetsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + PresetsFragment fragment = (PresetsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment(); if (fragment != null) { fragment.populatePresets(); } @@ -196,7 +196,7 @@ public class PresetsFragment extends TimeCraftersFragment { Backend.getStorage().put(deletePresetKey, action); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), deletePresetKey); + dialog.show(getParentFragmentManager(), deletePresetKey); } }); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETHostFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETHostFragment.java index ada1c58..38f7b3a 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETHostFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETHostFragment.java @@ -36,7 +36,6 @@ public class TACNETHostFragment extends TimeCraftersFragment { final View root = inflater.inflate(R.layout.fragment_tacnet_host, viewGroup, false); final LinearLayout container = (LinearLayout) root; - if (Backend.instance().tacnet().status() != TACNET.Status.NOT_CONNECTED) { inflateTACNETConnectionStatus(container); } else if (Backend.instance().getServer() != null) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 63366a8..f2370aa 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -13,32 +13,30 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="56dp" - app:defaultNavHost="true" - app:layout_constraintBottom_toTopOf="@id/nav_view" - app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.0" - app:navGraph="@navigation/mobile_navigation" /> + app2:defaultNavHost="true" + app2:layout_constraintBottom_toTopOf="@id/nav_view" + app2:layout_constraintHorizontal_bias="0.0" + app2:layout_constraintLeft_toLeftOf="parent" + app2:layout_constraintRight_toRightOf="parent" + app2:layout_constraintTop_toTopOf="parent" + app2:layout_constraintVertical_bias="0.0" + app2:navGraph="@navigation/mobile_navigation" + tools:layout="@layout/partial_editor" /> + + android:layout_height="56dp" + app2:layout_constraintBottom_toTopOf="@id/nav_view" /> \ No newline at end of file