MessageListActivity.java :  » App » staaar » ssi » staaar » Android Open Source

Android Open Source » App » staaar 
staaar » ssi » staaar » MessageListActivity.java
package ssi.staaar;

import java.util.ArrayList;

import ssi.peeno.model.Message;
import ssi.staar.R;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TabHost.OnTabChangeListener;

public class MessageListActivity extends TabActivity {
  private LocationManager locManager;
  private LocationListener locListener;
    private long minTime;
    private float minMeters;
    private float radiusMeters;
    private ArrayAdapter<Message> messagePublicList;
    private ArrayAdapter<Message> messagePrivateList;
    private int currentList;
  private double currentLat;
  private double currentLong;
  private double currentAlt;
  private static ArrayList<Message> currentPublicMessages;
  private static ArrayList<Message> currentPrivateMessages;
  private static boolean gpsEnabled;
  private final Handler msgListDownloadHandler = new Handler(); //handler which manage modification for updatemsglist
  private final Runnable updateThread = new Runnable() {  
    @Override
    public void run() {
      updatePrivateMessageList();
      updatePublicMessageList();
    }
  }; //thread which update msglists in gui
  private Location currentLocation;
  
  public static ArrayList<Message> getPrivateMessageList() {
    return currentPrivateMessages;
  }

  public static ArrayList<Message> getPublicMessageList() {
    return currentPublicMessages;
  }

  private void checkForNotification() {
    Staaar.stControl.checkNotification();
  }

  private void CreateMenu(Menu menu) {
    menu.setQwertyMode(true);
    MenuItem menu1 = menu.add(0, 0, 0, "Settings");
    {
      menu1.setIcon(R.drawable.settings);
    }
    MenuItem menu2 = menu.add(0, 1, 1, "Logout");
    {
      menu2.setIcon(R.drawable.logout);
    }
  }

  public static boolean isGpsEnabled() {
    return gpsEnabled;
  }
  
  public void goToAddMessageActivity(View view) {
    Intent iAddMessage = new Intent();
    iAddMessage.setClass(getApplicationContext(), AddMessageActivity.class);
    startActivity(iAddMessage);
  }

  public void goToAugmentedRealityActivity(View view) {
    Intent iAR = new Intent();
    iAR.setClass(getApplicationContext(), ARActivity.class);
    iAR.putExtra("currentLat", currentLat);
    iAR.putExtra("currentLong", currentLong);
    iAR.putExtra("currentAlt", currentAlt);
    startActivity(iAR);
  }

  public void goToManageFriendsActivity(View view) {
    Intent iFriends = new Intent();
    iFriends.setClass(getApplicationContext(), ManageFriendsActivity.class);
    startActivity(iFriends);
  }

  private void logout() {
    Staaar.stControl.logout();
    Log.d("[STAAAR]", "logging out");
    finish();
  }

