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