Skip to content

Commit

Permalink
other: Bug fixes, UI fixes, architecture refinement, export now worki…
Browse files Browse the repository at this point in the history
…ng properly
  • Loading branch information
bulkabuka committed Jun 1, 2024
1 parent be6c24d commit 465b485
Show file tree
Hide file tree
Showing 33 changed files with 442 additions and 237 deletions.
20 changes: 14 additions & 6 deletions README-en.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
![Banner](img/banner.png)
![Banner](images/banner.png)

# ☑️ uptask.
# ☑️ uptask

Welcome to `uptask.`, intuitive **task management app** with dynamic Material You design!
Welcome to `uptask`, intuitive **task management app** with dynamic Material You design!

## Platforms

uptask is an Android app, written on `Kotlin + Jetpack Compose`.
Data organization implemented through the `H2` engine and a framework `Exposed`.

## Description

Uptask is built from the ground up, and from the day one it was planned
as a private space for planning.
Therefore it doesn't have such convenient feature as synchronizing.
Nevertheless, uptask is completely safe and secure as well as absolutely free! (even if you are a company)
This way it provides the most independent experience.

## Features

* Local accounts system (registration and authorization)
Expand All @@ -18,16 +26,16 @@ Data organization implemented through the `H2` engine and a framework `Exposed`.
* Full-text search (description and name)
* Various stats for the time period
* Profile editing
* Extended reminders
* Immediate and versatile data export

## Screenshots

![Screenshots](img/screenshots.png)
![Screenshots](images/screens.png)

## Roadmap

* Localization into more languages
* Reminders
* Optimization
* Calendar integration

[🇷🇺](README.md)
22 changes: 15 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,41 @@
![Баннер](img/banner.png)
![Баннер](images/banner.png)

# ☑️ uptask.
# ☑️ uptask

Добро пожаловать в `uptask.`, интуитивный **планировщик задач** с Material You дизайном!
Добро пожаловать в `uptask`, интуитивный **планировщик задач** с Material You дизайном!

## Платформы

uptask это Android приложение, написанное на `Kotlin + Jetpack Compose`.
Организация данных выполнена при помощи базы данных `H2` и фреймворка `Exposed`.

## Описание

Uptask построен с нуля как самостоятельная система, и с первого дня задумывался
как приватное пространство для организации своих планов.
Именно поэтому в нем нет привычной системы синхронизации задач.
Тем не менее, uptask является полностью
безопасным и бесплатным при любом использовании - вы не зависите ни от кого.

## Функции

* Локальная система аккаунтов (регистрация и авторизация)
* Проекты или списки задач (название и эмодзи)
* Комплексная структура задач (название, описание, теги и приоритет, дедлайны)
* Гибкая сортировка (по имени, приоритету или дедлайну)
* Полный поиск (описание и название задачи)
* Глубокий поиск (описание и название задачи)
* Статистика по задачам за временной период
* Редактирование профиля и очистка БД
* Расширенные напоминания до дедлайна
* Моментальный экспорт данных

## Скриншоты

![Скриншоты](img/screenshots.png)
![Скриншоты](images/screens.png)

## Дорожная карта

* Локализация на большее количество языков
* Напоминания
* Оптимизация
* Интеграция с системным календарем

