@@ -7,7 +7,6 @@ import android.content.Intent
77import android.content.pm.PackageManager
88import android.os.Build
99import android.os.Bundle
10- import android.telephony.PhoneNumberUtils
1110import android.telephony.TelephonyManager
1211import android.view.View
1312import android.webkit.URLUtil
@@ -23,6 +22,7 @@ import com.google.android.material.button.MaterialButton
2322import com.google.android.material.progressindicator.LinearProgressIndicator
2423import com.google.android.material.textfield.TextInputEditText
2524import com.google.android.material.textfield.TextInputLayout
25+ import com.httpsms.validators.PhoneNumberValidator
2626import com.journeyapps.barcodescanner.ScanContract
2727import com.journeyapps.barcodescanner.ScanOptions
2828import timber.log.Timber
@@ -180,15 +180,15 @@ class LoginActivity : AppCompatActivity() {
180180 Timber .d(" login button clicked" )
181181
182182 val error = isGooglePlayServicesAvailable()
183- if (error != null || Settings .getFcmToken( this ) == null ) {
183+ if (error != null ) {
184184 Timber .d(" google play services not installed [${error} ]" )
185185 Toast .makeText(this , error, Toast .LENGTH_SHORT ).show()
186186 return
187187 }
188188
189189 if (Settings .getFcmToken(this ) == null ) {
190190 Timber .d(" The FCM token is not set" )
191- Toast .makeText(this , " Cannot find FCM token. Make sure you have google play services installed" , Toast .LENGTH_LONG ).show()
191+ Toast .makeText(this , " Cannot find FCM token. Make sure you have Google Play Services installed" , Toast .LENGTH_LONG ).show()
192192 return
193193 }
194194
@@ -220,6 +220,8 @@ class LoginActivity : AppCompatActivity() {
220220 val phoneNumberSIM2 = findViewById<TextInputEditText >(R .id.loginPhoneNumberInputSIM2)
221221 phoneNumberSIM2.isEnabled = false
222222
223+ val countryCode = getCountryCode()
224+
223225 val resetView = fun () {
224226 apiKey.isEnabled = true
225227 serverUrl.isEnabled = true
@@ -229,25 +231,17 @@ class LoginActivity : AppCompatActivity() {
229231 loginButton().isEnabled = true
230232 }
231233
232- if (
233- ! PhoneNumberUtils .isWellFormedSmsAddress(phoneNumber.text.toString().trim()) ||
234- ! PhoneNumberUtils .isGlobalPhoneNumber(phoneNumber.text.toString().trim())
235- ) {
234+ if (! PhoneNumberValidator .isValidPhoneNumber(phoneNumber.text.toString().trim(), countryCode)) {
236235 Timber .e(" [SIM1] phone number [${phoneNumber.text.toString()} ] is not valid" )
237236 resetView()
238- phoneNumberLayout.error = " Invalid E.164 phone number"
237+ phoneNumberLayout.error = " Enter an international phone number in the E.164 format "
239238 return
240239 }
241240
242- if (
243- SmsManagerService .isDualSIM(this ) && (
244- ! PhoneNumberUtils .isWellFormedSmsAddress(phoneNumberSIM2.text.toString().trim()) ||
245- ! PhoneNumberUtils .isGlobalPhoneNumber(phoneNumberSIM2.text.toString().trim())
246- )
247- ) {
241+ if (SmsManagerService .isDualSIM(this ) && ! PhoneNumberValidator .isValidPhoneNumber(phoneNumberSIM2.text.toString().trim(), countryCode)) {
248242 Timber .e(" [SIM2] phone number [${phoneNumberSIM2.text.toString()} ] is not valid" )
249243 resetView()
250- phoneNumberLayoutSIM2.error = " Invalid E.164 phone number"
244+ phoneNumberLayoutSIM2.error = " Enter an international phone number in the E.164 format "
251245 return
252246 }
253247
@@ -284,11 +278,11 @@ class LoginActivity : AppCompatActivity() {
284278 Settings .setApiKeyAsync(this , apiKey.text.toString())
285279 Settings .setServerUrlAsync(this , serverUrl.text.toString().trim())
286280
287- val e164PhoneNumber = formatE164(phoneNumber.text.toString().trim())
281+ val e164PhoneNumber = PhoneNumberValidator . formatE164(phoneNumber.text.toString().trim(), countryCode )
288282 Settings .setSIM1PhoneNumber(this , e164PhoneNumber)
289283
290284 if (SmsManagerService .isDualSIM(this )) {
291- val sim2PhoneNumber = formatE164(phoneNumberSIM2.text.toString().trim())
285+ val sim2PhoneNumber = PhoneNumberValidator . formatE164(phoneNumberSIM2.text.toString().trim(), countryCode )
292286 Settings .setSIM2PhoneNumber(this , sim2PhoneNumber)
293287 }
294288
@@ -300,7 +294,7 @@ class LoginActivity : AppCompatActivity() {
300294 Thread {
301295 val service = HttpSmsApiService (apiKey.text.toString(), URI (serverUrl.text.toString().trim()))
302296
303- var e164PhoneNumber = formatE164(phoneNumber.text.toString().trim())
297+ var e164PhoneNumber = PhoneNumberValidator . formatE164(phoneNumber.text.toString().trim(), countryCode )
304298 var response = service.updateFcmToken(e164PhoneNumber, Constants .SIM1 , Settings .getFcmToken(this ) ? : " " )
305299 if (response.second != null || response.third != null ) {
306300 Timber .e(" error updating fcm token [${response.second} ], third [${response.third} ]" )
@@ -314,41 +308,14 @@ class LoginActivity : AppCompatActivity() {
314308 return @Thread
315309 }
316310
317- e164PhoneNumber = formatE164(phoneNumberSIM2.text.toString().trim())
311+ e164PhoneNumber = PhoneNumberValidator . formatE164(phoneNumberSIM2.text.toString().trim(), countryCode )
318312 response = service.updateFcmToken(e164PhoneNumber, Constants .SIM2 , Settings .getFcmToken(this ) ? : " " )
319313
320314 liveData.postValue(Pair (response.second, response.third))
321315 Timber .d(" finished validating api URL" )
322316 }.start()
323317 }
324318
325- private fun formatE164 (number : String ): String {
326- var phoneNumber = number.trim()
327- if (! number.startsWith(" +" )) {
328- phoneNumber = " +$number "
329- }
330-
331- Timber .d(" formatting phone number [${phoneNumber} ] into e164" )
332-
333- val formattedNumber = PhoneNumberUtils .formatNumberToE164(
334- phoneNumber,
335- this .resources.configuration.locales.get(0 ).country
336- )
337-
338- if (formattedNumber != = null ) {
339- return formattedNumber
340- }
341-
342- return phoneNumber;
343- }
344-
345- private fun addPlus (number : String ): String {
346- if (number.startsWith(" +" )) {
347- return number
348- }
349- return " +$number "
350- }
351-
352319 private fun redirectToMain () {
353320 if (! Settings .isLoggedIn(this )) {
354321 return
@@ -362,4 +329,18 @@ class LoginActivity : AppCompatActivity() {
362329 private fun loginButton (): MaterialButton {
363330 return findViewById(R .id.loginButton)
364331 }
332+
333+ private fun getCountryCode () : String {
334+ // Get the TelephonyManager from the system services
335+ val tm = this .getSystemService(Context .TELEPHONY_SERVICE ) as TelephonyManager
336+
337+ // Get the network country ISO code and convert it to uppercase
338+ val code = tm.networkCountryIso.uppercase()
339+
340+ // If the country code is empty, retrieve the country code from the device's locale
341+ if (code.isEmpty()) {
342+ return this .resources.configuration.locales.get(0 ).country.uppercase()
343+ }
344+ return code
345+ }
365346}
0 commit comments