From 3c72f409937349c5242cfdb94b139f1cff4b0716 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Drahom=C3=ADr=20Karch=C5=88=C3=A1k?=
 <drahomir.karchnak@nic.cz>
Date: Thu, 14 Jul 2016 11:16:37 +0200
Subject: [PATCH] #341 WIP Added sound mute toggle button to main menu.

---
 .../application/application_cs.properties     |   1 +
 .../application/application_de.properties     |   1 +
 .../application/application_sk.properties     |   1 +
 .../mainmenu/icon_sounds_pressed.png          | Bin 0 -> 3380 bytes
 .../mainmenu/icon_sounds_unpressed.png        | Bin 0 -> 4180 bytes
 .../src/cz/nic/tablexia/TablexiaSettings.java |  27 ++++++++++++++----
 .../cz/nic/tablexia/game/GameDefinition.java  |   4 +++
 .../application/ApplicationAtlasManager.java  |   2 ++
 .../application/ApplicationTextManager.java   |   1 +
 core/src/cz/nic/tablexia/menu/IMenuItem.java  |   2 +-
 .../menu/game/GameMenuDefinition.java         |   7 +++++
 .../tablexia/menu/game/GameMenuItemGroup.java |   2 +-
 .../cz/nic/tablexia/menu/main/MainMenu.java   |   5 ++--
 .../menu/main/MainMenuDefinition.java         |  17 ++++++++++-
 .../tablexia/menu/main/MainMenuItemGroup.java |  17 +++++++++--
 .../nic/tablexia/menu/user/UserMenuItem.java  |   7 ++++-
 .../screen/AbstractTablexiaScreen.java        |  22 ++++++++++----
 .../cz/nic/tablexia/util/TablexiaSound.java   |  10 +++----
 18 files changed, 99 insertions(+), 27 deletions(-)
 create mode 100644 core/assets/common/_global/application/mainmenu/icon_sounds_pressed.png
 create mode 100644 core/assets/common/_global/application/mainmenu/icon_sounds_unpressed.png

diff --git a/android/assets/text/application/application_cs.properties b/android/assets/text/application/application_cs.properties
index e7079a602..a7298f37f 100644
--- a/android/assets/text/application/application_cs.properties
+++ b/android/assets/text/application/application_cs.properties
@@ -26,6 +26,7 @@ mainmenu_statistics=Statistiky
 mainmenu_encyclopedia=Encyklopedie
 mainmenu_preferences=NastavenĂ­
 mainmenu_about=O aplikaci
+mainmenu_sounds=[CS]Zvuky
 mainmenu_logout=Odhlásit
 mainmenu_screendebug=Debug Screen
 mainmenu_panorama=Panorama
diff --git a/android/assets/text/application/application_de.properties b/android/assets/text/application/application_de.properties
index b97fc711f..ba09da1c5 100644
--- a/android/assets/text/application/application_de.properties
+++ b/android/assets/text/application/application_de.properties
@@ -27,6 +27,7 @@ mainmenu_statistics=Statistiken
 mainmenu_encyclopedia=Enzyklopädie
 mainmenu_preferences=Einstellung
 mainmenu_about=Ăśber die App
+mainmenu_sounds=[DE]Zvuky
 mainmenu_logout=Abmelden
 mainmenu_screendebug=Debug Screen
 mainmenu_panorama=Panorama
diff --git a/android/assets/text/application/application_sk.properties b/android/assets/text/application/application_sk.properties
index 93aa14149..413d4fd4a 100644
--- a/android/assets/text/application/application_sk.properties
+++ b/android/assets/text/application/application_sk.properties
@@ -26,6 +26,7 @@ mainmenu_statistics=Ĺ tatistiky
 mainmenu_encyclopedia=Encyklopédia
 mainmenu_preferences=Nastavenie
 mainmenu_about=O aplikácií
+mainmenu_sounds=[SK]Zvuky
 mainmenu_logout=Odhlásiť
 mainmenu_screendebug=Debug Screen
 mainmenu_panorama=Panorama
diff --git a/core/assets/common/_global/application/mainmenu/icon_sounds_pressed.png b/core/assets/common/_global/application/mainmenu/icon_sounds_pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..978d5fb131bab326fd0c47b30c9c51346f12b0f4
GIT binary patch
literal 3380
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
KMNUMnLSTZr=!SU!

