From 31a8e50754ad61df28801d01f6d0c12daed1c3d4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 29 Jan 2016 01:35:54 -0500 Subject: [PATCH] v0.3.4: more language button work --- .../shatteredpixeldungeon/Preferences.java | 4 +- .../ShatteredPixelDungeon.java | 23 +++-- .../messages/Messages.java | 24 +++--- .../ui/LanguageButton.java | 84 +++++++++++++------ 4 files changed, 90 insertions(+), 45 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/Preferences.java b/src/com/shatteredpixel/shatteredpixeldungeon/Preferences.java index 5dad37002..bee982509 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/Preferences.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/Preferences.java @@ -20,9 +20,8 @@ */ package com.shatteredpixel.shatteredpixeldungeon; -import com.watabou.noosa.Game; - import android.content.SharedPreferences; +import com.watabou.noosa.Game; enum Preferences { @@ -42,6 +41,7 @@ enum Preferences { public static final String KEY_FLIPTOOLBAR = "flipped_ui"; public static final String KEY_FLIPTAGS = "flip_tags"; public static final String KEY_BARMODE = "toolbar_mode"; + public static final String KEY_LANG = "language"; public static final String KEY_INTRO = "intro"; public static final String KEY_BRIGHTNESS = "brightness"; public static final String KEY_VERSION = "version"; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java b/src/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java index 3a90494c8..33ed4c77c 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ShatteredPixelDungeon.java @@ -20,21 +20,22 @@ */ package com.shatteredpixel.shatteredpixeldungeon; -import javax.microedition.khronos.opengles.GL10; - import android.annotation.SuppressLint; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; - -import com.watabou.noosa.Game; -import com.watabou.noosa.audio.Music; -import com.watabou.noosa.audio.Sample; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene; +import com.watabou.noosa.Game; +import com.watabou.noosa.audio.Music; +import com.watabou.noosa.audio.Sample; + +import javax.microedition.khronos.opengles.GL10; +import java.util.Locale; public class ShatteredPixelDungeon extends Game { @@ -339,6 +340,16 @@ public class ShatteredPixelDungeon extends Game { return Preferences.INSTANCE.getInt( Preferences.KEY_BRIGHTNESS, 0 ); } + public static void language(Messages.Languages lang) { + Preferences.INSTANCE.put( Preferences.KEY_LANG, lang.code()); + } + + public static Messages.Languages language() { + String code = Preferences.INSTANCE.getString(Preferences.KEY_LANG, null); + if (code == null) return Messages.Languages.matchLocale(Locale.getDefault()); + else return Messages.Languages.matchCode(code); + } + public static void lastClass( int value ) { Preferences.INSTANCE.put( Preferences.KEY_LAST_CLASS, value ); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java b/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java index b4a608dcc..d728cce3c 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/messages/Messages.java @@ -20,6 +20,8 @@ */ package com.shatteredpixel.shatteredpixeldungeon.messages; +import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; + import java.util.Arrays; import java.util.Enumeration; import java.util.HashMap; @@ -37,7 +39,7 @@ import java.util.ResourceBundle; public class Messages { public enum Languages { - ENGLISH("english", "en", Status.REVIEWED), + ENGLISH("english", "", Status.REVIEWED), RUSSIAN("русский", "ru", Status.UNREVIEWED), CHINESE("中文", "zh", Status.UNREVIEWED), //Simplified @@ -45,10 +47,9 @@ public class Messages { KOREAN("한국어", "ko", Status.UNREVIEWED), GERMAN("deutsch", "de", Status.INCOMPLETE), - - POLISH("polski", "pl", Status.UNFINISHED), - SPANISH("español", "es", Status.UNFINISHED), - FRENCH("français", "fr", Status.UNFINISHED); + POLISH("polski", "pl", Status.INCOMPLETE), + SPANISH("español", "es", Status.INCOMPLETE), + FRENCH("français", "fr", Status.INCOMPLETE); private String name; private String code; @@ -73,7 +74,10 @@ public class Messages { } public static Languages matchLocale(Locale locale){ - String code = locale.getLanguage(); + return matchCode(locale.getLanguage()); + } + + public static Languages matchCode(String code){ for (Languages lang : Languages.values()){ if (lang.code().equals(code)) return lang; @@ -82,9 +86,8 @@ public class Messages { } public enum Status{ - //below 50% complete languages are not added. - UNFINISHED, //50-80% complete - INCOMPLETE, //80-99% complete + //below 60% complete languages are not added. + INCOMPLETE, //60-99% complete UNREVIEWED, //100% complete REVIEWED //100% reviewed } @@ -124,8 +127,7 @@ public class Messages { }; static{ - //TODO:load in locale from a preference, use default only if none set. - setup(Languages.matchLocale(Locale.getDefault())); + setup(ShatteredPixelDungeon.language()); } public static void setup( Languages lang ){ diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java index 373b3a625..1157cdb1c 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/LanguageButton.java @@ -24,12 +24,16 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.TitleScene; -import com.shatteredpixel.shatteredpixeldungeon.windows.WndOptions; import com.watabou.noosa.Image; import com.watabou.noosa.RenderedText; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.ui.Button; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; + public class LanguageButton extends Button { private Image image; @@ -52,14 +56,11 @@ public class LanguageButton extends Button { private void updateIcon(){ switch(Messages.lang().status()){ - case UNFINISHED: - image.tint(1, 0, 0, .4f); - break; case INCOMPLETE: - image.tint(1, .5f, 0, .4f); + image.tint(1, 0, 0, .5f); break; case UNREVIEWED: - image.tint(1, 0.5f, 0, .25f); + image.tint(1, .5f, 0, .5f); break; } } @@ -86,27 +87,58 @@ public class LanguageButton extends Button { @Override protected void onClick() { - final Messages.Languages[] langs = Messages.Languages.values(); - final String[] names = new String[langs.length]; - for (int i = 0; i < names.length; i++){ - names[i] = Messages.titleCase(langs[i].nativeName()); - switch(langs[i].status()){ - case UNFINISHED: - names[i] += " - UNFINISHED"; - break; - case INCOMPLETE: - names[i] += " - INCOMPLETE"; - break; + final ArrayList langs = new ArrayList<>(Arrays.asList(Messages.Languages.values())); + + Messages.Languages nativeLang = Messages.Languages.matchLocale(Locale.getDefault()); + langs.remove(nativeLang); + //move the native language to the top. + langs.add(0, nativeLang); + + parent.add(new WndLangs(langs)); + } + + public static class WndLangs extends Window{ + + private int WIDTH = 60; + private int BTN_HEIGHT = 14; + + WndLangs(final List langs){ + super(); + + int y = 0; + for (int i = 0; i < langs.size(); i++){ + final int langIndex = i; + RedButton btn = new RedButton(Messages.titleCase(langs.get(i).nativeName())){ + @Override + protected void onClick() { + super.onClick(); + Messages.setup(langs.get(langIndex)); + ShatteredPixelDungeon.language(langs.get(langIndex)); + RenderedText.clearCache(); + ShatteredPixelDungeon.switchNoFade(TitleScene.class); + } + }; + if (ShatteredPixelDungeon.language() == langs.get(i)){ + btn.textColor(TITLE_COLOR); + } else { + switch (langs.get(i).status()) { + case INCOMPLETE: + btn.textColor(0x999999); + break; + case UNREVIEWED: + btn.textColor(0xCCCCCC); + break; + } + } + btn.setSize(WIDTH, BTN_HEIGHT); + btn.setPos(0, y); + add(btn); + y += 16; } + resize(WIDTH, y-2); + } - parent.add( new WndOptions("Languages", "Select a language(proper menu soon)", names ) { - @Override - protected void onSelect(int index) { - Messages.setup(langs[index]); - updateIcon(); - ShatteredPixelDungeon.switchNoFade(TitleScene.class); - RenderedText.clearCache(); - } - }); + + } }