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 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 @@ + + + + + + + + + + + + + + + + + + + + +