update
This commit is contained in:
parent
eceac6ca6d
commit
af008e165c
@ -68,7 +68,6 @@ class DeviceListActivity : Activity() {
|
|||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
// Setup the window
|
// Setup the window
|
||||||
setContentView(R.layout.activity_device_list)
|
setContentView(R.layout.activity_device_list)
|
||||||
|
|
||||||
@ -77,14 +76,6 @@ class DeviceListActivity : Activity() {
|
|||||||
// Set result CANCELED in case the user backs out
|
// Set result CANCELED in case the user backs out
|
||||||
setResult(RESULT_CANCELED)
|
setResult(RESULT_CANCELED)
|
||||||
|
|
||||||
// Initialize array adapters. One for already paired devices and
|
|
||||||
// one for newly discovered devices
|
|
||||||
val pairedDevicesArrayAdapter = ArrayAdapter<String>(this, R.layout.device_list)
|
|
||||||
// val bluetoothAdapter = BluetoothAdapter(this, R.layout.device_list, )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Get the local Bluetooth adapter
|
// Get the local Bluetooth adapter
|
||||||
bluetoothManager =
|
bluetoothManager =
|
||||||
mContext!!.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
|
mContext!!.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
|
||||||
@ -97,22 +88,6 @@ class DeviceListActivity : Activity() {
|
|||||||
|
|
||||||
val bluetoothAdapter = BluetoothAdapter(this, deviceList)
|
val bluetoothAdapter = BluetoothAdapter(this, deviceList)
|
||||||
|
|
||||||
// // If there are paired devices, add each one to the ArrayAdapter
|
|
||||||
// if (pairedDevices.isNotEmpty()) {
|
|
||||||
// for (device in pairedDevices) {
|
|
||||||
//
|
|
||||||
// pairedDevicesArrayAdapter.add(
|
|
||||||
// """
|
|
||||||
// ${device.name}
|
|
||||||
// ${device.address}
|
|
||||||
// """.trimIndent()
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// val noDevices = "No device"
|
|
||||||
// pairedDevicesArrayAdapter.add(noDevices)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Find and set up the ListView for paired devices
|
// Find and set up the ListView for paired devices
|
||||||
val pairedListView: ListView = findViewById<ListView>(R.id.paired_devices)
|
val pairedListView: ListView = findViewById<ListView>(R.id.paired_devices)
|
||||||
pairedListView.adapter = bluetoothAdapter
|
pairedListView.adapter = bluetoothAdapter
|
||||||
|
@ -1,37 +1,30 @@
|
|||||||
package com.rookiedev.hexapod
|
package com.rookiedev.hexapod
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.InetAddresses.isNumericAddress
|
import android.net.InetAddresses.isNumericAddress
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.Editable
|
import android.text.Editable
|
||||||
import android.text.TextWatcher
|
import android.text.TextWatcher
|
||||||
import android.text.method.LinkMovementMethod
|
import android.text.method.LinkMovementMethod
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.AdapterView.OnItemClickListener
|
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.ListView
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.annotation.RequiresApi
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import com.google.android.material.tabs.TabLayout
|
import com.google.android.material.tabs.TabLayout
|
||||||
import com.google.android.material.textfield.TextInputEditText
|
import com.google.android.material.textfield.TextInputEditText
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
import org.w3c.dom.Text
|
|
||||||
|
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
companion object {
|
companion object {
|
||||||
private const val BLUETOOTH_PERMISSION_CODE = 100
|
private const val BLUETOOTH_PERMISSION_CODE = 100
|
||||||
private const val INTERNET_PERMISSION_CODE = 101
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val REQUEST_CONNECT_DEVICE_SECURE = 1
|
private val REQUEST_CONNECT_DEVICE_SECURE = 1
|
||||||
@ -41,6 +34,9 @@ class MainActivity : AppCompatActivity() {
|
|||||||
private val SHAREDPREFSNAME = "com.rookiedev.hexapod_preferences"
|
private val SHAREDPREFSNAME = "com.rookiedev.hexapod_preferences"
|
||||||
private val SHAREDPREFSIP = "IP"
|
private val SHAREDPREFSIP = "IP"
|
||||||
private val SHAREDPREFSPORT = "PORT"
|
private val SHAREDPREFSPORT = "PORT"
|
||||||
|
private val SHARED_PREFS_TAB = "TAB"
|
||||||
|
private val SHARED_PREFS_DEVICE_NAME = "DEVICE_NAME"
|
||||||
|
private val SHARED_PREFS_DEVICE_ADDRESS = "DEVICE_ADDRESS"
|
||||||
|
|
||||||
private var mContext: Context? = null
|
private var mContext: Context? = null
|
||||||
|
|
||||||
@ -50,6 +46,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
private lateinit var deviceName: TextView
|
private lateinit var deviceName: TextView
|
||||||
private lateinit var deviceAddress: TextView
|
private lateinit var deviceAddress: TextView
|
||||||
|
|
||||||
|
private lateinit var tabLayout: TabLayout
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
@ -63,29 +61,25 @@ class MainActivity : AppCompatActivity() {
|
|||||||
val ipLayout = findViewById<TextInputLayout>(R.id.ip_input_layout)
|
val ipLayout = findViewById<TextInputLayout>(R.id.ip_input_layout)
|
||||||
val portLayout = findViewById<TextInputLayout>(R.id.port_input_layout)
|
val portLayout = findViewById<TextInputLayout>(R.id.port_input_layout)
|
||||||
|
|
||||||
val deviceList = findViewById<ListView>(R.id.paired_devices)
|
|
||||||
val selectedDevice = findViewById<ConstraintLayout>(R.id.selected)
|
val selectedDevice = findViewById<ConstraintLayout>(R.id.selected)
|
||||||
deviceName = findViewById<TextView>(R.id.textView_device_name)
|
deviceName = findViewById(R.id.textView_device_name)
|
||||||
deviceAddress = findViewById<TextView>(R.id.textView_device_address)
|
deviceAddress = findViewById(R.id.textView_device_address)
|
||||||
|
|
||||||
val sourceLink = findViewById<TextView>(R.id.textView_github)
|
val sourceLink = findViewById<TextView>(R.id.textView_github)
|
||||||
sourceLink.movementMethod = LinkMovementMethod.getInstance()
|
sourceLink.movementMethod = LinkMovementMethod.getInstance()
|
||||||
|
|
||||||
|
tabLayout = findViewById(R.id.tab)
|
||||||
|
|
||||||
val tabLayout = findViewById<TabLayout>(R.id.tab)
|
|
||||||
tabLayout.addOnTabSelectedListener(
|
tabLayout.addOnTabSelectedListener(
|
||||||
object : TabLayout.OnTabSelectedListener {
|
object : TabLayout.OnTabSelectedListener {
|
||||||
@RequiresApi(Build.VERSION_CODES.S)
|
|
||||||
override fun onTabSelected(tab: TabLayout.Tab?) {
|
override fun onTabSelected(tab: TabLayout.Tab?) {
|
||||||
if (tab!!.text == "WiFi") {
|
if (tab!!.text == "WiFi") {
|
||||||
ipLayout.visibility = View.VISIBLE
|
ipLayout.visibility = View.VISIBLE
|
||||||
portLayout.visibility = View.VISIBLE
|
portLayout.visibility = View.VISIBLE
|
||||||
deviceList.visibility = View.GONE
|
|
||||||
selectedDevice.visibility = View.GONE
|
selectedDevice.visibility = View.GONE
|
||||||
} else if (tab.text == "Bluetooth") {
|
} else if (tab.text == "Bluetooth") {
|
||||||
ipLayout.visibility = View.GONE
|
ipLayout.visibility = View.GONE
|
||||||
portLayout.visibility = View.GONE
|
portLayout.visibility = View.GONE
|
||||||
deviceList.visibility = View.VISIBLE
|
|
||||||
selectedDevice.visibility = View.VISIBLE
|
selectedDevice.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -99,7 +93,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
selectedDevice.setOnClickListener {
|
selectedDevice.setOnClickListener {
|
||||||
checkPermission(Manifest.permission.BLUETOOTH_CONNECT, BLUETOOTH_PERMISSION_CODE)
|
checkPermission("android.permission.BLUETOOTH_CONNECT", BLUETOOTH_PERMISSION_CODE)
|
||||||
val serverIntent = Intent(this, DeviceListActivity::class.java)
|
val serverIntent = Intent(this, DeviceListActivity::class.java)
|
||||||
resultLauncher.launch(serverIntent)
|
resultLauncher.launch(serverIntent)
|
||||||
// startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_INSECURE)
|
// startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_INSECURE)
|
||||||
@ -107,6 +101,17 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
readSharedPref()
|
readSharedPref()
|
||||||
|
|
||||||
|
if (tabLayout.selectedTabPosition == 0){
|
||||||
|
ipLayout.visibility = View.VISIBLE
|
||||||
|
portLayout.visibility = View.VISIBLE
|
||||||
|
selectedDevice.visibility = View.GONE
|
||||||
|
} else if (tabLayout.selectedTabPosition == 1){
|
||||||
|
checkPermission("android.permission.BLUETOOTH_CONNECT", BLUETOOTH_PERMISSION_CODE)
|
||||||
|
ipLayout.visibility = View.GONE
|
||||||
|
portLayout.visibility = View.GONE
|
||||||
|
selectedDevice.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
buttonConnect.setOnClickListener {
|
buttonConnect.setOnClickListener {
|
||||||
// your code to perform when the user clicks on the button
|
// your code to perform when the user clicks on the button
|
||||||
|
|
||||||
@ -147,7 +152,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var resultLauncher =
|
private var resultLauncher =
|
||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||||
if (result.resultCode == Activity.RESULT_OK) {
|
if (result.resultCode == Activity.RESULT_OK) {
|
||||||
// There are no request codes
|
// There are no request codes
|
||||||
@ -166,12 +171,12 @@ class MainActivity : AppCompatActivity() {
|
|||||||
permission
|
permission
|
||||||
) == PackageManager.PERMISSION_DENIED
|
) == PackageManager.PERMISSION_DENIED
|
||||||
) {
|
) {
|
||||||
|
|
||||||
// Requesting the permission
|
// Requesting the permission
|
||||||
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(permission), requestCode)
|
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(permission), requestCode)
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this@MainActivity, "Permission already granted", Toast.LENGTH_SHORT)
|
// Toast.makeText(this@MainActivity, "Permission already granted", Toast.LENGTH_SHORT)
|
||||||
.show()
|
// .show()
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,23 +191,20 @@ class MainActivity : AppCompatActivity() {
|
|||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||||
if (requestCode == BLUETOOTH_PERMISSION_CODE) {
|
if (requestCode == BLUETOOTH_PERMISSION_CODE) {
|
||||||
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
Toast.makeText(this@MainActivity, "Camera Permission Granted", Toast.LENGTH_SHORT)
|
Toast.makeText(this@MainActivity, "Bluetooth Permission Granted", Toast.LENGTH_SHORT)
|
||||||
.show()
|
.show()
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this@MainActivity, "Camera Permission Denied", Toast.LENGTH_SHORT)
|
Toast.makeText(this@MainActivity, "Bluetooth Permission Denied", Toast.LENGTH_SHORT)
|
||||||
.show()
|
|
||||||
}
|
|
||||||
} else if (requestCode == INTERNET_PERMISSION_CODE) {
|
|
||||||
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(this@MainActivity, "Storage Permission Granted", Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(this@MainActivity, "Storage Permission Denied", Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
saveSharedPref()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun readSharedPref() {
|
private fun readSharedPref() {
|
||||||
val prefs = getSharedPreferences(
|
val prefs = getSharedPreferences(
|
||||||
@ -212,6 +214,18 @@ class MainActivity : AppCompatActivity() {
|
|||||||
// read values from the shared preferences
|
// read values from the shared preferences
|
||||||
ipInput.setText(prefs.getString(SHAREDPREFSIP, "192.168.1.127"))
|
ipInput.setText(prefs.getString(SHAREDPREFSIP, "192.168.1.127"))
|
||||||
portInput.setText(prefs.getString(SHAREDPREFSPORT, "1234"))
|
portInput.setText(prefs.getString(SHAREDPREFSPORT, "1234"))
|
||||||
|
|
||||||
|
val selectedTab = prefs.getString(SHARED_PREFS_TAB, "WiFi")
|
||||||
|
if (selectedTab == "WiFi"){
|
||||||
|
val tab = tabLayout.getTabAt(0)
|
||||||
|
tab!!.select()
|
||||||
|
} else if (selectedTab == "Bluetooth") {
|
||||||
|
val tab = tabLayout.getTabAt(1)
|
||||||
|
tab!!.select()
|
||||||
|
}
|
||||||
|
|
||||||
|
deviceName.text = prefs.getString(SHARED_PREFS_DEVICE_NAME, "Click to select a device")
|
||||||
|
deviceAddress.text = prefs.getString(SHARED_PREFS_DEVICE_ADDRESS, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveSharedPref() {
|
private fun saveSharedPref() {
|
||||||
@ -222,6 +236,15 @@ class MainActivity : AppCompatActivity() {
|
|||||||
val editor = prefs.edit()
|
val editor = prefs.edit()
|
||||||
editor.putString(SHAREDPREFSIP, ipInput.text.toString())
|
editor.putString(SHAREDPREFSIP, ipInput.text.toString())
|
||||||
editor.putString(SHAREDPREFSPORT, portInput.text.toString())
|
editor.putString(SHAREDPREFSPORT, portInput.text.toString())
|
||||||
|
if (tabLayout.selectedTabPosition == 0){
|
||||||
|
editor.putString(SHARED_PREFS_TAB, "WiFi")
|
||||||
|
} else if (tabLayout.selectedTabPosition == 1){
|
||||||
|
editor.putString(SHARED_PREFS_TAB, "Bluetooth")
|
||||||
|
}
|
||||||
|
|
||||||
|
editor.putString(SHARED_PREFS_DEVICE_NAME, deviceName.text.toString())
|
||||||
|
editor.putString(SHARED_PREFS_DEVICE_ADDRESS, deviceAddress.text.toString())
|
||||||
|
|
||||||
editor.apply()
|
editor.apply()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -37,11 +37,13 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@+id/hexapod_logo">
|
app:layout_constraintTop_toBottomOf="@+id/hexapod_logo">
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabItem
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:id="@+id/wifi_tab"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="WiFi" />
|
android:text="WiFi" />
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabItem
|
<com.google.android.material.tabs.TabItem
|
||||||
|
android:id="@+id/bluetooth_tab"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Bluetooth" />
|
android:text="Bluetooth" />
|
||||||
@ -92,19 +94,6 @@
|
|||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<ListView
|
|
||||||
android:id="@+id/paired_devices"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:stackFromBottom="true"
|
|
||||||
android:orientation="vertical"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/port_input_layout"
|
|
||||||
app:layout_constraintBottom_toTopOf="@id/selected"
|
|
||||||
android:visibility="visible"/>
|
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/selected"
|
android:id="@+id/selected"
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright (C) 2014 The Android Open Source Project
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="5dp"
|
|
||||||
android:textSize="18sp"
|
|
||||||
/>
|
|
@ -6,7 +6,9 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:background="?android:attr/selectableItemBackground">
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:paddingTop="24dp"
|
||||||
|
android:paddingBottom="24dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/imageView"
|
android:id="@+id/imageView"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user