package com.themagpi.activities;
import java.util.Calendar;
import java.util.List;
import java.util.Vector;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.ArrayAdapter;
import android.widget.SpinnerAdapter;
import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.google.android.gcm.GCMRegistrar;
import com.themagpi.adapters.PagerAdapter;
import com.themagpi.android.CompatActionBarNavHandler;
import com.themagpi.android.CompatActionBarNavListener;
import com.themagpi.android.Config;
import com.themagpi.android.R;
import com.themagpi.api.MagPiClient;
import com.themagpi.fragments.IssuesFragment;
import com.themagpi.fragments.NewsFragment;
import com.themagpi.interfaces.Refreshable;
import com.themagpi.interfaces.RefreshableContainer;
public class MagpiMainActivity extends SherlockFragmentActivity
implements ViewPager.OnPageChangeListener , CompatActionBarNavListener, RefreshableContainer {
OnNavigationListener mOnNavigationListener;
SherlockFragment currentFragment;
private PagerAdapter mPagerAdapter;
private ViewPager mViewPager;
private Menu menu;
private LayoutInflater inflater;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
getSupportMenuInflater().inflate(R.menu.activity_magpi, menu);
this.inflater = (LayoutInflater) ((SherlockFragmentActivity) this).getSupportActionBar().getThemedContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return true;
}
private void intialiseViewPager() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, IssuesFragment.class.getName()));
fragments.add(Fragment.instantiate(this, NewsFragment.class.getName()));
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
this.mViewPager.setAdapter(this.mPagerAdapter);
this.mViewPager.setOnPageChangeListener(this);
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item)
{
switch(item.getItemId()) {
case R.id.menu_refresh:
refreshFragment((Refreshable)this.mPagerAdapter.getItem(mViewPager.getCurrentItem()));
break;
case R.id.menu_settings:
Intent intentSettings = new Intent(this, MagpiSettingsActivity.class);
startActivity(intentSettings);
break;
case R.id.menu_about:
Intent intentAbout = new Intent(this, AboutActivity.class);
startActivity(intentAbout);
break;
}
return super.onOptionsItemSelected(item);
}
public void refreshFragment(Refreshable fragment) {
if(fragment != null)
fragment.refresh();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_magpi_main);
try {
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String idGcm = GCMRegistrar.getRegistrationId(this);
if (TextUtils.isEmpty(idGcm)) {
Log.e("GCM", "NOT registered");
GCMRegistrar.register(MagpiMainActivity.this, Config.SENDER_ID);
} else {
Log.e("GCM", "Already registered" + idGcm);
if(isTimeToRegister())
new MagPiClient().registerDevice(this, idGcm);
}
} catch (UnsupportedOperationException ex) {
Log.e("GCM", "Google Cloud Messaging not supported - please install Google Apps package!");
}
mOnNavigationListener = new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int position, long itemId) {
return true;
}
};
this.intialiseViewPager();
CompatActionBarNavHandler handler = new CompatActionBarNavHandler(this);
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.dropdown_array,
android.R.layout.simple_spinner_dropdown_item);
getSupportActionBar().setListNavigationCallbacks(mSpinnerAdapter, mOnNavigationListener);
getSupportActionBar().setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
final String CATEGORIES[] = getResources().getStringArray(R.array.dropdown_array);
for (int i = 0; i < CATEGORIES.length; i++) {
this.getSupportActionBar().addTab(this.getSupportActionBar().newTab().setText(
CATEGORIES[i]).setTabListener(handler));
}
getSupportActionBar().setSelectedNavigationItem(0);
}
private boolean isTimeToRegister() {
SharedPreferences prefs = this.getSharedPreferences("MAGPI_REGISTRATION", Context.MODE_PRIVATE);
long timeLastRegistration = prefs.getLong("TIME_LAST_REG", 0L);
long currentTime = Calendar.getInstance().getTimeInMillis();
Log.e("NOW", ""+ currentTime);
Log.e("LAST",""+timeLastRegistration);
if(currentTime > timeLastRegistration + 86400000L * 3L)
return true;
return false;
}
@Override
public void onCategorySelected(int catIndex) {
this.mViewPager.setCurrentItem(catIndex);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int pos) {
getSupportActionBar().setSelectedNavigationItem(pos);
}
private int refreshRequests = 0;
@Override
public synchronized void startRefreshIndicator() {
refreshRequests++;
if(menu != null)
menu.findItem(R.id.menu_refresh).setActionView(inflater.inflate(R.layout.actionbar_refresh_progress, null));
}
@Override
public synchronized void stopRefreshIndicator() {
refreshRequests--;
if(refreshRequests == 0 && menu != null)
menu.findItem(R.id.menu_refresh).setActionView(null);
}
}