Skip to content

Commit cc86051

Browse files
committed
hotfix. display qr code in share screen [FoKE-Developers#90]
1 parent 9855535 commit cc86051

File tree

2 files changed

+24
-39
lines changed

2 files changed

+24
-39
lines changed

presenter/src/main/java/com/foke/together/presenter/screen/ShareScreen.kt

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
package com.foke.together.presenter.screen
22

3-
import android.graphics.Bitmap
4-
import android.graphics.BitmapFactory
5-
import android.net.Uri
63
import androidx.compose.foundation.layout.Box
74
import androidx.compose.foundation.layout.Column
8-
import androidx.compose.foundation.layout.Row
95
import androidx.compose.foundation.layout.aspectRatio
106
import androidx.compose.foundation.layout.fillMaxSize
11-
import androidx.compose.foundation.layout.size
12-
import androidx.compose.foundation.layout.wrapContentSize
137
import androidx.compose.material.icons.Icons
14-
import androidx.compose.material.icons.filled.Download
158
import androidx.compose.material.icons.filled.Home
169
import androidx.compose.material.icons.filled.Print
1710
import androidx.compose.material.icons.filled.Share
@@ -20,27 +13,18 @@ import androidx.compose.material3.IconButton
2013
import androidx.compose.material3.MaterialTheme
2114
import androidx.compose.material3.Surface
2215
import androidx.compose.runtime.Composable
23-
import androidx.compose.runtime.State
24-
import androidx.compose.runtime.collectAsState
2516
import androidx.compose.ui.Alignment
2617
import androidx.compose.ui.Modifier
2718
import androidx.compose.ui.platform.LocalContext
2819
import androidx.compose.ui.tooling.preview.Preview
29-
import androidx.compose.ui.unit.dp
30-
import androidx.constraintlayout.compose.ChainStyle
3120
import androidx.constraintlayout.compose.ConstraintLayout
3221
import androidx.constraintlayout.compose.Dimension
3322
import androidx.core.content.FileProvider
3423
import androidx.core.net.toFile
35-
import com.foke.together.presenter.frame.FourCutFrame
3624
import com.foke.together.presenter.theme.FourCutTogetherTheme
37-
import com.foke.together.presenter.theme.highContrastDarkColorScheme
3825
import androidx.hilt.navigation.compose.hiltViewModel
39-
import androidx.lifecycle.Lifecycle
40-
import androidx.lifecycle.compose.LifecycleEventEffect
4126
import coil.compose.AsyncImage
4227
import coil.request.ImageRequest
43-
import com.foke.together.presenter.R
4428
import com.foke.together.presenter.viewmodel.ShareViewModel
4529
import com.foke.together.util.ImageFileUtil
4630

@@ -50,8 +34,6 @@ fun ShareScreen(
5034
viewModel: ShareViewModel = hiltViewModel()
5135
) {
5236
val context = LocalContext.current
53-
val qrCodeBitmap: State<Bitmap> = viewModel.qrCodeBitmap.collectAsState(initial = Bitmap.createBitmap(
54-
1,1,Bitmap.Config.ARGB_8888) )
5537
ConstraintLayout(
5638
modifier = Modifier.fillMaxSize()
5739
) {
@@ -142,13 +124,14 @@ fun ShareScreen(
142124
){
143125
AsyncImage(
144126
model = ImageRequest.Builder(context)
145-
.data(qrCodeBitmap.value)
127+
.data(viewModel.qrCodeBitmap)
146128
.build(),
147129
contentDescription = "qr code",
148130
modifier = Modifier.fillMaxSize()
149131
)
150132
}
151133

134+
// TODO: add android native share button
152135
// IconButton(
153136
// onClick = {
154137
// viewModel.downloadImage()

presenter/src/main/java/com/foke/together/presenter/viewmodel/ShareViewModel.kt

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package com.foke.together.presenter.viewmodel
33
import android.content.Context
44
import android.graphics.Bitmap
55
import android.net.Uri
6+
import androidx.compose.runtime.getValue
7+
import androidx.compose.runtime.mutableStateOf
8+
import androidx.compose.runtime.setValue
69
import androidx.core.content.FileProvider
710
import androidx.core.net.toFile
811
import androidx.lifecycle.ViewModel
@@ -11,13 +14,11 @@ import com.foke.together.domain.interactor.GeneratePhotoFrameUseCase
1114
import com.foke.together.domain.interactor.GetQRCodeUseCase
1215
import com.foke.together.domain.interactor.web.GetDownloadUrlUseCase
1316
import com.foke.together.domain.interactor.web.SessionKeyUseCase
17+
import com.foke.together.util.AppLog
1418
import com.foke.together.util.AppPolicy
1519
import com.foke.together.util.ImageFileUtil
1620
import dagger.hilt.android.lifecycle.HiltViewModel
17-
import dagger.hilt.android.qualifiers.ActivityContext
1821
import dagger.hilt.android.qualifiers.ApplicationContext
19-
import kotlinx.coroutines.flow.Flow
20-
import kotlinx.coroutines.flow.flow
2122
import kotlinx.coroutines.launch
2223
import javax.inject.Inject
2324

@@ -29,15 +30,16 @@ class ShareViewModel @Inject constructor(
2930
private val sessionKeyUseCase: SessionKeyUseCase,
3031
private val generatePhotoFrameUseCase: GeneratePhotoFrameUseCase
3132
): ViewModel() {
32-
val qrCodeBitmap: Flow<Bitmap> = flow{
33-
val qrCodeBitmap = generateQRcode()
34-
emit(qrCodeBitmap)
35-
}
36-
33+
var qrCodeBitmap by mutableStateOf<Bitmap?>(null)
3734
val singleImageUri: Uri = generatePhotoFrameUseCase.getFinalSingleImageUri()
38-
3935
val twoImageUri: Uri = generatePhotoFrameUseCase.getFinalTwoImageUri()
4036

37+
init {
38+
viewModelScope.launch {
39+
generateQRcode()
40+
}
41+
}
42+
4143
fun downloadImage() {
4244
val imageBitmap = ImageFileUtil.getBitmapFromUri(context, singleImageUri)
4345
viewModelScope.launch {
@@ -49,19 +51,15 @@ class ShareViewModel @Inject constructor(
4951
}
5052
}
5153

52-
suspend fun generateQRcode(): Bitmap {
54+
private suspend fun generateQRcode() {
5355
val sessionKey = sessionKeyUseCase.getSessionKey()
54-
val downloadUrl:String = getDownloadUrlUseCase(sessionKey).toString()
55-
if(downloadUrl.contains("Failure")){
56-
return Bitmap.createBitmap(
57-
1,1,Bitmap.Config.ARGB_8888)
56+
val downloadUrl: String = getDownloadUrlUseCase(sessionKey).getOrElse { "https://4cuts.store" }
57+
58+
if (AppPolicy.isDebugMode) {
59+
AppLog.e(TAG, "generateQRcode", "sessionKey: $sessionKey")
60+
AppLog.e(TAG, "generateQRcode", "downloadUrl: $downloadUrl")
5861
}
59-
return getQRCodeUseCase(sessionKey, downloadUrl)
60-
// return a empty bitmap if the qr code generation fails
61-
.getOrElse(
62-
return Bitmap.createBitmap(
63-
1,1,Bitmap.Config.ARGB_8888)
64-
)
62+
qrCodeBitmap = getQRCodeUseCase(sessionKey, downloadUrl).getOrNull()
6563
}
6664

6765
fun shareImage() {
@@ -76,4 +74,8 @@ class ShareViewModel @Inject constructor(
7674
fun printImage(activityContext: Context) {
7775
ImageFileUtil.printFromUri(activityContext,twoImageUri)
7876
}
77+
78+
companion object {
79+
private val TAG = ShareViewModel::class.java.simpleName
80+
}
7981
}

0 commit comments

Comments
 (0)