diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferTest.kt
index d5dc274d7..3295d1e3e 100644
--- a/app/src/androidTest/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferTest.kt
+++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferTest.kt
@@ -147,37 +147,35 @@ class LocalFileTransferTest {
@Test
fun showCaseFeature() {
- if (Build.VERSION.SDK_INT != Build.VERSION_CODES.TIRAMISU) {
- shouldShowShowCaseFeatureToUser(true, isResetShowCaseId = true)
- activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
- moveToState(Lifecycle.State.RESUMED)
- onActivity {
- handleLocaleChange(
- it,
- "en",
- SharedPreferenceUtil(context)
- )
- it.navigate(R.id.libraryFragment)
- }
+ shouldShowShowCaseFeatureToUser(true, isResetShowCaseId = true)
+ activityScenario = ActivityScenario.launch(KiwixMainActivity::class.java).apply {
+ moveToState(Lifecycle.State.RESUMED)
+ onActivity {
+ handleLocaleChange(
+ it,
+ "en",
+ SharedPreferenceUtil(context)
+ )
+ it.navigate(R.id.libraryFragment)
}
- StandardActions.closeDrawer()
- library {
- assertGetZimNearbyDeviceDisplayed()
- clickFileTransferIcon {
- assertClickNearbyDeviceMessageVisible()
- clickOnGotItButton()
- assertDeviceNameMessageVisible()
- clickOnGotItButton()
- assertNearbyDeviceListMessageVisible()
- clickOnGotItButton()
- assertTransferZimFilesListMessageVisible()
- clickOnGotItButton()
- pressBack()
- assertGetZimNearbyDeviceDisplayed()
- }
- }
- LeakAssertions.assertNoLeaks()
}
+ StandardActions.closeDrawer()
+ library {
+ assertGetZimNearbyDeviceDisplayed()
+ clickFileTransferIcon {
+ assertClickNearbyDeviceMessageVisible()
+ clickOnGotItButton()
+ assertDeviceNameMessageVisible()
+ clickOnGotItButton()
+ assertNearbyDeviceListMessageVisible()
+ clickOnGotItButton()
+ assertTransferZimFilesListMessageVisible()
+ clickOnGotItButton()
+ pressBack()
+ assertGetZimNearbyDeviceDisplayed()
+ }
+ }
+ LeakAssertions.assertNoLeaks()
}
@Test
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt
index 00a172136..df7deb08c 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt
+++ b/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt
@@ -36,13 +36,13 @@ import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.provider.Settings
-import org.kiwix.kiwixmobile.core.utils.files.Log
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
+import android.widget.FrameLayout
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
@@ -55,11 +55,14 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import org.kiwix.kiwixmobile.R
-import org.kiwix.kiwixmobile.core.R.string
-import org.kiwix.kiwixmobile.core.R.drawable
import org.kiwix.kiwixmobile.cachedComponent
+import org.kiwix.kiwixmobile.core.R.dimen
+import org.kiwix.kiwixmobile.core.R.drawable
+import org.kiwix.kiwixmobile.core.R.string
import org.kiwix.kiwixmobile.core.base.BaseActivity
import org.kiwix.kiwixmobile.core.base.BaseFragment
+import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.isLandScapeMode
+import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.isTablet
import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.popNavigationBackstack
import org.kiwix.kiwixmobile.core.extensions.getToolbarNavigationIcon
import org.kiwix.kiwixmobile.core.extensions.setToolTipWithContentDescription
@@ -69,6 +72,7 @@ import org.kiwix.kiwixmobile.core.navigateToAppSettings
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import org.kiwix.kiwixmobile.core.utils.dialog.AlertDialogShower
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
+import org.kiwix.kiwixmobile.core.utils.files.Log
import org.kiwix.kiwixmobile.databinding.FragmentLocalFileTransferBinding
import org.kiwix.kiwixmobile.localFileTransfer.WifiDirectManager.Companion.getDeviceStatus
import org.kiwix.kiwixmobile.localFileTransfer.adapter.WifiP2pDelegate
@@ -143,11 +147,42 @@ class LocalFileTransferFragment :
wifiDirectManager.callbacks = this
wifiDirectManager.lifecycleCoroutineScope = lifecycleScope
wifiDirectManager.startWifiDirectManager(filesForTransfer)
- fragmentLocalFileTransferBinding
- ?.textViewDeviceName
- ?.setToolTipWithContentDescription(getString(string.your_device))
+ fragmentLocalFileTransferBinding?.apply {
+ textViewDeviceName.setToolTipWithContentDescription(getString(string.your_device))
+ fileTransferShowCaseView.apply {
+ val fileTransferShowViewParams = layoutParams
+ fileTransferShowViewParams.width = getShowCaseViewWidth()
+ fileTransferShowViewParams.height = getShowCaseViewHeight()
+ layoutParams = fileTransferShowViewParams
+ }
+ nearbyDeviceShowCaseView.apply {
+ val nearbyDeviceShowCaseViewParams = layoutParams
+ nearbyDeviceShowCaseViewParams.width = getShowCaseViewWidth()
+ nearbyDeviceShowCaseViewParams.height = getShowCaseViewHeight()
+ layoutParams = nearbyDeviceShowCaseViewParams
+ }
+ }
}
+ private fun getShowCaseViewWidth(): Int {
+ return when {
+ requireActivity().isTablet() -> {
+ requireActivity().resources.getDimensionPixelSize(dimen.maximum_donation_popup_width)
+ }
+
+ requireActivity().isLandScapeMode() -> {
+ requireActivity().resources.getDimensionPixelSize(
+ dimen.showcase_view_maximum_width_in_landscape_mode
+ )
+ }
+
+ else -> FrameLayout.LayoutParams.MATCH_PARENT
+ }
+ }
+
+ private fun getShowCaseViewHeight(): Int =
+ requireActivity().resources.getDimensionPixelSize(dimen.showcase_view_maximum_height)
+
private fun setupMenu() {
(requireActivity() as MenuHost).addMenuProvider(
object : MenuProvider {
@@ -193,12 +228,12 @@ class LocalFileTransferFragment :
getString(string.got_it)
)
addSequenceItem(
- fragmentLocalFileTransferBinding?.listPeerDevices,
+ fragmentLocalFileTransferBinding?.nearbyDeviceShowCaseView,
getString(string.nearby_devices_list_message),
getString(string.got_it)
)
addSequenceItem(
- fragmentLocalFileTransferBinding?.recyclerViewTransferFiles,
+ fragmentLocalFileTransferBinding?.fileTransferShowCaseView,
getString(string.transfer_zim_files_list_message),
getString(string.got_it)
)
diff --git a/app/src/main/res/layout/fragment_local_file_transfer.xml b/app/src/main/res/layout/fragment_local_file_transfer.xml
index 4c52f5e4f..c9e2618f9 100644
--- a/app/src/main/res/layout/fragment_local_file_transfer.xml
+++ b/app/src/main/res/layout/fragment_local_file_transfer.xml
@@ -35,15 +35,15 @@
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:background="@android:color/transparent"
+ android:contentDescription="@string/device_name"
+ android:gravity="start|center"
+ android:minHeight="@dimen/material_minimum_height_and_width"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:paddingBottom="5dp"
android:textIsSelectable="true"
- android:gravity="start|center"
- android:minHeight="@dimen/material_minimum_height_and_width"
android:textSize="17sp"
android:textStyle="bold"
- android:contentDescription="@string/device_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
@@ -98,6 +98,15 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view_available_device" />
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/text_view_files_for_transfer"
+ tools:listitem="@layout/item_transfer_list" />
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt
index 61faf006d..21b4bc64d 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/ActivityExtensions.kt
@@ -189,4 +189,14 @@ object ActivityExtensions {
fun Activity.isLandScapeMode(): Boolean =
resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
+
+ @Suppress("MagicNumber")
+ fun Activity.isTablet(): Boolean {
+ val configuration = resources.configuration
+ val isLargeOrXLarge =
+ configuration.screenLayout and
+ Configuration.SCREENLAYOUT_SIZE_MASK >= Configuration.SCREENLAYOUT_SIZE_LARGE
+ val isWideEnough = configuration.smallestScreenWidthDp >= 600
+ return isLargeOrXLarge && isWideEnough
+ }
}
diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml
index f570f844b..19e37eea4 100644
--- a/core/src/main/res/values/dimens.xml
+++ b/core/src/main/res/values/dimens.xml
@@ -26,4 +26,6 @@
13dp
20dp
400dp
+ 150dp
+ 10dp