diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4e47c61..96f8f0c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,7 +21,10 @@
-
+
+
+
+
diff --git a/app/src/main/java/com/example/trippe/MainActivity.java b/app/src/main/java/com/example/trippe/MainActivity.java
index 65f9d58..e01a947 100644
--- a/app/src/main/java/com/example/trippe/MainActivity.java
+++ b/app/src/main/java/com/example/trippe/MainActivity.java
@@ -10,6 +10,7 @@
import com.example.trippe.util.Utility;
import com.google.android.material.bottomnavigation.BottomNavigationView;
+
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.menu.MenuView;
import androidx.core.app.ActivityCompat;
@@ -18,6 +19,7 @@
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
+
import android.database.sqlite.*;
import android.util.Log;
import android.view.Menu;
@@ -71,23 +73,32 @@ protected void onCreate(Bundle savedInstanceState) {
try {
trippeDatabase = openOrCreateDatabase("TrippeDatabase", MODE_PRIVATE, null);
//trippeDatabase.execSQL("DROP TABLE IF EXISTS Trips");
- trippeDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + "Trips (" +
- "tripId VARCHAR(255) NOT NULL, " +
- "destinationCity VARCHAR(255) NOT NULL, " +
- "destinationState VARCHAR(255), " +
- "destinationCountry VARCHAR(255) NOT NULL, " +
- "startDate VARCHAR(255) NOT NULL, " +
- "endDate VARCHAR(255) NOT NULL, " +
- "milesAwayFromHome INT NOT NULL, " +
- "timeZone VARCHAR(255) NOT NULL, " +
- "currency VARCHAR(255) NOT NULL, " +
- "languages VARCHAR(255) NOT NULL, " +
- "PRIMARY KEY (tripId));");
- }
- catch(Exception e){
+ trippeDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + "Trips (" +
+ "tripId VARCHAR(255) NOT NULL, " +
+ "tripFlagIndicator INT(255) NOT NULL, " +
+ "destinationCity VARCHAR(255) NOT NULL, " +
+ "destinationState VARCHAR(255), " +
+ "destinationZipCode INT(255), " +
+ "destinationCountry VARCHAR(255) NOT NULL, " +
+ "startDate VARCHAR(255) NOT NULL, " +
+ "endDate VARCHAR(255) NOT NULL, " +
+ "milesAwayFromHome INT NOT NULL, " +
+ "timeZone VARCHAR(255) NOT NULL, " +
+ "currency VARCHAR(255) NOT NULL, " +
+ "languages VARCHAR(255) NOT NULL, " +
+ "PRIMARY KEY (tripId));");
+ trippeDatabase.execSQL("CREATE TABLE IF NOT EXISTS " + "Events (" +
+ "eventId VARCHAR(255) NOT NULL, " +
+ "eventDate VARCHAR(255) NOT NULL, " +
+ "eventStartTime VARCHAR(255) NOT NULL, " +
+ "eventEndTime VARCHAR(255) NOT NULL, " +
+ "eventName VARCHAR(255) NOT NULL, " +
+ "eventLocation VARCHAR(255) NOT NULL, " +
+ "tripId VARCHAR(255) NOT NULL, " +
+ "PRIMARY KEY (eventId));");
+ } catch (Exception e) {
Log.d("Error: ", e.getMessage());
- }
- finally {
+ } finally {
trippeDatabase.close();
}
}
diff --git a/app/src/main/java/com/example/trippe/dao/CalendarDao.java b/app/src/main/java/com/example/trippe/dao/CalendarDao.java
new file mode 100644
index 0000000..09bc76a
--- /dev/null
+++ b/app/src/main/java/com/example/trippe/dao/CalendarDao.java
@@ -0,0 +1,182 @@
+package com.example.trippe.dao;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+
+import com.example.trippe.model.Event;
+
+import java.util.ArrayList;
+
+public class CalendarDao {
+
+ private SQLiteDatabase database;
+
+ public CalendarDao() {
+ database = getConnection();
+ }
+
+ private SQLiteDatabase getConnection() {
+ SQLiteDatabase database = SQLiteDatabase.openDatabase("/data/data/com.example.trippe/databases/TrippeDatabase", null, 0);
+ return database;
+ }
+
+ public boolean addEvent(Event newEvent) {
+ try {
+ String eventId = newEvent.getEventID();
+ String eventDate = newEvent.getDate();
+ String eventStartTime = newEvent.getStartTime();
+ String eventEndTime = newEvent.getEndTime();
+ String eventName = newEvent.getName();
+ String eventLocation = newEvent.getLocation();
+ String tripId = newEvent.getTripID();
+
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("eventId", eventId);
+ contentValues.put("eventDate", eventDate);
+ contentValues.put("eventStartTime", eventStartTime);
+ contentValues.put("eventEndTime", eventEndTime);
+ contentValues.put("eventName", eventName);
+ contentValues.put("eventLocation", eventLocation);
+ contentValues.put("tripId", tripId);
+ database.insert("Events", null, contentValues);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.d("Database Writing Error", e.toString());
+ return false;
+ } finally {
+ //database.close();
+ }
+ }
+
+ public ArrayList getEvents() {
+
+ ArrayList events = new ArrayList<>();
+
+ try {
+ Cursor cursor = database.rawQuery("select * from Events", null);
+ cursor.moveToFirst();
+ while (!cursor.isAfterLast()) {
+ String eventId = cursor.getString(cursor.getColumnIndex("eventId"));
+ String eventDate = cursor.getString(cursor.getColumnIndex("eventDate"));
+ String eventStartTime = cursor.getString(cursor.getColumnIndex("eventStartTime"));
+ String eventEndTime = cursor.getString(cursor.getColumnIndex("eventEndTime"));
+ String eventName = cursor.getString(cursor.getColumnIndex("eventName"));
+ String eventLocation = cursor.getString(cursor.getColumnIndex("eventLocation"));
+ String tripId = cursor.getString(cursor.getColumnIndex("tripId"));
+ Event event = new Event(eventId, eventDate, eventStartTime, eventEndTime, eventName, eventLocation,tripId);
+ events.add(event);
+ cursor.moveToNext();
+ }
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ Log.d("Database Reading Error", e.toString());
+ }
+ finally {
+ //database.close();
+ }
+ return events;
+ }
+
+ public ArrayList getEvents(String selectedDate) {
+ ArrayList events = new ArrayList<>();
+
+ try {
+ Cursor cursor = database.rawQuery("select * from Events", null);
+ cursor.moveToFirst();
+ while (!cursor.isAfterLast()) {
+ String eventId = cursor.getString(cursor.getColumnIndex("eventId"));
+ String eventDate = cursor.getString(cursor.getColumnIndex("eventDate"));
+ String eventStartTime = cursor.getString(cursor.getColumnIndex("eventStartTime"));
+ String eventEndTime = cursor.getString(cursor.getColumnIndex("eventEndTime"));
+ String eventName = cursor.getString(cursor.getColumnIndex("eventName"));
+ String eventLocation = cursor.getString(cursor.getColumnIndex("eventLocation"));
+ String tripId = cursor.getString(cursor.getColumnIndex("tripId"));
+ Event event = new Event(eventId, eventDate, eventStartTime, eventEndTime, eventName, eventLocation,tripId);
+ if(eventDate.equals(selectedDate)) {
+ events.add(event);
+ }
+ cursor.moveToNext();
+ }
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ Log.d("Database Reading Error", e.toString());
+ }
+ finally {
+ //database.close();
+ }
+ return events;
+ }
+
+ public Event getEvent(int position) {
+ return getEvents().get(position);
+ }
+
+ public String nextDay(String date) {
+ int month = Integer.parseInt(date.substring(0,2));
+ int day = Integer.parseInt(date.substring(3,5));
+ int year = Integer.parseInt(date.substring(6,8));
+ String newMonth;
+ String newDay;
+ if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8
+ || month == 10 || month == 12) {
+ if(day == 31) {
+ day = 1;
+ month++;
+ } else {
+ day++;
+ }
+ } else if (month == 4 || month == 6 || month == 9 || month == 11) {
+ if(day == 30) {
+ day = 1;
+ month++;
+ } else {
+ day++;
+ }
+ } else if (month == 2 && year%4 == 0) {
+ if(day == 29) {
+ day = 1;
+ month++;
+ } else {
+ day++;
+ }
+ } else {
+ if(day == 28) {
+ day = 1;
+ month++;
+ } else {
+ day++;
+ }
+ }
+
+ if (month > 11) {
+ month = 1;
+ year++;
+ } else {
+ month++;
+ }
+
+ if(day < 10) {
+ newDay = "0" + String.valueOf(day);
+ } else {
+ newDay = String.valueOf(day);
+ }
+
+ if(month < 10) {
+ newMonth = "0" + String.valueOf(month);
+ } else {
+ newMonth = String.valueOf(month);
+ }
+
+ String nextDay = newMonth + "/" + newDay + "/" + year;
+
+ return nextDay;
+ }
+
+}
diff --git a/app/src/main/java/com/example/trippe/model/Event.java b/app/src/main/java/com/example/trippe/model/Event.java
new file mode 100644
index 0000000..16e61aa
--- /dev/null
+++ b/app/src/main/java/com/example/trippe/model/Event.java
@@ -0,0 +1,85 @@
+package com.example.trippe.model;
+
+public class Event {
+ String eventID;
+ String date;
+ String startTime;
+ String endTime;
+ String name;
+ String location;
+ String tripID;
+
+ public Event(String eventID, String date, String startTime, String endTime, String name, String location, String tripID) {
+ this.eventID = eventID;
+ this.date = date;
+ this.startTime = startTime;
+ this.endTime = endTime;
+ this.name = name;
+ this.location = location;
+ this.tripID = tripID;
+ }
+
+ public String getEventID() {
+ return eventID;
+ }
+
+ public void setEventID(String eventID) {
+ this.eventID = eventID;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public String getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(String time) {
+ this.startTime = startTime;
+ }
+
+ public String getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(String endTime) {
+ this.endTime = endTime;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public String getTripID() {
+ return tripID;
+ }
+
+ public void setTripID(Trip trip) {
+ this.tripID = trip.getTripId();
+ }
+
+ public String getTime () {
+ if (startTime.equals("12:00 AM") && endTime.equals("11:59 PM")) {
+ return "All Day";
+ } else {
+ return startTime + " - " + endTime;
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/trippe/ui/calendar/AddEventView.java b/app/src/main/java/com/example/trippe/ui/calendar/AddEventView.java
new file mode 100644
index 0000000..ab7c361
--- /dev/null
+++ b/app/src/main/java/com/example/trippe/ui/calendar/AddEventView.java
@@ -0,0 +1,220 @@
+package com.example.trippe.ui.calendar;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.navigation.NavController;
+import androidx.navigation.Navigation;
+
+import com.example.trippe.MainActivity;
+import com.example.trippe.R;
+import com.example.trippe.dao.CalendarDao;
+import com.example.trippe.model.Event;
+import com.example.trippe.model.Location;
+import com.example.trippe.model.Trip;
+import com.example.trippe.util.Utility;
+
+import java.util.ArrayList;
+import java.util.TimeZone;
+
+public class AddEventView extends AppCompatActivity {
+
+ private Spinner tripSpinner;
+ private EditText eventNameField;
+ private EditText eventDateField;
+ private EditText eventLocationField;
+ private EditText eventStartTimeField;
+ private EditText eventEndTimeField;
+ private Button addNewEvent;
+ private Button cancelButton;
+ private CheckBox allDayCheckBox;
+ private SQLiteDatabase db;
+ private Activity activity_add_event = this;
+
+
+ public AddEventView() {
+ db = getConnection();
+ }
+
+ private SQLiteDatabase getConnection() {
+ SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.example.trippe/databases/TrippeDatabase", null, 0);
+ return db;
+ }
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_add_new_event);
+ setTitle("Add Event");
+
+ tripSpinner = (Spinner) findViewById(R.id.newEventTripDropDown);
+ ArrayAdapter tripsAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, getTripNames());
+ tripsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ tripSpinner.setAdapter(tripsAdapter);
+ final RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.addNewEvent);
+
+ cancelButton = (Button) findViewById(R.id.cancelButton);
+
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ NavController navController = Navigation.findNavController(activity_add_event, R.id.nav_host_fragment);
+ navController.navigate(R.id.navigation_dashboard);
+
+ } catch (ActivityNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ addNewEvent = (Button) findViewById(R.id.addEventButton);
+ eventNameField = (EditText) findViewById(R.id.newEventNameTxtField);
+ eventDateField = (EditText) findViewById(R.id.newEventDateTxtField);
+ eventStartTimeField = (EditText) findViewById(R.id.newEventStartTimeField);
+ eventEndTimeField = (EditText) findViewById(R.id.newEventEndTimeField);
+ eventLocationField = (EditText) findViewById(R.id.newEventLocationTxtField);
+ allDayCheckBox = (CheckBox) findViewById(R.id.allDayEventCheckBox);
+
+ addNewEvent.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ CalendarDao calendarDao = new CalendarDao();
+ String eventID = Integer.toString(Utility.generateEventId() + calendarDao.getEvents().size());
+ System.out.println(eventID);
+ String eventName = eventNameField.getText().toString();
+ String eventDate = eventDateField.getText().toString();
+ String eventStartTime = eventStartTimeField.getText().toString();
+ String eventEndTime = eventEndTimeField.getText().toString();
+ String eventLocation = eventLocationField.getText().toString();
+ String eventTrip = tripSpinner.getSelectedItem().toString();
+ Event newEvent = new Event(eventID, eventDate, eventStartTime, eventEndTime, eventName, eventLocation, eventTrip);
+ boolean isAddedToDatabase = calendarDao.addEvent(newEvent);
+ if (isAddedToDatabase == true) {
+ System.out.println("Event: " + eventName);
+ NavController navController = Navigation.findNavController(activity_add_event, R.id.nav_host_fragment);
+ navController.navigate(R.id.navigation_dashboard);
+ }
+ }
+ catch (NullPointerException e) {
+ e.printStackTrace();
+
+ if (tripSpinner == null) {
+ TextView spinnerError = (TextView) tripSpinner.getSelectedView();
+ spinnerError.setError("Please select a Trip");
+ }
+ if (eventNameField.getText().toString().isEmpty()) {
+ eventNameField.setError("The name of your event is required");
+ }
+ else {
+ eventNameField.setError(null);
+ }
+
+ if (eventDateField.getText().toString().isEmpty()) {
+ eventDateField.setError("The date of your event is required");
+ }
+ else {
+ eventDateField.setError(null);
+ }
+ if (eventStartTimeField.getText().toString().isEmpty()) {
+ eventStartTimeField.setError("The start time of your event is required");
+ }
+ else {
+ eventStartTimeField.setError(null);
+ }
+ if (eventEndTimeField.getText().toString().isEmpty()) {
+ eventEndTimeField.setError("The end time of your event is required");
+ }
+ else {
+ eventEndTimeField.setError(null);
+ }
+ if (eventLocationField.getText().toString().isEmpty()) {
+ eventLocationField.setError("The location of your event is required");
+ }
+ else {
+ eventLocationField.setError(null);
+ }
+ }
+ }
+ });
+ }
+
+ public void onCheckboxClicked(View view) {
+ boolean allDayChecked = ((CheckBox) view).isChecked();
+ eventStartTimeField = (EditText) findViewById(R.id.newEventStartTimeField);
+ eventEndTimeField = (EditText) findViewById(R.id.newEventEndTimeField);
+ if(allDayChecked) {
+ eventStartTimeField.setText("12:00 AM");
+ eventEndTimeField.setText("11:59 PM");
+ } else {
+ eventStartTimeField.setText("");
+ eventEndTimeField.setText("");
+ }
+ }
+
+ public ArrayList getTripNames() {
+ ArrayList trips = new ArrayList<>();
+ ArrayList tripNames = new ArrayList<>();
+ tripNames.add("Select a Trip");
+
+ try {
+ db = getConnection();
+ Cursor cursor = db.rawQuery("select * from Trips", null);
+ cursor.moveToFirst();
+ while (!cursor.isAfterLast()) {
+ String tripId = cursor.getString(cursor.getColumnIndex("tripId"));
+ String startDate = cursor.getString(cursor.getColumnIndex("startDate"));
+ String endDate = cursor.getString(cursor.getColumnIndex("endDate"));
+ String city = cursor.getString(cursor.getColumnIndex("destinationCity"));
+ String state = cursor.getString(cursor.getColumnIndex("destinationState"));
+ String country = cursor.getString(cursor.getColumnIndex("destinationCountry"));
+ int milesAwayFromHome = cursor.getInt(cursor.getColumnIndex("milesAwayFromHome"));
+ TimeZone timeZone = TimeZone.getTimeZone(cursor.getString(cursor.getColumnIndex("timeZone")));
+ Location location = new Location(city, state,country);
+ String currency = cursor.getString(cursor.getColumnIndex("currency"));
+ String languagesString = cursor.getString(cursor.getColumnIndex("languages"));
+ String[] languages = languagesString.split(",");
+ Trip trip = new Trip(tripId, startDate, endDate, location, milesAwayFromHome,timeZone,currency,languages);
+ trips.add(trip);
+ cursor.moveToNext();
+ }
+
+ for(int a = 0; a < trips.size(); a++) {
+ if(trips.get(a).getTripId().contains("NT")) {
+ tripNames.add(trips.get(a).nationalTripToString());
+ } else {
+ tripNames.add(trips.get(a).internationalTripToString());
+ }
+ }
+
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ Log.d("Database Reading Error", e.toString());
+ }
+ finally {
+ // db.close();
+ }
+
+ return tripNames;
+ }
+}
diff --git a/app/src/main/java/com/example/trippe/ui/calendar/CalendarFragment.java b/app/src/main/java/com/example/trippe/ui/calendar/CalendarFragment.java
index 9335c7e..ce404b6 100644
--- a/app/src/main/java/com/example/trippe/ui/calendar/CalendarFragment.java
+++ b/app/src/main/java/com/example/trippe/ui/calendar/CalendarFragment.java
@@ -1,35 +1,149 @@
package com.example.trippe.ui.calendar;
+import android.content.Intent;
+import android.database.sqlite.SQLiteDatabase;
+import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.CalendarView;
+import android.widget.RelativeLayout;
import android.widget.TextView;
-import androidx.annotation.Nullable;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import com.example.trippe.R;
+import com.example.trippe.dao.CalendarDao;
+import com.example.trippe.model.Event;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
public class CalendarFragment extends Fragment {
private CalendarViewModel calendarViewModel;
- public View onCreateView(@NonNull LayoutInflater inflater,
- ViewGroup container, Bundle savedInstanceState) {
- calendarViewModel =
- ViewModelProviders.of(this).get(CalendarViewModel.class);
- View root = inflater.inflate(R.layout.fragment_calendar, container, false);
- final TextView textView = root.findViewById(R.id.text_dashboard);
- calendarViewModel.getText().observe(this, new Observer() {
+ private SQLiteDatabase database;
+
+ private static final String TAG = "CalendarActivity";
+ private CalendarView mCalendarView;
+ private TextView eventDate;
+ private View view;
+ private RecyclerView eventsRecyclerView;
+ private ArrayList events;
+ private Event activeEvent;
+ private ArrayList listOfEvents;
+
+ public CalendarFragment() {
+ database = getConnection();
+ }
+
+ private SQLiteDatabase getConnection() {
+ return SQLiteDatabase.openDatabase("/data/data/com.example.trippe/databases/TrippeDatabase", null, 0);
+ }
+
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ calendarViewModel = ViewModelProviders.of(this).get(CalendarViewModel.class);
+ view = inflater.inflate(R.layout.fragment_calendar, container, false);
+ mCalendarView = view.findViewById(R.id.calendarView);
+ eventDate = view.findViewById(R.id.dateText);
+ String date = getFormattedDate(mCalendarView.getDate());
+ eventDate.setText(date);
+
+ fillEventTable(view, date);
+
+ mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
- public void onChanged(@Nullable String s) {
- textView.setText(s);
+ public void onSelectedDayChange(CalendarView CalendarView, int year, int month, int dayOfMonth) {
+ String date = getFormattedDate(month, dayOfMonth, year);
+ System.out.println(date);
+ eventDate.setText(date);
+ eventDate.setTextColor(Color.BLACK);
+ fillEventTable(view, date);
}
});
- return root;
+
+ return view;
}
-}
\ No newline at end of file
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.calendar_action_bar, menu);
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == R.id.action_addEvent) {
+ Intent intent = new Intent(this.getContext(), AddEventView.class);
+ startActivity(intent);
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setHasOptionsMenu(true);
+ }
+
+ private void fillEventTable(final View view, String selectedDate) {
+ eventsRecyclerView = view.findViewById(R.id.eventsList);
+ eventsRecyclerView.setHasFixedSize(true);
+ LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
+ eventsRecyclerView.setLayoutManager(layoutManager);
+ final CalendarDao calendarDao = new CalendarDao();
+ events = calendarDao.getEvents(selectedDate);
+ EventsRecyclerViewAdapter eventsRecyclerViewAdapter = new EventsRecyclerViewAdapter(events, new EventsRecyclerViewAdapter.EventClickListener() {
+ @Override
+ public void onItemClick(Event event) {
+ listOfEvents = calendarDao.getEvents();
+ int eventPostion = 0;
+ for(int a = 0; a < listOfEvents.size(); a ++) {
+ if(event.getEventID().equals(listOfEvents.get(a).getEventID())) {
+ eventPostion = a;
+ }
+ }
+ Intent intent = new Intent(view.getContext(), EventView.class);
+ intent.putExtra("EventPosition", eventPostion);
+ startActivity(intent);
+ }
+ });
+
+ eventsRecyclerView.setAdapter(eventsRecyclerViewAdapter);
+ }
+
+ private String getFormattedDate(long longDate) {
+ Date date=new Date(longDate);
+ SimpleDateFormat df2 = new SimpleDateFormat("MM/dd/yy");
+ return df2.format(date);
+ }
+
+ private String getFormattedDate(int month, int dayOfMonth, int year) {
+ String formattedYear = Integer.toString(year).substring(2,4);
+ String formattedMonth;
+ if(month < 9) {
+ formattedMonth = "0" + (month + 1);
+ } else {
+ formattedMonth = Integer.toString(month + 1);
+ }
+ String formattedDay;
+ if(dayOfMonth < 10) {
+ formattedDay = "0" + dayOfMonth;
+ } else {
+ formattedDay = Integer.toString(dayOfMonth);
+ }
+ return formattedMonth + "/" + formattedDay + "/" + formattedYear;
+ }
+
+}
diff --git a/app/src/main/java/com/example/trippe/ui/calendar/EventView.java b/app/src/main/java/com/example/trippe/ui/calendar/EventView.java
new file mode 100644
index 0000000..9c79ddc
--- /dev/null
+++ b/app/src/main/java/com/example/trippe/ui/calendar/EventView.java
@@ -0,0 +1,73 @@
+package com.example.trippe.ui.calendar;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.FragmentTransaction;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.example.trippe.R;
+import com.example.trippe.model.Event;
+import com.example.trippe.dao.CalendarDao;
+import androidx.navigation.NavController;
+import androidx.navigation.Navigation;
+
+public class EventView extends AppCompatActivity {
+
+ private TextView name;
+ private TextView date;
+ private TextView location;
+ private TextView time;
+ private TextView trip;
+ private Button backToCalendarButton;
+ private Event event;
+ private CalendarFragment calendarFragment;
+ private CalendarDao calendarDao = new CalendarDao();
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_event_view);
+ setTitle("Event");
+ event = calendarDao.getEvent(getIntent().getIntExtra("EventPosition", 0));
+ final Activity activity_event_view = this;
+
+ name = (TextView) findViewById(R.id.name);
+ date = (TextView) findViewById(R.id.date);
+ location = (TextView) findViewById(R.id.location);
+ time = (TextView) findViewById(R.id.time);
+ trip = (TextView) findViewById(R.id.trip);
+ backToCalendarButton = (Button) findViewById(R.id.backToCalendarButton);
+ try {
+ name.setText(event.getName());
+ date.setText(event.getDate());
+ location.setText(event.getLocation());
+ time.setText(event.getTime());
+ trip.setText(event.getTripID());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ backToCalendarButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ NavController navController = Navigation.findNavController(activity_event_view, R.id.nav_host_fragment);
+ navController.navigate(R.id.navigation_dashboard);
+
+ } catch (ActivityNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ }
+
+}
diff --git a/app/src/main/java/com/example/trippe/ui/calendar/EventsRecyclerViewAdapter.java b/app/src/main/java/com/example/trippe/ui/calendar/EventsRecyclerViewAdapter.java
new file mode 100644
index 0000000..efcfcdc
--- /dev/null
+++ b/app/src/main/java/com/example/trippe/ui/calendar/EventsRecyclerViewAdapter.java
@@ -0,0 +1,58 @@
+package com.example.trippe.ui.calendar;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.trippe.R;
+import com.example.trippe.model.Event;
+
+import java.util.List;
+
+public class EventsRecyclerViewAdapter extends RecyclerView.Adapter {
+
+ public interface EventClickListener {
+ void onItemClick(Event event);
+ }
+
+ private List extends Event> events;
+ private final EventClickListener listener;
+
+ public EventsRecyclerViewAdapter(List events, EventClickListener listener){
+ this.events = events;
+ this.listener = listener;
+ }
+
+ @NonNull
+ @Override
+ public EventsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.event_card, parent, false);
+ EventsViewHolder eventsViewHolder = new EventsViewHolder(view);
+ return eventsViewHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull EventsViewHolder holder, int position) {
+ try {
+ Event event = events.get(position);
+ holder.getName().setText(event.getName());
+ holder.getTime().setText(event.getTime());
+ holder.bind(events.get(position), listener);
+ } catch (NullPointerException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return events.size();
+ }
+
+ @Override
+ public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
+ super.onAttachedToRecyclerView(recyclerView);
+ }
+}
diff --git a/app/src/main/java/com/example/trippe/ui/calendar/EventsViewHolder.java b/app/src/main/java/com/example/trippe/ui/calendar/EventsViewHolder.java
new file mode 100644
index 0000000..bf615c9
--- /dev/null
+++ b/app/src/main/java/com/example/trippe/ui/calendar/EventsViewHolder.java
@@ -0,0 +1,57 @@
+package com.example.trippe.ui.calendar;
+
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.cardview.widget.CardView;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.trippe.R;
+import com.example.trippe.model.Event;
+
+public class EventsViewHolder extends RecyclerView.ViewHolder {
+
+ private CardView eventsCardView;
+ private TextView name;
+ private TextView time;
+
+
+ public EventsViewHolder(View itemView) {
+ super(itemView);
+ setEventsCardView((CardView) itemView.findViewById(R.id.eventCard));
+ setName((TextView) itemView.findViewById(R.id.eventName));
+ setTime((TextView)itemView.findViewById(R.id.eventTime));
+ }
+
+ public CardView getEventsCardView() {
+ return eventsCardView;
+ }
+
+ public void setEventsCardView(CardView eventsCardView) {
+ this.eventsCardView = eventsCardView;
+ }
+
+ public TextView getName() {
+ return name;
+ }
+
+ public void setName(TextView name) {
+ this.name = name;
+ }
+
+ public TextView getTime() {
+ return time;
+ }
+
+ public void setTime(TextView time) {
+ this.time = time;
+ }
+
+ public void bind(final Event event, final EventsRecyclerViewAdapter.EventClickListener listener) {
+ itemView.setOnClickListener(new View.OnClickListener() {
+ @Override public void onClick(View v) {
+ listener.onItemClick(event);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/trippe/ui/trips/AddInternationalTripView.java b/app/src/main/java/com/example/trippe/ui/trips/AddInternationalTripView.java
index 043388c..500b201 100644
--- a/app/src/main/java/com/example/trippe/ui/trips/AddInternationalTripView.java
+++ b/app/src/main/java/com/example/trippe/ui/trips/AddInternationalTripView.java
@@ -14,10 +14,12 @@
import com.example.trippe.MainActivity;
import com.example.trippe.R;
+import com.example.trippe.dao.CalendarDao;
import com.example.trippe.dao.TripDao;
import com.example.trippe.model.Location;
import com.example.trippe.model.Trip;
import com.example.trippe.util.Utility;
+import com.example.trippe.model.Event;
import java.util.Calendar;
import java.util.TimeZone;
@@ -28,6 +30,7 @@ public class AddInternationalTripView extends AppCompatActivity {
private EditText startDateTextField;
private EditText endDateTextField;
private Spinner countrySpinner;
+ private CalendarDao calendarDao;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -70,6 +73,7 @@ public void addNewInternationalTrip(View view) {
String[] languages = {"English", "Spanish"};
Trip newTrip = new Trip(tripId, startDate, endDate, internationalLocation, 0, TimeZone.getTimeZone("EST"), "USD", languages);
TripDao tripDao = new TripDao();
+ //addTripEvents(startDate, endDate, newTrip);
boolean isAddedToDatabase = tripDao.addTrip(newTrip);
if (isAddedToDatabase == true) {
Intent intent = new Intent(this, MainActivity.class);
@@ -103,4 +107,15 @@ public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
}, year, month, day);
datePicker.show();
}
+
+ private void addTripEvents(String startDate, String endDate, Trip trip) {
+ String date = startDate;
+ do {
+ String eventID = Integer.toString(Utility.generateEventId() + calendarDao.getEvents().size());
+ calendarDao.addEvent(new Event(eventID, date, "12:00 AM", "11:59 PM",
+ trip.internationalTripToString() + " Trip", trip.internationalTripToString(), trip.internationalTripToString()));
+ calendarDao.nextDay(date);
+ } while(date != endDate);
+ }
+
}
diff --git a/app/src/main/java/com/example/trippe/ui/trips/AddNationalTripView.java b/app/src/main/java/com/example/trippe/ui/trips/AddNationalTripView.java
index d0c2f78..eadb506 100644
--- a/app/src/main/java/com/example/trippe/ui/trips/AddNationalTripView.java
+++ b/app/src/main/java/com/example/trippe/ui/trips/AddNationalTripView.java
@@ -14,7 +14,9 @@
import com.example.trippe.MainActivity;
import com.example.trippe.R;
+import com.example.trippe.dao.CalendarDao;
import com.example.trippe.dao.TripDao;
+import com.example.trippe.model.Event;
import com.example.trippe.model.Location;
import com.example.trippe.model.Trip;
import com.example.trippe.util.Utility;
@@ -28,6 +30,7 @@ public class AddNationalTripView extends AppCompatActivity {
private EditText cityTextField;
private EditText startDateTextField;
private EditText endDateTextField;
+ private CalendarDao calendarDao;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -73,6 +76,7 @@ public void addNewNationalTrip(View view) {
String[] languages = {"English", "Spanish"};
Trip newTrip = new Trip(tripId,startDate, endDate, nationalLocation, 0, TimeZone.getTimeZone("EST"), "USD", languages);
TripDao tripDao = new TripDao();
+ //addTripEvents(startDate, endDate, newTrip);
boolean isAddedToDatabase = tripDao.addTrip(newTrip);
if (isAddedToDatabase == true) {
Intent intent = new Intent(this, MainActivity.class);
@@ -105,4 +109,14 @@ public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
}, year, month, day);
datePicker.show();
}
+
+ private void addTripEvents(String startDate, String endDate, Trip trip) {
+ String date = startDate;
+ do {
+ String eventID = Integer.toString(Utility.generateEventId() + calendarDao.getEvents().size());
+ calendarDao.addEvent(new Event(eventID, date, "12:00 AM", "11:59 PM",
+ trip.internationalTripToString() + " Trip", trip.internationalTripToString(), trip.internationalTripToString()));
+ calendarDao.nextDay(date);
+ } while(date != endDate);
+ }
}
diff --git a/app/src/main/java/com/example/trippe/util/Utility.java b/app/src/main/java/com/example/trippe/util/Utility.java
index 192c16c..2c37a75 100644
--- a/app/src/main/java/com/example/trippe/util/Utility.java
+++ b/app/src/main/java/com/example/trippe/util/Utility.java
@@ -13,6 +13,7 @@ public class Utility {
/**
* generates a random Trip Id using a given prefix pattern (either NT for nationalTrip or
* IT for internationalTrip)
+ *
* @param prefixPattern
* @return the tripId as String
*/
@@ -24,25 +25,28 @@ public static String generateTripId(String prefixPattern) {
Integer randomInteger = ThreadLocalRandom.current().nextInt();
if (randomInteger.toString().contains("-")) {
tripId = prefixPattern + randomInteger;
- }
- else {
+ } else {
tripId = prefixPattern + "-" + randomInteger;
}
//checking whether tripId is already in use otherwise generate another tripId
TripDao tripDao = new TripDao();
tripIdExistent = tripDao.isTripIdExistent(tripId);
-
}
while (tripIdExistent == true);
return tripId;
}
+ public static Integer generateEventId() {
+ Integer randomInteger = ThreadLocalRandom.current().nextInt();
+ return randomInteger;
+ }
/**
* this method is used to get any resource indicator using a string
* in order to facilitate the pulling of resources into multiple classes
+ *
* @param resourceName
* @param anyClass
* @return the resource id as int
@@ -57,3 +61,4 @@ public static int getResourceIndicatorByString(String resourceName, Class> any
}
}
}
+
diff --git a/app/src/main/res/layout/activity_add_new_event.xml b/app/src/main/res/layout/activity_add_new_event.xml
new file mode 100644
index 0000000..c60d9f5
--- /dev/null
+++ b/app/src/main/res/layout/activity_add_new_event.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_event_view.xml b/app/src/main/res/layout/activity_event_view.xml
new file mode 100644
index 0000000..493d09f
--- /dev/null
+++ b/app/src/main/res/layout/activity_event_view.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/event_card.xml b/app/src/main/res/layout/event_card.xml
new file mode 100644
index 0000000..2d6014a
--- /dev/null
+++ b/app/src/main/res/layout/event_card.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_calendar.xml b/app/src/main/res/layout/fragment_calendar.xml
index cc8e4dc..14f26f6 100644
--- a/app/src/main/res/layout/fragment_calendar.xml
+++ b/app/src/main/res/layout/fragment_calendar.xml
@@ -1,19 +1,33 @@
-
+ android:layout_height="match_parent"
+ android:id="@+id/cRelativeLayout">
+
+
+
-
\ No newline at end of file
+ android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/calendar_action_bar.xml b/app/src/main/res/menu/calendar_action_bar.xml
new file mode 100644
index 0000000..db531e0
--- /dev/null
+++ b/app/src/main/res/menu/calendar_action_bar.xml
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file