@Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handles item selection in action bar
    if (item.getItemId() == R.id.action_save_profile) {
      /*
          Performs validation of input data
      */
      boolean isError = false;

      if (name.getText().length() == 0) {
        isError = true;
        name.setError("Name is required");
      }

      if (name.getText().toString().trim().length() > 50) {
        isError = true;
        name.setError("Name can't be longer than 50 characters");
      }

      if (textTimeMinutes.getText().equals("00") && textTimeSeconds.getText().equals("00")) {
        isError = true;
        timeError.setError("Time is required");
      }

      if (repeat.isChecked() && repeatNumber.getText().length() == 0) {
        isError = true;
        repeatNumber.setError("Number of laps is required");
      }

      /*
          Produces an error if:
          - name of profile is taken and adding a new profile
          - changed profile name is taken
      */
      if (dbHandler.profileExists(name.getText().toString().trim())) {
        if (!isEditingProfile || !name.getText().toString().trim().equals(profile.getName())) {
          isError = true;
          name.setError("Name already exists");
        }
      }

      if (!isError) {
        // Either adds or edits the profile depending on what's needed
        if (isEditingProfile) {
          setResult(PROFILE_EDITED);
          updateProfile();
        } else {
          setResult(PROFILE_ADDED);
          addProfile();
        }

        finish();
      }
    }

    return super.onOptionsItemSelected(item);
  }
  private void updateProfile() {
    // Updates profile object with user's settings
    profile.setName(name.getText().toString().trim());
    profile.setMinutes(Integer.parseInt(textTimeMinutes.getText().toString()));
    profile.setSeconds(Integer.parseInt(textTimeSeconds.getText().toString()));
    profile.setRepeat(repeat.isChecked());

    // Only set user's repeatNumber if repeat is checked
    profile.setRepeatNumber(
        (repeat.isChecked()) ? Integer.parseInt(repeatNumber.getText().toString()) : 0);

    dbHandler.saveEditedProfile(profile);
  }
  private void addProfile() {
    // Creates a profile object with user's settings (to be inserted to the database)
    Profile newProfile = new Profile(name.getText().toString().trim());
    newProfile.setMinutes(Integer.parseInt(textTimeMinutes.getText().toString()));
    newProfile.setSeconds(Integer.parseInt(textTimeSeconds.getText().toString()));
    newProfile.setRepeat(repeat.isChecked());

    // Only set user's repeatNumber if repeat is checked
    newProfile.setRepeatNumber(
        (repeat.isChecked()) ? Integer.parseInt(repeatNumber.getText().toString()) : 0);

    dbHandler.addProfile(newProfile);
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Sets the activity_profile as this activity's display
    setContentView(R.layout.activity_profile);

    // Initialising components
    // Input area components
    name = (EditText) findViewById(R.id.profile_text_name);
    repeatNumber = (EditText) findViewById(R.id.profile_text_repeat);
    textTimeMinutes = (TextView) findViewById(R.id.profile_text_time_minutes);
    textTimeSeconds = (TextView) findViewById(R.id.profile_text_time_seconds);
    timeError = (TextView) findViewById(R.id.profile_text_time_error);
    repeat = (CheckBox) findViewById(R.id.profile_checkbox_repeat);

    // Database
    dbHandler = new DBHandler(this, null, null, 1);

    // Handles click events for textTimeMinutes and textTimeSeconds
    textTimeMinutes.setOnClickListener(new TextTimeClickListener(true, this));
    textTimeSeconds.setOnClickListener(new TextTimeClickListener(false, this));

    if (getIntent().hasExtra("profileID")) {
      isEditingProfile = true;

      // Changes activity's title to @string/title_edit_profile
      setTitle(R.string.title_edit_profile);

      // Creates new chosen profile object
      profile = dbHandler.getProfile(getIntent().getIntExtra("profileID", 1));

      // Sets input box values for profile loaded from database
      name.setText(profile.getName());
      setTextTime(textTimeMinutes, profile.getMinutes());
      setTextTime(textTimeSeconds, profile.getSeconds());
      repeat.setChecked(profile.isRepeat());
      repeatNumber.setText(Integer.toString(profile.getRepeatNumber()));
    } else {
      // Changes activity's title to @string/title_new_profile
      setTitle(R.string.title_new_profile);
    }
  }