package com.pivotallabs.tracker;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import com.pivotallabs.NotifyDataSetChangedCallbacks;
import com.pivotallabs.R;
import com.pivotallabs.ViewVisibleWhileOutstandingCallbacks;
import com.pivotallabs.api.ApiGateway;
public class RecentActivityActivity extends Activity {
ApiGateway apiGateway = new ApiGateway();
SignInDialog signInDialog;
private AuthenticationGateway authenticationGateway;
private RecentActivities recentActivities;
private ViewVisibleWhileOutstandingCallbacks showLoadingWhileOutstanding;
private NotifyDataSetChangedCallbacks notifyDataSetChangedCallbacks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recent_activity_layout);
authenticationGateway = new AuthenticationGateway(apiGateway, this);
recentActivities = new RecentActivities(apiGateway, authenticationGateway);
ListView recentActivityListView = (ListView) findViewById(R.id.recent_activity_list);
View loadingView = getLayoutInflater().inflate(R.layout.loading_view, recentActivityListView, false);
recentActivityListView.addFooterView(loadingView, null, false);
recentActivityListView.setFooterDividersEnabled(false);
RecentActivityAdapter recentActivityAdapter = new RecentActivityAdapter(recentActivities, getLayoutInflater());
recentActivityListView.setAdapter(recentActivityAdapter);
showLoadingWhileOutstanding = new ViewVisibleWhileOutstandingCallbacks(loadingView);
notifyDataSetChangedCallbacks = new NotifyDataSetChangedCallbacks(recentActivityAdapter);
updateOrSignIn();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
addSignOutMenuItem(menu);
return true;
}
private void updateOrSignIn() {
if (authenticationGateway.isAuthenticated()) {
update();
} else {
showSignInDialog();
}
}
private void update() {
recentActivities.update(showLoadingWhileOutstanding, notifyDataSetChangedCallbacks);
}
private void addSignOutMenuItem(Menu menu) {
MenuItem signOutMenuItem = menu.add("Sign Out");
signOutMenuItem.setEnabled(authenticationGateway.isAuthenticated());
signOutMenuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
authenticationGateway.signOut();
finish();
return true;
}
});
}
private void showSignInDialog() {
signInDialog = new SignInDialog(this, authenticationGateway);
signInDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
updateOrFinish();
}
});
signInDialog.show();
}
private void updateOrFinish() {
if (authenticationGateway.isAuthenticated()) {
update();
} else {
finish();
}
}
}