throwing in the towel

This commit is contained in:
Wyatt J. Miller 2020-11-15 02:36:07 -05:00
parent 27b2f5f028
commit 0749a4a486
4 changed files with 203 additions and 42 deletions

View File

@ -27,6 +27,7 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this) mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
mDarkTheme = mSharedPrefs!!.getBoolean(SettingsFragment.PREFERENCE_THEME, false) mDarkTheme = mSharedPrefs!!.getBoolean(SettingsFragment.PREFERENCE_THEME, false)
if (mDarkTheme) { if (mDarkTheme) {
setTheme(R.style.DarkTheme) setTheme(R.style.DarkTheme)
} }
@ -34,8 +35,6 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_course) setContentView(R.layout.activity_course)
// mDialog = CourseDialogFragment()
mCourseListRecyclerView = findViewById(R.id.courseRecyclerView) mCourseListRecyclerView = findViewById(R.id.courseRecyclerView)
mCourseDb = CourseDatabase.getInstance(applicationContext) mCourseDb = CourseDatabase.getInstance(applicationContext)
mCourseListRecyclerView = findViewById(R.id.courseRecyclerView) mCourseListRecyclerView = findViewById(R.id.courseRecyclerView)
@ -63,31 +62,28 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
//Snackbar.make(findViewById(android.R.id.content), "*proceeds to make raspberry noises*", 5000).show() //Snackbar.make(findViewById(android.R.id.content), "*proceeds to make raspberry noises*", 5000).show()
true true
} }
R.id.edit -> {
// up comes a dialog box editing the desired list item
mDialog = CourseDialogFragment()
mDialog.getContext(CourseContext.EDIT, mCourseDb)
mDialog.show(supportFragmentManager, "")
true
}
R.id.delete -> {
// takes out item.itemId aka deletes record
true
}
else -> super.onOptionsItemSelected(item) else -> super.onOptionsItemSelected(item)
} }
} }
override fun onCourseEntered(course: String) { override fun onCourseEntered(course: Course) {
// Returns subject entered in the SubjectDialogFragment dialog // Returns subject entered in the SubjectDialogFragment dialog
if (course!!.isNotEmpty()) { if (course != null) {
val c = Course(course) if (course.id == 0) {
if (mCourseDb.addCourse(c)) { if (mCourseDb.addCourse(course)) {
mCourseAdapter?.addCourse(c) mCourseAdapter?.addCourse(course)
Toast.makeText(this@CourseActivity, course, Toast.LENGTH_LONG).show() //Snackbar.make(this@CourseActivity, "$course entered!", 5000).show()
} else {
val message = resources.getString("Already exists!".toInt(), course)
Toast.makeText(this@CourseActivity, message, Toast.LENGTH_SHORT).show()
}
} else { } else {
val message = resources.getString("Already exists!".toInt(), course) if (course.id != 0) {
Toast.makeText(this@CourseActivity, message, Toast.LENGTH_SHORT).show() mCourseDb.updateCourse(course)
mCourseAdapter?.updateCourse(course)
} else {
// ??
}
} }
} }
} }
@ -112,13 +108,13 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
fun bind(course: Course) { fun bind(course: Course) {
mCourse = course mCourse = course
mTextView.text = course.name mTextView.text = course.name
mTextView.setBackgroundColor(Color.RED) mTextView.setBackgroundColor(Color.MAGENTA)
} }
override fun onClick(view: View) { override fun onClick(view: View) {
// Start QuestionActivity, indicating what subject was clicked
mDialog = CourseDialogFragment() mDialog = CourseDialogFragment()
mDialog.getContext(CourseContext.VIEW, mCourseDb) mDialog.getContext(CourseContext.VIEW, mCourseDb)
mDialog.getCourseId(mCourse!!.id)
mDialog.show(supportFragmentManager, "") mDialog.show(supportFragmentManager, "")
} }
@ -152,7 +148,7 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
// Process action item selection // Process action item selection
return when (item.getItemId()) { return when (item.itemId) {
R.id.delete -> { R.id.delete -> {
// Delete from the database and remove from the RecyclerView // Delete from the database and remove from the RecyclerView
mCourseDb.deleteCourse(mSelectedCourse) mCourseDb.deleteCourse(mSelectedCourse)
@ -162,12 +158,21 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
mode.finish() mode.finish()
true true
} }
R.id.edit -> {
// up comes a dialog box editing the desired list item
mCourseAdapter?.takeCourseIndex()
mDialog = CourseDialogFragment()
mDialog.getContext(CourseContext.EDIT, mCourseDb)
mDialog.getCourseId(mSelectedCourse.id)
mDialog.show(supportFragmentManager, "")
true
}
else -> false else -> false
} }
} }
override fun onDestroyActionMode(mode: ActionMode) { override fun onDestroyActionMode(mode: ActionMode) {
//mActionMode = null mActionMode = null
// CAB closing, need to deselect item if not deleted // CAB closing, need to deselect item if not deleted
mCourseAdapter?.notifyItemChanged(mSelectedCoursePosition) mCourseAdapter?.notifyItemChanged(mSelectedCoursePosition)
@ -183,6 +188,8 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
} }
private inner class CourseAdapter(private val mCourseList: MutableList<Course>) : RecyclerView.Adapter<CourseHolder>() { private inner class CourseAdapter(private val mCourseList: MutableList<Course>) : RecyclerView.Adapter<CourseHolder>() {
private var mOldCourseIndex = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CourseHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CourseHolder {
val layoutInflater = LayoutInflater.from(applicationContext) val layoutInflater = LayoutInflater.from(applicationContext)
return CourseHolder(layoutInflater, parent) return CourseHolder(layoutInflater, parent)
@ -196,6 +203,11 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
return mCourseList.size return mCourseList.size
} }
fun takeCourseIndex() {
val index = mSelectedCoursePosition
mOldCourseIndex = index
}
fun removeCourse(course: Course?) { fun removeCourse(course: Course?) {
// Find subject in the list // Find subject in the list
val index = mCourseList.indexOf(course) val index = mCourseList.indexOf(course)
@ -218,5 +230,12 @@ class CourseActivity : AppCompatActivity(), CourseDialogFragment.onCourseEntered
// Scroll to the top // Scroll to the top
mCourseListRecyclerView?.scrollToPosition(0) mCourseListRecyclerView?.scrollToPosition(0)
} }
fun updateCourse(course: Course?) {
mCourseList.removeAt(mOldCourseIndex)
mCourseList.add(0, course!!)
notifyItemChanged(0)
mCourseListRecyclerView?.scrollToPosition(0)
}
} }
} }

