diff --git a/.idea/misc.xml b/.idea/misc.xml index b92cd49..31e0829 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,6 +3,7 @@ diff --git a/app/build.gradle b/app/build.gradle index feff990..adc51e2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -65,7 +65,7 @@ dependencies { androidTestImplementation("androidx.navigation:navigation-testing:2.3.5") // Jetpack Compose Integration - implementation("androidx.navigation:navigation-compose:2.4.0-alpha10") + implementation("androidx.navigation:navigation-compose:2.4.0-beta02") implementation("androidx.viewpager2:viewpager2:1.0.0") implementation("androidx.recyclerview:recyclerview:1.2.1") @@ -73,14 +73,18 @@ dependencies { implementation("androidx.cardview:cardview:1.0.0") //room database - implementation 'androidx.room:room-runtime:2.3.0' - kapt 'androidx.room:room-compiler:2.3.0' - implementation 'androidx.room:room-ktx:2.3.0' + implementation 'androidx.room:room-runtime:2.4.0-rc01' + kapt 'androidx.room:room-compiler:2.4.0-rc01' + implementation "androidx.room:room-ktx:2.4.0-rc01" implementation 'com.makeramen:roundedimageview:2.3.0' + //bottomsheet implementation 'com.google.android.material:material:1.4.0' + //coroutines core + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0' + } diff --git a/app/src/main/java/com/example/jottnotes/BaseFragment.kt b/app/src/main/java/com/example/jottnotes/BaseFragment.kt new file mode 100644 index 0000000..30bdc53 --- /dev/null +++ b/app/src/main/java/com/example/jottnotes/BaseFragment.kt @@ -0,0 +1,25 @@ +package com.example.jottnotes + +import android.os.Bundle +import androidx.fragment.app.Fragment +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlin.coroutines.CoroutineContext + +abstract class BaseFragment : Fragment(),CoroutineScope{ + + private lateinit var job: Job + override val coroutineContext: CoroutineContext + get() = job +Dispatchers.Main + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + job = Job() + } + + override fun onDestroy() { + super.onDestroy() + job.cancel() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/Bottom_sheet.kt b/app/src/main/java/com/example/jottnotes/Bottom_sheet.kt index 6500a96..b554fdc 100644 --- a/app/src/main/java/com/example/jottnotes/Bottom_sheet.kt +++ b/app/src/main/java/com/example/jottnotes/Bottom_sheet.kt @@ -7,8 +7,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentTransaction import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import kotlinx.android.synthetic.main.fragment_bottom_sheet.* @@ -37,7 +35,7 @@ class BottomSheet : BottomSheetDialogFragment(){ Notes_add.setOnClickListener { - replaceFragment(Notes_page(),true) + replaceFragment(NotesPage.newInstance(),true) Toast.makeText(context,"this is toast message",Toast.LENGTH_SHORT).show() dismiss() } @@ -45,9 +43,8 @@ class BottomSheet : BottomSheetDialogFragment(){ } - fun replaceFragment(fragment: Fragment, istransition : Boolean) + private fun replaceFragment(fragment: Fragment, istransition : Boolean) { - val editNotes = fragment val manager = requireActivity().supportFragmentManager val transaction = manager.beginTransaction() @@ -57,7 +54,7 @@ class BottomSheet : BottomSheetDialogFragment(){ } - transaction.replace(R.id.frame_layout, editNotes).addToBackStack(null).commit() + transaction.replace(R.id.frame_layout, fragment).addToBackStack(null).commit() diff --git a/app/src/main/java/com/example/jottnotes/FolderFragment.kt b/app/src/main/java/com/example/jottnotes/FolderFragment.kt new file mode 100644 index 0000000..3357d80 --- /dev/null +++ b/app/src/main/java/com/example/jottnotes/FolderFragment.kt @@ -0,0 +1,27 @@ +package com.example.jottnotes + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +class FolderFragment : Fragment() { + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_folder, container, false) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/MainActivity.kt b/app/src/main/java/com/example/jottnotes/MainActivity.kt index 2dc82d8..0fc3eba 100644 --- a/app/src/main/java/com/example/jottnotes/MainActivity.kt +++ b/app/src/main/java/com/example/jottnotes/MainActivity.kt @@ -3,7 +3,6 @@ package com.example.jottnotes import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.fragment.app.Fragment -import com.example.jottnotes.Notes_page.Companion.newInstance class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -12,7 +11,10 @@ class MainActivity : AppCompatActivity() { - replaceFragment(Mainpage(),true) + + + + replaceFragment(Mainpage(), true) } //this is to change from mainactivity to main_page fragment. @@ -21,14 +23,17 @@ class MainActivity : AppCompatActivity() { //also this same function has the replace(one you are in, the one you want to go) //the addtobackstack is a stack maker function. - private fun replaceFragment(fragment:Fragment, istransition:Boolean) { + private fun replaceFragment(fragment: Fragment, istransition: Boolean) { val fragmentTransition = supportFragmentManager.beginTransaction() - if (istransition) - { - fragmentTransition.setCustomAnimations(android.R.anim.slide_out_right,android.R.anim.slide_in_left) + if (istransition) { + fragmentTransition.setCustomAnimations( + android.R.anim.slide_out_right, + android.R.anim.slide_in_left + ) } - fragmentTransition.replace(R.id.frame_layout,fragment).addToBackStack(fragment.javaClass.simpleName).commit() + fragmentTransition.replace(R.id.frame_layout, fragment) + .addToBackStack(fragment.javaClass.simpleName).commit() } } \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/Main_page.kt b/app/src/main/java/com/example/jottnotes/Main_page.kt index 3b81116..99d5022 100644 --- a/app/src/main/java/com/example/jottnotes/Main_page.kt +++ b/app/src/main/java/com/example/jottnotes/Main_page.kt @@ -10,11 +10,16 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentManager +import androidx.viewpager2.widget.ViewPager2 +import com.google.android.material.tabs.TabLayout +import com.google.android.material.tabs.TabLayoutMediator import kotlinx.android.synthetic.main.fragment_main_page.* class Mainpage : Fragment() { + val fragarray = ArrayList() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -35,16 +40,36 @@ class Mainpage : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val manager: FragmentManager = (this.context as AppCompatActivity).supportFragmentManager - + //for bottom sheet transaction + val manager: FragmentManager = (this.context as AppCompatActivity).supportFragmentManager floating_action_button.setOnClickListener { BottomSheet().show(manager, ContentValues.TAG) } + //for launching Viewpager fragment + val tabLayout = activity?.findViewById(R.id.tabs) + val viewpager2 = activity?.findViewById(R.id.View_pager) + + fragarray.add(RvFragment()) + + val adapter = ViewPagerAdapter(requireActivity().supportFragmentManager,lifecycle) + viewpager2?.adapter = adapter + + if (viewpager2 != null) { + if (tabLayout != null) { + TabLayoutMediator(tabLayout, viewpager2){tab,position -> + + when(position){ + 0 -> tab.text = "Notes" + 1 -> tab.text = "Folders" + } + }.attach() + } } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/NotesPageBottomSheet.kt b/app/src/main/java/com/example/jottnotes/NotesPageBottomSheet.kt new file mode 100644 index 0000000..a806ed4 --- /dev/null +++ b/app/src/main/java/com/example/jottnotes/NotesPageBottomSheet.kt @@ -0,0 +1,234 @@ +package com.example.jottnotes + +import android.annotation.SuppressLint +import android.app.Dialog +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.localbroadcastmanager.content.LocalBroadcastManager +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import kotlinx.android.synthetic.main.fragment_notes_page_bottom_sheet.* + + +class NotesPageBottomSheet : BottomSheetDialogFragment() { + var selectedColor = "#232323" + + @SuppressLint("RestrictedApi") + override fun setupDialog(dialog: Dialog, style: Int) { + super.setupDialog(dialog, style) + + val view = LayoutInflater.from(context).inflate(R.layout.fragment_notes_page_bottom_sheet,null) + dialog.setContentView(view) + + val param = (view.parent as View).layoutParams as CoordinatorLayout.LayoutParams + + val behavior = param.behavior + + if (behavior is BottomSheetBehavior<*>){ + behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback(){ + override fun onSlide(bottomSheet: View, slideOffset: Float) { + TODO("Not yet implemented") + } + + override fun onStateChanged(bottomSheet: View, newState: Int) { + var state = "" + when (newState) { + BottomSheetBehavior.STATE_DRAGGING -> { + state = "DRAGGING" + } + BottomSheetBehavior.STATE_SETTLING -> { + state = "SETTLING" + } + BottomSheetBehavior.STATE_EXPANDED -> { + state = "EXPANDED" + } + BottomSheetBehavior.STATE_COLLAPSED -> { + state = "COLLAPSED" + } + + BottomSheetBehavior.STATE_HIDDEN -> { + state = "HIDDEN" + dismiss() + behavior.state = BottomSheetBehavior.STATE_COLLAPSED + } + + } + } + + }) + + + } + } + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_notes_page_bottom_sheet, container, false) + } + + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + if (noteId != -1){ + layoutDeleteNote.visibility = View.VISIBLE + }else{ + layoutDeleteNote.visibility = View.GONE + } + setListener() + } + + + private fun setListener(){ + fNote1.setOnClickListener { + + imgNote1.setImageResource(R.drawable.ic_tick) + imgNote2.setImageResource(0) + imgNote4.setImageResource(0) + imgNote5.setImageResource(0) + imgNote6.setImageResource(0) + imgNote7.setImageResource(0) + selectedColor = "#4e33ff" + + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Blue") + intent.putExtra("selectedColor",selectedColor) + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + + } + + fNote2.setOnClickListener { + imgNote1.setImageResource(0) + imgNote2.setImageResource(R.drawable.ic_tick) + imgNote4.setImageResource(0) + imgNote5.setImageResource(0) + imgNote6.setImageResource(0) + imgNote7.setImageResource(0) + selectedColor = "#ffd633" + + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Yellow") + intent.putExtra("selectedColor",selectedColor) + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + + } + + fNote4.setOnClickListener { + imgNote1.setImageResource(0) + imgNote2.setImageResource(0) + imgNote4.setImageResource(R.drawable.ic_tick) + imgNote5.setImageResource(0) + imgNote6.setImageResource(0) + imgNote7.setImageResource(0) + selectedColor = "#ae3b76" + + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Purple") + intent.putExtra("selectedColor",selectedColor) + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + + } + + fNote5.setOnClickListener { + imgNote1.setImageResource(0) + imgNote2.setImageResource(0) + imgNote4.setImageResource(0) + imgNote5.setImageResource(R.drawable.ic_tick) + imgNote6.setImageResource(0) + imgNote7.setImageResource(0) + selectedColor = "#0aebaf" + + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Green") + intent.putExtra("selectedColor",selectedColor) + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + } + + fNote6.setOnClickListener { + + imgNote1.setImageResource(0) + imgNote2.setImageResource(0) + imgNote4.setImageResource(0) + imgNote5.setImageResource(0) + imgNote6.setImageResource(R.drawable.ic_tick) + imgNote7.setImageResource(0) + selectedColor = "#ff7746" + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Orange") + intent.putExtra("selectedColor",selectedColor) + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + } + + fNote7.setOnClickListener { + imgNote1.setImageResource(0) + imgNote2.setImageResource(0) + imgNote4.setImageResource(0) + imgNote5.setImageResource(0) + imgNote6.setImageResource(0) + imgNote7.setImageResource(R.drawable.ic_tick) + selectedColor = "#202734" + + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Black") + intent.putExtra("selectedColor",selectedColor) + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + } + + + layoutImage.setOnClickListener{ + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","Image") + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + dismiss() + } + layoutWebUrl.setOnClickListener{ + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","WebUrl") + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + dismiss() + } + layoutDeleteNote.setOnClickListener { + val intent = Intent("bottom_sheet_action") + intent.putExtra("action","DeleteNote") + LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent) + dismiss() + } + + + } + companion object { + var noteId = -1 + fun newInstance(id:Int): NotesPageBottomSheet{ + val args = Bundle() + val fragment = NotesPageBottomSheet() + fragment.arguments = args + noteId = id + return fragment + } + } +// companion object { +// +// +// @JvmStatic +// fun newInstance(param1: String, param2: String) = +// NotesPageBottomSheet().apply { +// arguments = Bundle().apply { +// +// } +// } +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/NotesToRvAdapter.kt b/app/src/main/java/com/example/jottnotes/NotesToRvAdapter.kt new file mode 100644 index 0000000..9d596b9 --- /dev/null +++ b/app/src/main/java/com/example/jottnotes/NotesToRvAdapter.kt @@ -0,0 +1,60 @@ +package com.example.jottnotes + +import android.graphics.Color +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.jottnotes.entities.Notes +import kotlinx.android.synthetic.main.rvcard.view.* + + class NotesToRvAdapter(): + RecyclerView.Adapter() { + var listener : OnItemClickListener? = null + + interface OnItemClickListener { + fun onClicked(noteId : Int) + + } + + var arrList = ArrayList() + class NotesViewHolder(view: View) : RecyclerView.ViewHolder(view) { + + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NotesViewHolder { + return NotesViewHolder( + LayoutInflater.from(parent.context).inflate(R.layout.rvcard,parent,false) + ) + } + + override fun onBindViewHolder(holder: NotesViewHolder, position: Int) { + holder.itemView.title_thumb.text = arrList[position].title + holder.itemView.note_desc_thumb.text = arrList[position].noteText + + if (arrList[position].color != null){ + holder.itemView.rv_card.setCardBackgroundColor(Color.parseColor(arrList[position].color)) + }else{ + holder.itemView.rv_card.setCardBackgroundColor(Color.parseColor(R.color.scroll_viewGrey.toString())) + } + + holder.itemView.rv_card.setOnClickListener{ + listener!!.onClicked(arrList[position].id!!) + } + + } + + override fun getItemCount(): Int { + return arrList.size + } + + fun setOnClickListener(listener1: OnItemClickListener){ + listener = listener1 + } + + fun setData(arrNotesList:List){ + arrList = arrNotesList as ArrayList + } + + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/Notes_page.kt b/app/src/main/java/com/example/jottnotes/Notes_page.kt index 8503662..47f9aa0 100644 --- a/app/src/main/java/com/example/jottnotes/Notes_page.kt +++ b/app/src/main/java/com/example/jottnotes/Notes_page.kt @@ -1,21 +1,40 @@ package com.example.jottnotes + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.graphics.Color import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.EditText +import android.widget.Toast +import androidx.localbroadcastmanager.content.LocalBroadcastManager + +import com.example.jottnotes.database.NotesDatabase +import com.example.jottnotes.entities.Notes import kotlinx.android.synthetic.main.fragment_notes_page.* +import kotlinx.android.synthetic.main.fragment_notes_page_bottom_sheet.* +import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.* -class Notes_page : Fragment() { +class NotesPage : BaseFragment() { + var selectedColor = "#232323" + var currentDate: String? = null + private var noteId = -1 + + private var colorView = view?.findViewById(R.id.notes_title) + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - arguments?.let { + noteId = requireArguments().getInt("noteId",-1) - } } override fun onCreateView( @@ -26,47 +45,196 @@ class Notes_page : Fragment() { return inflater.inflate(R.layout.fragment_notes_page, container, false) } - companion object { - + companion object{ @JvmStatic - fun newInstance(param1: String, param2: String) = - Notes_page().apply { - arguments = Bundle().apply { + fun newInstance()= + NotesPage().apply { + arguments= Bundle().apply { } } } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - var sdf = SimpleDateFormat("dd/M/yyyy hh:mm:ss") - val CurrentDate = sdf.format(Date()) - date.text = CurrentDate +// if (noteId != 1){ +// launch { +// context?.let { +// var notes = NotesDatabase.getDatabase(it).noteDao().getSpecificNote(noteId) +// notes_title.setText(notes.title) +// notes_desc.setText(notes.noteText) +// colorView?.setBackgroundColor(Color.parseColor(notes.color)) +// } +// } +// } + + LocalBroadcastManager.getInstance(requireContext()).registerReceiver( + BroadcastReceiver,IntentFilter("bottom_sheet_action") + ) - note_back_button.setOnClickListener{ + + + val sdf = SimpleDateFormat("dd/M/yyyy hh:mm:ss") + currentDate = sdf.format(Date()) + + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + date.text = currentDate + + note_back_button.setOnClickListener { saveNote() - replaceFragment(Mainpage(),true) + requireActivity().supportFragmentManager.popBackStack() } + + imgDone.setOnClickListener { + if (noteId != -1){ + //updateNote() + }else{ + saveNote() + } + } + + imgMore.setOnClickListener{ + + + var noteBottomSheetFragment = NotesPageBottomSheet.newInstance(noteId) + noteBottomSheetFragment.show(requireActivity().supportFragmentManager,"Note Bottom Sheet Fragment") + } + + } - private fun saveNote(){ + private fun saveNote() { + if (notes_title.text.isNullOrEmpty()) { + Toast.makeText(context, "Title Required", Toast.LENGTH_SHORT).show() + } + else { + + launch { + val notes = Notes() + notes.title = notes_title.text.toString() + notes.noteText = notes_desc.text.toString() + notes.dateTime = currentDate + notes.color = selectedColor + //notes.imgPath = selectedImagePath + //notes.webLink = webLink + + context?.let { + NotesDatabase.getDatabase(it).noteDao().insertNotes(notes) + notes_desc.setText("") + notes_title.setText("") + layoutImage.visibility = View.GONE + //imgNote.visibility = View.GONE + //tvWebLink.visibility = View.GONE + requireActivity().supportFragmentManager.popBackStack() + + } + } + } } - fun replaceFragment(fragment: Fragment , istransition : Boolean) - { + private val BroadcastReceiver : BroadcastReceiver = object :BroadcastReceiver(){ + override fun onReceive(p0: Context?, p1: Intent?) { + + var actionColor = p1!!.getStringExtra("action") + + when(actionColor!!){ + + "Blue" -> { + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + + "Yellow" -> { + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + + + "Purple" -> { + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + + + "Green" -> { + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + + + "Orange" -> { + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + + + "Black" -> { + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + +// "Image" ->{ +// readStorageTask() +// layoutWebUrl.visibility = View.GONE +// } + +// "WebUrl" ->{ +// layoutWebUrl.visibility = View.VISIBLE +// } +// "DeleteNote" -> { +// //delete note +// deleteNote() +// } + + + else -> { + layoutImage.visibility = View.GONE +// imgNote.visibility = View.GONE +// layoutWebUrl.visibility = View.GONE + selectedColor = p1.getStringExtra("selectedColor")!! + colorView?.setBackgroundColor(Color.parseColor(selectedColor)) + + } + } + } + + } + + + fun replaceFragment(fragment: Fragment, istransition: Boolean) { val manager = requireActivity().supportFragmentManager val transaction = manager.beginTransaction() - if (istransition){ - transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right) + if (istransition) { + transaction.setCustomAnimations( + android.R.anim.slide_in_left, + android.R.anim.slide_out_right + ) } - transaction.replace(R.id.notes_page,fragment).commit() + transaction.replace(R.id.notes_page, fragment).commit() + } + + override fun onDestroy() { + + LocalBroadcastManager.getInstance(requireContext()).unregisterReceiver(BroadcastReceiver) + super.onDestroy() } -} \ No newline at end of file +} + + diff --git a/app/src/main/java/com/example/jottnotes/RvFragment.kt b/app/src/main/java/com/example/jottnotes/RvFragment.kt index ff1d8f0..01d435f 100644 --- a/app/src/main/java/com/example/jottnotes/RvFragment.kt +++ b/app/src/main/java/com/example/jottnotes/RvFragment.kt @@ -5,9 +5,17 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import kotlinx.coroutines.launch +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.example.jottnotes.database.NotesDatabase +import com.example.jottnotes.entities.Notes +import kotlinx.android.synthetic.main.fragment_rv.* -class RvFragment : Fragment() { +class RvFragment : BaseFragment() { + + var arrNotes = ArrayList() + var notesAdapter: NotesToRvAdapter = NotesToRvAdapter() override fun onCreate(savedInstanceState: Bundle?) { @@ -21,18 +29,85 @@ class RvFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_rv, container, false) } companion object { - @JvmStatic - fun newInstance(param1: String, param2: String) = + fun newInstance() = RvFragment().apply { arguments = Bundle().apply { } } } -} \ No newline at end of file + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + main_page_rv.setHasFixedSize(true) + main_page_rv.layoutManager = StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL) + + launch { + context?.let { + var notes = NotesDatabase.getDatabase(it).noteDao().getAllNotes() + notesAdapter.setData(notes) + arrNotes = notes as ArrayList + main_page_rv.adapter = notesAdapter + + + } + } + + notesAdapter.setOnClickListener(onCLicked) + + + } + + private val onCLicked = object :NotesToRvAdapter.OnItemClickListener{ + override fun onClicked(noteId: Int) { + + var fragment : Fragment + var bundle = Bundle() + bundle.putInt("noteId",noteId) + fragment = NotesPage.newInstance() + fragment.arguments = bundle + + replaceFragment(fragment,false) + + + } + } + + fun replaceFragment(fragment: Fragment , istransition:Boolean) { + val fragmentTransaction = requireActivity().supportFragmentManager + val transaction = fragmentTransaction.beginTransaction() + + if (istransition) { + transaction.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right) + + } + transaction.replace(R.id.frame_layout,fragment).addToBackStack(fragment.javaClass.simpleName).commit() + } + +} + +//fun replaceFragment(fragment: Fragment, istransition : Boolean) +//{ +// val editNotes = fragment +// val manager = requireActivity().supportFragmentManager +// val transaction = manager.beginTransaction() +// +// if (istransition){ +// transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right) +// +// } +// +// +// transaction.replace(R.id.frame_layout, editNotes).addToBackStack(null).commit() +// +// +// +// +// +//} \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/ViewPagerAdapter.kt b/app/src/main/java/com/example/jottnotes/ViewPagerAdapter.kt new file mode 100644 index 0000000..c269a85 --- /dev/null +++ b/app/src/main/java/com/example/jottnotes/ViewPagerAdapter.kt @@ -0,0 +1,30 @@ +package com.example.jottnotes + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.compose.ui.layout.Layout +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle +import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager2.adapter.FragmentStateAdapter + +class ViewPagerAdapter(fragmentManager: FragmentManager,lifecycle: Lifecycle): + FragmentStateAdapter(fragmentManager,lifecycle){ + + override fun getItemCount(): Int { + return 2 + } + + override fun createFragment(position: Int): Fragment { + when (position){ + 0 -> return RvFragment() + 1 -> return FolderFragment() + } + return RvFragment() + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/dao/NoteDao.kt b/app/src/main/java/com/example/jottnotes/dao/NoteDao.kt index 53d39b7..86a5ef2 100644 --- a/app/src/main/java/com/example/jottnotes/dao/NoteDao.kt +++ b/app/src/main/java/com/example/jottnotes/dao/NoteDao.kt @@ -1,7 +1,7 @@ -package com.codingwithme.notesapp.dao +package com.example.jottnotes.dao import androidx.room.* -import com.codingwithme.notesapp.entities.Notes +import com.example.jottnotes.entities.Notes @Dao interface NoteDao { @@ -13,14 +13,14 @@ interface NoteDao { suspend fun getSpecificNote(id:Int) : Notes @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertNotes(note:Notes) + suspend fun insertNotes(note: Notes) @Delete - suspend fun deleteNote(note:Notes) + suspend fun deleteNote(note: Notes) @Query("DELETE FROM notes WHERE id =:id") suspend fun deleteSpecificNote(id:Int) @Update - suspend fun updateNote(note:Notes) + suspend fun updateNote(note: Notes) } \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/database/NotesDatabase.kt b/app/src/main/java/com/example/jottnotes/database/NotesDatabase.kt index 10cc586..fca4888 100644 --- a/app/src/main/java/com/example/jottnotes/database/NotesDatabase.kt +++ b/app/src/main/java/com/example/jottnotes/database/NotesDatabase.kt @@ -1,11 +1,11 @@ -package com.codingwithme.notesapp.database +package com.example.jottnotes.database import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase -import com.codingwithme.notesapp.dao.NoteDao -import com.codingwithme.notesapp.entities.Notes +import com.example.jottnotes.dao.NoteDao +import com.example.jottnotes.entities.Notes @Database(entities = [Notes::class], version = 1, exportSchema = false) abstract class NotesDatabase : RoomDatabase() { @@ -26,5 +26,5 @@ abstract class NotesDatabase : RoomDatabase() { } } - abstract fun noteDao():NoteDao + abstract fun noteDao(): NoteDao } \ No newline at end of file diff --git a/app/src/main/java/com/example/jottnotes/entities/Notes.kt b/app/src/main/java/com/example/jottnotes/entities/Notes.kt index 176ffdc..1a3c1d7 100644 --- a/app/src/main/java/com/example/jottnotes/entities/Notes.kt +++ b/app/src/main/java/com/example/jottnotes/entities/Notes.kt @@ -1,5 +1,5 @@ -package com.codingwithme.notesapp.entities +package com.example.jottnotes.entities import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/res/drawable-v24/img_bar_dots.png b/app/src/main/res/drawable-v24/img_bar_dots.png new file mode 100644 index 0000000..8725979 Binary files /dev/null and b/app/src/main/res/drawable-v24/img_bar_dots.png differ diff --git a/app/src/main/res/drawable-v24/note_color_2.xml b/app/src/main/res/drawable-v24/note_color_2.xml new file mode 100644 index 0000000..eb35958 --- /dev/null +++ b/app/src/main/res/drawable-v24/note_color_2.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/note_color_4.xml b/app/src/main/res/drawable-v24/note_color_4.xml new file mode 100644 index 0000000..4613595 --- /dev/null +++ b/app/src/main/res/drawable-v24/note_color_4.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/note_color_5.xml b/app/src/main/res/drawable-v24/note_color_5.xml new file mode 100644 index 0000000..40fc8aa --- /dev/null +++ b/app/src/main/res/drawable-v24/note_color_5.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/note_color_6.xml b/app/src/main/res/drawable-v24/note_color_6.xml new file mode 100644 index 0000000..eaa89b4 --- /dev/null +++ b/app/src/main/res/drawable-v24/note_color_6.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/note_color_7.xml b/app/src/main/res/drawable-v24/note_color_7.xml new file mode 100644 index 0000000..9822721 --- /dev/null +++ b/app/src/main/res/drawable-v24/note_color_7.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_image_24.xml b/app/src/main/res/drawable/ic_baseline_image_24.xml deleted file mode 100644 index d789b6b..0000000 --- a/app/src/main/res/drawable/ic_baseline_image_24.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml new file mode 100644 index 0000000..bc63a67 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_folder.xml b/app/src/main/res/drawable/ic_folder.xml new file mode 100644 index 0000000..2eb53a2 --- /dev/null +++ b/app/src/main/res/drawable/ic_folder.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_image.xml b/app/src/main/res/drawable/ic_image.xml new file mode 100644 index 0000000..83b37ec --- /dev/null +++ b/app/src/main/res/drawable/ic_image.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_link.xml b/app/src/main/res/drawable/ic_link.xml new file mode 100644 index 0000000..7ea1907 --- /dev/null +++ b/app/src/main/res/drawable/ic_link.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_tick.xml b/app/src/main/res/drawable/ic_tick.xml new file mode 100644 index 0000000..6349e97 --- /dev/null +++ b/app/src/main/res/drawable/ic_tick.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/img_bar_dots.xml b/app/src/main/res/drawable/img_bar_dots.xml new file mode 100644 index 0000000..6439bcc --- /dev/null +++ b/app/src/main/res/drawable/img_bar_dots.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/note_color_1.xml b/app/src/main/res/drawable/note_color_1.xml new file mode 100644 index 0000000..96d47c3 --- /dev/null +++ b/app/src/main/res/drawable/note_color_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/scrollview.xml b/app/src/main/res/drawable/scrollview.xml index b5abf46..a7e8560 100644 --- a/app/src/main/res/drawable/scrollview.xml +++ b/app/src/main/res/drawable/scrollview.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/res/layout/fragment_folder.xml b/app/src/main/res/layout/fragment_folder.xml new file mode 100644 index 0000000..5d4745c --- /dev/null +++ b/app/src/main/res/layout/fragment_folder.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_page.xml b/app/src/main/res/layout/fragment_main_page.xml index b987f00..520757b 100644 --- a/app/src/main/res/layout/fragment_main_page.xml +++ b/app/src/main/res/layout/fragment_main_page.xml @@ -73,15 +73,19 @@ android:layout_height="wrap_content"/> + - + app:layout_constraintTop_toBottomOf="@id/tabs" + app:layout_constraintVertical_bias="0.6" + tools:layout_editor_absoluteX="13dp" /> + tools:context=".NotesPage"> - @@ -24,22 +27,46 @@ android:id="@+id/note_back_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/back"> + android:layout_weight="10" + android:background="@drawable/back" + app:layout_constraintRight_toLeftOf="@id/note_heading" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:textStyle="bold" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/imgDone" + app:layout_constraintStart_toEndOf="@+id/note_back_button" + app:layout_constraintTop_toTopOf="parent" /> + + - + + @@ -105,20 +136,20 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp" + android:gravity="center" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent"> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> - + android:layout_gravity="center_horizontal" + android:background="@drawable/img_bar_dots" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_notes_page_bottom_sheet.xml b/app/src/main/res/layout/fragment_notes_page_bottom_sheet.xml new file mode 100644 index 0000000..66e07d4 --- /dev/null +++ b/app/src/main/res/layout/fragment_notes_page_bottom_sheet.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_rv.xml b/app/src/main/res/layout/fragment_rv.xml index 30179d0..5260480 100644 --- a/app/src/main/res/layout/fragment_rv.xml +++ b/app/src/main/res/layout/fragment_rv.xml @@ -5,10 +5,9 @@ android:layout_height="match_parent" tools:context=".RvFragment"> - - + android:layout_height="wrap_content"/> \ No newline at end of file diff --git a/app/src/main/res/layout/home_grids.xml b/app/src/main/res/layout/home_grids.xml deleted file mode 100644 index aebfcee..0000000 --- a/app/src/main/res/layout/home_grids.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/layout/rvcard.xml b/app/src/main/res/layout/rvcard.xml new file mode 100644 index 0000000..8b021d4 --- /dev/null +++ b/app/src/main/res/layout/rvcard.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index edd1ef7..8406ab2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,4 +15,13 @@ #030800 #232323 + #606570 + #4e33ff + #ffd633 + #ffffff + #ae3b76 + #0aebaf + #ff7746 + #202734 + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9db2bf1..1b638e6 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { classpath "com.android.tools.build:gradle:7.0.2" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31" + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files