Skip to content

Commit

Permalink
Implemented ProgressView and first alpha release
Browse files Browse the repository at this point in the history
Signed-off-by: dracarys18 <[email protected]>
  • Loading branch information
dracarys18 committed Nov 17, 2021
1 parent 1f1994f commit 0adb493
Show file tree
Hide file tree
Showing 11 changed files with 337 additions and 21 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ android {
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"
versionName "0.1alpha"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ interface BookDao {
@Query("SELECT EXISTS (SELECT 1 FROM book_data WHERE id = :id)")
fun checkIfBookExists(id: String): LiveData<Boolean>

@Query("UPDATE book_data SET pages_read=:pages")
fun updatePages(pages: String)
@Query("SELECT pages_read FROM book_data WHERE id = :id")
fun getPagesRead(id: String): LiveData<Int>

@Query("UPDATE book_data SET pages_read=:pages where id = :id")
fun updatePages(pages: Int, id: String)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import androidx.room.PrimaryKey
data class BookData(
@PrimaryKey val id: String,
@ColumnInfo(name = "book_name") val bookName: String,
@ColumnInfo(name = "author") val author: String,
@ColumnInfo(name = "image_url") val imageUrl: String,
@ColumnInfo(name = "pages_read") val pagesRead: Int = 0
@ColumnInfo(name = "total_pages") val totalPages: Int,
@ColumnInfo(name = "pages_read") val pagesRead: Int = 0,
@ColumnInfo(name = "insert_date") val insertDate: String,
)

Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
package com.karthihegde.readlist.navigation

import android.app.Application
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.karthihegde.readlist.database.BookViewModel
import com.karthihegde.readlist.navigation.screens.BookNavScreens
import com.karthihegde.readlist.navigation.screens.Screens
import com.karthihegde.readlist.ui.BookDetailView
import com.karthihegde.readlist.ui.CollectionScreen
import com.karthihegde.readlist.ui.DiscoverScreen
import com.karthihegde.readlist.ui.ProgressView
import com.karthihegde.readlist.ui.*
import com.karthihegde.readlist.utils.clickBook
import com.karthihegde.readlist.utils.getBookFromId
import kotlinx.coroutines.CoroutineScope
Expand Down Expand Up @@ -42,6 +36,16 @@ fun Navigation() {
BookDetailView(navHostController = navHostController)
}
}
composable(
route = BookNavScreens.EditView.route + "/{id}",
arguments = listOf(navArgument("id") {
type = NavType.StringType
})
) { ids ->
ids.arguments?.getString("id")?.let { id ->
EditBookProgress(navController = navHostController, id = id)
}
}
composable(route = Screens.Collection.route) {
CollectionScreen(navHostController)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.karthihegde.readlist.navigation.screens

sealed class BookNavScreens(val route: String) {
object DetailView : BookNavScreens("detail_view")
object EditView : BookNavScreens("edit_view")

fun withArgs(vararg args: String): String {
return buildString {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.karthihegde.readlist.navigation.screens

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.filled.CollectionsBookmark
import androidx.compose.material.icons.filled.Pageview
import androidx.compose.material.icons.filled.Sync
import androidx.compose.ui.graphics.vector.ImageVector

sealed class Screens(val route: String, val label: String, val icon: ImageVector) {
Expand Down
16 changes: 15 additions & 1 deletion app/src/main/java/com/karthihegde/readlist/ui/BookDetailView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*

@Composable
fun BookDetailView(navHostController: NavController) {
Expand Down Expand Up @@ -218,7 +220,19 @@ fun BackAndCollButton(item: Item, navHostController: NavController) {
IconButton(
onClick = {
val imageLink = item.volumeInfo.imageLinks?.thumbnail ?: PLACEHOLDER_IMAGE
val data = BookData(item.id, item.volumeInfo.title, imageLink)
val author = item.volumeInfo.authors?.joinToString(",") ?: "Unknown"
val calender = Calendar.getInstance()
val dateFormat = SimpleDateFormat("MMMM dd,yyyy", Locale.getDefault())
val date = dateFormat.format(calender.time)
val data =
BookData(
id = item.id,
bookName = item.volumeInfo.title,
imageUrl = imageLink,
author = author,
totalPages = item.volumeInfo.pageCount,
insertDate = date,
)
val dao = BookDatabase.getInstance(context).bookDatabaseDo
val scope = CoroutineScope(Job() + Dispatchers.IO)
scope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.*
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
Expand Down
139 changes: 139 additions & 0 deletions app/src/main/java/com/karthihegde/readlist/ui/EditBookProgress.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package com.karthihegde.readlist.ui

import android.app.Application
import android.widget.Toast
import androidx.compose.foundation.border
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBackIosNew
import androidx.compose.material.icons.filled.Check
import androidx.compose.runtime.*
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import com.karthihegde.readlist.database.BookViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlin.math.abs

@Composable
fun EditBookProgress(navController: NavController, id: String) {
val context = LocalContext.current
var newPage = 0
val viewModel = BookViewModel(context.applicationContext as Application)
val bookData by viewModel.dao.getBookFromId(id).observeAsState()
val pagesRead = bookData?.pagesRead?.toString() ?: ""
var isError by remember {
mutableStateOf(false)
}
var text by remember {
mutableStateOf("")
}
val borderColor = if (isSystemInDarkTheme()) Color.DarkGray else Color.LightGray
val totalPages = bookData?.totalPages ?: Int.MAX_VALUE
fun onDoneAction() {
if (!isError && text.isNotEmpty()) {
val scope = CoroutineScope(Job() + Dispatchers.IO)
scope.launch {
viewModel.dao.updatePages(pages = newPage, id = id)
}
navController.popBackStack()
} else
Toast.makeText(
context,
"Enter a Proper Page Number",
Toast.LENGTH_SHORT
).show()
}
Scaffold(topBar = {
Box(
modifier = Modifier
.padding(top = 8.dp)
.fillMaxWidth()
) {
IconButton(
onClick = { navController.popBackStack() },
modifier = Modifier.align(Alignment.TopStart)
) {
Icon(
Icons.Filled.ArrowBackIosNew,
contentDescription = "",
tint = MaterialTheme.colors.onBackground,
modifier = Modifier.shadow(elevation = 8.dp, clip = true)
)
}
}
}) {
Column(modifier = Modifier.fillMaxSize()) {
Row(
modifier = Modifier.padding(8.dp)
) {
Text(
text = "Pages Read:",
fontSize = 20.sp,
color = MaterialTheme.colors.onBackground,
modifier = Modifier.padding(20.dp)
)
Row {
OutlinedTextField(
value = text,
onValueChange = { value ->
text = value
isError = try {
newPage = abs(value.toInt())
newPage > totalPages
} catch (e: NumberFormatException) {
true
}
},
placeholder = { Text(pagesRead, textAlign = TextAlign.Center) },
isError = isError,
singleLine = true,
keyboardActions = KeyboardActions(onDone = { onDoneAction() }),
modifier = Modifier
.wrapContentHeight()
.fillMaxWidth(0.6f)
.padding(top = 10.dp)
.border(1.dp, color = borderColor, shape = RoundedCornerShape(12.dp)),
colors = TextFieldDefaults.textFieldColors(
backgroundColor = MaterialTheme.colors.background,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent
)
)
Text(
text = "/$totalPages",
fontSize = 20.sp,
color = MaterialTheme.colors.onBackground,
modifier = Modifier.padding(20.dp)
)
}
}
Row {
Spacer(modifier = Modifier.fillMaxWidth(0.8f))
OutlinedButton(
onClick = {
onDoneAction()
},
shape = RoundedCornerShape(50),
colors = ButtonDefaults.buttonColors(backgroundColor = MaterialTheme.colors.secondary)
) {
Icon(Icons.Default.Check, contentDescription = "")
}
}
}
}
}
Loading

0 comments on commit 0adb493

Please sign in to comment.