/* * Copyright 2016 requery.io * * 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. */ package io.requery.android.example.app; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.requery.Persistable; import io.requery.android.example.app.databinding.ActivityEditPersonBinding; import io.requery.android.example.app.model.Address; import io.requery.android.example.app.model.AddressEntity; import io.requery.android.example.app.model.Person; import io.requery.android.example.app.model.PersonEntity; import io.requery.android.example.app.model.Phone; import io.requery.android.example.app.model.PhoneEntity; import io.requery.reactivex.ReactiveEntityStore; /** * Simple activity allowing you to edit a Person entity using data binding. */ public class PersonEditActivity extends AppCompatActivity { static final String EXTRA_PERSON_ID = "personId"; private ReactiveEntityStore<Persistable> data; private PersonEntity person; private ActivityEditPersonBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_edit_person); if (getSupportActionBar() != null) { getSupportActionBar().setTitle("Edit Person"); } data = ((PeopleApplication) getApplication()).getData(); int personId = getIntent().getIntExtra(EXTRA_PERSON_ID, -1); if (personId == -1) { person = new PersonEntity(); // creating a new person binding.setPerson(person); } else { data.findByKey(PersonEntity.class, personId) .subscribeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<PersonEntity>() { @Override public void accept(PersonEntity person) { PersonEditActivity.this.person = person; binding.setPerson(person); } }); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_edit, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_save: savePerson(); return true; } return false; } private void savePerson() { // TODO make binding 2 way person.setName(binding.name.getText().toString()); person.setEmail(binding.email.getText().toString()); Phone phone; if (person.getPhoneNumberList().isEmpty()) { phone = new PhoneEntity(); phone.setOwner(person); person.getPhoneNumberList().add(phone); } else { phone = person.getPhoneNumberList().get(0); } phone.setPhoneNumber(binding.phone.getText().toString()); Address address = person.getAddress(); if (address == null) { address = new AddressEntity(); person.setAddress(address); } address.setLine1(binding.street.getText().toString()); address.setLine2(binding.city.getText().toString()); address.setZip(binding.zip.getText().toString()); address.setState(binding.state.getText().toString()); // save the person if (person.getId() == 0) { data.insert(person).subscribe(new Consumer<Person>() { @Override public void accept(Person person) { finish(); } }); } else { data.update(person).subscribe(new Consumer<Person>() { @Override public void accept(Person person) { finish(); } }); } } }