diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/notes/Constants.kt index aa02a96b..d32cd431 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/Constants.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.notes val TEXT = "text" +val NOTE_ID = "note_id" // shared preferences val PREFS_KEY = "Notes" diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt index 1964c99d..2e301369 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt @@ -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 @@ -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) - } - } } diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/adapters/NotesPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/adapters/NotesPagerAdapter.kt new file mode 100644 index 00000000..eb9c653b --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/notes/adapters/NotesPagerAdapter.kt @@ -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) : FragmentStatePagerAdapter(fm) { + lateinit var fragments: SparseArray + + 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() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/notes/extensions/Context.kt new file mode 100644 index 00000000..2512bc33 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/notes/extensions/Context.kt @@ -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) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/extensions/context.kt b/app/src/main/kotlin/com/simplemobiletools/notes/extensions/context.kt deleted file mode 100644 index b89cc26d..00000000 --- a/app/src/main/kotlin/com/simplemobiletools/notes/extensions/context.kt +++ /dev/null @@ -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) - } diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt b/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt new file mode 100644 index 00000000..119e1a37 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt @@ -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() + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 59de715f..1f92ff0f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,7 +6,11 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + - - Teilen Teilen via Leerer Text kann nicht geteilt werden - Text gespeichert Einfache Notiz Neue Notiz hinzufügen OK @@ -18,7 +17,6 @@ Notiz löschen Bist du sicher, dass du Notiz \"%1$s\" löschen willst? Notiz auswählen - Aktuelle Notiz: Wechsel Notiz des Widgets Wähle Notiz für das Widget Umbennen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 14b4963c..cdb9e39d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -6,7 +6,6 @@ Compartir Compartir vía No se puede compartir una nota vacía - Nota guardada Nota simple Añadir una nueva nota OK @@ -18,7 +17,6 @@ Eliminar nota ¿Está seguro de querer eliminar la nota \"%1$s\"? Seleccione una nota - Nota actual: Cambiar nota del widget Seleccione una nota para el widget Renombrar diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 32cd2f29..2ff90cf7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -6,7 +6,6 @@ Condividi Condividi via Impossibile condividere un testo vuoto - Testo salvato Simple Note Add a new note OK @@ -18,7 +17,6 @@ Delete note Are you sure you want to delete note \"%1$s\"? Pick a note - Current note: Change widget\'s note Pick a note for the widget Rename diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6232c64e..5a421063 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -6,7 +6,6 @@ 共有 共有… 空のテキストは共有できません - テキストを保存しました シンプル メモ 新しいメモを追加 OK @@ -18,7 +17,6 @@ メモを削除 メモ \"%1$s\" を削除してもよろしいですか? メモを選択 - 現在のメモ: ウィジェットのメモを変更 ウィジェットのメモを選択 Rename diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 5ab7d08d..ee59e104 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -6,7 +6,6 @@ Partilhar Partilhar via Não pode partilhar texto em branco - Nota guardada Nota simples Adicionar uma nota OK @@ -18,7 +17,6 @@ Apagar nota Deseja mesmo apagar a nota \"%1$s\"? Selecione uma nota - Nota atual: Alterar nota do widget Escolha uma nota para o widget Renomear diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 71a5bdf0..98f066c3 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -6,7 +6,6 @@ Dela Dela via Det går inte att dela utan text - Text sparad Simple Note Add a new note OK @@ -18,7 +17,6 @@ Delete note Are you sure you want to delete note \"%1$s\"? Pick a note - Current note: Change widget\'s note Pick a note for the widget Rename diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7ac3c15..7b9378c8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,7 +6,6 @@ Share Share via Cannot share empty text - Note saved Simple Note Add a new note OK @@ -18,7 +17,6 @@ Delete note Are you sure you want to delete note \"%1$s\"? Pick a note - Current note: Change widget\'s note Pick a note for the widget Rename