Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package chapters.addnewclient
- import android.Manifest
- import android.app.Activity
- import android.content.Context
- import android.content.Intent
- import android.net.Uri
- import android.os.Bundle
- import android.view.Menu
- import android.view.MenuItem
- import android.view.inputmethod.InputMethodManager
- import chapters.base.BaseActivity
- import chapters.base.NetworkMVPView2
- import chapters.clients.clients_profile.contacts.ContactsFragment
- import chapters.home.HomeActivity
- import chapters.recordsbook.recordclient.RecordUserStep2
- import com.bumptech.glide.Glide
- import com.bumptech.glide.load.engine.DiskCacheStrategy
- import com.cookiedev.rooky.R
- import com.github.rtoshiro.util.format.SimpleMaskFormatter
- import com.jakewharton.rxbinding.widget.textChanges
- import com.orhanobut.logger.Logger
- import com.tbruyelle.rxpermissions.RxPermissions
- import instruments.managers.LoginManager
- import jp.wasabeef.glide.transformations.CropCircleTransformation
- import kotlinx.android.synthetic.main.activity_add_new_client.*
- import rx.Observable
- import utils.FileUtils
- import utils.NUMBER_PREFIX
- import utils.PHONE_NUMBER_PATTERN
- import utils.createRetryNetObs
- import utils.extentions.*
- import utils.glide.PhotoDelegate
- import utils.text.EditableMaskTextWatcher
- import utils.text.getNumber
- import java.util.*
- class AddNewClientActivity : BaseActivity(), NetworkMVPView2<Long>, ContactsFragment.ContactChecked {
- companion object {
- private const val KEY_TOKEN = "token"
- private const val KEY_NAME_CLIENT = "name_client"
- private const val KEY_SURNAME_CLIENT = "surname_client"
- private const val KEY_PHONES = "phones"
- private const val ANIMATION_TIME = 260L
- private const val MIN_CHARACTER_NUMBER = 1
- private const val MIN_PHONE_NUMBER_SYMBOLS = 5
- fun launch(activity: Activity) {
- activity.startActivity(Intent(activity, AddNewClientActivity::class.java))
- activity.overridePendingTransition(R.anim.right_in, R.anim.left_out)
- }
- }
- val photoDelegate by lazy { PhotoDelegate(this) }
- lateinit var presenter: AddNewClientPresenter
- var capturedImageURI: Uri? = null
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_add_new_client)
- presenter = AddNewClientPresenter(this)
- btnSave.isEnabled = false
- btnSave.setOnClickListener {
- hideKeyboard()
- val clientParams = HashMap<String, String>()
- clientParams.put(KEY_TOKEN, LoginManager(this).token)
- clientParams.put(KEY_NAME_CLIENT, etName.text.toString())
- clientParams.put(KEY_SURNAME_CLIENT, etSurname.text.toString())
- clientParams.put(KEY_PHONES, getNumber(etPhone.text.toString()))
- val filePath = capturedImageURI?.let { FileUtils.getPath(this, it) }
- presenter.saveClient(clientParams, filePath)
- }
- ivPhoto.setOnClickListener {
- photoDelegate.showChooserAlert {
- loadImage(it)
- }
- }
- etPhone.addTextChangedListener(EditableMaskTextWatcher(etPhone, SimpleMaskFormatter(PHONE_NUMBER_PATTERN)))
- etPhone.setText(NUMBER_PREFIX)
- initEdit()
- setupToolbar()
- }
- private fun loadImage(it: Uri?) {
- capturedImageURI = it
- Glide.with(this)
- .load(it)
- .skipMemoryCache(true)
- .diskCacheStrategy(DiskCacheStrategy.NONE)
- .centerCrop()
- .bitmapTransform(CropCircleTransformation(this))
- .placeholder(getDrawableFromVector(R.drawable.ic_ava_place))
- .into(ivPhoto)
- }
- private fun hideKeyboard() {
- val input = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
- input.hideSoftInputFromWindow(rootView.windowToken, 0)
- }
- fun initEdit() {
- val nameObserver = etName.textChanges().skip(1)
- .map { it.length > MIN_CHARACTER_NUMBER }.share()
- compositeSub += nameObserver.subscribe {
- tilName.setErrorMess(it, R.string.msg_add_client_short_name)
- }
- val surnameObserver = etSurname.textChanges().skip(1)
- .map { it.length > MIN_CHARACTER_NUMBER }.share()
- compositeSub += surnameObserver.subscribe {
- tilSurname.setErrorMess(it, R.string.msg_add_client_short_surname)
- }
- val phoneObserver = etPhone.textChanges().skip(1)
- .map { it.toString().leftOnlyDigits().length >= MIN_PHONE_NUMBER_SYMBOLS }.distinctUntilChanged().share()
- compositeSub += phoneObserver.subscribe {
- tilPhone.setErrorMess(it, R.string.msg_add_client_wrong_number)
- }
- compositeSub += Observable.combineLatest(nameObserver.startWith(false), surnameObserver.startWith(false), phoneObserver.startWith(false)) { nameIsValid, surnameIsValid, phoneIsValid ->
- Logger.d("$nameIsValid, $surnameIsValid, $phoneIsValid")
- nameIsValid && surnameIsValid && phoneIsValid
- }.subscribe { btnSave.isEnabled = it }
- }
- private fun setupToolbar() {
- setSupportActionBar(toolbar)
- supportActionBar?.run {
- setHomeButtonEnabled(true)
- setDisplayHomeAsUpEnabled(true)
- setDisplayShowTitleEnabled(false)
- }
- }
- override fun onCreateOptionsMenu(menu: Menu): Boolean {
- menuInflater.inflate(R.menu.contacts_single, menu)
- return true
- }
- override fun onResult(result: Long) = RecordUserStep2.launch(this, result, HomeActivity.ChildChapter.CLIENT_RECORD)
- override fun onRequestBegin() = progress.showAnim(ANIMATION_TIME)
- override fun onRequestTerminate() = progress.hide()
- override fun onError(throwable: Throwable) = showErrorAlert(throwable)
- override fun getRetryObservable(): Observable<Boolean> = createRetryNetObs(rootView)
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- photoDelegate.onActivityResult(requestCode, resultCode, data)
- if (requestCode == AddContactsActivity.REQUEST_CODE) {
- onContactChecked(AddContactsActivity.fromResult(data) ?: return)
- }
- }
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- if (item.itemId == android.R.id.home) finish()
- else if (item.itemId == R.id.action_contacts) {
- compositeSub += RxPermissions(this)
- .request(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE)
- .subscribe { if (it) { AddContactsActivity.launchForResult(this) } } }
- return true
- }
- override fun finish() {
- presenter.unbind()
- super.finish()
- overridePendingTransition(R.anim.left_in, R.anim.right_out)
- }
- override fun onContactChecked(contact: ContactsFragment.Contact) {
- val names = contact.name.split(" ")
- if (names.isNotEmpty())
- etName.setText(names[0])
- if (names.size > 1) etSurname.setText(names[1])
- etPhone.setText(contact.phone)
- loadImage(contact.getRealPath(this))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement