update
This commit is contained in:
		
							
								
								
									
										1
									
								
								software/android/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								software/android/.idea/misc.xml
									
									
									
										generated
									
									
									
								
							@@ -5,6 +5,7 @@
 | 
			
		||||
      <map>
 | 
			
		||||
        <entry key="..\:/Users/rooki/Documents/GitHub/hexapod/software/android/app/src/main/res/layout/activity_control.xml" value="0.32472826086956524" />
 | 
			
		||||
        <entry key="..\:/Users/rooki/Documents/GitHub/hexapod/software/android/app/src/main/res/layout/activity_main.xml" value="0.2717391304347826" />
 | 
			
		||||
        <entry key="..\:/Users/rooki/Documents/GitHub/hexapod/software/android/app/src/main/res/layout/device_name.xml" value="0.2826086956521739" />
 | 
			
		||||
      </map>
 | 
			
		||||
    </option>
 | 
			
		||||
  </component>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,48 @@
 | 
			
		||||
package com.rookiedev.hexapod
 | 
			
		||||
 | 
			
		||||
import android.Manifest
 | 
			
		||||
import android.bluetooth.BluetoothDevice
 | 
			
		||||
import android.bluetooth.BluetoothManager
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.content.pm.PackageManager
 | 
			
		||||
import android.net.InetAddresses.isNumericAddress
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.text.Editable
 | 
			
		||||
import android.text.TextWatcher
 | 
			
		||||
import android.text.method.LinkMovementMethod
 | 
			
		||||
import android.widget.Button
 | 
			
		||||
import android.widget.TextView
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.widget.*
 | 
			
		||||
import android.widget.AdapterView.OnItemClickListener
 | 
			
		||||
import androidx.annotation.RequiresApi
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import androidx.core.app.ActivityCompat
 | 
			
		||||
import com.google.android.material.tabs.TabLayout
 | 
			
		||||
import com.google.android.material.textfield.TextInputEditText
 | 
			
		||||
import com.google.android.material.textfield.TextInputLayout
 | 
			
		||||
import java.lang.String
 | 
			
		||||
import kotlin.CharSequence
 | 
			
		||||
import kotlin.Int
 | 
			
		||||
import kotlin.apply
 | 
			
		||||
