package com.alimuzaffar.ramadanalarm;
import android.Manifest;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import com.alimuzaffar.ramadanalarm.fragments.InitialConfigFragment;
import com.alimuzaffar.ramadanalarm.fragments.KaabaLocatorFragment;
import com.alimuzaffar.ramadanalarm.fragments.LocationHelper;
import com.alimuzaffar.ramadanalarm.fragments.SalaatTimesFragment;
import com.alimuzaffar.ramadanalarm.util.AppSettings;
import com.alimuzaffar.ramadanalarm.util.PermissionUtil;
import com.alimuzaffar.ramadanalarm.util.ScreenUtils;
import com.alimuzaffar.ramadanalarm.widget.FragmentStatePagerAdapter;
import com.alimuzaffar.ramadanalarm.widget.SlidingTabLayout;
public class SalaatTimesActivity extends AppCompatActivity implements Constants,
InitialConfigFragment.OnOptionSelectedListener, ViewPager.OnPageChangeListener,
LocationHelper.LocationCallback {
private LocationHelper mLocationHelper;
private Location mLastLocation = null;
private ViewPager mPager;
private ScreenSlidePagerAdapter mAdapter;
private SlidingTabLayout mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppSettings settings = AppSettings.getInstance(this);
//INIT APP
if (!settings.getBoolean(AppSettings.Key.IS_INIT)) {
settings.set(settings.getKeyFor(AppSettings.Key.IS_ALARM_SET, 0), true);
settings.set(settings.getKeyFor(AppSettings.Key.IS_FAJR_ALARM_SET, 0), true);
settings.set(settings.getKeyFor(AppSettings.Key.IS_DHUHR_ALARM_SET, 0), true);
settings.set(settings.getKeyFor(AppSettings.Key.IS_ASR_ALARM_SET, 0), true);
settings.set(settings.getKeyFor(AppSettings.Key.IS_MAGHRIB_ALARM_SET, 0), true);
settings.set(settings.getKeyFor(AppSettings.Key.IS_ISHA_ALARM_SET, 0), true);
settings.set(AppSettings.Key.USE_ADHAN, true);
settings.set(AppSettings.Key.IS_INIT, true);
}
setContentView(R.layout.activity_salaat_times);
ScreenUtils.lockOrientation(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mLocationHelper = (LocationHelper) getFragmentManager().findFragmentByTag(LOCATION_FRAGMENT);
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
mAdapter = new ScreenSlidePagerAdapter(getFragmentManager(),0);
// Assigning ViewPager View and setting the adapter
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.addOnPageChangeListener(this);
// Assiging the Sliding Tab Layout View
mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
mTabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width
// Setting Custom Color for the Scroll bar indicator of the Tab View
/*
mTabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getResources().getColor(R.color.teal_accent);
}
});
*/
mTabs.setSelectedIndicatorColors(getResources().getColor(android.R.color.primary_text_dark));
mTabs.setTextColor(android.R.color.primary_text_dark);
// Setting the ViewPager For the SlidingTabsLayout
mTabs.setViewPager(mPager);
if(mLocationHelper == null) {
mLocationHelper = LocationHelper.newInstance();
getFragmentManager().beginTransaction().add(mLocationHelper, LOCATION_FRAGMENT).commit();
}
if (!settings.getBoolean(AppSettings.Key.IS_TNC_ACCEPTED, false)) {
getWindow().getDecorView().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SalaatTimesActivity.this, TermsAndConditionsActivity.class);
overridePendingTransition(R.anim.enter_from_bottom, R.anim.no_animation);
startActivityForResult(intent, REQUEST_TNC);
}
}, 2000);
}
}
@Override
protected void onResume() {
super.onResume();
if (mLastLocation == null) {
fetchLocation();
}
}
@Override
protected void onDestroy() {
//Just to be sure memory is cleaned up.
mPager.removeOnPageChangeListener(this);
mPager = null;
mAdapter = null;
mTabs = null;
mLastLocation = null;
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_salaat_times, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
startOnboardingFor(0);
return true;
} else if (id == R.id.action_terms) {
Intent intent = new Intent(SalaatTimesActivity.this, TermsAndConditionsActivity.class);
intent.putExtra(TermsAndConditionsActivity.EXTRA_DISPLAY_ONLY, true);
overridePendingTransition(R.anim.enter_from_bottom, R.anim.no_animation);
startActivityForResult(intent, REQUEST_TNC);
}
return super.onOptionsItemSelected(item);
}
private void startOnboardingFor(int index) {
Intent intent = new Intent(getApplicationContext(), OnboardingActivity.class);
intent.putExtra(OnboardingActivity.EXTRA_CARD_INDEX, index);
startActivityForResult(intent, REQUEST_ONBOARDING);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CHECK_SETTINGS) {
switch (resultCode) {
case Activity.RESULT_OK:
// All required changes were successfully made
fetchLocation();
break;
case Activity.RESULT_CANCELED:
// The user was asked to change settings, but chose not to
onLocationSettingsFailed();
break;
default:
onLocationSettingsFailed();
break;
}
} else if (requestCode == REQUEST_ONBOARDING) {
if (resultCode == RESULT_OK) {
onUseDefaultSelected();
}
} else if (requestCode == REQUEST_TNC) {
if (resultCode == RESULT_CANCELED) {
finish();
} else {
AppSettings settings = AppSettings.getInstance(this);
settings.set(AppSettings.Key.IS_TNC_ACCEPTED, true);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
/**
* Callback received when a permissions request has been completed.
*/
private void fetchLocation() {
if (mLocationHelper != null) {
mLocationHelper.checkLocationPermissions();
}
}
@Override
public void onLocationSettingsFailed() {
}
@Override
public void onLocationChanged(Location location) {
mLastLocation = location;
// NOT THE BEST SOLUTION, THINK OF SOMETHING ELSE
mAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), 0);
mPager.setAdapter(mAdapter);
}
@Override
public void onConfigNowSelected(int num) {
startOnboardingFor(num);
}
@Override
public void onUseDefaultSelected() {
if (mLastLocation != null) {
// NOT THE BEST SOLUTION, THINK OF SOMETHING ELSE
mAdapter = new ScreenSlidePagerAdapter(getFragmentManager(),0);
mPager.setAdapter(mAdapter);
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 1) {
if (mAdapter.mKaabaLocatorFragment != null &&
PermissionUtil.hasSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
mAdapter.mKaabaLocatorFragment.showMap();
}
} else {
mAdapter.mKaabaLocatorFragment.hideMap();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
private int mCardIndex;
public KaabaLocatorFragment mKaabaLocatorFragment;
public ScreenSlidePagerAdapter(FragmentManager fm, int index) {
super(fm);
mCardIndex = index;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
if (AppSettings.getInstance(getApplicationContext()).isDefaultSet()) {
return SalaatTimesFragment.newInstance(mCardIndex, mLastLocation);
} else {
return InitialConfigFragment.newInstance();
}
case 1:
return mKaabaLocatorFragment = KaabaLocatorFragment.newInstance(mLastLocation);
}
return null;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return getString(R.string.salaat_times);
} else {
return getString(R.string.kaaba_position);
}
}
}
}