Skip to content

Commit

Permalink
fix issues with performance on selecting and browsing items
Browse files Browse the repository at this point in the history
- the getAll() calls were slow when the database had many items
- disable the singleassetitem view side scrolling for now
  • Loading branch information
n8fr8 committed Jan 11, 2024
1 parent 441ddcf commit 1c6f68c
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 12 deletions.
67 changes: 63 additions & 4 deletions app/src/main/java/org/witness/proofmode/Activities.kt
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ object Activities: ViewModel()
}

var timeBatchWindow = 60000 * 5 //5 minutes
private var listItems : List<ProofableItem> = ArrayList<ProofableItem>();

fun addActivity(activity: Activity, context: Context) {
val db = getDB(context)
Expand All @@ -236,6 +237,8 @@ object Activities: ViewModel()
}
}



}

fun clearActivity (id: String, context: Context) {
Expand All @@ -258,7 +261,24 @@ object Activities: ViewModel()

}

private fun getActivityProofableItems(activity: Activity): SnapshotStateList<ProofableItem> {
fun getRelatedProofableItems (context: Context, selectId: String): List<ProofableItem> {

var listItems = ArrayList<ProofableItem>()

viewModelScope.launch {
var activity =
Activities.getDB(context).activitiesDao().activityFromProofableItemId(selectId)
if (activity != null) {
var proofItems = Activities.getActivityProofableItems(activity)
for (proofItem in proofItems)
listItems.add(proofItem)
}

}

return listItems
}
fun getActivityProofableItems(activity: Activity): SnapshotStateList<ProofableItem> {
when (activity.type) {
is ActivityType.MediaCaptured -> return activity.type.items
is ActivityType.MediaImported -> return activity.type.items
Expand All @@ -268,14 +288,53 @@ object Activities: ViewModel()
return mutableStateListOf<ProofableItem>()
}

fun getProofableItem(context: Context, selectId: String): List<ProofableItem> {

var listItems = ArrayList<ProofableItem>()

viewModelScope.launch {

var item = db.activitiesDao().activityFromProofableItemId(selectId)
if (item != null) {
var pItem = ProofableItem(item.id, Uri.parse(selectId))
listItems.add(pItem)
}

}

return listItems;
}

/**
fun getAllCapturedAndImportedItems(context: Context): List<ProofableItem> {
return activities.flatMap { getActivityProofableItems( it ) }.toMutableStateList().withDeletedItemsRemoved(context).distinctBy { it.uri }
if (listItems.isEmpty())
refreshListItems(context)
return listItems;
}
fun refreshListItems (context: Context) {
listItems = activities.flatMap { getActivityProofableItems( it ) }.toMutableStateList().withDeletedItemsRemoved(context).distinctBy { it.uri }
}**/

fun selectedItems(context: Context, selection: List<String>): List<ProofableItem> {
// TODO - We don't really care about the ids here, so we match on the uri and just select
// the first id one, if more than one mapping from id -> uri.
return getAllCapturedAndImportedItems(context).filter { selection.contains(it.uri.toString()) }
// return getAllCapturedAndImportedItems(context).filter { selection.contains(it.uri.toString()) }
var listItems = ArrayList<ProofableItem>()

viewModelScope.launch {
for (selectId in selection) {
var item = db.activitiesDao().activityFromProofableItemId(selectId)
if (item != null) {
var pItem = ProofableItem(item.id, Uri.parse(selectId))
listItems.add(pItem)
}
}
}

return listItems
}

fun dateForItem(item: ProofableItem, context: Context, onDate: (Date) -> Unit) {
Expand All @@ -302,7 +361,7 @@ fun SnapshotStateList<ProofableItem>.withDeletedItemsRemoved(context: Context):

fun ProofableItem.isDeleted(context: Context): Boolean {
try {
val inputStream: InputStream? = context.getContentResolver().openInputStream(this.uri)
val inputStream: InputStream? = context.contentResolver.openInputStream(this.uri)
if (inputStream != null) {
inputStream.close()
return false
Expand Down
27 changes: 19 additions & 8 deletions app/src/main/java/org/witness/proofmode/SingleAssetView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,16 @@ import java.text.SimpleDateFormat
import java.util.Locale


val LocalShowMetadata = compositionLocalOf<Boolean> { error("Not set") }
val LocalShowMetadata = compositionLocalOf<Boolean> { true }

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SingleAssetViewWithToolbar(initialItem: ProofableItem, onClose: () -> Unit) {

var showMetadata by remember {
mutableStateOf(false)
mutableStateOf(true)
}

var title by remember { mutableStateOf("") }

Scaffold(
Expand Down Expand Up @@ -150,12 +151,21 @@ fun SingleAssetView(initialItem: ProofableItem, modifier: Modifier = Modifier, s
var topPartWidth by remember {
mutableStateOf(0f)
}
val allAssets by remember {
mutableStateOf(
Activities.getAllCapturedAndImportedItems(context)
)
}

val allAssets = ArrayList<ProofableItem>()
allAssets.add(initialItem)

/***
var relatedItems = Activities.getRelatedProofableItems(context,initialItem.id)
for (relatedItem in relatedItems)
allAssets.add(relatedItem)
var selectedIndex by remember { mutableStateOf(allAssets.indexOfFirst { it.uri.toString() == initialItem.uri.toString() } .coerceAtLeast(0)) }
**/


var selectedIndex = 0

val showMetadata = LocalShowMetadata.current
val metadataOpacity: Float by animateFloatAsState(
Expand Down Expand Up @@ -226,6 +236,7 @@ fun SingleAssetView(initialItem: ProofableItem, modifier: Modifier = Modifier, s
setTitle = setTitle
)
}
/**
Box(
modifier = Modifier
.alpha(1f - metadataOpacity)
Expand All @@ -240,7 +251,7 @@ fun SingleAssetView(initialItem: ProofableItem, modifier: Modifier = Modifier, s
listState.scrollToItem(selectedIndex, previewItemCenterOffset)
}
})
}
}**/
Column(
modifier = Modifier
.alpha(metadataOpacity)
Expand Down

0 comments on commit 1c6f68c

Please sign in to comment.