[npr-android-app] 3 new revisions pushed by adamwbr...@gmail.com on 2012-04-28 19:36 GMT

30 views
Skip to first unread message

npr-and...@googlecode.com

unread,
Apr 28, 2012, 3:36:17 PM4/28/12
to npr-a...@googlegroups.com
3 new revisions:

Revision: 60f0a52c4430
Author: Adam Brown <adamw...@gmail.com>
Date: Wed Apr 25 17:02:51 2012
Log: - Initial changes to upgrade the codebase to SDK15...
http://code.google.com/p/npr-android-app/source/detail?r=60f0a52c4430

Revision: b2fcecd6c185
Author: Adam Brown <adamw...@gmail.com>
Date: Wed Apr 25 17:57:30 2012
Log: - Add in Navigation Menu button (temp art)...
http://code.google.com/p/npr-android-app/source/detail?r=b2fcecd6c185

Revision: 1f24fe526cf5
Author: Adam Brown <adamw...@gmail.com>
Date: Sat Apr 28 09:55:59 2012
Log: - Fixed UI ordering issue
http://code.google.com/p/npr-android-app/source/detail?r=1f24fe526cf5

==============================================================================
Revision: 60f0a52c4430
Author: Adam Brown <adamw...@gmail.com>
Date: Wed Apr 25 17:02:51 2012
Log: - Initial changes to upgrade the codebase to SDK15
+ Removed all deprecated method calls
+ Moved PlayerService to use startForeground() for notification
management as well as ensuring the process is not killed.
+ Dealt with all compiler warnings
- This commit is NOT stable, still Run time considerations to address
from SDK upgrade
http://code.google.com/p/npr-android-app/source/detail?r=60f0a52c4430

Deleted:
/Npr/default.properties
Modified:
/Npr/.classpath
/Npr/.project
/Npr/AndroidManifest.xml
/Npr/src/org/npr/android/news/AllProgramsActivity.java
/Npr/src/org/npr/android/news/BannerView.java
/Npr/src/org/npr/android/news/ImageThreadLoader.java
/Npr/src/org/npr/android/news/ListItemGestureListener.java
/Npr/src/org/npr/android/news/NewsListActivity.java
/Npr/src/org/npr/android/news/NewsStoryActivity.java
/Npr/src/org/npr/android/news/NewsTopicActivity.java
/Npr/src/org/npr/android/news/Playable.java
/Npr/src/org/npr/android/news/PlaybackService.java
/Npr/src/org/npr/android/news/PlaylistAdapter.java
/Npr/src/org/npr/android/news/PlaylistView.java
/Npr/src/org/npr/android/news/ProgramStoryListActivity.java
/Npr/src/org/npr/android/news/RootActivity.java
/Npr/src/org/npr/android/news/StationListAdapter.java
/Npr/src/org/npr/android/news/TitleActivity.java
/Npr/src/org/npr/android/util/ArrayUtils.java
/Npr/src/org/npr/android/util/Base64.java
/Npr/src/org/npr/android/util/PlaylistRepository.java
/Npr/src/org/npr/android/util/Tracker.java
/Npr/src/org/npr/android/widget/WorkspaceView.java
/Npr/src/org/npr/api/Story.java

=======================================
--- /Npr/default.properties Sun May 22 12:54:47 2011
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "build.properties", and override values to adapt the script to your
-# project structure.
-
-# Indicates whether an apk should be generated for each density.
-split.density=false
-# Project target.
-target=android-4
-apk-configurations=
=======================================
--- /Npr/.classpath Tue Sep 14 11:17:25 2010
+++ /Npr/.classpath Wed Apr 25 17:02:51 2012
@@ -4,5 +4,7 @@
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con"
path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="lib" path="libs/libGoogleAnalytics.jar"/>
- <classpathentry kind="output" path="bin"/>
+ <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+ <classpathentry kind="lib" path="libs/crittercism_v1_2_3.jar"/>
+ <classpathentry kind="output" path="bin/classes"/>
</classpath>
=======================================
--- /Npr/.project Mon Oct 4 11:32:32 2010
+++ /Npr/.project Wed Apr 25 17:02:51 2012
@@ -5,16 +5,6 @@
<projects>
</projects>
<buildSpec>
- <buildCommand>
-
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
- <triggers>full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>LaunchConfigHandle</key>
-
<value>&lt;project&gt;/.externalToolBuilders/org.npr.android.AddSvnRevisionToVersion.launch</value>
- </dictionary>
- </arguments>
- </buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
=======================================
--- /Npr/AndroidManifest.xml Wed Apr 25 14:01:45 2012
+++ /Npr/AndroidManifest.xml Wed Apr 25 17:02:51 2012
@@ -3,6 +3,32 @@
xmlns:android="http://schemas.android.com/apk/res/android"
package="org.npr.android.news" android:versionName="2.3"
android:versionCode="3">
+
+ <uses-permission
+ android:name="android.permission.INTERNET"/>
+ <uses-permission
+ android:name="android.permission.ACCESS_MOCK_LOCATION"/>
+ <uses-permission
+ android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+ <uses-permission
+ android:name="android.permission.READ_PHONE_STATE"/>
+ <uses-permission
+ android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ <uses-permission
+ android:name="android.permission.BROADCAST_STICKY"/>
+ <uses-permission
+ android:name="android.permission.BLUETOOTH"/>
+ <uses-permission
+ android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+
+ <uses-sdk
+ android:targetSdkVersion="15"
+ android:minSdkVersion="7"/>
+ <supports-screens
+ android:normalScreens="true"
+ android:anyDensity="true"
+ android:largeScreens="true"/>
+
<application
android:label="@string/app_name"
android:theme="@style/MyTheme"
@@ -95,28 +121,4 @@
<meta-data android:name="android.app.default_searchable"
android:value=".SearchResultsActivity"/>
</application>
- <uses-permission
- android:name="android.permission.INTERNET"/>
- <uses-permission
- android:name="android.permission.ACCESS_MOCK_LOCATION"/>
- <uses-permission
- android:name="android.permission.ACCESS_COARSE_LOCATION"/>
- <uses-permission
- android:name="android.permission.READ_PHONE_STATE"/>
- <uses-permission
- android:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permission
- android:name="android.permission.BROADCAST_STICKY"/>
- <uses-permission
- android:name="android.permission.BLUETOOTH"/>
- <uses-permission
- android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-
- <uses-sdk
- android:targetSdkVersion="7"
- android:minSdkVersion="7"/>
- <supports-screens
- android:normalScreens="true"
- android:anyDensity="true"
- android:largeScreens="true"/>
</manifest>
=======================================
--- /Npr/src/org/npr/android/news/AllProgramsActivity.java Fri Jan 6
11:10:49 2012
+++ /Npr/src/org/npr/android/news/AllProgramsActivity.java Wed Apr 25
17:02:51 2012
@@ -75,7 +75,6 @@
};


- @SuppressWarnings("unchecked")
protected int constructList() {
try {
nowPlayingIDs = PublicBroadcastingClient.getNowPlayingIds();
=======================================
--- /Npr/src/org/npr/android/news/BannerView.java Wed Apr 25 14:01:45 2012
+++ /Npr/src/org/npr/android/news/BannerView.java Wed Apr 25 17:02:51 2012
@@ -136,20 +136,17 @@
private int bannerHeight;
private int screenHeight;

- @SuppressWarnings({"UnusedDeclaration"})
public BannerView(Context context) {
super(context);
this.context = context;
init();
}

- @SuppressWarnings({"UnusedDeclaration"})
public BannerView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
-

@Override
protected void onDetachedFromWindow() {
@@ -218,7 +215,7 @@
TextView left = new TextView(context);
LayoutParams textLayout = new LayoutParams(
dim53,
- LayoutParams.FILL_PARENT,
+ LayoutParams.MATCH_PARENT,
1
);
textLayout.gravity = Gravity.CENTER;
=======================================
--- /Npr/src/org/npr/android/news/ImageThreadLoader.java Thu Jul 21
13:49:41 2011
+++ /Npr/src/org/npr/android/news/ImageThreadLoader.java Wed Apr 25
17:02:51 2012
@@ -46,6 +46,7 @@
public class ImageThreadLoader {
private static final String LOG_TAG = ImageThreadLoader.class.getName();

+ private final Context context;
// Global cache of images.
private final Cache cache;

@@ -62,9 +63,10 @@
private final QueueRunner runner = new QueueRunner();


- private ImageThreadLoader(Cache cache) {
+ private ImageThreadLoader(Cache cache,Context context) {
thread = new Thread(runner);
this.cache = cache;
+ this.context = context;
queue = new ArrayList<QueueItem>();
}

@@ -74,8 +76,8 @@
* memory to store the images and garbage collects them rapidly.
* @return an ImageThreadLoader that uses memory for caching
*/
- public static ImageThreadLoader getInMemoryInstance() {
- return new ImageThreadLoader(new MemoryCache());
+ public static ImageThreadLoader getInMemoryInstance(Context context) {
+ return new ImageThreadLoader(new MemoryCache(),context);
}

/**
@@ -86,7 +88,7 @@
* @return an ImageThreadLoader that uses on-disk cache
*/
public static ImageThreadLoader getOnDiskInstance(Context context) {
- return new ImageThreadLoader(new DiskCache(context));
+ return new ImageThreadLoader(new DiskCache(context),context);
}


@@ -133,7 +135,7 @@
@Override
public void run() {
if (item.listener != null) {
- item.listener.imageLoaded(new BitmapDrawable(bmp));
+ item.listener.imageLoaded(new
BitmapDrawable(context.getResources(),bmp));
}
}
});
@@ -153,7 +155,7 @@
// re-run the network load or something.
Bitmap ref = cache.get(item.url);
if (ref != null) {
- item.listener.imageLoaded(new BitmapDrawable(ref));
+ item.listener.imageLoaded(new
BitmapDrawable(context.getResources(),ref));
} else {
Log.w(LOG_TAG, "Image loader lost the image to GC.");
}
@@ -177,7 +179,7 @@
if (cache.containsKey(uri)) {
Bitmap ref = cache.get(uri);
if (ref != null) {
- return new BitmapDrawable(ref);
+ return new BitmapDrawable(context.getResources(),ref);
}
}

=======================================
--- /Npr/src/org/npr/android/news/ListItemGestureListener.java Sun May 22
12:54:47 2011
+++ /Npr/src/org/npr/android/news/ListItemGestureListener.java Wed Apr 25
17:02:51 2012
@@ -31,6 +31,7 @@
* <p/>
* Author: Jeremy Wadsack
*/
+@SuppressWarnings("unused")
public class ListItemGestureListener
extends GestureDetector.SimpleOnGestureListener {
private static final String LOG_TAG =
=======================================
--- /Npr/src/org/npr/android/news/NewsListActivity.java Wed Apr 25 14:01:45
2012
+++ /Npr/src/org/npr/android/news/NewsListActivity.java Wed Apr 25 17:02:51
2012
@@ -212,7 +212,7 @@
listView.setAdapter(listAdapter);

// Gesture detection
- gestureDetector = new GestureDetector(
+ gestureDetector = new GestureDetector(getApplicationContext(),
new ListItemGestureListener(listView, handler)
);
View.OnTouchListener gestureListener = new View.OnTouchListener() {
=======================================
--- /Npr/src/org/npr/android/news/NewsStoryActivity.java Wed Apr 25
14:01:45 2012
+++ /Npr/src/org/npr/android/news/NewsStoryActivity.java Wed Apr 25
17:02:51 2012
@@ -111,8 +111,8 @@
inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);

FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
- FrameLayout.LayoutParams.FILL_PARENT,
- FrameLayout.LayoutParams.FILL_PARENT
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT
);
layout.setMargins(0, 0, 0, DisplayUtils.convertToDIP(this, 95));
((ViewGroup) findViewById(R.id.TitleContent)).addView(workspace,
layout);
=======================================
--- /Npr/src/org/npr/android/news/NewsTopicActivity.java Fri Jan 6
11:10:49 2012
+++ /Npr/src/org/npr/android/news/NewsTopicActivity.java Wed Apr 25
17:02:51 2012
@@ -69,7 +69,6 @@
private ListAdapter listAdapter;
private ListView listView;

- @SuppressWarnings("unchecked")
private int constructList() {
List<? extends StoryGrouping> groupings =
Topic.factory.downloadStoryGroupings(-1);
=======================================
--- /Npr/src/org/npr/android/news/Playable.java Wed Apr 25 14:01:45 2012
+++ /Npr/src/org/npr/android/news/Playable.java Wed Apr 25 17:02:51 2012
@@ -14,16 +14,16 @@

package org.npr.android.news;

-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-
import org.npr.android.util.PlaylistEntry;
import org.npr.api.Podcast;
import org.npr.api.Station;
import org.npr.api.Story;

+import android.os.Parcel;
+import android.os.Parcelable;
+
public class Playable implements Parcelable {
+ @SuppressWarnings("unused")
private static final String LOG_TAG = Playable.class.getName();

private Playable(long id, String url, String title, boolean isStream,
=======================================
--- /Npr/src/org/npr/android/news/PlaybackService.java Wed Apr 25 14:01:45
2012
+++ /Npr/src/org/npr/android/news/PlaybackService.java Wed Apr 25 17:02:51
2012
@@ -15,8 +15,24 @@

package org.npr.android.news;

+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ConnectException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.UnknownHostException;
+import java.util.List;
+
+import org.npr.android.util.AudioManagerProxy;
+import org.npr.android.util.M3uParser;
+import org.npr.android.util.PlaylistParser;
+import org.npr.android.util.PlaylistRepository;
+import org.npr.android.util.PlsParser;
+import org.npr.android.util.Tracker;
+
import android.app.Notification;
-import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
@@ -29,23 +45,17 @@
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
-import android.os.*;
+import android.os.Build;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.SystemClock;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

-import org.npr.android.util.*;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.ConnectException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.UnknownHostException;
-import java.util.List;
-
public class PlaybackService extends Service implements
OnPreparedListener, OnSeekCompleteListener,
OnBufferingUpdateListener, OnCompletionListener, OnErrorListener,
@@ -100,7 +110,6 @@
private boolean mediaPlayerHasStarted = false;

private StreamProxy proxy;
- private NotificationManager notificationManager;
private static final int NOTIFICATION_ID = 1;
private PlaylistRepository playlist;
private int startId;
@@ -154,8 +163,7 @@
mediaPlayer.setOnInfoListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnSeekCompleteListener(this);
- notificationManager = (NotificationManager) getSystemService(
- Context.NOTIFICATION_SERVICE);
+
playlist = new PlaylistRepository(getApplicationContext(),
getContentResolver());

@@ -200,12 +208,13 @@
}

@Override
- public void onStart(Intent intent, int startId) {
- super.onStart(intent, startId);
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ super.onStartCommand(intent, flags, startId);
Message message = serviceHandler.obtainMessage();
message.arg1 = startId;
message.obj = intent;
serviceHandler.sendMessage(message);
+ return START_STICKY;
}

protected void onHandleIntent(Intent intent) {
@@ -403,13 +412,7 @@
String playUrl = url;
// From 2.2 on (SDK ver 8), the local mediaplayer can handle Shoutcast
// streams natively. Let's detect that, and not proxy.
- int sdkVersion = 0;
- try {
- sdkVersion = Integer.parseInt(Build.VERSION.SDK);
- } catch (NumberFormatException ignored) {
- }
-
- if (stream && sdkVersion < 8) {
+ if (stream && Build.VERSION.SDK_INT < 8) {
if (proxy == null) {
proxy = new StreamProxy();
proxy.init();
@@ -448,15 +451,26 @@
mediaPlayer.start();
mediaPlayerHasStarted = true;

+ presentPlayingNotification();
+
+ // Change broadcasts are sticky, so when a new receiver connects, it
will
+ // have the data without polling.
+ if (lastChangeBroadcast != null) {
+ getApplicationContext().removeStickyBroadcast(lastChangeBroadcast);
+ }
+ lastChangeBroadcast = new Intent(SERVICE_CHANGE_NAME);
+ lastChangeBroadcast.putExtra(Playable.PLAYABLE_TYPE, currentPlayable);
+ getApplicationContext().sendStickyBroadcast(lastChangeBroadcast);
+
+ if (currentPlayable != null && currentPlayable.getUrl() != null) {
+ Tracker.PlayEvent e = new
Tracker.PlayEvent(currentPlayable.getUrl());
+ Tracker.instance(getApplication()).trackLink(e);
+ }
+ }
+
+ private void presentPlayingNotification()
+ {
CharSequence contentText = currentPlayable.getTitle();
- Notification notification =
- new Notification(R.drawable.stat_notify_musicplayer,
- contentText,
- System.currentTimeMillis());
- notification.flags = Notification.FLAG_NO_CLEAR
- | Notification.FLAG_ONGOING_EVENT;
- Context context = getApplicationContext();
- CharSequence title = getString(R.string.app_name);

Class<?> notificationActivity;
if (currentPlayable.getActivityName() != null) {
@@ -468,34 +482,35 @@
} else {
notificationActivity = NewsListActivity.class;
}
- Intent notificationIntent = new Intent(this, notificationActivity);
+
+ Context context = getApplicationContext();
+ CharSequence title = getString(R.string.app_name);
+ Intent notificationIntent;
if (currentPlayable.getActivityData() != null) {
+ notificationIntent = new Intent(this, notificationActivity);
notificationIntent.putExtra(Constants.EXTRA_ACTIVITY_DATA,
currentPlayable.getActivityData());
notificationIntent.putExtra(Constants.EXTRA_DESCRIPTION,
R.string.msg_main_subactivity_nowplaying);
+ } else {
+ notificationIntent = new Intent(this, NewsListActivity.class);
}
notificationIntent.setAction(Intent.ACTION_VIEW);
notificationIntent.addCategory(Intent.CATEGORY_DEFAULT);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
- notification.setLatestEventInfo(context, title, contentText,
contentIntent);
- notificationManager.notify(NOTIFICATION_ID, notification);
-
- // Change broadcasts are sticky, so when a new receiver connects, it
will
- // have the data without polling.
- if (lastChangeBroadcast != null) {
- getApplicationContext().removeStickyBroadcast(lastChangeBroadcast);
- }
- lastChangeBroadcast = new Intent(SERVICE_CHANGE_NAME);
- lastChangeBroadcast.putExtra(Playable.PLAYABLE_TYPE, currentPlayable);
- getApplicationContext().sendStickyBroadcast(lastChangeBroadcast);
-
- if (currentPlayable != null && currentPlayable.getUrl() != null) {
- Tracker.PlayEvent e = new
Tracker.PlayEvent(currentPlayable.getUrl());
- Tracker.instance(getApplication()).trackLink(e);
- }
+
+ Notification.Builder notBuilder = new Notification.Builder(this);
+ notBuilder.setSmallIcon(R.drawable.stat_notify_musicplayer);
+ notBuilder.setContentTitle(title);
+ notBuilder.setContentText(contentText);
+ notBuilder.setContentIntent(contentIntent);
+ notBuilder.setOngoing(true);
+ notBuilder.setWhen(System.currentTimeMillis());
+ Notification notification = notBuilder.getNotification();
+
+ startForeground(NOTIFICATION_ID, notification);
}

synchronized private void pause(boolean maintainFocus) {
@@ -515,7 +530,8 @@
if (!maintainFocus) {
audioManagerProxy.releaseAudioFocus();
}
- notificationManager.cancel(NOTIFICATION_ID);
+
+ stopForeground( true );

if (currentPlayable != null) {
Tracker.PauseEvent e = new
Tracker.PauseEvent(currentPlayable.getUrl());
@@ -612,8 +628,8 @@
}

serviceLooper.quit();
-
- notificationManager.cancel(NOTIFICATION_ID);
+ stopForeground( true );
+
if (lastChangeBroadcast != null) {
getApplicationContext().removeStickyBroadcast(lastChangeBroadcast);
}
=======================================
--- /Npr/src/org/npr/android/news/PlaylistAdapter.java Sun Sep 11 10:17:14
2011
+++ /Npr/src/org/npr/android/news/PlaylistAdapter.java Wed Apr 25 17:02:51
2012
@@ -29,6 +29,7 @@
import org.npr.android.util.PlaylistProvider;

public class PlaylistAdapter extends CursorAdapter {
+ @SuppressWarnings("unused")
private static final String LOG_TAG = PlaylistAdapter.class.getName();
private String activeId;

=======================================
--- /Npr/src/org/npr/android/news/PlaylistView.java Wed Apr 25 14:01:45 2012
+++ /Npr/src/org/npr/android/news/PlaylistView.java Wed Apr 25 17:02:51 2012
@@ -142,19 +142,16 @@
}
};

- @SuppressWarnings({"UnusedDeclaration"})
public PlaylistView(Context context) {
super(context);
this.context = context;
}

- @SuppressWarnings({"UnusedDeclaration"})
public PlaylistView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}

- @SuppressWarnings({"UnusedDeclaration"})
public PlaylistView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
@@ -186,7 +183,7 @@
drawer = (SlidingDrawer) findViewById(R.id.drawer);
drawer.setOnDrawerOpenListener(this);
drawer.setOnDrawerCloseListener(this);
- touchSlop = ViewConfiguration.getTouchSlop();
+ touchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
handle = (RelativeLayout) findViewById(R.id.handle);

playerContracted = (RelativeLayout)
findViewById(R.id.player_contracted);
@@ -259,7 +256,7 @@
listView.setDropListener(this);

// Gesture detection
- gestureDetector = new GestureDetector(
+ gestureDetector = new GestureDetector(getContext(),
new ListItemGestureListener(listView, handler)
);
View.OnTouchListener gestureListener = new View.OnTouchListener() {
@@ -565,7 +562,7 @@

@Override
public void onDrawerOpened() {
- handle.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ handle.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
DisplayUtils.convertToDIP(context, 150)));
playerContracted.setVisibility(View.GONE);
playerExpanded.setVisibility(View.VISIBLE);
@@ -574,7 +571,7 @@

@Override
public void onDrawerClosed() {
- handle.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+ handle.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
DisplayUtils.convertToDIP(context, 95)));
playerContracted.setVisibility(View.VISIBLE);
playerExpanded.setVisibility(View.GONE);
=======================================
--- /Npr/src/org/npr/android/news/ProgramStoryListActivity.java Wed Apr 25
14:01:45 2012
+++ /Npr/src/org/npr/android/news/ProgramStoryListActivity.java Wed Apr 25
17:02:51 2012
@@ -35,6 +35,7 @@
* Author: Jeremy Wadsack
*/
public class ProgramStoryListActivity extends NewsListActivity {
+ @SuppressWarnings("unused")
private static final String LOG_TAG =
ProgramStoryListActivity.class.getName();

=======================================
--- /Npr/src/org/npr/android/news/RootActivity.java Wed Apr 25 14:01:45 2012
+++ /Npr/src/org/npr/android/news/RootActivity.java Wed Apr 25 17:02:51 2012
@@ -15,8 +15,14 @@

package org.npr.android.news;

+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.npr.android.util.PlaylistEntry;
+import org.npr.android.util.PlaylistRepository;
+import org.npr.api.ApiConstants;
+
import android.app.Activity;
-import android.app.ActivityGroup;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -41,21 +47,12 @@
import android.widget.ProgressBar;
import android.widget.TextView;

-import org.npr.android.util.PlaylistEntry;
-import org.npr.android.util.PlaylistRepository;
-import org.npr.api.ApiConstants;
-
-import com.crittercism.app.Crittercism;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
/**
* @author mfred...@google.com (Michael Frederick)
* A base class for all Activities that want to display the
default layout,
* including the PlaylistView.
*/
-public abstract class RootActivity extends ActivityGroup implements
+public abstract class RootActivity extends Activity implements
Trackable, Refreshable, OnClickListener {
private static final String LOG_TAG = RootActivity.class.getName();
private NavigationView navigationView;
@@ -76,8 +73,8 @@
ViewGroup titleFrame = (ViewGroup) findViewById(R.id.TitleContent);
navigationView = new NavigationView(this);
titleFrame.addView(navigationView,
- new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.FILL_PARENT));
+ new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT));
navigationView.setVisibility(View.GONE);

ImageButton mainSearchButton =
@@ -86,8 +83,8 @@

playlistView = new PlaylistView(this);
titleFrame.addView(playlistView,
- new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.FILL_PARENT));
+ new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.MATCH_PARENT));

progressIndicator =
(ProgressBar) findViewById(R.id.WindowProgressIndicator);
=======================================
--- /Npr/src/org/npr/android/news/StationListAdapter.java Fri Jan 6
11:10:49 2012
+++ /Npr/src/org/npr/android/news/StationListAdapter.java Wed Apr 25
17:02:51 2012
@@ -15,15 +15,12 @@

package org.npr.android.news;

-import android.content.Context;
-import android.database.Cursor;
-import android.text.Html;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.TextView;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.ParserConfigurationException;
+
import org.apache.http.client.ClientProtocolException;
import org.npr.android.util.FavoriteStationEntry;
import org.npr.android.util.FavoriteStationsProvider;
@@ -35,10 +32,14 @@
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

-import javax.xml.parsers.ParserConfigurationException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
+import android.content.Context;
+import android.database.Cursor;
+import android.text.Html;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;

public class StationListAdapter extends ArrayAdapter<Station> {
private static final String LOG_TAG = StationListAdapter.class.getName();
=======================================
--- /Npr/src/org/npr/android/news/TitleActivity.java Fri Jan 6 11:10:49
2012
+++ /Npr/src/org/npr/android/news/TitleActivity.java Wed Apr 25 17:02:51
2012
@@ -16,11 +16,11 @@

import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.ViewGroup;
import android.widget.TextView;

public abstract class TitleActivity extends RootActivity {
+ @SuppressWarnings("unused")
private static final String LOG_TAG = TitleActivity.class.getName();
public static final String APP_RESUME = "org.npr.android.APP_RESUME";

=======================================
--- /Npr/src/org/npr/android/util/ArrayUtils.java Sun May 22 12:54:47 2011
+++ /Npr/src/org/npr/android/util/ArrayUtils.java Wed Apr 25 17:02:51 2012
@@ -20,6 +20,7 @@
* Author: Jeremy Wadsack
*/
public class ArrayUtils {
+ @SuppressWarnings("unused")
private static final String LOG_TAG = ArrayUtils.class.getName();

public static int indexOf(int[] list, int item) {
=======================================
--- /Npr/src/org/npr/android/util/Base64.java Sun May 22 12:54:47 2011
+++ /Npr/src/org/npr/android/util/Base64.java Wed Apr 25 17:02:51 2012
@@ -1377,7 +1377,7 @@
@Override
public Class<?> resolveClass(java.io.ObjectStreamClass
streamClass)
throws java.io.IOException, ClassNotFoundException {
- Class c = Class.forName(streamClass.getName(),
false, loader);
+ Class<?> c = Class.forName(streamClass.getName(),
false, loader);
if( c == null ){
return super.resolveClass(streamClass);
} else {
=======================================
--- /Npr/src/org/npr/android/util/PlaylistRepository.java Wed Apr 25
14:01:45 2012
+++ /Npr/src/org/npr/android/util/PlaylistRepository.java Wed Apr 25
17:02:51 2012
@@ -211,7 +211,7 @@
String selection = PlaylistProvider.Items.PLAY_ORDER + " > ?";
String[] selectionArgs = new String[1];
selectionArgs[0] = Integer.toString(entry.playOrder);
- String sort = PlaylistProvider.Items.PLAY_ORDER + " asc";
+ //String sort = PlaylistProvider.Items.PLAY_ORDER + " asc";
PlaylistEntry playlistEntry = retrievePlaylistItem(selection,
selectionArgs, null);
if (playlistEntry == null) {
=======================================
--- /Npr/src/org/npr/android/util/Tracker.java Sun May 22 12:54:47 2011
+++ /Npr/src/org/npr/android/util/Tracker.java Wed Apr 25 17:02:51 2012
@@ -138,7 +138,6 @@

// prop3, eVar3
// Title of current page (same as pageName)
- @SuppressWarnings("unused")
private String pageName;
private static String[] pageNameVars =
new String[] {"pageName", "prop3", "eVar3"};
=======================================
--- /Npr/src/org/npr/android/widget/WorkspaceView.java Sun May 22 12:54:47
2011
+++ /Npr/src/org/npr/android/widget/WorkspaceView.java Wed Apr 25 17:02:51
2012
@@ -115,7 +115,7 @@

paint = new Paint();
paint.setDither(false);
- touchSlop = ViewConfiguration.getTouchSlop();
+ touchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
}


=======================================
--- /Npr/src/org/npr/api/Story.java Wed Apr 25 14:01:45 2012
+++ /Npr/src/org/npr/api/Story.java Wed Apr 25 17:02:51 2012
@@ -65,7 +65,6 @@
private final List<Parent> parents;

public static class Thumbnail {
- @SuppressWarnings("unused")
private final String medium;

public Thumbnail(String medium) {
@@ -286,6 +285,7 @@
private final String type;
private final boolean isPrimary;
private final String title;
+ @SuppressWarnings("unused")
private final String htmlLink;
private final String apiLink;


==============================================================================
Revision: b2fcecd6c185
Author: Adam Brown <adamw...@gmail.com>
Date: Wed Apr 25 17:57:30 2012
Log: - Add in Navigation Menu button (temp art)
- Fixed run time errors resulting from SDK upgrade
+ Network operations on UI Thread moved to back threads
+ Cursor management updated as to not use deprecated patterns
- Other small tweaks
http://code.google.com/p/npr-android-app/source/detail?r=b2fcecd6c185

Added:
/Npr/res/drawable-hdpi/navigation_icon_normal.png
/Npr/res/drawable-hdpi/navigation_icon_pressed.png
/Npr/res/drawable/navigation_button.xml
Modified:
/Npr/res/layout/main.xml
/Npr/src/org/npr/android/news/BannerView.java
/Npr/src/org/npr/android/news/PlaylistView.java
/Npr/src/org/npr/android/news/RootActivity.java
/Npr/src/org/npr/android/news/StationDetailsActivity.java
/Npr/src/org/npr/android/news/StationListActivity.java

=======================================
--- /dev/null
+++ /Npr/res/drawable-hdpi/navigation_icon_normal.png Wed Apr 25 17:57:30
2012
@@ -0,0 +1,18 @@
+‰PNG
+
+
+IHDR 0 0 W ù‡ tEXtSoftware Adobe
ImageReadyqÉe< rIDATxÚìZÏj A u£Q“hÄÆ {ì;ô ì©ôÐœ S< E°/àQ ½•B›Ké3ôÐSžÁkA ! FŒF ÉÆ~¿
+ ›í츓ÝucÉ ËîŽóçû}ÿgÖÈt:e‹LQ¶àô
lÒ¼NÐh4„í···ìðð0N èÊ̘æt # ívÛñ·b±˜Ô4-“H$ØÒÒ’° a ìæææ™ï ¨T*_é¶ã [6 ²x<ÎVWW @8 °®Û hì iè k µZm%›Íî`Qº+s ©Â„pç
d b±Øݳ®ë1ô%Í™ïƒÁ wêõú‡f³9t NÇ0A&“aËËË, ‰( €D¯¯¯ÙÅÅ
+ºIhÚ
+‘¹®©F
æ Ç1% H —* .QHŸ“,aZ i mNã¥NÌ WÍÖèÏ/ë» Ö1"^\ °2` Î õ¦R)) ˜ÎÙÙ ;?? Î#
, ¯ Ž¹µµuO 2ÍeT ˆú+ p ©Ú©Õj
ÇÂñpÁ æ ’¶^Öv;‰@ñ¾ mØç õ ­moólB")Px“æƒPLH À,ÆBó ? 8Í x ‚½a€ ˜eÛöyxr³2e C´.o Ä„ÜJ ÎŒ
+Be
+ê™ åŠÜp8¼ )Kd¡û Ê’µµ5 øM5Îkj ‘&~Rˆ}Žd‡hå» »
+£Nª
+Äa.ÉdÒ,Ȉù_Tä½=99é":Qû º~P¿—NkÏ%ŒÊ4 ËåF
+BᔪÚïWWW {½žÑívÙd2  n>Ÿ µ¾¾þ‰4ô&´0:à &”'6Àôå奙ô 7 õ = åry—ºî Àk êt:¬ßï›f "-˜öÎÇ ˜¬
+ Ý„øæ ÒçLXûà ÜæŸ iÀ©VW &EŒzM ¾ s~ Mú
+ü,%
+ À rªI @˜&ä´n(¥Dh Ó ÝÔ/” ÿ—Qh
+ô¨ö ΄ŽŽŽþé{||ì+ Ú/˜‡Ê
+l ¶··§£ÑèÞ.Ê •J¥{ï8Ô
+L º®›Œ €õ£„ŸÄ¿ € ãì>(çÆV” GúžÈìRšG4z ÚA øÈ IËv\ó Î
M¸©ˆ8!ÛÛÛû²¹¹Yuúº8ϼ@ÛÒÏÕjõ½ €E¡§¿ < ðH c /œkúÔˆ IEND®B`‚
=======================================
--- /dev/null
+++ /Npr/res/drawable-hdpi/navigation_icon_pressed.png Wed Apr 25 17:57:30
2012
@@ -0,0 +1,18 @@
+‰PNG
+
+
+IHDR 0 0 W ù‡ tEXtSoftware Adobe
ImageReadyqÉe< rIDATxÚìZÏj A u£Q“hÄÆ {ì;ô ì©ôÐœ S< E°/àQ ½•B›Ké3ôÐSžÁkA ! FŒF ÉÆ~¿
+ ›í츓ÝucÉ ËîŽóçû}ÿgÖÈt:e‹LQ¶àô
lÒ¼NÐh4„í···ìðð0N èÊ̘æt # ívÛñ·b±˜Ô4-“H$ØÒÒ’° a ìæææ™ï ¨T*_é¶ã [6 ²x<ÎVWW @8 °®Û hì iè k µZm%›Íî`Qº+s ©Â„pç
d b±Øݳ®ë1ô%Í™ïƒÁ wêõú‡f³9t NÇ0A&“aËËË, ‰( €D¯¯¯ÙÅÅ
+ºIhÚ
+‘¹®©F
æ Ç1% H —* .QHŸ“,aZ i mNã¥NÌ WÍÖèÏ/ë» Ö1"^\ °2` Î õ¦R)) ˜ÎÙÙ ;?? Î#
, ¯ Ž¹µµuO 2ÍeT ˆú+ p ©Ú©Õj
ÇÂñpÁ æ ’¶^Öv;‰@ñ¾ mØç õ ­moólB")Px“æƒPLH À,ÆBó ? 8Í x ‚½a€ ˜eÛöyxr³2e C´.o Ä„ÜJ ÎŒ
+Be
+ê™ åŠÜp8¼ )Kd¡û Ê’µµ5 øM5Îkj ‘&~Rˆ}Žd‡hå» »
+£Nª
+Äa.ÉdÒ,Ȉù_Tä½=99é":Qû º~P¿—NkÏ%ŒÊ4 ËåF
+BᔪÚïWWW {½žÑívÙd2  n>Ÿ µ¾¾þ‰4ô&´0:à &”'6Àôå奙ô 7 õ = åry—ºî Àk êt:¬ßï›f "-˜öÎÇ ˜¬
+ Ý„øæ ÒçLXûà ÜæŸ iÀ©VW &EŒzM ¾ s~ Mú
+ü,%
+ À rªI @˜&ä´n(¥Dh Ó ÝÔ/” ÿ—Qh
+ô¨ö ΄ŽŽŽþé{||ì+ Ú/˜‡Ê
+l ¶··§£ÑèÞ.Ê •J¥{ï8Ô
+L º®›Œ €õ£„ŸÄ¿ € ãì>(çÆV” GúžÈìRšG4z ÚA øÈ IËv\ó Î
M¸©ˆ8!ÛÛÛû²¹¹Yuúº8ϼ@ÛÒÏÕjõ½ €E¡§¿ < ðH c /œkúÔˆ IEND®B`‚
=======================================
--- /dev/null
+++ /Npr/res/drawable/navigation_button.xml Wed Apr 25 17:57:30 2012
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/navigation_icon_pressed"/>
+ <item
+ android:drawable="@drawable/navigation_icon_normal"/>
+</selector>
=======================================
--- /Npr/res/layout/main.xml Sun Sep 11 10:17:14 2011
+++ /Npr/res/layout/main.xml Wed Apr 25 17:57:30 2012
@@ -21,6 +21,13 @@
android:src="@drawable/search_button"
android:background="@android:color/transparent"
/>
+
+ <ImageButton
+ android:id="@+id/MainNavButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/navigation_button" />
+
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
=======================================
--- /Npr/src/org/npr/android/news/BannerView.java Wed Apr 25 17:02:51 2012
+++ /Npr/src/org/npr/android/news/BannerView.java Wed Apr 25 17:57:30 2012
@@ -179,15 +179,30 @@
}

void init() {
- Cursor cursor =
context.getContentResolver().query(IPhoneTimersConfProvider.CONTENT_URL,
null, null, null, null);
- while (cursor != null && cursor.moveToNext()) {
- String id =
cursor.getString(cursor.getColumnIndex(IPhoneTimersConfProvider.Items.NAME));
- if (id.equals("banners")) {
- noBannerTimeIncrement =
cursor.getInt(cursor.getColumnIndex(IPhoneTimersConfProvider.Items.TIMER_LENGTH))
* 1000;
- break;
- }
- }
-
+ // We need to avoid running out network operation on the UI Thread
+ new Thread() {
+ @Override
+ public void run() {
+ Cursor cursor =
context.getContentResolver().query(IPhoneTimersConfProvider.CONTENT_URL,
null, null, null, null);
+ while (cursor != null && cursor.moveToNext()) {
+ String id =
cursor.getString(cursor.getColumnIndex(IPhoneTimersConfProvider.Items.NAME));
+ if (id.equals("banners")) {
+ noBannerTimeIncrement =
cursor.getInt(cursor.getColumnIndex(IPhoneTimersConfProvider.Items.TIMER_LENGTH))
* 1000;
+ break;
+ }
+ }
+
+ // This code however does need to run on the UI Thread
+ handler.post(new Runnable() {
+ public void run() {
+ finishInit();
+ }
+ });
+ }
+ }.start();
+ }
+
+ private void finishInit() {
// Don't shown until increment has elapsed
if (System.currentTimeMillis() < noBannerUntilSystemTime) {
setVisibility(View.GONE);
=======================================
--- /Npr/src/org/npr/android/news/PlaylistView.java Wed Apr 25 17:02:51 2012
+++ /Npr/src/org/npr/android/news/PlaylistView.java Wed Apr 25 17:57:30 2012
@@ -218,8 +218,7 @@
clearPlaylist = (Button) findViewById(R.id.clear_playlist);
clearPlaylist.setOnClickListener(this);

- Cursor cursor = context.getContentResolver().query(PlaylistProvider
- .CONTENT_URI, null, null, null, PlaylistProvider.Items.PLAY_ORDER);
+ Cursor cursor = queryPlaylist();
playlistAdapter = new PlaylistAdapter(context, cursor);

changeReceiver = new PlaybackChangeReceiver();
@@ -273,10 +272,16 @@
refreshList();
}

+ private Cursor queryPlaylist()
+ {
+ Cursor cursor = context.getContentResolver().query(PlaylistProvider
+ .CONTENT_URI, null, null, null, PlaylistProvider.Items.PLAY_ORDER);
+ return cursor;
+ }

private void refreshList() {
if (playlistAdapter != null) {
- playlistAdapter.getCursor().requery();
+ playlistAdapter.changeCursor( queryPlaylist() );
playlistAdapter.notifyDataSetChanged();
}
}
=======================================
--- /Npr/src/org/npr/android/news/RootActivity.java Wed Apr 25 17:02:51 2012
+++ /Npr/src/org/npr/android/news/RootActivity.java Wed Apr 25 17:57:30 2012
@@ -35,13 +35,13 @@
import android.util.Log;
import android.view.ContextMenu;
import android.view.KeyEvent;
-import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
+import android.view.Window;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ProgressBar;
@@ -62,6 +62,7 @@

@Override
protected void onCreate(Bundle savedInstanceState) {
+ requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
@@ -80,6 +81,10 @@
ImageButton mainSearchButton =
(ImageButton) findViewById(R.id.MainSearchButton);
mainSearchButton.setOnClickListener(this);
+
+ ImageButton mainNavButton =
+ (ImageButton) findViewById(R.id.MainNavButton);
+ mainNavButton.setOnClickListener(this);

playlistView = new PlaylistView(this);
titleFrame.addView(playlistView,
@@ -105,10 +110,12 @@

protected void startIndeterminateProgressIndicator() {
progressIndicator.setVisibility(View.VISIBLE);
+ // setSupportProgressBarIndeterminateVisibility(true); // Once we move
to a proper action bar
}

protected void stopIndeterminateProgressIndicator() {
progressIndicator.setVisibility(View.INVISIBLE);
+ // setSupportProgressBarIndeterminateVisibility(false); // Once we
move to a proper action bar
}


@@ -232,15 +239,6 @@
}
}
}
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- showHideNavigationMenu();
- // We're showing our own menu, so return false to keep the system one
- // from being displayed
- return false;
- }
-

@Override
public void onCreateContextMenu(ContextMenu menu, View view,
@@ -305,6 +303,9 @@
case R.id.MainSearchButton:
startActivityWithoutAnimation(new Intent(this,
SearchActivity.class));
break;
+ case R.id.MainNavButton:
+ showHideNavigationMenu();
+ break;
}
}

=======================================
--- /Npr/src/org/npr/android/news/StationDetailsActivity.java Fri Jan 6
11:10:49 2012
+++ /Npr/src/org/npr/android/news/StationDetailsActivity.java Wed Apr 25
17:57:30 2012
@@ -20,6 +20,7 @@
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
+import android.os.Handler;
import android.text.Html;
import android.util.Log;
import android.util.TypedValue;
@@ -46,6 +47,8 @@
private String stationId;
private Station station;
private boolean isFavorite;
+
+ private Handler m_uiHandler;

private class ListItem {
private final AudioStream stream;
@@ -188,11 +191,27 @@

@Override
protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
if (getIntent().hasExtra(Constants.EXTRA_STATION_ID)) {
stationId = getIntent().getStringExtra(Constants.EXTRA_STATION_ID);
} else if (getIntent().hasExtra(Constants.EXTRA_ACTIVITY_DATA)) {
stationId =
getIntent().getStringExtra(Constants.EXTRA_ACTIVITY_DATA);
}
+
+ m_uiHandler = new Handler();
+
+ new Thread() {
+ @Override
+ public void run()
+ {
+ setupStation();
+ }
+ }.start();
+ }
+
+ private void setupStation()
+ {
station = StationCache.getStation(stationId);

String selection = FavoriteStationsProvider.Items.STATION_ID + " = ?";
@@ -206,8 +225,6 @@
c.close();

if (station == null) {
- // Must call super or throws exception
- super.onCreate(savedInstanceState);
Log.d(LOG_TAG, "Couldn't get station. Notifying user.");
Toast.makeText(this, R.string.msg_station_not_found,
Toast.LENGTH_SHORT);
if (isFavorite) {
@@ -220,44 +237,47 @@
finish();
return;
}
-
- super.onCreate(savedInstanceState);
-
- ViewGroup container = (ViewGroup) findViewById(R.id.TitleContent);
- ViewGroup.inflate(this, R.layout.station_details, container);
-
- ArrayList<ListItem> listItems = new ArrayList<ListItem>();
- listItems.add(new ListItem(station.getName()));
- listItems.add(new ListItem("Favorites")); // string is a placeholder
- if (station.getAudioStreams().size() > 0) {
- listItems.add(new ListItem(getString(R.string.msg_station_streams) +
- " (" + station.getAudioStreams().size() + ")"));
- for (AudioStream stream : station.getAudioStreams()) {
- if (stream.getTitle() == null) {
- listItems.add(new ListItem(new AudioStream(
- stream.getUrl(),
-
String.format(getString(R.string.format_default_station_name),
- station.getName()
- )
- )));
- } else {
- listItems.add(new ListItem(stream));
- }
- }
- }
- if (station.getPodcasts().size() > 0) {
- listItems.add(new ListItem(getString(R.string.msg_station_podcasts) +
- " (" + station.getPodcasts().size() + ")"));
- for (Podcast podcast : station.getPodcasts()) {
- listItems.add(new ListItem(podcast));
- }
- }
-
- ListView streamList = (ListView)
findViewById(R.id.station_details_list);
- streamList.setOnItemClickListener(this);
-
- listAdapter = new ListItemAdapter(this, listItems);
- streamList.setAdapter(listAdapter);
+
+ m_uiHandler.post( new Runnable() {
+ @Override
+ public void run() {
+ ViewGroup container = (ViewGroup) findViewById(R.id.TitleContent);
+ ViewGroup.inflate(StationDetailsActivity.this,
R.layout.station_details, container);
+
+ ArrayList<ListItem> listItems = new ArrayList<ListItem>();
+ listItems.add(new ListItem(station.getName()));
+ listItems.add(new ListItem("Favorites")); // string is a
placeholder
+ if (station.getAudioStreams().size() > 0) {
+ listItems.add(new
ListItem(getString(R.string.msg_station_streams) +
+ " (" + station.getAudioStreams().size() + ")"));
+ for (AudioStream stream : station.getAudioStreams()) {
+ if (stream.getTitle() == null) {
+ listItems.add(new ListItem(new AudioStream(
+ stream.getUrl(),
+
String.format(getString(R.string.format_default_station_name),
+ station.getName()
+ )
+ )));
+ } else {
+ listItems.add(new ListItem(stream));
+ }
+ }
+ }
+ if (station.getPodcasts().size() > 0) {
+ listItems.add(new
ListItem(getString(R.string.msg_station_podcasts) +
+ " (" + station.getPodcasts().size() + ")"));
+ for (Podcast podcast : station.getPodcasts()) {
+ listItems.add(new ListItem(podcast));
+ }
+ }
+
+ ListView streamList = (ListView)
findViewById(R.id.station_details_list);
+ streamList.setOnItemClickListener(StationDetailsActivity.this);
+
+ listAdapter = new ListItemAdapter(StationDetailsActivity.this,
listItems);
+ streamList.setAdapter(listAdapter);
+ }
+ });
}

@Override
=======================================
--- /Npr/src/org/npr/android/news/StationListActivity.java Thu Jan 19
16:15:42 2012
+++ /Npr/src/org/npr/android/news/StationListActivity.java Wed Apr 25
17:57:30 2012
@@ -15,6 +15,19 @@

package org.npr.android.news;

+import java.util.HashMap;
+import java.util.Map;
+
+import org.npr.android.util.DisplayUtils;
+import org.npr.android.util.FavoriteStationEntry;
+import org.npr.android.util.FavoriteStationsProvider;
+import org.npr.android.util.FavoriteStationsRepository;
+import org.npr.android.util.StationCache;
+import org.npr.android.util.Tracker;
+import org.npr.android.util.Tracker.StationListMeasurement;
+import org.npr.api.ApiConstants;
+import org.npr.api.Station;
+
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -33,15 +46,14 @@
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
-import android.widget.*;
+import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
-import org.npr.android.util.*;
-import org.npr.android.util.Tracker.StationListMeasurement;
-import org.npr.api.ApiConstants;
-import org.npr.api.Station;
-
-import java.util.HashMap;
-import java.util.Map;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;

public class StationListActivity extends TitleActivity implements
OnItemClickListener, AdapterView.OnItemLongClickListener,
OnClickListener, View.OnKeyListener {
@@ -169,7 +181,7 @@
private void loadFromFavorites() {
listInitThread = new Thread(new Runnable() {
public void run() {
- Cursor cursor = managedQuery(FavoriteStationsProvider.CONTENT_URI,
+ Cursor cursor =
getApplicationContext().getContentResolver().query(FavoriteStationsProvider.CONTENT_URI,
null, null, null, null);
listAdapter.initializeList(cursor);
cursor.close();

==============================================================================
Revision: 1f24fe526cf5
Author: Adam Brown <adamw...@gmail.com>
Date: Sat Apr 28 09:55:59 2012
Log: - Fixed UI ordering issue
http://code.google.com/p/npr-android-app/source/detail?r=1f24fe526cf5

Modified:
/Npr/src/org/npr/android/news/RootActivity.java
/Npr/src/org/npr/android/news/StationDetailsActivity.java

=======================================
--- /Npr/src/org/npr/android/news/RootActivity.java Wed Apr 25 17:57:30 2012
+++ /Npr/src/org/npr/android/news/RootActivity.java Sat Apr 28 09:55:59 2012
@@ -142,6 +142,11 @@

}

+ bringPlayerNavToFront();
+ }
+
+ protected void bringPlayerNavToFront()
+ {
// Navigation on top of player, player on top of content
playlistView.bringToFront();
navigationView.bringToFront();
=======================================
--- /Npr/src/org/npr/android/news/StationDetailsActivity.java Wed Apr 25
17:57:30 2012
+++ /Npr/src/org/npr/android/news/StationDetailsActivity.java Sat Apr 28
09:55:59 2012
@@ -276,6 +276,8 @@

listAdapter = new ListItemAdapter(StationDetailsActivity.this,
listItems);
streamList.setAdapter(listAdapter);
+
+ bringPlayerNavToFront();
}
});
}
Reply all
Reply to author
Forward
0 new messages