  private boolean MenuChoice(MenuItem item) {
    switch(item.getItemId()){
      case 0:
        Intent iSet = new Intent();
        iSet.setClass(getApplicationContext(), SettingsActivity.class);
        startActivity(iSet);
              return true;
      case 1:
        logout();
              return true;
    }
    return false;
  }

  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
    setContentView(R.layout.messages);
    TabHost mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.addTab(mTabHost.newTabSpec("publicMessage").setIndicator("Public").setContent(R.id.publicMessageList));
      mTabHost.addTab(mTabHost.newTabSpec("privateMessage").setIndicator("Private").setContent(R.id.privateMessageList));
      mTabHost.setCurrentTab(0);
      currentList = R.id.publicMessageList;
      mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
      @Override
      public void onTabChanged(String tabId) {
        System.out.println(tabId);  
        if(tabId.equalsIgnoreCase("publicMessage")) {
          currentList = R.id.publicMessageList;
        }
        if(tabId.equalsIgnoreCase("privateMessage")) {
          currentList = R.id.privateMessageList;
        }
      }
    });
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locListener = new LocationListener() {
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {
      }
      
      @Override
      public void onProviderEnabled(String provider) {        
      }
      
      @Override
      public void onProviderDisabled(String provider) {
      }
      
      @Override
      public void onLocationChanged(Location location) {
        updateMessageList(location);
      }
    };
    startLocationUpdates();
    checkForNotification();
  }
  
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    CreateMenu(menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
       return MenuChoice(item);    
  }

  public void onPause() {
    super.onPause();
    currentList = 3;
    stopLocationUpdates();
  }

  protected void onResume() {
    super.onResume();
    restartLocationUpdates();
    SharedPreferences pref = getSharedPreferences(Staaar.PREFS_NAME, 0);
    minMeters = pref.getFloat("MinMeters", Staaar.DEFAULT_METERS);
    minTime = pref.getLong("MinMinutes", Staaar.DEFAULT_MINUTES);
    radiusMeters = pref.getFloat("RadiusMeters", Staaar.DEFAULT_RADIUS_METERS);
    Log.d("[STAAAR]", "MinMeters: " + minMeters);
    Log.d("[STAAAR]", "MinMinutes: " + minTime);
    Log.d("[STAAAR]", "RadiusMeters: " + radiusMeters);
  }

  protected void onStop() {
    super.onStop();
    stopLocationUpdates();
  }

  private void readMessage(Message item) {
      Intent iReadMessage = new Intent();
      iReadMessage.putExtra("Message.Current", item);
      iReadMessage.setClass(getApplicationContext(), ReadMessageActivity.class);
      startActivity(iReadMessage);
  }

  private void restartLocationUpdates() {
    Log.d("[STAAAR]", "Restarting location updates");
    if (locManager != null && locListener != null) {
      locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, minMeters, locListener);
      locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minMeters, locListener);
    }
  }

  private void startLocationUpdates() {
    Log.d("[STAAAR]", "Starting location updates");
    locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, minMeters, locListener);
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minMeters, locListener);
  }

  private void stopLocationUpdates() {
    Log.d("[STAAAR]", "Stopping location updates");
    if (locManager != null && locListener != null)
      locManager.removeUpdates(locListener);
  }
  
  /**
   * Start a thread that download public and private messagelist, at the end of download 
   * launch the update thread to update the gui
   * @param location
   */
  private void updateMessageList(Location location) {
    gpsEnabled = (!locManager.getProviders(true).isEmpty());
    currentLat = location.getLatitude();
    currentLong = location.getLongitude();
    currentAlt = location.getAltitude();
    currentLocation = location;
    Thread giantThread = new Thread() {
      @Override
      public void run() {
        currentPrivateMessages = Staaar.stControl.requestMessageList(currentLocation.getLatitude(), currentLocation.getLongitude(), radiusMeters, 2);
        currentPublicMessages = Staaar.stControl.requestMessageList(currentLocation.getLatitude(), currentLocation.getLongitude(), radiusMeters, 1);
        msgListDownloadHandler.post(updateThread);
      }    
    };
    giantThread.start();
  }

  /**
   * Update private message list tab
   */
  private void updatePrivateMessageList() {
    messagePrivateList = new ArrayAdapter<Message>(this, R.layout.friend_list_item, currentPrivateMessages);
    ListView listview = (ListView)findViewById(R.id.privateMessageList);
    listview.setAdapter(messagePrivateList);
    listview.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
        readMessage(messagePrivateList.getItem(arg2));
      }     
    });
  }

  /**
   * Update public message list tab
   */
  private void updatePublicMessageList() {  
      messagePublicList = new ArrayAdapter<Message>(this, R.layout.friend_list_item, currentPublicMessages);
        ListView listview = (ListView)findViewById(R.id.publicMessageList);
        listview.setAdapter(messagePublicList);
        listview.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
        readMessage(messagePublicList.getItem(arg2));
      }     
    });
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.