Advertisement
anvemi

Untitled

Mar 19th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 13.88 KB | None | 0 0
  1. <---------------------------------------------activity_register.xml------------------------------------------------------->
  2.  
  3. <?xml version="1.0" encoding="utf-8"?>
  4. <layout xmlns:android="http://schemas.android.com/apk/res/android"
  5.         xmlns:tools="http://schemas.android.com/tools"
  6.         xmlns:app="http://schemas.android.com/apk/res-auto">
  7. <data xmlns:android="http://schemas.android.com/apk/res/android">
  8.  
  9.     <variable
  10.             name="viewmodel"
  11.             type="tv.myproject.app.ui.auth.RegisterViewModel" />
  12. </data>
  13.     <androidx.constraintlayout.widget.ConstraintLayout
  14.             android:layout_width="match_parent"
  15.             android:layout_height="match_parent"
  16.             android:id="@+id/coordinatorLayout"
  17.             tools:context=".activity.RegisterActivity"
  18.             android:background="@drawable/auth_bg">
  19.         <TextView
  20.                 android:layout_width="153dp"
  21.                 android:layout_height="20dp"
  22.                 android:id="@+id/textView"
  23.                 android:textAppearance="@style/TextAppearance.AppCompat.Display2" android:textSize="18sp"
  24.                 android:textColor="@android:color/white" android:gravity="center"
  25.                 app:layout_constraintStart_toStartOf="parent"
  26.                 app:layout_constraintEnd_toEndOf="parent"
  27.                 android:textAllCaps="true" android:text="create id"
  28.                 app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias="0.045"
  29.                 android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent"/>
  30.         <EditText
  31.                 android:hint="@string/user_name"
  32.                 android:layout_width="342dp"
  33.                 android:backgroundTint="#40FFFFFF"
  34.                 android:textColorHint="#99FFFFFF"
  35.                 android:layout_height="wrap_content"
  36.                 android:inputType="text"
  37.                 android:ems="10"
  38.                 android:id="@+id/user_name"
  39.                 android:textColor="@android:color/white"
  40.                 android:selectAllOnFocus="true" android:gravity="center" android:textSize="16sp"
  41.                 android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent"
  42.                 android:layout_marginLeft="8dp" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
  43.                 android:layout_marginRight="8dp"
  44.                 android:paddingBottom="24dp"
  45.                 app:layout_constraintTop_toBottomOf="@+id/textView"
  46.                 app:layout_constraintHorizontal_bias="0.509"
  47.                 android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent"
  48.                 android:layout_marginBottom="8dp" app:layout_constraintVertical_bias="0.027"/>
  49.         <EditText
  50.                 android:hint="@string/password"
  51.                 android:text="@={viewmodel.password}"
  52.                 android:onTextChanged="@{viewmodel::onPasswordChanged}"
  53.                 android:layout_width="342dp"
  54.                 android:backgroundTint="#40FFFFFF"
  55.                 android:textColorHint="#99FFFFFF"
  56.                 android:layout_height="wrap_content"
  57.                 android:inputType="textPassword"
  58.                 android:ems="10"
  59.                 android:id="@+id/password"
  60.                 android:textColor="@android:color/white"
  61.                 android:selectAllOnFocus="true" android:gravity="center" android:textSize="16sp"
  62.                 android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent"
  63.                 android:layout_marginLeft="8dp" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
  64.                 android:layout_marginRight="8dp"
  65.                 android:paddingBottom="24dp"
  66.                 app:layout_constraintHorizontal_bias="0.509" android:layout_marginTop="50dp"
  67.                 app:layout_constraintTop_toTopOf="@+id/user_name"/>
  68.         <EditText
  69.                 android:hint="@string/email_address"
  70.                 android:text="@{viewmodel.email}"
  71.                 android:error="@{viewmodel.errorMessage}"
  72.                 android:onTextChanged="@{viewmodel::onEmailChanged}"
  73.                 android:layout_width="342dp"
  74.                 android:backgroundTint="#40FFFFFF"
  75.                 android:textColorHint="#99FFFFFF"
  76.                 android:layout_height="wrap_content"
  77.                 android:inputType="textEmailAddress"
  78.                 android:ems="10"
  79.                 android:id="@+id/email_address"
  80.                 android:textColor="@android:color/white"
  81.                 android:selectAllOnFocus="true" android:gravity="center" android:textSize="16sp"
  82.                 android:layout_marginStart="8dp" app:layout_constraintStart_toStartOf="parent"
  83.                 android:layout_marginLeft="8dp" android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
  84.                 android:layout_marginRight="8dp"
  85.                 android:paddingBottom="24dp"
  86.                 android:layout_marginTop="50dp" app:layout_constraintTop_toTopOf="@+id/password"/>
  87.         <TextView
  88.                 android:text="@string/by_registering"
  89.                 android:autoLink="all"
  90.                 android:linksClickable="true"
  91.                 android:onClick="redirectToRegister"
  92.                 android:layout_width="wrap_content"
  93.                 android:layout_height="wrap_content"
  94.                 android:id="@+id/privacy_and_terms"
  95.                 android:textAppearance="@style/TextAppearance.AppCompat.Display2"
  96.                 android:textColor="@android:color/white"
  97.                 android:textSize="16sp" android:gravity="center"
  98.                 app:layout_constraintStart_toStartOf="parent"
  99.                 app:layout_constraintEnd_toEndOf="parent"
  100.                 app:layout_constraintHorizontal_bias="0.496"
  101.                 app:layout_constraintTop_toBottomOf="@+id/email_address"
  102.                 android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent"
  103.                 app:layout_constraintVertical_bias="0.104"/>
  104.         <Button
  105.                 android:text="create account"
  106.                 android:layout_width="335dp"
  107.                 android:layout_height="45dp"
  108.                 android:id="@+id/register"
  109.                 android:onClick="@{()->viewmodel.register()}"
  110.                 android:enabled="@{viewmodel.btnSelected}"
  111.                 android:background="@drawable/auth_button"
  112.                 android:textAppearance="@style/TextAppearance.AppCompat.Display2" android:textSize="18sp"
  113.                 android:textAllCaps="true" android:textColor="@android:color/white" android:layout_marginStart="8dp"
  114.                 app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
  115.                 android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
  116.                 android:layout_marginRight="8dp" android:layout_marginBottom="8dp"
  117.                 app:layout_constraintBottom_toBottomOf="parent"
  118.                 android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@+id/constraintLayout3"
  119.                 app:layout_constraintVertical_bias="0.088"/>
  120.         <ImageView
  121.                 android:onClick="closeWindow"
  122.                 android:layout_width="15dp"
  123.                 android:layout_height="15dp" app:srcCompat="@drawable/close_icon"
  124.                 android:id="@+id/close_button"
  125.                 android:layout_marginTop="30dp" app:layout_constraintTop_toTopOf="parent"
  126.                 app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"
  127.                 android:layout_marginRight="16dp" app:layout_constraintStart_toStartOf="parent"
  128.                 android:layout_marginLeft="8dp" android:layout_marginStart="8dp" android:layout_marginBottom="8dp"
  129.                 app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.981"
  130.                 app:layout_constraintVertical_bias="0.018"/>
  131.         <androidx.constraintlayout.widget.ConstraintLayout
  132.                 android:layout_width="wrap_content"
  133.                 android:layout_height="28dp"
  134.                 app:layout_constraintTop_toBottomOf="@+id/privacy_and_terms"
  135.                 app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
  136.                 android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
  137.                 android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:id="@+id/constraintLayout3">
  138.  
  139.             <TextView
  140.                     android:text="@string/privacy_policy"
  141.                     android:onClick="openPrivacyLink"
  142.                     android:layout_width="wrap_content"
  143.                     android:layout_height="wrap_content"
  144.                     android:id="@+id/privacy_policy"
  145.                     android:textAppearance="@style/TextAppearance.AppCompat.Display2" android:textSize="16sp"
  146.                     android:textColor="@android:color/white" app:layout_constraintStart_toStartOf="parent"
  147.                     app:layout_constraintEnd_toStartOf="@+id/terms_of_use"
  148.                     app:layout_constraintTop_toTopOf="parent"
  149.                     app:layout_constraintBottom_toBottomOf="parent"/>
  150.             <TextView
  151.                     android:text="@string/terms_of_use"
  152.                     android:onClick="openTermsLink"
  153.                     android:layout_width="wrap_content"
  154.                     android:layout_height="wrap_content"
  155.                     android:id="@+id/terms_of_use"
  156.                     android:textAppearance="@style/TextAppearance.AppCompat.Display2" android:textSize="16sp"
  157.                     android:textColor="@android:color/white" app:layout_constraintStart_toEndOf="@+id/privacy_policy"
  158.                     android:layout_marginStart="5dp" android:layout_marginLeft="5dp"
  159.                     app:layout_constraintEnd_toEndOf="parent"
  160.                     app:layout_constraintTop_toTopOf="parent"
  161.                     app:layout_constraintBottom_toBottomOf="parent"/>
  162.         </androidx.constraintlayout.widget.ConstraintLayout>
  163.     </androidx.constraintlayout.widget.ConstraintLayout>
  164. </layout>
  165.  
  166. <---------------------------------------------RegisterViewModel.kt------------------------------------------------------->
  167.  
  168. package tv.myproject.app.ui.auth
  169.  
  170. import android.util.Log
  171. import androidx.databinding.ObservableBoolean
  172. import androidx.databinding.ObservableField
  173. import androidx.lifecycle.ViewModel
  174. import kotlinx.coroutines.*
  175. import tv.myproject.app.api.HotpotAPI
  176. import tv.myproject.app.api.HotpotRepository
  177. import tv.myproject.app.util.Util
  178. import kotlin.coroutines.CoroutineContext
  179.  
  180. class RegisterViewModel : ViewModel() {
  181.     private val parentJob = Job()
  182.  
  183.     private val coroutineContext: CoroutineContext
  184.         get() = parentJob + Dispatchers.Default
  185.  
  186.     private val scope = CoroutineScope(coroutineContext)
  187.     private val repository : HotpotRepository= HotpotRepository(HotpotAPI.api)
  188.  
  189.     var authToken: String? = "no token"
  190.     var userId: Long? = null
  191.  
  192. //    binding stuff
  193.     var btnSelected: ObservableBoolean? = ObservableBoolean(false)
  194.     var email: ObservableField<String>? =  ObservableField("")
  195.     var password: ObservableField<String>? =  ObservableField("")
  196.     var errorMessage: ObservableField<String>? =  ObservableField("")
  197. //    end of binding stuff
  198.  
  199.     //functions checking to disable button
  200.     fun onEmailChanged(s: CharSequence, start: Int, befor: Int, count: Int) {
  201.         btnSelected?.set(Util.isEmailValid(s.toString()) && password?.get()!!.length >= 8)
  202.         if(s.toString().length < 8){
  203.             errorMessage?.set("Too short input")
  204.         }
  205.         email?.set(s.toString())
  206.     }
  207.  
  208.     fun onPasswordChanged(s: CharSequence, start: Int, befor: Int, count: Int) {
  209.         btnSelected?.set(Util.isEmailValid(email?.get()!!) && s.toString().length >= 8)
  210.     }
  211.  
  212.  
  213.  
  214.     fun register(){
  215.         val handler = CoroutineExceptionHandler { _, exception ->
  216.             println("Caught $exception")
  217.         }
  218.  
  219.         scope.launch(handler) {
  220.             val res = repository.userRegister("test${Math.random() * 1000000}@foo.com", "testtest")
  221.             res?.run {
  222.                 authToken = token
  223.                 userId = user.id
  224.             }
  225.         }
  226.     }
  227.  
  228.     fun cancelAllRequests() = coroutineContext.cancel()
  229. }
  230.  
  231. <---------------------------------------------RegisterActivity.kt------------------------------------------------------->
  232.  
  233.  
  234.  
  235. package tv.myproject.app.activity
  236.  
  237.  
  238. import android.content.Intent
  239. import android.content.res.Resources
  240. import android.net.Uri
  241. import android.os.Bundle
  242. import android.view.View
  243. import android.widget.TextView
  244. import androidx.appcompat.app.AlertDialog
  245. import androidx.databinding.DataBindingUtil
  246. import androidx.lifecycle.ViewModelProviders
  247. import tv.myproject.app.DatePickerFragment
  248. import tv.myproject.app.databinding.ActivityRegisterBinding
  249. import tv.myproject.app.ui.auth.RegisterViewModel
  250.  
  251.  
  252. class RegisterActivity : BaseActivityFullscreen() {
  253.  
  254.  
  255.     var binding: ActivityRegisterBinding? = null
  256.     var viewmodel: RegisterViewModel? = null
  257.  
  258.     override fun onCreate(savedInstanceState: Bundle?) {
  259.         super.onCreate(savedInstanceState)
  260.         binding = DataBindingUtil.setContentView(this, tv.myproject.app.R.layout.activity_register)
  261.         viewmodel = ViewModelProviders.of(this).get(RegisterViewModel::class.java)
  262.         binding?.viewmodel = viewmodel
  263.     }
  264.  
  265.     fun openTermsLink(view:View) {
  266.         val url = "https://stackoverflow.com/" //TODO: change to appropriate link
  267.         val i = Intent(Intent.ACTION_VIEW)
  268.         i.data = Uri.parse(url)
  269.         startActivity(i)
  270.     }
  271.  
  272.     fun openPrivacyLink(view:View) {
  273.         val url = "https://github.com/"  //TODO: change to appropriate link
  274.         val i = Intent(Intent.ACTION_VIEW)
  275.         i.data = Uri.parse(url)
  276.         startActivity(i)
  277.     }
  278.  
  279.     fun closeWindow(view:View) {
  280.         val loginIntent = Intent(this, LoginActivity::class.java)
  281.         startActivity(loginIntent)
  282.     }
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement