package net.a6te.lazycoder.muslim_pro_islamicremainders.MVP; import android.app.AlarmManager; import android.support.v4.app.Fragment; import android.widget.ArrayAdapter; import net.a6te.lazycoder.muslim_pro_islamicremainders.R; import net.a6te.lazycoder.muslim_pro_islamicremainders.SavedData; import net.a6te.lazycoder.muslim_pro_islamicremainders.adapters.SpinnerAdapter; import net.a6te.lazycoder.muslim_pro_islamicremainders.fragments.Home; import net.a6te.lazycoder.muslim_pro_islamicremainders.interfaces.CallAttachBaseContext; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Random; public class SettingsPresenter implements MVPPresenter.SettingsPresenter{ private Fragment fragment; private List<String > juristicMethods; private List<String > prayerTimeCalculationMethods; private List<String > frequencies; private List<String> languages; private MVPView.SettingsView mvpView; private SavedData savedData; private CallAttachBaseContext callAttachBaseContext; private Home homeFragment; private ArrayAdapter<String> adapter; public SettingsPresenter(Fragment fragment) { this.fragment = fragment; mvpView = (MVPView.SettingsView) fragment; savedData = new SavedData(fragment.getContext()); callAttachBaseContext = (CallAttachBaseContext) fragment.getContext(); homeFragment = new Home(); } @Override public void prepareAdapters(){ languageAdapter(); frequencyAdapter(); prayerTimeCalculationMethod(); juristicMethod(); remainderLanguageAdapter(); } private void remainderLanguageAdapter() { List<String> temp = Arrays.asList(fragment.getContext().getResources().getStringArray(R.array.remainder_language)); int size = temp.size(); boolean[] selectedLanguage = savedData.getRemainderLanguages(size); adapter = new ArrayAdapter<>(fragment.getContext(), android.R.layout.simple_spinner_item); for (String data: temp){ adapter.add(data); } mvpView.initializeRemainderLanguage(adapter,selectedLanguage); } private void juristicMethod() { juristicMethods = null; juristicMethods = Arrays.asList(fragment.getContext().getResources().getStringArray(R.array.juristic_method)); //get saved data from shared preferences int indexNo = savedData.getJuristicMethodId(); String selectedName = juristicMethods.get(indexNo); SpinnerAdapter adapter = new SpinnerAdapter(fragment.getContext(), juristicMethods); mvpView.initializeJuristicSpinner(adapter,selectedName,indexNo); } private void prayerTimeCalculationMethod() { prayerTimeCalculationMethods = null; prayerTimeCalculationMethods = Arrays.asList(fragment.getContext().getResources().getStringArray(R.array.prayer_calculation_method)); int indexNo = savedData.getCalculationMethodId(); String selectedName = prayerTimeCalculationMethods.get(indexNo); SpinnerAdapter adapter = new SpinnerAdapter(fragment.getContext(), prayerTimeCalculationMethods); mvpView.initializePrayerTimeCalculationSpinner(adapter,selectedName, indexNo); } private void frequencyAdapter() { frequencies = null; frequencies = Arrays.asList(fragment.getContext().getResources().getStringArray(R.array.frequency)); int indexNo = savedData.getFrequencySelectedId(); String selectedName = frequencies.get(indexNo); SpinnerAdapter adapter = new SpinnerAdapter(fragment.getContext(), frequencies); mvpView.initializeFrequencySpinner(adapter,selectedName, indexNo); } private void languageAdapter() { languages = null; languages = Arrays.asList(fragment.getContext().getResources().getStringArray(R.array.app_languages)); int indexNo = savedData.getAppLanguageSelectedId(); String selectedName = languages.get(indexNo); SpinnerAdapter adapter = new SpinnerAdapter(fragment.getContext(), languages); mvpView.initializeLanguageSpinner(adapter, selectedName, indexNo); } //save selected item id into shared preferences @Override public void saveAppLanguageId(int id){ savedData.setAppLanguageSelectedId(id); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(500); callAttachBaseContext.onAttachBaseContext(fragment.getContext()); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } @Override public void saveFrequencyId(int id){ long newInterval = calculateInterval(id); Calendar calendar = Calendar.getInstance(); savedData.setFrequencySelectedId(id); savedData.setNewRemainderInterval(newInterval); savedData.setAppStartHour(calendar.get(Calendar.HOUR_OF_DAY)); savedData.setAppStartMin(calendar.get(Calendar.MINUTE)); if (newInterval != savedData.getOldRemainderInterval()) { homeFragment.updateRemainder(fragment.getContext(),calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), newInterval); savedData.setOldRemainderInterval(newInterval); } } private long calculateInterval(int id) { /* <string-array name="frequency"> <item>Every 1 hour</item> <item>Every 3 hours</item> <item>Every 6 hours</item> <item>Every 12 hours</item> <item>Once a day</item> */ switch (id){ case 0: //Every 1 hours return AlarmManager.INTERVAL_HOUR; case 1: //Every 3 hours return (AlarmManager.INTERVAL_HOUR*3); case 2: //Every 6 hours return (AlarmManager.INTERVAL_HOUR*6); case 3: //Every 12 hours return AlarmManager.INTERVAL_HALF_DAY; case 4: //Once a day return AlarmManager.INTERVAL_DAY; } return AlarmManager.INTERVAL_HOUR; } @Override public void saveCalculationMethodId(int id){ savedData.setCalculationMethodId(id); } @Override public void saveJuristicMethodId(int id){ savedData.setJuristicMethodId(id); } @Override public void saveSelectedRemainderLanguage(boolean[] selectedLanguage){ savedData.storeRemainderLanguages(selectedLanguage); generateNewAthkarTable(); } public void generateNewAthkarTable(){ List<String > tableLanguages = Arrays.asList(fragment.getContext().getResources().getStringArray(R.array.remainder_language_table_name)); int size = tableLanguages.size(); boolean[] remainderLanguages = savedData.getRemainderLanguages(size); ArrayList<Integer> indexNoOfSelectedLanguage = new ArrayList<>(); for (int i = 0; i < size; i++){ if (remainderLanguages[i]){ indexNoOfSelectedLanguage.add(i); } } size = indexNoOfSelectedLanguage.size(); Random random= new Random(); int randomSelectedLanguageIndex = random.nextInt(size); String tableName = tableLanguages.get(indexNoOfSelectedLanguage.get(randomSelectedLanguageIndex)); savedData.saveAthkarTableName(tableName);//new image generated table name } }