// Copyright 2010 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.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
import org.npr.android.util.DisplayUtils;
import org.npr.api.ApiConstants;
import java.util.HashMap;
import java.util.Map;
public class NavigationView extends FrameLayout implements
OnItemClickListener {
private class SubActivity {
private final Intent startIntent;
private final String header;
private SubActivity(Intent startIntent) {
this.startIntent = startIntent;
this.header = null;
}
private SubActivity(String header) {
this.startIntent = null;
this.header = header;
}
public boolean isHeader() {
return header != null;
}
@Override
public String toString() {
if (startIntent != null)
return getContext().getString(startIntent.getIntExtra(
Constants.EXTRA_SUBACTIVITY_ID, -1));
else
return header;
}
}
private class NavigationListAdapter extends ArrayAdapter<SubActivity> {
public NavigationListAdapter(Context context, SubActivity[] activities) {
super(context, android.R.layout.simple_list_item_1,
android.R.id.text1, activities);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = super.getView(position, convertView, parent);
SubActivity activity = this.getItem(position);
if (activity != null && activity.isHeader()) {
convertView.setEnabled(false);
convertView.setBackgroundDrawable(getResources().getDrawable(
R.drawable.top_stories_title_background));
convertView.getLayoutParams().height =
DisplayUtils.convertToDIP(getContext(), 30);
((TextView) convertView.findViewById(android.R.id.text1))
.setTextColor(getResources().getColor(R.color.news_title_text));
} else {
convertView.setEnabled(true);
convertView.setBackgroundDrawable(null);
convertView.getLayoutParams().height =
DisplayUtils.convertToDIP(getContext(), 50);
((TextView) convertView.findViewById(android.R.id.text1))
.setTextColor(getResources().getColor(R.color.black));
}
return convertView;
}
}
public NavigationView(Context context) {
super(context);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
init();
}
private void init() {
ViewGroup.inflate(getContext(), R.layout.navigation, this);
ListView listView = (ListView) findViewById(R.id.ActivityList);
String grouping = null;
String description = "Top Stories";
String topicId = "1001";
Map<String, String> params = new HashMap<String, String>();
params.put("id", topicId);
params.put("fields", ApiConstants.STORY_FIELDS);
params.put("sort", "assigned");
String newsUrl = ApiConstants.instance()
.createUrl(ApiConstants.STORY_PATH, params);
final SubActivity[] activities = {
new SubActivity(getContext().getString(R.string.msg_main_section_news)),
new SubActivity(new Intent(getContext(), NewsListActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_subactivity_top_stories)
.putExtra(Constants.EXTRA_QUERY_URL, newsUrl)
.putExtra(Constants.EXTRA_DESCRIPTION, description)
.putExtra(Constants.EXTRA_GROUPING, grouping)
.putExtra(Constants.EXTRA_SIZE, 10)),
new SubActivity(new Intent(getContext(), NewsTopicActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_subactivity_topics)),
new SubActivity(new Intent(getContext(), HourlyNewsActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_subactivity_hourly)),
new SubActivity(getContext().getString(R.string
.msg_main_section_programs)),
new SubActivity(new Intent(getContext(), AllProgramsActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_subactivity_programs)),
new SubActivity(getContext().getString(R.string
.msg_main_section_stations)),
new SubActivity(new Intent(getContext(), StationListActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_subactivity_favorite_stations)
.putExtra(Constants.EXTRA_STATION_LIST_MODE,
StationListActivity.Mode.favoriteStations)),
// new SubActivity(new Intent(getContext(), StationListActivity.class)
// .putExtra(Constants.EXTRA_SUBACTIVITY_ID,
// R.string.msg_main_subactivity_all_stations)
// .putExtra(Constants.EXTRA_STATION_LIST_MODE,
// StationListActivity.Mode.allStations)),
new SubActivity(new Intent(getContext(), StationListActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_subactivity_locate_stations)
.putExtra(Constants.EXTRA_STATION_LIST_MODE,
StationListActivity.Mode.locateStations)),
new SubActivity(getContext().getString(R.string
.msg_main_section_other)),
new SubActivity(new Intent(getContext(), AboutActivity.class)
.putExtra(Constants.EXTRA_SUBACTIVITY_ID,
R.string.msg_main_menu_about)),
};
listView.setAdapter(new NavigationListAdapter(getContext(), activities));
listView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
SubActivity s = (SubActivity) parent.getItemAtPosition(position);
if (!s.isHeader()) {
this.setVisibility(View.GONE);
getContext().startActivity(s.startIntent);
}
}
}