Drinking habit analytics

This commit is contained in:
z3r0c00l-2k 2019-05-20 18:39:50 +05:30
parent ecc5a2f309
commit c062f10f7b
12 changed files with 230 additions and 40 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View file

@ -38,4 +38,5 @@ dependencies {
implementation 'com.github.ceryle:RadioRealButton:v2.1.1'
implementation 'com.google.android.material:material:1.0.0'
implementation 'me.itangqi.waveloadingview:library:0.3.5'
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

View file

@ -14,6 +14,9 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".StatsActivity"
android:theme="@style/MainTheme">
</activity>
<activity android:name=".InitUserInfoActivity">
</activity>
<activity android:name=".SplashActivity">
@ -23,9 +26,11 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".MainActivity"
android:theme="@style/MainTheme">
<activity
android:name=".MainActivity"
android:theme="@style/MainTheme">
</activity>
<receiver android:name=".recievers.NotifierReceiver"/>
<receiver android:name=".recievers.BootReceiver">
<intent-filter>

View file

@ -86,6 +86,10 @@ class MainActivity : AppCompatActivity() {
alarm.cancelAlarm(this)
}
}
btnStats.setOnClickListener {
startActivity(Intent(this, StatsActivity::class.java))
}
}
private fun setWaterLevel(inTook: Int, totalIntake: Int) {

View file

@ -0,0 +1,108 @@
package io.github.z3r0c00l_2k.aquadroid
import android.content.SharedPreferences
import android.database.Cursor
import android.graphics.Color
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.github.mikephil.charting.animation.Easing
import com.github.mikephil.charting.components.XAxis
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData
import com.github.mikephil.charting.data.LineDataSet
import io.github.z3r0c00l_2k.aquadroid.helpers.SqliteHelper
import io.github.z3r0c00l_2k.aquadroid.utils.AppUtils
import io.github.z3r0c00l_2k.aquadroid.utils.ChartXValueFormatter
import kotlinx.android.synthetic.main.activity_stats.*
import java.math.RoundingMode
import java.text.DecimalFormat
class StatsActivity : AppCompatActivity() {
private lateinit var sharedPref: SharedPreferences
private lateinit var sqliteHelper: SqliteHelper
private var totalPercentage: Float = 0f
private var totalGlasses: Float = 0f
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_stats)
sharedPref = getSharedPreferences(AppUtils.USERS_SHARED_PREF, AppUtils.PRIVATE_MODE)
sqliteHelper = SqliteHelper(this)
btnBack.setOnClickListener {
finish()
}
greetings.text = "Hello, " + sharedPref.getString(AppUtils.NAME_KEY, "User")
val entries = ArrayList<Entry>()
val dateArray = ArrayList<String>()
val cursor: Cursor = sqliteHelper.getAllStats()
Toast.makeText(this, "" + cursor.count, Toast.LENGTH_LONG).show()
if (cursor.moveToFirst()) {
for (i in 0 until cursor.count) {
dateArray.add(cursor.getString(1))
val percent = cursor.getInt(2) / cursor.getInt(3).toFloat() * 100
totalPercentage += percent
totalGlasses += cursor.getInt(2)
entries.add(Entry(i.toFloat(), percent))
cursor.moveToNext()
}
} else {
Toast.makeText(this, "Empty", Toast.LENGTH_LONG).show()
}
if (!entries.isEmpty()) {
chart.description.isEnabled = false
chart.animateX(1500, Easing.Linear)
chart.viewPortHandler.setMaximumScaleX(1.5f)
chart.xAxis.setDrawGridLines(false)
chart.xAxis.position = XAxis.XAxisPosition.TOP
chart.xAxis.isGranularityEnabled = true
chart.legend.isEnabled = false
chart.fitScreen()
chart.isAutoScaleMinMaxEnabled = true
chart.scaleX = 1f
chart.setPinchZoom(true)
chart.isScaleXEnabled = true
chart.isScaleYEnabled = false
chart.axisLeft.textColor = Color.WHITE
chart.xAxis.textColor = Color.WHITE
chart.axisLeft.setDrawAxisLine(false)
chart.xAxis.setDrawAxisLine(false)
chart.setDrawMarkers(false)
val rightAxix = chart.axisRight
rightAxix.setDrawGridLines(false)
rightAxix.setDrawZeroLine(false)
rightAxix.setDrawAxisLine(false)
rightAxix.setDrawLabels(false)
val dataSet = LineDataSet(entries, "Label")
dataSet.setDrawCircles(false)
dataSet.lineWidth = 0f
dataSet.setDrawFilled(true)
dataSet.setDrawValues(false)
dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
val lineData = LineData(dataSet)
chart.xAxis.valueFormatter = (ChartXValueFormatter(dateArray))
chart.data = lineData
chart.invalidate()
val df = DecimalFormat("#.##")
df.roundingMode = RoundingMode.CEILING
totalIntakePercentage.text = "" + df.format((totalPercentage / cursor.count)) + " %"
avgGlassPD.text = "Average Glasses / Day : " + df.format((totalGlasses / cursor.count))
}
}
}

