diff --git a/.gitignore b/.gitignore index 0b5a395..04b470c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ +# gradle +.gradle/ +build/ + +# ExoPlayer +ExoPlayer/ + # built application files *.apk *.ap_ diff --git a/README.md b/README.md index 544463d..53d3547 100644 --- a/README.md +++ b/README.md @@ -37,21 +37,10 @@ app's look and feel. The Android SDK for API level 16 is require to build the app. -The White House app uses the following libraries, which are all -included as submodules in `contrib/`: +The White House app uses [ExoPlayer][], release [r1.3.3][]. You need to add the source of the +library into the root directory of wh-app-android yourself, and do -* [ActionBarSherlock][] - action bar for older versions of Android -* [ViewPagerIndicator][] - paging indicators widgets -* [Undergarment][] - slide-out view (side nav) support library - -To initialize the submodules, run: - - git submodule update --init - -The following libraries are included as source: - -* [Zepto.js][] -* [Underscore.js][] + git checkout r1.3.3 ### Code Style @@ -124,12 +113,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -[ActionBarSherlock]: http://actionbarsherlock.com/ -[ViewPagerIndicator]: https://github.com/JakeWharton/Android-ViewPagerIndicator -[Undergarment]: https://github.com/eddieringle/android-undergarment -[Underscore.js]: http://underscorejs.org/ -[Zepto.js]: http://zeptojs.com/ +[ExoPlayer]: https://github.com/google/ExoPlayer +[r1.3.3]: https://github.com/google/ExoPlayer/releases/tag/r1.3.3 [style]: http://source.android.com/source/code-style.html [forking]: https://help.github.com/articles/fork-a-repo diff --git a/app/src/main/java/gov/whitehouse/app/wh/LiveService.java b/app/src/main/java/gov/whitehouse/app/wh/LiveService.java index b939d30..4dbeda1 100644 --- a/app/src/main/java/gov/whitehouse/app/wh/LiveService.java +++ b/app/src/main/java/gov/whitehouse/app/wh/LiveService.java @@ -79,9 +79,10 @@ Notification buildLiveNotification(final FeedItem item) .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION) .setContentIntent( PendingIntent.getActivity(this, 0, liveIntent, PendingIntent.FLAG_UPDATE_CURRENT)) - .setContentTitle("Live @ " + time.format(item.pubDate())) - .setContentText(item.title()) - .setDefaults(NotificationCompat.DEFAULT_SOUND) + .setContentTitle(String.format( + getString(R.string.live_notification_title), time.format(item.pubDate()))) + .setContentText(item.displayTitle()) + .setDefaults(NotificationCompat.DEFAULT_SOUND) .setExtras(new Bundle()) .setSmallIcon(R.drawable.ic_stat_wh) .setSound(notifSound) diff --git a/app/src/main/java/gov/whitehouse/app/wh/MainActivity.java b/app/src/main/java/gov/whitehouse/app/wh/MainActivity.java index be4258d..c10135f 100644 --- a/app/src/main/java/gov/whitehouse/app/wh/MainActivity.java +++ b/app/src/main/java/gov/whitehouse/app/wh/MainActivity.java @@ -653,9 +653,11 @@ void updateLiveEvents() } else { mHasLiveEvents = true; if (feedItems.size() == 1) { - mLiveBar.setText("Live: " + feedItems.get(0).title()); + mLiveBar.setText(String.format(getString(R.string.live_bar_text_single), + feedItems.get(0).displayTitle())); } else { - mLiveBar.setText(Integer.toString(feedItems.size()) + " New Events. Watch Live!"); + mLiveBar.setText(String.format(getString(R.string.live_bar_text_multiple), + Integer.toString(feedItems.size()))); } mLiveBar.setOnClickListener(v -> { mDrawerLayoutCallbacks.clickLive(); diff --git a/app/src/main/java/gov/whitehouse/app/wh/VideoInfoFragment.java b/app/src/main/java/gov/whitehouse/app/wh/VideoInfoFragment.java index ba698a0..5335896 100644 --- a/app/src/main/java/gov/whitehouse/app/wh/VideoInfoFragment.java +++ b/app/src/main/java/gov/whitehouse/app/wh/VideoInfoFragment.java @@ -234,7 +234,7 @@ void onStart() if (mMenu == null) { onCreateToolbar(getToolbar()); } - mTitle.setText(mFeedItem.title()); + mTitle.setText(mFeedItem.displayTitle()); mTitle.setTypeface(Typeface.SERIF); mPicasso.load(mFeedItem.getBestThumbnailUrl(1080)) .error(R.drawable.error_thumbnail) diff --git a/app/src/main/java/gov/whitehouse/app/wh/VideoPlayerFragment.java b/app/src/main/java/gov/whitehouse/app/wh/VideoPlayerFragment.java index 36172c7..c7f5abf 100644 --- a/app/src/main/java/gov/whitehouse/app/wh/VideoPlayerFragment.java +++ b/app/src/main/java/gov/whitehouse/app/wh/VideoPlayerFragment.java @@ -458,6 +458,11 @@ void onCryptoError(MediaCodec.CryptoException e) } + @Override + public void onDecoderInitialized(String decoderName, long elapsedRealtimeMs, long initializationDurationMs) { + + } + @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) diff --git a/app/src/main/java/gov/whitehouse/widget/wh/FeedItemView.java b/app/src/main/java/gov/whitehouse/widget/wh/FeedItemView.java index 7e6f473..66ba174 100644 --- a/app/src/main/java/gov/whitehouse/widget/wh/FeedItemView.java +++ b/app/src/main/java/gov/whitehouse/widget/wh/FeedItemView.java @@ -110,7 +110,7 @@ void bindArticle(FeedItemData data, int position) } else { mTitle.setMinLines(1); } - mTitle.setText(data.item.title()); + mTitle.setText(data.item.displayTitle()); mTitle.setTypeface(Typeface.SERIF); mMetaContainer.setVisibility(View.VISIBLE); if (data.shouldShowDate) { diff --git a/app/src/main/res/layout/fragment_list.xml b/app/src/main/res/layout/fragment_list.xml index 54b335c..05ebecf 100644 --- a/app/src/main/res/layout/fragment_list.xml +++ b/app/src/main/res/layout/fragment_list.xml @@ -15,8 +15,10 @@ Favorites Settings + Live: %1$s + %1$s New Events. Watch Live! + Live @ %1$s + http://www.whitehouse.gov/sites/default/files/feeds/config.json http://www.whitehouse.gov/feed/mobile/live diff --git a/build.gradle b/build.gradle index be00d12..6d0e406 100644 --- a/build.gradle +++ b/build.gradle @@ -11,6 +11,8 @@ buildscript { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' classpath 'me.tatarka:gradle-retrolambda:2.4.1' classpath 'org.robolectric:robolectric-gradle-plugin:0.14.1' + // http://stackoverflow.com/a/29777213/665632 + classpath 'com.novoda:bintray-release:0.2.7' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/data/src/main/java/gov/whitehouse/data/model/FeedItem.java b/data/src/main/java/gov/whitehouse/data/model/FeedItem.java index e1f83f0..5ca6fb7 100644 --- a/data/src/main/java/gov/whitehouse/data/model/FeedItem.java +++ b/data/src/main/java/gov/whitehouse/data/model/FeedItem.java @@ -3,6 +3,8 @@ import android.net.Uri; import android.os.Parcelable; import android.os.SystemClock; +import android.text.Html; +import android.text.Spanned; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; @@ -56,6 +58,10 @@ class FeedItem implements Parcelable public abstract String videoLink(); + public Spanned displayTitle() { + return Html.fromHtml(this.title()); + } + public String getBestThumbnailUrl(int idealWidth) {