From c91082ee6d2b41e2f2d7706aac1ddf448ce8c3d6 Mon Sep 17 00:00:00 2001 From: chandrashekhar reddy Date: Mon, 1 Apr 2024 17:47:01 +0530 Subject: [PATCH] Location fetched as Ip address and send to server --- .../hpostesting/data/constant/DataHolder.kt | 1 + .../presentation/dashboard/AboutFragment.kt | 17 +- .../dashboard/ActivitiesFragment.kt | 10 +- .../presentation/dashboard/HomeFragment.kt | 251 ++++++------ .../dashboard/ui/LoginFragment.kt | 368 +++++++++--------- 5 files changed, 318 insertions(+), 329 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/data/constant/DataHolder.kt b/app/src/main/java/com/example/hpostesting/data/constant/DataHolder.kt index f86f27a..9aa1f30 100644 --- a/app/src/main/java/com/example/hpostesting/data/constant/DataHolder.kt +++ b/app/src/main/java/com/example/hpostesting/data/constant/DataHolder.kt @@ -38,6 +38,7 @@ object DataHolder { var hemoCubeTestData: HemoCubeTestData? = null var kitSerial: String = "" var location: UserData.Location? = null + var ipAddress: String = "0.0" var testExp: Boolean = true var hemocubeResult: Double? = null } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/AboutFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/AboutFragment.kt index 798e064..58e997a 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/AboutFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/AboutFragment.kt @@ -13,27 +13,12 @@ package com.example.hpostesting.presentation.dashboard -import android.content.Context -import android.content.SharedPreferences -import android.os.BatteryManager import android.os.Bundle -import android.util.Log -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.fragment.app.activityViewModels -import com.example.hpostesting.data.constant.Constants -import com.example.hpostesting.data.constant.DataHolder -import com.example.hpostesting.data.model.patient.HemoCubeTestData -import com.example.hpostesting.presentation.adapter.OfflineUserListAdapter -import com.example.hpostesting.presentation.adapter.UserListAdapter -import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel -import com.example.hpostesting.presentation.testRight.TestRightViewModel -import `in`.sminnovations.hpostesting.R +import androidx.fragment.app.Fragment import `in`.sminnovations.hpostesting.databinding.FragmentAboutBinding -import `in`.sminnovations.hpostesting.databinding.FragmentActivitiesBinding -import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding class AboutFragment : Fragment() { private lateinit var binding: FragmentAboutBinding diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/ActivitiesFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/ActivitiesFragment.kt index 786c927..faff1c5 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/ActivitiesFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/ActivitiesFragment.kt @@ -14,25 +14,17 @@ package com.example.hpostesting.presentation.dashboard import android.content.Context -import android.content.SharedPreferences import android.os.BatteryManager import android.os.Bundle import android.util.Log -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import com.example.hpostesting.data.constant.Constants -import com.example.hpostesting.data.constant.DataHolder -import com.example.hpostesting.data.model.patient.HemoCubeTestData import com.example.hpostesting.presentation.adapter.OfflineUserListAdapter -import com.example.hpostesting.presentation.adapter.UserListAdapter import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel -import com.example.hpostesting.presentation.testRight.TestRightViewModel -import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentActivitiesBinding -import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding class ActivitiesFragment : Fragment() { private lateinit var binding: FragmentActivitiesBinding diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index 187d5f7..3cc029c 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -93,9 +93,8 @@ class HomeFragment : Fragment() { private lateinit var binding: FragmentHomeBinding private val viewModel: TestRightViewModel by activityViewModels() private val hemoCubeViewModel: HemoCubeViewModel by activityViewModels() - private lateinit var rvAdapter: UserListAdapter - private var batLevel: Int = - 0 // Initialize with a default value, or obtain the actual battery level + // private lateinit var rvAdapter: UserListAdapter + private var batLevel: Int = 0 // Initialize with a default value, or obtain the actual battery level private lateinit var adapter: OfflineUserListAdapter private val homeViewModel: HemoCubeViewModel by activityViewModels() private var isTokenAvailable by Delegates.notNull() @@ -249,8 +248,8 @@ class HomeFragment : Fragment() { binding.internetAvailableCL.visibility = View.VISIBLE binding.internetNotAvailableCL.visibility = View.GONE binding.pendingTest.visibility = View.VISIBLE - loadUserData() - setSearch() + // loadUserData() + //setSearch() checkForLocalDBData() if (Constants.MOLBIO_INTEGRATION) { checkForTokenAndUpdate() @@ -661,7 +660,7 @@ class HomeFragment : Fragment() { val version = pInfo.versionName var labname = sharedPreference.getString(Constants.LABNAME,"") return LoginRequest( - password = password, serialNumber = userID, username = userID, version = version, lab = labname + password = password, serialNumber = userID, username = userID, version = version, lab = labname,location = DataHolder.location.toString() ) }//latitude = DataHolder.location!!.latitude.toString(), longitude = DataHolder.location!!.longitude.toString(), location = DataHolder.location.toString() @@ -814,46 +813,46 @@ class HomeFragment : Fragment() { } - private fun loadUserData() { - try { - val dateFormat = SimpleDateFormat("yyyy-MM-dd") - val currentDate = Date() - val formattedDate = dateFormat.format(currentDate) - val query = Firebase.firestore.collection("patientData") - .whereGreaterThanOrEqualTo("createdAt", formattedDate) - .orderBy("createdAt", Query.Direction.DESCENDING) -// val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false) - query.get().addOnSuccessListener { - if (it.documents.isEmpty()) { - binding.pendingTest.visibility = View.VISIBLE - } else { - binding.pendingTest.visibility = View.GONE - } - } - val recyclerViewOptions = - FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) - .build() - - val bm = requireContext().getSystemService(BATTERY_SERVICE) as BatteryManager - val batLevel: Int = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) - - rvAdapter = view?.let { - UserListAdapter( - requireContext(), - hemoCubeViewModel, - recyclerViewOptions, - it, - batLevel, - requireActivity() - ) - }!! - binding.rvOrder.adapter = rvAdapter - - rvAdapter.startListening() - } catch (e: Exception) { - Firebase.crashlytics.recordException(e) - } - } +// private fun loadUserData() { +// try { +// val dateFormat = SimpleDateFormat("yyyy-MM-dd") +// val currentDate = Date() +// val formattedDate = dateFormat.format(currentDate) +// val query = Firebase.firestore.collection("patientData") +// .whereGreaterThanOrEqualTo("createdAt", formattedDate) +// .orderBy("createdAt", Query.Direction.DESCENDING) +//// val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false) +// query.get().addOnSuccessListener { +// if (it.documents.isEmpty()) { +// binding.pendingTest.visibility = View.VISIBLE +// } else { +// binding.pendingTest.visibility = View.GONE +// } +// } +// val recyclerViewOptions = +// FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) +// .build() +// +// val bm = requireContext().getSystemService(BATTERY_SERVICE) as BatteryManager +// val batLevel: Int = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) +// +// rvAdapter = view?.let { +// UserListAdapter( +// requireContext(), +// hemoCubeViewModel, +// recyclerViewOptions, +// it, +// batLevel, +// requireActivity() +// ) +// }!! +// binding.rvOrder.adapter = rvAdapter +// +// rvAdapter.startListening() +// } catch (e: Exception) { +// Firebase.crashlytics.recordException(e) +// } +// } private fun saveUserId(userId: String) { with(sharedPreference.edit()) { @@ -879,87 +878,87 @@ class HomeFragment : Fragment() { dialog.show() } - private fun getData(search: String?, field: String) { - val userSearchTrace = Firebase.performance.newTrace("user_search_trace") - userSearchTrace.start() +// private fun getData(search: String?, field: String) { +// val userSearchTrace = Firebase.performance.newTrace("user_search_trace") +// userSearchTrace.start() +// +// search?.replaceFirstChar { +// if (search.lowercase() +// .startsWith(it.lowercase()) +// ) it.titlecase(Locale.getDefault()) else it.toString() +// +// } +// val currentDate = Date() +// val dateFormat = SimpleDateFormat("yyyyMMdd") +// val partition = dateFormat.format(currentDate) +// val searchTerm = partition + search +// val searchField = field + "Search" +// val query = +// Firebase.firestore.collection("patientData").orderBy(searchField).startAt(searchTerm) +// .endAt(searchTerm + "\uf8ff") +// query.get().addOnSuccessListener { +// userSearchTrace.stop() +// } +// val recyclerViewOptions = +// FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) +// .build() +// val bm = requireContext().getSystemService(BATTERY_SERVICE) as BatteryManager +// batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) +// +// rvAdapter = view?.let { +// UserListAdapter( +// requireContext(), +// hemoCubeViewModel, +// recyclerViewOptions, +// it, +// batLevel, +// requireActivity() +// ) +// }!! +// binding.rvOrder.adapter = rvAdapter +// rvAdapter.startListening() +// +// userSearchTrace.stop() +// } - search?.replaceFirstChar { - if (search.lowercase() - .startsWith(it.lowercase()) - ) it.titlecase(Locale.getDefault()) else it.toString() - - } - val currentDate = Date() - val dateFormat = SimpleDateFormat("yyyyMMdd") - val partition = dateFormat.format(currentDate) - val searchTerm = partition + search - val searchField = field + "Search" - val query = - Firebase.firestore.collection("patientData").orderBy(searchField).startAt(searchTerm) - .endAt(searchTerm + "\uf8ff") - query.get().addOnSuccessListener { - userSearchTrace.stop() - } - val recyclerViewOptions = - FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java) - .build() - val bm = requireContext().getSystemService(BATTERY_SERVICE) as BatteryManager - batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) - - rvAdapter = view?.let { - UserListAdapter( - requireContext(), - hemoCubeViewModel, - recyclerViewOptions, - it, - batLevel, - requireActivity() - ) - }!! - binding.rvOrder.adapter = rvAdapter - rvAdapter.startListening() - - userSearchTrace.stop() - } - - private fun setSearch() { - binding.searchProduct.setOnQueryTextListener(object : - androidx.appcompat.widget.SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String?): Boolean { - return if (!query.isNullOrEmpty()) { - val field = when { - binding.userIdRadioButton.isChecked -> "_id" - binding.abhaIdRadioButton.isChecked -> "abhaId" - binding.aadharIdRadioButton.isChecked -> "aadharId" - else -> null - } - - field?.let { getData(query, it) } - false - - } else { - loadUserData() - false - } - } - - override fun onQueryTextChange(query: String?): Boolean { - return if (!query.isNullOrEmpty()) { - val field = when { - binding.userIdRadioButton.isChecked -> "_id" - binding.abhaIdRadioButton.isChecked -> "abhaId" - binding.aadharIdRadioButton.isChecked -> "aadharId" - else -> null - } - field?.let { getData(query, it) } - false - } else { - loadUserData() - false - } - } - }) - } +// private fun setSearch() { +// binding.searchProduct.setOnQueryTextListener(object : +// androidx.appcompat.widget.SearchView.OnQueryTextListener { +// override fun onQueryTextSubmit(query: String?): Boolean { +// return if (!query.isNullOrEmpty()) { +// val field = when { +// binding.userIdRadioButton.isChecked -> "_id" +// binding.abhaIdRadioButton.isChecked -> "abhaId" +// binding.aadharIdRadioButton.isChecked -> "aadharId" +// else -> null +// } +// +// field?.let { getData(query, it) } +// false +// +// } else { +// // loadUserData() +// false +// } +// } +// +// override fun onQueryTextChange(query: String?): Boolean { +// return if (!query.isNullOrEmpty()) { +// val field = when { +// binding.userIdRadioButton.isChecked -> "_id" +// binding.abhaIdRadioButton.isChecked -> "abhaId" +// binding.aadharIdRadioButton.isChecked -> "aadharId" +// else -> null +// } +// field?.let { getData(query, it) } +// false +// } else { +// // loadUserData() +// false +// } +// } +// }) +// } private fun checkForLocalDBData() { // viewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt index f351ad7..b462fbc 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt @@ -13,16 +13,11 @@ package com.example.hpostesting.presentation.dashboard.ui -import android.Manifest import android.annotation.SuppressLint import android.content.Context import android.content.SharedPreferences -import android.content.pm.PackageManager -import android.location.Location -import android.location.LocationListener -import android.location.LocationManager import android.net.ConnectivityManager -import android.net.NetworkInfo +import android.net.NetworkCapabilities import android.os.Build import android.os.Bundle import android.util.Log @@ -31,27 +26,25 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.annotation.RequiresApi -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat -import androidx.core.content.ContextCompat.getSystemService import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import com.example.hpostesting.data.constant.Constants -import com.google.android.gms.location.FusedLocationProviderClient -import com.google.android.gms.location.LocationCallback -import com.google.android.gms.location.LocationRequest -import com.google.android.gms.location.LocationResult -import com.google.android.gms.location.LocationServices +import com.example.hpostesting.data.constant.DataHolder import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentLoginBinding -import java.net.NetworkInterface +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import java.net.HttpURLConnection +import java.net.URL +import java.util.Scanner class LoginFragment : Fragment() { private val LOCATION_PERMISSION_REQUEST_CODE = 1001 - private lateinit var locationManager: LocationManager - var latitude = 0.0 - var longitude = 0.0 + // private lateinit var locationManager: LocationManager + // var latitude = 0.0 + // var longitude = 0.0 var TAG = "LoginFragmentCheck" private var _binding: FragmentLoginBinding? = null private val binding get() = _binding!! @@ -70,32 +63,41 @@ class LoginFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) init() - locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager - - // Check for location permission - if (ContextCompat.checkSelfPermission(requireContext(), - Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(requireContext(), - Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - // Permission is not granted, request it - ActivityCompat.requestPermissions(requireActivity(), - arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION), - LOCATION_PERMISSION_REQUEST_CODE) - } else { - // Permission is granted, fetch location - checkLocation() + if(isInternetAvailable()){ + getPublicIpAddr { ipAddress -> + DataHolder.ipAddress = ipAddress + } } - if (isNetworkProviderAvailable()) { - Toast.makeText(requireContext(), "Network provider is available", Toast.LENGTH_SHORT).show() - } else { - Toast.makeText(requireContext(), "Network provider is not available", Toast.LENGTH_SHORT).show() - } +// getPublicIpAddr { ipAddress -> +// DataHolder.ipAddress = ipAddress +// } + // locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager + +// // Check for location permission +// if (ContextCompat.checkSelfPermission(requireContext(), +// Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(requireContext(), +// Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { +// // Permission is not granted, request it +// ActivityCompat.requestPermissions(requireActivity(), +// arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION), +// LOCATION_PERMISSION_REQUEST_CODE) +// } else { +// // Permission is granted, fetch location +// checkLocation() +// } +// +// if (isNetworkProviderAvailable()) { +// Toast.makeText(requireContext(), "Network provider is available", Toast.LENGTH_SHORT).show() +// } else { +// Toast.makeText(requireContext(), "Network provider is not available", Toast.LENGTH_SHORT).show() +// } } - private fun isNetworkProviderAvailable(): Boolean { - - return locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) - } +// private fun isNetworkProviderAvailable(): Boolean { +// +// return locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) +// } private fun init() { if (isUserLoggedIn()) { navigateToHomeFragment() @@ -156,146 +158,156 @@ class LoginFragment : Fragment() { } /** Check if we can get our location */ - @SuppressLint("MissingPermission") - fun checkLocation() { - - val locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager - val locationProviderWifi = LocationManager.NETWORK_PROVIDER - val locationProviderGPS = LocationManager.FUSED_PROVIDER - val locationListenerNetwork: LocationListener - val locationListenerGPS: LocationListener - var gps_enabled = false - var network_enabled = false - Log.d(TAG,"PRoveider"+locationManager.allProviders.toString()) - //check wifi - - //check wifi - val connectivityManager = requireActivity().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - val mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) - - if (mWifi!!.isConnected) { - Log.d(TAG, "Wifi connected") - } - - //check gps and wifi availability - - //check gps and wifi availability - try { - gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) - } catch (ex: java.lang.Exception) { - } - - try { - network_enabled = - locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) - } catch (ex: java.lang.Exception) { - } - - if (!gps_enabled) { - Log.d(TAG, "GPS: Missing") - } - if (!network_enabled) { - Log.d(TAG, "Network: Missing") - } - - /* Location change listeners */ - - /* Location change listeners */try { - // Define a listener that responds to gps location updates - locationListenerGPS = object : LocationListener { - override fun onLocationChanged(location: Location) { - Log.d( - TAG, - "GPS: Latitude: " + location.latitude + ", Longitude = " + location.longitude - ) - } - - override fun onStatusChanged(provider: String, status: Int, extras: Bundle) { - Log.d(TAG, "GPS location found 1") - } - - override fun onProviderEnabled(provider: String) { - Log.d(TAG, "GPS location found 2") - } - - override fun onProviderDisabled(provider: String) { - Log.d(TAG, "GPS location found 3") - } - } - locationManager.requestLocationUpdates( - locationProviderGPS, - 0, - 0f, - locationListenerGPS - ) - } catch (e: java.lang.Exception) { - Log.e(TAG, "Location Exception GPS: " + e.message) - } - - try { - // Define a listener that responds to wifi location updates - locationListenerNetwork = object : LocationListener { - override fun onLocationChanged(location: Location) { - Log.d( - TAG, - "NW: Latitude: " + location.latitude + ", Longitude = " + location.longitude - ) - } - - override fun onStatusChanged(provider: String, status: Int, extras: Bundle) { - Log.d(TAG, "location found 1") - } - - override fun onProviderEnabled(provider: String) { - Log.d(TAG, "location found 2") - } - - override fun onProviderDisabled(provider: String) { - Log.d(TAG, "location found 3") - } - } - locationManager.requestLocationUpdates( - locationProviderWifi, - 0, - 0f, - locationListenerNetwork - ) - } catch (e: java.lang.Exception) { - Log.e(TAG, "Location Exception: " + e.message) - } - - } - - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) { - if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - // Permission granted, fetch location - checkLocation() - } else { - // Permission denied - Toast.makeText(requireContext(), "Location permission denied", Toast.LENGTH_SHORT).show() - } - } - } -// fun getPublicIpAddr(callback: (String) -> Unit) { -// GlobalScope.launch(Dispatchers.IO) { -// val url = URL("https://api.ipify.org") -// val conn = url.openConnection() as HttpURLConnection -// try { -// conn.connect() -// if (conn.responseCode == HttpURLConnection.HTTP_OK) { -// val scanner = Scanner(conn.inputStream) -// scanner.useDelimiter("\\A") -// if (scanner.hasNext()) { -// val ipAddress = scanner.next() -// callback(ipAddress) -// } +// @SuppressLint("MissingPermission") +// fun checkLocation() { +// +// val locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager +// val locationProviderWifi = LocationManager.NETWORK_PROVIDER +// val locationProviderGPS = LocationManager.FUSED_PROVIDER +// val locationListenerNetwork: LocationListener +// val locationListenerGPS: LocationListener +// var gps_enabled = false +// var network_enabled = false +// Log.d(TAG,"PRoveider"+locationManager.allProviders.toString()) +// //check wifi +// +// //check wifi +// val connectivityManager = requireActivity().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager +// val mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) +// +// if (mWifi!!.isConnected) { +// Log.d(TAG, "Wifi connected") +// } +// +// //check gps and wifi availability +// +// //check gps and wifi availability +// try { +// gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) +// } catch (ex: java.lang.Exception) { +// } +// +// try { +// network_enabled = +// locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) +// } catch (ex: java.lang.Exception) { +// } +// +// if (!gps_enabled) { +// Log.d(TAG, "GPS: Missing") +// } +// if (!network_enabled) { +// Log.d(TAG, "Network: Missing") +// } +// +// /* Location change listeners */ +// +// /* Location change listeners */try { +// // Define a listener that responds to gps location updates +// locationListenerGPS = object : LocationListener { +// override fun onLocationChanged(location: Location) { +// Log.d( +// TAG, +// "GPS: Latitude: " + location.latitude + ", Longitude = " + location.longitude +// ) // } -// } finally { -// conn.disconnect() +// +// override fun onStatusChanged(provider: String, status: Int, extras: Bundle) { +// Log.d(TAG, "GPS location found 1") +// } +// +// override fun onProviderEnabled(provider: String) { +// Log.d(TAG, "GPS location found 2") +// } +// +// override fun onProviderDisabled(provider: String) { +// Log.d(TAG, "GPS location found 3") +// } +// } +// locationManager.requestLocationUpdates( +// locationProviderGPS, +// 0, +// 0f, +// locationListenerGPS +// ) +// } catch (e: java.lang.Exception) { +// Log.e(TAG, "Location Exception GPS: " + e.message) +// } +// +// try { +// // Define a listener that responds to wifi location updates +// locationListenerNetwork = object : LocationListener { +// override fun onLocationChanged(location: Location) { +// Log.d( +// TAG, +// "NW: Latitude: " + location.latitude + ", Longitude = " + location.longitude +// ) +// } +// +// override fun onStatusChanged(provider: String, status: Int, extras: Bundle) { +// Log.d(TAG, "location found 1") +// } +// +// override fun onProviderEnabled(provider: String) { +// Log.d(TAG, "location found 2") +// } +// +// override fun onProviderDisabled(provider: String) { +// Log.d(TAG, "location found 3") +// } +// } +// locationManager.requestLocationUpdates( +// locationProviderWifi, +// 0, +// 0f, +// locationListenerNetwork +// ) +// } catch (e: java.lang.Exception) { +// Log.e(TAG, "Location Exception: " + e.message) +// } +// +// } + +// override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { +// super.onRequestPermissionsResult(requestCode, permissions, grantResults) +// if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) { +// if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { +// // Permission granted, fetch location +// checkLocation() +// } else { +// // Permission denied +// Toast.makeText(requireContext(), "Location permission denied", Toast.LENGTH_SHORT).show() // } // } // } - + private fun getPublicIpAddr(callback: (String) -> Unit) { + try { + GlobalScope.launch(Dispatchers.IO) { + val url = URL("https://api.ipify.org") + val conn = url.openConnection() as HttpURLConnection + try { + conn.connect() + if (conn.responseCode == HttpURLConnection.HTTP_OK) { + val scanner = Scanner(conn.inputStream) + scanner.useDelimiter("\\A") + if (scanner.hasNext()) { + val ipAddress = scanner.next() + callback(ipAddress) + } + } + } finally { + conn.disconnect() + } + } + }catch (e: Exception){ + Log.e(TAG,e.toString()) + } + } + @SuppressLint("NewApi") + private fun isInternetAvailable(): Boolean { + val connectivityManager = requireActivity().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val network = connectivityManager.activeNetwork ?: return false + val networkCapabilities = connectivityManager.getNetworkCapabilities(network) ?: return false + return networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } }