diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 8755be3..b7a8ac6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/.idea/misc.xml b/.idea/misc.xml index d24106c..3a3b0bc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,18 +5,22 @@ + - + + + - + + - + - + diff --git a/README.md b/README.md index 75330ce..28b5c4d 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ A simple open source audio note-taking 📝 Android application built to describ -***Find the latest apk here👇*** +***Find the latest stable release here👇*** -[](https://github.com/certified84/AudioNote/releases/tag/v0.1.1-beta00(11022022)) +[](https://github.com/certified84/AudioNote/releases/tag/v0.1.3) @@ -102,6 +102,11 @@ You need to have [Android Studio](https://developer.android.com/studio) to build +## Credit 🙌 +Credit goes to [Shazomii's Notely](https://github.com/shazomii/Notely) for project inspiration + + + ## Contribute 🤝 If you want to contribute to this app, you're always welcome! See [Contributing Guidelines](https://github.com/certified84/AudioNote/blob/master/CONTRIBUTING.md). diff --git a/app/build.gradle b/app/build.gradle index 3aca7fd..13c87d6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,8 +31,8 @@ android { applicationId "com.certified.audionote" minSdk 21 targetSdk 30 - versionCode 3 - versionName "v0.0.3-beta03(14022022)" + versionCode 4 + versionName "0.1.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 60ab7b5..c450426 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 62039b8..1897aa1 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 3, - "versionName": "v0.0.3-beta03(14022022)", + "versionCode": 4, + "versionName": "0.1.4", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/com/certified/audionote/ui/EditNoteFragment.kt b/app/src/main/java/com/certified/audionote/ui/EditNoteFragment.kt index 92514ec..81eeabe 100644 --- a/app/src/main/java/com/certified/audionote/ui/EditNoteFragment.kt +++ b/app/src/main/java/com/certified/audionote/ui/EditNoteFragment.kt @@ -19,6 +19,7 @@ package com.certified.audionote.ui import android.Manifest import android.app.DatePickerDialog import android.app.TimePickerDialog +import android.content.Context import android.media.MediaPlayer import android.media.MediaRecorder import android.os.Bundle @@ -41,6 +42,7 @@ import com.certified.audionote.databinding.DialogEditReminderBinding import com.certified.audionote.databinding.FragmentEditNoteBinding import com.certified.audionote.model.Note import com.certified.audionote.utils.* +import com.certified.audionote.utils.Extensions.showKeyboardFor import com.certified.audionote.utils.Extensions.showToast import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -75,7 +77,6 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa private var mediaRecorder: MediaRecorder? = null private var mediaPlayer: MediaPlayer? = null private var file: File? = null - private val noteIsRequired = "The note title is required" private var stopWatch: Stopwatch? = null private var timer: Timer? = null @@ -113,7 +114,7 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa openEditReminderDialog() } btnShare.setOnClickListener { shareNote(_note) } - btnDelete.setOnClickListener { launchDeleteNoteDialog() } + btnDelete.setOnClickListener { launchDeleteNoteDialog(requireContext()) } btnRecord.setOnClickListener(this@EditNoteFragment) fabSaveNote.setOnClickListener(this@EditNoteFragment) @@ -149,11 +150,6 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa } tvTitle.text = getString(R.string.edit_note) - etNoteTitle.apply { -// inputType = InputType.TYPE_NULL - keyListener = null - setOnClickListener { showToast("You can't edit the note title") } - } btnRecord.setImageDrawable( ResourcesCompat.getDrawable( resources, @@ -166,7 +162,11 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa override fun onResume() { super.onResume() - + if (args.note.id == 0) + binding.etNoteTitle.apply { + requestFocus() + showKeyboardFor(requireContext()) + } updateStatusBarColor(binding.note!!.color) } @@ -248,7 +248,7 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa startAlarm(requireContext(), pickedDateTime!!.timeInMillis, note) navController.navigate(R.id.action_editNoteFragment_to_homeFragment) } else { - showToast(noteIsRequired) + showToast(requireContext().getString(R.string.title_required)) etNoteTitle.requestFocus() } } @@ -257,30 +257,26 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa } private fun onClickWhenIdIsZero(p0: View?) { + val context = requireContext() binding.apply { when (p0) { btnRecord -> { if (!isRecording) { - if (hasPermission(requireContext(), Manifest.permission.RECORD_AUDIO)) - if (etNoteTitle.text.toString().isNotBlank()) - btnRecord.setImageDrawable( - ResourcesCompat.getDrawable( - resources, - R.drawable.ic_mic_recording, - null - ) - ).run { - isRecording = true - startRecording() - } - else { - showToast(noteIsRequired) - etNoteTitle.requestFocus() + if (hasPermission(context, Manifest.permission.RECORD_AUDIO)) + btnRecord.setImageDrawable( + ResourcesCompat.getDrawable( + resources, + R.drawable.ic_mic_recording, + null + ) + ).run { + isRecording = true + startRecording() } else requestPermission( requireActivity(), - "This permission is required to enable audio recording", + context.getString(R.string.permission_required), MainActivity.RECORD_AUDIO_PERMISSION_CODE, Manifest.permission.RECORD_AUDIO ) @@ -299,17 +295,21 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa fabSaveNote -> { if (etNoteTitle.text.toString().isNotBlank()) { stopRecording() + if (_note.audioLength <= 0) { + showToast(context.getString(R.string.record_note_before_saving)) + return + } val note = _note.copy( title = etNoteTitle.text.toString().trim(), description = etNoteDescription.text.toString().trim() ) viewModel.insertNote(note) - showToast("Note saved") + showToast(context.getString(R.string.note_saved)) if (pickedDateTime?.timeInMillis != null && pickedDateTime!!.timeInMillis <= currentDateTime.timeInMillis) - startAlarm(requireContext(), pickedDateTime!!.timeInMillis, note) + startAlarm(context, pickedDateTime!!.timeInMillis, note) navController.navigate(R.id.action_editNoteFragment_to_homeFragment) } else { - showToast(noteIsRequired) + showToast(context.getString(R.string.title_required)) etNoteTitle.requestFocus() } } @@ -373,13 +373,13 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa bottomSheetDialog.show() } - private fun launchDeleteNoteDialog() { - val materialDialog = MaterialAlertDialogBuilder(requireContext()) + private fun launchDeleteNoteDialog(context: Context) { + val materialDialog = MaterialAlertDialogBuilder(context) materialDialog.apply { - setTitle("Delete Note") - setMessage("Are you sure you want to delete ${_note.title}?") - setNegativeButton("No") { dialog, _ -> dialog?.dismiss() } - setPositiveButton("Yes") { _, _ -> + setTitle(context.getString(R.string.delete_note)) + setMessage("${context.getString(R.string.confirm_deletion)} ${_note.title}?") + setNegativeButton(context.getString(R.string.no)) { dialog, _ -> dialog?.dismiss() } + setPositiveButton(context.getString(R.string.yes)) { _, _ -> viewModel.deleteNote(_note) lifecycleScope.launch(Dispatchers.IO) { file?.delete() } navController.navigate(R.id.action_editNoteFragment_to_homeFragment) @@ -390,9 +390,9 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa private fun startRecording() { val filePath = filePath(requireActivity()) - val fileName = "${binding.etNoteTitle.text.toString().trim()}.3gp" + val fileName = "${System.currentTimeMillis()}.3gp" _note.filePath = "$filePath/$fileName" - showToast("Started recording") + showToast(requireContext().getString(R.string.started_recording)) stopWatch = StopwatchBuilder() .startFormat("MM:SS") @@ -410,9 +410,8 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa prepare() start() stopWatch!!.start() - disableNoteTitleEdit() } catch (e: IOException) { - showToast("An error occurred") + showToast(requireContext().getString(R.string.error_occurred)) } } } @@ -429,11 +428,13 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa reset() } stopWatch = null + if (_note.audioLength <= 0) + return val file = File(_note.filePath) val fileByte = (file.readBytes().size.toDouble() / 1048576.00) - val fileSize = roundOffDecimal(fileByte).toString() + val fileSize = roundOffDecimal(fileByte) _note.size = fileSize - showToast("Stopped recording") + showToast(requireContext().getString(R.string.stopped_recording)) } private fun startPlayingRecording() { @@ -462,18 +463,11 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa start() } timer!!.start() - showToast("Started playing recording") + showToast(requireContext().getString(R.string.started_playing_recording)) } catch (e: IOException) { e.printStackTrace() Log.d("TAG", "startPlayingRecording: ${e.localizedMessage}") - showToast("An error occurred") - } - } - - private fun disableNoteTitleEdit() { - binding.etNoteTitle.apply { - keyListener = null - setOnClickListener { showToast("You can't edit the note title") } + showToast(requireContext().getString(R.string.error_occurred)) } } @@ -497,7 +491,7 @@ class EditNoteFragment : Fragment(), View.OnClickListener, DatePickerDialog.OnDa stop() } timer = null - showToast("Stopped playing recording") + showToast(requireContext().getString(R.string.stopped_playing_recording)) } private fun shareNote(note: Note) { diff --git a/app/src/main/java/com/certified/audionote/utils/Extensions.kt b/app/src/main/java/com/certified/audionote/utils/Extensions.kt index 299cf81..67fd2f0 100644 --- a/app/src/main/java/com/certified/audionote/utils/Extensions.kt +++ b/app/src/main/java/com/certified/audionote/utils/Extensions.kt @@ -16,8 +16,11 @@ package com.certified.audionote.utils +import android.app.Activity import android.content.Context +import android.view.View import android.view.WindowManager +import android.view.inputmethod.InputMethodManager import android.widget.Toast import androidx.datastore.preferences.preferencesDataStore import androidx.fragment.app.Fragment @@ -39,4 +42,14 @@ object Extensions { } val Context.dataStore by preferencesDataStore(name = "com.certified.audionotes.preferences") + + fun View.hideKeyboardFrom(context: Context) { + val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(windowToken, 0) + } + + fun View.showKeyboardFor(context: Context) { + val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager + imm.showSoftInput(this, 0) + } } \ No newline at end of file diff --git a/app/src/main/java/com/certified/audionote/utils/Main.kt b/app/src/main/java/com/certified/audionote/utils/Main.kt index 37b9d60..4cc5f5a 100644 --- a/app/src/main/java/com/certified/audionote/utils/Main.kt +++ b/app/src/main/java/com/certified/audionote/utils/Main.kt @@ -22,4 +22,12 @@ fun main() { val sec = time % 60 val minute = (time % 3600) / 60 println("Time: $time, Minute: $minute, Second: $sec") +// print(isEven(201)) +} + +fun isEven(number: Int): String { + return when (number % 2) { + 0 -> "true" + else -> "false" + } } \ No newline at end of file diff --git a/app/src/main/java/com/certified/audionote/utils/Util.kt b/app/src/main/java/com/certified/audionote/utils/Util.kt index cc8f66d..f247b58 100644 --- a/app/src/main/java/com/certified/audionote/utils/Util.kt +++ b/app/src/main/java/com/certified/audionote/utils/Util.kt @@ -21,12 +21,12 @@ import android.app.AlarmManager import android.app.PendingIntent import android.content.Context import android.content.Intent +import android.os.Build import android.util.Log +import com.certified.audionote.R import com.certified.audionote.model.Note import com.certified.audionote.ui.AlertReceiver import com.vmadalin.easypermissions.EasyPermissions -import java.math.RoundingMode -import java.text.DecimalFormat import java.text.SimpleDateFormat import java.util.* import java.util.concurrent.TimeUnit @@ -48,7 +48,7 @@ fun requestPermission(activity: Activity, message: String, requestCode: Int, per fun currentDate(): Calendar = Calendar.getInstance() -fun formatDate(date: Long): String { +fun formatDate(date: Long, context: Context): String { val now = Date() val seconds = TimeUnit.MILLISECONDS.toSeconds(now.time - date) @@ -57,12 +57,12 @@ fun formatDate(date: Long): String { val days = TimeUnit.MILLISECONDS.toDays(now.time - date) return when { - seconds < 60 -> "Just now" - minutes == 1L -> "a minute ago" - minutes in 2..59L -> "$minutes minutes ago" - hours == 1L -> "an hour ago" - hours in 2..23 -> "$hours hours ago" - days == 1L -> "a day ago" + seconds < 60 -> context.getString(R.string.just_now) + minutes == 1L -> context.getString(R.string.a_minute_ago) + minutes in 2..59L -> "$minutes ${context.getString(R.string.minutes_ago)}" + hours == 1L -> context.getString(R.string.an_hour_ago) + hours in 2..23 -> "$hours ${context.getString(R.string.hours_ago)}" + days == 1L -> context.getString(R.string.a_day_ago) else -> formatSimpleDate(date) } } @@ -93,7 +93,11 @@ fun startAlarm(context: Context, time: Long, note: Note) { putExtra("noteStarted", note.started) putExtra("noteReminder", note.reminder) } - val pendingIntent = PendingIntent.getBroadcast(context, note.id, intent, 0) + val pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PendingIntent.getBroadcast(context, note.id, intent, PendingIntent.FLAG_IMMUTABLE) + } else { + PendingIntent.getBroadcast(context, note.id, intent, 0) + } alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent) Log.d("TAG", "startAlarm: Alarm started") } @@ -101,13 +105,15 @@ fun startAlarm(context: Context, time: Long, note: Note) { fun cancelAlarm(context: Context, noteId: Int) { val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent = Intent(context, AlertReceiver::class.java) - val pendingIntent = PendingIntent.getBroadcast(context, noteId, intent, 0) + val pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PendingIntent.getBroadcast(context, noteId, intent, PendingIntent.FLAG_IMMUTABLE) + } else { + PendingIntent.getBroadcast(context, noteId, intent, 0) + } alarmManager.cancel(pendingIntent) Log.d("TAG", "cancelAlarm: Alarm canceled") } -fun roundOffDecimal(number: Double): Double { - val df = DecimalFormat("#.##") - df.roundingMode = RoundingMode.CEILING - return df.format(number).toDouble() +fun roundOffDecimal(number: Double): String { + return "%.2f".format(number) } \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_dialog.xml b/app/src/main/res/layout/bottom_sheet_dialog.xml index e94dbf3..f8d36b4 100644 --- a/app/src/main/res/layout/bottom_sheet_dialog.xml +++ b/app/src/main/res/layout/bottom_sheet_dialog.xml @@ -54,7 +54,7 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/_16sdp" android:layout_weight="3" - android:text="Record Player" + android:text="@string/record_player" android:textColor="@color/black_day_white_night" android:textSize="@dimen/_16ssp" android:fontFamily="@font/open_sans_bold"/> @@ -64,7 +64,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3" - android:text="Now playing" + android:text="@string/now_playing" android:textSize="@dimen/_12ssp" android:textColor="@color/black_day_white_night" android:fontFamily="@font/open_sans_regular" diff --git a/app/src/main/res/layout/fragment_edit_note.xml b/app/src/main/res/layout/fragment_edit_note.xml index 04b7389..3c78607 100644 --- a/app/src/main/res/layout/fragment_edit_note.xml +++ b/app/src/main/res/layout/fragment_edit_note.xml @@ -109,7 +109,7 @@ android:fontFamily="@font/open_sans_bold" android:text="@string/new_note" android:textColor="@color/black_day_white_night" - android:textSize="@dimen/_22ssp" + android:textSize="@dimen/_18ssp" app:layout_constraintBottom_toBottomOf="@+id/btn_back" app:layout_constraintStart_toEndOf="@+id/btn_back" app:layout_constraintTop_toTopOf="@+id/btn_back" /> @@ -141,7 +141,7 @@ android:inputType="textMultiLine" android:maxLength="50" android:text="@{note.title}" - android:textSize="@dimen/_18ssp" + android:textSize="@dimen/_16ssp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -159,7 +159,7 @@ android:hint="@string/description" android:inputType="textMultiLine" android:text="@{note.description}" - android:textSize="@dimen/_14ssp" + android:textSize="@dimen/_12ssp" app:layout_constraintBottom_toTopOf="@+id/guideline2" app:layout_constraintEnd_toEndOf="@+id/et_note_title" app:layout_constraintHorizontal_bias="1.0" @@ -181,7 +181,7 @@ android:layout_marginTop="@dimen/_16sdp" android:fontFamily="@font/open_sans_regular" android:textColor="@color/black_day_white_night" - android:textSize="@dimen/_30ssp" + android:textSize="@dimen/_24ssp" app:layout_constraintBottom_toTopOf="@+id/btn_record" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -213,7 +213,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/_16sdp" - android:layout_marginBottom="@dimen/_2sdp" + android:layout_marginBottom="@dimen/_8sdp" android:backgroundTint="@color/fab_background_tint" android:text="@string/save" android:textAllCaps="false" @@ -279,7 +279,7 @@ android:layout_marginStart="@dimen/_16sdp" android:fontFamily="@font/open_sans_regular" android:text="@string/click_to_add_a_reminder_to_this_note" - android:textSize="@dimen/_14ssp" + android:textSize="@dimen/_12ssp" app:layout_constraintBottom_toBottomOf="@+id/appCompatImageView3" app:layout_constraintStart_toEndOf="@+id/appCompatImageView3" app:layout_constraintTop_toTopOf="@+id/appCompatImageView3" diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c06e688..08d6f16 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -63,7 +63,7 @@ android:layout_marginStart="@dimen/_16sdp" android:layout_marginTop="@dimen/_16sdp" android:text="@string/hi_there" - android:textSize="@dimen/_26ssp" + android:textSize="@dimen/_18ssp" android:textColor="@color/black_day_white_night" android:fontFamily="@font/open_sans_bold" app:layout_constraintStart_toStartOf="parent" @@ -76,7 +76,7 @@ android:alpha=".7" android:text="@string/welcome_back" android:fontFamily="@font/open_sans_medium" - android:textSize="@dimen/_16ssp" + android:textSize="@dimen/_12ssp" app:layout_constraintStart_toStartOf="@+id/materialTextView2" app:layout_constraintTop_toBottomOf="@+id/materialTextView2" /> @@ -85,6 +85,8 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_marginTop="@dimen/_16sdp" + android:layout_marginStart="@dimen/_8sdp" + android:layout_marginEnd="@dimen/_8sdp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/fragment_onboarding.xml b/app/src/main/res/layout/fragment_onboarding.xml index 27890c5..621e9cb 100644 --- a/app/src/main/res/layout/fragment_onboarding.xml +++ b/app/src/main/res/layout/fragment_onboarding.xml @@ -43,7 +43,7 @@ android:layout_marginBottom="@dimen/_16sdp" android:backgroundTint="@color/primary_dark" android:fontFamily="@font/open_sans_semi_bold" - android:text="Get Started" + android:text="@string/get_started" android:textSize="@dimen/_14ssp" android:textAllCaps="false" android:textColor="@color/black_day_white_night" diff --git a/app/src/main/res/layout/item_note.xml b/app/src/main/res/layout/item_note.xml index 97d6456..b8e40ec 100644 --- a/app/src/main/res/layout/item_note.xml +++ b/app/src/main/res/layout/item_note.xml @@ -55,7 +55,7 @@ android:maxLines="1" android:text="@{note.title}" android:textColor="@color/white" - android:textSize="@dimen/_14ssp" + android:textSize="@dimen/_12ssp" app:layout_constraintEnd_toStartOf="@+id/tv_note_last_modification_date" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_chainStyle="spread_inside" @@ -72,10 +72,10 @@ android:ellipsize="end" android:fontFamily="@font/open_sans_regular" android:maxLines="1" - android:text="@{UtilKt.formatDate(note.lastModificationDate)}" + android:text="@{UtilKt.formatDate(note.lastModificationDate, context)}" android:textAlignment="viewEnd" android:textColor="@color/white" - android:textSize="@dimen/_12ssp" + android:textSize="@dimen/_10ssp" app:layout_constraintBottom_toBottomOf="@+id/tv_note_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml new file mode 100644 index 0000000..c33cd76 --- /dev/null +++ b/app/src/main/res/values-it/strings.xml @@ -0,0 +1,86 @@ + + + + Audio Notes + Visualizzazione + Tema + Scegli tema + Descrizione + Titolo della nota (obbligatorio) + Nuova Nota + Salva + Pulsante Aggiungi nota + Pulsante Indietro + Pulsante Elimina + Pulsante Condividi + Aggiungi un promemoria a questa nota + Registra + Pulsante Promemoria + Bentornato + Ehilà, + L\'elenco delle registrazioni è vuoto. Clicca sul pulsante in basso per iniziare + Informazioni + Attribuzioni e Licenze + Rilasciato sotto Licenza Apache, Versione 2.0 + Versione dell\'app, licenza e altro + Impostazioni + Modifica Nota + Icona Sveglia + Modifica + Elimina + Nessun promemoria + Notifica di Audio Notes + Registra audio facilmente + Prendere appunti non dovrebbe riguardare la digitazione o la scrittura da sole. Usa la funzione di registrazione vocale per registrare la tua nota in modo facile e veloce per migliorare la tua produttività + Notifiche Personalizzate + Imposta un promemoria per le tue note e ricevi una notifica all\'ora esatta per cui hai impostato il promemoria. Non devi più preoccuparti di dimenticare di controllare una nota. + Progettato per te + Prendere appunti non dovrebbe essere fantascienza. L\'app è stata progettata pensando a te per facilitare il modo in cui prendi appunti e anche per migliorare la tua produttività + Registratore + Sviluppatore + Contribuisci + Visualizza il progetto su GitHub + Contatto e Feedback + Iniziamo + Proprio ora + un minuto fa + minuti fa + un\'ora fa + ore fa + un giorno fa + Predefinito di sistema + Chiaro + Scuro + In riproduzione + Il titolo della nota è obbligatorio + Questa autorizzazione è richiesta per abilitare le registrazioni audio + Nota salvata + Registrazione avviata + Registrazione terminata + Riproduzione della registrazione avviata + Riproduzione della registrazione terminata + Si è verificato un errore + Sì + No + Elimina Nota + Sei sicuro di voler eliminare + Tutte + Oggi + Imminenti + Completate + Registra la tua nota audio prima di salvare + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 4a3174e..da124b6 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -17,9 +17,9 @@ - System default - Light - Dark + @string/theme_system_default + @string/theme_light + @string/theme_dark @@ -29,9 +29,9 @@ - All - Today - Upcoming - Completed + @string/all + @string/today + @string/upcoming + @string/completed \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3688219..0586a0a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,9 +18,9 @@ Audio Notes Display Theme - MODE_NIGHT_FOLLOW_SYSTEM + MODE_NIGHT_FOLLOW_SYSTEM Choose theme - theme + theme Description Note title (required) New Note @@ -36,7 +36,7 @@ Hi there, Your record list is empty. Click the button below to get started About - v0.0.3-beta03(14022022) + v0.1.4(04032022) Licenced under Apache Licence, Version 2.0 App version, Licence and more @@ -47,12 +47,45 @@ Delete No reminder set Audio Notes notification - - Hello blank fragment Record audio easily Taking notes shouldn\'t be about typing or writing alone. Use the voice recording feature to record your note easily and faster to improve your productivity Custom Notifications Set a reminder for your notes and get notified at the exact time you set the reminder for. You no longer have to worry about forgetting to check out a note. Designed for you Taking notes shouldn\'t be rocket science. The application was designed with you in mind to ease how you take notes and to also improve your productivity + Record Player + Developer + Sammie_kt + Contribute + View project on Github + Sammie_kt@pm.me + + Get Started + Just now + a minute ago + minutes ago + an hour ago + hours ago + a day ago + System default + Light + Dark + Now playing + The note title is required + This permission is required to enable audio recording + Note saved + Started recording + Stopped recording + Started playing recording + Stopped playing recording + An error occurred + Yes + No + Delete Note + Are you sure you want to delete + All + Today + Upcoming + Completed + Please record your audio note before saving \ No newline at end of file diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 8beceb6..bfc416b 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -31,11 +31,11 @@ - + + app:summary="@string/developer_nick" + app:title="@string/developer"> @@ -43,8 +43,8 @@ + app:summary="@string/contribute_summary" + app:title="@string/contribute"> @@ -52,21 +52,21 @@ + app:summary="@string/developer_mail" + app:title="@string/contact_feedback"> - - - - - - - - + + + + + + + + \ No newline at end of file