/* * 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.File; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Vector; import locus.api.android.ActionDisplay.ExtraAction; import locus.api.android.ActionDisplayPoints; import locus.api.android.objects.PackWaypoints; import locus.api.objects.extra.ExtraData; import locus.api.objects.extra.Location; import locus.api.objects.extra.Waypoint; import menion.android.whereyougo.gui.dialogs.DialogChooseCartridge; import menion.android.whereyougo.gui.dialogs.DialogMain; import menion.android.whereyougo.gui.extension.CustomMain; import menion.android.whereyougo.gui.extension.MainApplication; import menion.android.whereyougo.gui.extension.UtilsGUI; import menion.android.whereyougo.gui.location.SatelliteScreen; import menion.android.whereyougo.guiding.GuidingScreen; import menion.android.whereyougo.settings.Loc; import menion.android.whereyougo.settings.UtilsSettings; import menion.android.whereyougo.utils.Const; import menion.android.whereyougo.utils.FileSystem; import menion.android.whereyougo.utils.Images; import menion.android.whereyougo.utils.Logger; import menion.android.whereyougo.utils.ManagerNotify; import menion.android.whereyougo.utils.Utils; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import cz.matejcik.openwig.Engine; import cz.matejcik.openwig.formats.CartridgeFile; public class Main extends CustomMain { private static final String TAG = "Main"; public static WUI wui = new WUI(); public static WLocationService wLocationService = new WLocationService(); public static CartridgeFile cartridgeFile; private static Vector<CartridgeFile> cartridgeFiles; public static String selectedFile; public static void setSelectedFile(String filepath) { Main.selectedFile = filepath; } public static String getSelectedFile() { return selectedFile; } @Override protected void eventFirstInit() { // call after start actions here MainAfterStart.afterStartAction(); } @Override protected void eventSecondInit() { } @Override protected void eventCreateLayout() { setContentView(R.layout.layout_main); // set title ((TextView) findViewById(R.id.title_text)).setText( MainApplication.APP_NAME); // define buttons View.OnClickListener mOnClickListener = new View.OnClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.button_start: clickStart(); break; case R.id.button_gps: Intent intent02 = new Intent(Main.this, SatelliteScreen.class); startActivity(intent02); break; case R.id.button_settings: UtilsSettings.showSettings(Main.this); break; case R.id.button_map: clickMap(); break; case R.id.button_logo: getSupportFragmentManager(). beginTransaction(). add(new DialogMain(), "DIALOG_TAG_MAIN"). commitAllowingStateLoss(); break; } } }; UtilsGUI.setButtons(this, new int[] { R.id.button_start, R.id.button_map, R.id.button_gps, R.id.button_settings, R.id.button_logo}, mOnClickListener, null); } private void clickStart() { // check cartridges if (!isAnyCartridgeAvailable()) { return; } DialogChooseCartridge dialog = new DialogChooseCartridge(); dialog.setParams(cartridgeFiles); getSupportFragmentManager(). beginTransaction(). add(dialog, "DIALOG_TAG_CHOOSE_CARTRIDGE"). commitAllowingStateLoss(); } private void clickMap() { // check cartridges if (!isAnyCartridgeAvailable()) { return; } try { // complete waypoints data PackWaypoints pack = new PackWaypoints("WhereYouGo"); Bitmap b = Images.getImageB(R.drawable.ic_title_logo, (int) Utils.getDpPixels(32.0f)); pack.setBitmap(b); for (CartridgeFile cartridge : cartridgeFiles) { // do not show waypoints that are "Play anywhere" (with zero coordinates) if (cartridge.latitude % 360.0 == 0 && cartridge.longitude % 360.0 == 0) { continue; } // construct waypoint Location loc = new Location(TAG); loc.setLatitude(cartridge.latitude); loc.setLongitude(cartridge.longitude); Waypoint wpt = new Waypoint(cartridge.name, loc); wpt.addParameter(ExtraData.PAR_DESCRIPTION, cartridge.description); wpt.addUrl(cartridge.url); pack.addWaypoint(wpt); } ActionDisplayPoints.sendPack(this, pack, ExtraAction.NONE); } catch (Exception e) { Logger.e(TAG, "clickMap()", e); } } private boolean isAnyCartridgeAvailable() { if (cartridgeFiles == null || cartridgeFiles.size() == 0) { UtilsGUI.showDialogInfo(Main.this, getString(R.string.no_wherigo_cartridge_available, FileSystem.ROOT, MainApplication.APP_NAME)); return false; } else { return true; } } @Override protected void eventDestroyApp() { } @Override public void onResume() { super.onResume(); refreshCartridges(); } public static void loadCartridge(OutputStream log) { try { WUI.startProgressDialog(); Engine.newInstance(cartridgeFile, log, wui, wLocationService).start(); } catch (Throwable t) {} } public static void restoreCartridge(OutputStream log) { try { WUI.startProgressDialog(); Engine.newInstance(cartridgeFile, log, wui, wLocationService).restore(); } catch (Throwable t) {} } public static File getSaveFile() throws IOException { try { File file = new File(selectedFile.substring(0, selectedFile.length() - 3) + "ows"); return file; } catch (SecurityException e) { Logger.e(TAG, "getSyncFile()", e); return null; } } public static void setBitmapToImageView(Bitmap i, ImageView iv) { Logger.w(TAG, "setBitmapToImageView(), " + i.getWidth() + " x " + i.getHeight()); float width = i.getWidth() - 10; float height = (Const.SCREEN_WIDTH / width) * i.getHeight(); if ((height / Const.SCREEN_HEIGHT) > 0.60f) { height = 0.60f * Const.SCREEN_HEIGHT; width = (height / i.getHeight()) * i.getWidth(); } iv.setMinimumWidth((int) width); iv.setMinimumHeight((int) height); iv.setImageBitmap(i); } private void refreshCartridges() { Logger.w(TAG, "refreshCartridges(), " + (Main.selectedFile == null)); if (Main.selectedFile != null) return; // load cartridge files File[] files = FileSystem.getFiles(FileSystem.ROOT, "gwc"); cartridgeFiles = new Vector<CartridgeFile>(); // add cartridges to map ArrayList<Waypoint> wpts = new ArrayList<Waypoint>(); File actualFile = null; if (files != null) { for (File file : files) { try { actualFile = file; CartridgeFile cart = CartridgeFile.read(new WSeekableFile(file), new WSaveFile(file)); if (cart != null) { cart.filename = file.getAbsolutePath(); Location loc = new Location(TAG); loc.setLatitude(cart.latitude); loc.setLongitude(cart.longitude); Waypoint waypoint = new Waypoint(cart.name, loc); cartridgeFiles.add(cart); wpts.add(waypoint); } } catch (Exception e) { Logger.w(TAG, "refreshCartridge(), file:" + actualFile + ", e:" + e.toString()); ManagerNotify.toastShortMessage(Loc.get(R.string.invalid_cartridge, file.getName())); } } } if (wpts.size() > 0) { // TODO add items on map } } /** * Call activity that guide onto point. * @param activity * @return true if internal activity was called. False if external by intent. */ public static boolean callGudingScreen(Activity activity) { Intent intent = new Intent(activity, GuidingScreen.class); activity.startActivity(intent); return true; } @Override protected int getCloseValue() { return CLOSE_DESTROY_APP_NO_DIALOG; } @Override protected String getCloseAdditionalText() { return null; } @Override protected void eventRegisterOnly() { } }