View File

@ -58,15 +58,16 @@ class CourseDatabase(context: Context?) : SQLiteOpenHelper(context, DATABASE_NAM
return courses return courses
} }
fun getCourse(courseId: Long): Course { fun getCourse(courseid: Int): Course {
val course = Course() var course = Course()
val db = this.readableDatabase val db = this.readableDatabase
val sql val sql =
= "select * from " + CourseTable.TABLE + "select * from " + CourseTable.TABLE +
"where " + CourseTable.COL_ID + " = ?" " where " + CourseTable.COL_ID + " = ?"
val cursor = db.rawQuery(sql, arrayOf(courseId.toString())) val cursor = db.rawQuery(sql, arrayOf(java.lang.Float.toString(courseid.toFloat())))
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
course.id = cursor.getInt(0)
course.name = cursor.getString(1) course.name = cursor.getString(1)
course.description = cursor.getString(2) course.description = cursor.getString(2)
course.location = cursor.getString(3) course.location = cursor.getString(3)
@ -89,14 +90,20 @@ class CourseDatabase(context: Context?) : SQLiteOpenHelper(context, DATABASE_NAM
values.put(CourseTable.COL_TIME, course.time) values.put(CourseTable.COL_TIME, course.time)
values.put(CourseTable.COL_INSTRUCTOR, course.instructor) values.put(CourseTable.COL_INSTRUCTOR, course.instructor)
val id = db.insert(CourseTable.TABLE, null, values) val id = db.insert(CourseTable.TABLE, null, values)
course.id = id.toInt()
return id != -1L return id != -1L
} }
fun updateCourse(course: Course) { fun updateCourse(course: Course) {
val db = writableDatabase val db = writableDatabase
val values = ContentValues() val values = ContentValues()
values.put(CourseTable.COL_NAME, course.name)
db.update(CourseTable.TABLE, values, CourseTable.COL_NAME + " = ?", arrayOf(course.name)) values.put(CourseTable.COL_DESCRIPTION, course.description)
values.put(CourseTable.COL_LOCATION, course.location)
values.put(CourseTable.COL_DAYOFWEEK, course.dayofweek)
values.put(CourseTable.COL_TIME, course.time)
values.put(CourseTable.COL_INSTRUCTOR, course.instructor)
db.update(CourseTable.TABLE, values, CourseTable.COL_ID + " = " + course.id, null)
} }
fun deleteCourse(course: Course) { fun deleteCourse(course: Course) {

View File

@ -3,6 +3,8 @@ package com.wyattjmiller.classscheduleapp
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.text.Editable
import android.view.View
import android.widget.Button import android.widget.Button
import android.widget.EditText import android.widget.EditText
import android.widget.TextView import android.widget.TextView
@ -20,10 +22,19 @@ class CourseDialogFragment : DialogFragment() {
private lateinit var mEditTextCourseDescription: EditText private lateinit var mEditTextCourseDescription: EditText
private lateinit var mContext: CourseContext private lateinit var mContext: CourseContext
private lateinit var mCourseDb: CourseDatabase private lateinit var mCourseDb: CourseDatabase
private lateinit var mCourseNameView: TextView
private lateinit var mCourseLocationView: TextView
private lateinit var mCourseTimeView: TextView
private lateinit var mCourseDateView: TextView
private lateinit var mCourseInstructor: TextView
private lateinit var mCourseDescriptionView: TextView
private var mCourse: Course = Course() private var mCourse: Course = Course()
interface onCourseEnteredListener { interface onCourseEnteredListener {
fun onCourseEntered(course: String) fun onCourseEntered(course: Course)
} }
private lateinit var mDoneButton: Button private lateinit var mDoneButton: Button
@ -42,15 +53,59 @@ class CourseDialogFragment : DialogFragment() {
mEditTextCourseTime = dialogView.findViewById(R.id.editTextCourseTime) mEditTextCourseTime = dialogView.findViewById(R.id.editTextCourseTime)
mEditTextCourseDescription = dialogView.findViewById(R.id.editTextCourseDescription) mEditTextCourseDescription = dialogView.findViewById(R.id.editTextCourseDescription)
mCourseNameView = dialogView.findViewById(R.id.textviewCourseName2)
mCourseLocationView = dialogView.findViewById(R.id.textViewCourseLocation2)
mCourseDateView = dialogView.findViewById(R.id.textViewCourseDayOfWeek2)
mCourseTimeView = dialogView.findViewById(R.id.textViewCourseTime2)
mCourseInstructor = dialogView.findViewById(R.id.textViewCourseInstructor2)
mCourseDescriptionView = dialogView.findViewById(R.id.textViewCourseDescription2)
mCourseNameView.visibility = View.GONE
mCourseLocationView.visibility = View.GONE
mCourseDateView.visibility = View.GONE
mCourseTimeView.visibility = View.GONE
mCourseInstructor.visibility = View.GONE
mCourseDescriptionView.visibility = View.GONE
when (mContext) { when (mContext) {
CourseContext.ADD -> { CourseContext.ADD -> {
// TODO: set title to add course and when pressing done, add to database mTextViewTitle.text = "Add Course"
} }
CourseContext.EDIT -> { CourseContext.EDIT -> {
// TODO: set title to edit course and when pressing done, modify record to database var course = mCourseDb.getCourse(mCourse.id)
mTextViewTitle.text = "Edit Course"
mEditTextCourseName.setText(course.name)
mEditTextCourseLocation.setText(course.location)
mEditTextCourseInstructor.setText(course.instructor)
mEditTextDayOfWeek.setText(course.dayofweek)
mEditTextCourseTime.setText(course.time)
mEditTextCourseDescription.setText(course.description)
} }
CourseContext.VIEW -> { CourseContext.VIEW -> {
// TODO: set title to view course, make everything text, and when pressing done, close dialog val course = mCourseDb.getCourse(mCourse.id)
mEditTextCourseName.visibility = View.INVISIBLE
mEditTextCourseLocation.visibility = View.INVISIBLE
mEditTextCourseInstructor.visibility = View.INVISIBLE
mEditTextDayOfWeek.visibility = View.INVISIBLE
mEditTextCourseTime.visibility = View.INVISIBLE
mEditTextCourseDescription.visibility = View.INVISIBLE
mCourseNameView.visibility = View.VISIBLE
mCourseLocationView.visibility = View.VISIBLE
mCourseDateView.visibility = View.VISIBLE
mCourseTimeView.visibility = View.VISIBLE
mCourseInstructor.visibility = View.VISIBLE
mCourseDescriptionView.visibility = View.VISIBLE
mTextViewTitle.text = "View Course"
mCourseNameView.text = course.name
mCourseLocationView.text = course.location
mCourseDateView.text = course.dayofweek
mCourseTimeView.text = course.time
mCourseInstructor.text = course.instructor
mCourseDescriptionView.text = course.description
} }
} }
@ -68,8 +123,7 @@ class CourseDialogFragment : DialogFragment() {
val valid = this.validityCheck() val valid = this.validityCheck()
if (valid) { if (valid) {
val course = mCourse.name mListener?.onCourseEntered(mCourse)
mListener?.onCourseEntered(course!!.trim())
dismiss() dismiss()
} }
} }
@ -83,8 +137,7 @@ class CourseDialogFragment : DialogFragment() {
val valid = this.validityCheck() val valid = this.validityCheck()
if (valid) { if (valid) {
val course = mCourse.name mListener?.onCourseEntered(mCourse)
mListener?.onCourseEntered(course!!.trim())
dismiss() dismiss()
} }
} }
@ -102,6 +155,10 @@ class CourseDialogFragment : DialogFragment() {
mCourseDb = database mCourseDb = database
} }
fun getCourseId(courseId: Int) {
mCourse.id = courseId
}
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
super.onAttach(context) super.onAttach(context)
mListener = context as onCourseEnteredListener mListener = context as onCourseEnteredListener
@ -118,7 +175,7 @@ class CourseDialogFragment : DialogFragment() {
} }
companion object { companion object {
const val EXTRA_COURSE_ID = "com.wyattjmiller.classscheduleapp.course_id" const val EXTRA_COURSE = "com.wyattjmiller.classscheduleapp.course"
} }
} }

View File

@ -31,6 +31,18 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewTitle" /> app:layout_constraintTop_toBottomOf="@+id/textViewTitle" />
<TextView
android:id="@+id/textviewCourseName2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:layout_marginEnd="60dp"
android:ems="10"
android:inputType="textPersonName"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewTitle" />
<TextView <TextView
android:id="@+id/textViewTitle" android:id="@+id/textViewTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -64,6 +76,18 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseName" /> app:layout_constraintTop_toBottomOf="@+id/editTextCourseName" />
<TextView
android:id="@+id/textViewCourseLocation2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:layout_marginEnd="60dp"
android:ems="10"
android:inputType="textPersonName"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseName" />
<EditText <EditText
android:id="@+id/editTextCourseDayOfWeek" android:id="@+id/editTextCourseDayOfWeek"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -72,6 +96,19 @@
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:ems="10" android:ems="10"
android:inputType="textPersonName" android:inputType="textPersonName"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseLocation" />
<TextView
android:id="@+id/textViewCourseDayOfWeek2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:layout_marginEnd="60dp"
android:ems="10"
android:inputType="textPersonName"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseLocation" /> app:layout_constraintTop_toBottomOf="@+id/editTextCourseLocation" />
@ -108,6 +145,18 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseDayOfWeek" /> app:layout_constraintTop_toBottomOf="@+id/editTextCourseDayOfWeek" />
<TextView
android:id="@+id/textViewCourseTime2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:layout_marginEnd="60dp"
android:ems="10"
android:inputType="time"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseDayOfWeek" />
<TextView <TextView
android:id="@+id/textViewCourseInstructor" android:id="@+id/textViewCourseInstructor"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -130,6 +179,18 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseTime" /> app:layout_constraintTop_toBottomOf="@+id/editTextCourseTime" />
<TextView
android:id="@+id/textViewCourseInstructor2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:layout_marginEnd="60dp"
android:ems="10"
android:inputType="textPersonName"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextCourseTime" />
<Button <Button
android:id="@+id/buttonFinish" android:id="@+id/buttonFinish"
android:layout_width="246dp" android:layout_width="246dp"
@ -158,6 +219,23 @@
app:layout_constraintTop_toBottomOf="@+id/textViewCourseDescription" app:layout_constraintTop_toBottomOf="@+id/textViewCourseDescription"
app:layout_constraintVertical_bias="0.087" /> app:layout_constraintVertical_bias="0.087" />
<TextView
android:id="@+id/textViewCourseDescription2"
android:layout_width="327dp"
android:layout_height="135dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:gravity="start|top"
android:inputType="textMultiLine"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/buttonFinish"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.461"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewCourseDescription"
app:layout_constraintVertical_bias="0.087" />
<TextView <TextView
android:id="@+id/textViewCourseDescription" android:id="@+id/textViewCourseDescription"
android:layout_width="wrap_content" android:layout_width="wrap_content"