diff --git a/app/build.gradle b/app/build.gradle
index 7cb9e11..53d7ad2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
+ id 'kotlin-parcelize'
}
android {
@@ -73,4 +74,7 @@ dependencies {
implementation "androidx.navigation:navigation-fragment-ktx:2.5.3"
implementation "androidx.navigation:navigation-ui-ktx:2.5.3"
+ //Preference
+ implementation 'androidx.preference:preference:1.2.0'
+
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3261d69..cfeaee6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,6 +4,7 @@
+
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt
index 4a7b331..ae0f457 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt
@@ -166,4 +166,9 @@ interface ApiInterface {
@Header("token") token: String
): Response
+ @POST("GetToken_V2")
+ suspend fun freshToken(
+ @Body requestBody: RequestBody
+ ):Response
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt b/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt
index 81ab7a2..d93fa59 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt
@@ -1,7 +1,9 @@
package com.nivesh.production.bajajfd.repositories
+import com.google.gson.JsonObject
import com.nivesh.production.bajajfd.interfaces.ApiInterface
import com.nivesh.production.bajajfd.model.*
+import okhttp3.RequestBody
class MainRepository constructor(private val apiInterface: ApiInterface) {
suspend fun getRatesResponse(getRatesRequest: GetRatesRequest, token: String) =
@@ -92,4 +94,7 @@ class MainRepository constructor(private val apiInterface: ApiInterface) {
suspend fun bankValidationApiRequest(bankValidationApiRequest: BankValidationApiRequest, token: String) =
apiInterface.bankValidationApi(bankValidationApiRequest, token)
+ suspend fun freshToken(body: RequestBody) =
+ apiInterface.freshToken(body)
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt
index 8281066..4d9fc27 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt
@@ -29,6 +29,7 @@ import com.nivesh.production.bajajfd.util.Common.Companion.getDate
import com.nivesh.production.bajajfd.util.Common.Companion.selectedShape
import com.nivesh.production.bajajfd.util.Common.Companion.showDialogValidation
import com.nivesh.production.bajajfd.util.Constants.Companion.token
+import com.nivesh.production.bajajfd.util.ProgressUtil
import com.nivesh.production.bajajfd.util.Resource
import com.nivesh.production.bajajfd.viewModel.*
@@ -87,6 +88,7 @@ class BajajFdMainActivity : BaseActivity() {
private fun getStepsCountApi() {
if (Common.isNetworkAvailable(this)) {
+ ProgressUtil.showLoading(this)
val fdStepsCount = FDStepsCountRequest()
fdStepsCount.FDProvider = getString(R.string.bajaj)
fdStepsCount.NiveshClientCode = "8872"
@@ -123,7 +125,7 @@ class BajajFdMainActivity : BaseActivity() {
}
}
is Resource.Loading -> {
-
+ ProgressUtil.hideLoading()
}
is Resource.DataError -> {
@@ -140,6 +142,7 @@ class BajajFdMainActivity : BaseActivity() {
private fun getClientDetailsApi(stepsCount: Int) {
if (Common.isNetworkAvailable(this@BajajFdMainActivity)) {
+ ProgressUtil.showLoading(this)
val getClientDetailsRequest = getClientDetailsRequest()
getClientDetailsRequest.client_code = "8872"
getClientDetailsRequest.AppOrWeb = getString(R.string.app)
@@ -194,7 +197,7 @@ class BajajFdMainActivity : BaseActivity() {
}
}
is Resource.Loading -> {
-
+ ProgressUtil.hideLoading()
}
is Resource.DataError -> {
@@ -294,6 +297,7 @@ class BajajFdMainActivity : BaseActivity() {
private fun checkFDCKYCApi() {
if (Common.isNetworkAvailable(this@BajajFdMainActivity)) {
+ ProgressUtil.showLoading(this)
if (getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CM_MOBILE?.isNotEmpty()!! && getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_DOB?.isNotEmpty()!! && getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_PAN?.isNotEmpty()!! && getClientDetailsResponse.ObjectResponse?.clientDetails?.clientMasterMFD?.CLIENT_CODE?.isNotEmpty()!!) {
val checkFDKYCRequest = CheckFDKYCRequest()
checkFDKYCRequest.Mobile =
@@ -337,7 +341,7 @@ class BajajFdMainActivity : BaseActivity() {
}
}
is Resource.Loading -> {
-
+ ProgressUtil.hideLoading()
}
is Resource.DataError -> {
@@ -426,6 +430,7 @@ class BajajFdMainActivity : BaseActivity() {
fun paymentReQueryApi() {
if (Common.isNetworkAvailable(this)) {
+ ProgressUtil.showLoading(this)
val paymentReQueryRequest = PaymentReQueryRequest()
paymentReQueryRequest.UniqueId = uniqueId
paymentReQueryRequest.NiveshClientCode =
@@ -466,7 +471,7 @@ class BajajFdMainActivity : BaseActivity() {
}
}
is Resource.Loading -> {
-
+ ProgressUtil.hideLoading()
}
is Resource.DataError -> {
@@ -475,5 +480,4 @@ class BajajFdMainActivity : BaseActivity() {
}
}
}
-
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt
index 455916a..8cdee66 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt
@@ -24,6 +24,7 @@ import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.google.gson.Gson
+import com.google.gson.JsonObject
import com.nivesh.production.bajajfd.BuildConfig
import com.nivesh.production.bajajfd.R
import com.nivesh.production.bajajfd.api.ApiClient
@@ -32,12 +33,26 @@ import com.nivesh.production.bajajfd.model.*
import com.nivesh.production.bajajfd.repositories.MainRepository
import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity
import com.nivesh.production.bajajfd.ui.providerfactory.StepThreeModelProviderFactory
-import com.nivesh.production.bajajfd.util.Common
+import com.nivesh.production.bajajfd.util.*
import com.nivesh.production.bajajfd.util.Common.Companion.getFileExtension
-import com.nivesh.production.bajajfd.util.Constants
-import com.nivesh.production.bajajfd.util.ImageUtil
-import com.nivesh.production.bajajfd.util.Resource
+import com.nivesh.production.bajajfd.util.Constants.Companion.GetFreshToken_V2_Encrypt
+import com.nivesh.production.bajajfd.util.Constants.Companion.KEY_LOGINTYPE
+import com.nivesh.production.bajajfd.util.Constants.Companion.KEY_LOGINUSER_CODE
+import com.nivesh.production.bajajfd.util.Constants.Companion.KEY_LOGIN_EMAIL
+import com.nivesh.production.bajajfd.util.Constants.Companion.KEY_LOGIN_PASSWORD
+import com.nivesh.production.bajajfd.util.Constants.Companion.KEY_LOGIN_SOCIALID
+import com.nivesh.production.bajajfd.util.SharedPrefrenceDataMethods.Companion.getLoginPassword
+import com.nivesh.production.bajajfd.util.Utility.Companion.convert_sha256
+import com.nivesh.production.bajajfd.util.Utility.Companion.convert_sha256_2X
+import com.nivesh.production.bajajfd.util.Utility.Companion.getDeviceInfo
+import com.nivesh.production.bajajfd.util.Utils_Functions.Companion.getCurrentDateStamp
import com.nivesh.production.bajajfd.viewModel.StepThreeBajajFDViewModel
+import okhttp3.MediaType
+import okhttp3.MediaType.Companion.toMediaType
+import okhttp3.MediaType.Companion.toMediaTypeOrNull
+import okhttp3.RequestBody
+import okhttp3.RequestBody.Companion.toRequestBody
+import org.json.JSONObject
import java.io.*
@@ -72,6 +87,11 @@ class StepThreeBajajFDFragment : BaseFragment() {
private val check = arrayOf("Take Photo", "Choose from Gallery", "Cancel")
+ private var strToken: String? = null
+ private var strTimeStamp: String? = null
+ private var str2Hash: String? = null
+ private var strDeviceID: String? = null
+
private val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
@@ -135,6 +155,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
}
var uploadPosition = 0
for (entry in mapImage.iterator()) {
+ ProgressUtil.showLoading(activity as BajajFdMainActivity)
uploadPosition++
uploadDocApi(entry.key, entry.value, uploadPosition)
}
@@ -403,6 +424,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
activity as BajajFdMainActivity
)
stepThreeBajajFDViewModel.getDocumentUploadMutableData.observe(viewLifecycleOwner) { response ->
+ ProgressUtil.hideLoading()
when (response) {
is Resource.Success -> {
Log.e("UploadImage", "Response-->" + response.data.toString())
@@ -421,7 +443,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
createFDApi((activity as BajajFdMainActivity).createFDRequest)
}
}
- // 650 -> refreshToken()
+ 650 -> refreshToken()
else -> {
Common.showDialogValidation(
activity as BajajFdMainActivity,
@@ -438,7 +460,7 @@ class StepThreeBajajFDFragment : BaseFragment() {
}
}
is Resource.Loading -> {
-
+ ProgressUtil.hideLoading()
}
is Resource.DataError -> {
@@ -447,6 +469,109 @@ class StepThreeBajajFDFragment : BaseFragment() {
}
}
+ private fun refreshToken() {
+ if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) {
+ var jsonObject: JSONObject? = null
+
+ try {
+ jsonObject = JSONObject()
+
+ jsonObject.put(
+ "Email_Mob",
+ SharedPrefrenceDataMethods.getLoginEmail(KEY_LOGIN_EMAIL, activity)
+ )
+
+ jsonObject.put(
+ "Uid",
+ SharedPrefrenceDataMethods.getLoginUserCode(KEY_LOGINUSER_CODE, activity)
+ )
+
+ jsonObject.put(
+ "Soc_Id",
+ SharedPrefrenceDataMethods.getLoginSOCIALID(KEY_LOGIN_SOCIALID, activity)
+ )
+
+ val ed = EncryptionDecryption()
+ val decryptString = ed.decrypt(
+ getLoginPassword(
+ KEY_LOGIN_PASSWORD,
+ activity
+ )
+ )
+ val strsha256hex_password: String? = decryptString?.let { convert_sha256(it) }
+ Log.e(
+ "Scheme",
+ "LoginEmail -> " + SharedPrefrenceDataMethods.getLoginEmail(
+ KEY_LOGIN_EMAIL,
+ activity
+ ).toString() + ", convert_sha256-> " + strsha256hex_password
+ )
+
+ strTimeStamp = getCurrentDateStamp()
+ Log.e("Scheme_strTimeStamp", "-> $strTimeStamp")
+
+ if (SharedPrefrenceDataMethods.getLogin_Type(KEY_LOGINTYPE, activity)
+ .equals("EMAIL", ignoreCase = true)
+ ) {
+ str2Hash = convert_sha256_2X(strsha256hex_password + strTimeStamp)
+ Log.e("Scheme_Convert_str2Hash", "-> $str2Hash")
+ } else {
+ str2Hash = ""
+ }
+
+ val deviceInfo: DeviceInfo = getDeviceInfo(activity as BajajFdMainActivity)
+ strDeviceID = java.lang.String.valueOf(deviceInfo.device_id)
+ Log.e("Scheme_strDeviceID", "-> $strDeviceID")
+
+ jsonObject.put("DeviceId", strDeviceID)
+
+ Log.e(
+ "FreshToken_Request",
+ "URL_API -> " + GetFreshToken_V2_Encrypt.toString() + " JsonData-> " + jsonObject.toString() + ", Header-> " + "time_stamp :" + strTimeStamp.toString() + ", Password :" + str2Hash
+ )
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+
+ val json = ""
+ val JSON : MediaType = "application/json; charset=utf-8".toMediaType()
+ val jsonBody: RequestBody = json.toRequestBody(JSON)
+
+ stepThreeBajajFDViewModel.getFreshToken(
+ jsonBody,
+ Constants.token,
+ activity as BajajFdMainActivity
+ )
+ stepThreeBajajFDViewModel.getFreshTokenMutableData.observe(viewLifecycleOwner) { response ->
+ when (response) {
+ is Resource.Success -> {
+ var jsonObject1: JsonObject = response.data!!
+ if (jsonObject1.has("Token")) {
+ strToken = jsonObject1.get("Token").toString()
+ strToken = jsonObject1.get("Token").toString()
+ Log.e("Scheme", "Token-> $strToken")
+ SharedPrefrenceDataMethods.setToken(activity, strToken)
+ }
+ }
+
+ is Resource.Error -> {
+ response.message?.let { message ->
+ Common.showDialogValidation(activity as BajajFdMainActivity, message)
+ }
+ }
+
+ is Resource.Loading -> {
+
+ }
+
+ is Resource.DataError -> {
+
+ }
+ }
+ }
+ }
+ }
+
private fun createFDApi(data: CreateFDRequest) {
stepThreeBajajFDViewModel.createFDApi(
data,
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt
index 104dd0c..bbc1c36 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt
@@ -12,6 +12,7 @@ import android.provider.ContactsContract
import android.text.format.DateFormat
import android.util.Log
import android.util.Patterns
+import androidx.coordinatorlayout.widget.CoordinatorLayout
import com.google.android.material.textfield.MaterialAutoCompleteTextView
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
@@ -103,7 +104,7 @@ class Common {
if (textInputLayout.error != null) {
textInputLayout.error = null
if (textInputLayout.isErrorEnabled) {
- textInputLayout.isErrorEnabled = false;
+ textInputLayout.isErrorEnabled = false
}
}
}
@@ -272,6 +273,5 @@ class Common {
""
}
}
-
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/Constants.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/Constants.kt
index ed5ae6e..8c89cd8 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/util/Constants.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/Constants.kt
@@ -5,5 +5,15 @@ class Constants() {
companion object {
const val BASE_URL = "https://providential.in/WebApi_Bajaj/api/"
const val token = "636F8F63-06C4-4D95-8562-392B34025FB0"
+
+ const val passphrase = "bml2ZXNo"
+ const val KEY_LOGIN_EMAIL = "LOGIN_EMAIL"
+ const val KEY_LOGINUSER_CODE = "LOGINUSER_CODE"
+ const val KEY_LOGIN_SOCIALID = "KEY_LOGIN_SOCIALID"
+ const val KEY_LOGIN_PASSWORD = "LOGIN_PASSWORD"
+ const val KEY_LOGINTYPE = "LOGINTYPE"
+ const val KEY_VERSION_CODE = "Version Code"
+ const val KEY_GCM_APP_ID = "Gcm App Id"
+ val GetFreshToken_V2_Encrypt: String = BASE_URL + "GetToken_V2"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/EncryptionDecryption.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/EncryptionDecryption.kt
new file mode 100644
index 0000000..db69d69
--- /dev/null
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/EncryptionDecryption.kt
@@ -0,0 +1,141 @@
+package com.nivesh.production.bajajfd.util
+
+import android.annotation.SuppressLint
+import android.util.Base64
+import android.util.Log
+import com.nivesh.production.bajajfd.util.Constants.Companion.passphrase
+import java.security.InvalidAlgorithmParameterException
+import java.security.InvalidKeyException
+import java.security.MessageDigest
+import java.security.NoSuchAlgorithmException
+import java.text.SimpleDateFormat
+import java.util.*
+import javax.crypto.*
+import javax.crypto.spec.IvParameterSpec
+import javax.crypto.spec.SecretKeySpec
+
+class EncryptionDecryption {
+ val TAG = "Crypto"
+
+
+ private var aesCipher: Cipher? = null
+ private var secretKey: SecretKey? = null
+
+ private var ivParameterSpec: IvParameterSpec? = null
+
+ private val CIPHER_TRANSFORMATION = "AES/CBC/PKCS5Padding"
+ private val CIPHER_ALGORITHM = "AES"
+
+ // Replace me with a 16-byte key, share between Java and C#
+ private val rawSecretKey = byteArrayOf(
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ )
+
+ private val MESSAGEDIGEST_ALGORITHM = "MD5"
+
+ @SuppressLint("NotConstructor")
+ fun EncryptionDecryption() {
+ val passwordKey =
+ encodeDigest(passphrase) //new NativeClass().localName(KeyConstant.passphrase));
+ try {
+ aesCipher = Cipher.getInstance(CIPHER_TRANSFORMATION)
+ } catch (e: NoSuchAlgorithmException) {
+ Log.e(TAG, "No such algorithm $CIPHER_ALGORITHM", e)
+ } catch (e: NoSuchPaddingException) {
+ Log.e(TAG, "No such padding PKCS5", e)
+ }
+ secretKey = SecretKeySpec(passwordKey, CIPHER_ALGORITHM)
+ ivParameterSpec = IvParameterSpec(rawSecretKey)
+ }
+
+ fun encryptAsBase64(dataToEncrypt: String): String? {
+ var dataToEncrypt = dataToEncrypt
+ val dateFormat = SimpleDateFormat("SSS", Locale.US)
+ dataToEncrypt = dataToEncrypt + dateFormat.format(Date())
+ val encryptedData = encrypt(dataToEncrypt.toByteArray())
+ return Base64.encodeToString(encryptedData, Base64.DEFAULT)
+ }
+
+// public String decrypt(String textToDecrypt) throws Exception {
+//
+//
+// //SecretKeySpec skeySpec = new SecretKeySpec(getRaw(plainText, AESSalt), "AES");
+// //Cipher cipher = Cipher.getInstance(cypherInstance);
+// //cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(initializationVector.getBytes()));
+// byte[] decrypted = aesCipher.doFinal(encryted_bytes);
+// return new String(decrypted, "UTF-8");
+// }
+
+ // public String decrypt(String textToDecrypt) throws Exception {
+ //
+ //
+ // //SecretKeySpec skeySpec = new SecretKeySpec(getRaw(plainText, AESSalt), "AES");
+ // //Cipher cipher = Cipher.getInstance(cypherInstance);
+ // //cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(initializationVector.getBytes()));
+ // byte[] decrypted = aesCipher.doFinal(encryted_bytes);
+ // return new String(decrypted, "UTF-8");
+ // }
+ fun decrypt(encryptString: String?): String? {
+ var decryptedData = ""
+ try {
+ aesCipher!!.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec)
+ } catch (e: InvalidKeyException) {
+ Log.e(TAG, "Invalid key", e)
+ return null
+ } catch (e: InvalidAlgorithmParameterException) {
+ Log.e(TAG, "Invalid algorithm $CIPHER_ALGORITHM", e)
+ return null
+ }
+ val decryptBytes: ByteArray
+ try {
+ val encryted_bytes = Base64.decode(encryptString, Base64.DEFAULT)
+ decryptBytes = aesCipher!!.doFinal(encryted_bytes)
+ decryptedData = String(decryptBytes)
+ decryptedData = decryptedData.substring(0, decryptedData.length - 3)
+ } catch (e: IllegalBlockSizeException) {
+ Log.e(TAG, "Illegal block size", e)
+ return null
+ } catch (e: BadPaddingException) {
+ Log.e(TAG, "Bad padding", e)
+ return null
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ return decryptedData
+ }
+
+ fun encrypt(clearData: ByteArray?): ByteArray? {
+ try {
+ aesCipher!!.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec)
+ } catch (e: InvalidKeyException) {
+ Log.e(TAG, "Invalid key", e)
+ return null
+ } catch (e: InvalidAlgorithmParameterException) {
+ Log.e(TAG, "Invalid algorithm $CIPHER_ALGORITHM", e)
+ return null
+ }
+ val encryptedData: ByteArray
+ encryptedData = try {
+ aesCipher!!.doFinal(clearData)
+ } catch (e: IllegalBlockSizeException) {
+ Log.e(TAG, "Illegal block size", e)
+ return null
+ } catch (e: BadPaddingException) {
+ Log.e(TAG, "Bad padding", e)
+ return null
+ }
+ return encryptedData
+ }
+
+ private fun encodeDigest(text: String): ByteArray? {
+ val digest: MessageDigest
+ try {
+ digest = MessageDigest.getInstance(MESSAGEDIGEST_ALGORITHM)
+ return digest.digest(text.toByteArray())
+ } catch (e: NoSuchAlgorithmException) {
+ Log.e(TAG, "No such algorithm $MESSAGEDIGEST_ALGORITHM", e)
+ }
+ return null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/ProgressUtil.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/ProgressUtil.kt
new file mode 100644
index 0000000..a810f1e
--- /dev/null
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/ProgressUtil.kt
@@ -0,0 +1,50 @@
+package com.nivesh.production.bajajfd.util
+
+import android.annotation.SuppressLint
+import android.app.AlertDialog
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.util.Log
+import android.view.Window
+import android.widget.ProgressBar
+
+@SuppressLint("StaticFieldLeak")
+object ProgressUtil{
+
+ private lateinit var dialogBuilder: AlertDialog.Builder
+ private lateinit var alertDialog: AlertDialog
+ private lateinit var pDialog: ProgressBar
+
+
+ fun showLoading(ctx: Context){
+ // instantiating the lateint objects
+ dialogBuilder= AlertDialog.Builder(ctx)
+ pDialog= ProgressBar(ctx)
+
+ // setting up the dialog
+ dialogBuilder.setCancelable(false)
+ dialogBuilder.setView(pDialog)
+ alertDialog=dialogBuilder.create()
+
+ // magic of transparent background goes here
+ alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ // setting the alertDialog's BackgroundDrawable as the color resource of any color with 1% opacity
+ alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.parseColor("#00141414")))
+
+ // finally displaying the Alertdialog containging the ProgressBar
+ alertDialog.show()
+
+ }
+
+
+ fun hideLoading(){
+ try {
+ if(alertDialog.isShowing){
+ alertDialog.dismiss()
+ }
+ } catch (e: UninitializedPropertyAccessException) {
+ Log.e("TAG","AlertDialog UninitializedPropertyAccessException")
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/SharedPrefrenceDataMethods.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/SharedPrefrenceDataMethods.kt
new file mode 100644
index 0000000..2085276
--- /dev/null
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/SharedPrefrenceDataMethods.kt
@@ -0,0 +1,65 @@
+package com.nivesh.production.bajajfd.util
+
+import android.content.Context
+import androidx.preference.PreferenceManager
+
+class SharedPrefrenceDataMethods {
+
+ companion object {
+
+ fun getLoginEmail(Name: String?, context: Context?): String? {
+ val preferences = context?.let {
+ PreferenceManager.getDefaultSharedPreferences(
+ it
+ )
+ }
+
+ return preferences?.getString(Name, "")
+
+ }
+
+ fun getLoginUserCode(Name: String?, context: Context?): String? {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ return preferences?.getString(Name, "")
+ }
+
+ fun setLogin_SOCIALID(json: String?, context: Context?, Name: String?) {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ val editor = preferences?.edit()
+ editor?.putString(Name, json)
+ editor?.apply()
+ }
+
+ fun getLoginSOCIALID(Name: String?, context: Context?): String? {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ return preferences?.getString(Name, "")
+ }
+
+ fun getLoginPassword(Name: String?, context: Context?): String? {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ return preferences?.getString(Name, "")
+ }
+
+ fun getLogin_Type(Name: String?, context: Context?): String? {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ return preferences?.getString(Name, "")
+ }
+
+ fun getVersionCode(Name: String?, context: Context?): String? {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ return preferences?.getString(Name, "")
+ }
+
+ fun getGcmAppId(Name: String?, context: Context?): String? {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ return preferences?.getString(Name, "")
+ }
+
+ fun setToken(context: Context?, token: String?) {
+ val preferences = context?.let { PreferenceManager.getDefaultSharedPreferences(it) }
+ val editor = preferences?.edit()
+ editor?.putString("token", token)
+ editor?.apply()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/Utility.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/Utility.kt
new file mode 100644
index 0000000..e8597de
--- /dev/null
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/Utility.kt
@@ -0,0 +1,169 @@
+package com.nivesh.production.bajajfd.util
+
+import android.Manifest
+import android.annotation.SuppressLint
+import android.content.Context
+import android.content.pm.PackageManager
+import android.os.Build
+import android.provider.Settings
+import android.telephony.TelephonyManager
+import android.text.TextUtils
+import android.util.Log
+import androidx.core.app.ActivityCompat
+import com.nivesh.production.bajajfd.model.DeviceInfo
+import java.nio.charset.StandardCharsets
+import java.security.MessageDigest
+import java.util.*
+
+class Utility {
+
+ companion object{
+
+ fun convert_sha256(rawString: String): String {
+ return try {
+ val digest = MessageDigest.getInstance("SHA-256")
+ var hash = ByteArray(0)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ hash = digest.digest(rawString.toByteArray(StandardCharsets.UTF_8))
+ }
+ val hexString = StringBuilder()
+ for (i in hash.indices) {
+ val hex = Integer.toHexString(0xff and hash[i].toInt())
+ if (hex.length == 1) hexString.append('0')
+ hexString.append(hex)
+ }
+ hexString.toString().uppercase(Locale.getDefault())
+ } catch (ex: Exception) {
+ throw RuntimeException(ex)
+ }
+ }
+
+ fun convert_sha256_2X(rawString: String): String {
+ return try {
+ val digest = MessageDigest.getInstance("SHA-256")
+ var hash = ByteArray(0)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ hash = digest.digest(rawString.toByteArray(StandardCharsets.UTF_8))
+ }
+ val hexString = java.lang.StringBuilder()
+ for (i in hash.indices) {
+ val hex = Integer.toHexString(0xff and hash[i].toInt())
+ if (hex.length == 1) hexString.append('0')
+ hexString.append(hex)
+ }
+ hexString.toString()
+ } catch (ex: java.lang.Exception) {
+ throw java.lang.RuntimeException(ex)
+ }
+ }
+
+ @SuppressLint("HardwareIds")
+ fun getDeviceInfo(mContext: Context): DeviceInfo {
+ val deviceInfo = DeviceInfo()
+ var device_id: String? = ""
+ try {
+ val telephonyManager =
+ mContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
+ deviceInfo.app_version = (
+ SharedPrefrenceDataMethods.getVersionCode(
+ Constants.KEY_VERSION_CODE,
+ mContext
+ )
+ )
+
+ deviceInfo.device_model = (if (TextUtils.isEmpty(Build.DEVICE)) "" else Build.DEVICE)
+ deviceInfo.device_os_version = (if (TextUtils.isEmpty(Build.VERSION.RELEASE)) "" else Build.VERSION.RELEASE)
+ deviceInfo.device_name = (if (TextUtils.isEmpty(Build.PRODUCT)) "" else Build.PRODUCT)
+ deviceInfo.device_token = (
+ if (TextUtils.isEmpty(
+ SharedPrefrenceDataMethods.getGcmAppId(
+ Constants.KEY_GCM_APP_ID,
+ mContext
+ )
+ )
+ ) "" else SharedPrefrenceDataMethods.getGcmAppId(
+ Constants.KEY_GCM_APP_ID,
+ mContext
+ )
+ )
+ deviceInfo.device_type = ("Android")
+
+ // Hemant Code Added start 28-10-2020
+ if (ActivityCompat.checkSelfPermission(
+ mContext,
+ Manifest.permission.READ_PHONE_STATE
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ device_id = telephonyManager.imei
+ if (device_id == null) {
+ device_id =
+ if (TextUtils.isEmpty(Build.getSerial())) "" else Build.getSerial()
+ }
+ } else {
+ device_id = telephonyManager.deviceId
+ if (device_id == null) {
+ device_id =
+ if (TextUtils.isEmpty(Build.SERIAL)) "" else Build.SERIAL
+ }
+ }
+ } else {
+ device_id = telephonyManager.deviceId
+ if (device_id == null) {
+ device_id = if (TextUtils.isEmpty(Build.SERIAL)) "" else Build.SERIAL
+ }
+ }
+ if (device_id == null || device_id.isEmpty() || device_id.equals(
+ "unknown",
+ ignoreCase = true
+ )
+ ) {
+ device_id = if (TextUtils.isEmpty(
+ Settings.Secure.getString(
+ mContext.contentResolver,
+ Settings.Secure.ANDROID_ID
+ )
+ )
+ ) "" else Settings.Secure.getString(
+ mContext.contentResolver,
+ Settings.Secure.ANDROID_ID
+ )
+ }
+ Log.e("device_id", "-> $device_id")
+ // Hemant changes 07-11-2019 start commented and Added 12-12-2019
+// deviceInfo.device_id = (device_id + "#" + com.nivesh.production.util.Utility.getFlavor())
+ // Hemant changes 07-11-2019 end commented and Added 12-12-2019
+
+
+ // Hemant changes 07-11-2019 start added and commented 12-12-2019
+ deviceInfo.device_id_for_UMSId = (device_id)
+ // deviceInfo.setDeviceId(device_id);
+ // Hemant changes 07-11-2019 end added and commented 12-12-2019
+ } catch (e: java.lang.Exception) {
+ e.printStackTrace()
+ // Hemant changes 07-11-2019 start Added 28-10-2020
+ if (device_id == null || device_id.isEmpty() || device_id.equals(
+ "unknown",
+ ignoreCase = true
+ )
+ ) {
+ device_id = if (TextUtils.isEmpty(
+ Settings.Secure.getString(
+ mContext.contentResolver,
+ Settings.Secure.ANDROID_ID
+ )
+ )
+ ) "" else Settings.Secure.getString(
+ mContext.contentResolver,
+ Settings.Secure.ANDROID_ID
+ )
+ }
+ Log.e("device_id", "-> $device_id")
+// deviceInfo.setDeviceId(device_id + "#" + com.nivesh.production.util.Utility.getFlavor())
+ deviceInfo.device_id_for_UMSId = (device_id)
+ // Hemant changes 07-11-2019 end Added 28-10-2020
+ }
+ return deviceInfo
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/Utils_Functions.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/Utils_Functions.kt
new file mode 100644
index 0000000..e2664f1
--- /dev/null
+++ b/app/src/main/java/com/nivesh/production/bajajfd/util/Utils_Functions.kt
@@ -0,0 +1,21 @@
+package com.nivesh.production.bajajfd.util
+
+import android.annotation.SuppressLint
+import java.text.SimpleDateFormat
+import java.util.*
+
+class Utils_Functions {
+
+ companion object{
+
+ fun getCurrentDateStamp(): String? {
+ val d = Date()
+ @SuppressLint("SimpleDateFormat") val simpleDateFormat =
+ SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
+ val dateStr = simpleDateFormat.format(d)
+ val output = d.time / 1000L
+ val str = java.lang.Long.toString(output)
+ return d.time.toString()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt
index 732aba4..442e339 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt
@@ -11,6 +11,7 @@ import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity
import com.nivesh.production.bajajfd.util.Common
import com.nivesh.production.bajajfd.util.Common.Companion.handleError
import com.nivesh.production.bajajfd.util.Common.Companion.handleResponse
+import com.nivesh.production.bajajfd.util.ProgressUtil
import com.nivesh.production.bajajfd.util.Resource
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt
index f65da9a..990c4d3 100644
--- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt
+++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepThreeBajajFDViewModel.kt
@@ -14,6 +14,7 @@ import com.nivesh.production.bajajfd.util.Common
import com.nivesh.production.bajajfd.util.Common.Companion.handleResponse
import com.nivesh.production.bajajfd.util.Resource
import kotlinx.coroutines.launch
+import okhttp3.RequestBody
class StepThreeBajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() {
@@ -50,4 +51,15 @@ class StepThreeBajajFDViewModel(private val mainRepository: MainRepository) : Vi
}
}
+ val getFreshTokenMutableData: MutableLiveData> = MutableLiveData()
+ fun getFreshToken(body: RequestBody, token: String, activity: Activity) = viewModelScope.launch(
+ Common.handleError(activity)
+ ) {
+ if (Common.isNetworkAvailable(activity)) {
+ getFreshTokenMutableData.postValue(Resource.Loading())
+ val response = mainRepository.freshToken(body)
+ getFreshTokenMutableData.postValue(handleResponse(response))
+ }
+ }
+
}
\ No newline at end of file