From 7a53f2a09cb1b6cf17307677aff2d3cd1cabfa8a Mon Sep 17 00:00:00 2001 From: jessholmes Date: Tue, 19 Nov 2019 20:09:09 -0500 Subject: [PATCH 1/5] Calendar stuff --- Trippe.iml | 2 +- .../java/com/example/trippe/model/Event.java | 26 +++++ .../trippe/ui/calendar/CalendarFragment.java | 107 ++++++++++++++++-- app/src/main/res/layout/fragment_calendar.xml | 30 +++-- local.properties | 4 +- 5 files changed, 146 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/example/trippe/model/Event.java diff --git a/Trippe.iml b/Trippe.iml index 29a6741..b91b170 100644 --- a/Trippe.iml +++ b/Trippe.iml @@ -13,7 +13,7 @@ - + \ No newline at end of file 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..b8ab543 --- /dev/null +++ b/app/src/main/java/com/example/trippe/model/Event.java @@ -0,0 +1,26 @@ +package com.example.trippe.model; + +public class Event { + long date; + String time; + String name; + //Trip trip; + + public Event(long date, String time, String name) { + this.date = date; + this.time = time; + this.name = name; + } + + public long getDate() { + return date; + } + + public String getTime() { + return time; + } + + public String getName() { + return name; + } +} 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..dc21bb4 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,9 +1,14 @@ package com.example.trippe.ui.calendar; +import android.annotation.SuppressLint; +import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.CalendarView; +import android.widget.TableLayout; +import android.widget.TableRow; import android.widget.TextView; import androidx.annotation.Nullable; @@ -11,25 +16,111 @@ import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; +import com.example.trippe.model.Event; import com.example.trippe.R; +import java.util.ArrayList; + public class CalendarFragment extends Fragment { private CalendarViewModel calendarViewModel; + private static final String TAG = "CalendarActivity"; + private CalendarView mCalendarView; + private TableLayout eventTable; + private TextView eventDate; + private TableRow tableHeading; + private TextView labelTime; + private TextView labelName; + private View view; + @SuppressLint("ResourceType") 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() { + calendarViewModel = ViewModelProviders.of(this).get(CalendarViewModel.class); + view = inflater.inflate(R.layout.fragment_calendar, container, false); + mCalendarView = (CalendarView) view.findViewById(R.id.calendarView); + eventDate = (TextView) view.findViewById(R.id.dateText); + eventTable = (TableLayout) view.findViewById(R.id.eventTable); + + tableHeading = new TableRow(view.getContext()); + tableHeading.setId(10); + tableHeading.setBackgroundColor(Color.GRAY); + tableHeading.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); + labelTime = new TextView(view.getContext()); + labelTime.setId(20); + labelTime.setText("Time"); + labelTime.setTextColor(Color.WHITE); + labelTime.setPadding(5, 5, 5, 5); + tableHeading.addView(labelTime);// add the column to the table row here + labelName = new TextView(view.getContext()); + labelName.setId(21);// define id that must be unique + labelName.setText("Event"); // set the text for the header + labelName.setTextColor(Color.WHITE); // set the color + labelName.setPadding(5, 5, 5, 5); // set the padding (if required) + tableHeading.addView(labelName); // add the column to the table row here + eventTable.addView(tableHeading, new TableLayout.LayoutParams( + TableLayout.LayoutParams.MATCH_PARENT, + TableLayout.LayoutParams.WRAP_CONTENT)); + + fillEventTable(view, eventTable,mCalendarView.getDate()); + + 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 = year + "/" + month + "/" + dayOfMonth; + eventDate.setText(date); + fillEventTable(view, eventTable,mCalendarView.getDate()); + //Log.d(TAG, "onSelectedDayChange: yyyy/mm/dd:" + date); + + /*Intent intent = new Intent(CalendarActivity.this, MainActivity.class); + intent.putExtra("date", date); + startActivity(intent);*/ } }); - return root; + + return view; + } + + public void fillEventTable(View view, TableLayout eventTable, long selectedDate) { + ArrayList eventList = new ArrayList<>(); + eventList.add(new Event(selectedDate, "9:00 am", "Go Swimming")); + eventList.add(new Event(selectedDate, "10:00 am", "Go Hiking")); + eventList.add(new Event(selectedDate, "11:00 am", "Lunch")); + int count=0; + /*while (cursor.moveToNext()) */for(int a = 0; a < eventList.size(); a++) { + if (eventList.get(a).getDate() == selectedDate) { + //String eventTime = cursor.getString(2);// get the first variable + //String eventName = cursor.getDouble(4);// get the second variable + String eventTime = eventList.get(a).getTime(); + String eventName = eventList.get(a).getTime(); +// Create the table row + TableRow tr = new TableRow(view.getContext()); + if (count % 2 != 0) tr.setBackgroundColor(Color.GRAY); + tr.setId(100 + count); + tr.setLayoutParams(new TableRow.LayoutParams( + TableRow.LayoutParams.MATCH_PARENT, + TableRow.LayoutParams.WRAP_CONTENT)); + +//Create two columns to add as table data + // Create a TextView to add date + TextView labelTIME = new TextView(view.getContext()); + labelTIME.setId(200 + count); + labelTIME.setText(eventTime); + labelTIME.setPadding(2, 0, 5, 0); + labelTIME.setTextColor(Color.WHITE); + tr.addView(labelTIME); + TextView labelNAME = new TextView(view.getContext()); + labelNAME.setId(200 + count); + labelNAME.setText(eventName); + labelNAME.setTextColor(Color.WHITE); + tr.addView(labelNAME); +// finally add this to the table row + eventTable.addView(tr, new TableLayout.LayoutParams( + TableLayout.LayoutParams.MATCH_PARENT, + TableLayout.LayoutParams.WRAP_CONTENT)); + count++; + } + } } } \ 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..a6c49fa 100644 --- a/app/src/main/res/layout/fragment_calendar.xml +++ b/app/src/main/res/layout/fragment_calendar.xml @@ -1,19 +1,25 @@ - + + - \ No newline at end of file + android:layout_below="@+id/calendarView" /> + + + \ No newline at end of file diff --git a/local.properties b/local.properties index 054f44a..002742a 100644 --- a/local.properties +++ b/local.properties @@ -4,5 +4,5 @@ # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -#Mon Nov 11 19:50:47 EST 2019 -sdk.dir=C\:\\Users\\Joe\\AppData\\Local\\Android\\Sdk +#Tue Nov 12 20:41:48 EST 2019 +sdk.dir=/Users/jessholmes/Library/Android/sdk From 9732de426deee949cce5eaeb2975d86b204b5047 Mon Sep 17 00:00:00 2001 From: jessholmes Date: Tue, 26 Nov 2019 17:46:53 -0500 Subject: [PATCH 2/5] Update CalendarFragment.java --- .../trippe/ui/calendar/CalendarFragment.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) 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 dc21bb4..cc3f5e4 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 @@ -21,6 +21,7 @@ import com.example.trippe.R; import java.util.ArrayList; +import java.util.Date; public class CalendarFragment extends Fragment { @@ -50,13 +51,13 @@ public View onCreateView(@NonNull LayoutInflater inflater, labelTime = new TextView(view.getContext()); labelTime.setId(20); labelTime.setText("Time"); - labelTime.setTextColor(Color.WHITE); + labelTime.setTextColor(Color.BLACK); labelTime.setPadding(5, 5, 5, 5); tableHeading.addView(labelTime);// add the column to the table row here labelName = new TextView(view.getContext()); labelName.setId(21);// define id that must be unique labelName.setText("Event"); // set the text for the header - labelName.setTextColor(Color.WHITE); // set the color + labelName.setTextColor(Color.BLACK); // set the color labelName.setPadding(5, 5, 5, 5); // set the padding (if required) tableHeading.addView(labelName); // add the column to the table row here eventTable.addView(tableHeading, new TableLayout.LayoutParams( @@ -64,13 +65,21 @@ public View onCreateView(@NonNull LayoutInflater inflater, TableLayout.LayoutParams.WRAP_CONTENT)); fillEventTable(view, eventTable,mCalendarView.getDate()); + System.out.println(mCalendarView.getDate()); + Date date = new Date(mCalendarView.getDate()); + date.equals(date); + System.out.println(new Date(mCalendarView.getDate())); mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { @Override public void onSelectedDayChange(CalendarView CalendarView, int year, int month, int dayOfMonth) { String date = year + "/" + month + "/" + dayOfMonth; eventDate.setText(date); + eventDate.setTextColor(Color.BLACK); + eventTable.removeAllViews(); fillEventTable(view, eventTable,mCalendarView.getDate()); + System.out.println(mCalendarView.getDate()); + System.out.println(new Date(mCalendarView.getDate())); //Log.d(TAG, "onSelectedDayChange: yyyy/mm/dd:" + date); /*Intent intent = new Intent(CalendarActivity.this, MainActivity.class); @@ -93,8 +102,8 @@ public void fillEventTable(View view, TableLayout eventTable, long selectedDate) //String eventTime = cursor.getString(2);// get the first variable //String eventName = cursor.getDouble(4);// get the second variable String eventTime = eventList.get(a).getTime(); - String eventName = eventList.get(a).getTime(); -// Create the table row + String eventName = eventList.get(a).getName(); + // Create the table row TableRow tr = new TableRow(view.getContext()); if (count % 2 != 0) tr.setBackgroundColor(Color.GRAY); tr.setId(100 + count); @@ -102,18 +111,18 @@ public void fillEventTable(View view, TableLayout eventTable, long selectedDate) TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); -//Create two columns to add as table data + //Create two columns to add as table data // Create a TextView to add date TextView labelTIME = new TextView(view.getContext()); labelTIME.setId(200 + count); labelTIME.setText(eventTime); labelTIME.setPadding(2, 0, 5, 0); - labelTIME.setTextColor(Color.WHITE); + labelTIME.setTextColor(Color.BLACK); tr.addView(labelTIME); TextView labelNAME = new TextView(view.getContext()); labelNAME.setId(200 + count); labelNAME.setText(eventName); - labelNAME.setTextColor(Color.WHITE); + labelNAME.setTextColor(Color.BLACK); tr.addView(labelNAME); // finally add this to the table row eventTable.addView(tr, new TableLayout.LayoutParams( From aeb2de5b60602c5a78fc70033030b81631f7ec90 Mon Sep 17 00:00:00 2001 From: jessholmes Date: Mon, 16 Dec 2019 20:01:47 -0500 Subject: [PATCH 3/5] 11/26 Calendar function. Having problems going back to fragment --- app/src/main/AndroidManifest.xml | 4 +- .../java/com/example/trippe/MainActivity.java | 46 ++-- .../com/example/trippe/dao/CalendarDao.java | 117 ++++++++++ .../java/com/example/trippe/model/Event.java | 75 +++++- .../trippe/ui/calendar/AddEventView.java | 221 ++++++++++++++++++ .../trippe/ui/calendar/CalendarFragment.java | 191 +++++++-------- .../calendar/EventsRecyclerViewAdapter.java | 51 ++++ .../trippe/ui/calendar/EventsViewHolder.java | 48 ++++ .../java/com/example/trippe/util/Utility.java | 9 +- .../res/layout/activity_add_new_event.xml | 130 +++++++++++ app/src/main/res/layout/event_card.xml | 46 ++++ app/src/main/res/layout/fragment_calendar.xml | 22 +- app/src/main/res/menu/calendar_action_bar.xml | 12 + 13 files changed, 843 insertions(+), 129 deletions(-) create mode 100644 app/src/main/java/com/example/trippe/dao/CalendarDao.java create mode 100644 app/src/main/java/com/example/trippe/ui/calendar/AddEventView.java create mode 100644 app/src/main/java/com/example/trippe/ui/calendar/EventsRecyclerViewAdapter.java create mode 100644 app/src/main/java/com/example/trippe/ui/calendar/EventsViewHolder.java create mode 100644 app/src/main/res/layout/activity_add_new_event.xml create mode 100644 app/src/main/res/layout/event_card.xml create mode 100644 app/src/main/res/menu/calendar_action_bar.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6eeba57..67964c1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,9 @@ -T + + + diff --git a/app/src/main/java/com/example/trippe/MainActivity.java b/app/src/main/java/com/example/trippe/MainActivity.java index 6c2c868..da90fb6 100644 --- a/app/src/main/java/com/example/trippe/MainActivity.java +++ b/app/src/main/java/com/example/trippe/MainActivity.java @@ -7,7 +7,9 @@ import android.os.Bundle; import android.os.StrictMode; import android.util.Log; + import com.google.android.material.bottomnavigation.BottomNavigationView; + import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.menu.MenuView; import androidx.core.app.ActivityCompat; @@ -16,6 +18,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; @@ -69,25 +72,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, " + - "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));"); - } - 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..aa8f36b --- /dev/null +++ b/app/src/main/java/com/example/trippe/dao/CalendarDao.java @@ -0,0 +1,117 @@ +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; + } + +} diff --git a/app/src/main/java/com/example/trippe/model/Event.java b/app/src/main/java/com/example/trippe/model/Event.java index b8ab543..16e61aa 100644 --- a/app/src/main/java/com/example/trippe/model/Event.java +++ b/app/src/main/java/com/example/trippe/model/Event.java @@ -1,26 +1,85 @@ package com.example.trippe.model; public class Event { - long date; - String time; + String eventID; + String date; + String startTime; + String endTime; String name; - //Trip trip; + String location; + String tripID; - public Event(long date, String time, String name) { + public Event(String eventID, String date, String startTime, String endTime, String name, String location, String tripID) { + this.eventID = eventID; this.date = date; - this.time = time; + this.startTime = startTime; + this.endTime = endTime; this.name = name; + this.location = location; + this.tripID = tripID; } - public long getDate() { + public String getEventID() { + return eventID; + } + + public void setEventID(String eventID) { + this.eventID = eventID; + } + + public String getDate() { return date; } - public String getTime() { - return time; + 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..d0e1f9f --- /dev/null +++ b/app/src/main/java/com/example/trippe/ui/calendar/AddEventView.java @@ -0,0 +1,221 @@ +package com.example.trippe.ui.calendar; + +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 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; + + + 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 { + //startActivity(new Intent(v.getContext(), MainActivity.class)); + relativeLayout.setVisibility(View.GONE); + CalendarFragment fragment = new CalendarFragment(); + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + transaction.replace(R.id.contaner, fragment); + + transaction.commit(); + + } 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); + startActivity(new Intent(v.getContext(), MainActivity.class)); + } + } + 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 { + Cursor cursor = db.rawQuery("select * from Trips", null); + cursor.moveToFirst(); + while (!cursor.isAfterLast()) { + String tripId = cursor.getString(cursor.getColumnIndex("tripId")); + int tripFlagIndicator = cursor.getInt(cursor.getColumnIndex("tripFlagIndicator")); + 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")); + int zipCode = cursor.getInt(cursor.getColumnIndex("destinationZipCode")); + 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,zipCode,country); + String currency = cursor.getString(cursor.getColumnIndex("currency")); + String languagesString = cursor.getString(cursor.getColumnIndex("languages")); + String[] languages = languagesString.split(","); + Trip trip = new Trip(tripId, tripFlagIndicator, 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 cc3f5e4..33c3598 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,135 +1,142 @@ package com.example.trippe.ui.calendar; -import android.annotation.SuppressLint; +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.TableLayout; -import android.widget.TableRow; +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 com.example.trippe.model.Event; +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; + + private SQLiteDatabase database; + private static final String TAG = "CalendarActivity"; private CalendarView mCalendarView; - private TableLayout eventTable; private TextView eventDate; - private TableRow tableHeading; - private TextView labelTime; - private TextView labelName; private View view; + private RecyclerView eventsRecyclerView; + private ArrayList events; - @SuppressLint("ResourceType") - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { + 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 = (CalendarView) view.findViewById(R.id.calendarView); - eventDate = (TextView) view.findViewById(R.id.dateText); - eventTable = (TableLayout) view.findViewById(R.id.eventTable); - - tableHeading = new TableRow(view.getContext()); - tableHeading.setId(10); - tableHeading.setBackgroundColor(Color.GRAY); - tableHeading.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); - labelTime = new TextView(view.getContext()); - labelTime.setId(20); - labelTime.setText("Time"); - labelTime.setTextColor(Color.BLACK); - labelTime.setPadding(5, 5, 5, 5); - tableHeading.addView(labelTime);// add the column to the table row here - labelName = new TextView(view.getContext()); - labelName.setId(21);// define id that must be unique - labelName.setText("Event"); // set the text for the header - labelName.setTextColor(Color.BLACK); // set the color - labelName.setPadding(5, 5, 5, 5); // set the padding (if required) - tableHeading.addView(labelName); // add the column to the table row here - eventTable.addView(tableHeading, new TableLayout.LayoutParams( - TableLayout.LayoutParams.MATCH_PARENT, - TableLayout.LayoutParams.WRAP_CONTENT)); - - fillEventTable(view, eventTable,mCalendarView.getDate()); - System.out.println(mCalendarView.getDate()); - Date date = new Date(mCalendarView.getDate()); - date.equals(date); - System.out.println(new Date(mCalendarView.getDate())); + mCalendarView = view.findViewById(R.id.calendarView); + eventDate = view.findViewById(R.id.dateText); + String date = getFormattedDate(mCalendarView.getDate()); + eventDate.setText(date); + + fillEventTable(view, date); + + eventsRecyclerView = view.findViewById(R.id.eventsList); + eventsRecyclerView.setHasFixedSize(true); + LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); + eventsRecyclerView.setLayoutManager(layoutManager); + CalendarDao calendarDao = new CalendarDao(); + events = calendarDao.getEvents(date); + EventsRecyclerViewAdapter eventsRecyclerViewAdapter = new EventsRecyclerViewAdapter(events); + eventsRecyclerView.setAdapter(eventsRecyclerViewAdapter); mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { @Override public void onSelectedDayChange(CalendarView CalendarView, int year, int month, int dayOfMonth) { - String date = year + "/" + month + "/" + dayOfMonth; + String date = getFormattedDate(month, dayOfMonth, year); + System.out.println(date); eventDate.setText(date); eventDate.setTextColor(Color.BLACK); - eventTable.removeAllViews(); - fillEventTable(view, eventTable,mCalendarView.getDate()); - System.out.println(mCalendarView.getDate()); - System.out.println(new Date(mCalendarView.getDate())); - //Log.d(TAG, "onSelectedDayChange: yyyy/mm/dd:" + date); - - /*Intent intent = new Intent(CalendarActivity.this, MainActivity.class); - intent.putExtra("date", date); - startActivity(intent);*/ + fillEventTable(view, date); } }); return view; } - public void fillEventTable(View view, TableLayout eventTable, long selectedDate) { - ArrayList eventList = new ArrayList<>(); - eventList.add(new Event(selectedDate, "9:00 am", "Go Swimming")); - eventList.add(new Event(selectedDate, "10:00 am", "Go Hiking")); - eventList.add(new Event(selectedDate, "11:00 am", "Lunch")); - int count=0; - /*while (cursor.moveToNext()) */for(int a = 0; a < eventList.size(); a++) { - if (eventList.get(a).getDate() == selectedDate) { - //String eventTime = cursor.getString(2);// get the first variable - //String eventName = cursor.getDouble(4);// get the second variable - String eventTime = eventList.get(a).getTime(); - String eventName = eventList.get(a).getName(); - // Create the table row - TableRow tr = new TableRow(view.getContext()); - if (count % 2 != 0) tr.setBackgroundColor(Color.GRAY); - tr.setId(100 + count); - tr.setLayoutParams(new TableRow.LayoutParams( - TableRow.LayoutParams.MATCH_PARENT, - TableRow.LayoutParams.WRAP_CONTENT)); - - //Create two columns to add as table data - // Create a TextView to add date - TextView labelTIME = new TextView(view.getContext()); - labelTIME.setId(200 + count); - labelTIME.setText(eventTime); - labelTIME.setPadding(2, 0, 5, 0); - labelTIME.setTextColor(Color.BLACK); - tr.addView(labelTIME); - TextView labelNAME = new TextView(view.getContext()); - labelNAME.setId(200 + count); - labelNAME.setText(eventName); - labelNAME.setTextColor(Color.BLACK); - tr.addView(labelNAME); -// finally add this to the table row - eventTable.addView(tr, new TableLayout.LayoutParams( - TableLayout.LayoutParams.MATCH_PARENT, - TableLayout.LayoutParams.WRAP_CONTENT)); - count++; - } + @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); } -} \ No newline at end of file + + private void fillEventTable(View view, String selectedDate) { + eventsRecyclerView = view.findViewById(R.id.eventsList); + eventsRecyclerView.setHasFixedSize(true); + LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); + eventsRecyclerView.setLayoutManager(layoutManager); + CalendarDao calendarDao = new CalendarDao(); + events = calendarDao.getEvents(selectedDate); + System.out.println(events); + EventsRecyclerViewAdapter eventsRecyclerViewAdapter = new EventsRecyclerViewAdapter(events); + 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/EventsRecyclerViewAdapter.java b/app/src/main/java/com/example/trippe/ui/calendar/EventsRecyclerViewAdapter.java new file mode 100644 index 0000000..26114b8 --- /dev/null +++ b/app/src/main/java/com/example/trippe/ui/calendar/EventsRecyclerViewAdapter.java @@ -0,0 +1,51 @@ +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 { + + private List events; + + public EventsRecyclerViewAdapter(List events){ + this.events = events; + } + + @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()); + } 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..4aca9b2 --- /dev/null +++ b/app/src/main/java/com/example/trippe/ui/calendar/EventsViewHolder.java @@ -0,0 +1,48 @@ +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; + +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; + } +} \ No newline at end of file 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 1c57373..8b94480 100644 --- a/app/src/main/java/com/example/trippe/util/Utility.java +++ b/app/src/main/java/com/example/trippe/util/Utility.java @@ -1,6 +1,5 @@ package com.example.trippe.util; -import java.util.ArrayList; import java.util.concurrent.ThreadLocalRandom; public class Utility { @@ -12,10 +11,14 @@ public static String generateTripId(String prefixPattern) { Integer randomInteger = ThreadLocalRandom.current().nextInt(); if (randomInteger.toString().contains("-")) { tripId = prefixPattern + randomInteger; - } - else { + } else { tripId = prefixPattern + "-" + randomInteger; } return tripId; } + + public static Integer generateEventId() { + Integer randomInteger = ThreadLocalRandom.current().nextInt(); + return randomInteger; + } } 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 @@ + + + + + + + + + + + + + + + + + + + + +