/******************************************************************************* * Copyright 2012 Crazywater * * 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 de.knufficast.ui.feed; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import de.knufficast.App; import de.knufficast.R; import de.knufficast.events.EventBus; import de.knufficast.events.Listener; import de.knufficast.events.NewImageEvent; import de.knufficast.logic.db.DBEpisode; import de.knufficast.logic.db.DBFeed; import de.knufficast.ui.episode.EpisodeDetailActivity; import de.knufficast.ui.main.MainActivity; import de.knufficast.ui.settings.SettingsActivity; /** * Activity that displays the details of a {@link DBFeed}, including the list of * episodes. * * @author crazywater * */ public class FeedDetailActivity extends Activity { public static final String FEED_ID_INTENT = "feedIdIntent"; private EpisodesAdapter episodesAdapter; private final Listener<NewImageEvent> newImageListener = new Listener<NewImageEvent>() { @Override public void onEvent(NewImageEvent event) { episodesAdapter.notifyDataSetChanged(); } }; private boolean descriptionVisible = false; private DBFeed feed; private EventBus eventBus; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); setContentView(R.layout.activity_feed_detail); LinearLayout titleBar = (LinearLayout) findViewById(R.id.feed_title_bar); titleBar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { toggleDescription(); } }); } @Override public void onStart() { super.onStart(); long feedId = getIntent().getExtras().getLong(FEED_ID_INTENT); DBFeed feed = new DBFeed(feedId); setFeed(feed); eventBus = App.get().getEventBus(); eventBus.addListener(NewImageEvent.class, newImageListener); } @Override public void onStop() { super.onStop(); eventBus.removeListener(NewImageEvent.class, newImageListener); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // The Android way to ensure correct behavior of the "Up" button in the // action bar Intent parentActivityIntent = new Intent(this, MainActivity.class); parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(parentActivityIntent); finish(); return true; case R.id.menu_settings: Intent intent = new Intent(this, SettingsActivity.class); startActivity(intent); return true; case R.id.menu_unsubscribe_feed: // fire "are you sure" dialog new AlertDialog.Builder(this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle(R.string.delete_feed_title) .setMessage(R.string.delete_feed_message) .setPositiveButton(R.string.delete_feed_confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { App.get().deleteFeed(feed); finish(); } }).setNegativeButton(R.string.delete_feed_cancel, null).show(); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.activity_feed_detail, menu); return true; } private void setFeed(DBFeed feed) { this.feed = feed; TextView descriptionText = (TextView) findViewById(R.id.feed_description_text); descriptionText.setText(feed.getDescription()); TextView titleText = (TextView) findViewById(R.id.feed_title_text); titleText.setText(feed.getTitle()); ImageView feedIcon = (ImageView) findViewById(R.id.feed_icon); feedIcon.setImageDrawable(App.get().getImageCache() .getResource(feed.getImgUrl())); ListView episodeList = (ListView) findViewById(R.id.feed_episode_list); final List<DBEpisode> episodes = feed.getEpisodes(); episodesAdapter = new EpisodesAdapter(this, R.layout.episode_list_item, episodes); episodeList.setAdapter(episodesAdapter); episodeList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { episodeClicked(episodes.get(position)); } }); } private void toggleDescription() { View description = findViewById(R.id.feed_description_scrollview); descriptionVisible = !descriptionVisible; description.setVisibility(descriptionVisible ? View.VISIBLE : View.GONE); } private void episodeClicked(DBEpisode episode) { Intent intent = new Intent(this, EpisodeDetailActivity.class); intent.putExtra(EpisodeDetailActivity.EPISODE_ID_INTENT, episode.getId()); startActivity(intent); } }