package openfoodfacts.github.scrachx.openfood.fragments;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.afollestad.materialdialogs.MaterialDialog;
import com.github.clans.fab.FloatingActionButton;
import net.steamcrafted.loadtoast.LoadToast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
import openfoodfacts.github.scrachx.openfood.R;
import openfoodfacts.github.scrachx.openfood.models.Allergen;
import openfoodfacts.github.scrachx.openfood.models.AllergenDao;
import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient;
import openfoodfacts.github.scrachx.openfood.utils.Utils;
import openfoodfacts.github.scrachx.openfood.views.adapters.AllergensAdapter;
public class AlertUserFragment extends BaseFragment {
private OpenFoodAPIClient api;
private List<Allergen> mAllergensEnabled;
private AllergenDao mAllergenDao;
private AllergensAdapter mAdapter;
private RecyclerView mRvAllergens;
private SharedPreferences mSettings;
private List<Allergen> mAllergensFromDao;
private View mView;
@BindView(R.id.fab) FloatingActionButton mFab;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return createView(inflater, container, R.layout.fragment_alert_allergens);
}
@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mAllergenDao = Utils.getAppDaoSession(getActivity()).getAllergenDao();
mAllergensFromDao = mAllergenDao.loadAll();
api = new OpenFoodAPIClient(getActivity());
mView = view;
mSettings = getActivity().getSharedPreferences("prefs", 0);
boolean firstRunAlert = mSettings.getBoolean("firstRunAlert", true);
if (firstRunAlert) {
new MaterialDialog.Builder(getContext())
.title(R.string.alert_dialog_warning_title)
.content(R.string.warning_alert_data)
.positiveText(R.string.ok_button)
.show();
SharedPreferences.Editor editor = mSettings.edit();
editor.putBoolean("firstRunAlert", false);
editor.apply();
}
mRvAllergens = (RecyclerView) view.findViewById(R.id.alergens_recycle);
mAllergensEnabled = mAllergenDao.queryBuilder().where(AllergenDao.Properties.Enable.eq("true")).list();
mAdapter = new AllergensAdapter(mAllergensEnabled, getActivity());
mRvAllergens.setAdapter(mAdapter);
mRvAllergens.setLayoutManager(new LinearLayoutManager(view.getContext()));
mRvAllergens.setHasFixedSize(true);
}
@OnClick(R.id.fab)
protected void onAddAllergens() {
final LinkedHashMap<Integer,String> allS = new LinkedHashMap<>();
int index = 0;
for (Allergen a : mAllergensFromDao) {
if (Locale.getDefault().getLanguage().contains("fr")){
if(a.getIdAllergen().contains("fr:")) allS.put(index, a.getName().substring(a.getName().indexOf(":")+1));
} else if (Locale.getDefault().getLanguage().contains("en")) {
if(a.getIdAllergen().contains("en:")) allS.put(index, a.getName().substring(a.getName().indexOf(":")+1));
}
index++;
}
if(allS.size() > 0) {
new MaterialDialog.Builder(mView.getContext())
.title(R.string.title_dialog_alert)
.items(allS.values())
.itemsCallback((dialog, view, which, text) -> {
boolean canAdd = true;
int index1 = -1;
String alergeneStringByPos = new ArrayList<String>(allS.values()).get(which);
for(Allergen a : mAllergensEnabled) {
if(a.getName().equals(mAllergensFromDao.get(which).getName())) canAdd = false;
}
for(Allergen a : mAllergensFromDao) {
if (a.getName().substring(a.getName().indexOf(":") + 1).equalsIgnoreCase(alergeneStringByPos)) {
index1 = getKey(allS, alergeneStringByPos);
mAllergensFromDao.get(index1).setEnable("true");
mAllergenDao.update(mAllergensFromDao.get(index1));
}
}
if (canAdd && index1 != -1) {
mAllergensEnabled.add(mAllergensFromDao.get(index1));
mAdapter.notifyItemInserted(mAllergensEnabled.size() - 1);
mRvAllergens.scrollToPosition(mAdapter.getItemCount() - 1);
}
})
.show();
} else {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if(isConnected) {
final LoadToast lt = new LoadToast(getContext());
lt.setText(getContext().getString(R.string.toast_retrieving));
lt.setBackgroundColor(getContext().getResources().getColor(R.color.blue));
lt.setTextColor(getContext().getResources().getColor(R.color.white));
lt.show();
new MaterialDialog.Builder(mView.getContext())
.title(R.string.title_dialog_alert)
.content(R.string.info_download_data)
.positiveText(R.string.txtYes)
.negativeText(R.string.txtNo)
.onPositive((dialog, which) -> {
final SharedPreferences.Editor editor = mSettings.edit();
api.getAllergens(value -> {
editor.putBoolean("errorAllergens", !value).apply();
lt.success();
dialog.hide();
});
})
.show();
} else {
new MaterialDialog.Builder(mView.getContext())
.title(R.string.title_dialog_alert)
.content(R.string.info_download_data_connection)
.neutralText(R.string.txtOk)
.show();
}
}
}
public static Integer getKey(HashMap<Integer, String> map, String value) {
Integer key = null;
for(Map.Entry<Integer, String> entry : map.entrySet()) {
if((value == null && entry.getValue() == null) || (value != null && value.equals(entry.getValue()))) {
key = entry.getKey();
break;
}
}
return key;
}
}