Android Open Source - Robook Main Activity






From Project

Back to project page Robook.

License

The source code is released under:

MIT License

If you think the Android project Robook 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 unipg.dmi.robook;
//w  w w  . ja  v  a 2s . c o  m
import unipg.dmi.robook.R;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.ActivityInfo;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * Activity principale del app. Contiene buttone per avviare il UpdaterService,
 * buttone per avviare la Camera preview, conteggio di numero di likes e number
 * di goal di ogni squadra.
 * 
 * 
 * @author Abdul Rasheed Tutakhail
 * 
 */
public class MainActivity extends AbstractAdkActivity implements
    OnClickListener, OnSharedPreferenceChangeListener {

  String TAG = "MainActivity";
  static SharedPreferences prefs;

  // Variabli che contengono numero di Likes per Apple e Android. I valori
  // vecchie vengono sostituiti con ogni chiamata a Facebook.
  int apple;
  int androidd;
  int oldApple;
  int oldAndroidd;

  int numberOfLikes1 = 0;
  int numberOfLikes2 = 0;

  // Variabili per impostare la telecamera nella Activity
  private Preview mPreview;
  SurfaceView surface;
  SurfaceHolder holder;
  FrameLayout frm;

  // le prime due Variabil contengono numero di Goal di ogni squadra. Gli
  // quattro vengono utilizzati per controllare il movimento backward e foward
  // del Robot quando segna un Goal

  static int goalsA = 0;
  static int goalsB = 0;
  static int charlie = 2;
  static int omega = 2;
  static int stubA = 1;
  static int stubB = 1;

  // Variabili che rappresentano le diverse View della MainActivity
  Button startCamera;
  Button startButton;
  Button stopButton;
  TextView textSquadraA;
  TextView textSquadraB;
  static TextView goalA;
  static TextView goalB;
  TextView fanA;
  TextView fanB;
  static int alpha = 0;
  static int bravo = 0;

  // Viene utilizzato per tenere traccia dello status della rete per verficare
  // che il dispositivo  collegato all'Internet.
  NetworkInfo activeNetwork;
  int i = 0;
  private boolean resumingPending;

  /**
   * Instanzia i campi dichiarati sopra. Assegna i token di accesso al
   * SharedPreferences cosi sono accessibile dagli altri elementi del app.
   */
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // Per avviare l'app in Landscape orientation.
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    activeNetwork = conMgr.getActiveNetworkInfo();

    Log.d(TAG, "On created being called");

    startButton = (Button) findViewById(R.id.startService);
    stopButton = (Button) findViewById(R.id.stopService);
    startCamera = (Button) findViewById(R.id.buttonCamera);

    textSquadraA = (TextView) findViewById(R.id.textsquadraA);
    textSquadraB = (TextView) findViewById(R.id.textSquadraB);
    goalA = (TextView) findViewById(R.id.goalA);
    goalB = (TextView) findViewById(R.id.goalB);

    fanA = (TextView) findViewById(R.id.fanA);
    fanB = (TextView) findViewById(R.id.fanB);
    frm = (FrameLayout) findViewById(R.id.frameLayout);

    textSquadraA.setText("0");
    textSquadraB.setText("0");
    fanA.setText("Android non ha nessun tifoso :(");
    fanB.setText("Apple non ha nessun tifoso :(");

    startButton.setOnClickListener(this);
    stopButton.setOnClickListener(this);
    startCamera.setOnClickListener(this);

    prefs = PreferenceManager
        .getDefaultSharedPreferences(getApplicationContext());
    this.prefs.registerOnSharedPreferenceChangeListener(this);

    SharedPreferences.Editor editor = prefs.edit();

    // Due token di accesso sono introdotto per evitare eventuale violazione
    // dei linee guida di Facebook
    editor.putString("AKEY", getString(R.string.ACCESS_TOKENA));
    editor.putString("BKEY", getString(R.string.ACCESS_TOKENB));

    editor.putLong("expire", 0);
    editor.commit();

  }

  /**
   * @param menu
   *            Sarebbe il Preferences Menu che pu essere attivata premendo
   *            il tasto Menu sul cellulare. Tramite questo menu  possibile
   *            modificare il tempo (in millisecondi) che UpdaterService
   *            monitora la pagina Facebook
   */
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {

    // TODO Auto-generated method stub
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;

  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    Intent prefs = new Intent(this, prefs.class);

    switch (item.getItemId()) {
    case R.id.delay:
      startActivity(prefs);
      break;
    }
    return true;
  }

  @Override
  public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.buttonCamera:

      stopService(new Intent(this, UpdaterService.class));

      break;
    case R.id.startService:
      if (activeNetwork != null && activeNetwork.isConnected()) {
        startService(new Intent(this, UpdaterService.class));
      } else {
        Toast.makeText(
            this,
            "You seem to be not connected to internet, Check your connection",
            android.widget.Toast.LENGTH_LONG).show();
      }
      break;

    case R.id.stopService:
      mPreview = new Preview(this);
      frm.addView(mPreview);
      mPreview.obtainCamera();

      break;

    default:

    }

  }

  public void onWindowFocusChanged(boolean hasFocus) {

    if (hasFocus && resumingPending) {
      Log.d(TAG, "onWindowFocusChanged -- obtainingCamera");
      mPreview.obtainCamera();
      resumingPending = false;
    }
  }

  @Override
  protected void onDestroy() {
    // TODO Auto-generated method stub
    onClick(findViewById(R.id.buttonCamera));
    super.onDestroy();
    Log.d(TAG, "Destroyed was called");
  }

  @Override
  protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    // Prima che catturiamo la camera, controlliamo se il Keyguard 
    // disattivato
    KeyguardManager myKM = (KeyguardManager) getApplicationContext()
        .getSystemService(Context.KEYGUARD_SERVICE);
    if (myKM.inKeyguardRestrictedInputMode()) {
      resumingPending = true;
      Log.d(TAG, "screenLocked");
    } else {
      // mPreview.obtainCamera();
      resumingPending = false;
      Log.d(TAG, "!screenLocked");
    }
    this.prefs.registerOnSharedPreferenceChangeListener(this);

  }

  @Override
  protected void onPause() {
    // TODO Auto-generated method stub
    onClick(findViewById(R.id.buttonCamera));

    if (mPreview != null) {
      mPreview.releaseCamera();
    }
    super.onPause();
    this.prefs.unregisterOnSharedPreferenceChangeListener(this);
    Log.d(TAG, "On Pause was called");

  }

  /**
   * Il listener che viene chiamato quando vengono rilevato dei cambiamenti
   * sul SharedPreferences. Nel nostro caso ci notifica quando il valore di
   * Likes di uno dei Post  stato cambiato.
   */
  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
      String key) {

    // Se il valore di variabili POSTA e POSTB sono valori default
    // (987654321) allora ignora la notifica.
    if (prefs.getInt("POSTA", 0) != 987654321
        && prefs.getInt("POSTB", 0) != 987654321) {

      Log.d(TAG, "SharedPreferences was called");
      // Se il valore delle variabile POSTA o POSTB sono diversi dal
      // valore di variabili alpha e bravo allora abbiamo un nuovo valore
      // di Likes che bisogna aggiornare sul MainActivity.
      if (alpha != prefs.getInt("POSTA", 123456789)
          || bravo != prefs.getInt("POSTB", 123456789)) {
        if (alpha != prefs.getInt("POSTA", 123456789)) {
          alpha = prefs.getInt("POSTA", 123456789);
          textSquadraA.setText("Likes per Android: "
              + Integer.toString(alpha));
          Log.d(TAG, "The value of First Post was updated");

        }

        if (bravo != prefs.getInt("POSTB", 123456789)) {
          bravo = prefs.getInt("POSTB", 123456789);
          textSquadraB.setText("Likes per Apple "
              + Integer.toString(bravo));
          Log.d(TAG, "The value of Second Post was updated");

        }

        // Visto che i valori di Likes delle squadre sono cambiati,
        // bisogna anche aggiornare il nome dei Fans.
        fanA.setText(prefs.getString("FanA",
            "Android non ha nessun tifoso :("));
        fanB.setText(prefs.getString("FanB",
            "Apple non ha nessun tifoso :("));

      }

    } else {

      Log.d(TAG, "Nothing of importance happend in Main activity");
      Log.d(TAG, "SharedPreferences was called in second clause");
    }
  }

  @Override
  protected void doOnCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

  }

  @Override
  protected void doAdkRead(String stringIn) {
    // TODO Auto-generated method stub

  }

  /**
   * Il metodo valuta i valori dei likes della due squadra e manda il commando
   * di movimento al Robot chiamando il metodo WriteAdk() della classe
   * AbstractAdkActivity
   * 
   * @param alpha
   *            Rappresenta il numero di likes della prima squadra
   * @param bravo
   *            Rappresenta il numero di likes della seconda squadra
   * 
   */
  protected static void callAdk(int alpha, int bravo) {
    if (alpha > bravo) {

      WriteAdk("FORWARD");

    }

    else if (bravo > alpha) {
      WriteAdk("BACKWARD");
    }

    else if (bravo == alpha) {
      WriteAdk("STOP");

    }
  }

  /**
   * Il metodo viene chiamato dalla class Preview quando un'immagine viene
   * rilevato dalla Camera. L'obbietivo  quello di aggiornare il numero di
   * goals e ritornare il Robot alla sua posizione di partenza.
   * 
   * @param c
   */
  public static void arduino(Context c) {
    // Ferma il UpdaterService cosi evitiamo di rispondere ad eventuali
    // cambiamenti in numero di Likes
    c.stopService(new Intent(c, UpdaterService.class));
    // Se alpha  maggiore di bravo significa che il numero di Likes della
    // prima squadra sono maggiori. Per evitare l'esecuzione di questo
    // metodo ogni volta che Preview rileva un'immagine, viene confrontato
    // il valore di Likes di una squadra con charlie * stubA oppure omega *
    // stubB prima di esegiurlo.
    if (alpha > bravo && alpha >= charlie * stubA) {
      goalsA++;
      stubA = goalsA;
      goalA.setText("Goals: " + goalsA);
      // FOWARDB  in effetti BACKWARD con 3 secondi di delay
      WriteAdk("FORWARDB");

    }

    if (alpha < bravo && bravo >= omega * stubB) {

      goalsB++;
      stubB = goalsB;
      goalB.setText("Goals: " + goalsB);
      // FOWARDB  in effetti FORWARD con 3 secondi di delay
      WriteAdk("BACKWARDB");

    }

    // Ora si pu ricominciare il UpdaterService, cosi possiamo continuare a
    // monitorare la pagina Facebook.
    c.startService(new Intent(c, UpdaterService.class));
  }
}




