move the notes in a viewpager

This commit is contained in:
tibbi
2016-11-26 16:32:10 +01:00
parent 0f2430e633
commit 93ed653206
15 changed files with 144 additions and 101 deletions

View File

@ -1,6 +1,7 @@
package com.simplemobiletools.notes
val TEXT = "text"
val NOTE_ID = "note_id"
// shared preferences
val PREFS_KEY = "Notes"

View File

@ -1,34 +1,29 @@
package com.simplemobiletools.notes.activities
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.TypedValue
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.simplemobiletools.filepicker.dialogs.ConfirmationDialog
import com.simplemobiletools.filepicker.extensions.toast
import com.simplemobiletools.filepicker.extensions.value
import com.simplemobiletools.notes.MyWidgetProvider
import com.simplemobiletools.notes.R
import com.simplemobiletools.notes.TYPE_NOTE
import com.simplemobiletools.notes.adapters.NotesPagerAdapter
import com.simplemobiletools.notes.databases.DBHelper
import com.simplemobiletools.notes.dialogs.NewNoteDialog
import com.simplemobiletools.notes.dialogs.OpenNoteDialog
import com.simplemobiletools.notes.dialogs.RenameNoteDialog
import com.simplemobiletools.notes.dialogs.WidgetNoteDialog
import com.simplemobiletools.notes.extensions.getTextSize
import com.simplemobiletools.notes.extensions.dpToPx
import com.simplemobiletools.notes.models.Note
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.fragment_note.*
class MainActivity : SimpleActivity() {
private var mCurrentNote: Note? = null
lateinit var mCurrentNote: Note
lateinit var mAdapter: NotesPagerAdapter
lateinit var mDb: DBHelper
lateinit var mNotes: List<Note>
@ -38,26 +33,28 @@ class MainActivity : SimpleActivity() {
mDb = DBHelper.newInstance(applicationContext)
mNotes = mDb.getNotes()
updateSelectedNote(config.currentNoteId)
mCurrentNote = mNotes[0]
mAdapter = NotesPagerAdapter(supportFragmentManager, mNotes)
view_pager.apply {
adapter = mAdapter
}
notes_fab.setOnClickListener { displayNewNoteDialog() }
notes_fab.viewTreeObserver.addOnGlobalLayoutListener {
val heightDiff = notes_coordinator.rootView.height - notes_coordinator.height
notes_fab.visibility = if (heightDiff > dpToPx(this, 200f)) View.INVISIBLE else View.VISIBLE
notes_fab.visibility = if (heightDiff > dpToPx(200f)) View.INVISIBLE else View.VISIBLE
}
}
fun dpToPx(context: Context, valueInDp: Float) = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, context.resources.displayMetrics)
override fun onResume() {
super.onResume()
invalidateOptionsMenu()
notes_view.setTextSize(TypedValue.COMPLEX_UNIT_PX, applicationContext.getTextSize())
}
override fun onPause() {
super.onPause()
saveText()
mAdapter.saveNote(mCurrentNote.id)
}
override fun onDestroy() {
@ -121,30 +118,22 @@ class MainActivity : SimpleActivity() {
}
private fun displayRenameDialog() {
RenameNoteDialog(this, mDb, mCurrentNote!!) {
RenameNoteDialog(this, mDb, mCurrentNote) {
mCurrentNote = it
current_note_title.text = it.title
}
}
private fun updateSelectedNote(id: Int) {
saveText()
mCurrentNote = mDb.getNote(id)
mNotes = mDb.getNotes()
if (mCurrentNote != null) {
config.currentNoteId = id
notes_view.setText(mCurrentNote!!.value)
current_note_title.text = mCurrentNote!!.title
}
current_note_label.visibility = if (mNotes.size <= 1) View.GONE else View.VISIBLE
config.currentNoteId = id
notes_view.setText(mCurrentNote.value)
current_note_title.text = mCurrentNote.title
current_note_title.visibility = if (mNotes.size <= 1) View.GONE else View.VISIBLE
updateWidget(applicationContext)
}
fun displayNewNoteDialog() {
NewNoteDialog(this, mDb) {
saveText()
val newNote = Note(0, it, "", TYPE_NOTE)
val id = mDb.insertNote(newNote)
updateSelectedNote(id)
@ -154,7 +143,7 @@ class MainActivity : SimpleActivity() {
}
private fun displayDeleteNotePrompt() {
val message = String.format(getString(R.string.delete_note_prompt_message), mCurrentNote!!.title)
val message = String.format(getString(R.string.delete_note_prompt_message), mCurrentNote.title)
ConfirmationDialog(this, message) {
deleteNote()
}
@ -164,7 +153,7 @@ class MainActivity : SimpleActivity() {
if (mNotes.size <= 1)
return
mDb.deleteNote(mCurrentNote!!.id)
mDb.deleteNote(mCurrentNote.id)
mNotes = mDb.getNotes()
val firstNoteId = mNotes[0].id
@ -179,22 +168,6 @@ class MainActivity : SimpleActivity() {
}
}
private fun saveText() {
if (mCurrentNote == null)
return
val newText = notes_view.value
val oldText = mCurrentNote!!.value
if (newText != oldText) {
toast(R.string.note_saved)
mCurrentNote!!.value = newText
mDb.updateNote(mCurrentNote!!)
}
hideKeyboard()
updateWidget(applicationContext)
}
private fun shareText() {
val text = notes_view.value
if (text.isEmpty()) {
@ -212,20 +185,4 @@ class MainActivity : SimpleActivity() {
startActivity(Intent.createChooser(this, shareTitle))
}
}
private fun hideKeyboard() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(notes_view.windowToken, 0)
}
fun updateWidget(context: Context) {
val widgetManager = AppWidgetManager.getInstance(context)
val ids = widgetManager.getAppWidgetIds(ComponentName(context, MyWidgetProvider::class.java))
Intent(context, MyWidgetProvider::class.java).apply {
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
context.sendBroadcast(this)
}
}
}

View File

@ -0,0 +1,38 @@
package com.simplemobiletools.notes.adapters
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter
import android.util.SparseArray
import com.simplemobiletools.notes.NOTE_ID
import com.simplemobiletools.notes.fragments.NoteFragment
import com.simplemobiletools.notes.models.Note
class NotesPagerAdapter(fm: FragmentManager, private val notes: List<Note>) : FragmentStatePagerAdapter(fm) {
lateinit var fragments: SparseArray<NoteFragment>
init {
fragments = SparseArray(10)
}
override fun getCount() = notes.size
override fun getItem(position: Int): Fragment {
val bundle = Bundle()
val id = notes[position].id
bundle.putInt(NOTE_ID, id)
if (fragments.get(position) != null)
return fragments[position]
val fragment = NoteFragment()
fragment.arguments = bundle
fragments.put(position, fragment)
return fragment
}
fun saveNote(pos: Int) {
fragments.get(pos)?.saveText()
}
}

View File

@ -0,0 +1,30 @@
package com.simplemobiletools.notes.extensions
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.util.TypedValue
import com.simplemobiletools.notes.*
fun Context.getTextSize() =
when (Config.newInstance(this).fontSize) {
FONT_SIZE_SMALL -> resources.getDimension(R.dimen.small_text_size)
FONT_SIZE_LARGE -> resources.getDimension(R.dimen.large_text_size)
FONT_SIZE_EXTRA_LARGE -> resources.getDimension(R.dimen.extra_large_text_size)
else -> resources.getDimension(R.dimen.medium_text_size)
}
fun Context.updateWidget() {
val widgetManager = AppWidgetManager.getInstance(this)
val ids = widgetManager.getAppWidgetIds(ComponentName(this, MyWidgetProvider::class.java))
Intent(this, MyWidgetProvider::class.java).apply {
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
sendBroadcast(this)
}
}
fun Context.dpToPx(valueInDp: Float) = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, resources.displayMetrics)

View File

@ -1,12 +0,0 @@
package com.simplemobiletools.notes.extensions
import android.content.Context
import com.simplemobiletools.notes.*
fun Context.getTextSize() =
when (Config.newInstance(this).fontSize) {
FONT_SIZE_SMALL -> resources.getDimension(R.dimen.small_text_size)
FONT_SIZE_LARGE -> resources.getDimension(R.dimen.large_text_size)
FONT_SIZE_EXTRA_LARGE -> resources.getDimension(R.dimen.extra_large_text_size)
else -> resources.getDimension(R.dimen.medium_text_size)
}

View File

@ -0,0 +1,50 @@
package com.simplemobiletools.notes.fragments
import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.filepicker.extensions.value
import com.simplemobiletools.notes.NOTE_ID
import com.simplemobiletools.notes.R
import com.simplemobiletools.notes.databases.DBHelper
import com.simplemobiletools.notes.extensions.getTextSize
import com.simplemobiletools.notes.extensions.updateWidget
import com.simplemobiletools.notes.models.Note
import kotlinx.android.synthetic.main.fragment_note.view.*
class NoteFragment : Fragment() {
var noteId = 0
lateinit var view: ViewGroup
lateinit var note: Note
lateinit var mDb: DBHelper
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
view = inflater.inflate(R.layout.fragment_note, container, false) as ViewGroup
noteId = arguments.getInt(NOTE_ID)
mDb = DBHelper.newInstance(context)
note = mDb.getNote(noteId) ?: return view
view.notes_view.setText(note.value)
view.current_note_title.text = note.title
view.notes_view.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getTextSize())
return view
}
fun saveText() {
val newText = view.notes_view.value
val oldText = note.value
if (newText != oldText) {
note.value = newText
mDb.updateNote(note)
context.updateWidget()
}
}
override fun onPause() {
super.onPause()
saveText()
}
}