jsettlers.main.android.MainApplication.java Source code

Java tutorial

Introduction

Here is the source code for jsettlers.main.android.MainApplication.java

Source

/*
 * Copyright (c) 2017
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

package jsettlers.main.android;

import static jsettlers.main.android.mainmenu.navigation.Actions.ACTION_PAUSE;
import static jsettlers.main.android.mainmenu.navigation.Actions.ACTION_QUIT;
import static jsettlers.main.android.mainmenu.navigation.Actions.ACTION_QUIT_CONFIRM;
import static jsettlers.main.android.mainmenu.navigation.Actions.ACTION_SAVE;
import static jsettlers.main.android.mainmenu.navigation.Actions.ACTION_UNPAUSE;

import org.androidannotations.annotations.EApplication;

import jsettlers.common.menu.IGameExitListener;
import jsettlers.common.menu.IJoinPhaseMultiplayerGameConnector;
import jsettlers.common.menu.IJoiningGame;
import jsettlers.common.menu.IMapInterfaceConnector;
import jsettlers.common.menu.IMultiplayerConnector;
import jsettlers.common.menu.IStartedGame;
import jsettlers.common.menu.IStartingGame;
import jsettlers.logic.constants.Constants;
import jsettlers.logic.map.loading.list.MapList;
import jsettlers.main.MultiplayerConnector;
import jsettlers.main.android.core.AndroidPreferences;
import jsettlers.main.android.core.GameManager;
import jsettlers.main.android.core.GameService_;
import jsettlers.main.android.core.GameStarter;
import jsettlers.main.android.core.controls.ControlsAdapter;
import jsettlers.main.android.core.controls.GameMenu;

import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;

@EApplication
public class MainApplication extends Application implements GameStarter, GameManager, IGameExitListener {
    static { // configure game to be better usable on Android
        Constants.BUILDING_PLACEMENT_MAX_SEARCH_RADIUS = 10;
    }

    private MapList mapList;
    private IMultiplayerConnector multiplayerConnector;
    private IJoinPhaseMultiplayerGameConnector joinPhaseMultiplayerGameConnector;
    private IStartingGame startingGame;
    private IJoiningGame joiningGame;

    private ControlsAdapter controlsAdapter;

    private LocalBroadcastManager localBroadcastManager;

    @Override
    public void onCreate() {
        super.onCreate();
        System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
        localBroadcastManager = LocalBroadcastManager.getInstance(this);

        // TODO register this only when a game starts
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ACTION_PAUSE);
        intentFilter.addAction(ACTION_UNPAUSE);
        intentFilter.addAction(ACTION_SAVE);
        intentFilter.addAction(ACTION_QUIT);
        intentFilter.addAction(ACTION_QUIT_CONFIRM);
        registerReceiver(broadcastReceiver, intentFilter);
    }

    /**
     * GameStarter implementation
     */
    @Override
    public MapList getMapList() {
        if (mapList == null) {
            mapList = MapList.getDefaultList();
        }
        return mapList;
    }

    @Override
    public IMultiplayerConnector getMultiPlayerConnector() {
        if (multiplayerConnector == null) {
            AndroidPreferences androidPreferences = new AndroidPreferences(this);
            multiplayerConnector = new MultiplayerConnector(androidPreferences.getServer(),
                    androidPreferences.getPlayerId(), androidPreferences.getPlayerName());
        }
        return multiplayerConnector;
    }

    @Override
    public void closeMultiPlayerConnector() {
        if (multiplayerConnector != null) {
            multiplayerConnector.shutdown();
            multiplayerConnector = null;
        }
    }

    @Override
    public IStartingGame getStartingGame() {
        return startingGame;
    }

    @Override
    public void setStartingGame(IStartingGame startingGame) {
        this.startingGame = startingGame;
    }

    @Override
    public IJoiningGame getJoiningGame() {
        return joiningGame;
    }

    @Override
    public void setJoiningGame(IJoiningGame joiningGame) {
        this.joiningGame = joiningGame;
    }

    @Override
    public IJoinPhaseMultiplayerGameConnector getJoinPhaseMultiplayerConnector() {
        return joinPhaseMultiplayerGameConnector;
    }

    @Override
    public void setJoinPhaseMultiPlayerConnector(
            IJoinPhaseMultiplayerGameConnector joinPhaseMultiplayerGameConnector) {
        this.joinPhaseMultiplayerGameConnector = joinPhaseMultiplayerGameConnector;
    }

    @Override
    public IMapInterfaceConnector gameStarted(IStartedGame game) {
        controlsAdapter = new ControlsAdapter(getApplicationContext(), game);
        GameService_.intent(this).start();

        game.setGameExitListener(this);

        return controlsAdapter.getMapContent().getInterfaceConnector();
    }

    /**
     * GameManager implementation
     */
    @Override
    public ControlsAdapter getControlsAdapter() {
        return controlsAdapter;
    }

    @Override
    public GameMenu getGameMenu() {
        return controlsAdapter.getGameMenu();
    }

    @Override
    public boolean isGameInProgress() {
        return controlsAdapter != null;
    }

    /**
     * IGameExitedListener implementation
     */
    @Override
    public void gameExited(IStartedGame game) {
        controlsAdapter = null;
        startingGame = null;
        joiningGame = null;
        joinPhaseMultiplayerGameConnector = null;
        mapList = null; // Nulling this means that any new saved games will be available next time mapList is set

        closeMultiPlayerConnector();

        // Send a local broadcast so that any UI can update if necessary and the service can stop itself
        localBroadcastManager.sendBroadcast(new Intent(ACTION_QUIT_CONFIRM));
    }

    private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            switch (intent.getAction()) {
            case ACTION_PAUSE:
                controlsAdapter.getGameMenu().pause();
                break;
            case ACTION_UNPAUSE:
                controlsAdapter.getGameMenu().unPause();
                break;
            case ACTION_SAVE:
                controlsAdapter.getGameMenu().save();
                break;
            case ACTION_QUIT:
                controlsAdapter.getGameMenu().quit();
                break;
            case ACTION_QUIT_CONFIRM:
                controlsAdapter.getGameMenu().quitConfirm();
                break;
            }
        }
    };
}