diff --git a/clients/android/NewsBlur/res/layout/actionbar_custom_icon.xml b/clients/android/NewsBlur/res/layout/actionbar_custom_icon.xml new file mode 100644 index 000000000..8aa64bb9e --- /dev/null +++ b/clients/android/NewsBlur/res/layout/actionbar_custom_icon.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/clients/android/NewsBlur/src/com/newsblur/activity/FeedItemsList.java b/clients/android/NewsBlur/src/com/newsblur/activity/FeedItemsList.java index 532e7b38f..8c8b7645e 100644 --- a/clients/android/NewsBlur/src/com/newsblur/activity/FeedItemsList.java +++ b/clients/android/NewsBlur/src/com/newsblur/activity/FeedItemsList.java @@ -33,8 +33,7 @@ public class FeedItemsList extends ItemsList { super.onCreate(bundle); - setTitle(feed.title); - UIUtils.setActionBarImage(this, feed.faviconUrl); + UIUtils.setCustomActionBar(this, feed.faviconUrl, feed.title); itemListFragment = (FeedItemListFragment) fragmentManager.findFragmentByTag(FeedItemListFragment.class.getName()); if (itemListFragment == null) { diff --git a/clients/android/NewsBlur/src/com/newsblur/activity/FeedReading.java b/clients/android/NewsBlur/src/com/newsblur/activity/FeedReading.java index 045ade7a6..d6226e713 100644 --- a/clients/android/NewsBlur/src/com/newsblur/activity/FeedReading.java +++ b/clients/android/NewsBlur/src/com/newsblur/activity/FeedReading.java @@ -20,8 +20,7 @@ public class FeedReading extends Reading { Classifier classifier = FeedUtils.dbHelper.getClassifierForFeed(feed.feedId); - setTitle(feed.title); - UIUtils.setActionBarImage(this, feed.faviconUrl); + UIUtils.setCustomActionBar(this, feed.faviconUrl, feed.title); readingAdapter = new FeedReadingAdapter(fragmentManager, feed, classifier, defaultFeedView); diff --git a/clients/android/NewsBlur/src/com/newsblur/activity/ItemsList.java b/clients/android/NewsBlur/src/com/newsblur/activity/ItemsList.java index c1d2a43c1..3b9c63106 100644 --- a/clients/android/NewsBlur/src/com/newsblur/activity/ItemsList.java +++ b/clients/android/NewsBlur/src/com/newsblur/activity/ItemsList.java @@ -54,14 +54,11 @@ public abstract class ItemsList extends NbActivity implements StateChangedListen currentState = (StateFilter) getIntent().getSerializableExtra(EXTRA_STATE); this.fs = createFeedSet(); - requestWindowFeature(Window.FEATURE_PROGRESS); getWindow().setBackgroundDrawableResource(android.R.color.transparent); setContentView(R.layout.activity_itemslist); fragmentManager = getFragmentManager(); - getActionBar().setDisplayHomeAsUpEnabled(true); - this.overlayStatusText = (TextView) findViewById(R.id.itemlist_sync_status); } diff --git a/clients/android/NewsBlur/src/com/newsblur/activity/Reading.java b/clients/android/NewsBlur/src/com/newsblur/activity/Reading.java index eaee0cb4c..4788b0254 100644 --- a/clients/android/NewsBlur/src/com/newsblur/activity/Reading.java +++ b/clients/android/NewsBlur/src/com/newsblur/activity/Reading.java @@ -137,8 +137,6 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener defaultFeedView = (DefaultFeedView) getIntent().getSerializableExtra(EXTRA_DEFAULT_FEED_VIEW); } - getActionBar().setDisplayHomeAsUpEnabled(true); - // this value is expensive to compute but doesn't change during a single runtime this.overlayRangeTopPx = (float) UIUtils.convertDPsToPixels(this, OVERLAY_RANGE_TOP_DP); this.overlayRangeBotPx = (float) UIUtils.convertDPsToPixels(this, OVERLAY_RANGE_BOT_DP); diff --git a/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedItemsList.java b/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedItemsList.java index bc23bf125..dd40c3cc9 100644 --- a/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedItemsList.java +++ b/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedItemsList.java @@ -32,8 +32,7 @@ public class SocialFeedItemsList extends ItemsList { socialFeed = (SocialFeed) getIntent().getSerializableExtra(EXTRA_SOCIAL_FEED); super.onCreate(bundle); - setTitle(socialFeed.feedTitle); - UIUtils.setActionBarImage(this, socialFeed.photoUrl); + UIUtils.setCustomActionBar(this, socialFeed.photoUrl, socialFeed.feedTitle); if (itemListFragment == null) { itemListFragment = SocialFeedItemListFragment.newInstance(socialFeed, currentState, getDefaultFeedView()); diff --git a/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedReading.java b/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedReading.java index 8002875aa..58872d6b6 100644 --- a/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedReading.java +++ b/clients/android/NewsBlur/src/com/newsblur/activity/SocialFeedReading.java @@ -16,8 +16,7 @@ public class SocialFeedReading extends Reading { socialFeed = (SocialFeed) getIntent().getSerializableExtra(EXTRA_SOCIAL_FEED); - setTitle(socialFeed.feedTitle); - UIUtils.setActionBarImage(this, socialFeed.photoUrl); + UIUtils.setCustomActionBar(this, socialFeed.photoUrl, socialFeed.feedTitle); readingAdapter = new MixedFeedsReadingAdapter(getFragmentManager(), defaultFeedView, socialFeed.userId); diff --git a/clients/android/NewsBlur/src/com/newsblur/util/UIUtils.java b/clients/android/NewsBlur/src/com/newsblur/util/UIUtils.java index f4dcfc6fa..613712036 100644 --- a/clients/android/NewsBlur/src/com/newsblur/util/UIUtils.java +++ b/clients/android/NewsBlur/src/com/newsblur/util/UIUtils.java @@ -5,6 +5,7 @@ import static android.graphics.Color.WHITE; import static android.graphics.PorterDuff.Mode.DST_IN; import android.app.Activity; +import android.app.ActionBar; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; @@ -17,9 +18,15 @@ import android.graphics.drawable.BitmapDrawable; import android.os.AsyncTask; import android.os.Build; import android.os.Handler; +import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.ImageView; +import android.widget.TextView; import android.widget.Toast; +import com.newsblur.R; import com.newsblur.activity.NewsBlurApplication; public class UIUtils { @@ -80,35 +87,28 @@ public class UIUtils { } } - public static int getActionBarHeight(Context context) { - TypedArray atts = context.getTheme().obtainStyledAttributes(new int[] { android.R.attr.actionBarSize }); - int h = (int) atts.getDimension(0, 0); - atts.recycle(); - return h; - } - - public static void setActionBarImage(final Activity activity, final String url) { - new AsyncTask() { + public static void setCustomActionBar(final Activity activity, String url, String title) { + activity.getActionBar().setDisplayShowCustomEnabled(true); + activity.getActionBar().setDisplayShowTitleEnabled(false); + activity.getActionBar().setDisplayShowHomeEnabled(false); + View v = LayoutInflater.from(activity).inflate(R.layout.actionbar_custom_icon, null); + TextView titleView = ((TextView) v.findViewById(R.id.actionbar_text)); + titleView.setText(title); + titleView.setOnClickListener(new OnClickListener() { @Override - protected Void doInBackground(Void... arg) { - Bitmap icon = ((NewsBlurApplication) activity.getApplicationContext()).getImageLoader().tryGetImage(url); - if (icon != null) { - // If setLogo() is called with a raw image, it isn't scaled up or down, but drawn raw. Wrapping - // the icon in a BitmapDrawable lets it scale up. Note, though, that the iconSize is actually - // ignored on virtually all platforms and the actionbar re-resizes it up to full height, so - // attempting to add padding will silently fail. - int iconSize = getActionBarHeight(activity); - Bitmap scaledIcon = Bitmap.createScaledBitmap(icon, iconSize, iconSize, false); - final BitmapDrawable draw = new BitmapDrawable(activity.getResources(), scaledIcon); - activity.runOnUiThread(new Runnable() { - public void run() { - activity.getActionBar().setLogo(draw); - } - }); - } - return null; + public void onClick(View v) { + activity.finish(); } - }.execute(); + }); + ImageView iconView = ((ImageView) v.findViewById(R.id.actionbar_icon)); + ((NewsBlurApplication) activity.getApplicationContext()).getImageLoader().displayImage(url, iconView, false); + iconView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + activity.finish(); + } + }); + activity.getActionBar().setCustomView(v, new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); } /**