Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions phoneNumber/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework
import org.jetbrains.kotlin.konan.properties.Properties
import java.io.FileInputStream
import java.io.FileOutputStream

plugins {
id(Plugins.ANDROID_LIBRARY_PLUGIN)
kotlin(Plugins.MULTIPLATFORM_PLUGIN)
id(Plugins.MAVEN_PUBLISH)
id(Plugins.SIGNING)
}

val versionProperties = Properties().apply {
load(FileInputStream(File(rootProject.rootDir, Constants.VERSIONS_PROPERTIES)))
}

val currentVersion = versionProperties.getProperty(Constants.PUBLISH_VERSION) as String
val libName = "phoneNumber"

version = currentVersion
group = Constants.GROUP_ID

kotlin {
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = Versions.JVM.toString()
}
}
publishLibraryVariants("debug", "release")
}

val xcf = XCFramework()
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach {
it.binaries.framework(libName) {
baseName = libName
xcf.add(this)
isStatic = true
}
}

metadata {
compilations.matching { it.name == "iosMain" }.all {
compileTaskProvider.configure { enabled = false }
}
}

sourceSets {
commonMain.dependencies {
// Koin
api(Dependencies.Koin.CORE)

// Phone Number
api(Dependencies.LIB_PHONE_NUMBER)

}

androidMain.dependencies {
// ANDROID ANDROID DEPENDENCIES
}

iosMain.dependencies {
// IOS DEPENDENCIES
}
}

task("testClasses")
}

android {
namespace = "com.metacto.kmm.base"
compileSdk = Configs.COMPILE_SDK_VERSION
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdk = Configs.MIN_SDK_VERSION
consumerProguardFiles("consumer-rules.pro")
}
compileOptions {
sourceCompatibility = Versions.JVM
targetCompatibility = Versions.JVM
}
}

publishing {
repositories {
val localProperties = gradleLocalProperties(rootDir, providers)
var publishUserRepo = localProperties.getProperty(Constants.PUBLISH_REPO_USER)
var publishTokenRepo = localProperties.getProperty(Constants.PUBLISH_REPO_TOKEN)

if (publishUserRepo.isNullOrEmpty()) {
publishUserRepo = ""
localProperties.setProperty(Constants.PUBLISH_REPO_USER, publishUserRepo)
}

if (publishTokenRepo.isNullOrEmpty()) {
publishTokenRepo = ""
localProperties.setProperty(Constants.PUBLISH_REPO_TOKEN, publishTokenRepo)
}

if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) {
localProperties.store(
FileOutputStream(File(rootDir, Constants.LOCAL_PROPERTIES)), null
)
}

repositories {
maven(Constants.MAVEN_URL) {
name = Constants.PUBLISH_MAVEN_REPO_NAME
credentials {
username = publishUserRepo
password = publishTokenRepo
}
}
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.metacto.kmm.base

actual class BaseClassForTest {
actual fun test() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.metacto.kmm.phoneNumber.di

import com.metacto.core.utils.phoneNumber.IPhoneNumberManager
import com.metacto.kmm.phoneNumber.phoneNumberManger.PhoneNumberManager
import org.koin.dsl.module

val phoneNumberModule = module {
single<IPhoneNumberManager> {
PhoneNumberManager(get())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.metacto.core.utils.phoneNumber

val Class = IPhoneNumberManager::class

interface IPhoneNumberManager {
fun getValidPhoneNumber(
number: String,
countryCode: String?
): String?

fun getFormattedPhoneNumber(
number: String,
countryCode: String?
): String?

fun getE164FormattedPhoneNumber(
number: String,
countryCode: String?
): String?

fun isValidPhoneNumber(
number: String,
countryCode: String?
): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.metacto.kmm.phoneNumber.phoneNumberManger
import com.metacto.core.utils.phoneNumber.IPhoneNumberManager
import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil
import io.michaelrocks.libphonenumber.kotlin.Phonenumber

class PhoneNumberManager(
private val phoneNumberUtil: PhoneNumberUtil
) : IPhoneNumberManager {

override fun getValidPhoneNumber(
number: String,
countryCode: String?
): String? {
val regex = Regex("[^+0-9]")

// Remove all non-numeric characters except +
val updatedNumber = regex.replace(number, "").replace(" ", "")
// create phone number util instance

// parse the updated number without country code and check if it's valid
val internationalPhoneNumber = parsePhoneNumber(updatedNumber, countryCode)
// if valid, format it to international format
if (internationalPhoneNumber != null) {
// return the formatted number
return phoneNumberUtil.format(
internationalPhoneNumber,
PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL
)
} else {
// if not valid, try to parse it with US country code
val usPhoneNumber = parsePhoneNumber(updatedNumber, countryCode)
// if valid, format it to international format
if (usPhoneNumber != null) {
// return the formatted number
return phoneNumberUtil.format(
usPhoneNumber,
PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL
)
}
}

// if not valid, return null
return null
}

override fun getFormattedPhoneNumber(number: String, countryCode: String?): String? {
val phoneNumber = parsePhoneNumber(number, countryCode) ?: return null
return phoneNumberUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)
}

override fun getE164FormattedPhoneNumber(number: String, countryCode: String?): String? {
val phoneNumber = parsePhoneNumber(number, countryCode) ?: return null
return phoneNumberUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164)
}

override fun isValidPhoneNumber(number: String, countryCode: String?): Boolean {
val phoneNumber = parsePhoneNumber(number, countryCode) ?: return false
return phoneNumberUtil.isValidNumber(phoneNumber)
}

private fun parsePhoneNumber(
number: String,
countryCode: String?
): Phonenumber.PhoneNumber? {
try {
val phoneNumber = phoneNumberUtil.parse(number, countryCode)
val phoneNumberType = phoneNumberUtil.getNumberType(phoneNumber)
val isValidPhoneType =
phoneNumberType == PhoneNumberUtil.PhoneNumberType.MOBILE || phoneNumberType == PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE
return if (isValidPhoneType) {
phoneNumber
} else {
null
}
} catch (_: Exception) {
}
return null
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.metacto.kmm.base

actual class BaseClassForTest {
actual fun test() {
}
}
3 changes: 2 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ include(":sampleAppShared")
include(":coreapp")
include(":androidApp")
include(":baseModule")
include(":notifications")
include(":notifications")
include(":phoneNumber")