package com.alimuzaffar.ramadanalarm.fragments; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.location.Location; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.alimuzaffar.ramadanalarm.Constants; import com.alimuzaffar.ramadanalarm.R; import com.alimuzaffar.ramadanalarm.SetAlarmActivity; import com.alimuzaffar.ramadanalarm.scheduler.RamadanAlarmReceiver; import com.alimuzaffar.ramadanalarm.scheduler.SalaatAlarmReceiver; import com.alimuzaffar.ramadanalarm.util.AppSettings; import com.alimuzaffar.ramadanalarm.util.PrayTime; import java.util.LinkedHashMap; import java.util.TimeZone; public class SalaatTimesFragment extends Fragment implements Constants { private static boolean sIsAlarmInit = false; int mIndex = 0; Location mLastLocation; TextView mAlarm; View mRamadanContainer; public static SalaatTimesFragment newInstance(int index, Location location) { SalaatTimesFragment fragment = new SalaatTimesFragment(); Bundle args = new Bundle(); args.putInt(EXTRA_ALARM_INDEX, index); args.putParcelable(EXTRA_LAST_LOCATION, location); fragment.setArguments(args); return fragment; } public SalaatTimesFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mIndex = getArguments().getInt(EXTRA_ALARM_INDEX); mLastLocation = (Location) getArguments().getParcelable(EXTRA_LAST_LOCATION); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_salaat_times, container, false); init(view); return view; } protected void init(View view) { // In future releases we will add more cards. // Then we'll need to do this for each card. // For now it's included in the layout which // makes it easier to work with the layout editor. // inflater.inflate(R.layout.view_prayer_times, timesContainer, true); if (mLastLocation == null) { return; } //Toolbar will now take on default Action Bar characteristics LinkedHashMap<String, String> prayerTimes = PrayTime.getPrayerTimes(getActivity(), mIndex, mLastLocation.getLatitude(), mLastLocation.getLongitude()); TextView title = (TextView) view.findViewById(R.id.card_title); title.setText(TimeZone.getDefault().getID()); TextView fajr = (TextView) view.findViewById(R.id.fajr); TextView dhuhr = (TextView) view.findViewById(R.id.dhuhr); TextView asr = (TextView) view.findViewById(R.id.asr); TextView maghrib = (TextView) view.findViewById(R.id.maghrib); TextView isha = (TextView) view.findViewById(R.id.isha); TextView sunrise = (TextView) view.findViewById(R.id.sunrise); TextView sunset = (TextView) view.findViewById(R.id.sunset); mAlarm = (TextView) view.findViewById(R.id.alarm); mRamadanContainer = view.findViewById(R.id.ramadan_container); fajr.setText(prayerTimes.get(String.valueOf(fajr.getTag()))); dhuhr.setText(prayerTimes.get(String.valueOf(dhuhr.getTag()))); asr.setText(prayerTimes.get(String.valueOf(asr.getTag()))); maghrib.setText(prayerTimes.get(String.valueOf(maghrib.getTag()))); isha.setText(prayerTimes.get(String.valueOf(isha.getTag()))); sunrise.setText(prayerTimes.get(String.valueOf(sunrise.getTag()))); sunset.setText(prayerTimes.get(String.valueOf(sunset.getTag()))); //set text for the first card. setAlarmButtonText(mAlarm, mIndex); setAlarmButtonClickListener(mAlarm, mIndex); if (!sIsAlarmInit) { if (AppSettings.getInstance().isDefaultSet()) { AppSettings.getInstance().setLatFor(mIndex, mLastLocation.getLatitude()); AppSettings.getInstance().setLngFor(mIndex, mLastLocation.getLongitude()); updateAlarmStatus(); sIsAlarmInit = true; } } } private void setAlarmButtonText(TextView button, int index) { boolean isAlarmSet = AppSettings.getInstance(getActivity()).isAlarmSetFor(index); int isAlarmSetInt = isAlarmSet ? 0 : 1; String buttonText = getResources().getQuantityString(R.plurals.button_alarm, isAlarmSetInt); button.setText(buttonText); boolean isRamadanSet = AppSettings.getInstance(getActivity()).getBoolean(AppSettings.Key.IS_RAMADAN); mRamadanContainer.setVisibility(isRamadanSet? View.VISIBLE : View.GONE); } private void setAlarmButtonClickListener(TextView alarm, int index) { alarm.setOnClickListener(new View.OnClickListener() { int index = 0; @Override public void onClick(View v) { AppSettings settings = AppSettings.getInstance(getActivity()); settings.setLatFor(mIndex, mLastLocation.getLatitude()); settings.setLngFor(mIndex, mLastLocation.getLongitude()); Intent intent = new Intent(getActivity(), SetAlarmActivity.class); intent.putExtra(EXTRA_ALARM_INDEX, index); startActivityForResult(intent, REQUEST_SET_ALARM); } public View.OnClickListener init(int index) { this.index = index; return this; } }.init(index)); } public void setLocation(Location location) { mLastLocation = location; AppSettings.getInstance().setLatFor(mIndex, location.getLatitude()); AppSettings.getInstance().setLngFor(mIndex, location.getLatitude()); if (isAdded()) { init(getView()); } } private void updateAlarmStatus() { setAlarmButtonText(mAlarm, mIndex); AppSettings settings = AppSettings.getInstance(getActivity()); SalaatAlarmReceiver sar = new SalaatAlarmReceiver(); boolean isAlarmSet = settings.isAlarmSetFor(mIndex); sar.cancelAlarm(getActivity()); if (isAlarmSet) { sar.setAlarm(getActivity()); } RamadanAlarmReceiver rar = new RamadanAlarmReceiver(); boolean isRamadanAlarmSet = settings.getBoolean(AppSettings.Key.IS_RAMADAN); rar.cancelAlarm(getActivity()); if (isRamadanAlarmSet) { rar.setAlarm(getActivity()); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SET_ALARM) { if (resultCode == Activity.RESULT_OK) { updateAlarmStatus(); } else { super.onActivityResult(requestCode, resultCode, data); } } } }