Skip to content

Commit 17a312b

Browse files
committed
share button test
1 parent 2e92035 commit 17a312b

File tree

7 files changed

+82
-14
lines changed

7 files changed

+82
-14
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,20 @@
1010
android:icon="@mipmap/ic_launcher"
1111
android:label="@string/app_name"
1212
android:roundIcon="@mipmap/ic_launcher_round"
13-
android:usesCleartextTraffic="true" />
13+
android:usesCleartextTraffic="true" >
14+
15+
<!-- To use Sharing feature -->
16+
<provider
17+
android:name="androidx.core.content.FileProvider"
18+
android:authorities="com.foke.together.fileprovider"
19+
android:exported="false"
20+
android:grantUriPermissions="true">
21+
<meta-data
22+
android:name="android.support.FILE_PROVIDER_PATHS"
23+
android:resource="@xml/provider_files" />
24+
</provider>
25+
26+
</application>
1427
<!-- TODO: temporary add usesCleartextTraffic. remove later -->
1528

1629
<!-- TODO: support back-up-->
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<paths xmlns:android="http://schemas.android.com/apk/res/android">
3+
<cache-path
4+
name="cache"
5+
path="." /> <!--Context.getCacheDir() 내부 저장소-->
6+
<files-path
7+
name="files"
8+
path="." /> <!--Context.getFilesDir() 내부 저장소-->
9+
<external-path
10+
name="external"
11+
path="."/> <!-- Environment.getExternalStorageDirectory() 외부 저장소-->
12+
<external-cache-path
13+
name="external-cache"
14+
path="."/> <!-- Context.getExternalCacheDir() 외부 저장소-->
15+
<external-files-path
16+
name="external-files"
17+
path="."/> <!-- Context.getExternalFilesDir() 외부 저장소-->
18+
</paths>

external/src/main/java/com/foke/together/external/repository/ImageRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class ImageRepository @Inject constructor(
4141
return uriList
4242
}
4343

44+
//TODO: file작업코드는 repository에서 하지말고 Util로 옮겨놓기
4445
override suspend fun clearCacheDir() {
4546
context.cacheDir.listFiles().forEach {
4647
if(it.name.contains(".jpg")){

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import androidx.compose.ui.unit.dp
1919
import androidx.constraintlayout.compose.ChainStyle
2020
import androidx.constraintlayout.compose.ConstraintLayout
2121
import androidx.constraintlayout.compose.Dimension
22+
import androidx.core.content.FileProvider
23+
import androidx.core.net.toFile
2224
import com.foke.together.presenter.frame.FourCutFrame
2325
import com.foke.together.presenter.theme.FourCutTogetherTheme
2426
import com.foke.together.presenter.theme.highContrastDarkColorScheme
@@ -28,6 +30,7 @@ import androidx.lifecycle.compose.LifecycleEventEffect
2830
import coil.compose.AsyncImage
2931
import coil.request.ImageRequest
3032
import com.foke.together.presenter.viewmodel.ShareViewModel
33+
import com.foke.together.util.ImageFileUtil
3134

3235
@Composable
3336
fun ShareScreen(
@@ -87,7 +90,10 @@ fun ShareScreen(
8790
}
8891

8992
IconButton(
90-
onClick = { viewModel.printImage() },
93+
onClick = {
94+
val finalTwoRowImageUri = viewModel.getFinalTwoImageUri()
95+
ImageFileUtil.printFromUri(context,finalTwoRowImageUri)
96+
},
9197
modifier = Modifier.constrainAs(printButton) {
9298
top.linkTo(homeButton.bottom)
9399
end.linkTo(parent.end, margin = 30.dp)
@@ -105,7 +111,15 @@ fun ShareScreen(
105111
}
106112

107113
IconButton(
108-
onClick = {viewModel.shareImage()},
114+
onClick = {
115+
val finalFile = finalSingleImageUri.toFile()
116+
val contentUri = FileProvider.getUriForFile(
117+
context,
118+
"com.foke.together.fileprovider",
119+
finalFile
120+
)
121+
ImageFileUtil.shareUri(context, contentUri)
122+
},
109123
modifier = Modifier.constrainAs(shareButton) {
110124
top.linkTo(printButton.bottom)
111125
end.linkTo(parent.end, margin = 30.dp)

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ package com.foke.together.presenter.viewmodel
22

33
import android.content.Context
44
import android.net.Uri
5-
import androidx.compose.ui.platform.LocalContext
65
import androidx.lifecycle.ViewModel
6+
import androidx.lifecycle.viewModelScope
7+
import com.foke.together.util.AppPolicy
8+
import com.foke.together.util.ImageFileUtil
79
import dagger.hilt.android.lifecycle.HiltViewModel
810
import dagger.hilt.android.qualifiers.ApplicationContext
11+
import kotlinx.coroutines.launch
912
import javax.inject.Inject
1013

1114
@HiltViewModel
@@ -16,18 +19,28 @@ class ShareViewModel @Inject constructor(
1619
fun getFinalSingleImageUri(): Uri {
1720
var finalSingleImageUri: Uri = Uri.EMPTY
1821
context.cacheDir.listFiles().forEach {
19-
file -> if (file.name.contains("final_single_row.jpg")) { finalSingleImageUri = Uri.fromFile(file) }
22+
file -> if (file.name.contains("${AppPolicy.SINGLE_ROW_FINAL_IMAGE_NAME}")) { finalSingleImageUri = Uri.fromFile(file) }
2023
}
2124
return finalSingleImageUri
2225
}
23-
fun shareImage() {
24-
25-
}
26-
fun printImage() {
2726

27+
fun getFinalTwoImageUri(): Uri {
28+
var finalTwoImageUri: Uri = Uri.EMPTY
29+
context.cacheDir.listFiles().forEach {
30+
file -> if (file.name.contains("${AppPolicy.TWO_ROW_FINAL_IMAGE_NAME}")) { finalTwoImageUri = Uri.fromFile(file) }
31+
}
32+
return finalTwoImageUri
2833
}
2934

3035
fun downloadImage() {
31-
36+
val imageUri = getFinalSingleImageUri()
37+
val imageBitmap = ImageFileUtil.getBitmapFromUri(context, imageUri)
38+
viewModelScope.launch {
39+
ImageFileUtil.saveBitmapToStorage(
40+
context,
41+
imageBitmap,
42+
AppPolicy.SINGLE_ROW_FINAL_IMAGE_NAME
43+
)
44+
}
3245
}
3346
}

util/src/main/java/com/foke/together/util/AppPolicy.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.foke.together.util
33
object AppPolicy {
44
const val isDebugMode = true
55

6-
const val DEFAULT_EXTERNAL_CAMERA_IP = "0.0.0.0"
6+
const val DEFAULT_EXTERNAL_CAMERA_IP = "192.168.0.71:5000"
77

88
// network
99
const val WEB_SERVER_URL = "https://4cuts.store/"
@@ -12,7 +12,7 @@ object AppPolicy {
1212
const val WEB_WRITE_TIMEOUT = 10L
1313
const val WEB_FILE_MAX_CONTENT_LENGTH = 20971520
1414

15-
const val EXTERNAL_CAMERA_DEFAULT_SERVER_URL = "http://0.0.0.0"
15+
const val EXTERNAL_CAMERA_DEFAULT_SERVER_URL = "http://192.168.0.71:5000"
1616
const val EXTERNAL_CAMERA_CONNECT_TIMEOUT = 10L
1717
const val EXTERNAL_CAMERA_READ_TIMEOUT = 10L
1818
const val EXTERNAL_CAMERA_WRITE_TIMEOUT = 10L

util/src/main/java/com/foke/together/util/ImageFileUtil.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import android.content.Context
44
import android.content.Intent
55
import android.content.Intent.createChooser
66
import android.graphics.Bitmap
7+
import android.graphics.BitmapFactory
78
import android.media.MediaScannerConnection
89
import android.net.Uri
910
import android.os.Environment
1011
import androidx.compose.ui.graphics.asAndroidBitmap
1112
import androidx.compose.ui.graphics.layer.GraphicsLayer
1213
import androidx.core.content.ContextCompat.startActivity
14+
import androidx.core.net.toFile
1315
import androidx.print.PrintHelper
1416
import kotlinx.coroutines.suspendCancellableCoroutine
1517
import java.io.File
@@ -84,7 +86,7 @@ object ImageFileUtil {
8486
}
8587

8688
// TODO: 파일 분리하기
87-
fun shareBitmap(context: Context, uri: Uri) {
89+
fun shareUri(context: Context, uri: Uri) {
8890
val intent = Intent(Intent.ACTION_SEND).apply {
8991
type = "image/jpg"
9092
putExtra(Intent.EXTRA_STREAM, uri)
@@ -93,8 +95,15 @@ object ImageFileUtil {
9395
startActivity(context, createChooser(intent, "Share your image"), null)
9496
}
9597

96-
fun printBitmap(context: Context, bitmap: Bitmap){
98+
fun getBitmapFromUri(context: Context, uri: Uri): Bitmap {
99+
val file = uri.toFile()
100+
return BitmapFactory.decodeFile(file.absolutePath)
101+
}
102+
103+
fun printFromUri(context: Context, uri: Uri){
97104
// can use getActivity()
105+
val file = uri.toFile()
106+
val bitmap = BitmapFactory.decodeFile(file.absolutePath)
98107
val photoPrinter = PrintHelper(context)
99108
photoPrinter.printBitmap("Print", bitmap)
100109
}

0 commit comments

Comments
 (0)