package com.uservoice.uservoicesdk.activity;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.ViewFlipper;
import com.uservoice.uservoicesdk.R;
import com.uservoice.uservoicesdk.ui.MixedSearchAdapter;
import com.uservoice.uservoicesdk.ui.PortalAdapter;
import com.uservoice.uservoicesdk.ui.SearchAdapter;
import com.uservoice.uservoicesdk.ui.SearchExpandListener;
import com.uservoice.uservoicesdk.ui.SearchQueryListener;
public class BaseActivity extends FragmentActivity {
protected Tab allTab;
protected Tab articlesTab;
protected Tab ideasTab;
protected MixedSearchAdapter searchAdapter;
private int originalNavigationMode = -1;
@Override
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (hasActionBar()) {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
public SearchAdapter<?> getSearchAdapter() {
return searchAdapter;
}
@SuppressLint("NewApi")
protected void setupScopedSearch(Menu menu) {
if (hasActionBar()) {
menu.findItem(R.id.uv_action_search).setOnActionExpandListener(new SearchExpandListener((SearchActivity) this));
SearchView search = (SearchView) menu.findItem(R.id.uv_action_search).getActionView();
search.setOnQueryTextListener(new SearchQueryListener((SearchActivity) this));
searchAdapter = new MixedSearchAdapter(this);
ListView searchView = new ListView(this);
searchView.setAdapter(searchAdapter);
searchView.setOnItemClickListener(searchAdapter);
ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.uv_view_flipper);
viewFlipper.addView(searchView, 1);
ActionBar.TabListener listener = new ActionBar.TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
searchAdapter.setScope((Integer) tab.getTag());
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
};
allTab = getActionBar().newTab().setText(getString(R.string.uv_all_results_filter)).setTabListener(listener).setTag(PortalAdapter.SCOPE_ALL);
getActionBar().addTab(allTab);
articlesTab = getActionBar().newTab().setText(getString(R.string.uv_articles_filter)).setTabListener(listener).setTag(PortalAdapter.SCOPE_ARTICLES);
getActionBar().addTab(articlesTab);
ideasTab = getActionBar().newTab().setText(getString(R.string.uv_ideas_filter)).setTabListener(listener).setTag(PortalAdapter.SCOPE_IDEAS);
getActionBar().addTab(ideasTab);
} else {
menu.findItem(R.id.uv_action_search).setVisible(false);
}
}
@SuppressLint("NewApi")
public void updateScopedSearch(int results, int articleResults, int ideaResults) {
if (hasActionBar()) {
allTab.setText(String.format("%s (%d)", getString(R.string.uv_all_results_filter), results));
articlesTab.setText(String.format("%s (%d)", getString(R.string.uv_articles_filter), articleResults));
ideasTab.setText(String.format("%s (%d)", getString(R.string.uv_ideas_filter), ideaResults));
}
}
@SuppressLint("NewApi")
public void showSearch() {
ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.uv_view_flipper);
viewFlipper.setDisplayedChild(1);
if (hasActionBar()) {
if (originalNavigationMode == -1)
originalNavigationMode = getActionBar().getNavigationMode();
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
}
@SuppressLint("NewApi")
public void hideSearch() {
ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.uv_view_flipper);
viewFlipper.setDisplayedChild(0);
if (hasActionBar()) {
getActionBar().setNavigationMode(originalNavigationMode == -1 ? ActionBar.NAVIGATION_MODE_STANDARD : originalNavigationMode);
}
}
@SuppressLint("NewApi")
public boolean hasActionBar() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && getActionBar() != null;
}
}