diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index bb19250c..54626a7e 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -318,8 +318,8 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e406333c..71d975c1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,8 @@ android:allowBackup="false" android:debuggable="false" android:icon="@mipmap/ic_launcher" + android:requestLegacyExternalStorage="true" + android:hardwareAccelerated="true" android:label="@string/app_name" android:largeHeap="true" android:networkSecurityConfig="@xml/network_security_config" @@ -288,6 +290,11 @@ android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar" android:windowSoftInputMode="stateAlwaysHidden" /> + $walletNumber$bankName") } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) -// if (requestCode == APP_UPDATE_REQUEST && resultCode == RESULT_OK) { -// this.viewModel!!.storeAppUpdateDecision( -// data!!.getBooleanExtra( -// AppUpdateActivity.APP_UPDATE_NOT_NOW_TEMPORARY, -// false -// ) -// ) -// } - if (requestCode == 101 && resultCode == RESULT_OK) { - binding.vpDashboard.currentItem = 0 - } - } - override fun onDestroy() { super.onDestroy() viewModel!!.onViewDestroyed() @@ -763,4 +747,8 @@ class HomeActivityV3 : BaseActivity(), HomeParentViewContractV2, true } else false } + + private fun isNotificaitonViewActive(): Boolean { + return isNotificaitonViewActive && notificationViewBoundry != null + } } \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt b/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt index 94ec76e0..22277c13 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/homeV3/view/HomeFragmentV3.kt @@ -6,23 +6,25 @@ import android.content.Context import android.content.Intent import android.graphics.Rect import android.os.Bundle +import android.os.Handler import android.text.Editable import android.view.* import android.view.GestureDetector.SimpleOnGestureListener +import android.view.ViewTreeObserver.OnGlobalLayoutListener import android.view.animation.AccelerateDecelerateInterpolator import android.view.animation.Interpolator import android.view.inputmethod.EditorInfo -import android.widget.EditText -import android.widget.ImageView -import android.widget.RelativeLayout -import android.widget.TextView +import android.widget.* import android.widget.TextView.OnEditorActionListener -import android.widget.Toast import androidx.core.view.GestureDetectorCompat import androidx.core.view.ViewCompat import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.PagerSnapHelper +import androidx.transition.AutoTransition +import androidx.transition.Transition +import androidx.transition.TransitionListenerAdapter +import androidx.transition.TransitionManager import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import com.remit.jmecustomer.R @@ -40,9 +42,12 @@ import com.remit.jmecustomer.features.exrate.model.datav2.PaymentMode import com.remit.jmecustomer.features.exrate.presenter.ExchangeRatePresenter import com.remit.jmecustomer.features.exrate.presenter.ExchangeRatePresenterInterface import com.remit.jmecustomer.features.exrate.presenter.ExchangeRatePresenterInterface.ExchangeRateContractInterfacee +import com.remit.jmecustomer.features.home.HomeParentViewContractV2 import com.remit.jmecustomer.features.home.model.BannerImage +import com.remit.jmecustomer.features.home.model.HomeNotificationViewDTO import com.remit.jmecustomer.features.home.model.HomeViewRelatedDTOV2 import com.remit.jmecustomer.features.home.presenter.HomeViewModel +import com.remit.jmecustomer.features.home.view.notifications.* import com.remit.jmecustomer.features.homeV3.adpaters.BannerViewAdapter import com.remit.jmecustomer.features.homeV3.adpaters.SendTypeAdapter import com.remit.jmecustomer.features.myTransfers.view.MyTransfersFragment @@ -124,6 +129,9 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, viewLifecycleOwner ) { homeViewRelatedDTOV2: HomeViewRelatedDTOV2 -> setBannerData(homeViewRelatedDTOV2.bannerImages) + if (homeViewRelatedDTOV2.homeNotificationViewDTO != null) { + showNotificationView(homeViewRelatedDTOV2.homeNotificationViewDTO) + } homeViewModel?.showChangedNotification(homeViewRelatedDTOV2.notificationCount) } } @@ -195,6 +203,26 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, ) ) else showPopUpMessage(unverifiedMessage, CustomAlertDialog.AlertType.ALERT, null) } + R.id.notificationViewContainer -> { + handleNotificationOnClick() + } + } + } + + private fun handleNotificationOnClick() { + val notificationView: View = binding.notificationViewContainer.getChildAt(0) + if (notificationView == null) return else if (notificationView is KYCNotSubmittedNotificationView || notificationView is TermsNotAcceptedNotificationView) { + homeViewModel!!.showKYCScreen(notificationView is KYCNotSubmittedNotificationView) + } else if (notificationView is KYCNotVerifiedNotificationView) { +// homeViewModel.showKYCScreen(); + } else if (notificationView is ChangePinNotificationView || notificationView is ChangePinView) { + homeViewModel!!.showChangePinScreen() + } else if (notificationView is ChangePinNPassNotificationView) { + homeViewModel!!.showChangePinNPassScreen() + } else if (notificationView is ChangePassNotificationView) { + homeViewModel!!.showChangePassScreen() + } else if (notificationView is EmailNotVerifiedView) { + homeViewModel!!.requestForOtp() } } @@ -207,7 +235,9 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, val homeActivityV3: HomeActivityV3 = requireActivity() as HomeActivityV3 val transfersFragment = requireActivity().supportFragmentManager.findFragmentByTag("android:switcher:" + homeActivityV3.binding.vpDashboard.id + ":" + 1) as MyTransfersFragment - transfersFragment.performDefaultAction(countryPaymentService.countryId) + if (homeViewModel?.checkIfUserVerified() == null) { + transfersFragment.performDefaultAction(countryPaymentService.countryId) + } }) if (!countryListingDialog!!.isAdded) countryListingDialog?.show( requireActivity().supportFragmentManager, @@ -445,4 +475,74 @@ class HomeFragmentV3 : BaseFragment(), View.OnClickListener, } }, 500, 3500) } + + private fun showNotificationView(notificationViewDTO: HomeNotificationViewDTO) { + Handler().postDelayed({ + val notificationView = + HomeNotificiationViewFactory.getNotificationView( + notificationViewDTO, + binding.notificationViewContainer.getContext() + ) + if (notificationView != null) { + val autoTransition = + AutoTransition() + if (notificationViewDTO.isFocused) { + val notificationViewHeight = IntArray(1) + notificationView.viewTreeObserver + .addOnGlobalLayoutListener(object : OnGlobalLayoutListener { + override fun onGlobalLayout() { + notificationViewHeight[0] = notificationView.height + notificationView.viewTreeObserver + .removeOnGlobalLayoutListener(this) + } + }) + binding.scrollViewHomeFragment.setEnableScrolling(false) + autoTransition.addListener(object : + TransitionListenerAdapter() { + override fun onTransitionEnd(transition: Transition) { + super.onTransitionEnd(transition) + val notificationViewContainerPos = IntArray(2) + binding.notificationViewContainer.getLocationInWindow( + notificationViewContainerPos + ) + val notificationViewContainerBoundry = + Rect( + 0, + notificationViewContainerPos[0], + binding.notificationViewContainer.getWidth(), + notificationViewContainerPos[1] + notificationViewHeight[0] + ) + if (activity != null && notificationViewHeight[0] != 0) (activity as HomeParentViewContractV2?)!!.dimOutMenu( + notificationViewContainerBoundry, + true + ) + } + } + ) + } else { + binding.scrollViewHomeFragment.setEnableScrolling(true) + if (activity != null) (activity as HomeParentViewContractV2?)!!.dimOutMenu( + null, + false + ) + } + TransitionManager.beginDelayedTransition( + binding.homeContainerView, + autoTransition + ) + notificationView.addNotificationTo(binding.notificationViewContainer) + binding.notificationViewContainer.setVisibility(View.VISIBLE) + binding.notificationViewContainer.setOnClickListener(this) + } else { + TransitionManager.beginDelayedTransition(binding.homeContainerView) + binding.notificationViewContainer.setVisibility(View.GONE) + binding.notificationViewContainer.removeAllViews() + binding.notificationViewContainer.setOnClickListener(null) + if (activity != null) (activity as HomeParentViewContractV2?)!!.dimOutMenu( + null, + false + ) + } + }, 500) + } } \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAllAdapter.kt b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAllAdapter.kt new file mode 100644 index 00000000..d679db04 --- /dev/null +++ b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/adapters/MyBeneficiariesAllAdapter.kt @@ -0,0 +1,88 @@ +import android.content.Context +import android.content.Intent +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.remit.jmecustomer.databinding.RowAllBeneficiaryBinding +import com.remit.jmecustomer.databinding.RowFragmentBeneficiariesBinding +import com.remit.jmecustomer.features.beneficiaryDetail.BeneficiaryDetailActivity +import com.remit.jmecustomer.features.homeV3.view.HomeActivityV3 +import com.remit.jmecustomer.features.recipientmanagement.adapter.RecipientListingV3RvAdapter +import com.remit.jmecustomer.features.recipientmanagement.model.recipientModelV5.Receiver +import com.remit.jmecustomer.features.recipientmanagement.model.recipientlistingV3.ReceiverInfoV3Model +import com.remit.jmecustomer.features.sendmoney.model.SendMoneyRequiredDataV3 + +class MyBeneficiariesAllAdapter( + private var data: MutableList, + private val listener: RecipientSelectionListener? = null +) : + RecyclerView.Adapter() { + var mContext: Context? = null + + init { + + } + + class ViewHolder(private val binding: RowAllBeneficiaryBinding) : + RecyclerView.ViewHolder(binding.root) { + val bindings: RowAllBeneficiaryBinding = binding + fun bind(item: String) { + + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = RowAllBeneficiaryBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + mContext = parent.context; + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = data[position] + holder.bindings.rvInitials.setOnClickListener { + + } + holder.bindings.constMain.setOnClickListener { + listener?.onRecipientSelected(item) + } + holder.bindings.rvInitials.setOnClickListener { + listener?.onRecipientSelected(item) + } + holder.bindings.tvName.text = item.fullName + holder.bindings.tvInitial.text = getInitials(item.fullName) +// holder.bind(item) + } + + override fun getItemCount(): Int { + return data.size + } + + fun setData(recievedData: MutableList?) { + if (recievedData != null && recievedData.size > 0) this.data = + recievedData else this.data.clear() + notifyDataSetChanged() + } + + fun getInitials(fullName: String): String { + val names = fullName.split(" ") // Split the full name into separate names + var initials = "" + if (names.size >= 1) { + initials += names[0][0].toUpperCase() // Add the first character of the first name to the initials string + } + if (names.size >= 2) { + initials += names[names.size - 1][0].toUpperCase() // Add the first character of the last name to the initials string + } + return initials + } + + interface RecipientSelectionListener { + fun onRecipientSelected(recipientInfoModel: Receiver) + fun proceedToDeleteRecipient(receiverInfoV3Model: Receiver) + fun proceedToEditRecipient(receiverInfoV3Model: Receiver) + fun onAllRecipientDeleted() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyBeneficiaryAllActivity.kt b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyBeneficiaryAllActivity.kt new file mode 100644 index 00000000..e696f3eb --- /dev/null +++ b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyBeneficiaryAllActivity.kt @@ -0,0 +1,59 @@ +package com.remit.jmecustomer.features.myTransfers.view + +import MyBeneficiariesAllAdapter +import android.content.Intent +import android.os.Bundle +import android.os.PersistableBundle +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import com.remit.jmecustomer.base.BaseActivity +import com.remit.jmecustomer.databinding.FragmentBeneficiaryAllBinding +import com.remit.jmecustomer.features.beneficiaryDetail.BeneficiaryDetailActivity +import com.remit.jmecustomer.features.recipientmanagement.model.recipientModelV5.Receiver + +class MyBeneficiaryAllActivity : BaseActivity(), + MyBeneficiariesAllAdapter.RecipientSelectionListener { + private lateinit var binding: FragmentBeneficiaryAllBinding + private var adapter: MyBeneficiariesAllAdapter? = null + private var mainList: ArrayList? = ArrayList() + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = FragmentBeneficiaryAllBinding.inflate(layoutInflater) + val view: View = binding.root + setContentView(view) + binding.toolbar.toolbarTitle.text = "All Recepients" + binding.toolbar.ivBack.setOnClickListener { + super.onBackPressed() + } + init() + } + + fun init() { + mainList = intent?.getParcelableArrayListExtra("receiver") + var data: ArrayList = ArrayList() + adapter = MyBeneficiariesAllAdapter(data, this) + val layoutManagerVertical = LinearLayoutManager(this) + binding.recipientListRv.layoutManager = layoutManagerVertical + binding.recipientListRv.adapter = adapter + adapter?.setData(mainList) + + + } + + override fun onRecipientSelected(recipientInfoModel: Receiver) { + val intent = Intent(this, BeneficiaryDetailActivity::class.java) + intent.putExtra("receiverInfoModel", recipientInfoModel) + startActivity(intent) + } + + override fun proceedToDeleteRecipient(receiverInfoV3Model: Receiver) { + } + + override fun proceedToEditRecipient(receiverInfoV3Model: Receiver) { + } + + override fun onAllRecipientDeleted() { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt index 1b27bb12..198fd843 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/myTransfers/view/MyTransfersFragment.kt @@ -3,6 +3,7 @@ package com.remit.jmecustomer.features.myTransfers.view import MyBeneficiariesAdapter import android.content.Intent import android.os.Bundle +import android.os.Parcelable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -18,6 +19,7 @@ import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog.GenericDialogPromptListener import com.remit.jmecustomer.databinding.FragmentMyTransfersBinding import com.remit.jmecustomer.features.beneficiaryDetail.BeneficiaryDetailActivity +import com.remit.jmecustomer.features.home.presenter.HomeViewModel import com.remit.jmecustomer.features.myTransfers.adapters.RecentTransactionsAdapter import com.remit.jmecustomer.features.recipientmanagement.gateway.recipientlistingV3.RecipientListingV3Gateway import com.remit.jmecustomer.features.recipientmanagement.model.recipientModelV5.Receiver @@ -55,6 +57,7 @@ class MyTransfersFragment : BaseFragment(), private var data: MutableList? = null private var presenterTransaction: TransactionHistoryV2Presenter? = null private var genericEditTextPromptDialog: GenericEditTextPromptDialog? = null + private var homeViewModel: HomeViewModel? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -62,7 +65,9 @@ class MyTransfersFragment : BaseFragment(), ): View? { _binding = FragmentMyTransfersBinding.inflate(inflater, container, false) init() - performDefaultAction("151") + if (homeViewModel?.checkIfUserVerified() == null) { + performDefaultAction("151") + } setUpData() return binding.root } @@ -97,6 +102,7 @@ class MyTransfersFragment : BaseFragment(), } private fun init() { + homeViewModel = ViewModelProvider(requireActivity()).get(HomeViewModel::class.java) noTransactionFoundTextView = binding.noTransactionFoundTextView presenter = RecipientListingV3Presenter(this, RecipientListingV3Gateway()) searchEditTextTextWatcher = SearchEditTextTextWatcher() @@ -126,7 +132,7 @@ class MyTransfersFragment : BaseFragment(), adapter?.setData(recipientInfoModelList) recentAdapter?.setData(recentTransactionList) recentAdapter?.setTransactionClickListener(object : - RecentTransactionsAdapter.OutboundTransactionItemClickListener{ + RecentTransactionsAdapter.OutboundTransactionItemClickListener { override fun navigateToChangeTransactionScreen(itemModel: RecentTransaction) { val startReceiptActivity = Intent( activity, @@ -176,6 +182,12 @@ class MyTransfersFragment : BaseFragment(), } }) + + binding.tvSeeAll.setOnClickListener{ + val intent = Intent(requireActivity(), MyBeneficiaryAllActivity::class.java) + intent.putParcelableArrayListExtra("receiver", recipientInfoModelList as ArrayList) + startActivity(intent) + } } override fun onRecipientDeletedSuccessfully(recipientToBeDeleted: String?) {} diff --git a/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt b/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt index 03445e36..5360f70d 100644 --- a/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt +++ b/app/src/main/java/com/remit/jmecustomer/features/userprofile/view/ProfileFragment.kt @@ -23,22 +23,27 @@ import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.signature.ObjectKey -import com.remit.jmecustomer.BuildConfig import com.remit.jmecustomer.R +import com.remit.jmecustomer.RemitApplication import com.remit.jmecustomer.base.BaseFragment +import com.remit.jmecustomer.base.PrefKeys import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialog.GenericDialogPromptListener import com.remit.jmecustomer.common.customwidgets.common.GenericPromptDialogSingleButton import com.remit.jmecustomer.databinding.FragmentProfileBinding import com.remit.jmecustomer.features.aboutscreen.view.AboutJMERemit +import com.remit.jmecustomer.features.changepassNPin.view.ChangePassNPinActivity import com.remit.jmecustomer.features.changetxnpin.view.ChangeTxnPinActivity import com.remit.jmecustomer.features.customersupport.view.CustomerSupportFragment import com.remit.jmecustomer.features.depositinfo.view.DepositInfo +import com.remit.jmecustomer.features.depositslip.view.DepositSlipActivity import com.remit.jmecustomer.features.home.model.HomeViewRelatedDTOV2 import com.remit.jmecustomer.features.home.presenter.HomeViewModel import com.remit.jmecustomer.features.homeV3.view.HomeActivityV3 import com.remit.jmecustomer.features.loyaltypoints.view.LoyaltyPointsActivity import com.remit.jmecustomer.features.mynotifications.view.MyNotificationActivity +import com.remit.jmecustomer.features.renewId.view.RenewIdActivity +import com.remit.jmecustomer.features.rewards.view.RewardActivity import com.remit.jmecustomer.features.security.RemitAuthManager import com.remit.jmecustomer.features.security.RemitAuthManager1 import com.remit.jmecustomer.features.security.RemitAuthManagerGateway @@ -52,7 +57,6 @@ import com.remit.jmecustomer.features.settings.view.LanguageSelectionListingDial import com.remit.jmecustomer.features.settings.view.SettingsView import com.remit.jmecustomer.features.splashscreen.model.LanguageModel import com.remit.jmecustomer.features.userprofile.UserProfileViewModelFactory -import com.remit.jmecustomer.features.userprofile.model.UploadProfileResponse import com.remit.jmecustomer.features.userprofile.model.UserProfile import com.remit.jmecustomer.features.userprofile.presenter.UserProfilePresenterInterface import com.remit.jmecustomer.features.userprofile.presenter.UserProfilePresenterV2 @@ -61,10 +65,9 @@ import com.remit.jmecustomer.utils.Constants import com.remit.jmecustomer.utils.FileUtils import com.remit.jmecustomer.utils.Utils import com.remit.jmecustomer.utils.other.Utility +import id.zelory.compressor.Compressor import io.reactivex.disposables.Disposable -import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody -import okhttp3.RequestBody import java.io.* class ProfileFragment : BaseFragment(), View.OnClickListener, @@ -72,7 +75,7 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, CompoundButton.OnCheckedChangeListener { private var TAG: String? = "TAG" var selectedImagePath: String = "" - var imgReport1: String? = "" + var imgReport1: String = "" private var isFromGallery = false private var mCapturedImageURI: Uri? = null private val RequestPermissionCode = 9686 @@ -110,6 +113,9 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, viewModel = ViewModelProvider(this, UserProfileViewModelFactory(this)).get( UserProfilePresenterV2::class.java ) + binding.tvRewardPoint.setText( + RemitApplication.getStorage().getString(PrefKeys.REWARD_POINTS, "") + ) homeViewModel = ViewModelProvider(requireActivity()).get(HomeViewModel::class.java) binding.llPaymentLayout.setOnClickListener(this) binding.llAboutUsLayout.setOnClickListener(this) @@ -119,6 +125,10 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, binding.llLanguage.setOnClickListener(this) binding.llContactUsLayout.setOnClickListener(this) binding.ivProfileImage.setOnClickListener(this) + binding.llChangePassword.setOnClickListener(this) + binding.llReferEarn.setOnClickListener(this) + binding.llLoyaltyPoints.setOnClickListener(this) + binding.llRenewId.setOnClickListener(this) viewModel!!.subscribeToUserProfileInfoFetchEvent().observe( this ) { body: UserProfile? -> @@ -230,6 +240,22 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, R.id.iv_profile_image -> takeUserImageData() + + R.id.ll_change_password -> { + startActivity(Intent(requireActivity(), ChangePassNPinActivity::class.java)) + } + + R.id.ll_refer_earn -> { + startActivity(Intent(requireActivity(), RewardActivity::class.java)) + } + + R.id.ll_loyalty_points -> { + startActivity(Intent(requireActivity(), LoyaltyPointsActivity::class.java)) + } + + R.id.ll_renew_id -> { + startActivity(Intent(requireActivity(), RenewIdActivity::class.java)) + } } } @@ -684,7 +710,9 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, out.flush() return filename } catch (e: FileNotFoundException) { + e.printStackTrace() } catch (e: IOException) { + e.printStackTrace() } } else { // Change according to user requirement @@ -717,6 +745,7 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, Bitmap.createBitmap(actualWidth, actualHeight, Bitmap.Config.ARGB_8888) } catch (exception: OutOfMemoryError) { //IMEPayLogger.Log(exception); + exception.fillInStackTrace() } val ratioX = actualWidth / options.outWidth.toFloat() val ratioY = actualHeight / options.outHeight.toFloat() @@ -759,14 +788,14 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, ) } catch (e: IOException) { // IMEPayLogger.Log(e) + e.printStackTrace() } val out: FileOutputStream val filename = getFilename() try { - imgReport1 = filename out = FileOutputStream(filename) // write the compressed bitmap at the destination specified by filename. - scaledBitmap!!.compress(Bitmap.CompressFormat.JPEG, 80, out) + scaledBitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, out) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { val file = File(filename) Utils.savebitmap(context, scaledBitmap, file.name) @@ -775,6 +804,7 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, Log.d(TAG, "TEST:") } Log.d(TAG, "compressImageFileName: $filename") + imgReport1 = filename return filename } return "" @@ -812,12 +842,12 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, * @return */ fun getFilename(): String { - val targetImageFile: String = Utils.targetFilePath(context, "/IMEpay/profile/") + val targetImageFile: String = Utils.targetFilePath(context, "/JME/profile/") val file = File(targetImageFile) if (!file.exists()) { file.mkdirs() } - return file.absolutePath + "/" + System.currentTimeMillis() + ".jpg" + return file.absolutePath + "/" + System.currentTimeMillis() + "" } var options = RequestOptions() @@ -830,13 +860,21 @@ class ProfileFragment : BaseFragment(), View.OnClickListener, .into(binding.ivProfileImage) } - private fun getRequestParamsProfileImage(): MultipartBody.Part? { + private fun getRequestParamsProfileImage(): MultipartBody.Part { val profileImageFile = File(imgReport1) - val profileImageRequest: RequestBody = - RequestBody.create("image*//*".toMediaTypeOrNull(), profileImageFile) - return MultipartBody.Part.createFormData( - "CustomerProfile", profileImageFile.name, - profileImageRequest - ) + return Utils.createImageUploadFieldFromFile("CustomerProfile", profileImageFile) + } + + private fun createCompressedImageFileFromUri(data: Uri): File? { + var compressedBitmap: File? = null + try { + compressedBitmap = Compressor(requireContext()) + .setCompressFormat(Bitmap.CompressFormat.JPEG) + .setQuality(DepositSlipActivity.COMPRESS_QUALITY) + .compressToFile(File(data.path)) + } catch (e: Exception) { + e.printStackTrace() + } + return compressedBitmap } } \ No newline at end of file diff --git a/app/src/main/java/com/remit/jmecustomer/utils/Utils.java b/app/src/main/java/com/remit/jmecustomer/utils/Utils.java index c5fbae0d..8e71cf70 100644 --- a/app/src/main/java/com/remit/jmecustomer/utils/Utils.java +++ b/app/src/main/java/com/remit/jmecustomer/utils/Utils.java @@ -60,6 +60,7 @@ import static com.remit.jmecustomer.utils.Constants.OTHER_ERROR; import static com.remit.jmecustomer.utils.Constants.SERVER_ERROR; import okhttp3.MediaType; +import okhttp3.MultipartBody; import okhttp3.RequestBody; /** @@ -665,4 +666,13 @@ public class Utils { return body; } + public static MultipartBody.Part createImageUploadFieldFromFile(String key, File file) { + + if (file == null) + return null; + Log.d("file is ", "createImageUploadFieldFromFile: "+file); + RequestBody idImageRequest = RequestBody.create(MediaType.parse("image*//*"), file); + return MultipartBody.Part.createFormData(key, file.getName() + ".jpeg", idImageRequest); + } + } diff --git a/app/src/main/java/com/remit/jmecustomer/utils/https/ApiEndpoints.java b/app/src/main/java/com/remit/jmecustomer/utils/https/ApiEndpoints.java index 5e6a7a4a..d33c4f2d 100644 --- a/app/src/main/java/com/remit/jmecustomer/utils/https/ApiEndpoints.java +++ b/app/src/main/java/com/remit/jmecustomer/utils/https/ApiEndpoints.java @@ -383,7 +383,6 @@ public interface ApiEndpoints { @Multipart @POST(API_URL.UPLOAD_PROFILE_IMAGE) - @Headers("Content-Type: application/json") Observable uploadProfileImage(@Header("Authorization") String token, @Path("customer") String customerId, @PartMap() Map partMap, diff --git a/app/src/main/res/drawable-hdpi/icon_location.png b/app/src/main/res/drawable-hdpi/icon_location.png new file mode 100644 index 00000000..a4919732 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_location.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_male_user.png b/app/src/main/res/drawable-hdpi/icon_male_user.png new file mode 100644 index 00000000..317f3530 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_male_user.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_people.png b/app/src/main/res/drawable-hdpi/icon_people.png new file mode 100644 index 00000000..0620346b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_people.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_phone.png b/app/src/main/res/drawable-hdpi/icon_phone.png new file mode 100644 index 00000000..398fa4ac Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_phone.png differ diff --git a/app/src/main/res/drawable-ldpi/icon_location.png b/app/src/main/res/drawable-ldpi/icon_location.png new file mode 100644 index 00000000..27f519fa Binary files /dev/null and b/app/src/main/res/drawable-ldpi/icon_location.png differ diff --git a/app/src/main/res/drawable-ldpi/icon_male_user.png b/app/src/main/res/drawable-ldpi/icon_male_user.png new file mode 100644 index 00000000..04ba0bb0 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/icon_male_user.png differ diff --git a/app/src/main/res/drawable-ldpi/icon_people.png b/app/src/main/res/drawable-ldpi/icon_people.png new file mode 100644 index 00000000..3c306c33 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/icon_people.png differ diff --git a/app/src/main/res/drawable-ldpi/icon_phone.png b/app/src/main/res/drawable-ldpi/icon_phone.png new file mode 100644 index 00000000..0b0be263 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/icon_phone.png differ diff --git a/app/src/main/res/drawable-mdpi/icon_location.png b/app/src/main/res/drawable-mdpi/icon_location.png new file mode 100644 index 00000000..12b871e0 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_location.png differ diff --git a/app/src/main/res/drawable-mdpi/icon_male_user.png b/app/src/main/res/drawable-mdpi/icon_male_user.png new file mode 100644 index 00000000..6984c59a Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_male_user.png differ diff --git a/app/src/main/res/drawable-mdpi/icon_people.png b/app/src/main/res/drawable-mdpi/icon_people.png new file mode 100644 index 00000000..bd263051 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_people.png differ diff --git a/app/src/main/res/drawable-mdpi/icon_phone.png b/app/src/main/res/drawable-mdpi/icon_phone.png new file mode 100644 index 00000000..d6b60b91 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon_phone.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_location.png b/app/src/main/res/drawable-xhdpi/icon_location.png new file mode 100644 index 00000000..f1fbe1d0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_location.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_male_user.png b/app/src/main/res/drawable-xhdpi/icon_male_user.png new file mode 100644 index 00000000..cc9c50fb Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_male_user.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_people.png b/app/src/main/res/drawable-xhdpi/icon_people.png new file mode 100644 index 00000000..b50f74fd Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_people.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_phone.png b/app/src/main/res/drawable-xhdpi/icon_phone.png new file mode 100644 index 00000000..f88274b0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_phone.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_location.png b/app/src/main/res/drawable-xxhdpi/icon_location.png new file mode 100644 index 00000000..cb3d4e1e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_location.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_male_user.png b/app/src/main/res/drawable-xxhdpi/icon_male_user.png new file mode 100644 index 00000000..2bdbb5e3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_male_user.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_people.png b/app/src/main/res/drawable-xxhdpi/icon_people.png new file mode 100644 index 00000000..23be81e8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_people.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_phone.png b/app/src/main/res/drawable-xxhdpi/icon_phone.png new file mode 100644 index 00000000..68d94a91 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_phone.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_location.png b/app/src/main/res/drawable-xxxhdpi/icon_location.png new file mode 100644 index 00000000..db8dfaed Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_location.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_male_user.png b/app/src/main/res/drawable-xxxhdpi/icon_male_user.png new file mode 100644 index 00000000..946d4fd9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_male_user.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_people.png b/app/src/main/res/drawable-xxxhdpi/icon_people.png new file mode 100644 index 00000000..267dd41a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_people.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_phone.png b/app/src/main/res/drawable-xxxhdpi/icon_phone.png new file mode 100644 index 00000000..04f42b1a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_phone.png differ diff --git a/app/src/main/res/drawable/account.png b/app/src/main/res/drawable/account.png deleted file mode 100644 index 7fb28e9f..00000000 Binary files a/app/src/main/res/drawable/account.png and /dev/null differ diff --git a/app/src/main/res/drawable/account.xml b/app/src/main/res/drawable/account.xml new file mode 100644 index 00000000..b976353d --- /dev/null +++ b/app/src/main/res/drawable/account.xml @@ -0,0 +1,29 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/change__password.xml b/app/src/main/res/drawable/change__password.xml new file mode 100644 index 00000000..ff8ae552 --- /dev/null +++ b/app/src/main/res/drawable/change__password.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/app/src/main/res/drawable/change_pin.xml b/app/src/main/res/drawable/change_pin.xml new file mode 100644 index 00000000..99463a15 --- /dev/null +++ b/app/src/main/res/drawable/change_pin.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/contact_us.xml b/app/src/main/res/drawable/contact_us.xml new file mode 100644 index 00000000..cf60f2f2 --- /dev/null +++ b/app/src/main/res/drawable/contact_us.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/src/main/res/drawable/refer_earn.xml b/app/src/main/res/drawable/refer_earn.xml new file mode 100644 index 00000000..127e4a52 --- /dev/null +++ b/app/src/main/res/drawable/refer_earn.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/drawable/reward_points.xml b/app/src/main/res/drawable/reward_points.xml new file mode 100644 index 00000000..4b958dc1 --- /dev/null +++ b/app/src/main/res/drawable/reward_points.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/layout/activity_beneficiary_detail.xml b/app/src/main/res/layout/activity_beneficiary_detail.xml index fe478b93..d22acbd7 100644 --- a/app/src/main/res/layout/activity_beneficiary_detail.xml +++ b/app/src/main/res/layout/activity_beneficiary_detail.xml @@ -71,10 +71,10 @@ android:layout_height="@dimen/_20sdp" android:layout_marginStart="@dimen/_11sdp" android:layout_marginTop="@dimen/_16sdp" - android:src="@drawable/ico_user" + android:src="@drawable/icon_male_user" app:layout_constraintStart_toEndOf="@id/rv_initials" app:layout_constraintTop_toBottomOf="@+id/toolbar" - app:tint="@color/light_blue" /> + /> + app:layout_constraintTop_toBottomOf="@id/tv_name" /> + app:layout_constraintTop_toBottomOf="@id/tv_mobile" /> + app:layout_constraintTop_toBottomOf="@id/tv_relation" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home_new.xml b/app/src/main/res/layout/fragment_home_new.xml index b532580a..62e27f28 100644 --- a/app/src/main/res/layout/fragment_home_new.xml +++ b/app/src/main/res/layout/fragment_home_new.xml @@ -1,15 +1,28 @@ - + + + app:layout_constraintTop_toBottomOf="@id/notificationViewContainer"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_my_transfers.xml b/app/src/main/res/layout/fragment_my_transfers.xml index c9193754..7621f992 100644 --- a/app/src/main/res/layout/fragment_my_transfers.xml +++ b/app/src/main/res/layout/fragment_my_transfers.xml @@ -17,6 +17,8 @@ android:layout_marginTop="@dimen/_10sdp" android:layout_marginEnd="@dimen/_10sdp" android:textColor="@color/light_blue" + android:inputType="text" + android:imeOptions="actionDone" android:background="@drawable/blue_border_background" android:hint="Search your transfers" android:padding="@dimen/_10sdp" @@ -90,14 +92,11 @@ android:layout_height="@dimen/_45sdp"> + android:layout_centerInParent="true" + android:src="@drawable/ic_add_new" + android:textSize="@dimen/_24sdp" /> diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml index 58d0f909..050bb8db 100644 --- a/app/src/main/res/layout/fragment_profile.xml +++ b/app/src/main/res/layout/fragment_profile.xml @@ -1,7 +1,8 @@ - @@ -174,7 +175,7 @@ android:layout_width="@dimen/_20sdp" android:layout_height="@dimen/_20sdp" app:srcCompat="@drawable/account" - app:tint="@color/light_blue" /> + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ @@ -335,7 +505,7 @@ android:id="@+id/ic_change_pin" android:layout_width="@dimen/_20sdp" android:layout_height="@dimen/_20sdp" - app:srcCompat="@drawable/round_person_24px" /> + app:srcCompat="@drawable/change_pin" /> + + + + + + + + + + + + android:visibility="gone"> + app:srcCompat="@drawable/contact_us" /> - + diff --git a/app/src/main/res/layout/row_all_beneficiary.xml b/app/src/main/res/layout/row_all_beneficiary.xml new file mode 100644 index 00000000..9e0f90b6 --- /dev/null +++ b/app/src/main/res/layout/row_all_beneficiary.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 352045e1..03269804 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -2,6 +2,8 @@ - +