// Copyright 2009 Google Inc.
// Copyright 2011 NPR
//
// 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 org.npr.android.news;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class SearchActivity extends TitleActivity implements
OnClickListener, View.OnKeyListener {
private EditText searchText;
private Calendar startDate;
private Calendar endDate;
private Button startDateButton;
private Button endDateButton;
private final SimpleDateFormat dateFormat =
new SimpleDateFormat("MMMM d, yyyy");
private InputMethodManager inputMethodManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewGroup container = (ViewGroup) findViewById(R.id.Content);
ViewGroup.inflate(this, R.layout.search, container);
searchText = (EditText) findViewById(R.id.SearchText);
searchText.setOnKeyListener(this);
inputMethodManager =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
if (inputMethodManager != null) {
inputMethodManager.showSoftInput(searchText,
InputMethodManager.SHOW_IMPLICIT);
}
ImageButton searchButton =
(ImageButton) findViewById(R.id.search_go_button);
searchButton.setOnClickListener(this);
endDate = new GregorianCalendar();
startDate = (Calendar) endDate.clone();
startDate.add(Calendar.DATE, -7);
startDateButton = (Button) findViewById(R.id.StartDateButton);
endDateButton = (Button) findViewById(R.id.EndDateButton);
startDateButton.setText(dateFormat.format(startDate.getTime()));
endDateButton.setText(dateFormat.format(endDate.getTime()));
startDateButton.setOnClickListener(this);
endDateButton.setOnClickListener(this);
}
private void search() {
if (inputMethodManager != null) {
inputMethodManager.hideSoftInputFromWindow(
searchText.getWindowToken(),
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
String text = searchText.getText().toString();
if (text.length() > 0) {
String start = getDate(startDate);
String end = getDate(endDate);
Intent i = new Intent(this, SearchResultsActivity.class);
i.putExtra(SearchResultsActivity.EXTRA_START_DATE, start);
i.putExtra(SearchResultsActivity.EXTRA_END_DATE, end);
i.putExtra(Constants.EXTRA_QUERY_TERM, text);
i.putExtra(Constants.EXTRA_SIZE, 10);
startActivityWithoutAnimation(i);
}
}
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.StartDateButton:
OnDateSetListener callback = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
startDate.set(Calendar.YEAR, year);
startDate.set(Calendar.MONTH, monthOfYear);
startDate.set(Calendar.DATE, dayOfMonth);
startDateButton.setText(dateFormat.format(startDate.getTime()));
}
};
new DatePickerDialog(this, callback, startDate.get(Calendar.YEAR),
startDate.get(Calendar.MONTH), startDate.get(Calendar.DATE)).show();
break;
case R.id.EndDateButton:
OnDateSetListener callbackEnd = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
endDate.set(Calendar.YEAR, year);
endDate.set(Calendar.MONTH, monthOfYear);
endDate.set(Calendar.DATE, dayOfMonth);
endDateButton.setText(dateFormat.format(endDate.getTime()));
}
};
new DatePickerDialog(this, callbackEnd, endDate.get(Calendar.YEAR),
endDate.get(Calendar.MONTH), endDate.get(Calendar.DATE)).show();
break;
case R.id.search_go_button:
search();
}
}
private String getDate(Calendar cal) {
StringBuilder sb = new StringBuilder();
sb.append(cal.get(Calendar.YEAR)).append("-");
// Months are 0-based in Java, 1-based in NPR api.
sb.append(cal.get(Calendar.MONTH) + 1).append("-");
sb.append(cal.get(Calendar.DATE));
return sb.toString();
}
@Override
public CharSequence getMainTitle() {
return getString(R.string.msg_main_subactivity_search);
}
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
switch (keyEvent.getKeyCode()) {
case KeyEvent.KEYCODE_SEARCH:
case KeyEvent.KEYCODE_ENTER:
search();
return true;
}
return false;
}
}