/*
* Copyright (C) 2013 Chris Lacy Licensed under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
* or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package com.tweetlanes.android.core.view;
import android.app.ActionBar;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.view.MenuItem;
import android.widget.ViewSwitcher;
import com.tweetlanes.android.core.R;
import com.tweetlanes.android.core.model.LaneDescriptor;
import com.tweetlanes.android.core.widget.viewpagerindicator.TitleProvider;
public class SearchActivity extends BaseLaneActivity {
private String mSearchTerm;
private SearchAdapter mSearchAdapter;
private ViewSwitcher mViewSwitcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
mSearchTerm = getIntent().getStringExtra("query");
if (mSearchTerm == null) {
Uri data = getIntent().getData();
if (data != null) {
mSearchTerm = data.toString().replace(
"com.tweetlanes.android.core.search://", "");
}
}
super.onCreate(savedInstanceState);
// This could be true if loading back into the app from Multitasking
if (mSearchTerm == null) {
restartApp();
return;
}
ActionBar actionBar = getActionBar();
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(getString(R.string.action_bar_search_title) + " \""
+ mSearchTerm + "\"");
actionBar.setDisplayHomeAsUpEnabled(true);
mViewSwitcher = (ViewSwitcher) findViewById(R.id.rootViewSwitcher);
updateViewVisibility();
}
/*
* (non-Javadoc)
*
* @see
* com.tweetlanes.android.core.view.BaseLaneActivity#getAdapterForViewPager()
*/
@Override
protected PagerAdapter getAdapterForViewPager() {
if (mSearchTerm == null) {
return null;
}
if (mSearchAdapter == null) {
mSearchAdapter = new SearchAdapter(getSupportFragmentManager());
}
return mSearchAdapter;
}
/*
* (non-Javadoc)
*
* @see
* com.tweetlanes.android.core.view.BaseLaneActivity#getFragmentStatePagerAdapter
* ()
*/
@Override
protected FragmentStatePagerAdapter getFragmentStatePagerAdapter() {
return mSearchAdapter;
}
/*
*
*/
private void updateViewVisibility() {
mViewSwitcher.reset();
mViewSwitcher.setDisplayedChild(1);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (super.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return false;
}
}
/*
*
*/
class SearchAdapter extends FragmentStatePagerAdapter implements
TitleProvider {
public SearchAdapter(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
Fragment result;
LaneDescriptor laneDescriptor = getApp().getSearchLaneDescriptor(
position);
switch (laneDescriptor.getLaneType()) {
case SEARCH_TERM:
result = TweetFeedFragment.newInstance(position,
laneDescriptor.getContentHandleBase(), mSearchTerm,
null, getApp().getCurrentAccountKey());
break;
case SEARCH_PERSON:
result = UserFeedFragment.newInstance(position,
laneDescriptor.getContentHandleBase(), mSearchTerm,
null, getApp().getCurrentAccountKey());
break;
default:
result = PlaceholderPagerFragment.newInstance(position,
laneDescriptor.getLaneTitle(), position);
break;
}
return result;
}
@Override
public int getCount() {
return getApp().getSearchLaneDefinitions().size();
}
@Override
public String getTitle(int position) {
return getApp().getSearchLaneDescriptor(position).getLaneTitle()
.toUpperCase();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
/*
* (non-Javadoc)
*
* @see
* android.widget.SearchView.OnQueryTextListener#onQueryTextSubmit(java.
* lang.String)
*/
@Override
public boolean onQueryTextSubmit(String query) {
if (query != null) {
mSearchTerm = query;
getIntent().putExtra("query", query);
getActionBar().setTitle(mSearchTerm);
mSearchAdapter.notifyDataSetChanged();
return true;
}
return false;
}
}