Java Source Code List

com.facebook.AccessTokenSource.java
com.facebook.AccessToken.java
com.facebook.AppEventsConstants.java
com.facebook.AppEventsLogger.java
com.facebook.AppLinkData.java
com.facebook.AuthorizationClient.java
com.facebook.BoltsMeasurementEventListener.java
com.facebook.FacebookAppLinkResolver.java
com.facebook.FacebookAuthorizationException.java
com.facebook.FacebookBroadcastReceiver.java
com.facebook.FacebookDialogException.java
com.facebook.FacebookException.java
com.facebook.FacebookGraphObjectException.java
com.facebook.FacebookOperationCanceledException.java
com.facebook.FacebookRequestError.java
com.facebook.FacebookSdkVersion.java
com.facebook.FacebookServiceException.java
com.facebook.FacebookTimeSpentData.java
com.facebook.GetTokenClient.java
com.facebook.HttpMethod.java
com.facebook.InsightsLogger.java
com.facebook.LegacyHelper.java
com.facebook.LoggingBehavior.java
com.facebook.LoginActivity.java
com.facebook.NativeAppCallAttachmentStore.java
com.facebook.NativeAppCallContentProvider.java
com.facebook.NonCachingTokenCachingStrategy.java
com.facebook.ProgressNoopOutputStream.java
com.facebook.ProgressOutputStream.java
com.facebook.RequestAsyncTask.java
com.facebook.RequestBatch.java
com.facebook.RequestOutputStream.java
com.facebook.RequestProgress.java
com.facebook.Request.java
com.facebook.Response.java
com.facebook.SessionDefaultAudience.java
com.facebook.SessionLoginBehavior.java
com.facebook.SessionState.java
com.facebook.Session.java
com.facebook.Settings.java
com.facebook.SharedPreferencesTokenCachingStrategy.java
com.facebook.TestSession.java
com.facebook.TokenCachingStrategy.java
com.facebook.UiLifecycleHelper.java
com.facebook.android.AsyncFacebookRunner.java
com.facebook.android.DialogError.java
com.facebook.android.FacebookError.java
com.facebook.android.Facebook.java
com.facebook.android.FbDialog.java
com.facebook.android.Util.java
com.facebook.internal.AnalyticsEvents.java
com.facebook.internal.AttributionIdentifiers.java
com.facebook.internal.CacheableRequestBatch.java
com.facebook.internal.FileLruCache.java
com.facebook.internal.ImageDownloader.java
com.facebook.internal.ImageRequest.java
com.facebook.internal.ImageResponseCache.java
com.facebook.internal.ImageResponse.java
com.facebook.internal.Logger.java
com.facebook.internal.NativeProtocol.java
com.facebook.internal.PlatformServiceClient.java
com.facebook.internal.ServerProtocol.java
com.facebook.internal.SessionAuthorizationType.java
com.facebook.internal.SessionTracker.java
com.facebook.internal.UrlRedirectCache.java
com.facebook.internal.Utility.java
com.facebook.internal.Validate.java
com.facebook.internal.WorkQueue.java
com.facebook.internal.package-info.java
com.facebook.model.CreateGraphObject.java
com.facebook.model.GraphLocation.java
com.facebook.model.GraphMultiResult.java
com.facebook.model.GraphObjectList.java
com.facebook.model.GraphObject.java
com.facebook.model.GraphPlace.java
com.facebook.model.GraphUser.java
com.facebook.model.JsonUtil.java
com.facebook.model.OpenGraphAction.java
com.facebook.model.OpenGraphObject.java
com.facebook.model.PropertyName.java
com.facebook.widget.FacebookDialog.java
com.facebook.widget.FacebookFragment.java
com.facebook.widget.FriendPickerFragment.java
com.facebook.widget.GraphObjectAdapter.java
com.facebook.widget.GraphObjectCursor.java
com.facebook.widget.GraphObjectPagingLoader.java
com.facebook.widget.LoginButton.java
com.facebook.widget.PickerFragment.java
com.facebook.widget.PlacePickerFragment.java
com.facebook.widget.ProfilePictureView.java
com.facebook.widget.SimpleGraphObjectCursor.java
com.facebook.widget.ToolTipPopup.java
com.facebook.widget.UserSettingsFragment.java
com.facebook.widget.WebDialog.java
unipg.dmi.robook.AbstractAdkActivity.java
unipg.dmi.robook.MainActivity.java
unipg.dmi.robook.Preview.java
unipg.dmi.robook.UpdaterService.java
unipg.dmi.robook.prefs.java