diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 59c4931..21e4dec 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "com.magix.atcommand" minSdk = 30 targetSdk = 33 - versionCode = 5 - versionName = "0.0.4" + versionCode = 6 + versionName = "0.0.5" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -47,6 +47,7 @@ dependencies { androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") implementation("com.github.mik3y:usb-serial-for-android:3.7.0") implementation("com.google.android.gms:play-services-location:21.0.1") + implementation("androidx.webkit:webkit:1.9.0") } diff --git a/app/src/main/assets/assets/js/custom-chat.js b/app/src/main/assets/assets/js/custom-chat.js index e20a495..e2ebb62 100644 --- a/app/src/main/assets/assets/js/custom-chat.js +++ b/app/src/main/assets/assets/js/custom-chat.js @@ -27,7 +27,8 @@ function receiveJsonUserChat(jsonString, newMessage="false") { message.timestamp, message.favourite, `./../assets/media/avatar/${message.senderUUID}.png`, - index === 0 ? needDivider : false + index === 0 ? needDivider : false, + message.rssi ); }); if(newMessage != "false"){ @@ -56,6 +57,7 @@ function receiveGroupJsonUserChat(jsonString,newMessage = "false"){ message.favourite, `./../assets/media/avatar/${message.senderUUID}.png`, index === 0 ? needDivider : false, + message.rssi, true ); }); @@ -92,7 +94,8 @@ function addMessageDivider() { } // Genera il contenuto della chat -function insertMessagesIntoContainer(messageID, myUUID, senderUUID, receiverUUID, messageText, messageDate, favourite, avatarSrc, needDivider, isGroup=false) { +function insertMessagesIntoContainer(messageID, myUUID, senderUUID, receiverUUID, messageText, messageDate, favourite, avatarSrc, needDivider, rssi, isGroup=false) { + console.log(rssi); const isSelf = myUUID === senderUUID; const messageClass = isSelf ? 'message self' : 'message'; let messageContent = ''; @@ -110,6 +113,11 @@ function insertMessagesIntoContainer(messageID, myUUID, senderUUID, receiverUUID
${isGroup && senderUUID !== myUUID ? `
${senderUUID}
` : ''} ${messageText} + ${!isSelf ? ` +
+ rssi: ${rssi}dB +
+ ` : ''}
diff --git a/app/src/main/java/com/magix/atcommand/MainActivity.kt b/app/src/main/java/com/magix/atcommand/MainActivity.kt index 047dbb1..6cc9676 100644 --- a/app/src/main/java/com/magix/atcommand/MainActivity.kt +++ b/app/src/main/java/com/magix/atcommand/MainActivity.kt @@ -49,6 +49,7 @@ import androidx.core.content.ContextCompat import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationServices import com.hoho.android.usbserial.driver.UsbSerialDriver +import java.net.URLEncoder import java.util.Timer import java.util.TimerTask import kotlin.concurrent.timerTask @@ -197,7 +198,6 @@ class MainActivity : AppCompatActivity() { val webAppInterface = WebAppInterface(this) webView.addJavascriptInterface(webAppInterface, "Android") webView.loadUrl("file:///android_asset/dark-skin/index.html") - } webView.webViewClient = object : WebViewClient() { @@ -209,6 +209,11 @@ class MainActivity : AppCompatActivity() { disableTextareaAndLoadingIndicator() } } + if (currentPage == "Homepage"){ + if (!isDeviceConnected) { + addOverlayDeviceDisconnected() + } + } } } @@ -221,6 +226,7 @@ class MainActivity : AppCompatActivity() { createTableUsers(db) createTableMessage(db) createTableGroups(db) + createTableCoordinates(db) /* Creo il gruppo Multicast se non esiste @@ -611,6 +617,21 @@ class MainActivity : AppCompatActivity() { } } + /* + Carica Google Maps + */ + fun loadMap(){ + val latitude = 40.7128 + val longitude = -74.0060 + val zoomLevel = 15 + + val markerUrl = "https://www.openstreetmap.org/?mlat=$latitude&mlon=$longitude#map=$zoomLevel/$latitude/$longitude" + val encodedUrl = URLEncoder.encode(markerUrl, "UTF-8") + + val mapUrl = "https://www.openstreetmap.org/export/embed.html" + webView.loadUrl(mapUrl) + } + /* Funzione che controlla ogni 3 secondi lo stato della funzione readSerial() */ @@ -833,6 +854,24 @@ class MainActivity : AppCompatActivity() { db.execSQL(query) } + /* + Creo la tabella 'coordinates' + */ + private fun createTableCoordinates(db: SQLiteDatabase) { + val query = """ + CREATE TABLE IF NOT EXISTS coordinates ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + receiverUUID TEXT, + latitude INTEGER DEFAULT NULL, + longitude INTEGER DEFAULT NULL, + rssi INTEGER DEFAULT NULL, + snr INTEGER DEFAULT NULL, + timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + """.trimIndent() + db.execSQL(query) + } + fun deleteMessageById(db: SQLiteDatabase, messageId: Int) { val whereClause = "id = ?" val whereArgs = arrayOf(messageId.toString()) @@ -1486,7 +1525,7 @@ class MainActivity : AppCompatActivity() { val jsonArray = JSONArray() val query = ( - "SELECT id, senderUUID, receiverUUID, content, timestamp, favourite FROM messages " + + "SELECT id, senderUUID, receiverUUID, content, timestamp, favourite, rssi FROM messages " + "WHERE (senderUUID = '$userUUID' OR receiverUUID = '$userUUID') " + "AND hasGroup != 1 " + // Aggiunta della condizione per escludere hasGroup = 1 "ORDER BY timestamp DESC LIMIT 50" @@ -1503,6 +1542,7 @@ class MainActivity : AppCompatActivity() { val content = cursor.getString(3) val timestamp = cursor.getString(4) val favourite = cursor.getInt(5) + val rssi = cursor.getInt(6) val jsonObject = JSONObject() jsonObject.put("id", messageId) @@ -1512,6 +1552,7 @@ class MainActivity : AppCompatActivity() { jsonObject.put("timestamp", timestamp) jsonObject.put("favourite", favourite) jsonObject.put("myUUID", myUUID) + jsonObject.put("rssi", rssi) jsonArray.put(jsonObject) cursor.moveToPrevious() } @@ -1550,7 +1591,7 @@ class MainActivity : AppCompatActivity() { val jsonArray = JSONArray() val query = ( - "SELECT id, senderUUID, receiverUUID, content, timestamp, favourite FROM messages " + + "SELECT id, senderUUID, receiverUUID, content, timestamp, favourite, rssi FROM messages " + "WHERE hasGroup = 1 AND IDGroup = $groupID " + "ORDER BY timestamp DESC LIMIT 50" ) @@ -1565,6 +1606,7 @@ class MainActivity : AppCompatActivity() { val content = cursor.getString(3) val timestamp = cursor.getString(4) val favourite = cursor.getInt(5) + val rssi = cursor.getInt(6) val jsonObject = JSONObject() jsonObject.put("id", messageId) @@ -1574,6 +1616,8 @@ class MainActivity : AppCompatActivity() { jsonObject.put("timestamp", timestamp) jsonObject.put("favourite", favourite) jsonObject.put("myUUID", myUUID) + jsonObject.put("rssi", rssi) + jsonArray.put(jsonObject) } while (cursor.moveToPrevious()) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1afdd6f..39c7172 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,4 +25,5 @@ 3 \u003F AT+ + AIzaSyAaLoeuhYn-pCwhKyQ1AUPsu9rcsSxOodc \ No newline at end of file