package co.smartreceipts.android.ocr.widget.configuration; import android.annotation.SuppressLint; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import com.jakewharton.rxbinding2.widget.RxCompoundButton; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import co.smartreceipts.android.R; import co.smartreceipts.android.analytics.Analytics; import co.smartreceipts.android.analytics.events.Events; import co.smartreceipts.android.identity.store.EmailAddress; import co.smartreceipts.android.purchases.model.AvailablePurchase; import co.smartreceipts.android.utils.log.Logger; import dagger.android.support.AndroidSupportInjection; import io.reactivex.Observable; import io.reactivex.functions.Consumer; public class OcrConfigurationFragment extends Fragment implements OcrConfigurationView { private static final String OUT_BOOLEAN_WAS_PREVIOUSLY_SENT_TO_LOGIN_SCREEN = "out_bool_was_previously_sent_to_login_screen"; @Inject OcrConfigurationPresenter presenter; @Inject OcrConfigurationRouter router; @Inject Analytics analytics; @BindView(R.id.ocr_is_enabled) CheckBox ocrIsEnabledCheckbox; @BindView(R.id.ocr_save_scans_to_improve_results) CheckBox allowUsToSaveImagesRemotelyCheckbox; private OcrPurchasesListAdapter ocrPurchasesListAdapter; private Unbinder unbinder; private boolean wasPreviouslySentToLogin = false; public static OcrConfigurationFragment newInstance() { return new OcrConfigurationFragment(); } @Override public void onAttach(Context context) { AndroidSupportInjection.inject(this); super.onAttach(context); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { Logger.debug(this, "onCreate"); super.onCreate(savedInstanceState); setHasOptionsMenu(true); if (savedInstanceState == null) { analytics.record(Events.Ocr.OcrViewConfigurationPage); } else { wasPreviouslySentToLogin = savedInstanceState.getBoolean(OUT_BOOLEAN_WAS_PREVIOUSLY_SENT_TO_LOGIN_SCREEN, false); } } @SuppressLint("InflateParams") @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.simple_recycler_view, container, false); final RecyclerView recyclerView = (RecyclerView) rootView.findViewById(android.R.id.list); final View headerView = inflater.inflate(R.layout.ocr_configuration_fragment, null); this.ocrPurchasesListAdapter = new OcrPurchasesListAdapter(headerView); this.unbinder = ButterKnife.bind(this, headerView); recyclerView.setAdapter(this.ocrPurchasesListAdapter); return rootView; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.clear(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { return router.navigateBack(); } else { return super.onOptionsItemSelected(item); } } @Override public void onResume() { Logger.debug(this, "onResume"); super.onResume(); wasPreviouslySentToLogin = router.navigateToProperLocation(wasPreviouslySentToLogin); final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); if (actionBar != null) { actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); } presenter.subscribe(); } @Override public void onPause() { Logger.debug(this, "onPause"); presenter.unsubscribe(); super.onPause(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(OUT_BOOLEAN_WAS_PREVIOUSLY_SENT_TO_LOGIN_SCREEN, wasPreviouslySentToLogin); } @Override public void onDestroyView() { unbinder.unbind(); ocrPurchasesListAdapter = null; super.onDestroyView(); } @Override public void present(@Nullable EmailAddress emailAddress) { final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); if (actionBar != null) { actionBar.setSubtitle(getContext().getString(R.string.ocr_configuration_my_account, emailAddress)); } } @Override public void present(int remainingScans) { final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); if (actionBar != null) { actionBar.setTitle(getContext().getString(R.string.ocr_configuration_scans_remaining, remainingScans)); } } @Override public void present(@NonNull List<AvailablePurchase> availablePurchases) { ocrPurchasesListAdapter.setAvailablePurchases(availablePurchases); } @NonNull @Override public Observable<Boolean> getOcrIsEnabledCheckboxChanged() { return RxCompoundButton.checkedChanges(ocrIsEnabledCheckbox); } @NonNull @Override public Observable<Boolean> getAllowUsToSaveImagesRemotelyCheckboxChanged() { return RxCompoundButton.checkedChanges(allowUsToSaveImagesRemotelyCheckbox); } @NonNull @Override public Observable<AvailablePurchase> getAvailablePurchaseClicks() { return ocrPurchasesListAdapter.getAvailablePurchaseClicks(); } @NonNull @Override public Consumer<? super Boolean> getOcrIsEnabledConsumer() { return RxCompoundButton.checked(ocrIsEnabledCheckbox); } @NonNull @Override public Consumer<? super Boolean> getAllowUsToSaveImagesRemotelyConsumer() { return RxCompoundButton.checked(allowUsToSaveImagesRemotelyCheckbox); } }