/* * This file is part of WhereYouGo. * * WhereYouGo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WhereYouGo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WhereYouGo. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2012 Menion <whereyougo@asamm.cz> */ package menion.android.whereyougo; import java.io.ByteArrayInputStream; import menion.android.whereyougo.gui.CartridgeDetails; import menion.android.whereyougo.gui.CartridgeMainMenu; import menion.android.whereyougo.gui.Details; import menion.android.whereyougo.gui.InputScreen; import menion.android.whereyougo.gui.ListActions; import menion.android.whereyougo.gui.ListTargets; import menion.android.whereyougo.gui.ListTasks; import menion.android.whereyougo.gui.ListThings; import menion.android.whereyougo.gui.ListZones; import menion.android.whereyougo.gui.PushDialog; import menion.android.whereyougo.gui.Refreshable; import menion.android.whereyougo.gui.extension.CustomActivity; import menion.android.whereyougo.gui.extension.UtilsGUI; import menion.android.whereyougo.guiding.GuidingScreen; import menion.android.whereyougo.settings.Settings; import menion.android.whereyougo.utils.A; import menion.android.whereyougo.utils.Logger; import se.krka.kahlua.vm.LuaClosure; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.os.Vibrator; import android.widget.Toast; import cz.matejcik.openwig.Engine; import cz.matejcik.openwig.EventTable; import cz.matejcik.openwig.Media; import cz.matejcik.openwig.platform.UI; public class WUI implements UI { private static final String TAG = "WUI"; public static final int SCREEN_MAIN = 10; public static final int SCREEN_CART_DETAIL = 11; public static final int SCREEN_ACTIONS = 12; public static final int SCREEN_TARGETS = 13; public static boolean saving = false; public void blockForSaving() { Logger.w(TAG, "blockForSaving()"); saving = true; } public void unblock() { Logger.w(TAG, "unblock()"); saving = false; } public void debugMsg(String msg) { Logger.w(TAG, "debugMsg(" + msg.trim() + ")"); } public void playSound(byte[] data, String mime) { Logger.e(TAG, "playSound(" + (data != null ? data.length : 0) + ", "+ mime + ")"); // test on wrong data if (data == null || data.length == 0 || mime == null) return; try { ByteArrayInputStream bis = new ByteArrayInputStream(data); if ("audio/x-wav".equals(mime)) { A.getManagerAudio().playMp3File("audio", ".wav", bis); } else if ("audio/mpeg".equals(mime)) { A.getManagerAudio().playMp3File("audio", ".mp3", bis); } } catch (Exception e) { Logger.e(TAG, "play(), cart:" + Main.cartridgeFile.code, e); } } public void showError(String msg) { Logger.w(TAG, "showError(" + msg.trim() + ")"); UtilsGUI.showDialogError(Settings.getCurrentActivity(), msg); } public void pushDialog(String[] texts, Media[] media, String button1, String button2, LuaClosure callback) { Logger.w(TAG, "pushDialog(" + texts + ", " + media + ", " + button1 + ", " + button2 + ", " + callback + ")"); Activity activity = getParentActivity(); PushDialog.setDialog(texts, media, button1, button2, callback); Intent intent = new Intent(activity, PushDialog.class); activity.startActivity(intent); closeActivity(activity); Vibrator v = (Vibrator) A.getMain().getSystemService(Context.VIBRATOR_SERVICE); v.vibrate(25); } public void pushInput(EventTable input) { Logger.w(TAG, "pushInput(" + input + ")"); Activity activity = getParentActivity(); InputScreen.setInput(input); Intent intent = new Intent(activity, InputScreen.class); activity.startActivity(intent); closeActivity(activity); } public void refresh() { Logger.w(TAG, "refresh(), currentActivity:" + Settings.getCurrentActivity()); if (Settings.getCurrentActivity() != null && Settings.getCurrentActivity() instanceof Refreshable) { ((Refreshable) Settings.getCurrentActivity()).refresh(); } } public void setStatusText(final String text) { Logger.w(TAG, "setStatus(" + text + ")"); if (text == null || text.length() == 0) return; try { final CustomActivity activity = getParentActivity(); activity.runOnUiThread(new Runnable() { public void run() { Toast.makeText(activity, text, Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { Logger.e(TAG, "setStatusText(" + text + ")", e); } } public void showScreen(int screenId, EventTable details) { Activity activity = getParentActivity(); Logger.w(TAG, "showScreen(" + screenId + "), parent:" + activity + ", param:" + details); // disable currentActivity Settings.setCurrentActivity(null); switch (screenId) { case MAINSCREEN: Intent intent01 = new Intent(activity, CartridgeMainMenu.class); activity.startActivity(intent01); return; case SCREEN_CART_DETAIL: Intent intent02 = new Intent(activity, CartridgeDetails.class); activity.startActivity(intent02); return; case DETAILSCREEN: Details.et = details; Intent intent03 = new Intent(activity, Details.class); activity.startActivity(intent03); return; case INVENTORYSCREEN: Intent intent04 = new Intent(activity, ListThings.class); intent04.putExtra("title", "Inventory"); intent04.putExtra("mode", ListThings.INVENTORY); activity.startActivity(intent04); return; case ITEMSCREEN: Intent intent05 = new Intent(activity, ListThings.class); intent05.putExtra("title", "You see"); intent05.putExtra("mode", ListThings.SURROUNDINGS); activity.startActivity(intent05); return; case LOCATIONSCREEN: Intent intent06 = new Intent(activity, ListZones.class); intent06.putExtra("title", "Locations"); activity.startActivity(intent06); return; case TASKSCREEN: Intent intent07 = new Intent(activity, ListTasks.class); intent07.putExtra("title", "Tasks"); activity.startActivity(intent07); return; case SCREEN_ACTIONS: Intent intent09 = new Intent(activity, ListActions.class); if (details != null) intent09.putExtra("title", details.name); activity.startActivity(intent09); return; case SCREEN_TARGETS: Intent intent10 = new Intent(activity, ListTargets.class); if (details != null) intent10.putExtra("title", details.name); activity.startActivity(intent10); return; } closeActivity(activity); } private static ProgressDialog progressDialog; public static void showTextProgress(final String text) { Logger.i(TAG, "showTextProgress(" + text + ")"); } public static void startProgressDialog() { progressDialog = new ProgressDialog(((CustomActivity) A.getMain())); progressDialog.setMessage("Loading..."); progressDialog.show(); } public void start() { ((CustomActivity) A.getMain()).runOnUiThread(new Runnable() { public void run() { if (progressDialog != null) progressDialog.dismiss(); } }); showScreen(MAINSCREEN, null); } public void end() { if (progressDialog != null) progressDialog.dismiss(); Engine.kill(); showScreen(SCREEN_MAIN, null); } private static CustomActivity getParentActivity() { CustomActivity activity = (CustomActivity) Settings.getCurrentActivity(); if (activity == null) activity = (CustomActivity) A.getMain(); return activity; } private static void closeActivity(Activity activity) { if (activity instanceof PushDialog || activity instanceof GuidingScreen) { activity.finish(); } } @Override public String getDeviceId() { String appVersion = ""; try { appVersion = A.getMain().getPackageManager().getPackageInfo(A.getMain().getPackageName(), 0).versionName; } catch (Exception e) {} return "WhereYouGo, app:" + appVersion; } }