[🇬🇧](README-en.md)
6 changes: 3 additions & 3 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ android {

defaultConfig {
applicationId = "org.leftbrained.uptaskapp"
minSdk = 33
minSdk = 32
targetSdk = 34
versionCode = 1
versionName = "1.0"
Expand Down Expand Up @@ -61,14 +61,14 @@ dependencies {
implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
implementation("org.jetbrains.exposed:exposed-kotlin-datetime:$exposedVersion")
implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.1")
implementation("androidx.activity:activity-compose:1.9.0")
implementation(platform("androidx.compose:compose-bom:2024.05.00"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
implementation("com.google.android.engage:engage-core:1.5.0")
implementation("com.google.android.engage:engage-core:1.5.1")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
Expand Down
8 changes: 2 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
Expand All @@ -17,11 +14,10 @@
android:supportsRtl="true"
android:theme="@style/Theme.UptaskApp"
>
<receiver android:name=".classes.AlarmReceiver" />
<receiver android:name=".reminders.AlarmReceiver" />
<activity
android:name=".MainActivity"
android:name=".ui.screens.MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.UptaskApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.leftbrained.uptaskapp.R
import org.leftbrained.uptaskapp.db.Tag
import org.leftbrained.uptaskapp.db.UptaskDb

object Checks {
object Verifications {
fun emptyCheck(
name: String,
context: Context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import androidx.navigation.NavController
import org.jetbrains.exposed.sql.transactions.transaction
import org.leftbrained.uptaskapp.db.DatabaseStateViewmodel
import org.leftbrained.uptaskapp.db.TaskList
import org.leftbrained.uptaskapp.dialogs.ModifyTaskListDialog
import org.leftbrained.uptaskapp.ui.dialogs.ModifyTaskListDialog

@Composable
fun TaskListRow(taskList: TaskList, navController: NavController, userId: Int, vm: DatabaseStateViewmodel = viewModel()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.transactions.transaction
import org.leftbrained.uptaskapp.classes.Logs
import org.leftbrained.uptaskapp.other.Logs
import org.leftbrained.uptaskapp.db.DatabaseStateViewmodel
import org.leftbrained.uptaskapp.db.Tag
import org.leftbrained.uptaskapp.db.UptaskDb
import org.leftbrained.uptaskapp.db.UserTask
import org.leftbrained.uptaskapp.dialogs.ModifyTaskDialog
import org.leftbrained.uptaskapp.ui.dialogs.ModifyTaskDialog
import java.util.Locale

@Composable
Expand Down
20 changes: 20 additions & 0 deletions app/src/main/java/org/leftbrained/uptaskapp/dates/DateUtils.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.leftbrained.uptaskapp.dates

import kotlinx.datetime.Instant
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toLocalDateTime
import java.util.Locale

object DateUtils {
fun instantToDate(dueDate: Instant?): String {
return dueDate!!.toLocalDateTime(TimeZone.UTC).let {
"${it.dayOfMonth} ${
it.month.name.let { name ->
name.substring(0, 1)
.uppercase(Locale.ROOT) + name.substring(1)
.lowercase(Locale.ROOT)
}
}, ${it.year} ${it.hour}:${it.minute}"
}
}
}
8 changes: 7 additions & 1 deletion app/src/main/java/org/leftbrained/uptaskapp/nav/NavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,15 @@ import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction
import org.leftbrained.uptaskapp.*
import org.leftbrained.uptaskapp.db.UptaskDb
import org.leftbrained.uptaskapp.db.connectToDb
import org.leftbrained.uptaskapp.ui.screens.AuthActivity
import org.leftbrained.uptaskapp.ui.screens.RegisterActivity
import org.leftbrained.uptaskapp.ui.screens.StatsActivity
import org.leftbrained.uptaskapp.ui.screens.TaskActivity
import org.leftbrained.uptaskapp.ui.screens.TaskListActivity
import org.leftbrained.uptaskapp.ui.screens.UserActivity
import org.leftbrained.uptaskapp.ui.screens.WelcomeScreen

@Composable
fun GeneralNav() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.leftbrained.uptaskapp.classes
package org.leftbrained.uptaskapp.other

import android.content.SharedPreferences
import kotlinx.datetime.Clock
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.leftbrained.uptaskapp.classes
package org.leftbrained.uptaskapp.other

import android.content.SharedPreferences
import kotlinx.datetime.LocalDate
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.leftbrained.uptaskapp.classes
package org.leftbrained.uptaskapp.reminders

import android.app.NotificationManager
import android.content.BroadcastReceiver
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.leftbrained.uptaskapp.reminders

import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import org.leftbrained.uptaskapp.dates.DateUtils
import org.leftbrained.uptaskapp.viewmodel.TaskViewModel
import kotlin.time.Duration

object ReminderUtils {
fun setReminder(
context: Context,
name: String,
desc: String,
dueDate: Instant?,
selectedReminder: Pair<String, Duration>
): Boolean {
val alarmManager =
context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context, AlarmReceiver::class.java)
intent.putExtra("taskName", name)
intent.putExtra("taskDesc", desc)
intent.putExtra(
"taskDueDate",
DateUtils.instantToDate(dueDate)
)
println(DateUtils.instantToDate(dueDate))
val pendingIntent = PendingIntent.getBroadcast(
context, Clock.System.now().epochSeconds.toInt(), intent,
PendingIntent.FLAG_IMMUTABLE
)
val reminderMillis = dueDate!! - selectedReminder.second
if (alarmManager.canScheduleExactAlarms()) {
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
reminderMillis.toEpochMilliseconds(),
pendingIntent
)
return true
} else return false
}
}
Loading

0 comments on commit 465b485

Please sign in to comment.