From e44294bfced8d043acbe46e7d89530eb7fb42a81 Mon Sep 17 00:00:00 2001 From: BRNSystems Date: Mon, 31 May 2021 19:54:09 +0200 Subject: [PATCH] Initial commit --- .gitignore | 16 ++ .idea/.gitignore | 3 + .idea/.name | 1 + .idea/codeStyles/Project.xml | 123 +++++++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/compiler.xml | 6 + .idea/discord.xml | 6 + .idea/gradle.xml | 20 ++ .idea/jarRepositories.xml | 30 +++ .idea/misc.xml | 9 + .idea/runConfigurations.xml | 10 + .idea/vcs.xml | 6 + app/.gitignore | 1 + app/build.gradle | 51 ++++++ app/proguard-rules.pro | 21 +++ app/src/main/AndroidManifest.xml | 56 ++++++ .../systems/brn/gpsgame1/LoginActivity.kt | 49 +++++ .../java/systems/brn/gpsgame1/MapsActivity.kt | 170 +++++++++++++++++ app/src/main/res/drawable-v24/aimer.png | Bin 0 -> 12965 bytes .../drawable-v24/ic_launcher_foreground.xml | 30 +++ app/src/main/res/drawable-v24/smiley.png | Bin 0 -> 12911 bytes .../res/drawable/ic_launcher_background.xml | 170 +++++++++++++++++ app/src/main/res/layout/activity_login.xml | 54 ++++++ app/src/main/res/layout/activity_maps.xml | 9 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3593 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5339 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2636 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3388 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4926 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7472 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7909 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11873 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10652 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16570 bytes app/src/main/res/values/colors.xml | 12 ++ app/src/main/res/values/strings.xml | 8 + app/src/main/res/xml/backup_descriptor.xml | 4 + .../release/res/values/google_maps_api.xml | 20 ++ build.gradle | 27 +++ gradle.properties | 19 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++++++++++++++ gradlew.bat | 84 +++++++++ settings.gradle | 2 + 47 files changed, 1210 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/discord.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/systems/brn/gpsgame1/LoginActivity.kt create mode 100644 app/src/main/java/systems/brn/gpsgame1/MapsActivity.kt create mode 100644 app/src/main/res/drawable-v24/aimer.png create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable-v24/smiley.png create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/layout/activity_login.xml create mode 100644 app/src/main/res/layout/activity_maps.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/xml/backup_descriptor.xml create mode 100644 app/src/release/res/values/google_maps_api.xml create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fecd10e --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +/app/src/debug/res/values/google_maps_api.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..843f922 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +GPS Game \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..7643783 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,123 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..cd711a0 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..5cd135a --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..0380d8d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6199cc2 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..f88ec47 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "systems.brn.gpsgame1" + minSdkVersion 19 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures { + viewBinding true + } +} + +dependencies { + + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.5.0' + implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.gms:play-services-maps:17.0.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'com.google.android.gms:play-services-location:18.0.0' + implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ddcbc0e --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/systems/brn/gpsgame1/LoginActivity.kt b/app/src/main/java/systems/brn/gpsgame1/LoginActivity.kt new file mode 100644 index 0000000..d08c11b --- /dev/null +++ b/app/src/main/java/systems/brn/gpsgame1/LoginActivity.kt @@ -0,0 +1,49 @@ +package systems.brn.gpsgame1 + +import android.content.Context +import android.content.Intent +import android.content.SharedPreferences +import android.os.Bundle +import android.widget.Button +import android.widget.EditText +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import okhttp3.ConnectionSpec +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response +import java.net.URL + + +class LoginActivity : AppCompatActivity() { + private lateinit var sharedPreferences: SharedPreferences + private val sharedPrefFile = "MyConfig" + private val url: String = "http://10.10.10.52/checklogin.php" + private var client = OkHttpClient.Builder().connectionSpecs(listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.COMPATIBLE_TLS)).build() + private val request = Request.Builder().url(URL(url)).build() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_login) + sharedPreferences = this.getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE) + val mBtnLogin = this.findViewById(R.id.signin) as Button + mBtnLogin.setOnClickListener { + val email = findViewById(R.id.email) + val password = findViewById(R.id.password) + with(sharedPreferences.edit()) { + putString("email", email.text.toString()) + putString("password", password.text.toString()) + putInt("configured", 1) + apply() + } + val response: Response = client.newCall(request).execute() + val stringresponse: String? = response.body?.string() + if (stringresponse == "OK") { + Toast.makeText(this, "Permission granted, run the main app", Toast.LENGTH_LONG).show() + val intent = Intent(this, MapsActivity::class.java) + startActivity(intent) + } else { + Toast.makeText(this, "Login failed", Toast.LENGTH_LONG).show() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/systems/brn/gpsgame1/MapsActivity.kt b/app/src/main/java/systems/brn/gpsgame1/MapsActivity.kt new file mode 100644 index 0000000..6265649 --- /dev/null +++ b/app/src/main/java/systems/brn/gpsgame1/MapsActivity.kt @@ -0,0 +1,170 @@ +@file:Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") + +package systems.brn.gpsgame1 + +import android.Manifest +import android.content.Context +import android.content.Intent +import android.content.SharedPreferences +import android.content.pm.PackageManager +import android.location.Location +import android.os.Build +import android.os.Bundle +import android.os.Looper +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import com.google.android.gms.location.* +import com.google.android.gms.maps.CameraUpdateFactory +import com.google.android.gms.maps.GoogleMap +import com.google.android.gms.maps.OnMapReadyCallback +import com.google.android.gms.maps.SupportMapFragment +import com.google.android.gms.maps.model.* +import okhttp3.ConnectionSpec +import okhttp3.OkHttpClient +import systems.brn.gpsgame1.databinding.ActivityMapsBinding + + +class MapsActivity : AppCompatActivity(), OnMapReadyCallback { + private val sharedPrefFile = "MyConfig" + private var mFusedLocationProviderClient: FusedLocationProviderClient? = null + private val interval: Long = 2000 + private val fastestinterval: Long = 1000 + private lateinit var mLastLocation: Location + private lateinit var mLocationRequest: LocationRequest + private lateinit var mymarker: Marker + private lateinit var mycircle: Circle + private val requestpermissionslocation = 10 + private lateinit var mMap: GoogleMap + private lateinit var binding: ActivityMapsBinding + private var firsttime = true + private lateinit var sharedPreferences: SharedPreferences + private var client = OkHttpClient.Builder().connectionSpecs(listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.COMPATIBLE_TLS)).build() + private fun checkPermissionForLocation(context: Context): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == + PackageManager.PERMISSION_GRANTED){ + true + }else{ + // Show the permission request + ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), requestpermissionslocation) + false + } + } else { + true + } + } + + + private fun loginerror(){ + val intent = Intent(this, MapsActivity::class.java) + startActivity(intent) + } + + private fun startLocationUpdates() { + + // Create the location request to start receiving updates + + mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY + mLocationRequest.interval = interval + mLocationRequest.fastestInterval = fastestinterval + + // Create LocationSettingsRequest object using location request + val builder = LocationSettingsRequest.Builder() + builder.addLocationRequest(mLocationRequest) + val locationSettingsRequest = builder.build() + + val settingsClient = LocationServices.getSettingsClient(this) + settingsClient.checkLocationSettings(locationSettingsRequest) + + mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this) + // new Google API SDK v11 uses getFusedLocationProviderClient(this) + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + + + return + } + mFusedLocationProviderClient!!.requestLocationUpdates(mLocationRequest, mLocationCallback, + Looper.myLooper()) + } + + + private fun center(){ + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(mLastLocation.latitude, mLastLocation.longitude), 18.0f)) + } + + fun onLocationChanged(location: Location) { + // New location has now been determined + + mLastLocation = location + try { + mymarker.remove() + } + catch (e: Exception){ } + try { + mycircle.remove() + } + catch (e: Exception){ } + try { + mymarker = mMap.addMarker(MarkerOptions().position(LatLng(mLastLocation.latitude, mLastLocation.longitude)).title("My Position").icon(BitmapDescriptorFactory.fromResource(R.drawable.smiley))) + if (firsttime){ + center() + firsttime = false + } + mycircle = mMap.addCircle(CircleOptions().center(LatLng(mLastLocation.latitude, mLastLocation.longitude)).radius(mLastLocation.accuracy.toDouble()).strokeColor(R.color.BLUE).fillColor(R.color.LIGHTBLUE)) + } + catch (e: SecurityException){ + e.printStackTrace() + } + // You can now create a LatLng Object for use with maps + } + + private val mLocationCallback = object : LocationCallback() { + override fun onLocationResult(locationResult: LocationResult) { + // do work here + onLocationChanged(locationResult.lastLocation) + } + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == requestpermissionslocation) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + //We have to add startlocationUpdate() method later instead of Toast + Toast.makeText(this,"Permission granted",Toast.LENGTH_SHORT).show() + } + } + } + + private fun dologin(){ + val configured = sharedPreferences.getInt("configured", 0) + if (configured == 0){ + loginerror() + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityMapsBinding.inflate(layoutInflater) + setContentView(binding.root) + sharedPreferences = this.getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE) + dologin() + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment + mapFragment.getMapAsync(this) + } + + override fun onMapReady(googleMap: GoogleMap) { + mMap = googleMap + mLocationRequest = LocationRequest.create().apply { + interval = interval + fastestInterval = fastestinterval + priority = LocationRequest.PRIORITY_HIGH_ACCURACY + maxWaitTime = 100 + } + checkPermissionForLocation(this) + startLocationUpdates() + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/aimer.png b/app/src/main/res/drawable-v24/aimer.png new file mode 100644 index 0000000000000000000000000000000000000000..c5aa725a403daf8b13b7266801279650d4f65f17 GIT binary patch literal 12965 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 JDx{19{tvca?O6Z- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/smiley.png b/app/src/main/res/drawable-v24/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..21b4a6e81882b99384ec6b2529caa4dbc7066209 GIT binary patch literal 12911 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 UGyr2m8xx?asHIRVXBF{(0H;tXUH||9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..3f102a6 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,54 @@ + + + + + + + +