Android Open Source - DistributedMemory Lobby Activity






From Project

Back to project page DistributedMemory.

License

The source code is released under:

Apache License

If you think the Android project DistributedMemory listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.faudroids.distributedmemory.ui;
/*from w  ww  .  j  a va2 s  .c o  m*/
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;

import com.google.common.collect.Lists;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.android.Contents;

import org.faudroids.distributedmemory.R;
import org.faudroids.distributedmemory.common.BaseActivity;
import org.faudroids.distributedmemory.core.Device;
import org.faudroids.distributedmemory.core.HostGameListener;
import org.faudroids.distributedmemory.core.HostGameManager;
import org.faudroids.distributedmemory.network.NetworkManager;
import org.faudroids.distributedmemory.utils.QRCodeEncoder;
import org.faudroids.distributedmemory.utils.ServiceUtils;

import java.util.Comparator;
import java.util.List;

import javax.inject.Inject;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;


public class LobbyActivity extends BaseActivity implements  HostGameListener {

  @Inject HostGameManager hostGameManager;
  @Inject NetworkManager networkManager;
  @Inject QRCodeUtils qrCodeUtils;
  @Inject ServiceUtils serviceUtils;
  @InjectView(R.id.start_game) Button startGameButton;
  @InjectView(R.id.peers_list) ListView peersList;
  @InjectView(R.id.empty) View emptyView;
  private ArrayAdapter<String> adapter;
    private final BroadcastReceiver serverStateReceiver = new ServerStateBroadcastReceiver();


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // if this activity is called from the host notification check if game is running --> continue
    if (hostGameManager.isGameRunning()) {
      Intent intent = new Intent(this, GameActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
      startActivity(intent);
      finish();
      return;
    }

    setContentView(R.layout.activity_lobby);
    ButterKnife.inject(this);
    adapter = new ArrayAdapter<>(this, R.layout.list_item);
    peersList.setAdapter(adapter);
  }


  @OnClick(R.id.start_game)
  public void startGame() {
    hostGameManager.startGame();
  }


  @OnClick(R.id.join_help)
  public void helpJoinGame() {
    // prepare QR code dialog
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater layoutInflater = LayoutInflater.from(this);
    ImageView imageView = (ImageView) layoutInflater.inflate(R.layout.qrcode, null);

    int qrCodeDimension = 500;
    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(
        qrCodeUtils.writeHostInfo(networkManager.getHostInfo()),
        null,
        Contents.Type.TEXT,
        BarcodeFormat.QR_CODE.toString(), qrCodeDimension);
    try {
      Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
      imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
      e.printStackTrace();
      return;
    }

    final AlertDialog qrCodeDialog = builder
        .setTitle(getString(R.string.join_game_host_host_title))
        .setMessage(getString(R.string.join_game_help_host_instructions2))
        .setView(imageView)
        .setPositiveButton(android.R.string.ok, null)
        .create();

    // show help dialog
    new AlertDialog.Builder(this)
        .setTitle(getString(R.string.join_game_help_title))
        .setMessage(getString(R.string.join_game_help_host_instructions1))
        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
            qrCodeDialog.show();
          }
        })
        .setNegativeButton(android.R.string.cancel, null)
        .show();
  }


    @Override
    public void onPause() {
        hostGameManager.unregisterHostGameListener(this);
        unregisterReceiver(serverStateReceiver);
        super.onPause();
    }


    @Override
    public void onResume() {
        super.onResume();

    // if lobby is started after having shut down host via notification
    if (!serviceUtils.isServiceRunning(HostService.class)) finish();

    registerReceiver(serverStateReceiver, new IntentFilter(HostService.ACTION_HOST_STATE_CHANGED));
        hostGameManager.registerHostGameListener(this);
    onClientsChanged();
    }


  @Override
  public void onBackPressed() {
    new AlertDialog.Builder(this)
        .setTitle(R.string.activity_lobby_back_pressed_title)
        .setMessage(R.string.activity_lobby_back_pressed_message)
        .setPositiveButton(R.string.btn_continue, null)
        .setNegativeButton(R.string.btn_stop, new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent(LobbyActivity.this, HostService.class);
            stopService(intent);
            finish();
          }
        })
        .show();
  }


  @Override
  public void onClientAdded(Device device) {
    onClientsChanged();
    }


  @Override
  public void onGameStarted() {
    Intent intent = new Intent(this, GameActivity.class);
    startActivity(intent);
    finish();
  }


  @Override
  public void onGameStopped() { }


  @Override
  public void onClientLost(Device device) {
    onClientsChanged();
  }


  @Override
  protected List<Object> getModules() {
    return Lists.<Object>newArrayList(new UiModule());
  }


  private void onClientsChanged() {
    // update clients list
    adapter.clear();
    boolean foundHostClient = false;
    for (Device device : hostGameManager.getConnectedDevices()) {
      String clientName = device.getName();
      if (!foundHostClient && clientName.equals(Build.MODEL)) {
        foundHostClient = true;
        clientName = getString(R.string.activity_lobby_host_client, clientName);
      }
      adapter.add(clientName);
    }
    adapter.sort(new Comparator<String>() {
      @Override
      public int compare(String lhs, String rhs) {
        return lhs.compareTo(rhs);
      }
    });
    adapter.notifyDataSetChanged();

    // update waiting spinner and start game button
    if (adapter.getCount() == 0) {
      emptyView.setVisibility(View.VISIBLE);
      startGameButton.setEnabled(false);
    } else {
      emptyView.setVisibility(View.GONE);
      startGameButton.setEnabled(true);
    }
  }


    private class ServerStateBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
      boolean started = intent.getBooleanExtra(HostService.EXTRA_HOST_RUNNING, false);
      boolean unknownError = intent.getBooleanExtra(HostService.EXTRA_HOST_START_ERROR_UNKNOWN, false);
      boolean duplicateServiceError = intent.getBooleanExtra(HostService.EXTRA_HOST_START_ERROR_DUPLICATE_SERVICE, false);

      // if there was an error starting server show dialog
      if (!started && unknownError || duplicateServiceError) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context)
            .setTitle(R.string.activity_lobby_starting_error_title)
            .setIcon(R.drawable.ic_action_error)
            .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                finish();
              }
            });
        if (unknownError) builder.setMessage(R.string.activity_lobby_starting_error_unknown_message);
        else builder.setMessage(R.string.activity_lobby_starting_error_duplicate_service_message);
        Dialog dialog = builder.create();
        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
          @Override
          public void onDismiss(DialogInterface dialog) {
            finish();
          }
        });
        dialog.show();

      } else if(!started) {
        finish();
      }
        }

    }
}




Java Source Code List

org.faudroids.distributedmemory.ApplicationTest.java
org.faudroids.distributedmemory.app.AppModule.java
org.faudroids.distributedmemory.app.DistributedMemoryApplication.java
org.faudroids.distributedmemory.common.BaseActivity.java
org.faudroids.distributedmemory.common.BaseApplication.java
org.faudroids.distributedmemory.common.BaseListActivity.java
org.faudroids.distributedmemory.common.BaseService.java
org.faudroids.distributedmemory.common.CommonModule.java
org.faudroids.distributedmemory.common.Injector.java
org.faudroids.distributedmemory.core.Card.java
org.faudroids.distributedmemory.core.ClientGameListener.java
org.faudroids.distributedmemory.core.ClientGameManager.java
org.faudroids.distributedmemory.core.CoreModule.java
org.faudroids.distributedmemory.core.Device.java
org.faudroids.distributedmemory.core.Evaluation.java
org.faudroids.distributedmemory.core.GameSetupInfo.java
org.faudroids.distributedmemory.core.GameStateManager.java
org.faudroids.distributedmemory.core.GameState.java
org.faudroids.distributedmemory.core.HostGameListener.java
org.faudroids.distributedmemory.core.HostGameManager.java
org.faudroids.distributedmemory.core.HostGameStateManager.java
org.faudroids.distributedmemory.core.HostStateTransitionListener.java
org.faudroids.distributedmemory.core.HostStateTransition.java
org.faudroids.distributedmemory.core.MessageConstants.java
org.faudroids.distributedmemory.core.MessageReader.java
org.faudroids.distributedmemory.core.MessageWriter.java
org.faudroids.distributedmemory.core.Player.java
org.faudroids.distributedmemory.network.BroadcastMessage.java
org.faudroids.distributedmemory.network.ClientNetworkListener.java
org.faudroids.distributedmemory.network.ConnectionHandlerFactory.java
org.faudroids.distributedmemory.network.ConnectionHandler.java
org.faudroids.distributedmemory.network.HostInfo.java
org.faudroids.distributedmemory.network.HostNetworkListener.java
org.faudroids.distributedmemory.network.HostSocketHandler.java
org.faudroids.distributedmemory.network.JsonConnectionHandler.java
org.faudroids.distributedmemory.network.NetworkManager.java
org.faudroids.distributedmemory.network.NetworkModule.java
org.faudroids.distributedmemory.network.StringConnectionHandler.java
org.faudroids.distributedmemory.ui.AboutActivity.java
org.faudroids.distributedmemory.ui.BitmapCache.java
org.faudroids.distributedmemory.ui.ClientUtils.java
org.faudroids.distributedmemory.ui.GameActivity.java
org.faudroids.distributedmemory.ui.HelpActivity.java
org.faudroids.distributedmemory.ui.HelpDialogActivity.java
org.faudroids.distributedmemory.ui.HostGameActivity.java
org.faudroids.distributedmemory.ui.HostService.java
org.faudroids.distributedmemory.ui.JoinGameActivity.java
org.faudroids.distributedmemory.ui.LobbyActivity.java
org.faudroids.distributedmemory.ui.MainActivity.java
org.faudroids.distributedmemory.ui.QRCodeUtils.java
org.faudroids.distributedmemory.ui.StopServerBroadcastReceiver.java
org.faudroids.distributedmemory.ui.UiModule.java
org.faudroids.distributedmemory.utils.Assert.java
org.faudroids.distributedmemory.utils.NotificationUtils.java
org.faudroids.distributedmemory.utils.QRCodeEncoder.java
org.faudroids.distributedmemory.utils.ServiceUtils.java
org.faudroids.distributedmemory.utils.UtilsModule.java