From c7d397505e100bf3a90b8a85b669765a956e2ae2 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Tue, 19 Nov 2024 15:35:53 +0530 Subject: [PATCH 1/3] Fixed: Transfer ZIM file freezes on tablet --- .../LocalFileTransferTest.kt | 56 +++++++++---------- .../LocalFileTransferFragment.kt | 10 ++-- .../layout/fragment_local_file_transfer.xml | 28 ++++++++-- core/src/main/res/values/dimens.xml | 1 + 4 files changed, 56 insertions(+), 39 deletions(-) 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..f5cf2c60b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt @@ -36,7 +36,6 @@ 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 @@ -55,9 +54,9 @@ 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.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.popNavigationBackstack @@ -69,6 +68,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 @@ -193,12 +193,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..e5fae443a 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/res/values/dimens.xml b/core/src/main/res/values/dimens.xml index f570f844b..05f649a50 100644 --- a/core/src/main/res/values/dimens.xml +++ b/core/src/main/res/values/dimens.xml @@ -26,4 +26,5 @@ 13dp 20dp 400dp + 200dp From 2d485842aa7afb37b53c3c3e576ab6678125434f Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Tue, 19 Nov 2024 16:39:05 +0530 Subject: [PATCH 2/3] Dynamically adjusted the width of showCaseView according to device width so that it looks nice in all screen sizes --- .../LocalFileTransferFragment.kt | 42 +++++++++++++++++-- .../layout/fragment_local_file_transfer.xml | 4 +- .../core/extensions/ActivityExtensions.kt | 10 +++++ core/src/main/res/values/dimens.xml | 3 +- 4 files changed, 53 insertions(+), 6 deletions(-) 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 f5cf2c60b..fc73df4af 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt @@ -42,6 +42,7 @@ 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,16 +56,20 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import org.kiwix.kiwixmobile.R 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 import org.kiwix.kiwixmobile.core.extensions.toast import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.navigateToAppSettings +import org.kiwix.kiwixmobile.core.utils.DimenUtils.getWindowWidth import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.dialog.AlertDialogShower import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog @@ -143,11 +148,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 { 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 e5fae443a..c9e2618f9 100644 --- a/app/src/main/res/layout/fragment_local_file_transfer.xml +++ b/app/src/main/res/layout/fragment_local_file_transfer.xml @@ -100,7 +100,7 @@ = 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 05f649a50..19e37eea4 100644 --- a/core/src/main/res/values/dimens.xml +++ b/core/src/main/res/values/dimens.xml @@ -26,5 +26,6 @@ 13dp 20dp 400dp - 200dp + 150dp + 10dp From 85dfa732b4ddc098d9cd3dff439687e037ed3663 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Tue, 19 Nov 2024 16:41:59 +0530 Subject: [PATCH 3/3] Fixed the static analysis lint failure --- .../kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt | 1 - 1 file changed, 1 deletion(-) 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 fc73df4af..df7deb08c 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/localFileTransfer/LocalFileTransferFragment.kt @@ -69,7 +69,6 @@ import org.kiwix.kiwixmobile.core.extensions.setToolTipWithContentDescription import org.kiwix.kiwixmobile.core.extensions.toast import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.navigateToAppSettings -import org.kiwix.kiwixmobile.core.utils.DimenUtils.getWindowWidth import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil import org.kiwix.kiwixmobile.core.utils.dialog.AlertDialogShower import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog