package com.quickblox.sample.customobjects.activities;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.Spinner;
import android.widget.Toast;
import com.quickblox.core.exception.QBResponseException;
import com.quickblox.core.server.Performer;
import com.quickblox.customobjects.QBCustomObjects;
import com.quickblox.customobjects.model.QBCustomObject;
import com.quickblox.extensions.RxJavaPerformProcessor;
import com.quickblox.sample.core.utils.Toaster;
import com.quickblox.sample.customobjects.R;
import com.quickblox.sample.customobjects.helper.DataHolder;
import com.quickblox.sample.customobjects.model.Movie;
import com.quickblox.sample.customobjects.utils.QBCustomObjectsUtils;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class AddNewMovieActivity extends BaseActivity implements TextWatcher {
private static final String TAG = AddNewMovieActivity.class.getSimpleName();
private static final String OBJ = "\uFFFC";
private EditText titleEditText;
private EditText descriptionEditText;
private Spinner yearSpinner;
private RatingBar ratingBar;
private Toast toast;
private String title;
private String description;
private float rating;
public static void start(Context context) {
Intent intent = new Intent(context, AddNewMovieActivity.class);
context.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_movie);
initUI();
initSpinner();
}
@SuppressLint("ShowToast")
private void initUI() {
actionBar.setDisplayHomeAsUpEnabled(true);
toast = Toast.makeText(this, R.string.error, Toast.LENGTH_LONG);
titleEditText = _findViewById(R.id.add_movie_title_textview);
titleEditText.addTextChangedListener(this);
descriptionEditText = _findViewById(R.id.add_movie_description_textview);
descriptionEditText.addTextChangedListener(this);
yearSpinner = _findViewById(R.id.year_spinner);
ratingBar = _findViewById(R.id.add_movie_ratingBar);
}
private void initSpinner() {
List<String> years = new ArrayList<>();
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
int firstFilmYear = 1895;
for (int i = currentYear + 10; i >= firstFilmYear; i--) {
years.add(Integer.toString(i));
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, years);
yearSpinner.setAdapter(adapter);
yearSpinner.setSelection(10);
}
private void createNewMovie() {
title = titleEditText.getText().toString().trim();
description = descriptionEditText.getText().toString().trim();
String year = yearSpinner.getSelectedItem().toString();
rating = ratingBar.getRating();
if (!isValidData()) {
return;
}
progressDialog.show();
QBCustomObject qbCustomObject = QBCustomObjectsUtils.createCustomObject(title, description, year, rating);
Performer<QBCustomObject> performer = QBCustomObjects.createObject(qbCustomObject);
Observable<QBCustomObject> observable =
performer.convertTo(RxJavaPerformProcessor.INSTANCE);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<QBCustomObject>() {
@Override
public void onCompleted() {
progressDialog.dismiss();
Toaster.shortToast(R.string.done);
finish();
}
@Override
public void onError(Throwable e) {
progressDialog.dismiss();
if (QBCustomObjectsUtils.checkQBException(e)) {
View rootLayout = findViewById(R.id.activity_add_movie);
showSnackbarError(rootLayout, R.string.splash_create_session_error, (QBResponseException) e, new View.OnClickListener() {
@Override
public void onClick(View v) {
createNewMovie();
}
});
} else {
Log.d(TAG, "onError" + e.getMessage());
}
}
@Override
public void onNext(QBCustomObject qbCustomObject) {
DataHolder.getInstance().addMovieToMap(new Movie(qbCustomObject));
}
});
}
private boolean isValidData() {
if (TextUtils.isEmpty(title) || TextUtils.isEmpty(description)) {
toast.setText(R.string.error_fields_is_empty);
toast.show();
return false;
}
if (rating == 0) {
toast.setText(R.string.error_rating_is_empty);
toast.show();
return false;
}
return true;
}
@Override
public void onPause() {
super.onPause();
toast.cancel();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_add_movie, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_save_movie:
createNewMovie();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//ignore
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//ignore
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() >= getResources().getInteger(R.integer.field_max_length)) {
toast.setText(R.string.error_too_long_text);
toast.show();
}
if (s.toString().contains(OBJ)) {
int index = s.toString().indexOf(OBJ);
s.replace(index, index + 1, "");
}
}
}