Skip to content

Commit 3b62fae

Browse files
committed
Add share to kdrive and improve UI
1 parent 83deec7 commit 3b62fae

File tree

6 files changed

+171
-22
lines changed

6 files changed

+171
-22
lines changed

app/src/main/java/com/infomaniak/drive/ui/fileList/preview/PreviewPDFActivity.kt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,21 @@
1717
*/
1818
package com.infomaniak.drive.ui.fileList.preview
1919

20+
import android.content.Intent
21+
import android.net.Uri
2022
import android.os.Bundle
2123
import androidx.appcompat.app.AppCompatActivity
24+
import androidx.core.view.ViewCompat
25+
import androidx.core.view.WindowInsetsCompat
2226
import androidx.navigation.NavController
2327
import androidx.navigation.fragment.NavHostFragment
2428
import com.infomaniak.drive.R
2529
import com.infomaniak.drive.databinding.ActivityPreviewPdfBinding
30+
import com.infomaniak.drive.ui.SaveExternalFilesActivity
31+
import com.infomaniak.drive.ui.SaveExternalFilesActivityArgs
32+
import com.infomaniak.drive.utils.AccountUtils
33+
import com.infomaniak.drive.utils.setupTransparentStatusBar
34+
import com.infomaniak.lib.core.utils.setMargins
2635

2736
class PreviewPDFActivity : AppCompatActivity() {
2837

@@ -32,6 +41,39 @@ class PreviewPDFActivity : AppCompatActivity() {
3241
super.onCreate(savedInstanceState)
3342
setContentView(binding.root)
3443
setupNavController().navigate(R.id.previewPDFFragment)
44+
45+
binding.backButton.setOnClickListener { finish() }
46+
binding.saveToKDrive.setOnClickListener { saveToKDrive(Uri.parse(intent.dataString)) }
47+
}
48+
49+
override fun onStart() {
50+
super.onStart()
51+
setupWindowInsetsListener()
52+
setupTransparentStatusBar()
53+
}
54+
55+
private fun saveToKDrive(uri: Uri) {
56+
Intent(this, SaveExternalFilesActivity::class.java).apply {
57+
action = Intent.ACTION_SEND
58+
putExtra(Intent.EXTRA_STREAM, uri)
59+
putExtras(
60+
SaveExternalFilesActivityArgs(
61+
userId = AccountUtils.currentUserId,
62+
driveId = AccountUtils.currentDriveId,
63+
).toBundle()
64+
)
65+
type = "/pdf"
66+
startActivity(this)
67+
}
68+
}
69+
70+
private fun setupWindowInsetsListener() = with(binding) {
71+
ViewCompat.setOnApplyWindowInsetsListener(root) { _, windowInsets ->
72+
with(windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())) {
73+
header.setMargins(left = left, top = top, right = right)
74+
}
75+
windowInsets
76+
}
3577
}
3678

3779
private fun getNavHostFragment() = supportFragmentManager.findFragmentById(R.id.hostFragment) as NavHostFragment

app/src/main/java/com/infomaniak/drive/ui/fileList/preview/PreviewPDFFragment.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import android.os.Bundle
2424
import android.view.LayoutInflater
2525
import android.view.View
2626
import android.view.ViewGroup
27+
import android.widget.TextView
2728
import androidx.core.content.ContextCompat
2829
import androidx.core.view.isGone
2930
import androidx.core.view.isVisible
@@ -39,6 +40,7 @@ import com.infomaniak.drive.ui.fileList.preview.PreviewSliderFragment.Companion.
3940
import com.infomaniak.drive.utils.IOFile
4041
import com.infomaniak.drive.utils.PreviewPDFUtils
4142
import com.infomaniak.lib.core.models.ApiResponse
43+
import com.infomaniak.lib.core.utils.getFileName
4244
import com.infomaniak.lib.core.utils.safeBinding
4345
import com.infomaniak.lib.pdfview.PDFView
4446
import com.infomaniak.lib.pdfview.scroll.DefaultScrollHandle
@@ -180,6 +182,7 @@ class PreviewPDFFragment : PreviewFragment() {
180182
}
181183

182184
private fun getConfigurator(uriString: String?, pdfFile: IOFile?): PDFView.Configurator {
185+
(activity as? PreviewPDFActivity)?.findViewById<TextView>(R.id.pdfName)?.text = requireContext().getFileName(Uri.parse(uriString))
183186
return uriString?.let { binding.pdfView.fromUri(Uri.parse(uriString)) } ?: binding.pdfView.fromFile(pdfFile)
184187
}
185188

app/src/main/java/com/infomaniak/drive/ui/fileList/preview/PreviewSliderFragment.kt

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ class PreviewSliderFragment : Fragment(), FileInfoActionsView.OnItemClickListene
178178

179179
override fun onStart() {
180180
super.onStart()
181-
setupTransparentStatusBar()
181+
setupTransparentStatusBar ()
182182
}
183183

184184
override fun onResume() {
@@ -200,7 +200,7 @@ class PreviewSliderFragment : Fragment(), FileInfoActionsView.OnItemClickListene
200200
}
201201

202202
override fun onStop() {
203-
clearEdgeToEdge()
203+
requireActivity().clearEdgeToEdge()
204204
super.onStop()
205205
}
206206

@@ -221,11 +221,6 @@ class PreviewSliderFragment : Fragment(), FileInfoActionsView.OnItemClickListene
221221

222222
private fun noPreviewList() = mainViewModel.currentPreviewFileList.isEmpty()
223223

224-
private fun clearEdgeToEdge() {
225-
toggleSystemBar(true)
226-
requireActivity().window.toggleEdgeToEdge(false)
227-
}
228-
229224
private fun setBackActionHandlers() {
230225
getBackNavigationResult<Int>(DownloadProgressDialog.OPEN_WITH) {
231226
context?.openWith(currentFile, userDrive)
@@ -246,20 +241,12 @@ class PreviewSliderFragment : Fragment(), FileInfoActionsView.OnItemClickListene
246241
_binding?.header?.isVisible = showUi
247242

248243
toggleBottomSheet(showUi)
249-
toggleSystemBar(showUi)
244+
requireActivity().toggleSystemBar(showUi)
250245

251246
showUi = !showUi
252247
}
253248
}
254249

