package openfoodfacts.github.scrachx.openfood.views; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import com.fasterxml.jackson.core.type.TypeReference; import net.steamcrafted.loadtoast.LoadToast; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Locale; import openfoodfacts.github.scrachx.openfood.BuildConfig; import openfoodfacts.github.scrachx.openfood.R; import openfoodfacts.github.scrachx.openfood.models.Additive; import openfoodfacts.github.scrachx.openfood.models.AdditiveDao; import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient; import openfoodfacts.github.scrachx.openfood.utils.JsonUtils; import openfoodfacts.github.scrachx.openfood.utils.Utils; import pl.aprilapps.easyphotopicker.EasyImage; public class SplashActivity extends BaseActivity { private SharedPreferences settings; private AdditiveDao mAdditiveDao; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); settings = getSharedPreferences("prefs", 0); mAdditiveDao = Utils.getAppDaoSession(this).getAdditiveDao(); if((BuildConfig.FLAVOR.equals("off"))) { boolean firstRun = settings.getBoolean("firstRun", true); boolean errorAdditives = settings.getBoolean("errorAdditives", true); boolean errorAllergens = settings.getBoolean("errorAllergens", true); if(!errorAdditives && !errorAllergens) { settings.edit() .putBoolean("firstRun", false) .apply(); firstRun = false; } if (!firstRun) { launchMainActivity(); } else { new GetJson(this).execute(); } } else { launchMainActivity(); } } private void launchMainActivity() { EasyImage.configuration(this) .setImagesFolderName("OFF_Images") .saveInAppExternalFilesDir() .setCopyExistingPicturesToPublicLocation(true); Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); startActivity(mainIntent); finish(); } private class GetJson extends AsyncTask<Void, Integer, Boolean> { private static final String ADDITIVE_IMPORT = "ADDITIVE_IMPORT"; private Activity activity; private LoadToast lt; public GetJson(Activity act) { activity = act; lt = new LoadToast(activity); } @Override protected void onPreExecute() { super.onPreExecute(); lt.setText(activity.getString(R.string.toast_retrieving)); lt.setBackgroundColor(activity.getResources().getColor(R.color.blue)); lt.setTextColor(activity.getResources().getColor(R.color.white)); lt.show(); } @Override protected Boolean doInBackground(Void... arg0) { boolean result = true; boolean errorAdditives = settings.getBoolean("errorAdditives", true); if (!errorAdditives) { return result; } String additivesFile; switch (Locale.getDefault().getLanguage()) { case "fr": additivesFile = "additives_fr.json"; break; case "en": default: additivesFile = "additives_en.json"; break; } InputStream is = null; try { is = getAssets().open(additivesFile); List<Additive> frenchAdditives = JsonUtils.readFor(new TypeReference<List<Additive>>() {}) .readValue(is); mAdditiveDao.insertOrReplaceInTx(frenchAdditives); } catch (IOException e) { result = false; Log.e(ADDITIVE_IMPORT, "Unable to import additives from " + additivesFile); } finally { if (is != null) { try { is.close(); } catch (IOException e1) { Log.e(ADDITIVE_IMPORT, "Unable to close the inputstream of " + additivesFile); } } } return result; } @Override protected void onPostExecute(final Boolean result) { super.onPostExecute(result); final SharedPreferences.Editor editor = settings.edit(); boolean errorAllergens = settings.getBoolean("errorAllergens", true); ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); if (isConnected) { if (errorAllergens) { OpenFoodAPIClient api = new OpenFoodAPIClient(activity); api.getAllergens(value -> { if (result && value) { lt.success(); editor.putBoolean("firstRun", false); } if(!value){ lt.error(); editor.putBoolean("errorAllergens", true); } else { editor.putBoolean("errorAllergens", false); } editor.apply(); Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); startActivity(mainIntent); finish(); }); } } else { if (!result) { lt.error(); editor.putBoolean("errorAdditives", true); editor.apply(); } else { editor.putBoolean("errorAdditives", false); editor.apply(); } Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class); startActivity(mainIntent); finish(); } } } }