package what.whatandroid.announcements;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.Window;
import android.widget.Toast;
import api.announcements.Announcements;
import api.soup.MySoup;
import what.whatandroid.R;
import what.whatandroid.callbacks.AnnouncementsFragmentCallbacks;
import what.whatandroid.login.LoggedInActivity;
import what.whatandroid.profile.ProfileActivity;
import what.whatandroid.search.SearchActivity;
/**
* The announcements fragment shows announcements and blog posts and is the "main" activity, being
* the first one shown after logging in
*/
public class AnnouncementsActivity extends LoggedInActivity {
/**
* Intent parameters for showing Announcements or Blogs
*/
public final static String SHOW = "what.whatandroid.SHOW";
public final static int ANNOUNCEMENTS = 0, BLOGS = 1;
/**
* Callback to update the displayed fragments list of blog posts or announcements
*/
private AnnouncementsFragmentCallbacks callbacks;
/**
* The announcements being displayed
*/
private Announcements announcements;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_frame);
setupNavDrawer();
int show = getIntent().getIntExtra(SHOW, ANNOUNCEMENTS);
Fragment fragment;
fragment = new AnnouncementsFragment();
callbacks = (AnnouncementsFragmentCallbacks)fragment;
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().add(R.id.container, fragment).commit();
}
@Override
public void onLoggedIn(){
if (announcements == null){
new LoadAnnouncements().execute();
}
}
@Override
public void onBackPressed(){
//If the activity should go back, go back
if (callbacks.backPressed()){
super.onBackPressed();
}
}
/**
* Select the either an adapter for viewing blog posts/announcements or transition
* to a new activity
*
* @param position position in the nav drawer of the item selected
*/
@Override
public void onNavigationDrawerItemSelected(int position){
if (navDrawer == null){
return;
}
String selection = navDrawer.getItem(position);
if (selection.equalsIgnoreCase(getString(R.string.announcements)) && announcements != null){
//Instead swap fragment like Search activity
}
else if (selection.equalsIgnoreCase(getString(R.string.blog)) && announcements != null){
//Instead swap fragment like search activity
}
else if (selection.equalsIgnoreCase(getString(R.string.profile))){
Intent intent = new Intent(this, ProfileActivity.class);
intent.putExtra(ProfileActivity.USER_ID, MySoup.getUserId());
startActivity(intent);
}
else if (selection.equalsIgnoreCase(getString(R.string.torrents))){
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.SEARCH, SearchActivity.TORRENT);
startActivity(intent);
}
else if (selection.equalsIgnoreCase(getString(R.string.artists))){
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.SEARCH, SearchActivity.ARTIST);
startActivity(intent);
}
else if (selection.equalsIgnoreCase(getString(R.string.requests))){
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.SEARCH, SearchActivity.REQUEST);
startActivity(intent);
}
else if (selection.equalsIgnoreCase(getString(R.string.users))){
Intent intent = new Intent(this, SearchActivity.class);
intent.putExtra(SearchActivity.SEARCH, SearchActivity.USER);
startActivity(intent);
}
}
/**
* Async task to load the announcements
*/
private class LoadAnnouncements extends AsyncTask<Void, Void, Announcements> {
/**
* params[0] should be which announcements we want to show after loading is done,
* announcements or blogs
*
* @param params What to show after we're done loading
* @return the loaded announcements
*/
@Override
protected Announcements doInBackground(Void... params){
try {
return Announcements.init();
}
catch (Exception e){
e.printStackTrace();
return null;
}
}
@Override
protected void onPreExecute(){
setProgressBarIndeterminateVisibility(true);
setProgressBarIndeterminate(true);
}
@Override
protected void onPostExecute(Announcements announce){
setProgressBarIndeterminateVisibility(false);
setProgressBarIndeterminate(false);
if (announce != null){
announcements = announce;
callbacks.setAnnouncements(announcements);
}
else {
Toast.makeText(AnnouncementsActivity.this, "Loading announcements failed", Toast.LENGTH_SHORT).show();
}
}
}
}