From 18b3e19b9df9d0d07497df182e9eda70cc047c3d Mon Sep 17 00:00:00 2001 From: Robert Siebert Date: Tue, 22 Apr 2014 09:49:32 +0200 Subject: [PATCH] Moved the logic to set the actionbar icon into the fragments. The activities provide the interface to interact with the actionbar. --- .../tvhclient/ChannelListTabsActivity.java | 14 +++++++ .../tvhclient/ProgramDetailsActivity.java | 37 +++++++++++++---- .../tvhclient/ProgramDetailsFragment.java | 17 +++++++- .../tvhclient/ProgramGuideTabsActivity.java | 13 ++++++ .../tvhclient/ProgramListActivity.java | 21 ++++++++-- .../tvhclient/ProgramListFragment.java | 11 +++-- .../tvhclient/RecordingDetailsActivity.java | 41 +++++++++++++------ .../tvhclient/RecordingDetailsFragment.java | 17 +++++++- .../tvhclient/RecordingListTabsActivity.java | 14 +++++++ 9 files changed, 155 insertions(+), 30 deletions(-) diff --git a/src/org/tvheadend/tvhclient/ChannelListTabsActivity.java b/src/org/tvheadend/tvhclient/ChannelListTabsActivity.java index c358268a68..6b007e6736 100644 --- a/src/org/tvheadend/tvhclient/ChannelListTabsActivity.java +++ b/src/org/tvheadend/tvhclient/ChannelListTabsActivity.java @@ -21,8 +21,10 @@ import org.tvheadend.tvhclient.ChangeLogDialog.ChangeLogDialogInterface; import org.tvheadend.tvhclient.ChannelListFragment.OnChannelListListener; import org.tvheadend.tvhclient.interfaces.ActionBarInterface; +import org.tvheadend.tvhclient.model.Channel; import android.content.Intent; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; @@ -313,6 +315,18 @@ public void setActionBarSubtitle(final String subtitle, final String tag) { } } + @Override + public void setActionBarIcon(Channel channel, String tag) { + if (actionBar != null && channel != null) { + // Show or hide the channel icon if required + boolean showIcon = Utils.showChannelIcons(this); + actionBar.setDisplayUseLogoEnabled(showIcon); + if (showIcon) { + actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); + } + } + } + @Override public void dialogDismissed() { createTabListeners(null); diff --git a/src/org/tvheadend/tvhclient/ProgramDetailsActivity.java b/src/org/tvheadend/tvhclient/ProgramDetailsActivity.java index b76014b864..4fc7f8f6d2 100644 --- a/src/org/tvheadend/tvhclient/ProgramDetailsActivity.java +++ b/src/org/tvheadend/tvhclient/ProgramDetailsActivity.java @@ -19,6 +19,7 @@ */ package org.tvheadend.tvhclient; +import org.tvheadend.tvhclient.interfaces.ActionBarInterface; import org.tvheadend.tvhclient.model.Channel; import org.tvheadend.tvhclient.model.Program; @@ -29,7 +30,7 @@ import android.support.v7.app.ActionBarActivity; import android.view.MenuItem; -public class ProgramDetailsActivity extends ActionBarActivity { +public class ProgramDetailsActivity extends ActionBarActivity implements ActionBarInterface { @SuppressWarnings("unused") private final static String TAG = ProgramDetailsActivity.class.getSimpleName(); @@ -68,14 +69,6 @@ public void onCreate(Bundle savedInstanceState) { actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); - actionBar.setTitle(channel.name); - - // Show or hide the channel icon if required - boolean showIcon = Utils.showChannelIcons(this); - actionBar.setDisplayUseLogoEnabled(showIcon); - if (showIcon) { - actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); - } // Show the fragment Bundle args = new Bundle(); @@ -96,4 +89,30 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } } + + @Override + public void setActionBarTitle(final String title, final String tag) { + if (actionBar != null) { + actionBar.setTitle(title); + } + } + + @Override + public void setActionBarSubtitle(final String subtitle, final String tag) { + if (actionBar != null) { + actionBar.setSubtitle(subtitle); + } + } + + @Override + public void setActionBarIcon(Channel channel, String tag) { + if (actionBar != null && channel != null) { + // Show or hide the channel icon if required + boolean showIcon = Utils.showChannelIcons(this); + actionBar.setDisplayUseLogoEnabled(showIcon); + if (showIcon) { + actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); + } + } + } } diff --git a/src/org/tvheadend/tvhclient/ProgramDetailsFragment.java b/src/org/tvheadend/tvhclient/ProgramDetailsFragment.java index ef655d27f1..f0d6b5d2e7 100644 --- a/src/org/tvheadend/tvhclient/ProgramDetailsFragment.java +++ b/src/org/tvheadend/tvhclient/ProgramDetailsFragment.java @@ -22,6 +22,7 @@ import org.tvheadend.tvhclient.htsp.HTSListener; import org.tvheadend.tvhclient.intent.SearchEPGIntent; import org.tvheadend.tvhclient.intent.SearchIMDbIntent; +import org.tvheadend.tvhclient.interfaces.ActionBarInterface; import org.tvheadend.tvhclient.model.Channel; import org.tvheadend.tvhclient.model.Program; @@ -42,10 +43,10 @@ public class ProgramDetailsFragment extends Fragment implements HTSListener { - @SuppressWarnings("unused") private final static String TAG = ProgramDetailsFragment.class.getSimpleName(); private FragmentActivity activity; + private ActionBarInterface actionBarInterface; private Program program; private Channel channel; @@ -128,6 +129,15 @@ public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); + if (activity instanceof ActionBarInterface) { + actionBarInterface = (ActionBarInterface) activity; + } + + // If the channel or program is null exit + if (channel == null || program == null) { + activity.finish(); + } + title.setText(program.title); channelName.setText(channel.name); Utils.setState(state, program.recording); @@ -156,6 +166,11 @@ public void onResume() { super.onResume(); TVHClientApplication app = (TVHClientApplication) activity.getApplication(); app.addListener(this); + + if (actionBarInterface != null) { + actionBarInterface.setActionBarTitle(channel.name, TAG); + actionBarInterface.setActionBarIcon(channel, TAG); + } } @Override diff --git a/src/org/tvheadend/tvhclient/ProgramGuideTabsActivity.java b/src/org/tvheadend/tvhclient/ProgramGuideTabsActivity.java index 60f683109d..83ecd94dce 100644 --- a/src/org/tvheadend/tvhclient/ProgramGuideTabsActivity.java +++ b/src/org/tvheadend/tvhclient/ProgramGuideTabsActivity.java @@ -20,6 +20,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; @@ -355,6 +356,18 @@ public void setActionBarSubtitle(final String subtitle, final String tag) { } } + @Override + public void setActionBarIcon(Channel channel, String tag) { + if (actionBar != null && channel != null) { + // Show or hide the channel icon if required + boolean showIcon = Utils.showChannelIcons(this); + actionBar.setDisplayUseLogoEnabled(showIcon); + if (showIcon) { + actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); + } + } + } + /** * This activity does not know how many items are in the channel list and * which are selected by the given channel tag. Use the channel list diff --git a/src/org/tvheadend/tvhclient/ProgramListActivity.java b/src/org/tvheadend/tvhclient/ProgramListActivity.java index 7aa397b7df..c0719a1245 100644 --- a/src/org/tvheadend/tvhclient/ProgramListActivity.java +++ b/src/org/tvheadend/tvhclient/ProgramListActivity.java @@ -23,6 +23,7 @@ import org.tvheadend.tvhclient.interfaces.ProgramLoadingInterface; import org.tvheadend.tvhclient.model.Channel; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; @@ -51,7 +52,6 @@ public void onCreate(Bundle icicle) { actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); - actionBar.setTitle(channel.name); // Show the fragment Bundle args = new Bundle(); @@ -74,9 +74,10 @@ public boolean onOptionsItemSelected(MenuItem item) { } @Override - public void setActionBarTitle(final String string, final String tag) { - // TODO Auto-generated method stub - + public void setActionBarTitle(final String title, final String tag) { + if (actionBar != null) { + actionBar.setTitle(title); + } } @Override @@ -90,4 +91,16 @@ public void setActionBarSubtitle(final String subtitle, final String tag) { public void loadMorePrograms(Channel channel) { Utils.loadMorePrograms(this, channel); } + + @Override + public void setActionBarIcon(Channel channel, String tag) { + if (actionBar != null && channel != null) { + // Show or hide the channel icon if required + boolean showIcon = Utils.showChannelIcons(this); + actionBar.setDisplayUseLogoEnabled(showIcon); + if (showIcon) { + actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); + } + } + } } diff --git a/src/org/tvheadend/tvhclient/ProgramListFragment.java b/src/org/tvheadend/tvhclient/ProgramListFragment.java index 12a80e6be7..9573b19ce7 100644 --- a/src/org/tvheadend/tvhclient/ProgramListFragment.java +++ b/src/org/tvheadend/tvhclient/ProgramListFragment.java @@ -108,6 +108,11 @@ public void onActivityCreated(Bundle savedInstanceState) { loadMoreProgramsInterface = (ProgramLoadingInterface) activity; } + // If the channel is null exit + if (channel == null) { + activity.finish(); + } + listView.setOnScrollListener(new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { @@ -157,14 +162,14 @@ public void onResume() { // a program to the schedule or has deleted one from it we need to // update the list to reflect these changes. prList.clear(); - if (channel != null) { - prList.addAll(channel.epg); - } + prList.addAll(channel.epg); adapter.sort(); adapter.notifyDataSetChanged(); if (actionBarInterface != null) { + actionBarInterface.setActionBarTitle(channel.name, TAG); actionBarInterface.setActionBarSubtitle(adapter.getCount() + " " + getString(R.string.programs), TAG); + actionBarInterface.setActionBarIcon(channel, TAG); } } diff --git a/src/org/tvheadend/tvhclient/RecordingDetailsActivity.java b/src/org/tvheadend/tvhclient/RecordingDetailsActivity.java index b25f912fe6..1c30686dd3 100644 --- a/src/org/tvheadend/tvhclient/RecordingDetailsActivity.java +++ b/src/org/tvheadend/tvhclient/RecordingDetailsActivity.java @@ -20,6 +20,8 @@ package org.tvheadend.tvhclient; import org.tvheadend.tvhclient.htsp.HTSListener; +import org.tvheadend.tvhclient.interfaces.ActionBarInterface; +import org.tvheadend.tvhclient.model.Channel; import org.tvheadend.tvhclient.model.Recording; import android.graphics.drawable.BitmapDrawable; @@ -29,7 +31,7 @@ import android.support.v7.app.ActionBarActivity; import android.view.MenuItem; -public class RecordingDetailsActivity extends ActionBarActivity implements HTSListener { +public class RecordingDetailsActivity extends ActionBarActivity implements HTSListener, ActionBarInterface { @SuppressWarnings("unused") private final static String TAG = RecordingDetailsActivity.class.getSimpleName(); @@ -55,17 +57,6 @@ public void onCreate(Bundle savedInstanceState) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); - if (rec.channel != null) { - actionBar.setTitle(rec.channel.name); - - // Show or hide the channel icon if required - boolean showIcon = Utils.showChannelIcons(this); - actionBar.setDisplayUseLogoEnabled(showIcon); - if (showIcon && rec.channel.iconBitmap != null) { - actionBar.setIcon(new BitmapDrawable(getResources(), rec.channel.iconBitmap)); - } - } - // Show the fragment Bundle args = new Bundle(); args.putLong("id", id); @@ -115,4 +106,30 @@ public void run() { }); } } + + @Override + public void setActionBarTitle(final String title, final String tag) { + if (actionBar != null) { + actionBar.setTitle(title); + } + } + + @Override + public void setActionBarSubtitle(final String subtitle, final String tag) { + if (actionBar != null) { + actionBar.setSubtitle(subtitle); + } + } + + @Override + public void setActionBarIcon(Channel channel, String tag) { + if (actionBar != null && channel != null) { + // Show or hide the channel icon if required + boolean showIcon = Utils.showChannelIcons(this); + actionBar.setDisplayUseLogoEnabled(showIcon); + if (showIcon) { + actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); + } + } + } } diff --git a/src/org/tvheadend/tvhclient/RecordingDetailsFragment.java b/src/org/tvheadend/tvhclient/RecordingDetailsFragment.java index f2f215efa2..fa962472f8 100644 --- a/src/org/tvheadend/tvhclient/RecordingDetailsFragment.java +++ b/src/org/tvheadend/tvhclient/RecordingDetailsFragment.java @@ -22,6 +22,7 @@ import org.tvheadend.tvhclient.htsp.HTSListener; import org.tvheadend.tvhclient.intent.SearchEPGIntent; import org.tvheadend.tvhclient.intent.SearchIMDbIntent; +import org.tvheadend.tvhclient.interfaces.ActionBarInterface; import org.tvheadend.tvhclient.model.Recording; import android.app.Activity; @@ -40,10 +41,10 @@ public class RecordingDetailsFragment extends Fragment implements HTSListener { - @SuppressWarnings("unused") private final static String TAG = RecordingDetailsFragment.class.getSimpleName(); private FragmentActivity activity; + private ActionBarInterface actionBarInterface; private Recording rec; private TextView title; @@ -98,6 +99,15 @@ public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); + if (activity instanceof ActionBarInterface) { + actionBarInterface = (ActionBarInterface) activity; + } + + // If the recording is null exit + if (rec == null) { + activity.finish(); + } + title.setText(rec.title); channelName.setText(rec.channel.name); Utils.setState(state, rec); @@ -113,6 +123,11 @@ public void onResume() { super.onResume(); TVHClientApplication app = (TVHClientApplication) activity.getApplication(); app.addListener(this); + + if (actionBarInterface != null) { + actionBarInterface.setActionBarTitle(rec.channel.name, TAG); + actionBarInterface.setActionBarIcon(rec.channel, TAG); + } } @Override diff --git a/src/org/tvheadend/tvhclient/RecordingListTabsActivity.java b/src/org/tvheadend/tvhclient/RecordingListTabsActivity.java index 56b0506a1c..d78950340d 100644 --- a/src/org/tvheadend/tvhclient/RecordingListTabsActivity.java +++ b/src/org/tvheadend/tvhclient/RecordingListTabsActivity.java @@ -21,8 +21,10 @@ import java.lang.reflect.Field; import org.tvheadend.tvhclient.interfaces.ActionBarInterface; +import org.tvheadend.tvhclient.model.Channel; import android.content.Intent; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; @@ -288,4 +290,16 @@ public void setActionBarSubtitle(final String subtitle, final String tag) { actionBar.setSubtitle(subtitle); } } + + @Override + public void setActionBarIcon(final Channel channel, String tag) { + if (actionBar != null && channel != null) { + // Show or hide the channel icon if required + boolean showIcon = Utils.showChannelIcons(this); + actionBar.setDisplayUseLogoEnabled(showIcon); + if (showIcon) { + actionBar.setIcon(new BitmapDrawable(getResources(), channel.iconBitmap)); + } + } + } }