View file

@ -2,10 +2,11 @@ package io.github.z3r0c00l_2k.aquadroid.helpers
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
class SqliteHelper(context: Context) : SQLiteOpenHelper(
class SqliteHelper(val context: Context) : SQLiteOpenHelper(
context,
DATABASE_NAME, null,
DATABASE_VERSION
@ -82,4 +83,11 @@ class SqliteHelper(context: Context) : SQLiteOpenHelper(
return 0
}
fun getAllStats(): Cursor {
val selectQuery = "SELECT * FROM $TABLE_STATS"
val db = this.readableDatabase
return db.rawQuery(selectQuery, null)
}
}

View file

@ -0,0 +1,10 @@
package io.github.z3r0c00l_2k.aquadroid.utils
import com.github.mikephil.charting.components.AxisBase
import com.github.mikephil.charting.formatter.ValueFormatter
class ChartXValueFormatter(val dateArray: ArrayList<String>) : ValueFormatter() {
override fun getAxisLabel(value: Float, axis: AxisBase?): String {
return dateArray[value.toInt()]
}
}

View file

@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp"
android:viewportHeight="512" android:viewportWidth="512" android:width="24dp">
<path android:fillColor="@color/colorWhite"
android:pathData="M256,504C119,504 8,393 8,256S119,8 256,8s248,111 248,248 -111,248 -248,248zM284.9,360.4L209.4,288L392,288c13.3,0 24,-10.7 24,-24v-16c0,-13.3 -10.7,-24 -24,-24L209.4,224l75.5,-72.4c9.7,-9.3 9.9,-24.8 0.4,-34.3l-11,-10.9c-9.4,-9.4 -24.6,-9.4 -33.9,0L107.7,239c-9.4,9.4 -9.4,24.6 0,33.9l132.7,132.7c9.4,9.4 24.6,9.4 33.9,0l11,-10.9c9.5,-9.5 9.3,-25 -0.4,-34.3z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp"
android:tint="#EEEEEE" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="24dp">
<path android:fillColor="#FF000000" android:pathData="M3,18h16v-2L3,16v2zM3,13h12v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
</vector>

View file

@ -1,33 +1,7 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp"
android:viewportHeight="512" android:viewportWidth="512" android:width="24dp">
<path android:fillColor="#BAF0FF" android:pathData="M152.063,151.296l80.156,-104.204l48.094,0l80.157,104.204z"/>
<path android:fillColor="#8ADEFF" android:pathData="M232.219,47.092l-80.156,104.204l21.041,0l80.156,-104.204z"/>
<path android:fillColor="#8ADEFF" android:pathData="M219.887,63.123l12.332,-16.031l48.094,0l12.332,16.032z"/>
<path android:fillColor="#8ADEFF" android:pathData="M360.47,151.296l-208.407,0l12.334,-16.032l183.738,0z"/>
<path android:fillColor="#8ADEFF"
android:pathData="M360.47,223.436v-72.141H152.062v72.141c0,17.708 14.355,32.063 32.063,32.063h-4.008c-15.494,0 -28.055,12.561 -28.055,28.055l0,0c0,15.494 12.561,28.055 28.055,28.055c-15.494,0 -28.055,12.561 -28.055,28.055l0,0c0,15.494 12.561,28.055 28.055,28.055h4.008c-17.708,0 -32.063,14.355 -32.063,32.063v64.125c0,17.708 14.355,32.063 32.063,32.063h42.929c5.651,4.985 13.068,8.016 21.196,8.016h16.031c8.128,0 15.544,-3.031 21.196,-8.016h42.929c17.708,0 32.063,-14.355 32.063,-32.063v-64.125c0,-17.708 -14.355,-32.063 -32.063,-32.063h4.008c15.494,0 28.055,-12.561 28.055,-28.055l0,0c0,-15.494 -12.561,-28.055 -28.055,-28.055c15.494,0 28.055,-12.561 28.055,-28.055l0,0c0,-15.494 -12.561,-28.055 -28.055,-28.055h-4.008C346.115,255.499 360.47,241.144 360.47,223.436z"/>
<path android:fillColor="#2FB6EB"
android:pathData="M172.102,463.906v-64.125c0,-17.708 14.355,-32.063 32.063,-32.063h-4.008c-15.494,0 -28.055,-12.561 -28.055,-28.055c0,-15.494 12.561,-28.055 28.055,-28.055c-15.494,0 -28.055,-12.561 -28.055,-28.055c0,-15.494 12.561,-28.055 28.055,-28.055h4.008c-17.708,0 -32.063,-14.355 -32.063,-32.063v-72.141h-20.039v72.141c0,17.708 14.355,32.063 32.063,32.063h-4.008c-15.494,0 -28.055,12.561 -28.055,28.055c0,15.494 12.561,28.055 28.055,28.055c-15.494,0 -28.055,12.561 -28.055,28.055c0,15.494 12.561,28.055 28.055,28.055h4.008c-17.708,0 -32.063,14.355 -32.063,32.063v64.125c0,17.708 14.355,32.063 32.063,32.063h20.039C186.456,495.969 172.102,481.614 172.102,463.906z"/>
<path android:fillColor="#2FB6EB"
android:pathData="M247.093,495.969h-20.039c5.651,4.985 13.068,8.016 21.196,8.016h16.031c0.673,0 1.341,-0.028 2.004,-0.069C258.945,503.461 252.276,500.541 247.093,495.969z"/>
<path android:fillColor="#2FB6EB"
android:pathData="M328.407,367.718H184.125c-17.708,0 -32.063,14.355 -32.063,32.063v64.125c0,17.708 14.355,32.063 32.063,32.063h42.929c5.651,4.985 13.068,8.016 21.196,8.016h16.031c8.128,0 15.544,-3.031 21.196,-8.016h42.929c17.708,0 32.063,-14.355 32.063,-32.063v-64.125C360.47,382.073 346.115,367.718 328.407,367.718z"/>
<path android:fillColor="#2FB6EB"
android:pathData="M332.415,311.609H180.117c-15.494,0 -28.055,-12.561 -28.055,-28.055l0,0c0,-15.494 12.561,-28.055 28.055,-28.055h152.297c15.494,0 28.055,12.561 28.055,28.055l0,0C360.47,299.048 347.909,311.609 332.415,311.609z"/>
<path android:fillColor="#0097C6"
android:pathData="M172.102,463.906v-64.125c0,-17.708 14.355,-32.063 32.063,-32.063h-20.039c-17.708,0 -32.063,14.355 -32.063,32.063v64.125c0,17.708 14.355,32.063 32.063,32.063h20.039C186.456,495.969 172.102,481.614 172.102,463.906z"/>
<path android:fillColor="#00A1D3"
android:pathData="M247.093,495.969h-20.039c5.651,4.985 13.068,8.016 21.196,8.016h16.031c0.673,0 1.341,-0.028 2.004,-0.069C258.945,503.461 252.276,500.541 247.093,495.969z"/>
<path android:fillColor="#0097C6"
android:pathData="M172.102,283.554c0,-15.494 12.561,-28.055 28.055,-28.055h-20.039c-15.494,0 -28.055,12.561 -28.055,28.055c0,15.494 12.561,28.055 28.055,28.055h20.039C184.662,311.609 172.102,299.048 172.102,283.554z"/>
<path android:fillColor="#FF6243" android:pathData="M208.176,7.014h96.188v40.078h-96.188z"/>
<path android:fillColor="#D80027" android:pathData="M208.176,7.014h16.031v40.078h-16.031z"/>
<path android:fillColor="#D80027" android:pathData="M208.176,31.061h96.188v16.031h-96.188z"/>
<path android:fillColor="#FF000000"
android:pathData="M367.859,339.663c0,-11.391 -5.325,-21.54 -13.68,-28.055c8.354,-6.515 13.774,-16.664 13.774,-28.055c0,-11.993 -6.207,-22.611 -15.328,-29.058c9.183,-7.254 14.858,-18.476 14.858,-31.06V148.74l-71.909,-93.632h15.8V0H200.156v55.108h16.801l-72.91,93.632v74.697c0,12.584 6.161,23.805 15.344,31.06c-9.121,6.447 -14.968,17.064 -14.968,29.058c0,11.391 5.451,21.54 13.805,28.055c-8.354,6.515 -13.711,16.664 -13.711,28.055c0,11.993 5.737,22.611 14.858,29.058c-9.183,7.254 -15.328,18.476 -15.328,31.06v64.125c0,21.823 18.256,40.078 40.078,40.078h40.078v-0.659c6.671,5.12 15.007,8.675 24.047,8.675h16.031c9.04,0 17.376,-3.554 24.047,-8.675v0.659h40.078c21.823,0 39.076,-18.256 39.076,-40.078v-64.125c0,-12.584 -5.66,-23.806 -14.843,-31.06C361.761,362.275 367.859,351.657 367.859,339.663zM215.186,40.078V15.029h81.159v25.049H215.186zM235.919,55.108h40.692l68.596,89.174H167.323M332.415,319.624c11.326,0 20.54,9.214 20.54,20.54c0,11.326 -9.214,20.54 -20.54,20.54h-20.039v15.029h16.031c13.536,0 24.047,10.511 24.047,24.047v64.125c0,13.536 -10.511,25.049 -24.047,25.049h-28.18c2.325,-6.012 3.632,-11.134 3.632,-17.033H288.83c0,13.536 -11.012,25.049 -24.548,25.049H248.25c-13.535,0 -24.548,-11.512 -24.548,-25.049h-15.029c0,5.9 1.308,11.022 3.632,17.033h-28.18c-13.535,0 -25.049,-11.512 -25.049,-25.049v-64.125c0,-13.536 11.513,-24.047 25.049,-24.047h80.157v-15.029h-84.164c-11.326,0 -20.54,-9.214 -20.54,-20.54c0,-11.326 9.214,-20.54 20.54,-20.54h84.164v-15.029h-84.164c-11.326,0 -20.54,-9.214 -20.54,-20.54c0,-11.326 9.214,-20.54 20.54,-20.54h84.164v-15.029h-80.157c-13.535,0 -25.049,-11.512 -25.049,-25.049v-64.125h193.378v64.125c0,13.536 -10.511,25.049 -24.047,25.049h-16.031v15.029h20.039c11.326,0 20.54,9.214 20.54,20.54c0,11.326 -9.214,20.54 -20.54,20.54h-20.039v15.029H332.415z"/>
<path android:fillColor="#FFFFFF" android:pathData="M200.16,111.718h16.031v15.029h-16.031z"/>
<path android:fillColor="#FFFFFF" android:pathData="M216.192,95.687h16.031v15.029h-16.031z"/>
<path android:fillColor="#FFFFFF" android:pathData="M280.317,304.094h16.031v15.029h-16.031z"/>
<path android:fillColor="#FFFFFF" android:pathData="M280.317,247.984h16.031v15.029h-16.031z"/>
<path android:fillColor="#FFFFFF" android:pathData="M280.317,360.204h16.031v15.029h-16.031z"/>
android:pathData="m436.984,4.785c-2.84,-3.051 -6.816,-4.785 -10.984,-4.785h-340c-4.168,0 -8.145,1.734 -10.984,4.785 -2.836,3.051 -4.277,7.145 -3.977,11.301l35,482c0.57,7.844 7.098,13.914 14.961,13.914h270c7.863,0 14.391,-6.07 14.961,-13.914l35,-482c0.301,-4.156 -1.141,-8.25 -3.977,-11.301zM409.871,30 L404.645,102h-297.289l-5.227,-72zM134.949,482 L109.535,132h292.93l-25.414,350zM134.949,482"/>
<path android:fillColor="#FF000000"
android:pathData="m298.5,209c-15.359,0 -29.797,5.98 -40.66,16.844l-1.84,1.84 -1.84,-1.84c-10.863,-10.863 -25.301,-16.844 -40.66,-16.844s-29.797,5.98 -40.656,16.84c-10.863,10.863 -16.844,25.301 -16.844,40.66s5.98,29.797 16.844,40.66c0.027,0.027 0.051,0.055 0.082,0.078l72.551,71.449c2.918,2.875 6.719,4.313 10.523,4.313s7.605,-1.438 10.523,-4.313l72.555,-71.449c0.027,-0.023 0.055,-0.051 0.082,-0.078 10.859,-10.863 16.84,-25.301 16.84,-40.66s-5.98,-29.797 -16.84,-40.656c-10.863,-10.863 -25.301,-16.844 -40.66,-16.844zM317.984,285.906 L256,346.949 194.016,285.906c-5.168,-5.188 -8.016,-12.078 -8.016,-19.406 0,-7.344 2.859,-14.25 8.055,-19.445 5.195,-5.195 12.102,-8.055 19.445,-8.055 7.348,0 14.25,2.859 19.445,8.055l12.449,12.449c2.813,2.813 6.625,4.395 10.605,4.395s7.793,-1.582 10.605,-4.395l12.449,-12.449c5.195,-5.195 12.098,-8.055 19.445,-8.055 7.344,0 14.25,2.859 19.445,8.055 5.195,5.195 8.055,12.102 8.055,19.445 0,7.328 -2.848,14.219 -8.016,19.406zM317.984,285.906"/>
</vector>

View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main_bg_gradiant"
tools:context=".StatsActivity">
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="0dp"
android:layout_height="350dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" android:layout_marginTop="24dp"
app:layout_constraintTop_toBottomOf="@+id/greetings"/>
<ImageButton
android:background="?attr/selectableItemBackground"
android:layout_width="40dp"
android:layout_height="40dp" app:srcCompat="@drawable/ic_arrow_circle_left_solid"
android:id="@+id/btnBack" app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp"/>
<TextView
android:text="Your Water Intake Habit"
android:textColor="@color/colorWhite"
android:textStyle="bold"
android:textSize="22sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView5"
app:layout_constraintStart_toEndOf="@+id/btnBack" android:layout_marginStart="24dp"
android:layout_marginTop="16dp" app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:text="0 %"
android:layout_width="wrap_content"
android:textSize="40sp"
android:textStyle="bold"
android:textColor="@color/colorWhite"
android:layout_height="wrap_content"
android:id="@+id/totalIntakePercentage" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/chart"
android:layout_marginBottom="8dp" app:layout_constraintBottom_toTopOf="@+id/textView9"/>
<TextView
android:text="Average Glasses / Day : 0"
android:layout_width="wrap_content"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="@color/colorWhite"
android:layout_height="wrap_content"
android:id="@+id/avgGlassPD" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/textView9"
android:layout_marginBottom="18dp" app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:text="Total Intake"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="@color/colorWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView9" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/totalIntakePercentage" android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="8dp"
app:layout_constraintStart_toStartOf="parent" android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/avgGlassPD"/>
<TextView
android:text="Hello, User"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="@color/colorWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/greetings" android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="24dp" app:layout_constraintTop_toBottomOf="@+id/textView5"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -124,7 +124,7 @@
android:textSize="24sp"
android:textColor="@color/colorWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/textView8"
android:layout_height="wrap_content" android:id="@+id/totalIntakePercentage"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/etSleepTime"/>
@ -134,7 +134,7 @@
android:layout_height="wrap_content"
android:layout_marginEnd="16dp" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="16dp"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/textView8"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/totalIntakePercentage"
android:id="@+id/etNotificationText">
<com.google.android.material.textfield.TextInputEditText