import kotlin.toString
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MainActivity : AppCompatActivity() {
 | 
			
		||||
    companion object {
 | 
			
		||||
        private const val BLUETOOTH_PERMISSION_CODE = 100
 | 
			
		||||
        private const val INTERNET_PERMISSION_CODE = 101
 | 
			
		||||
    }
 | 
			
		||||
    private val SHAREDPREFSNAME = "com.rookiedev.hexapod_preferences"
 | 
			
		||||
    private val SHAREDPREFSIP = "IP"
 | 
			
		||||
    private val SHAREDPREFSPORT = "PORT"
 | 
			
		||||
 | 
			
		||||
    private lateinit var ipInput:TextInputEditText
 | 
			
		||||
    private lateinit var portInput:TextInputEditText
 | 
			
		||||
    private var mContext: Context?=null
 | 
			
		||||
 | 
			
		||||
    private lateinit var ipInput: TextInputEditText
 | 
			
		||||
    private lateinit var portInput: TextInputEditText
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
        setContentView(R.layout.activity_main)
 | 
			
		||||
 | 
			
		||||
        mContext = applicationContext
 | 
			
		||||
 | 
			
		||||
        ipInput = findViewById(R.id.ip_input)
 | 
			
		||||
        portInput = findViewById(R.id.port_input)
 | 
			
		||||
        val buttonConnect = findViewById<Button>(R.id.button_connect)
 | 
			
		||||
@@ -37,9 +50,98 @@ class MainActivity : AppCompatActivity() {
 | 
			
		||||
        val ipLayout = findViewById<TextInputLayout>(R.id.ip_input_layout)
 | 
			
		||||
        val portLayout = findViewById<TextInputLayout>(R.id.port_input_layout)
 | 
			
		||||
 | 
			
		||||
        val deviceList = findViewById<ListView>(R.id.paired_devices)
 | 
			
		||||
 | 
			
		||||
        val sourceLink = findViewById<TextView>(R.id.textView_github)
 | 
			
		||||
        sourceLink.movementMethod = LinkMovementMethod.getInstance()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        val tabLayout = findViewById<TabLayout>(R.id.tab)
 | 
			
		||||
        tabLayout.addOnTabSelectedListener(
 | 
			
		||||
            object : TabLayout.OnTabSelectedListener {
 | 
			
		||||
                @RequiresApi(Build.VERSION_CODES.S)
 | 
			
		||||
                override fun onTabSelected(tab: TabLayout.Tab?) {
 | 
			
		||||
                    if (tab!!.text == "WiFi") {
 | 
			
		||||
                        ipLayout.visibility = View.VISIBLE
 | 
			
		||||
                        portLayout.visibility = View.VISIBLE
 | 
			
		||||
                        deviceList.visibility = View.GONE
 | 
			
		||||
                    } else if (tab.text == "Bluetooth") {
 | 
			
		||||
                        checkPermission(Manifest.permission.BLUETOOTH_CONNECT, BLUETOOTH_PERMISSION_CODE)
 | 
			
		||||
                        if (ActivityCompat.checkSelfPermission(
 | 
			
		||||
                                mContext!!,
 | 
			
		||||
                                Manifest.permission.BLUETOOTH_CONNECT
 | 
			
		||||
                            ) != PackageManager.PERMISSION_GRANTED
 | 
			
		||||
                        ) {
 | 
			
		||||
                            // TODO: Consider calling
 | 
			
		||||
                            //    ActivityCompat#requestPermissions
 | 
			
		||||
                            // here to request the missing permissions, and then overriding
 | 
			
		||||
                            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
 | 
			
		||||
                            //                                          int[] grantResults)
 | 
			
		||||
                            // to handle the case where the user grants the permission. See the documentation
 | 
			
		||||
                            // for ActivityCompat#requestPermissions for more details.
 | 
			
		||||
                            return
 | 
			
		||||
                        }
 | 
			
		||||
                        ipLayout.visibility = View.GONE
 | 
			
		||||
                        portLayout.visibility = View.GONE
 | 
			
		||||
                        deviceList.visibility = View.VISIBLE
 | 
			
		||||
 | 
			
		||||
                        // Initialize array adapters. One for already paired devices and
 | 
			
		||||
                        // one for newly discovered devices
 | 
			
		||||
 | 
			
		||||
                        // Initialize array adapters. One for already paired devices and
 | 
			
		||||
                        // one for newly discovered devices
 | 
			
		||||
                        val pairedDevicesArrayAdapter =
 | 
			
		||||
                            ArrayAdapter<kotlin.String>(mContext!!, R.layout.device_name)
 | 
			
		||||
 | 
			
		||||
                        // Find and set up the ListView for paired devices
 | 
			
		||||
 | 
			
		||||
                        // Find and set up the ListView for paired devices
 | 
			
		||||
                        val pairedListView = findViewById<ListView>(R.id.paired_devices)
 | 
			
		||||
                        pairedListView.adapter = pairedDevicesArrayAdapter
 | 
			
		||||
                        pairedListView.onItemClickListener = mDeviceClickListener
 | 
			
		||||
 | 
			
		||||
                        // Get the local Bluetooth adapter
 | 
			
		||||
 | 
			
		||||
                        // Get the local Bluetooth adapter
 | 
			
		||||
//                        mBtAdapter = BluetoothAdapter.getDefaultAdapter()
 | 
			
		||||
                        val bluetoothManager = mContext!!.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
 | 
			
		||||
                        bluetoothManager.adapter
 | 
			
		||||
 | 
			
		||||
                        // Get a set of currently paired devices
 | 
			
		||||
 | 
			
		||||
                        // Get a set of currently paired devices
 | 
			
		||||
                        val pairedDevices: Set<BluetoothDevice> = bluetoothManager.adapter.bondedDevices
 | 
			
		||||
 | 
			
		||||
                        // If there are paired devices, add each one to the ArrayAdapter
 | 
			
		||||
 | 
			
		||||
                        // If there are paired devices, add each one to the ArrayAdapter
 | 
			
		||||
                        if (pairedDevices.isNotEmpty()) {
 | 
			
		||||
//                            findViewById<View>(R.id.title_paired_devices).visibility = View.VISIBLE
 | 
			
		||||
                            for (device in pairedDevices) {
 | 
			
		||||
                                pairedDevicesArrayAdapter.add(
 | 
			
		||||
                                    """
 | 
			
		||||
                                    ${device.name}
 | 
			
		||||
                                    ${device.address}
 | 
			
		||||
                                    """.trimIndent()
 | 
			
		||||
                                )
 | 
			
		||||
                            }
 | 
			
		||||
                            pairedListView.layoutParams.height = 153*6
 | 
			
		||||
                        }
 | 
			
		||||
//                        else {
 | 
			
		||||
//                            val noDevices = resources.getText(R.string.none_paired).toString()
 | 
			
		||||
//                            pairedDevicesArrayAdapter.add(noDevices)
 | 
			
		||||
//                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onTabUnselected(tab: TabLayout.Tab?) {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onTabReselected(tab: TabLayout.Tab?) {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        readSharedPref()
 | 
			
		||||
 | 
			
		||||
        buttonConnect.setOnClickListener {
 | 
			
		||||
@@ -82,6 +184,59 @@ class MainActivity : AppCompatActivity() {
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Function to check and request permission.
 | 
			
		||||
    private fun checkPermission(permission: String, requestCode: Int) {
 | 
			
		||||
        if (ActivityCompat.checkSelfPermission(this@MainActivity, permission) == PackageManager.PERMISSION_DENIED) {
 | 
			
		||||
 | 
			
		||||
            // Requesting the permission
 | 
			
		||||
            ActivityCompat.requestPermissions(this@MainActivity, arrayOf(permission), requestCode)
 | 
			
		||||
        } else {
 | 
			
		||||
            Toast.makeText(this@MainActivity, "Permission already granted", Toast.LENGTH_SHORT).show()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // This function is called when the user accepts or decline the permission.
 | 
			
		||||
    // Request Code is used to check which permission called this function.
 | 
			
		||||
    // This request code is provided when the user is prompt for permission.
 | 
			
		||||
    override fun onRequestPermissionsResult(requestCode: Int,
 | 
			
		||||
                                            permissions: Array<String>,
 | 
			
		||||
                                            grantResults: IntArray) {
 | 
			
		||||
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
 | 
			
		||||
        if (requestCode == BLUETOOTH_PERMISSION_CODE) {
 | 
			
		||||
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 | 
			
		||||
                Toast.makeText(this@MainActivity, "Camera Permission Granted", Toast.LENGTH_SHORT).show()
 | 
			
		||||
            } else {
 | 
			
		||||
                Toast.makeText(this@MainActivity, "Camera 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()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The on-click listener for all devices in the ListViews
 | 
			
		||||
     */
 | 
			
		||||
    private val mDeviceClickListener =
 | 
			
		||||
        OnItemClickListener { av, v, arg2, arg3 -> // Cancel discovery because it's costly and we're about to connect
 | 
			
		||||
//            mBtAdapter.cancelDiscovery()
 | 
			
		||||
//
 | 
			
		||||
//            // Get the device MAC address, which is the last 17 chars in the View
 | 
			
		||||
//            val info = (v as TextView).text.toString()
 | 
			
		||||
//            val address = info.substring(info.length - 17)
 | 
			
		||||
//
 | 
			
		||||
//            // Create the result Intent and include the MAC address
 | 
			
		||||
//            val intent = Intent()
 | 
			
		||||
//            intent.putExtra(EXTRA_DEVICE_ADDRESS, address)
 | 
			
		||||
//
 | 
			
		||||
//            // Set result and finish this Activity
 | 
			
		||||
//            setResult(RESULT_OK, intent)
 | 
			
		||||
//            finish()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private fun readSharedPref() {
 | 
			
		||||
        val prefs = getSharedPreferences(
 | 
			
		||||
            SHAREDPREFSNAME,
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    android:width="24dp"
 | 
			
		||||
    android:height="24dp"
 | 
			
		||||
    android:viewportWidth="24"
 | 
			
		||||
    android:viewportHeight="24"
 | 
			
		||||
    android:tint="?attr/colorControlNormal">
 | 
			
		||||
  <path
 | 
			
		||||
      android:fillColor="@android:color/white"
 | 
			
		||||
      android:pathData="M17.71,7.71L12,2h-1v7.59L6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 11,14.41L11,22h1l5.71,-5.71 -4.3,-4.29 4.3,-4.29zM13,5.83l1.88,1.88L13,9.59L13,5.83zM14.88,16.29L13,18.17v-3.76l1.88,1.88z"/>
 | 
			
		||||
</vector>
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    android:width="24dp"
 | 
			
		||||
    android:height="24dp"
 | 
			
		||||
    android:viewportWidth="24"
 | 
			
		||||
    android:viewportHeight="24"
 | 
			
		||||
    android:tint="?attr/colorControlNormal">
 | 
			
		||||
  <path
 | 
			
		||||
      android:fillColor="@android:color/white"
 | 
			
		||||
      android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
 | 
			
		||||
</vector>
 | 
			
		||||
@@ -55,7 +55,8 @@
 | 
			
		||||
            app:layout_constraintBottom_toTopOf="@id/port_input_layout"
 | 
			
		||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
            app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
            app:layout_constraintTop_toBottomOf="@+id/tab">
 | 
			
		||||
            app:layout_constraintTop_toBottomOf="@+id/tab"
 | 
			
		||||
            android:visibility="visible">
 | 
			
		||||
 | 
			
		||||
            <com.google.android.material.textfield.TextInputEditText
 | 
			
		||||
                android:id="@+id/ip_input"
 | 
			
		||||
@@ -73,10 +74,11 @@
 | 
			
		||||
            android:layout_height="wrap_content"
 | 
			
		||||
            android:layout_marginBottom="4dp"
 | 
			
		||||
            app:errorEnabled="true"
 | 
			
		||||
            app:layout_constraintBottom_toTopOf="@id/button_connect"
 | 
			
		||||
            app:layout_constraintBottom_toTopOf="@id/paired_devices"
 | 
			
		||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
            app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
            app:layout_constraintTop_toBottomOf="@id/ip_input_layout">
 | 
			
		||||
            app:layout_constraintTop_toBottomOf="@id/ip_input_layout"
 | 
			
		||||
            android:visibility="visible">
 | 
			
		||||
 | 
			
		||||
            <com.google.android.material.textfield.TextInputEditText
 | 
			
		||||
                android:id="@+id/port_input"
 | 
			
		||||
@@ -88,6 +90,26 @@
 | 
			
		||||
 | 
			
		||||
        </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/button_connect"
 | 
			
		||||
            android:visibility="visible"/>
 | 
			
		||||
 | 
			
		||||
<!--        <include-->
 | 
			
		||||
<!--            layout="@layout/device_name"-->
 | 
			
		||||
<!--            app:layout_constraintEnd_toEndOf="parent"-->
 | 
			
		||||
<!--            app:layout_constraintHorizontal_bias="1.0"-->
 | 
			
		||||
<!--            app:layout_constraintStart_toStartOf="parent"-->
 | 
			
		||||
<!--            app:layout_constraintTop_toBottomOf="@+id/paired_devices" />-->
 | 
			
		||||
 | 
			
		||||
        <Button
 | 
			
		||||
            android:id="@+id/button_connect"
 | 
			
		||||
            android:layout_width="0dp"
 | 
			
		||||
@@ -98,7 +120,7 @@
 | 
			
		||||
            android:text="Connect"
 | 
			
		||||
            app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
            app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
            app:layout_constraintTop_toBottomOf="@id/port_input_layout" />
 | 
			
		||||
            app:layout_constraintTop_toBottomOf="@id/paired_devices" />
 | 
			
		||||
 | 
			
		||||
        <TextView
 | 
			
		||||
            android:id="@+id/textView_github"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								software/android/app/src/main/res/layout/device_name.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								software/android/app/src/main/res/layout/device_name.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
<?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"
 | 
			
		||||
    />
 | 
			
		||||
							
								
								
									
										48
									
								
								software/android/app/src/main/res/layout/selected_device.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								software/android/app/src/main/res/layout/selected_device.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
			
		||||
    xmlns:tools="http://schemas.android.com/tools"
 | 
			
		||||
    android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent">
 | 
			
		||||
 | 
			
		||||
    <ImageView
 | 
			
		||||
        android:id="@+id/imageView"
 | 
			
		||||
        android:layout_width="40dp"
 | 
			
		||||
        android:layout_height="40dp"
 | 
			
		||||
        android:padding="8dp"
 | 
			
		||||
        app:layout_constraintBottom_toBottomOf="parent"
 | 
			
		||||
        app:layout_constraintStart_toStartOf="parent"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
        app:layout_constraintEnd_toStartOf="@+id/textView"
 | 
			
		||||
        app:srcCompat="@drawable/ic_baseline_bluetooth_24" />
 | 
			
		||||
 | 
			
		||||
    <TextView
 | 
			
		||||
        android:id="@+id/textView"
 | 
			
		||||
        android:layout_width="wrap_content"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:textAppearance="?attr/textAppearanceHeadline6"
 | 
			
		||||
        android:text="TextView"
 | 
			
		||||
        app:layout_constraintBottom_toTopOf="@+id/textView2"
 | 
			
		||||
        app:layout_constraintStart_toEndOf="@+id/imageView"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
        app:layout_constraintVertical_chainStyle="packed" />
 | 
			
		||||
 | 
			
		||||
    <TextView
 | 
			
		||||
        android:id="@+id/textView2"
 | 
			
		||||
        android:layout_width="wrap_content"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:textAppearance="?attr/textAppearanceBody2"
 | 
			
		||||
        android:text="TextView"
 | 
			
		||||
        app:layout_constraintBottom_toBottomOf="parent"
 | 
			
		||||
        app:layout_constraintStart_toEndOf="@+id/imageView"
 | 
			
		||||
        app:layout_constraintTop_toBottomOf="@+id/textView" />
 | 
			
		||||
 | 
			
		||||
    <ImageView
 | 
			
		||||
        android:id="@+id/imageView2"
 | 
			
		||||
        android:layout_width="wrap_content"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        app:layout_constraintBottom_toBottomOf="parent"
 | 
			
		||||
        app:layout_constraintEnd_toEndOf="parent"
 | 
			
		||||
        app:layout_constraintTop_toTopOf="parent"
 | 
			
		||||
        app:srcCompat="@drawable/ic_baseline_menu_24" />
 | 
			
		||||
</androidx.constraintlayout.widget.ConstraintLayout>
 | 
			
		||||
		Reference in New Issue
	
	Block a user