package pl.pola_app.ui.activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; 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.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.squareup.otto.Bus; import javax.inject.Inject; import butterknife.Bind; import butterknife.ButterKnife; import pl.pola_app.PolaApplication; import pl.pola_app.R; import pl.pola_app.helpers.EventLogger; import pl.pola_app.helpers.ProductsListLinearLayoutManager; import pl.pola_app.helpers.SessionId; import pl.pola_app.helpers.Utils; import pl.pola_app.model.SearchResult; import pl.pola_app.ui.adapter.ProductList; import pl.pola_app.ui.adapter.ProductsAdapter; import pl.pola_app.ui.fragment.BarcodeListener; import pl.pola_app.ui.fragment.KeyboardFragment; import pl.pola_app.ui.fragment.ProductDetailsFragment; import pl.pola_app.ui.fragment.ScannerFragment; import pl.tajchert.nammu.Nammu; public class MainActivity extends AppCompatActivity implements MainViewBinder, BarcodeListener { @Inject Bus eventBus; @Bind(R.id.products_list) RecyclerView productsListView; @Bind(R.id.toolbar) Toolbar toolbar; @Bind(R.id.open_keyboard_button) FloatingActionButton openKeyboard; private ScannerFragment scannerFragment; private MainPresenter mainPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this, this); PolaApplication.component(this).inject(this); Nammu.init(this); ProductList productList = ProductList.create(savedInstanceState); productList.setLogger(new EventLogger()); final ProductsAdapter productsAdapter = new ProductsAdapter(this, productList); SessionId sessionId = SessionId.create(this); mainPresenter = MainPresenter.create(this, productList, productsAdapter, sessionId, eventBus); openKeyboard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openKeyboard(); } }); scannerFragment = (ScannerFragment) getFragmentManager().findFragmentById(R.id.scanner_fragment); productsListView.setLayoutManager(new ProductsListLinearLayoutManager(this)); setupActionBar(); getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { if (getFragmentManager().getBackStackEntryCount() > 0) { openKeyboard.hide(); } else { openKeyboard.show(); } } }); } private void setupActionBar() { setSupportActionBar(toolbar); setTitle(getString(R.string.app_name)); final ActionBar supportActionBar = getSupportActionBar(); if (supportActionBar != null) { supportActionBar.setTitle(""); supportActionBar.setDisplayHomeAsUpEnabled(false); supportActionBar.setHomeButtonEnabled(false); } } @Override protected void onStart() { super.onStart(); mainPresenter.register(); } @Override protected void onStop() { mainPresenter.unregister(); super.onStop(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mainPresenter.onSaveState(outState); } @Override public void openProductDetails(@NonNull final SearchResult searchResult) { FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(R.animator.slide_in, 0, 0, R.animator.slide_out); ProductDetailsFragment newFragment = ProductDetailsFragment.newInstance(searchResult); ft.add(R.id.container, newFragment, ProductDetailsFragment.class.getName()); ft.addToBackStack(ProductDetailsFragment.class.getName()); ft.commitAllowingStateLoss(); } public void openKeyboard() { if (getFragmentManager().getBackStackEntryCount() > 0) { return; // prevent adding fragment twice } FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(R.animator.fade_in, 0, 0, R.animator.fade_out); KeyboardFragment newFragment = new KeyboardFragment(); ft.add(R.id.container, newFragment, KeyboardFragment.class.getName()); ft.addToBackStack(KeyboardFragment.class.getName()); ft.commitAllowingStateLoss(); } @Override public void setAdapter(@NonNull final RecyclerView.Adapter adapter) { productsListView.setAdapter(adapter); } public void onBarcode(String barcode) { mainPresenter.onBarcode(barcode); } @Override public void resumeScanning() { scannerFragment.resumeScanning(); } @Override public void turnOffTorch() { scannerFragment.setTorchOff(); } @Override public void showNoConnectionMessage() { Toast.makeText(this, getString(R.string.toast_no_connection), Toast.LENGTH_SHORT).show(); } @Override public void showErrorMessage(String message) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } @Override public void launchReportActivity(String productId) { Intent intent = new Intent(this, CreateReportActivity.class); intent.setAction("product_report"); intent.putExtra("productId", productId); startActivity(intent); } @Override public void dismissProductDetailsView() { getFragmentManager().popBackStack(ProductDetailsFragment.class.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Nammu.onRequestPermissionsResult(requestCode, permissions, grantResults); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // handle item selection Intent intent; switch (item.getItemId()) { case R.id.action_about: intent = new Intent(this, ActivityWebView.class); intent.putExtra("url", Utils.URL_POLA_ABOUT); startActivity(intent); return true; case R.id.action_metodology: intent = new Intent(this, ActivityWebView.class); intent.putExtra("url", Utils.URL_POLA_METHOD); startActivity(intent); return true; case R.id.action_club: intent = new Intent(this, ActivityWebView.class); intent.putExtra("url", Utils.URL_POLA_KJ); startActivity(intent); return true; case R.id.action_team: intent = new Intent(this, ActivityWebView.class); intent.putExtra("url", Utils.URL_POLA_TEAM); startActivity(intent); return true; case R.id.action_partners: intent = new Intent(this, ActivityWebView.class); intent.putExtra("url", Utils.URL_POLA_PARTNERS); startActivity(intent); return true; case R.id.action_bug: intent = new Intent(this, CreateReportActivity.class); intent.setAction("product_report"); startActivity(intent); return true; case R.id.action_mail: Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", Utils.POLA_MAIL, null)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Pola"); startActivity(Intent.createChooser(emailIntent, getString(R.string.send_email_picker))); return true; case R.id.action_rate: Uri uri = Uri.parse("market://details?id=" + this.getPackageName()); intent = new Intent(Intent.ACTION_VIEW, uri); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); try { startActivity(intent); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + this.getPackageName()))); } return true; case R.id.action_fb: intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Utils.URL_POLA_FB)); startActivity(intent); return true; case R.id.action_twitter: intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Utils.URL_POLA_TWITTER)); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } }