Search in sources :

Example 6 with NoSuchUserException

use of pinkpanthers.pinkshelters.Model.NoSuchUserException in project pink-panthers by MrTrai.

the class ShelterDetails method addListenerOnButton.

/**
 * click on this button to save the result on the database
 */
public void addListenerOnButton() {
    ratingBar = (RatingBar) findViewById(R.id.ratingBar);
    Button btnSubmit = (Button) findViewById(R.id.ratingButton);
    // if click on this button, then display the current rating value.
    btnSubmit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(ShelterDetails.this, String.valueOf(ratingBar.getRating()), Toast.LENGTH_SHORT).show();
            try {
                db.updateShelter(s);
            } catch (NoSuchUserException e) {
                throw new RuntimeException("No shelter with this ID get updated");
            } catch (SQLException e) {
                throw new RuntimeException("SQL statement is written wrong");
            }
        }
    });
}
Also used : Button(android.widget.Button) SQLException(java.sql.SQLException) NoSuchUserException(pinkpanthers.pinkshelters.Model.NoSuchUserException) TextView(android.widget.TextView) View(android.view.View)

Example 7 with NoSuchUserException

use of pinkpanthers.pinkshelters.Model.NoSuchUserException in project pink-panthers by MrTrai.

the class ShelterDetails method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shelter_details);
    db = new Db("pinkpanther", "PinkPantherReturns!");
    errorMessage = findViewById(R.id.errorMessage);
    vacancy = findViewById(R.id.vacancy);
    Button claimBedButton = findViewById(R.id.claimBed);
    updateInfoButton = findViewById(R.id.updateAccountButton);
    Button cancelBedButton = findViewById(R.id.cancelReservation);
    checkIn = findViewById(R.id.check_in_btn);
    viewResident = findViewById(R.id.view_all_homeless);
    peopleNumber = findViewById(R.id.people_number);
    List<Integer> number = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    ArrayAdapter<Integer> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, number);
    peopleNumber.setAdapter(adapter);
    try {
        Intent intent = getIntent();
        Bundle extra = intent.getExtras();
        assert extra != null;
        int shelterId = extra.getInt("shelterId");
        s = db.getShelterById(shelterId);
        updateView(s);
    } catch (NoSuchUserException e) {
        throw new RuntimeException("This is not how it works " + e.toString());
    } catch (NullPointerException e) {
        throw new RuntimeException("NullPointerException is raised: " + "getExtras() returns null in ListOfShelter");
    }
    try {
        Intent intent = getIntent();
        Bundle extra = intent.getExtras();
        assert extra != null;
        username = extra.getString("username");
        Account user = db.getAccountByUsername(username);
        if (user instanceof Homeless) {
            // user is a homeless person
            a = (Homeless) user;
            claimBedButton.setVisibility(View.VISIBLE);
            try {
                reservedShelter = db.getShelterById(a.getShelterId());
                if (reservedShelter.getId() == s.getId()) {
                    cancelBedButton.setVisibility(View.VISIBLE);
                    message = "You have claimed " + a.getFamilyMemberNumber() + " bed(s) at this shelter";
                    errorMessage.setText(message);
                    errorMessage.setTextColor(Color.GREEN);
                    errorMessage.setVisibility(View.VISIBLE);
                }
            } catch (NoSuchUserException e) {
            // this shelter is not the one that the user reserved to
            // so nothing happens (cancel reservation button remains invisible)
            }
        } else {
            // user is not a homeless person
            claimBedButton.setVisibility(View.INVISIBLE);
            checkIn.setVisibility(View.VISIBLE);
            peopleNumber.setVisibility(View.VISIBLE);
            viewResident.setVisibility(View.VISIBLE);
        }
    } catch (NoSuchUserException e) {
        throw new RuntimeException("There is no user with that " + "username or shelter with that ID");
    } catch (NullPointerException e) {
        throw new RuntimeException("getExtras() returns null username");
    }
    addListenerOnRatingBar();
    addListenerOnButton();
    checkInButton();
}
Also used : Account(pinkpanthers.pinkshelters.Model.Account) Bundle(android.os.Bundle) NoSuchUserException(pinkpanthers.pinkshelters.Model.NoSuchUserException) Intent(android.content.Intent) Homeless(pinkpanthers.pinkshelters.Model.Homeless) Button(android.widget.Button) Db(pinkpanthers.pinkshelters.Model.Db) ArrayAdapter(android.widget.ArrayAdapter)

Example 8 with NoSuchUserException

use of pinkpanthers.pinkshelters.Model.NoSuchUserException in project pink-panthers by MrTrai.

the class LoginActivity method checkLoginTrial.

/**
 * Validate if a user inputs the correct values. If not, raise a warning and do certain action
 * associated with the activity
 */
private void checkLoginTrial() {
    Button loginButton = findViewById(R.id.login_button);
    String blocked = "blocked";
    if (account != null) {
        String accountState = account.getAccountState();
        if (accountState.equals("not_verified")) {
            txtView.setText("Your account has not been verified. Please click on the registration linkgit");
            loginButton.setVisibility(View.INVISIBLE);
        } else if (accountState.equals(blocked)) {
            txtView.setText("Your account has been disable, please contact admin");
            loginButton.setVisibility(View.INVISIBLE);
        } else if (loginTrial < 3) {
            txtView.setText("Wrong password, you have " + (3 - loginTrial) + " tries left");
            account = null;
        } else {
            account.setAccountState(blocked);
            txtView.setText("Your account is disable due to 3 " + "unsuccessful attempts, please contact your admin");
            loginButton.setVisibility(View.INVISIBLE);
            try {
                db.updateAccount(account);
            } catch (SQLException e) {
                throw new RuntimeException("Failed to update account " + e.toString());
            } catch (NoSuchUserException e) {
                // this shouldn't happen
                txtView.setText("Your account doesn't exist");
            }
        }
    } else {
        if (loginTrial < 3) {
            txtView.setText("Wrong username, you have " + (3 - loginTrial) + " tries left");
            account = null;
        } else {
            txtView.setText("You've exceeded your attempts, please try again next time");
            loginButton.setVisibility(View.INVISIBLE);
        }
    }
}
Also used : Button(android.widget.Button) SQLException(java.sql.SQLException) NoSuchUserException(pinkpanthers.pinkshelters.Model.NoSuchUserException)

Example 9 with NoSuchUserException

use of pinkpanthers.pinkshelters.Model.NoSuchUserException in project pink-panthers by MrTrai.

the class LoginActivity method logIn.

/**
 * Check for user name, password and log the user in.
 * Success: Direct User to Home Page
 * Fail: Display Error
 *
 * @param view current view of the app
 */
public void logIn(@SuppressWarnings("unused") View view) {
    txtView = findViewById(R.id.validationWarn);
    try {
        Editable userText = username.getText();
        String user = userText.toString();
        user = user.toLowerCase();
        Editable passText = password.getText();
        String pass = passText.toString();
        account = db.getAccountByUsername(user);
        txtView.setText("");
        String blocked = "blocked";
        String correctPass = account.getPassword();
        String accountState = account.getAccountState();
        if (correctPass.equals(pass) && !accountState.equals(blocked) && !accountState.equals("not_verified")) {
            // correct password
            Context context = getApplicationContext();
            SharedPreferences preferences = context.getSharedPreferences("com.example.sp.LoginPrefs", MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();
            if (account instanceof Homeless) {
                editor.putString("USER_TYPE", "Homeless");
            } else if (account instanceof Admin) {
                editor.putString("USER_TYPE", "Admin");
            } else if (account instanceof Volunteer) {
                editor.putString("USER_TYPE", "Volunteer");
            }
            editor.putString("UserID", ((Integer) account.getUserId()).toString());
            editor.putString("NAME", account.getName());
            // get name to use for shelter details
            editor.putString("USERNAME", account.getUsername());
            editor.apply();
            // active account is set to this static variable when
            // logged in for quick access to current user
            // Db.activeAccount = account;
            db.logAction(account, "Logged in");
            Intent homePageIntent = new Intent(this, HomePageActivity.class);
            homePageIntent.putExtra("username", user);
            startActivity(homePageIntent);
        } else {
            // incorrect password
            loginTrial++;
            checkLoginTrial();
        }
    } catch (NoSuchUserException e) {
        // User doesn't exist
        loginTrial++;
        checkLoginTrial();
    }
}
Also used : Context(android.content.Context) Homeless(pinkpanthers.pinkshelters.Model.Homeless) SharedPreferences(android.content.SharedPreferences) Volunteer(pinkpanthers.pinkshelters.Model.Volunteer) NoSuchUserException(pinkpanthers.pinkshelters.Model.NoSuchUserException) Editable(android.text.Editable) Intent(android.content.Intent) Admin(pinkpanthers.pinkshelters.Model.Admin)

Example 10 with NoSuchUserException

use of pinkpanthers.pinkshelters.Model.NoSuchUserException in project pink-panthers by MrTrai.

the class SearchActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);
    db = new Db("pinkpanther", "PinkPantherReturns!");
    Intent intent = getIntent();
    Bundle extra = intent.getExtras();
    assert extra != null;
    username = extra.getString("username");
    // data to populate the RecyclerView with
    shelterNames = new ArrayList<>();
    // contain all shelters
    shelters = db.getAllShelters();
    myShelters = shelters;
    // set up the RecyclerView
    search_recycler_view = findViewById(R.id.search_recycler_view);
    search_recycler_view.setLayoutManager(new LinearLayoutManager(this));
    recycler_adapter = new RecyclerAdapter(this, shelterNames);
    recycler_adapter.setClickListener(this);
    search_recycler_view.setAdapter(recycler_adapter);
    choices.add("Gender");
    choices.add("Age Range");
    choices.add("Name");
    genders.add("None");
    genders.add("Men");
    genders.add("Women");
    // for extra credit purposes
    genders.add("Non-Binary");
    ageRanges.add("None");
    ageRanges.add("Families with Newborns");
    ageRanges.add("Children");
    ageRanges.add("Young Adults");
    ageRanges.add("Anyone");
    choices_spinner = findViewById(R.id.choices_spinner);
    age_range_gender_spinner = findViewById(R.id.age_range_gender_spinner);
    shelter_name_edit_text = findViewById(R.id.shelter_name_edit_text);
    age_range_gender_spinner.setVisibility(View.INVISIBLE);
    ArrayAdapter<String> choices_adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, choices);
    choices_spinner.setAdapter(choices_adapter);
    gender_adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, genders);
    age_range_adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, ageRanges);
    age_range_gender_spinner.setAdapter(gender_adapter);
    choices_spinner.setSelection(0);
    age_range_gender_spinner.setSelection(0);
    age_range_gender_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Object item = choices_spinner.getSelectedItem();
            String mainSelection = item.toString();
            if ("Gender".equals(mainSelection)) {
                String searchBy = sqlConverter(genders.get(i));
                if ("None".equals(searchBy)) {
                    shelterNames.clear();
                    recycler_adapter.notifyDataSetChanged();
                } else {
                    shelterNames.clear();
                    try {
                        myShelters = db.getShelterByRestriction(searchBy);
                        for (Shelter sh : myShelters) {
                            shelterNames.add(sh.getShelterName());
                        }
                    } catch (NoSuchUserException e) {
                        shelterNames.add("No results found");
                    }
                    recycler_adapter.notifyDataSetChanged();
                }
            } else if ("Age Range".equals(mainSelection)) {
                String searchBy = sqlConverter(ageRanges.get(i));
                if ("None".equals(searchBy)) {
                    shelterNames.clear();
                    recycler_adapter.notifyDataSetChanged();
                } else {
                    shelterNames.clear();
                    try {
                        myShelters = db.getShelterByRestriction(searchBy);
                        for (Shelter sh : myShelters) {
                            shelterNames.add(sh.getShelterName());
                        }
                    } catch (NoSuchUserException e) {
                        shelterNames.add("No results found");
                    }
                    recycler_adapter.notifyDataSetChanged();
                }
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
        // nothing happens when nothing is selected
        }
    });
    choices_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            String searchBy = choices.get(i);
            switch(searchBy) {
                case // search by gender was selected
                "Gender":
                    age_range_gender_spinner.setAdapter(gender_adapter);
                    age_range_gender_spinner.setVisibility(View.VISIBLE);
                    shelter_name_edit_text.setVisibility(View.INVISIBLE);
                    break;
                case // search by age range was selected
                "Age Range":
                    age_range_gender_spinner.setAdapter(age_range_adapter);
                    age_range_gender_spinner.setVisibility(View.VISIBLE);
                    shelter_name_edit_text.setVisibility(View.INVISIBLE);
                    break;
                case // search by name was selected
                "Name":
                    age_range_gender_spinner.setVisibility(View.INVISIBLE);
                    shelter_name_edit_text.setVisibility(View.VISIBLE);
                    // clear out old results found by different categories
                    shelterNames.clear();
                    // fill recyclerView with all shelters
                    for (int j = 0; j < shelters.size(); j++) {
                        Shelter s = shelters.get(j);
                        shelterNames.add(s.getShelterName());
                    }
                    // set interaction for the previewed list of shelter before starting the search
                    recycler_adapter = new RecyclerAdapter(SearchActivity.this, shelterNames);
                    recycler_adapter.setClickListener(SearchActivity.this);
                    search_recycler_view.setAdapter(recycler_adapter);
                    shelter_name_edit_text.addTextChangedListener(new TextWatcher() {

                        @Override
                        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                        // nothing changes before user types anything
                        }

                        @Override
                        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                            // grabs each new character that the user types into the textView
                            shelterNames.clear();
                            try {
                                myShelters = db.getShelterByName(charSequence.toString());
                                for (Shelter s : myShelters) {
                                    shelterNames.add(s.getShelterName());
                                }
                                // set interaction between the suggestions and shelter details
                                recycler_adapter = new RecyclerAdapter(SearchActivity.this, shelterNames);
                                recycler_adapter.setClickListener(SearchActivity.this);
                                search_recycler_view.setAdapter(recycler_adapter);
                            } catch (NoSuchUserException e) {
                                shelterNames.add("No results found");
                            }
                            recycler_adapter.notifyDataSetChanged();
                        }

                        @Override
                        public void afterTextChanged(Editable editable) {
                        // changes occurred during onTextChanged
                        // so no changes after text changed
                        }
                    });
                    break;
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
        // nothing changes when nothing is selected
        }
    });
}
Also used : Bundle(android.os.Bundle) NoSuchUserException(pinkpanthers.pinkshelters.Model.NoSuchUserException) Intent(android.content.Intent) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) RecyclerView(android.support.v7.widget.RecyclerView) View(android.view.View) AdapterView(android.widget.AdapterView) TextWatcher(android.text.TextWatcher) Editable(android.text.Editable) AdapterView(android.widget.AdapterView) Shelter(pinkpanthers.pinkshelters.Model.Shelter) Db(pinkpanthers.pinkshelters.Model.Db) ArrayAdapter(android.widget.ArrayAdapter)

Aggregations

NoSuchUserException (pinkpanthers.pinkshelters.Model.NoSuchUserException)11 Intent (android.content.Intent)6 TextView (android.widget.TextView)6 Bundle (android.os.Bundle)5 View (android.view.View)5 Db (pinkpanthers.pinkshelters.Model.Db)5 Homeless (pinkpanthers.pinkshelters.Model.Homeless)5 ArrayAdapter (android.widget.ArrayAdapter)4 Button (android.widget.Button)4 SQLException (java.sql.SQLException)4 Editable (android.text.Editable)3 AdapterView (android.widget.AdapterView)3 Shelter (pinkpanthers.pinkshelters.Model.Shelter)3 Context (android.content.Context)2 SharedPreferences (android.content.SharedPreferences)2 TextWatcher (android.text.TextWatcher)2 Admin (pinkpanthers.pinkshelters.Model.Admin)2 AlertDialog (android.app.AlertDialog)1 DialogInterface (android.content.DialogInterface)1 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)1