255-
private fun toggleSystemBar(show: Boolean) {
256-
getWindowInsetsController(requireActivity().window.decorView)?.apply {
257-
systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
258-
val systemBars = WindowInsetsCompat.Type.systemBars()
259-
if (show) show(systemBars) else hide(systemBars)
260-
}
261-
}
262-
263250
private fun configureBottomSheetFileInfo() {
264251
activity?.setColorNavigationBar(true)
265252
bottomSheetBehavior = BottomSheetBehavior.from(binding.bottomSheetFileInfos)

app/src/main/java/com/infomaniak/drive/utils/Extensions.kt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ import android.widget.ImageView
3939
import androidx.annotation.DrawableRes
4040
import androidx.core.content.ContextCompat
4141
import androidx.core.content.pm.ShortcutManagerCompat
42-
import androidx.core.view.isGone
43-
import androidx.core.view.isVisible
42+
import androidx.core.view.*
4443
import androidx.fragment.app.Fragment
4544
import androidx.navigation.fragment.findNavController
4645
import androidx.work.OneTimeWorkRequest
@@ -79,6 +78,7 @@ import com.infomaniak.lib.core.utils.UtilsUi.openUrl
7978
import com.infomaniak.lib.login.InfomaniakLogin
8079
import handleActionDone
8180
import io.realm.RealmList
81+
import kotlinx.coroutines.*
8282
import kotlin.math.abs
8383
import kotlin.math.max
8484
import kotlin.math.min
@@ -120,6 +120,28 @@ fun Cursor.uri(contentUri: Uri): Uri {
120120

121121
fun Number.isPositive(): Boolean = toLong() > 0
122122

123+
fun Activity.clearEdgeToEdge() {
124+
toggleSystemBar(true)
125+
window.toggleEdgeToEdge(false)
126+
}
127+
128+
fun Activity.setupTransparentStatusBar() {
129+
window?.apply {
130+
statusBarColor = ContextCompat.getColor(this@setupTransparentStatusBar, R.color.previewBackgroundTransparent)
131+
132+
lightStatusBar(false)
133+
toggleEdgeToEdge(true)
134+
}
135+
}
136+
137+
fun Activity.toggleSystemBar(show: Boolean) {
138+
ViewCompat.getWindowInsetsController(window.decorView)?.apply {
139+
systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
140+
val systemBars = WindowInsetsCompat.Type.systemBars()
141+
if (show) show(systemBars) else hide(systemBars)
142+
}
143+
}
144+
123145
fun Activity.setColorStatusBar(appBar: Boolean = false) = with(window) {
124146
if (VERSION.SDK_INT >= VERSION_CODES.M) {
125147
statusBarColor = ContextCompat.getColor(this@setColorStatusBar, if (appBar) R.color.appBar else R.color.background)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="utf-8"?><!--
2+
~ Infomaniak kDrive - Android
3+
~ Copyright (C) 2022 Infomaniak Network SA
4+
~
5+
~ This program is free software: you can redistribute it and/or modify
6+
~ it under the terms of the GNU General Public License as published by
7+
~ the Free Software Foundation, either version 3 of the License, or
8+
~ (at your option) any later version.
9+
~
10+
~ This program is distributed in the hope that it will be useful,
11+
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
~ GNU General Public License for more details.
14+
~
15+
~ You should have received a copy of the GNU General Public License
16+
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
-->
18+
<selector xmlns:android="http://schemas.android.com/apk/res/android">
19+
<item>
20+
<shape android:shape="rectangle">
21+
<solid android:color="@color/previewBackgroundTransparent" />
22+
<corners android:radius="100dp"/>
23+
</shape>
24+
</item>
25+
</selector>

app/src/main/res/layout/activity_preview_pdf.xml

Lines changed: 74 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,80 @@
1515
~ You should have received a copy of the GNU General Public License
1616
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
-->
18-
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
18+
19+
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
1920
xmlns:app="http://schemas.android.com/apk/res-auto"
20-
android:id="@+id/hostFragment"
21-
android:name="androidx.navigation.fragment.NavHostFragment"
21+
xmlns:tools="http://schemas.android.com/tools"
2222
android:layout_width="match_parent"
2323
android:layout_height="match_parent"
24-
app:defaultNavHost="true" />
24+
tools:backrgound="@color/previewBackground">
25+
26+
<androidx.fragment.app.FragmentContainerView
27+
android:id="@+id/hostFragment"
28+
android:name="androidx.navigation.fragment.NavHostFragment"
29+
android:layout_width="match_parent"
30+
android:layout_height="match_parent"
31+
app:defaultNavHost="true" />
32+
33+
<androidx.constraintlayout.widget.ConstraintLayout
34+
android:id="@+id/header"
35+
android:layout_width="match_parent"
36+
android:layout_height="wrap_content">
37+
38+
<com.google.android.material.button.MaterialButton
39+
android:id="@+id/backButton"
40+
style="@style/IconButton"
41+
android:layout_width="50dp"
42+
android:layout_height="50dp"
43+
android:layout_marginStart="@dimen/marginStandardMedium"
44+
android:layout_marginTop="@dimen/marginStandardMedium"
45+
android:contentDescription="@string/buttonBack"
46+
app:backgroundTint="@color/previewBackgroundTransparent"
47+
app:icon="@drawable/ic_chevron_left"
48+
app:iconSize="20dp"
49+
app:iconTint="@android:color/white"
50+
app:layout_constraintEnd_toStartOf="@+id/pdfName"
51+
app:layout_constraintHorizontal_bias="0.0"
52+
app:layout_constraintHorizontal_chainStyle="spread_inside"
53+
app:layout_constraintStart_toStartOf="parent"
54+
app:layout_constraintTop_toTopOf="parent" />
55+
56+
<com.google.android.material.textview.MaterialTextView
57+
android:id="@+id/pdfName"
58+
android:layout_width="wrap_content"
59+
android:layout_height="wrap_content"
60+
android:layout_marginTop="@dimen/marginStandardMedium"
61+
android:background="@drawable/rounded_background"
62+
android:clickable="false"
63+
android:ellipsize="end"
64+
android:gravity="center"
65+
android:maxWidth="200dp"
66+
android:maxLines="1"
67+
android:paddingHorizontal="@dimen/marginStandardMedium"
68+
android:paddingVertical="@dimen/marginStandardVerySmall"
69+
android:textColor="@color/white"
70+
app:layout_constraintBottom_toBottomOf="parent"
71+
app:layout_constraintEnd_toStartOf="@id/saveToKDrive"
72+
app:layout_constraintStart_toEndOf="@id/backButton"
73+
app:layout_constraintTop_toTopOf="parent"
74+
tools:text="file_name.pdf" />
75+
76+
<com.google.android.material.button.MaterialButton
77+
android:id="@+id/saveToKDrive"
78+
style="@style/IconButton"
79+
android:layout_width="50dp"
80+
android:layout_height="50dp"
81+
android:layout_marginTop="@dimen/marginStandardMedium"
82+
android:layout_marginEnd="@dimen/marginStandardMedium"
83+
android:contentDescription="@string/openWith"
84+
app:backgroundTint="@color/previewBackgroundTransparent"
85+
app:icon="@drawable/ic_drive"
86+
app:iconSize="20dp"
87+
app:iconTint="@android:color/white"
88+
app:layout_constraintEnd_toEndOf="parent"
89+
app:layout_constraintStart_toEndOf="@+id/pdfName"
90+
app:layout_constraintTop_toTopOf="parent" />
91+
92+
</androidx.constraintlayout.widget.ConstraintLayout>
93+
94+
</androidx.coordinatorlayout.widget.CoordinatorLayout>

0 commit comments

Comments
 (0)