package com.dozuki.ifixit.ui.dozuki;
import android.app.SearchManager;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentTransaction;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.actionbarsherlock.widget.SearchView;
import com.dozuki.ifixit.App;
import com.dozuki.ifixit.R;
import com.dozuki.ifixit.model.dozuki.Site;
import com.dozuki.ifixit.model.user.LoginEvent;
import com.dozuki.ifixit.ui.BaseActivity;
import com.dozuki.ifixit.util.api.ApiCall;
import com.dozuki.ifixit.util.api.ApiEvent;
import com.dozuki.ifixit.util.api.Api;
import com.google.analytics.tracking.android.Fields;
import com.google.analytics.tracking.android.MapBuilder;
import com.squareup.otto.Subscribe;
import java.util.ArrayList;
public class SiteListActivity extends BaseActivity
implements SearchView.OnQueryTextListener {
private static final String SITE_LIST = "SITE_LIST";
private static final String SITE_LIST_DIALOG = "SITE_LIST_DIALOG";
private Button mSiteListButton;
private SiteListDialogFragment mSiteListDialog;
private ArrayList<Site> mSiteList;
@Override
public void onCreate(Bundle savedInstanceState) {
getSupportActionBar().hide();
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mSiteList = (ArrayList<Site>)savedInstanceState.getSerializable(SITE_LIST);
}
if (mSiteList == null) {
Api.call(this, ApiCall.sites());
}
setTheme(R.style.Theme_Sherlock_Light);
setContentView(R.layout.site_list);
mSiteListButton = (Button)findViewById(R.id.list_dialog_btn);
Typeface btnType = Typeface.createFromAsset(getAssets(), "fonts/ProximaNovaRegular.ttf");
mSiteListButton.setTypeface(btnType);
mSiteListButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
mSiteListDialog = SiteListDialogFragment.newInstance();
mSiteListDialog.setSites(mSiteList, false);
mSiteListDialog.setStyle(DialogFragment.STYLE_NO_TITLE,
android.R.style.Theme_Holo_Light_DialogWhenLarge);
mSiteListDialog.show(ft, SITE_LIST_DIALOG);
}
});
mSiteListDialog = (SiteListDialogFragment)getSupportFragmentManager().
findFragmentByTag(SITE_LIST_DIALOG);
App.sendScreenView("/sitelist");
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable(SITE_LIST, mSiteList);
}
@Override
public void onResume() {
if (!App.get().isLoggingIn()) {
/**
* Reset the current site to Dozuki anytime this Activity resumes
* unless the user is logging in because the current site needs to be
* set for login so the API call goes to the right site.
*/
App.get().setSite(Site.getSite("dozuki"));
}
super.onResume();
}
@Override
public void onCancelLogin(LoginEvent.Cancel event) {
// Reset to Dozuki when login is cancelled.
App.get().setSite(Site.getSite("dozuki"));
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
@Subscribe
public void onSites(ApiEvent.Sites event) {
if (!event.hasError()) {
mSiteList = event.getResult();
if (mSiteListDialog != null) {
mSiteListDialog.setSites(mSiteList, true);
}
} else {
Api.getErrorDialog(this, event).show();
}
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
search(query);
}
}
@Override
public boolean onQueryTextChange(String newText) {
if (mSiteListDialog != null) {
if (newText.length() == 0) {
mSiteListDialog.setSites(mSiteList, true);
} else {
// Perform search on every key press.
search(newText);
}
}
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
private void search(String query) {
String lowerQuery = query.toLowerCase();
ArrayList<Site> matchedSites = new ArrayList<Site>();
for (Site site : mSiteList) {
if (site.search(lowerQuery)) {
matchedSites.add(site);
}
}
mSiteListDialog.setSites(matchedSites, true);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
/**
* We want to ignore the hardware search button if the dialog doesn't handle it.
*/
return keyCode == KeyEvent.KEYCODE_SEARCH || super.onKeyUp(keyCode, event);
}
@Override
public boolean neverFinishActivityOnLogout() {
return true;
}
}