literal 0
HcmV?d00001

diff --git a/core/assets/common/_global/application/mainmenu/icon_sounds_unpressed.png b/core/assets/common/_global/application/mainmenu/icon_sounds_unpressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..831bd3f5b7d1be944201132e72e9c8f3adabfa63
GIT binary patch
literal 4180
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

literal 0
HcmV?d00001

diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java
index 44760152a..c624ef874 100644
--- a/core/src/cz/nic/tablexia/TablexiaSettings.java
+++ b/core/src/cz/nic/tablexia/TablexiaSettings.java
@@ -202,12 +202,6 @@ public class TablexiaSettings {
 
 	public boolean isWinterMode() { return winterMode; }
 
-    public boolean isSoundMuted() { return soundMuted; }
-
-    public void setSoundMuted(boolean soundMuted) {
-        this.soundMuted = soundMuted;
-    }
-
     public boolean isShowBoundingBoxes() {
         return getBuildType().isBoundingBoxes();
     }
@@ -241,6 +235,27 @@ public class TablexiaSettings {
         return DEFAULT_FONT_COLOR;
     }
 
+//////////////////////////// SOUND MUTE
+
+    public boolean isSoundMuted() { return soundMuted; }
+
+    public void toggleSoundMute() {
+        this.soundMuted = !soundMuted;
+        ApplicationBus.getInstance().publishAsync(new SoundMuteEvent(soundMuted));
+    }
+
+    public static class SoundMuteEvent implements ApplicationBus.ApplicationEvent {
+        private boolean soundMuted;
+
+        private SoundMuteEvent(boolean soundMuted) {
+            this.soundMuted = soundMuted;
+        }
+
+        public boolean isSoundMuted() {
+            return soundMuted;
+        }
+    }
+
 //////////////////////////// USER SETTINGS
 
     public static class SelectedUserEvent implements ApplicationBus.ApplicationEvent {
diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java
index d2bcf71b6..88a4f4699 100644
--- a/core/src/cz/nic/tablexia/game/GameDefinition.java
+++ b/core/src/cz/nic/tablexia/game/GameDefinition.java
@@ -142,4 +142,8 @@ public enum GameDefinition implements ApplicationEvent, IMenuItem {
         return new String[0]; // TODO
     }
 
+    @Override
+    public boolean isToggle() {
+        return false;
+    }
 }
diff --git a/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java b/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java
index acf0021da..d5cc05b50 100644
--- a/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java
+++ b/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java
@@ -48,6 +48,8 @@ public class ApplicationAtlasManager extends TablexiaAtlasManager implements IAp
     public static final String MAINMENU_ICON_LOGOUT_UNPRESSED           = MAINMENU_PATH + "icon_logout_unpressed";
     public static final String MAINMENU_ICON_STATISTICS_PRESSED         = MAINMENU_PATH + "icon_statistics_pressed";
     public static final String MAINMENU_ICON_STATISTICS_UNPRESSED       = MAINMENU_PATH + "icon_statistics_unpressed";
+    public static final String MAINMENU_ICON_SOUNDS_PRESSED             = MAINMENU_PATH + "icon_sounds_pressed";
+    public static final String MAINMENU_ICON_SOUNDS_UNPRESSED           = MAINMENU_PATH + "icon_sounds_unpressed";
     public static final String MAINMENU_CHILDITEM_BACKGROUND            = MAINMENU_PATH + "childitem_background";
     public static final String MAINMENU_CHILDITEM_ARROW                 = MAINMENU_PATH + "childitem_arrow";
     public static final String MAINMENU_CHILDITEM_RESTART               = MAINMENU_PATH + "childitem_restart";
diff --git a/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java b/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java
index dc9ca8288..6db5ce143 100644
--- a/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java
+++ b/core/src/cz/nic/tablexia/loader/application/ApplicationTextManager.java
@@ -57,6 +57,7 @@ public class ApplicationTextManager extends TablexiaDataManager<I18NBundle> impl
 		public static final String MAINMENU_ENCYCLOPEDIA			= "mainmenu_encyclopedia";
 		public static final String MAINMENU_ABOUT					= "mainmenu_about";
 		public static final String MAINMENU_LOGOUT					= "mainmenu_logout";
+		public static final String MAINMENU_SOUNDS					= "mainmenu_sounds";
 		public static final String MAINMENU_DEBUG					= "mainmenu_screendebug";
 
 		public static final String GAME_ROBBERY_TITLE 					= "game_robbery_title";
diff --git a/core/src/cz/nic/tablexia/menu/IMenuItem.java b/core/src/cz/nic/tablexia/menu/IMenuItem.java
index 152a2e768..c8f311c8b 100644
--- a/core/src/cz/nic/tablexia/menu/IMenuItem.java
+++ b/core/src/cz/nic/tablexia/menu/IMenuItem.java
@@ -11,5 +11,5 @@ public interface IMenuItem {
 	AbstractMenu.MenuAction getMenuAction();
 	IMenuItem[] getSubmenu();
 	String[] getIcons();
-	
+	boolean isToggle();
 }
diff --git a/core/src/cz/nic/tablexia/menu/game/GameMenuDefinition.java b/core/src/cz/nic/tablexia/menu/game/GameMenuDefinition.java
index 50a6923e2..9348e0fa9 100644
--- a/core/src/cz/nic/tablexia/menu/game/GameMenuDefinition.java
+++ b/core/src/cz/nic/tablexia/menu/game/GameMenuDefinition.java
@@ -55,6 +55,11 @@ public enum GameMenuDefinition implements ApplicationBus.ApplicationEvent, IMenu
         return null;
     }
 
+    @Override
+    public boolean isToggle() {
+        return false;
+    }
+
     @Override
     public Class<? extends Group> getItemGroupClass() {
         return MENU_ITEM_GROUP_CLASS;
@@ -82,6 +87,8 @@ public enum GameMenuDefinition implements ApplicationBus.ApplicationEvent, IMenu
         }
     }
 
+
+
     public static GameMenuDefinition getGameMenuDefinitionForGameDefinition(GameDefinition gameDefinition) {
         for (GameMenuDefinition gameMenuDefinition : GameMenuDefinition.values()) {
             if (gameDefinition == gameMenuDefinition.gameDefinition) {
diff --git a/core/src/cz/nic/tablexia/menu/game/GameMenuItemGroup.java b/core/src/cz/nic/tablexia/menu/game/GameMenuItemGroup.java
index 09cde8290..4797713ea 100644
--- a/core/src/cz/nic/tablexia/menu/game/GameMenuItemGroup.java
+++ b/core/src/cz/nic/tablexia/menu/game/GameMenuItemGroup.java
@@ -57,7 +57,7 @@ public class GameMenuItemGroup extends Container<Table> {
     private Class<? extends AbstractTablexiaGame> abstractTablexiaGameClass;
     private GameMenuScreen.GameMenuPageDefinition gameMenuPageDefinition;
 
-    public GameMenuItemGroup(IMenuItem menuItem, float width) {
+    public GameMenuItemGroup(final IMenuItem menuItem, float width) {
         this.abstractTablexiaGameClass = ((GameMenuDefinition)menuItem).getGameDefinition().getScreenClass();
         this.gameMenuPageDefinition = GameMenuScreen.GameMenuPageDefinition.getGameMenuPageForGameDefinition(GameDefinition.getGameDefinitionForClass(abstractTablexiaGameClass));
 
diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenu.java b/core/src/cz/nic/tablexia/menu/main/MainMenu.java
index 5df8201d8..f30cec98b 100644
--- a/core/src/cz/nic/tablexia/menu/main/MainMenu.java
+++ b/core/src/cz/nic/tablexia/menu/main/MainMenu.java
@@ -1,6 +1,5 @@
 package cz.nic.tablexia.menu.main;
 
-import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.scenes.scene2d.Group;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.ui.Container;
@@ -80,7 +79,7 @@ public class MainMenu extends AbstractMenu {
             menuItemContainer.addListener(new ClickListener() {
                 @Override
                 public void clicked(InputEvent event, float x, float y) {
-                    performMenuAction(menuItem);
+                    if(inTapSquare(x, y)) performMenuAction(menuItem);
                 }
             });
             menuItemsLayout.addActor(menuItemContainer);
@@ -95,7 +94,7 @@ public class MainMenu extends AbstractMenu {
                     submenuItemContainer.addListener(new ClickListener() {
                         @Override
                         public void clicked(InputEvent event, float x, float y) {
-                            performMenuAction(submenuItem);
+                            if(inTapSquare(x, y)) performMenuAction(submenuItem);
                         }
                     });
                     subMenuLayout.addActor(submenuItemContainer);
diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java b/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java
index 2cc97cd30..47d2cf646 100644
--- a/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java
+++ b/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java
@@ -36,8 +36,18 @@ public enum MainMenuDefinition implements IMenuItem {
 	STATISTICS			(false, new String[]{ApplicationAtlasManager.MAINMENU_ICON_STATISTICS_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_STATISTICS_PRESSED}, ApplicationTextManager.ApplicationTextsAssets.MAINMENU_STATISTICS, null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(StatisticsScreen.class,     TablexiaApplication.ScreenTransaction.FADE)),
 	ENCYCLOPEDIA		(false, new String[]{ApplicationAtlasManager.MAINMENU_ICON_ENCYCLOPEDIA_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_ENCYCLOPEDIA_PRESSED}, ApplicationTextManager.ApplicationTextsAssets.MAINMENU_ENCYCLOPEDIA, null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(EncyclopediaScreen.class,   TablexiaApplication.ScreenTransaction.FADE)),
 	ABOUT_APPLICATION	(false, new String[]{ApplicationAtlasManager.MAINMENU_ICON_ABOUT_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_ABOUT_PRESSED}, ApplicationTextManager.ApplicationTextsAssets.MAINMENU_ABOUT, null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(AboutScreen.class,          TablexiaApplication.ScreenTransaction.FADE)),
-	LOGOUT				(false, new String[]{ApplicationAtlasManager.MAINMENU_ICON_LOGOUT_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_LOGOUT_PRESSED}, ApplicationTextManager.ApplicationTextsAssets.MAINMENU_LOGOUT, null, AbstractMenu.MenuAction.CLOSE,  null) {
+	SOUNDS				(false, new String[]{ApplicationAtlasManager.MAINMENU_ICON_SOUNDS_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_SOUNDS_PRESSED}, ApplicationTextManager.ApplicationTextsAssets.MAINMENU_SOUNDS, null, null, null) {
+		@Override
+		public void performAction() {
+			TablexiaSettings.getInstance().toggleSoundMute();
+		}
 
+		@Override
+		public boolean isToggle() {
+			return true;
+		}
+	},
+	LOGOUT				(false, new String[]{ApplicationAtlasManager.MAINMENU_ICON_LOGOUT_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_LOGOUT_PRESSED}, ApplicationTextManager.ApplicationTextsAssets.MAINMENU_LOGOUT, null, AbstractMenu.MenuAction.CLOSE,  null) {
 		@Override
 		public void performAction() {
             TablexiaSettings.getInstance().changeUser(null, new TablexiaSettings.LogoutAcceptListener() {
@@ -97,6 +107,11 @@ public enum MainMenuDefinition implements IMenuItem {
 		return icons;
 	}
 
+	@Override
+	public boolean isToggle() {
+		return false;
+	}
+
 	public IMenuItem[] getSubmenu() {
 		return submenu;
 	}
diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenuItemGroup.java b/core/src/cz/nic/tablexia/menu/main/MainMenuItemGroup.java
index aceaf312a..709e70f10 100644
--- a/core/src/cz/nic/tablexia/menu/main/MainMenuItemGroup.java
+++ b/core/src/cz/nic/tablexia/menu/main/MainMenuItemGroup.java
@@ -34,24 +34,31 @@ public class MainMenuItemGroup extends Container<Table> {
 
     private final TextureRegionDrawable highlitedBackground;
 
-    public MainMenuItemGroup(IMenuItem menuItem, float width) {
+    public MainMenuItemGroup(final IMenuItem menuItem, float width) {
         Table layoutTable = new Table();
         layoutTable.setFillParent(true);
         fillX();
         layoutTable.align(Align.left);
         setActor(layoutTable);
         addListener(new ClickListener() {
+            @Override
+            public void clicked(InputEvent event, float x, float y) {
+                if(menuItem.isToggle() && inTapSquare(x, y)) {
+                    if(isCurrentlyPressed()) setUnpressed();
+                    else setPressed();
+                }
+            }
 
             @Override
             public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
-                setPressed();
+                if(!menuItem.isToggle()) setPressed();
                 return super.touchDown(event, x, y, pointer, button);
             }
 
             @Override
             public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
-                setUnpressed();
                 super.touchUp(event, x, y, pointer, button);
+                if(!menuItem.isToggle()) setUnpressed();
             }
         });
         setTouchable(Touchable.enabled);
@@ -122,4 +129,8 @@ public class MainMenuItemGroup extends Container<Table> {
             iconPressedImage.setVisible(true);
         }
     }
+
+    public boolean isCurrentlyPressed() {
+        return iconPressedImage.isVisible();
+    }
 }
diff --git a/core/src/cz/nic/tablexia/menu/user/UserMenuItem.java b/core/src/cz/nic/tablexia/menu/user/UserMenuItem.java
index 31a611402..2ce85ffb3 100644
--- a/core/src/cz/nic/tablexia/menu/user/UserMenuItem.java
+++ b/core/src/cz/nic/tablexia/menu/user/UserMenuItem.java
@@ -60,4 +60,9 @@ public class UserMenuItem implements IMenuItem {
     public IMenuItem[] getSubmenu() {
         return null;
     }
-}
+
+    @Override
+    public boolean isToggle() {
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
index fd18b3a91..17e9f5dfe 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
@@ -60,6 +60,7 @@ import static com.badlogic.gdx.scenes.scene2d.actions.Actions.moveTo;
 public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
 
     public class TablexiaMusic implements Music {
+        private static final float DEFAULT_VOLUME = 1f;
 
         private String musicName;
         private Music  music;
@@ -69,14 +70,20 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
             this.music = music;
         }
 
+        private void updateVolume() {
+            if(TablexiaSettings.getInstance().isSoundMuted()) setVolume(0);
+            else setVolume(DEFAULT_VOLUME);
+        }
+
         public String getMusicName() {
             return musicName;
         }
 
         @Override
         public void play() {
-            if(!TablexiaSettings.getInstance().isSoundMuted())
-                music.play();
+            ApplicationBus.getInstance().subscribe(this);
+            updateVolume();
+            music.play();
         }
 
         @Override
@@ -86,6 +93,7 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
 
         @Override
         public void stop() {
+            ApplicationBus.getInstance().unsubscribe(this);
             music.stop();
         }
 
@@ -132,14 +140,11 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
         @Override
         public void dispose() {
             Log.debug(AbstractTablexiaScreen.this.getClass(), "DISPOSING MUSIC: " + getMusicName());
+            ApplicationBus.getInstance().unsubscribe(this);
             notDisposedMusics.remove(getMusicName());
             music.dispose();
         }
 
-        public void disposeOnly() {
-            music.dispose();
-        }
-
         @Override
         public String toString() {
             return "MUSIC: " + getMusicName();
@@ -149,6 +154,11 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
         public void setOnCompletionListener(OnCompletionListener listener) {
             music.setOnCompletionListener(listener);
         }
+
+        @Handler
+        public void handleSoundMuteEvent(TablexiaSettings.SoundMuteEvent soundMuteEvent) {
+            if(isPlaying()) updateVolume();
+        }
     }
 
     public static final String  TEXT_LOADER_BASE_PATH   = "text/";
diff --git a/core/src/cz/nic/tablexia/util/TablexiaSound.java b/core/src/cz/nic/tablexia/util/TablexiaSound.java
index 42ef452bb..9762e88f8 100644
--- a/core/src/cz/nic/tablexia/util/TablexiaSound.java
+++ b/core/src/cz/nic/tablexia/util/TablexiaSound.java
@@ -30,10 +30,10 @@ public class TablexiaSound implements Sound {
 
     @Override
     public long play(float volume, float pitch, float pan) {
-        if(!TablexiaSettings.getInstance().isSoundMuted())
-            return sound.play(volume, pitch, pan);
-        else
+        if(TablexiaSettings.getInstance().isSoundMuted())
             return -1;
+        else
+            return sound.play(volume, pitch, pan);
     }
 
     @Override
@@ -49,7 +49,7 @@ public class TablexiaSound implements Sound {
     @Override
     public long loop(float volume, float pitch, float pan) {
         if(!TablexiaSettings.getInstance().isSoundMuted())
-            return loop(volume, pitch, pan);
+            return sound.loop(volume, pitch, pan);
         else
             return -1;
     }
@@ -109,4 +109,4 @@ public class TablexiaSound implements Sound {
     public void setPan(long soundId, float pan, float volume) {
         sound.setPan(soundId, pan, volume);
     }
-}
+}
\ No newline at end of file
-- 
GitLab