Android Open Source - TAQueue Main Activity






From Project

Back to project page TAQueue.

License

The source code is released under:

MIT License

If you think the Android project TAQueue 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 com.familybiz.greg.taqueue;
//from w ww.  ja  v  a 2 s.  c o m
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputFilter;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.familybiz.greg.taqueue.model.Instructor;
import com.familybiz.greg.taqueue.model.School;
import com.familybiz.greg.taqueue.model.Student;
import com.familybiz.greg.taqueue.model.StudentQueue;
import com.familybiz.greg.taqueue.model.TA;
import com.familybiz.greg.taqueue.model.User;
import com.familybiz.greg.taqueue.network.NetworkRequest;
import com.familybiz.greg.taqueue.view.lists.InstructorListFragment;
import com.familybiz.greg.taqueue.view.lists.QueueListFragment;
import com.familybiz.greg.taqueue.view.lists.SchoolListFragment;
import com.familybiz.greg.taqueue.view.login.LoginFragment;
import com.familybiz.greg.taqueue.view.login.StudentLoginFragment;
import com.familybiz.greg.taqueue.view.login.TALoginFragment;
import com.familybiz.greg.taqueue.view.queue.QueueFragment;
import com.familybiz.greg.taqueue.view.queue.StudentQueueFragment;
import com.familybiz.greg.taqueue.view.queue.TAQueueFragment;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;


// TODO: Make it so the user can refresh the schools list

/**
 * Created by Greg Anderson
 */
public class MainActivity extends Activity implements
    SchoolListFragment.OnSchoolSelectedListener,
    InstructorListFragment.OnInstructorSelectedListener,
    QueueListFragment.OnQueueSelectedListener,
    StudentLoginFragment.OnStudentLoginSuccessListener,
    TALoginFragment.OnTALoginSuccessListener,
    QueueFragment.OnSignOutListener,
    NetworkRequest.OnErrorCodeReceivedListener,
    SchoolListFragment.OnSchoolsLoadedListener,
    NetworkRequest.OnNetworkTimeoutListener,
    NetworkTestFragment.OnNetworkReconnectedListener {

  // Global access to the networking class, TODO: Which might be a bad idea
  public static NetworkRequest NETWORK_REQUEST;

  public static int QUERY_INTERVAL = 1000;

  private String SAVED_DATA_FILE_NAME = "data.txt";

  // Used in saving and reading from file
  private String USER_TYPE = "user_type";
  private String USERNAME = "username";
  private String ID = "id";
  private String TOKEN = "token";
  private String LOCATION = "location";
  private String SELECTED_SCHOOL = "selected_school";
  private String SELECTED_INSTRUCTOR = "selected_instructor";
  private String SELECTED_QUEUE = "selected_queue";
  private String DO_NOT_SHOW_OPENING_DIALOG = "do_not_show_opening_dialog";

  // Fragments
  private SchoolListFragment mSchoolListFragment;
  private InstructorListFragment mInstructorListFragment;
  private QueueListFragment mQueueListFragment;
  private StudentLoginFragment mStudentLoginFragment;
  private TALoginFragment mTALoginFragment;
  private StudentQueueFragment mStudentQueueFragment;
  private TAQueueFragment mTAQueueFragment;
  private boolean mOnQueueScreen; // Used for overriding the back button
  private NetworkTestFragment mNetworkTestFragment;
  // Fragment tags
  private String school_list_fragment_tag = "SCHOOL_LIST";
  private String instructor_list_fragment_tag = "INSTRUCTOR_LIST";
  private String queue_list_fragment_tag = "QUEUE_LIST";
  private String login_screen_fragment_tag = "LOGIN_SCREEN";
  private String student_queue_fragment_tag = "STUDENT_QUEUE";
  private String ta_queue_fragment_tag = "TA_QUEUE";

  private boolean mLoginFragmentAdded;

  // Fragment was the fragment replaced by the connection error
  private boolean mLastFragmentWasLogin;
  private boolean mLastFragmentWasStudentQueue;
  private boolean mLastFragmentWasTAQueue;

  // ActionBar
  private int mSettingsMenuItem = Menu.FIRST;
  private int mRefreshMenuItem = Menu.FIRST;
  private int mMoreInformationMenuItem = Menu.FIRST;
  public static ActionBar mActionBar;
  private boolean mInitialSelect;

  // Currently selected options
  private static School mSelectedSchool;          // Current selected school
  private static Instructor mSelectedInstructor;  // Current selected instructor
  private static StudentQueue mSelectedQueue;     // Current selected queue

  // Current user data
  private static User mUser;
  private boolean mDoNotShowOpeningDialog;

  // Options menu for changing what is shown depending on which screen the user is on
  private int mTAOptionsMenuQueueStatus = Menu.FIRST;
  private int mTAOptionsMenuIsQuestionBased = Menu.FIRST;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load what the user had to say about the opening dialog.
    checkShowOpeningDialog();

    if (!mDoNotShowOpeningDialog) {
      final LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.opening_dialog_text, null);
      Button okayButton = new Button(this);
      okayButton.setText(getString(R.string.okay_button));
      new AlertDialog.Builder(this)
          .setTitle(getString(R.string.opening_dialog_box_title))
          .setView(layout)
          .setCancelable(true)
          .setPositiveButton(getString(R.string.okay_button), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
              CheckBox checker = (CheckBox) layout.findViewById(R.id.do_not_show_message_checkbox);
              mDoNotShowOpeningDialog = checker.isChecked();
            }
          })
          .show();
    }

    mOnQueueScreen = false;
    mLoginFragmentAdded = false;

    NETWORK_REQUEST = new NetworkRequest(this);
    NETWORK_REQUEST.setOnErrorCodeReceivedListeners(this);
    NETWORK_REQUEST.setOnNetworkTimeoutListener(this);

    mNetworkTestFragment = new NetworkTestFragment();
    mNetworkTestFragment.setOnNetworkReconnectedListener(this);

    setContentView(R.layout.activity_main);

    // Schools

    mSchoolListFragment = new SchoolListFragment();
    mSchoolListFragment.setOnSchoolSelectedListener(this);
    mSchoolListFragment.setOnSchoolsLoadedListener(this);

    // Instructors

    mInstructorListFragment = new InstructorListFragment();
    mInstructorListFragment.setOnInstructorSelectedListener(this);

    // Queue list

    mQueueListFragment = new QueueListFragment();
    mQueueListFragment.setOnQueueSelectedListener(this);

    // Login screen

    mStudentLoginFragment = new StudentLoginFragment();
    mStudentLoginFragment.setOnStudentLoginSuccessListener(this);
    mTALoginFragment = new TALoginFragment();
    mTALoginFragment.setOnTALoginSuccessListener(this);

    // ActionBar

    mActionBar = getActionBar();
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

    // Actual queue

    mStudentQueueFragment = new StudentQueueFragment();
    mStudentQueueFragment.setOnSignOutListener(this);

    mTAQueueFragment = new TAQueueFragment();
    mTAQueueFragment.setOnSignOutListener(this);

    FragmentTransaction addTransaction = getFragmentManager().beginTransaction();
    addTransaction.add(R.id.fragment_layout, mSchoolListFragment, school_list_fragment_tag);
    addTransaction.commit();
  }

  @Override
  protected void onStop() {
    saveToFile();
    super.onStop();
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    String title = item.getTitle().toString();

    // Settings
    if (title.equals(getString(R.string.settings_label))) {
      Intent intent = new Intent(this, SettingsActivity.class);
      startActivity(intent);
    }

    // Only available if on the school list fragment
    // Refresh
    else if (title.equals(getString(R.string.refresh_label))) {
      mSchoolListFragment.refreshData();
    }

    // More info
    if (title.equals(getString(R.string.more_information_options_menu_label))) {
      Intent intent = new Intent(this, MoreInformationActivity.class);
      startActivity(intent);
    }

    // Only available if user is a student
    // Chat
    else if (title.equals(getString(R.string.cancel_label))) {
      final EditText statusView = new EditText(this);

      // Set the maximum number of characters allowed
      // 51 characters fits the full line of the input box on the browser version (at least on
      // my screen in chrome)
      int maxLength = 51;
      statusView.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
      statusView.setHint(getString(R.string.change_queue_status_edittext_hint));

      // Build the alert dialog
      new AlertDialog.Builder(this)
          .setTitle(getString(R.string.change_queue_status_title))
          .setCancelable(true)
          .setView(statusView)
          .setPositiveButton(getString(R.string.save_label), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
              mTAQueueFragment.changeStatus(statusView.getText().toString());
            }
          })
          .setNegativeButton(getString(R.string.cancel_label), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
              // Do nothing
            }
          })
          .show();
      return true;
    }

    // TODO: Check why making the queue question based isn't working (on the server end)
    // TODO: NOTE!  THIS MENU ITEM WILL NOT DO ANYTHING UNTIL THE SERVER IS FIXED!
    // Question based
    else if (title.equals(getString(R.string.ta_options_menu_is_question_based_label))) {
      new AlertDialog.Builder(this)
          .setTitle(getString(R.string.queue_is_question_based_dialog_title))
          .setCancelable(true)
          .setPositiveButton(getString(R.string.is_queue_question_based_yes_label), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
              mTAQueueFragment.changeIsQuestionBased(true);
            }
          })
          .setNegativeButton(getString(R.string.is_queue_question_based_no_label), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
              mTAQueueFragment.changeIsQuestionBased(false);
            }
          })
          .show();
      return true;
    }

    // Only available if user is a TA
    // Queue status
    else if (title.equals(getString(R.string.queue_status_options_menu_label))) {

    }

    return super.onOptionsItemSelected(item);
  }

  /**
   * Set the options menu for when the user is a TA.
   */
  @Override
  public boolean onPrepareOptionsMenu(Menu menu) {
    menu.clear();
    menu.add(0, mSettingsMenuItem, 0, getString(R.string.settings_label));

    // Make it so the user can refresh if something goes wrong on the school list fragment
    SchoolListFragment schoolListFragment = (SchoolListFragment)getFragmentManager().findFragmentByTag(school_list_fragment_tag);
    if (schoolListFragment != null && schoolListFragment.isVisible())
      menu.add(0, mRefreshMenuItem, 0, getString(R.string.refresh_label));

    menu.add(0, mMoreInformationMenuItem, 0, getString(R.string.more_information_options_menu_label));

    // Add the TA actions
    if (mUser != null && mUser.getUserType().equals(User.TA)) {
      menu.add(0, mTAOptionsMenuQueueStatus, 0, getString(R.string.queue_status_options_menu_label));
      menu.add(0, mTAOptionsMenuIsQuestionBased, 0, getString(R.string.ta_options_menu_is_question_based_label));
    }
    // Add the Student actions
    if (mUser != null && mUser.getUserType().equals(User.STUDENT)) {
      menu.add(0, mTAOptionsMenuQueueStatus, 0, getString(R.string.chat_label));
    }
    return super.onPrepareOptionsMenu(menu);
  }

  @Override
  public void onNetworkTimeout() {
    Toast.makeText(this, getString(R.string.network_timeout_toast), Toast.LENGTH_SHORT).show();

    clearActionBarAndLoadingCircle();

    // Check for login screen
    LoginFragment loginFragment = (LoginFragment)getFragmentManager()
        .findFragmentByTag(login_screen_fragment_tag);

    // Check for student queue screen
    StudentQueueFragment studentFragment = (StudentQueueFragment)getFragmentManager()
        .findFragmentByTag(student_queue_fragment_tag);

    // Check for TA queue screen
    TAQueueFragment taFragment = (TAQueueFragment)getFragmentManager()
        .findFragmentByTag(ta_queue_fragment_tag);

    if (loginFragment != null && loginFragment.isVisible())
      mLastFragmentWasLogin = true;

    else if (studentFragment != null && studentFragment.isVisible())
      mLastFragmentWasStudentQueue = true;

    else if (taFragment != null && taFragment.isVisible())
      mLastFragmentWasTAQueue = true;

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_layout, mNetworkTestFragment);
    transaction.addToBackStack(null);
    transaction.commit();
  }

  @Override
  public void onNetworkReconnected() {
    Toast.makeText(this, getString(R.string.reconnected_toast), Toast.LENGTH_SHORT).show();

    // Press back if fragment was the login fragment
    if (mLastFragmentWasLogin) {
      onQueueSelected(mSelectedQueue);
      onBackPressed();
    }
    else if (mLastFragmentWasStudentQueue)
      onStudentLoginSuccess((Student)mUser);
    else if (mLastFragmentWasTAQueue)
      onTALoginSuccess((TA)mUser);

    mLastFragmentWasLogin = false;
    mLastFragmentWasStudentQueue = false;
    mLastFragmentWasTAQueue = false;
  }

  /**
   * Switches the fragment to the list of instructors for the selected school.
   */
  @Override
  public void onSchoolSelected(School school) {
    mSelectedSchool = school;

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_layout, mInstructorListFragment, instructor_list_fragment_tag);
    transaction.addToBackStack(null);
    transaction.commit();
  }

  /**
   * Switches the fragment to the list of classes for the selected instructor.
   * @param instructor
   */
  @Override
  public void onInstructorSelected(Instructor instructor) {
    mSelectedInstructor = instructor;

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_layout, mQueueListFragment, queue_list_fragment_tag);
    transaction.addToBackStack(null);
    transaction.commit();
  }

  @Override
  public void onQueueSelected(StudentQueue queue) {
    mSelectedQueue = queue;

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_layout, mStudentLoginFragment, login_screen_fragment_tag);
    if (!mLoginFragmentAdded)
      transaction.addToBackStack(null);
    transaction.commit();

    mLoginFragmentAdded = true;

    // Load the action bar

    mActionBar.removeAllTabs();

    ActionBar.Tab studentTab = mActionBar.newTab().setText(getString(R.string.student));
    ActionBar.Tab taTab = mActionBar.newTab().setText(getString(R.string.ta));

    studentTab.setTabListener(new LoginTabListener(mStudentLoginFragment));
    taTab.setTabListener(new LoginTabListener(mTALoginFragment));

    mActionBar.addTab(studentTab);
    mActionBar.addTab(taTab);

    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    invalidateOptionsMenu();
  }

  @Override
  public void onBackPressed() {
    // Check to see if the user was on the queue screen, ignoring it if they are
    if (mOnQueueScreen)
      return;

    // TODO: This is probably a bad idea (which means it really is), but it fixes the bug of the
    // TODO: fragments not being added to the back stack correctly.
    mLoginFragmentAdded = false;

    clearActionBarAndLoadingCircle();

    deleteSavedFile();

    super.onBackPressed();
  }

  private void clearActionBarAndLoadingCircle() {
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
    ProgressBar loadingCircle = (ProgressBar)findViewById(R.id.loading_circle);
    loadingCircle.setVisibility(View.GONE);
  }

  public static School getSelectedSchool() {
    return mSelectedSchool;
  }

  public static Instructor getSelectedInstructor() {
    return mSelectedInstructor;
  }

  public static StudentQueue getSelectedQueue() {
    return mSelectedQueue;
  }

  @Override
  public void onSchoolsLoaded() {
    readFromFile();
  }

  @Override
  public void onStudentLoginSuccess(Student student) {
    mUser = student;
    mOnQueueScreen = true;

    clearActionBarAndLoadingCircle();

    // Turn on Student ActionBar
    mInitialSelect = true;
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mActionBar.removeAllTabs();
    ActionBar.Tab enterQueue = mActionBar.newTab().setText(getString(R.string.enter_queue_button_text));
    ActionBar.Tab signOut = mActionBar.newTab().setText(getString(R.string.sign_out_button_text));

    enterQueue.setTabListener(new QueueStudentActionTabListener());
    signOut.setTabListener(new QueueStudentActionTabListener());

    mActionBar.addTab(enterQueue);
    mActionBar.addTab(signOut);
    invalidateOptionsMenu();

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_layout, mStudentQueueFragment, student_queue_fragment_tag);
    transaction.addToBackStack(null);
    transaction.commit();

  }

  @Override
  public void onTALoginSuccess(TA ta) {
    mUser = ta;
    mOnQueueScreen = true;

    clearActionBarAndLoadingCircle();

    // Turn on TA ActionBar
    mInitialSelect = true;
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mActionBar.removeAllTabs();
    ActionBar.Tab deactivateQueue = mActionBar.newTab().setText(getString(R.string.deactivate_tab_label));
    ActionBar.Tab freezeQueue = mActionBar.newTab().setText(getString(R.string.freeze_tab_label));
    ActionBar.Tab signOut = mActionBar.newTab().setText(getString(R.string.sign_out_button_text));

    deactivateQueue.setTabListener(new QueueTAActionTabListener());
    freezeQueue.setTabListener(new QueueTAActionTabListener());
    signOut.setTabListener(new QueueTAActionTabListener());

    mActionBar.addTab(deactivateQueue, 0);
    mActionBar.addTab(freezeQueue, 1);
    mActionBar.addTab(signOut, 2);
    invalidateOptionsMenu();

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_layout, mTAQueueFragment, ta_queue_fragment_tag);
    transaction.addToBackStack(null);
    transaction.commit();
  }

  public static User getUser() {
    return mUser;
  }

  /**
   * Takes a name/location string and splits it properly to get the name and location out.
   */
  public static String[] getNameAndLocation(String nameLocation) {
    String[] items = nameLocation.split(" @ ");
    if (items.length == 1)
      items = new String[] {"", ""};
    return items;
  }

  @Override
  public void onSignOut() {
    mUser = null;
    mOnQueueScreen = false;
    //onBackPressed();
    getFragmentManager().popBackStack();
    onQueueSelected(mSelectedQueue);
  }

  @Override
  public void onErrorCodeReceived(int code, JSONArray errors) {
    // Using a set because sometimes the server sends duplicate error messages
    Set<String> messages = new HashSet<String>();

    try {
            if(errors != null) {
                for (int i = 0; i < errors.length(); i++)
                    messages.add(errors.getString(i));
            }
    }
    catch (JSONException e) {
      e.printStackTrace();
    }

    // Check if no error messages came back from the server
    if (messages.isEmpty())
      Toast.makeText(this, getString(R.string.error_from_server_with_no_message), Toast.LENGTH_SHORT).show();
    else
      for (String message : messages)
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();

    // Clear the loading circle if it was going
    ProgressBar loadingCircle = (ProgressBar)findViewById(R.id.loading_circle);
    loadingCircle.setVisibility(View.GONE);
  }

  private void saveToFile() {
    try {
      JSONObject data = new JSONObject();

      // Save what the user had to say about the opening dialog
      data.put(DO_NOT_SHOW_OPENING_DIALOG, mDoNotShowOpeningDialog);

      // Get the fragments

      // School list screen
      SchoolListFragment schoolListFragment = (SchoolListFragment)getFragmentManager()
          .findFragmentByTag(school_list_fragment_tag);

      // Instructor list screen
      InstructorListFragment instructorListFragment = (InstructorListFragment)getFragmentManager()
          .findFragmentByTag(instructor_list_fragment_tag);

      // Queue list screen
      QueueListFragment queueListFragment = (QueueListFragment)getFragmentManager()
          .findFragmentByTag(queue_list_fragment_tag);

      if (schoolListFragment.isVisible()) {
        // Don't save anything
      }
      else if (instructorListFragment.isVisible()) {
        if (mSelectedSchool != null)
          data.put(SELECTED_SCHOOL, mSelectedSchool.getName());
      }
      else if (queueListFragment.isVisible()) {
        if (mSelectedSchool != null)
          data.put(SELECTED_SCHOOL, mSelectedSchool.getName());
        if (mSelectedInstructor != null)
          data.put(SELECTED_INSTRUCTOR, mSelectedInstructor.getName());
      }
      // Anything else, save everything
      else {
        if (mSelectedSchool != null)
          data.put(SELECTED_SCHOOL, mSelectedSchool.getName());
        if (mSelectedInstructor != null)
          data.put(SELECTED_INSTRUCTOR, mSelectedInstructor.getName());
        if  (mSelectedQueue != null)
          data.put(SELECTED_QUEUE, mSelectedQueue.getClassNumber());
      }

      if (mUser != null) {
        data.put(USER_TYPE, mUser.getUserType());
        data.put(USERNAME, mUser.getUsername());
        data.put(ID, mUser.getId());
        data.put(TOKEN, mUser.getToken());

        if (mUser.getUserType().equals(User.STUDENT))
          data.put(LOCATION, ((Student)mUser).getLocation());
      }

      File file = new File(getFilesDir().getPath() + SAVED_DATA_FILE_NAME);
      FileWriter fileWriter = new FileWriter(file);
      BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
      bufferedWriter.write(data.toString());
      bufferedWriter.close();
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    catch (JSONException e) {
      e.printStackTrace();
    }
    catch (NullPointerException e) {
      e.printStackTrace();
    }
  }

  private void readFromFile() {
    try {
      File file = new File(getFilesDir().getPath() + SAVED_DATA_FILE_NAME);
      FileReader fileReader = new FileReader(file);
      BufferedReader bufferedReader = new BufferedReader(fileReader);
      String data = bufferedReader.readLine();
      bufferedReader.close();

      JSONObject dataJson = new JSONObject(data);

      if (dataJson.has(SELECTED_SCHOOL)) {
        String selectedSchoolName = dataJson.getString(SELECTED_SCHOOL);
        Object school = mSchoolListFragment.getSelectedItem(selectedSchoolName);
        mSchoolListFragment.itemSelectedListener(school);
      }
      if (dataJson.has(SELECTED_INSTRUCTOR)) {
        String selectedInstructorName = dataJson.getString(SELECTED_INSTRUCTOR);
        Object instructor = mInstructorListFragment.getSelectedItem(selectedInstructorName);
        mInstructorListFragment.itemSelectedListener(instructor);
      }
      if (dataJson.has(SELECTED_QUEUE)) {
        String selectedQueueClassNumber = dataJson.getString(SELECTED_QUEUE);
        Object queue = mQueueListFragment.getQueue(selectedQueueClassNumber);
        mQueueListFragment.itemSelectedListener(queue);
      }

      if (dataJson.has(USER_TYPE)) {
        String user_type = dataJson.getString(USER_TYPE);

        String username = dataJson.getString(USERNAME);
        String id = dataJson.getString(ID);
        String token = dataJson.getString(TOKEN);

        if (user_type.equals(User.TA)) {
          mUser = new TA(username, id, token);
          onTALoginSuccess((TA)mUser);
        }
        else {
          String location = dataJson.getString(LOCATION);
          mUser = new Student(username, id, token, location);
          onStudentLoginSuccess((Student)mUser);
        }
      }

      // Clear out file so it doesn't get loaded again unless it gets saved again
      deleteSavedFile();
    }
    catch (FileNotFoundException e) {
      Log.i("LOAD", "Error loading saved file, maybe there was nothing saved.");
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    catch (JSONException e) {
      e.printStackTrace();
    }
  }

  private void checkShowOpeningDialog() {
    try {
      File file = new File(getFilesDir().getPath() + SAVED_DATA_FILE_NAME);
      FileReader fileReader = new FileReader(file);
      BufferedReader bufferedReader = new BufferedReader(fileReader);
      String data = bufferedReader.readLine();
      bufferedReader.close();

      JSONObject dataJson = new JSONObject(data);

      if (dataJson.has(DO_NOT_SHOW_OPENING_DIALOG))
        mDoNotShowOpeningDialog = dataJson.getBoolean(DO_NOT_SHOW_OPENING_DIALOG);
    }
    catch (FileNotFoundException e) {
      Log.i("LOAD", "Error loading saved file, maybe there was nothing saved.");
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    catch (JSONException e) {
      e.printStackTrace();
    }
  }

  private void deleteSavedFile() {
    new File(getFilesDir().getPath() + SAVED_DATA_FILE_NAME).delete();
  }


  /**
   * Listener for the ActionBar tabs.
   */
  private class LoginTabListener implements ActionBar.TabListener {

    Fragment mFragment;

    public LoginTabListener(Fragment fragment) {
      mFragment = fragment;
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
      fragmentTransaction.replace(R.id.fragment_layout, mFragment);
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
      fragmentTransaction.remove(mFragment);
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }
  }

  /**
   * Listener for ActionBar tabs when logged in as a student.
   */
  private class QueueStudentActionTabListener implements ActionBar.TabListener {

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
      // Stop bug where the first tab would get selected on loading
      if (mInitialSelect) {
        mInitialSelect = false;
        return;
      }

      tabSelected(tab);
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
      // Stop bug where the first tab would get selected on loading
      if (mInitialSelect) {
        mInitialSelect = false;
        return;
      }
      tabSelected(tab);
    }

    private void tabSelected(ActionBar.Tab tab) {
      // Enter/exit

      if (tab.getText().equals(getString(R.string.enter_queue_button_text))) {
        mStudentQueueFragment.enterQueue();
        tab.setText(getString(R.string.exit_queue_button_text));
      }
      else if (tab.getText().equals(getString(R.string.exit_queue_button_text))) {
        mStudentQueueFragment.exitQueue();
        tab.setText(getString(R.string.enter_queue_button_text));
      }

      // Sign out

      else {
        mStudentQueueFragment.signOut();
      }
    }
  }

  /**
   * Listener for ActionBar tabs when logged in as a TA.
   */
  private class QueueTAActionTabListener implements ActionBar.TabListener {

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
      // Stop bug where the first tab would get selected on loading
      if (mInitialSelect) {
        mInitialSelect = false;
        return;
      }

      tabSelected(tab);
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
      // Stop bug where the first tab would get selected on loading
      if (mInitialSelect) {
        mInitialSelect = false;
        return;
      }

      tabSelected(tab);
    }

    private void tabSelected(ActionBar.Tab tab) {
      // Activate/deactivate

      if (tab.getText().equals(getString(R.string.deactivate_tab_label))) {
        mTAQueueFragment.deactivateQueue();
        tab.setText(getString(R.string.activate_tab_label));
      }
      else if (tab.getText().equals(getString(R.string.activate_tab_label))) {
        mTAQueueFragment.activateQueue();
        tab.setText(getString(R.string.deactivate_tab_label));
      }

      // Freeze/unfreeze

      else if (tab.getText().equals(getString(R.string.freeze_tab_label))) {
        mTAQueueFragment.freezeQueue();
        tab.setText(getString(R.string.unfreeze_tab_label));
      }
      else if (tab.getText().equals(getString(R.string.unfreeze_tab_label))) {
        mTAQueueFragment.unfreezeQueue();
        tab.setText(getString(R.string.freeze_tab_label));
      }

      // Sign out

      else {
        mTAQueueFragment.signOut();
      }
    }
  }
}




Java Source Code List

com.familybiz.greg.taqueue.ApplicationTest.java
com.familybiz.greg.taqueue.MainActivity.java
com.familybiz.greg.taqueue.MoreInformationActivity.java
com.familybiz.greg.taqueue.NetworkTestFragment.java
com.familybiz.greg.taqueue.SettingsActivity.java
com.familybiz.greg.taqueue.model.Instructor.java
com.familybiz.greg.taqueue.model.School.java
com.familybiz.greg.taqueue.model.StudentQueue.java
com.familybiz.greg.taqueue.model.Student.java
com.familybiz.greg.taqueue.model.TA.java
com.familybiz.greg.taqueue.model.User.java
com.familybiz.greg.taqueue.model.queue.QueueData.java
com.familybiz.greg.taqueue.model.queue.QueueStudent.java
com.familybiz.greg.taqueue.model.queue.QueueTA.java
com.familybiz.greg.taqueue.network.CustomStringRequest.java
com.familybiz.greg.taqueue.network.NetworkRequest.java
com.familybiz.greg.taqueue.network.QueueRequest.java
com.familybiz.greg.taqueue.network.SchoolRequest.java
com.familybiz.greg.taqueue.network.StudentRequest.java
com.familybiz.greg.taqueue.network.TARequest.java
com.familybiz.greg.taqueue.view.lists.InstructorListFragment.java
com.familybiz.greg.taqueue.view.lists.ListFragment.java
com.familybiz.greg.taqueue.view.lists.QueueListFragment.java
com.familybiz.greg.taqueue.view.lists.SchoolListFragment.java
com.familybiz.greg.taqueue.view.login.LoginFragment.java
com.familybiz.greg.taqueue.view.login.StudentLoginFragment.java
com.familybiz.greg.taqueue.view.login.TALoginFragment.java
com.familybiz.greg.taqueue.view.queue.ColorableStudentArrayAdapter.java
com.familybiz.greg.taqueue.view.queue.ColorableTAArrayAdapter.java
com.familybiz.greg.taqueue.view.queue.QueueFragment.java
com.familybiz.greg.taqueue.view.queue.StudentQueueFragment.java
com.familybiz.greg.taqueue.view.queue.TAQueueFragment.java