From 805f218d90fc1b53bfe82faa8ab630685e32a285 Mon Sep 17 00:00:00 2001 From: cyberarm Date: Mon, 24 Aug 2020 17:26:56 -0500 Subject: [PATCH] Rotation safe ConfirmationDialog --- .../MainActivity.java | 9 +++- .../backend/Backend.java | 9 ++++ .../dialogs/ConfigurationDialog.java | 7 ++- .../dialogs/ConfirmationDialog.java | 21 ++++---- .../dialogs/GroupDialog.java | 21 +++++--- .../library/TimeCraftersDialog.java | 6 +-- .../library/TimeCraftersDialogRunnable.java | 5 ++ .../ui/editor/ActionsFragment.java | 4 +- .../ui/editor/EditorViewModel.java | 19 ------- .../ui/editor/GroupsFragment.java | 53 ++++++++++++++----- .../ui/editor/VariablesFragment.java | 8 ++- .../ui/settings/SettingsFragment.java | 4 +- .../ConfigurationsFragment.java | 32 ++++++----- 13 files changed, 127 insertions(+), 71 deletions(-) create mode 100644 app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialogRunnable.java delete mode 100644 app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorViewModel.java diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java index 5bf9e77..7daad24 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java @@ -21,6 +21,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; public class MainActivity extends AppCompatActivity { private static final int REQUEST_WRITE_PERMISSION = 70; private static final String TAG = "MainActivity"; + private AppBarConfiguration appBarConfiguration; @Override protected void onCreate(Bundle savedInstanceState) { @@ -30,7 +31,7 @@ public class MainActivity extends AppCompatActivity { BottomNavigationView navView = findViewById(R.id.nav_view); // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. - AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( + appBarConfiguration = new AppBarConfiguration.Builder( R.id.navigation_tacnet, R.id.navigation_editor, R.id.navigation_settings, R.id.navigation_search) .build(); @@ -47,6 +48,12 @@ public class MainActivity extends AppCompatActivity { } } + @Override + public boolean onSupportNavigateUp() { + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); + return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp(); + } + @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { 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 68938d3..5daa4bc 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java @@ -38,6 +38,8 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; @@ -221,6 +223,13 @@ public class Backend { list.add(file.getName().replace(".json", "")); } + Collections.sort(list, new Comparator() { + @Override + public int compare(String o1, String o2) { + return o1.toLowerCase().compareTo(o2.toLowerCase()); + } + }); + return list; } 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 58dbe7c..29040d4 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java @@ -19,6 +19,7 @@ import org.timecrafters.TimeCraftersConfigurationTool.ui.settings.configurations public class ConfigurationDialog extends TimeCraftersDialog { private static final String TAG = "ConfigurationDialog"; + private String configName; private TextView nameError; @@ -85,8 +86,10 @@ public class ConfigurationDialog extends TimeCraftersDialog { Backend.instance().writeNewConfig(newConfigName); } - // Caution - ((ConfigurationsFragment)getTargetFragment()).populateConfigFiles(); + ConfigurationsFragment fragment = (ConfigurationsFragment) getFragmentManager().getPrimaryNavigationFragment(); + if (fragment != null) { + fragment.populateConfigFiles(); + } dismiss(); } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java index 8dc925c..1a21f29 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfirmationDialog.java @@ -1,9 +1,6 @@ package org.timecrafters.TimeCraftersConfigurationTool.dialogs; -import android.graphics.Color; import android.graphics.Typeface; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -15,27 +12,33 @@ import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; -import com.google.android.material.resources.TextAppearance; - import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialogRunnable; public class ConfirmationDialog extends TimeCraftersDialog { + private static final String TAG = "ConfirmationDialog"; private String title, message; - private Runnable action; + private TimeCraftersDialogRunnable action; + private ConfirmationDialog confirmationDialog; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = super.onCreateView(inflater, container, savedInstanceState); + this.confirmationDialog = this; if (getArguments() != null) { - this.title = getArguments().getString("title", "Are You Sure?"); + this.title = getArguments().getString("title", "Are you sure?"); this.message = getArguments().getString("message", ""); final String actionKey = getArguments().getString("action", null); if (actionKey != null && Backend.getStorage().containsKey(actionKey)) { - this.action = (Runnable) Backend.getStorage().get(actionKey); + Log.d(TAG, "OKAY onCreateView: actionKey: " + actionKey + " getStorage: " + Backend.getStorage().containsKey(actionKey)); + + this.action = (TimeCraftersDialogRunnable) Backend.getStorage().get(actionKey); + } else { + Log.d(TAG, "FAIL onCreateView: actionKey: " + actionKey + " getStorage: " + Backend.getStorage().containsKey(actionKey)); } } @@ -67,7 +70,7 @@ public class ConfirmationDialog extends TimeCraftersDialog { @Override public void onClick(View v) { if (action != null) { - action.run(); + action.run(confirmationDialog); } dismiss(); 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 2186326..0f8e5f8 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/GroupDialog.java @@ -1,6 +1,8 @@ package org.timecrafters.TimeCraftersConfigurationTool.dialogs; import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,30 +11,33 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.core.text.TextUtilsCompat; + import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; +import org.timecrafters.TimeCraftersConfigurationTool.ui.editor.GroupsFragment; import java.util.ArrayList; +import java.util.Arrays; public class GroupDialog extends TimeCraftersDialog { + private static final int HOST_ID = R.id.navigation_editor; final String TAG = "GroupDialog"; private Group group; - public GroupDialog() {} - - public GroupDialog(Group group) { - this.group = group; - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setCancelable(false); View root = super.onCreateView(inflater, container, savedInstanceState); + if (getArguments() != null) { + this.group = Backend.instance().getConfig().getGroups().get(getArguments().getInt("group_index")); + } + final TextView title = root.findViewById(R.id.dialogTitle); final LinearLayout view = root.findViewById(R.id.dialogContent); view.addView(getLayoutInflater().inflate(R.layout.dialog_edit_group, null)); @@ -67,6 +72,10 @@ public class GroupDialog extends TimeCraftersDialog { } Backend.instance().configChanged(); + GroupsFragment groupsFragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment(); + if (groupsFragment != null) { + groupsFragment.populateGroups(); + } dismiss(); } }); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java index 4c164fd..1444b7d 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialog.java @@ -2,6 +2,7 @@ package org.timecrafters.TimeCraftersConfigurationTool.library; import android.graphics.Point; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,11 +16,6 @@ import androidx.fragment.app.DialogFragment; import org.timecrafters.TimeCraftersConfigurationTool.R; public class TimeCraftersDialog extends DialogFragment { - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialogRunnable.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialogRunnable.java new file mode 100644 index 0000000..d5bc6f4 --- /dev/null +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/library/TimeCraftersDialogRunnable.java @@ -0,0 +1,5 @@ +package org.timecrafters.TimeCraftersConfigurationTool.library; + +abstract public class TimeCraftersDialogRunnable { + abstract public void run(TimeCraftersDialog dialog); +} 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 af4240b..d41382b 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 @@ -59,7 +59,9 @@ public class ActionsFragment extends TimeCraftersFragment { return root; } - private void populateActions() { + public void populateActions() { + container.removeAllViews(); + int i = 0; for (final Action action : group.getActions()) { final View view = View.inflate(getContext(), R.layout.fragment_part_actions, null); diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorViewModel.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorViewModel.java deleted file mode 100644 index 7616a28..0000000 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/editor/EditorViewModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.timecrafters.TimeCraftersConfigurationTool.ui.editor; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -public class EditorViewModel extends ViewModel { - - private MutableLiveData mText; - - public EditorViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is editor fragment"); - } - - public LiveData getText() { - return mText; - } -} \ No newline at end of file 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 0ab3efc..7f07652 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 @@ -12,8 +12,8 @@ import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.ViewModelProviders; import androidx.navigation.Navigation; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -24,31 +24,38 @@ import org.timecrafters.TimeCraftersConfigurationTool.backend.Config; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ConfirmationDialog; import org.timecrafters.TimeCraftersConfigurationTool.dialogs.GroupDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialogRunnable; public class GroupsFragment extends TimeCraftersFragment { + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Log.d(TAG, "onCreate: CREATE"); + } final private String TAG = "EditorFragment"; + final private String deleteActionKey = "delete_group"; - private EditorViewModel editorViewModel; private Config config; private TextView configName; private LinearLayout container; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - editorViewModel = - ViewModelProviders.of(this).get(EditorViewModel.class); final View root = inflater.inflate(R.layout.fragment_groups, container, false); this.configName = root.findViewById(R.id.configuration_name); this.container = root.findViewById(R.id.container); final FloatingActionButton actionButton = root.findViewById(R.id.actionButton); final ScrollView scrollView = root.findViewById(R.id.scrollview); + actionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { GroupDialog dialog = new GroupDialog(); - dialog.show(getFragmentManager(), null); + dialog.show(getFragmentManager(), "add_group"); } }); @@ -69,7 +76,9 @@ public class GroupsFragment extends TimeCraftersFragment { return root; } - private void populateGroups() { + public void populateGroups() { + container.removeAllViews(); + int i = 0; for (final Group group : config.getGroups()) { View view = View.inflate(getContext(), R.layout.fragment_part_groups, null); @@ -96,8 +105,13 @@ public class GroupsFragment extends TimeCraftersFragment { rename.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - GroupDialog dialog = new GroupDialog(group); - dialog.show(getFragmentManager(), null); + GroupDialog dialog = new GroupDialog(); + Bundle bundle = new Bundle(); + + bundle.putInt("group_index", config.getGroups().indexOf(group)); + dialog.setArguments(bundle); + + dialog.show(getFragmentManager(), "rename_group"); } }); @@ -106,11 +120,26 @@ public class GroupsFragment extends TimeCraftersFragment { public void onClick(View v) { ConfirmationDialog dialog = new ConfirmationDialog(); Bundle bundle = new Bundle(); - bundle.putString("title", "Are you sure?"); - bundle.putString("message", "Delete group " + group.name + "?"); - dialog.setArguments(bundle); - dialog.show(getFragmentManager(), null); + bundle.putString("message", "Delete group " + group.name + "?"); + bundle.putString("action", deleteActionKey); + dialog.setArguments(bundle); + TimeCraftersDialogRunnable action = new TimeCraftersDialogRunnable() { + @Override + public void run(TimeCraftersDialog dialog) { + Backend.instance().getConfig().getGroups().remove(group); + Backend.instance().configChanged(); + Backend.getStorage().remove(deleteActionKey); + + GroupsFragment fragment = (GroupsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + if (fragment != null) { + fragment.populateGroups(); + } + } + }; + Backend.getStorage().put(deleteActionKey, action); + + dialog.show(getFragmentManager(), deleteActionKey); } }); 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 120a801..75239b3 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 @@ -1,6 +1,7 @@ package org.timecrafters.TimeCraftersConfigurationTool.ui.editor; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -24,6 +25,8 @@ import org.timecrafters.TimeCraftersConfigurationTool.dialogs.VariableDialog; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; public class VariablesFragment extends TimeCraftersFragment { + final private String TAG = "VariablesFragment"; + private Config config; private LinearLayout container; private Group group; @@ -39,6 +42,7 @@ public class VariablesFragment extends TimeCraftersFragment { this.config = Backend.instance().getConfig(); this.group = config.getGroups().get(getArguments().getInt("group_index")); this.action = group.getActions().get(getArguments().getInt("action_index")); + if (config != null) { ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Action: " + action.name); @@ -57,7 +61,9 @@ public class VariablesFragment extends TimeCraftersFragment { return root; } - private void populateVariables() { + public void populateVariables() { + container.removeAllViews(); + int i = 0; for (final Variable variable : action.getVariables()) { View view = View.inflate(getContext(), R.layout.fragment_part_variables, null); 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 944c2c7..1afdcbf 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 @@ -26,14 +26,14 @@ public class SettingsFragment extends TimeCraftersFragment { managePresets.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Navigation.findNavController(root).navigate(R.id.presetsFragment); + Navigation.findNavController(root).navigate(R.id.action_navigation_settings_to_presetsFragment); } }); manageConfigurations.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Navigation.findNavController(root).navigate(R.id.configurationsFragment); + Navigation.findNavController(root).navigate(R.id.action_navigation_settings_to_configurationsFragment); } }); 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 1e46bb7..f069540 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 @@ -1,7 +1,5 @@ package org.timecrafters.TimeCraftersConfigurationTool.ui.settings.configurations; -import android.content.BroadcastReceiver; -import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -20,9 +18,13 @@ import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend; import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ConfigurationDialog; import org.timecrafters.TimeCraftersConfigurationTool.dialogs.ConfirmationDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog; +import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialogRunnable; import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersFragment; public class ConfigurationsFragment extends TimeCraftersFragment { + final private String deleteActionKey = "delete_configuration"; + private LayoutInflater inflater; private LinearLayout configsContainer; private View root; @@ -40,7 +42,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment { @Override public void onClick(View v) { ConfigurationDialog dialog = new ConfigurationDialog(); - dialog.show(getFragmentManager(), null); + dialog.show(getFragmentManager(), "add_configuration"); } }); @@ -82,7 +84,6 @@ public class ConfigurationsFragment extends TimeCraftersFragment { } }); - final ConfigurationsFragment fragment = this; rename.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -90,8 +91,8 @@ public class ConfigurationsFragment extends TimeCraftersFragment { Bundle bundle = new Bundle(); bundle.putString("config_name", configFile); dialog.setArguments(bundle); - dialog.setTargetFragment(fragment, 0); - dialog.show(getFragmentManager().beginTransaction(), "rename_configuration"); + + dialog.show(getFragmentManager(), "rename_configuration"); } }); @@ -100,21 +101,26 @@ public class ConfigurationsFragment extends TimeCraftersFragment { public void onClick(View v) { ConfirmationDialog dialog = new ConfirmationDialog(); Bundle bundle = new Bundle(); - final String actionKey = "delete_configuration"; - bundle.putString("title", "Are you sure?"); + bundle.putString("message", "Destroy configuration " + configFile + "?"); - bundle.putString("action", actionKey); + bundle.putString("action", deleteActionKey); bundle.putBoolean("extreme_danger", true); - Runnable action = new Runnable() { + TimeCraftersDialogRunnable action = new TimeCraftersDialogRunnable() { @Override - public void run() { + public void run(TimeCraftersDialog dialog) { Backend.instance().deleteConfig(configFile); + Backend.getStorage().remove(deleteActionKey); + + ConfigurationsFragment fragment = (ConfigurationsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment(); + if (fragment != null) { + fragment.populateConfigFiles(); + } } } ; - Backend.getStorage().put(actionKey, action); + Backend.getStorage().put(deleteActionKey, action); dialog.setArguments(bundle); - dialog.show(getFragmentManager(), null); + dialog.show(getFragmentManager(), deleteActionKey); } });