From 86f86d19a3eb76c7760d62f1e45fd88c5ced8f48 Mon Sep 17 00:00:00 2001 From: pat Date: Wed, 21 Oct 2015 22:00:48 -0400 Subject: [PATCH 01/11] retrofit and reactive --- app/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index e0bc1e6..020b9cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,5 +25,8 @@ dependencies { compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' compile 'com.google.android.gms:play-services:7.5.0' compile 'com.squareup.picasso:picasso:2.5.2' + compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.jakewharton:butterknife:7.0.1' + compile 'io.reactivex:rxandroid:1.0.1' + compile 'io.reactivex:rxjava:1.0.14' } From ed586dbcc61c4a8889ae6480a8468a402153e0ed Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Thu, 22 Oct 2015 18:55:07 -0400 Subject: [PATCH 02/11] I don't know what this is about --- app/build.gradle | 20 +- app/src/main/AndroidManifest.xml | 103 ++++----- .../steve/bernieapp/actMainPage.java | 203 +++++++++--------- .../bernieapp/fragments/ConnectFragment.java | 2 +- .../fragments/NavigationDrawerFragment.java | 2 +- .../bernieapp/fragments/NewsFragment.java | 54 +++++ .../fragments/SingleIssueFragment.java | 2 +- .../fragments/SingleNewsFragment.java | 7 + .../steve/bernieapp/misc/ImgTxtAdapter.java | 19 ++ .../steve/bernieapp/tasks/ConnectTask.java | 4 + .../steve/bernieapp/tasks/IssuesTask.java | 4 + .../steve/bernieapp/tasks/NewsTask.java | 4 + .../steve/bernieapp/wrappers/Event.java | 192 ----------------- .../steve/bernieapp/wrappers/ImgTxtItem.java | 14 -- .../steve/bernieapp/wrappers/Issue.java | 142 ------------ .../bernieapp/wrappers/NavDrawerItem.java | 14 -- .../steve/bernieapp/wrappers/NewsArticle.java | 146 ------------- app/src/main/res/layout/frag_connect.xml | 3 +- app/src/main/res/layout/layout_main_page.xml | 3 +- 19 files changed, 259 insertions(+), 679 deletions(-) delete mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Event.java delete mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/wrappers/ImgTxtItem.java delete mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Issue.java delete mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NavDrawerItem.java delete mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NewsArticle.java diff --git a/app/build.gradle b/app/build.gradle index c06efbd..e385940 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,13 +20,15 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:23.1.0' - compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' - compile 'com.google.android.gms:play-services:7.5.0' - compile 'com.squareup.picasso:picasso:2.5.2' - compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' - compile 'com.jakewharton:butterknife:7.0.1' - compile 'io.reactivex:rxandroid:1.0.1' - compile 'io.reactivex:rxjava:1.0.14' + compile fileTree(include: ['*.jar'], dir: 'libs') + compile 'com.android.support:appcompat-v7:23.1.0' + compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' + compile 'com.google.android.gms:play-services:7.5.0' + compile 'com.squareup.picasso:picasso:2.5.2' + compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' + compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' + compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' + compile 'com.jakewharton:butterknife:7.0.1' + compile 'io.reactivex:rxandroid:1.0.1' + compile 'io.reactivex:rxjava:1.0.14' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5874307..fc70b5e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,24 +1,25 @@ + package="com.spielpark.steve.bernieapp"> + + android:theme="@style/AppTheme"> + android:value="@string/google_maps_api_key" /> + android:screenOrientation="portrait"> @@ -29,50 +30,50 @@ - + --> diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java index 3aaf547..ec39f38 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java @@ -24,115 +24,110 @@ import com.spielpark.steve.bernieapp.fragments.SingleIssueFragment; import com.spielpark.steve.bernieapp.fragments.SingleNewsFragment; import com.spielpark.steve.bernieapp.tasks.NewsTask; -import com.spielpark.steve.bernieapp.wrappers.Issue; -import com.spielpark.steve.bernieapp.wrappers.NewsArticle; +import com.spielpark.steve.bernieapp.model.Issue; +import com.spielpark.steve.bernieapp.model.news.NewsArticle; public class actMainPage extends ActionBarActivity - implements NavigationDrawerFragment.NavigationDrawerCallbacks { - private static SharedPreferences preferences; - private static Fragment curFrag; - /** - * Fragment managing the behaviors, interactions and presentation of the navigation drawer. - */ - private NavigationDrawerFragment mNavigationDrawerFragment; - /** - * Used to store the last screen title. For use in {@link #restoreActionBar()}. - */ - private CharSequence mTitle; - - @Override - protected void onStop() { - super.onStop(); + implements NavigationDrawerFragment.NavigationDrawerCallbacks { + private static SharedPreferences preferences; + private static Fragment curFrag; + /** + * Fragment managing the behaviors, interactions and presentation of the navigation drawer. + */ + private NavigationDrawerFragment mNavigationDrawerFragment; + /** + * Used to store the last screen title. For use in {@link #restoreActionBar()}. + */ + private CharSequence mTitle; + + @Override protected void onStop() { + super.onStop(); + } + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.layout_main_page); + mNavigationDrawerFragment = + (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById( + R.id.navigation_drawer); + mTitle = getTitle(); + // Set up the drawer. + mNavigationDrawerFragment.setUp(R.id.navigation_drawer, + (DrawerLayout) findViewById(R.id.drawer_layout)); + ActionBar bar = getSupportActionBar(); + bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#147FD7"))); + mTitle = "News"; + preferences = getApplicationContext().getSharedPreferences("bernie_app_prefs", 0); + adjustNavBarText(0); + } + + @Override public void onNavigationDrawerItemSelected(int position) { + if (curFrag instanceof ConnectFragment) { + ConnectFragment.cancelTask(); //cancel loading the map. + Log.d("AMP - ONDIS", "Cancelled loading the map."); } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.layout_main_page); - mNavigationDrawerFragment = - (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById( - R.id.navigation_drawer); - mTitle = getTitle(); - // Set up the drawer. - mNavigationDrawerFragment.setUp(R.id.navigation_drawer, - (DrawerLayout) findViewById(R.id.drawer_layout)); - ActionBar bar = getSupportActionBar(); - bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#147FD7"))); - mTitle = "News"; - preferences = getApplicationContext().getSharedPreferences("bernie_app_prefs", 0); - adjustNavBarText(0); + // update the main content by replacing fragments + FragmentManager fragmentManager = getSupportFragmentManager(); + fragmentManager.popBackStack("base", FragmentManager.POP_BACK_STACK_INCLUSIVE); + Fragment replacement; + switch (position) { + case 0: { + replacement = NewsFragment.getInstance(); + break; + } + case 1: { + replacement = IssuesFragment.getInstance(); + break; + } + case 2: { + replacement = OrganizeFragment.getInstance(); + break; + } + case 3: { + replacement = ConnectFragment.getInstance(); + break; + } + case 4: { + replacement = BernRateFragment.getInstance(); + break; + } + case 5: { + replacement = FeedbackFragment.getInstance(); + break; + } + default: { + replacement = NewsFragment.getInstance(); + } } - - @Override - public void onNavigationDrawerItemSelected(int position) { - if (curFrag instanceof ConnectFragment) { - ConnectFragment.cancelTask(); //cancel loading the map. - Log.d("AMP - ONDIS", "Cancelled loading the map."); - } - // update the main content by replacing fragments - FragmentManager fragmentManager = getSupportFragmentManager(); - fragmentManager.popBackStack("base", FragmentManager.POP_BACK_STACK_INCLUSIVE); - Fragment replacement; - switch (position) { - case 0: { - replacement = NewsFragment.getInstance(); - break; - } - case 1: { - replacement = IssuesFragment.getInstance(); - break; - } - case 2: { - replacement = OrganizeFragment.getInstance(); - break; - } - case 3: { - replacement = ConnectFragment.getInstance(); - break; - } - case 4: { - replacement = BernRateFragment.getInstance(); - break; - } - case 5: { - replacement = FeedbackFragment.getInstance(); - break; - } - default: { - replacement = NewsFragment.getInstance(); - } - } - if (replacement.isAdded()) return; - adjustNavBarText(position); - curFrag = replacement; - onSectionAttached(++position); - fragmentManager.beginTransaction() - .replace(R.id.container, replacement) - .commit(); - } - - public void onSectionAttached(int number) { - switch (number) { - case 1: - mTitle = getString(R.string.title_section1); - break; - case 2: - mTitle = getString(R.string.title_section2); - break; - case 3: - mTitle = getString(R.string.title_section3); - break; - case 4: - mTitle = getString(R.string.title_section4); - break; - case 5: - mTitle = getString(R.string.title_section5); - break; - case 6: - mTitle = getString(R.string.title_section6); - break; - } + adjustNavBarText(position); + curFrag = replacement; + onSectionAttached(++position); + fragmentManager.beginTransaction().replace(R.id.container, replacement).commit(); + } + + public void onSectionAttached(int number) { + switch (number) { + case 1: + mTitle = getString(R.string.title_section1); + break; + case 2: + mTitle = getString(R.string.title_section2); + break; + case 3: + mTitle = getString(R.string.title_section3); + break; + case 4: + mTitle = getString(R.string.title_section4); + break; + case 5: + mTitle = getString(R.string.title_section5); + break; + case 6: + mTitle = getString(R.string.title_section6); + break; } + } public void restoreActionBar() { ActionBar actionBar = getSupportActionBar(); diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java index 55f0fcd..c2fca6c 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java @@ -40,7 +40,7 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.tasks.ConnectTask; import com.spielpark.steve.bernieapp.wrappers.Event; - +import com.spielpark.steve.bernieapp.model.Event; import java.util.ArrayList; import java.util.HashMap; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NavigationDrawerFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NavigationDrawerFragment.java index a14d7dc..cbbb75c 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NavigationDrawerFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NavigationDrawerFragment.java @@ -23,7 +23,7 @@ import android.widget.TextView; import com.spielpark.steve.bernieapp.R; -import com.spielpark.steve.bernieapp.wrappers.NavDrawerItem; +import com.spielpark.steve.bernieapp.model.NavDrawerItem; /** * Fragment used for managing interactions for and presentation of a navigation drawer. diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index 2bd00d3..5f3ab67 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -8,6 +8,7 @@ import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.method.ScrollingMovementMethod; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -16,13 +17,21 @@ import android.widget.TextView; import com.spielpark.steve.bernieapp.R; +import com.spielpark.steve.bernieapp.model.news.NewsArticle; +import com.spielpark.steve.bernieapp.model.news.NewsManager; import com.spielpark.steve.bernieapp.tasks.NewsTask; +import java.util.Collections; +import java.util.List; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; /** * A placeholder fragment containing a simple view. */ public class NewsFragment extends Fragment { +<<<<<<< Updated upstream private static NewsFragment mIntstance; public static NewsFragment getInstance() { @@ -44,10 +53,55 @@ public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) (TextView) view.findViewById(R.id.txtSubHeader), (TextView) view.findViewById(R.id.txtHeader)).execute(); } +======= + private static NewsFragment mIntstance; + private Subscription newsSubscription; +>>>>>>> Stashed changes @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.frag_newsarticles, container, false); } +<<<<<<< Updated upstream +======= + } + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.frag_newsarticles, container, false); + } + + @Override public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + final ListView newsList = (ListView) view.findViewById(R.id.listNews); + ((TextView) view.findViewById(R.id.txtSubHeader)).setMovementMethod( + new ScrollingMovementMethod()); + + + new NewsTask(getActivity(), newsList, (ProgressBar) view.findViewById(R.id.progressBar), + (TextView) view.findViewById(R.id.txtSubHeader), + (TextView) view.findViewById(R.id.txtHeader)).execute(); + } + + @Override public void onResume() { + super.onResume(); + newsSubscription = NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe( + new Action1>() { + @Override public void call(List newsArticles) { + Collections.sort(newsArticles); + } + }, new Action1() { + @Override public void call(Throwable throwable) { + Log.e("NewsFragment", "Failed to get news", throwable); + } + }); + } + + @Override public void onPause() { + super.onPause(); + if(!newsSubscription.isUnsubscribed()) + newsSubscription.unsubscribe(); + } +>>>>>>> Stashed changes } \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleIssueFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleIssueFragment.java index 48cc936..c1649c7 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleIssueFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleIssueFragment.java @@ -13,7 +13,7 @@ import android.widget.TextView; import com.spielpark.steve.bernieapp.R; -import com.spielpark.steve.bernieapp.wrappers.Issue; +import com.spielpark.steve.bernieapp.model.Issue; import butterknife.Bind; import butterknife.ButterKnife; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java index cdccebc..b73155c 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java @@ -15,7 +15,14 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.misc.Util; +<<<<<<< Updated upstream import com.spielpark.steve.bernieapp.wrappers.NewsArticle; +======= +import com.spielpark.steve.bernieapp.model.news.NewsArticle; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +>>>>>>> Stashed changes import butterknife.Bind; import butterknife.ButterKnife; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java b/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java index 126793e..ad47c0f 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java @@ -12,8 +12,12 @@ import android.widget.TextView; import com.spielpark.steve.bernieapp.R; +<<<<<<< Updated upstream import com.spielpark.steve.bernieapp.wrappers.ImgTxtItem; +======= +import com.spielpark.steve.bernieapp.model.ImgTxtItem; +>>>>>>> Stashed changes import java.util.List; import butterknife.Bind; @@ -53,6 +57,7 @@ public View getView(int position, View convertView, ViewGroup parent) { v.txt.setText(Html.fromHtml(item.getTxt())); return convertView; } +<<<<<<< Updated upstream public static class ViewHolder { @Bind(R.id.txtItem) TextView txt; @@ -62,5 +67,19 @@ public ViewHolder(View convertView, Typeface typeface) { ButterKnife.bind(this, convertView); txt.setTypeface(typeface); } +======= + Util.getPicasso(ctx).load(item.getImgSrc()).into(v.img); + v.txt.setText(Html.fromHtml(item.getTxt())); + return convertView; + } + + public static class ViewHolder { + @Bind(R.id.picThumb) ImageView img; + @Bind(R.id.txtItem) TextView txt; + + public ViewHolder(View convertView, Typeface typeface) { + ButterKnife.bind(ViewHolder.this, convertView); + txt.setTypeface(typeface); +>>>>>>> Stashed changes } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java index f784efe..c1cd85d 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java @@ -10,8 +10,12 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.fragments.ConnectFragment; +<<<<<<< Updated upstream import com.spielpark.steve.bernieapp.wrappers.Event; +======= +import com.spielpark.steve.bernieapp.model.Event; +>>>>>>> Stashed changes import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java index 0c9bec9..4ecec5b 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java @@ -12,8 +12,12 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; +<<<<<<< Updated upstream import com.spielpark.steve.bernieapp.wrappers.Issue; +======= +import com.spielpark.steve.bernieapp.model.Issue; +>>>>>>> Stashed changes import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java index ae0f60a..a96c0e2 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java @@ -15,8 +15,12 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.actMainPage; import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; +<<<<<<< Updated upstream import com.spielpark.steve.bernieapp.wrappers.NewsArticle; +======= +import com.spielpark.steve.bernieapp.model.news.NewsArticle; +>>>>>>> Stashed changes import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Event.java b/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Event.java deleted file mode 100644 index 2de3cdc..0000000 --- a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Event.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.spielpark.steve.bernieapp.wrappers; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * Created by Steve on 7/9/2015. - */ -public class Event implements Comparable> { - - public boolean isrss = false; - private String name; - private String url; - private String date; - private String description; - private String timezone; - private String eventType; - private String venue; - private String venue_addr; - private String venue_city; - private String state; - private String time; - private int zip; - private int capacity; - private int attendee_count; - private double latitude; - private double longitude; - private boolean isOfficial; - - public Event() { - - } - - public String getTime() { - return this.time; - } - - public void setTime(String s) { - this.time = s; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public boolean isOfficial() { - return isOfficial; - } - - public void setOfficial(boolean isOfficial) { - this.isOfficial = isOfficial; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDate() { - return date; - } - - public void setDate(String date) { - this.date = date; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getTimezone() { - return timezone; - } - - public void setTimezone(String timezone) { - this.timezone = timezone; - } - - public String getEventType() { - return eventType; - } - - public void setEventType(String eventType) { - this.eventType = eventType; - } - - public String getVenue() { - return venue; - } - - public void setVenue(String venue) { - this.venue = venue; - } - - public String getVenue_addr() { - return venue_addr; - } - - public void setVenue_addr(String venue_addr) { - this.venue_addr = venue_addr; - } - - public String getVenue_city() { - return venue_city; - } - - public void setVenue_city(String venue_city) { - this.venue_city = venue_city; - } - - public int getZip() { - return zip; - } - - public void setZip(int zip) { - this.zip = zip; - } - - public int getCapacity() { - return capacity; - } - - public void setCapacity(int capacity) { - this.capacity = capacity; - } - - public int getAttendee_count() { - return attendee_count; - } - - public void setAttendee_count(int attendee_count) { - this.attendee_count = attendee_count; - } - - public double getLatitude() { - return latitude; - } - - public void setLatitude(double latitude) { - this.latitude = latitude; - } - - public double getLongitude() { - return longitude; - } - - public void setLongitude(double longitude) { - this.longitude = longitude; - } - - @Override - public String toString() { - return this.getName() + " : " + this.getDate(); - } - - @Override - public int compareTo(Event another) { - int ret; - SimpleDateFormat ft = new SimpleDateFormat("MMMM d, yyyy"); - Date l; - Date r; - try { - l = ft.parse(this.getDate()); - r = ft.parse(another.getDate()); - ret = r.compareTo(l); - } catch (ParseException e) { - e.printStackTrace(); - ret = -1; - } - return ret; - } -} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/ImgTxtItem.java b/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/ImgTxtItem.java deleted file mode 100644 index ef089c5..0000000 --- a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/ImgTxtItem.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.spielpark.steve.bernieapp.wrappers; - -/** - * Created by Steve on 8/17/2015. - */ -public interface ImgTxtItem { - public String getTxt(); - - public void setTxt(String txt); - - public String getImgSrc(); - - public void setImgSrc(String img); -} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Issue.java b/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Issue.java deleted file mode 100644 index ce1eb68..0000000 --- a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/Issue.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.spielpark.steve.bernieapp.wrappers; - -import android.app.Activity; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.Log; - -import com.spielpark.steve.bernieapp.misc.Util; - -/** - * Created by Steve on 7/9/2015. - */ -public class Issue implements ImgTxtItem, Parcelable { - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - public Issue createFromParcel(Parcel source) { - return new Issue(source); - } - - public Issue[] newArray(int size) { - return new Issue[size]; - } - }; - private String pubDate; - private String htmlTitle; - private String desc; - private String url; - private String title; - private String video; - private String imgSrc; - - public Issue() { - } - - protected Issue(Parcel in) { - this.pubDate = in.readString(); - this.htmlTitle = in.readString(); - this.desc = in.readString(); - this.url = in.readString(); - this.title = in.readString(); - this.video = in.readString(); - this.imgSrc = in.readString(); - } - - public String getHtmlTitle() { - return htmlTitle; - } - - public void setHtmlTitle(String title) { - this.htmlTitle = title; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } - - public String getVideo() { - return video; - } - - public void setVideo(String videos) { - this.video = videos; - } - - public String getEmbedURL(Activity ctx) { - StringBuilder bld = new StringBuilder(); - int[] wh = Util.getScreenWidthHeight(ctx); - bld.append(" "); - Log.d("Issue URL", bld.toString()); - return bld.toString(); - } - - public String getPubDate() { - return pubDate; - } - - public void setPubDate(String pubDate) { - this.pubDate = pubDate; - } - - public String getTitle() { - return this.title; - } - - public void setTitle(String t) { - this.title = t; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - @Override - public String getTxt() { - return getHtmlTitle(); - } - - @Override - public void setTxt(String txt) { - this.setHtmlTitle(txt); - } - - @Override - public String getImgSrc() { - return imgSrc; - } - - @Override - public void setImgSrc(String img) { - imgSrc = img; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(this.pubDate); - dest.writeString(this.htmlTitle); - dest.writeString(this.desc); - dest.writeString(this.url); - dest.writeString(this.title); - dest.writeString(this.video); - dest.writeString(this.imgSrc); - } -} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NavDrawerItem.java b/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NavDrawerItem.java deleted file mode 100644 index 18a8ca6..0000000 --- a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NavDrawerItem.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.spielpark.steve.bernieapp.wrappers; - -/** - * Created by Steve on 8/16/2015. - */ -public class NavDrawerItem { - public int icon; - public String name; - - public NavDrawerItem(int icon, String name) { - this.icon = icon; - this.name = name; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NewsArticle.java b/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NewsArticle.java deleted file mode 100644 index a5813d9..0000000 --- a/app/src/main/java/com/spielpark/steve/bernieapp/wrappers/NewsArticle.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.spielpark.steve.bernieapp.wrappers; - -import android.os.Parcel; -import android.os.Parcelable; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * Created by Steve on 8/14/2015. - */ -public class NewsArticle implements Comparable>, ImgTxtItem, Parcelable { - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - public NewsArticle createFromParcel(Parcel source) { - return new NewsArticle(source); - } - - public NewsArticle[] newArray(int size) { - return new NewsArticle[size]; - } - }; - private String title; - private String desc; - private String url; - private String pubdate; - private String time; - private String htmlTitle; - private String imgSrc; - - public NewsArticle() { - - } - - protected NewsArticle(Parcel in) { - this.title = in.readString(); - this.desc = in.readString(); - this.url = in.readString(); - this.pubdate = in.readString(); - this.time = in.readString(); - this.htmlTitle = in.readString(); - this.imgSrc = in.readString(); - } - - public String getHtmlTitle() { - return htmlTitle; - } - - public void setHtmlTitle(String htmlTitle) { - this.htmlTitle = htmlTitle; - } - - public String getTime() { - return time; - } - - public void setTime(String time) { - this.time = time; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getPubDate() { - return pubdate; - } - - public void setPubDate(String pubdate) { - this.pubdate = pubdate; - } - - @Override - public String getTxt() { - return getHtmlTitle(); - } - - @Override - public void setTxt(String txt) { - this.setHtmlTitle(txt); - } - - @Override - public String getImgSrc() { - return imgSrc; - } - - @Override - public void setImgSrc(String img) { - this.imgSrc = img; - } - - @Override - public int compareTo(NewsArticle tNewsArticle) { - int ret; - SimpleDateFormat ft = new SimpleDateFormat("MMMM d, yyyy"); - Date l; - Date r; - try { - r = ft.parse(this.getPubDate()); - l = ft.parse(tNewsArticle.getPubDate()); - ret = l.compareTo(r); - } catch (ParseException e) { - e.printStackTrace(); - ret = -1; - } - return ret; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(this.title); - dest.writeString(this.desc); - dest.writeString(this.url); - dest.writeString(this.pubdate); - dest.writeString(this.time); - dest.writeString(this.htmlTitle); - dest.writeString(this.imgSrc); - } -} diff --git a/app/src/main/res/layout/frag_connect.xml b/app/src/main/res/layout/frag_connect.xml index c718ca0..c9c4b8e 100644 --- a/app/src/main/res/layout/frag_connect.xml +++ b/app/src/main/res/layout/frag_connect.xml @@ -58,8 +58,7 @@ android:layout_marginTop="4dp" android:visibility="invisible"> - - Date: Thu, 22 Oct 2015 18:56:37 -0400 Subject: [PATCH 03/11] Trying to unstash --- .../steve/bernieapp/model/ApiManager.java | 26 +++ .../steve/bernieapp/model/BernieApi.java | 14 ++ .../bernieapp/model/news/NewsArticle.java | 153 ++++++++++++++++++ .../bernieapp/model/news/NewsManager.java | 47 ++++++ 4 files changed, 240 insertions(+) create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java new file mode 100644 index 0000000..79f6f3a --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java @@ -0,0 +1,26 @@ +package com.spielpark.steve.bernieapp.model; + +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; +import retrofit.RxJavaCallAdapterFactory; + +public class ApiManager { + + private static ApiManager instance; + public BernieApi api; + + public ApiManager(BernieApi api) { + this.api = api; + } + + public static ApiManager get() { + if (instance == null) { + Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .baseUrl("https://search.berniesanders.tech/articles_en/berniesanders_com") + .build(); + instance = new ApiManager(retrofit.create(BernieApi.class)); + } + return instance; + } +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java new file mode 100644 index 0000000..23b0cb1 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java @@ -0,0 +1,14 @@ +package com.spielpark.steve.bernieapp.model; + +import com.spielpark.steve.bernieapp.model.news.NewsArticle; + +import java.util.List; + +import retrofit.http.GET; +import rx.Observable; + +public interface BernieApi { + + @GET("/_search?q=!article_type%3A%28ExternalLink%20OR%20Issues%29&sort=created_at:desc&size=20") + Observable> getNews(); +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java new file mode 100644 index 0000000..b4ebf76 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java @@ -0,0 +1,153 @@ +package com.spielpark.steve.bernieapp.model.news; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.spielpark.steve.bernieapp.model.ImgTxtItem; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +<<<<<<>>>>>>Stashed changes:app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java + +/** + * Created by Steve on 8/14/2015. + */ +public class NewsArticle implements Comparable>, ImgTxtItem, Parcelable { + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + public NewsArticle createFromParcel(Parcel source) { + return new NewsArticle(source); + } + + public NewsArticle[] newArray(int size) { + return new NewsArticle[size]; + } + }; + private String title; + private String desc; + private String url; + private String pubdate; + private String time; + private String htmlTitle; + private String imgSrc; + + public NewsArticle() { + + } + + protected NewsArticle(Parcel in) { + this.title = in.readString(); + this.desc = in.readString(); + this.url = in.readString(); + this.pubdate = in.readString(); + this.time = in.readString(); + this.htmlTitle = in.readString(); + this.imgSrc = in.readString(); + } + + public String getHtmlTitle() { + return htmlTitle; + } + + public void setHtmlTitle(String htmlTitle) { + this.htmlTitle = htmlTitle; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getPubDate() { + return pubdate; + } + + public void setPubDate(String pubdate) { + this.pubdate = pubdate; + } + + @Override + public String getTxt() { + return getHtmlTitle(); + } + + @Override + public void setTxt(String txt) { + this.setHtmlTitle(txt); + } + + @Override + public String getImgSrc() { + return imgSrc; + } + + @Override + public void setImgSrc(String img) { + this.imgSrc = img; + } + + @Override + public int compareTo(NewsArticle tNewsArticle) { + int ret; + SimpleDateFormat ft = new SimpleDateFormat("MMMM d, yyyy"); + Date l; + Date r; + try { + r = ft.parse(this.getPubDate()); + l = ft.parse(tNewsArticle.getPubDate()); + ret = l.compareTo(r); + } catch (ParseException e) { + e.printStackTrace(); + ret = -1; + } + return ret; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.title); + dest.writeString(this.desc); + dest.writeString(this.url); + dest.writeString(this.pubdate); + dest.writeString(this.time); + dest.writeString(this.htmlTitle); + dest.writeString(this.imgSrc); + } +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java new file mode 100644 index 0000000..2568a81 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java @@ -0,0 +1,47 @@ +package com.spielpark.steve.bernieapp.model.news; + +import android.util.Log; + +import com.spielpark.steve.bernieapp.model.ApiManager; + +import java.util.List; + +import rx.Observable; +import rx.functions.Action1; +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class NewsManager { + + private static NewsManager instance; + private PublishSubject> newsArticleSubject = PublishSubject.create(); + + public static NewsManager get() { + if (instance == null) { + instance = new NewsManager(); + } + return instance; + } + + public Observable> getNews() { + return newsArticleSubject.asObservable(); + } + + private void getNewsFromApi() { + ApiManager.get().api.getNews() + .cache() + .subscribeOn(Schedulers.io()) + .subscribe(new Action1>() { + @Override + public void call(List newsArticles) { + newsArticleSubject.onNext(newsArticles); + } + }, new Action1() { + @Override + public void call(Throwable throwable) { + Log.e("NewsManager", "getNewsFromApi Failed.", throwable); + } + }); + } +} + From 5120e3f633c5ed403281356440f0f10df30ca504 Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Thu, 22 Oct 2015 19:19:18 -0400 Subject: [PATCH 04/11] I don't --- app/build.gradle | 2 +- .../bernieapp/fragments/ConnectFragment.java | 4 +- .../bernieapp/fragments/NewsFragment.java | 80 +++----- .../fragments/SingleNewsFragment.java | 7 - .../steve/bernieapp/misc/ImgTxtAdapter.java | 25 +-- .../steve/bernieapp/model/Event.java | 192 ++++++++++++++++++ .../steve/bernieapp/model/ImgTxtItem.java | 14 ++ .../steve/bernieapp/model/Issue.java | 142 +++++++++++++ .../steve/bernieapp/model/NavDrawerItem.java | 14 ++ .../bernieapp/model/news/NewsArticle.java | 5 - .../steve/bernieapp/tasks/ConnectTask.java | 10 +- .../steve/bernieapp/tasks/IssuesTask.java | 12 +- .../steve/bernieapp/tasks/NewsTask.java | 16 +- 13 files changed, 413 insertions(+), 110 deletions(-) create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/Event.java create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/ImgTxtItem.java create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/Issue.java create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/NavDrawerItem.java diff --git a/app/build.gradle b/app/build.gradle index e385940..6f868ee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,7 +21,7 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:23.1.0' + compile 'com.android.support:appcompat-v7:22.2.0' compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' compile 'com.google.android.gms:play-services:7.5.0' compile 'com.squareup.picasso:picasso:2.5.2' diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java index c2fca6c..129cca8 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/ConnectFragment.java @@ -38,9 +38,9 @@ import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.spielpark.steve.bernieapp.R; -import com.spielpark.steve.bernieapp.tasks.ConnectTask; -import com.spielpark.steve.bernieapp.wrappers.Event; import com.spielpark.steve.bernieapp.model.Event; +import com.spielpark.steve.bernieapp.tasks.ConnectTask; + import java.util.ArrayList; import java.util.HashMap; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index 5f3ab67..7632d90 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -20,8 +20,10 @@ import com.spielpark.steve.bernieapp.model.news.NewsArticle; import com.spielpark.steve.bernieapp.model.news.NewsManager; import com.spielpark.steve.bernieapp.tasks.NewsTask; + import java.util.Collections; import java.util.List; + import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; @@ -31,8 +33,9 @@ */ public class NewsFragment extends Fragment { -<<<<<<< Updated upstream + private static NewsFragment mIntstance; + private Subscription newsSubscription; public static NewsFragment getInstance() { if (mIntstance == null) { @@ -43,65 +46,46 @@ public static NewsFragment getInstance() { } } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.frag_newsarticles, container, false); + } + @Override public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final ListView newsList = (ListView) view.findViewById(R.id.listNews); ((TextView) view.findViewById(R.id.txtSubHeader)).setMovementMethod( new ScrollingMovementMethod()); + + new NewsTask(getActivity(), newsList, (ProgressBar) view.findViewById(R.id.progressBar), (TextView) view.findViewById(R.id.txtSubHeader), (TextView) view.findViewById(R.id.txtHeader)).execute(); } -======= - private static NewsFragment mIntstance; - private Subscription newsSubscription; ->>>>>>> Stashed changes @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - return inflater.inflate(R.layout.frag_newsarticles, container, false); + public void onResume() { + super.onResume(); + newsSubscription = NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe( + new Action1>() { + @Override + public void call(List newsArticles) { + Collections.sort(newsArticles); + } + }, new Action1() { + @Override + public void call(Throwable throwable) { + Log.e("NewsFragment", "Failed to get news", throwable); + } + }); } -<<<<<<< Updated upstream -======= - } - - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - return inflater.inflate(R.layout.frag_newsarticles, container, false); - } - - @Override public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - final ListView newsList = (ListView) view.findViewById(R.id.listNews); - ((TextView) view.findViewById(R.id.txtSubHeader)).setMovementMethod( - new ScrollingMovementMethod()); - - new NewsTask(getActivity(), newsList, (ProgressBar) view.findViewById(R.id.progressBar), - (TextView) view.findViewById(R.id.txtSubHeader), - (TextView) view.findViewById(R.id.txtHeader)).execute(); - } - - @Override public void onResume() { - super.onResume(); - newsSubscription = NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe( - new Action1>() { - @Override public void call(List newsArticles) { - Collections.sort(newsArticles); - } - }, new Action1() { - @Override public void call(Throwable throwable) { - Log.e("NewsFragment", "Failed to get news", throwable); - } - }); - } - - @Override public void onPause() { - super.onPause(); - if(!newsSubscription.isUnsubscribed()) - newsSubscription.unsubscribe(); - } ->>>>>>> Stashed changes + @Override + public void onPause() { + super.onPause(); + if (!newsSubscription.isUnsubscribed()) + newsSubscription.unsubscribe(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java index b73155c..6928454 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java @@ -15,14 +15,7 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.misc.Util; -<<<<<<< Updated upstream -import com.spielpark.steve.bernieapp.wrappers.NewsArticle; -======= import com.spielpark.steve.bernieapp.model.news.NewsArticle; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; ->>>>>>> Stashed changes import butterknife.Bind; import butterknife.ButterKnife; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java b/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java index ad47c0f..1a6ad8d 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/misc/ImgTxtAdapter.java @@ -12,12 +12,8 @@ import android.widget.TextView; import com.spielpark.steve.bernieapp.R; -<<<<<<< Updated upstream -import com.spielpark.steve.bernieapp.wrappers.ImgTxtItem; - -======= import com.spielpark.steve.bernieapp.model.ImgTxtItem; ->>>>>>> Stashed changes + import java.util.List; import butterknife.Bind; @@ -57,29 +53,14 @@ public View getView(int position, View convertView, ViewGroup parent) { v.txt.setText(Html.fromHtml(item.getTxt())); return convertView; } -<<<<<<< Updated upstream public static class ViewHolder { - @Bind(R.id.txtItem) TextView txt; @Bind(R.id.picThumb) ImageView img; + @Bind(R.id.txtItem) TextView txt; public ViewHolder(View convertView, Typeface typeface) { - ButterKnife.bind(this, convertView); + ButterKnife.bind(ViewHolder.this, convertView); txt.setTypeface(typeface); } -======= - Util.getPicasso(ctx).load(item.getImgSrc()).into(v.img); - v.txt.setText(Html.fromHtml(item.getTxt())); - return convertView; - } - - public static class ViewHolder { - @Bind(R.id.picThumb) ImageView img; - @Bind(R.id.txtItem) TextView txt; - - public ViewHolder(View convertView, Typeface typeface) { - ButterKnife.bind(ViewHolder.this, convertView); - txt.setTypeface(typeface); ->>>>>>> Stashed changes } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/Event.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/Event.java new file mode 100644 index 0000000..7ea36a8 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/Event.java @@ -0,0 +1,192 @@ +package com.spielpark.steve.bernieapp.model; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Created by Steve on 7/9/2015. + */ +public class Event implements Comparable> { + + public boolean isrss = false; + private String name; + private String url; + private String date; + private String description; + private String timezone; + private String eventType; + private String venue; + private String venue_addr; + private String venue_city; + private String state; + private String time; + private int zip; + private int capacity; + private int attendee_count; + private double latitude; + private double longitude; + private boolean isOfficial; + + public Event() { + + } + + public String getTime() { + return this.time; + } + + public void setTime(String s) { + this.time = s; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public boolean isOfficial() { + return isOfficial; + } + + public void setOfficial(boolean isOfficial) { + this.isOfficial = isOfficial; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getVenue() { + return venue; + } + + public void setVenue(String venue) { + this.venue = venue; + } + + public String getVenue_addr() { + return venue_addr; + } + + public void setVenue_addr(String venue_addr) { + this.venue_addr = venue_addr; + } + + public String getVenue_city() { + return venue_city; + } + + public void setVenue_city(String venue_city) { + this.venue_city = venue_city; + } + + public int getZip() { + return zip; + } + + public void setZip(int zip) { + this.zip = zip; + } + + public int getCapacity() { + return capacity; + } + + public void setCapacity(int capacity) { + this.capacity = capacity; + } + + public int getAttendee_count() { + return attendee_count; + } + + public void setAttendee_count(int attendee_count) { + this.attendee_count = attendee_count; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + @Override + public String toString() { + return this.getName() + " : " + this.getDate(); + } + + @Override + public int compareTo(Event another) { + int ret; + SimpleDateFormat ft = new SimpleDateFormat("MMMM d, yyyy"); + Date l; + Date r; + try { + l = ft.parse(this.getDate()); + r = ft.parse(another.getDate()); + ret = r.compareTo(l); + } catch (ParseException e) { + e.printStackTrace(); + ret = -1; + } + return ret; + } +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/ImgTxtItem.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/ImgTxtItem.java new file mode 100644 index 0000000..5990588 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/ImgTxtItem.java @@ -0,0 +1,14 @@ +package com.spielpark.steve.bernieapp.model; + +/** + * Created by Steve on 8/17/2015. + */ +public interface ImgTxtItem { + String getTxt(); + + void setTxt(String txt); + + String getImgSrc(); + + void setImgSrc(String img); +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/Issue.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/Issue.java new file mode 100644 index 0000000..1fcee94 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/Issue.java @@ -0,0 +1,142 @@ +package com.spielpark.steve.bernieapp.model; + +import android.app.Activity; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Log; + +import com.spielpark.steve.bernieapp.misc.Util; + +/** + * Created by Steve on 7/9/2015. + */ +public class Issue implements ImgTxtItem, Parcelable { + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public Issue createFromParcel(Parcel source) { + return new Issue(source); + } + + public Issue[] newArray(int size) { + return new Issue[size]; + } + }; + private String pubDate; + private String htmlTitle; + private String desc; + private String url; + private String title; + private String video; + private String imgSrc; + + public Issue() { + } + + protected Issue(Parcel in) { + this.pubDate = in.readString(); + this.htmlTitle = in.readString(); + this.desc = in.readString(); + this.url = in.readString(); + this.title = in.readString(); + this.video = in.readString(); + this.imgSrc = in.readString(); + } + + public String getHtmlTitle() { + return htmlTitle; + } + + public void setHtmlTitle(String title) { + this.htmlTitle = title; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getVideo() { + return video; + } + + public void setVideo(String videos) { + this.video = videos; + } + + public String getEmbedURL(Activity ctx) { + StringBuilder bld = new StringBuilder(); + int[] wh = Util.getScreenWidthHeight(ctx); + bld.append(" "); + Log.d("Issue URL", bld.toString()); + return bld.toString(); + } + + public String getPubDate() { + return pubDate; + } + + public void setPubDate(String pubDate) { + this.pubDate = pubDate; + } + + public String getTitle() { + return this.title; + } + + public void setTitle(String t) { + this.title = t; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String getTxt() { + return getHtmlTitle(); + } + + @Override + public void setTxt(String txt) { + this.setHtmlTitle(txt); + } + + @Override + public String getImgSrc() { + return imgSrc; + } + + @Override + public void setImgSrc(String img) { + imgSrc = img; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.pubDate); + dest.writeString(this.htmlTitle); + dest.writeString(this.desc); + dest.writeString(this.url); + dest.writeString(this.title); + dest.writeString(this.video); + dest.writeString(this.imgSrc); + } +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/NavDrawerItem.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/NavDrawerItem.java new file mode 100644 index 0000000..6c798a7 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/NavDrawerItem.java @@ -0,0 +1,14 @@ +package com.spielpark.steve.bernieapp.model; + +/** + * Created by Steve on 8/16/2015. + */ +public class NavDrawerItem { + public int icon; + public String name; + + public NavDrawerItem(int icon, String name) { + this.icon = icon; + this.name = name; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java index b4ebf76..7744b1c 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java @@ -9,11 +9,6 @@ import java.text.SimpleDateFormat; import java.util.Date; -<<<<<<>>>>>>Stashed changes:app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java - /** * Created by Steve on 8/14/2015. */ diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java index c1cd85d..86b26e6 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/ConnectTask.java @@ -10,12 +10,8 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.fragments.ConnectFragment; -<<<<<<< Updated upstream -import com.spielpark.steve.bernieapp.wrappers.Event; - -======= import com.spielpark.steve.bernieapp.model.Event; ->>>>>>> Stashed changes + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -35,8 +31,8 @@ public class ConnectTask extends AsyncTask { private static ConnectFragment frag; public ConnectTask(Context ctx, ConnectFragment frag) { - this.frag = frag; - this.ctx = ctx; + ConnectTask.frag = frag; + ConnectTask.ctx = ctx; } public static ArrayList getEvents() { diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java index 4ecec5b..4a3c4d4 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/IssuesTask.java @@ -12,12 +12,8 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; -<<<<<<< Updated upstream -import com.spielpark.steve.bernieapp.wrappers.Issue; - -======= import com.spielpark.steve.bernieapp.model.Issue; ->>>>>>> Stashed changes + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -36,9 +32,9 @@ public class IssuesTask extends AsyncTask { private static HashMap vidLinks; public IssuesTask(Context ctx, ListView listView, ProgressBar progressBar) { - this.list = listView; - this.ctx = ctx; - this.progressBar = progressBar; + list = listView; + IssuesTask.ctx = ctx; + IssuesTask.progressBar = progressBar; } public static Issue getIssue(int position) { diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java index a96c0e2..fe7b08c 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java @@ -15,12 +15,8 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.actMainPage; import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; -<<<<<<< Updated upstream -import com.spielpark.steve.bernieapp.wrappers.NewsArticle; - -======= import com.spielpark.steve.bernieapp.model.news.NewsArticle; ->>>>>>> Stashed changes + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -41,11 +37,11 @@ public class NewsTask extends AsyncTask { private static String NULL_IMAGE = "https://s.bsd.net/bernie16/main/page/-/website/fb-share.png"; public NewsTask(Context ctx, ListView listView, ProgressBar progressBar, TextView subHeader, TextView header) { - this.list = listView; - this.ctx = ctx; - this.progressBar = progressBar; - this.subHeader = subHeader; - this.header = header; + list = listView; + NewsTask.ctx = ctx; + NewsTask.progressBar = progressBar; + NewsTask.subHeader = subHeader; + NewsTask.header = header; } public static NewsArticle getArticle(int pos) { From 2070f4681b2591b92cfd19952022610e7690504e Mon Sep 17 00:00:00 2001 From: pat Date: Thu, 22 Oct 2015 20:25:29 -0400 Subject: [PATCH 05/11] Lets try a little rxjava --- .../steve/bernieapp/fragments/NewsFragment.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index 7632d90..208060e 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -63,6 +63,18 @@ public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) new NewsTask(getActivity(), newsList, (ProgressBar) view.findViewById(R.id.progressBar), (TextView) view.findViewById(R.id.txtSubHeader), (TextView) view.findViewById(R.id.txtHeader)).execute(); + + NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>() { + @Override + public void call(List newsArticles) { + Collections.sort(newsArticles); + } + }, new Action1() { + @Override + public void call(Throwable throwable) { + Log.e("NewsFragment", "Failed to get news", throwable); + } + }); } @Override From 5f27bb8e98260f82fceec5cf5b6db08973e506f2 Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Wed, 28 Oct 2015 23:59:12 -0400 Subject: [PATCH 06/11] Working Rx News Articles. --- .../steve/bernieapp/actMainPage.java | 8 +-- .../bernieapp/fragments/NewsFragment.java | 66 ++++++++++++------- .../fragments/SingleNewsFragment.java | 4 +- .../steve/bernieapp/model/ApiManager.java | 45 ++++++++++++- .../steve/bernieapp/model/BernieApi.java | 2 +- .../bernieapp/model/news/NewsArticle.java | 56 +++++++--------- .../bernieapp/model/news/NewsManager.java | 1 + .../steve/bernieapp/tasks/NewsTask.java | 14 ++-- app/src/main/res/layout/list_news_item.xml | 2 +- 9 files changed, 126 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java index ec39f38..594e64a 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java @@ -23,9 +23,9 @@ import com.spielpark.steve.bernieapp.fragments.OrganizeFragment; import com.spielpark.steve.bernieapp.fragments.SingleIssueFragment; import com.spielpark.steve.bernieapp.fragments.SingleNewsFragment; -import com.spielpark.steve.bernieapp.tasks.NewsTask; import com.spielpark.steve.bernieapp.model.Issue; import com.spielpark.steve.bernieapp.model.news.NewsArticle; +import com.spielpark.steve.bernieapp.tasks.NewsTask; public class actMainPage extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks { @@ -151,7 +151,7 @@ public void onBackPressed() { ((ConnectFragment) curFrag).backPressed(); return; } else if (curFrag instanceof OrganizeFragment) { - if (((OrganizeFragment) curFrag).canGoBack()) { + if (OrganizeFragment.canGoBack()) { return; } } @@ -181,13 +181,13 @@ public void loadIssue(Issue i) { } public SharedPreferences getPrefs() { - return this.preferences; + return preferences; } public void loadHeaderArticle(View view) { if (NewsTask.getData() != null) { for (NewsArticle a : NewsTask.getData()) { - if (a.getUrl().contains("press-release")) { + if (a.getPermalink().contains("press-release")) { this.loadEvent(a); break; } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index 208060e..db1c3af 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -7,23 +7,29 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.text.Html; import android.text.method.ScrollingMovementMethod; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.spielpark.steve.bernieapp.R; +import com.spielpark.steve.bernieapp.actMainPage; +import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; import com.spielpark.steve.bernieapp.model.news.NewsArticle; import com.spielpark.steve.bernieapp.model.news.NewsManager; -import com.spielpark.steve.bernieapp.tasks.NewsTask; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import butterknife.Bind; +import butterknife.ButterKnife; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; @@ -35,6 +41,11 @@ public class NewsFragment extends Fragment { private static NewsFragment mIntstance; + @Bind(R.id.listNews) ListView list; + @Bind(R.id.progressBar) ProgressBar progressBar; + @Bind(R.id.txtSubHeader) TextView subHeader; + @Bind(R.id.txtHeader) TextView header; + ImgTxtAdapter adapter; private Subscription newsSubscription; public static NewsFragment getInstance() { @@ -55,26 +66,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, @Override public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - final ListView newsList = (ListView) view.findViewById(R.id.listNews); - ((TextView) view.findViewById(R.id.txtSubHeader)).setMovementMethod( - new ScrollingMovementMethod()); - - - new NewsTask(getActivity(), newsList, (ProgressBar) view.findViewById(R.id.progressBar), - (TextView) view.findViewById(R.id.txtSubHeader), - (TextView) view.findViewById(R.id.txtHeader)).execute(); - - NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>() { - @Override - public void call(List newsArticles) { - Collections.sort(newsArticles); - } - }, new Action1() { - @Override - public void call(Throwable throwable) { - Log.e("NewsFragment", "Failed to get news", throwable); - } - }); + ButterKnife.bind(this, view); + subHeader.setMovementMethod(new ScrollingMovementMethod()); + adapter = new ImgTxtAdapter(view.getContext(), R.layout.list_news_item, new ArrayList()); + list.setAdapter(adapter); } @Override @@ -85,6 +80,33 @@ public void onResume() { @Override public void call(List newsArticles) { Collections.sort(newsArticles); + adapter.addAll(newsArticles); + NewsArticle a; + boolean setSubheader = false; + for (int i = 0; i < adapter.getCount(); i++) { + a = (NewsArticle) adapter.getItem(i); + if (!(setSubheader)) { + if (a.getPermalink() != null) { + if (a.getPermalink().contains("press-release")) { + subHeader.setText(Html.fromHtml(a.getContent())); + String s = a.getTitle(); + s = s.length() > 40 ? s.substring(0, 40) + "..." : s; + header.setText(s); + setSubheader = true; + } + } + } + } + + ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); + list.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); + } + }); } }, new Action1() { @Override @@ -97,7 +119,7 @@ public void call(Throwable throwable) { @Override public void onPause() { super.onPause(); - if (!newsSubscription.isUnsubscribed()) + if (newsSubscription != null && !newsSubscription.isUnsubscribed()) newsSubscription.unsubscribe(); } } \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java index 6928454..46431c8 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java @@ -54,7 +54,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, title.setText(event.getTitle()); title.setShadowLayer(13, 0, 0, Color.BLACK); date.setText(event.getPubDate()); - description.setText(Html.fromHtml(event.getDesc())); + description.setText(Html.fromHtml(event.getContent())); description.setMovementMethod(new LinkMovementMethod()); return view; } @@ -74,7 +74,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) { @OnClick(R.id.e_btnWebsite) void onWebsiteClicked() { Intent i = new Intent(Intent.ACTION_VIEW); - i.setData(Uri.parse(event.getUrl())); + i.setData(Uri.parse(event.getPermalink())); startActivity(i); } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java index 79f6f3a..588d520 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java @@ -1,5 +1,14 @@ package com.spielpark.steve.bernieapp.model; +import android.util.Log; + +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; +import com.squareup.okhttp.ResponseBody; + +import java.io.IOException; + import retrofit.GsonConverterFactory; import retrofit.Retrofit; import retrofit.RxJavaCallAdapterFactory; @@ -15,12 +24,44 @@ public ApiManager(BernieApi api) { public static ApiManager get() { if (instance == null) { - Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + + LoggingInterceptor interceptor = new LoggingInterceptor(); + Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://search.berniesanders.tech/articles_en/berniesanders_com") + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); + + retrofit.client().interceptors().add(interceptor); instance = new ApiManager(retrofit.create(BernieApi.class)); + } return instance; } + + private static class LoggingInterceptor implements Interceptor { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + Request request = chain.request(); + + long t1 = System.nanoTime(); + Log.d("Retrofit", String.format("Sending request %s on %s%n%s", + request.url(), chain.connection(), request.headers())); + + Response response = chain.proceed(request); + + long t2 = System.nanoTime(); + Log.d("Retrofit", String.format("Received response for %s in %.1fms%n%s", + response.request().url(), (t2 - t1) / 1e6d, response.headers())); + + + final String responseString = new String(response.body().bytes()); + + Log.d("Retrofit", "Response: " + responseString); + + return response.newBuilder() + .body(ResponseBody.create(response.body().contentType(), responseString)) + .build(); + } + } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java index 23b0cb1..a19e3ed 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java @@ -9,6 +9,6 @@ public interface BernieApi { - @GET("/_search?q=!article_type%3A%28ExternalLink%20OR%20Issues%29&sort=created_at:desc&size=20") + @GET("https://berniesanders.com/?json=true&which=news&limit=12") Observable> getNews(); } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java index 7744b1c..b13cd7d 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java @@ -23,12 +23,12 @@ public NewsArticle[] newArray(int size) { return new NewsArticle[size]; } }; + private static String NULL_IMAGE = "https://s.bsd.net/bernie16/main/page/-/website/fb-share.png"; private String title; - private String desc; - private String url; - private String pubdate; + private String content; + private String permalink; + private String date; private String time; - private String htmlTitle; private String imgSrc; public NewsArticle() { @@ -37,22 +37,13 @@ public NewsArticle() { protected NewsArticle(Parcel in) { this.title = in.readString(); - this.desc = in.readString(); - this.url = in.readString(); - this.pubdate = in.readString(); + this.content = in.readString(); + this.permalink = in.readString(); + this.date = in.readString(); this.time = in.readString(); - this.htmlTitle = in.readString(); this.imgSrc = in.readString(); } - public String getHtmlTitle() { - return htmlTitle; - } - - public void setHtmlTitle(String htmlTitle) { - this.htmlTitle = htmlTitle; - } - public String getTime() { return time; } @@ -69,43 +60,43 @@ public void setTitle(String title) { this.title = title; } - public String getDesc() { - return desc; + public String getContent() { + return content; } - public void setDesc(String desc) { - this.desc = desc; + public void setContent(String content) { + this.content = content; } - public String getUrl() { - return url; + public String getPermalink() { + return permalink; } - public void setUrl(String url) { - this.url = url; + public void setPermalink(String permalink) { + this.permalink = permalink; } public String getPubDate() { - return pubdate; + return date; } public void setPubDate(String pubdate) { - this.pubdate = pubdate; + this.date = pubdate; } @Override public String getTxt() { - return getHtmlTitle(); + return getTitle(); } @Override public void setTxt(String txt) { - this.setHtmlTitle(txt); + this.setTitle(txt); } @Override public String getImgSrc() { - return imgSrc; + return imgSrc == null ? NULL_IMAGE : imgSrc; } @Override @@ -138,11 +129,10 @@ public int describeContents() { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.title); - dest.writeString(this.desc); - dest.writeString(this.url); - dest.writeString(this.pubdate); + dest.writeString(this.content); + dest.writeString(this.permalink); + dest.writeString(this.date); dest.writeString(this.time); - dest.writeString(this.htmlTitle); dest.writeString(this.imgSrc); } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java index 2568a81..cdc3e53 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java @@ -24,6 +24,7 @@ public static NewsManager get() { } public Observable> getNews() { + getNewsFromApi(); return newsArticleSubject.asObservable(); } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java index fe7b08c..38706e1 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java @@ -65,8 +65,8 @@ protected Object doInBackground(Object[] params) { if (in == null) { Log.d("reader null", "no events, null reader,"); NewsArticle a = new NewsArticle(); - a.setHtmlTitle("Unable to Load News"); - a.setDesc("Check your internet connection?"); + a.setTitle("Unable to Load News"); + a.setContent("Check your internet connection?"); articles.add(a); return null; } @@ -106,7 +106,7 @@ private void readObjects(JsonReader reader) throws IOException { break; } case "permalink": { - a.setUrl(reader.nextString()); + a.setPermalink(reader.nextString()); break; } case "date": { @@ -118,7 +118,7 @@ private void readObjects(JsonReader reader) throws IOException { if (content.contains("".length()); } - a.setDesc(content); + a.setContent(content); break; } case "og_image": { @@ -165,9 +165,9 @@ protected void onPostExecute(Object o) { for (int i = 0; i < articles.size(); i++) { a = articles.get(i); if (!(setSubheader)) { - if (a.getUrl() != null) { - if (a.getUrl().contains("press-release")) { - subHeader.setText(Html.fromHtml(a.getDesc())); + if (a.getPermalink() != null) { + if (a.getPermalink().contains("press-release")) { + subHeader.setText(Html.fromHtml(a.getContent())); String s = a.getTitle(); s = s.length() > 40 ? s.substring(0, 40) + "..." : s; header.setText(s); diff --git a/app/src/main/res/layout/list_news_item.xml b/app/src/main/res/layout/list_news_item.xml index 0a96a03..1f17671 100644 --- a/app/src/main/res/layout/list_news_item.xml +++ b/app/src/main/res/layout/list_news_item.xml @@ -13,7 +13,7 @@ android:layout_centerVertical="true" android:paddingBottom="4dp" android:paddingTop="4dp" - android:scaleType="fitXY" + android:scaleType="centerCrop" android:src="@drawable/logo" /> Date: Thu, 29 Oct 2015 21:16:17 -0400 Subject: [PATCH 07/11] Going a little deep down the RX rabbit hole to get the first Press Release to use at the header. --- .../bernieapp/fragments/NewsFragment.java | 38 +++++++++++++++---- .../steve/bernieapp/model/BernieApi.java | 7 +++- .../steve/bernieapp/model/news/Category.java | 15 ++++++++ .../bernieapp/model/news/NewsArticle.java | 30 +++++++-------- .../bernieapp/model/news/NewsManager.java | 9 ++++- 5 files changed, 73 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/model/news/Category.java diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index db1c3af..74836a0 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -21,6 +21,7 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.actMainPage; import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; +import com.spielpark.steve.bernieapp.model.news.Category; import com.spielpark.steve.bernieapp.model.news.NewsArticle; import com.spielpark.steve.bernieapp.model.news.NewsManager; @@ -30,17 +31,19 @@ import butterknife.Bind; import butterknife.ButterKnife; +import rx.Observable; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; +import rx.functions.Func1; /** - * A placeholder fragment containing a simple view. + * A placeholder instance containing a simple view. */ public class NewsFragment extends Fragment { - private static NewsFragment mIntstance; + private static NewsFragment instance; @Bind(R.id.listNews) ListView list; @Bind(R.id.progressBar) ProgressBar progressBar; @Bind(R.id.txtSubHeader) TextView subHeader; @@ -49,11 +52,11 @@ public class NewsFragment extends Fragment { private Subscription newsSubscription; public static NewsFragment getInstance() { - if (mIntstance == null) { - mIntstance = new NewsFragment(); - return mIntstance; + if (instance == null) { + instance = new NewsFragment(); + return instance; } else { - return mIntstance; + return instance; } } @@ -75,7 +78,28 @@ public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) @Override public void onResume() { super.onResume(); - newsSubscription = NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe( + newsSubscription = NewsManager.get().getNews().compose(new Observable.Transformer, List>() { + @Override + public Observable> call(Observable> listObservable) { + listObservable.flatMapIterable(new Func1, Iterable>() { + @Override + public Iterable call(List newsArticles) { + return newsArticles; + } + }).filter(new Func1() { + @Override + public Boolean call(NewsArticle newsArticle) { + return newsArticle.getCategories().contains(Category.PressRelease); + } + }).first().subscribe(new Action1() { + @Override + public void call(NewsArticle newsArticle) { + + } + }); + return listObservable; + } + }).observeOn(AndroidSchedulers.mainThread()).subscribe( new Action1>() { @Override public void call(List newsArticles) { diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java index a19e3ed..1206c5b 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java @@ -5,10 +5,13 @@ import java.util.List; import retrofit.http.GET; +import retrofit.http.Path; import rx.Observable; public interface BernieApi { + String NEWS = "news"; + String DAILY = "daily"; - @GET("https://berniesanders.com/?json=true&which=news&limit=12") - Observable> getNews(); + @GET("https://berniesanders.com/?json=true&which={which}&limit=12") + Observable> getNews(@Path("which") String newsType); } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/Category.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/Category.java new file mode 100644 index 0000000..d319b3e --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/Category.java @@ -0,0 +1,15 @@ +package com.spielpark.steve.bernieapp.model.news; + +import com.google.gson.annotations.SerializedName; + +/** + * Created by Patrick on 10/29/15. + */ +public enum Category { + @SerializedName("On the Road") + OnTheRoad, + @SerializedName("News") + News, + @SerializedName("Press Release") + PressRelease +} diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java index b13cd7d..b45a89c 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java @@ -3,11 +3,13 @@ import android.os.Parcel; import android.os.Parcelable; +import com.google.gson.annotations.SerializedName; import com.spielpark.steve.bernieapp.model.ImgTxtItem; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; /** * Created by Steve on 8/14/2015. @@ -23,13 +25,14 @@ public NewsArticle[] newArray(int size) { return new NewsArticle[size]; } }; - private static String NULL_IMAGE = "https://s.bsd.net/bernie16/main/page/-/website/fb-share.png"; + private static final String NULL_IMAGE = "https://s.bsd.net/bernie16/main/page/-/website/fb-share.png"; private String title; private String content; private String permalink; private String date; - private String time; - private String imgSrc; + @SerializedName("og_image") + private String image; + private List categories; public NewsArticle() { @@ -40,17 +43,9 @@ protected NewsArticle(Parcel in) { this.content = in.readString(); this.permalink = in.readString(); this.date = in.readString(); - this.time = in.readString(); - this.imgSrc = in.readString(); + this.image = in.readString(); } - public String getTime() { - return time; - } - - public void setTime(String time) { - this.time = time; - } public String getTitle() { return title; @@ -84,6 +79,10 @@ public void setPubDate(String pubdate) { this.date = pubdate; } + public List getCategories() { + return categories; + } + @Override public String getTxt() { return getTitle(); @@ -96,12 +95,12 @@ public void setTxt(String txt) { @Override public String getImgSrc() { - return imgSrc == null ? NULL_IMAGE : imgSrc; + return image == null ? NULL_IMAGE : image; } @Override public void setImgSrc(String img) { - this.imgSrc = img; + this.image = img; } @Override @@ -132,7 +131,6 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.content); dest.writeString(this.permalink); dest.writeString(this.date); - dest.writeString(this.time); - dest.writeString(this.imgSrc); + dest.writeString(this.image); } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java index cdc3e53..dcdb399 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java @@ -3,6 +3,7 @@ import android.util.Log; import com.spielpark.steve.bernieapp.model.ApiManager; +import com.spielpark.steve.bernieapp.model.BernieApi; import java.util.List; @@ -14,8 +15,14 @@ public class NewsManager { private static NewsManager instance; + private final BernieApi api; private PublishSubject> newsArticleSubject = PublishSubject.create(); + public NewsManager() { + api = ApiManager.get().api; + + } + public static NewsManager get() { if (instance == null) { instance = new NewsManager(); @@ -29,7 +36,7 @@ public Observable> getNews() { } private void getNewsFromApi() { - ApiManager.get().api.getNews() + Observable.merge(api.getNews(BernieApi.NEWS), api.getNews(BernieApi.DAILY)) .cache() .subscribeOn(Schedulers.io()) .subscribe(new Action1>() { From 19b2c932e85bb668b7b2bd95181b8c0550877f17 Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Fri, 30 Oct 2015 01:26:34 -0400 Subject: [PATCH 08/11] Eliminated NewsTask, replaced with Retrofit/RxJava --- .../steve/bernieapp/actMainPage.java | 209 +++++++++--------- .../bernieapp/fragments/NewsFragment.java | 108 +++++---- .../steve/bernieapp/model/BernieApi.java | 6 +- .../bernieapp/model/news/NewsManager.java | 32 +-- .../steve/bernieapp/tasks/NewsTask.java | 208 ----------------- app/src/main/res/layout/frag_newsarticles.xml | 2 - 6 files changed, 164 insertions(+), 401 deletions(-) delete mode 100644 app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java index 594e64a..8ed2002 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java @@ -25,109 +25,111 @@ import com.spielpark.steve.bernieapp.fragments.SingleNewsFragment; import com.spielpark.steve.bernieapp.model.Issue; import com.spielpark.steve.bernieapp.model.news.NewsArticle; -import com.spielpark.steve.bernieapp.tasks.NewsTask; public class actMainPage extends ActionBarActivity - implements NavigationDrawerFragment.NavigationDrawerCallbacks { - private static SharedPreferences preferences; - private static Fragment curFrag; - /** - * Fragment managing the behaviors, interactions and presentation of the navigation drawer. - */ - private NavigationDrawerFragment mNavigationDrawerFragment; - /** - * Used to store the last screen title. For use in {@link #restoreActionBar()}. - */ - private CharSequence mTitle; - - @Override protected void onStop() { - super.onStop(); - } - - @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.layout_main_page); - mNavigationDrawerFragment = - (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById( - R.id.navigation_drawer); - mTitle = getTitle(); - // Set up the drawer. - mNavigationDrawerFragment.setUp(R.id.navigation_drawer, - (DrawerLayout) findViewById(R.id.drawer_layout)); - ActionBar bar = getSupportActionBar(); - bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#147FD7"))); - mTitle = "News"; - preferences = getApplicationContext().getSharedPreferences("bernie_app_prefs", 0); - adjustNavBarText(0); - } - - @Override public void onNavigationDrawerItemSelected(int position) { - if (curFrag instanceof ConnectFragment) { - ConnectFragment.cancelTask(); //cancel loading the map. - Log.d("AMP - ONDIS", "Cancelled loading the map."); + implements NavigationDrawerFragment.NavigationDrawerCallbacks { + private static SharedPreferences preferences; + private static Fragment curFrag; + /** + * Fragment managing the behaviors, interactions and presentation of the navigation drawer. + */ + private NavigationDrawerFragment mNavigationDrawerFragment; + /** + * Used to store the last screen title. For use in {@link #restoreActionBar()}. + */ + private CharSequence mTitle; + + @Override + protected void onStop() { + super.onStop(); } - // update the main content by replacing fragments - FragmentManager fragmentManager = getSupportFragmentManager(); - fragmentManager.popBackStack("base", FragmentManager.POP_BACK_STACK_INCLUSIVE); - Fragment replacement; - switch (position) { - case 0: { - replacement = NewsFragment.getInstance(); - break; - } - case 1: { - replacement = IssuesFragment.getInstance(); - break; - } - case 2: { - replacement = OrganizeFragment.getInstance(); - break; - } - case 3: { - replacement = ConnectFragment.getInstance(); - break; - } - case 4: { - replacement = BernRateFragment.getInstance(); - break; - } - case 5: { - replacement = FeedbackFragment.getInstance(); - break; - } - default: { - replacement = NewsFragment.getInstance(); - } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.layout_main_page); + mNavigationDrawerFragment = + (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById( + R.id.navigation_drawer); + mTitle = getTitle(); + // Set up the drawer. + mNavigationDrawerFragment.setUp(R.id.navigation_drawer, + (DrawerLayout) findViewById(R.id.drawer_layout)); + ActionBar bar = getSupportActionBar(); + bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#147FD7"))); + mTitle = "News"; + preferences = getApplicationContext().getSharedPreferences("bernie_app_prefs", 0); + adjustNavBarText(0); } - adjustNavBarText(position); - curFrag = replacement; - onSectionAttached(++position); - fragmentManager.beginTransaction().replace(R.id.container, replacement).commit(); - } - - public void onSectionAttached(int number) { - switch (number) { - case 1: - mTitle = getString(R.string.title_section1); - break; - case 2: - mTitle = getString(R.string.title_section2); - break; - case 3: - mTitle = getString(R.string.title_section3); - break; - case 4: - mTitle = getString(R.string.title_section4); - break; - case 5: - mTitle = getString(R.string.title_section5); - break; - case 6: - mTitle = getString(R.string.title_section6); - break; + + @Override + public void onNavigationDrawerItemSelected(int position) { + if (curFrag instanceof ConnectFragment) { + ConnectFragment.cancelTask(); //cancel loading the map. + Log.d("AMP - ONDIS", "Cancelled loading the map."); + } + // update the main content by replacing fragments + FragmentManager fragmentManager = getSupportFragmentManager(); + fragmentManager.popBackStack("base", FragmentManager.POP_BACK_STACK_INCLUSIVE); + Fragment replacement; + switch (position) { + case 0: { + replacement = NewsFragment.getInstance(); + break; + } + case 1: { + replacement = IssuesFragment.getInstance(); + break; + } + case 2: { + replacement = OrganizeFragment.getInstance(); + break; + } + case 3: { + replacement = ConnectFragment.getInstance(); + break; + } + case 4: { + replacement = BernRateFragment.getInstance(); + break; + } + case 5: { + replacement = FeedbackFragment.getInstance(); + break; + } + default: { + replacement = NewsFragment.getInstance(); + } + } + adjustNavBarText(position); + curFrag = replacement; + onSectionAttached(++position); + fragmentManager.beginTransaction().replace(R.id.container, replacement).commit(); + } + + public void onSectionAttached(int number) { + switch (number) { + case 1: + mTitle = getString(R.string.title_section1); + break; + case 2: + mTitle = getString(R.string.title_section2); + break; + case 3: + mTitle = getString(R.string.title_section3); + break; + case 4: + mTitle = getString(R.string.title_section4); + break; + case 5: + mTitle = getString(R.string.title_section5); + break; + case 6: + mTitle = getString(R.string.title_section6); + break; + } } - } public void restoreActionBar() { ActionBar actionBar = getSupportActionBar(); @@ -184,17 +186,6 @@ public SharedPreferences getPrefs() { return preferences; } - public void loadHeaderArticle(View view) { - if (NewsTask.getData() != null) { - for (NewsArticle a : NewsTask.getData()) { - if (a.getPermalink().contains("press-release")) { - this.loadEvent(a); - break; - } - } - } - } - public void adjustNavBarText(int selected) { TextView[] views = new TextView[]{ (TextView) findViewById(R.id.newsTxt), (TextView) findViewById(R.id.issuesTxt), diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index 74836a0..75ebf22 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -9,7 +9,7 @@ import android.support.v4.app.Fragment; import android.text.Html; import android.text.method.ScrollingMovementMethod; -import android.util.Log; +import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -31,11 +31,13 @@ import butterknife.Bind; import butterknife.ButterKnife; +import butterknife.OnClick; import rx.Observable; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.functions.Func1; +import rx.functions.Func2; /** * A placeholder instance containing a simple view. @@ -49,6 +51,7 @@ public class NewsFragment extends Fragment { @Bind(R.id.txtSubHeader) TextView subHeader; @Bind(R.id.txtHeader) TextView header; ImgTxtAdapter adapter; + NewsArticle headerArticle; private Subscription newsSubscription; public static NewsFragment getInstance() { @@ -78,66 +81,55 @@ public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) @Override public void onResume() { super.onResume(); - newsSubscription = NewsManager.get().getNews().compose(new Observable.Transformer, List>() { + + //Get all of the articles + Observable articles = NewsManager.get().getNews().flatMapIterable(new Func1, Iterable>() { @Override - public Observable> call(Observable> listObservable) { - listObservable.flatMapIterable(new Func1, Iterable>() { - @Override - public Iterable call(List newsArticles) { - return newsArticles; - } - }).filter(new Func1() { - @Override - public Boolean call(NewsArticle newsArticle) { - return newsArticle.getCategories().contains(Category.PressRelease); - } - }).first().subscribe(new Action1() { - @Override - public void call(NewsArticle newsArticle) { + public Iterable call(List newsArticles) { + return newsArticles; + } + }); - } - }); - return listObservable; + //Filter out only the first press release article to be used as the header. + Observable firstPressRelease = articles.filter(new Func1() { + @Override + public Boolean call(NewsArticle newsArticle) { + return newsArticle.getCategories().contains(Category.PressRelease); } - }).observeOn(AndroidSchedulers.mainThread()).subscribe( - new Action1>() { - @Override - public void call(List newsArticles) { - Collections.sort(newsArticles); - adapter.addAll(newsArticles); - NewsArticle a; - boolean setSubheader = false; - for (int i = 0; i < adapter.getCount(); i++) { - a = (NewsArticle) adapter.getItem(i); - if (!(setSubheader)) { - if (a.getPermalink() != null) { - if (a.getPermalink().contains("press-release")) { - subHeader.setText(Html.fromHtml(a.getContent())); - String s = a.getTitle(); - s = s.length() > 40 ? s.substring(0, 40) + "..." : s; - header.setText(s); - setSubheader = true; - } - } - } - } - - ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); - list.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.GONE); - list.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); - } - }); - } - }, new Action1() { + }).first(); + + //Remove the header from the list of articles + newsSubscription = Observable.zip(articles.toList(), firstPressRelease, new Func2, NewsArticle, Pair>>() { + @Override + public Pair> call(List newsArticles, NewsArticle newsArticle) { + newsArticles.remove(newsArticle); + return new Pair(newsArticle, newsArticles); + } + }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>>() { + @Override + public void call(Pair> pair) { + //Setup the header + headerArticle = pair.first; + subHeader.setText(Html.fromHtml(headerArticle.getContent())); + String s = headerArticle.getTitle(); + s = s.length() > 40 ? s.substring(0, 40) + "..." : s; + header.setText(s); + + //Setup the remaining articles + Collections.sort(pair.second); + adapter.addAll(pair.second); + ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); + list.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override - public void call(Throwable throwable) { - Log.e("NewsFragment", "Failed to get news", throwable); + public void onItemClick(AdapterView parent, View view, int position, long id) { + ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); } }); + + } + }); } @Override @@ -146,4 +138,10 @@ public void onPause() { if (newsSubscription != null && !newsSubscription.isUnsubscribed()) newsSubscription.unsubscribe(); } + + @OnClick({R.id.txtSubHeader, R.id.txtHeader}) + void onHeaderClicked() { + if (headerArticle != null) + ((actMainPage) getActivity()).loadEvent(headerArticle); + } } \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java index 1206c5b..cdb4dbf 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java @@ -5,13 +5,13 @@ import java.util.List; import retrofit.http.GET; -import retrofit.http.Path; +import retrofit.http.Query; import rx.Observable; public interface BernieApi { String NEWS = "news"; String DAILY = "daily"; - @GET("https://berniesanders.com/?json=true&which={which}&limit=12") - Observable> getNews(@Path("which") String newsType); + @GET("https://berniesanders.com/?json=true&limit=12") + Observable> getNews(@Query("which") String newsType); } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java index dcdb399..ed3253e 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java @@ -1,22 +1,18 @@ package com.spielpark.steve.bernieapp.model.news; -import android.util.Log; - import com.spielpark.steve.bernieapp.model.ApiManager; import com.spielpark.steve.bernieapp.model.BernieApi; import java.util.List; import rx.Observable; -import rx.functions.Action1; +import rx.functions.Func2; import rx.schedulers.Schedulers; -import rx.subjects.PublishSubject; public class NewsManager { private static NewsManager instance; private final BernieApi api; - private PublishSubject> newsArticleSubject = PublishSubject.create(); public NewsManager() { api = ApiManager.get().api; @@ -31,25 +27,13 @@ public static NewsManager get() { } public Observable> getNews() { - getNewsFromApi(); - return newsArticleSubject.asObservable(); - } - - private void getNewsFromApi() { - Observable.merge(api.getNews(BernieApi.NEWS), api.getNews(BernieApi.DAILY)) - .cache() - .subscribeOn(Schedulers.io()) - .subscribe(new Action1>() { - @Override - public void call(List newsArticles) { - newsArticleSubject.onNext(newsArticles); - } - }, new Action1() { - @Override - public void call(Throwable throwable) { - Log.e("NewsManager", "getNewsFromApi Failed.", throwable); - } - }); + return Observable.zip(api.getNews(BernieApi.NEWS), api.getNews(BernieApi.DAILY), new Func2, List, List>() { + @Override + public List call(List newsArticles, List newsArticles2) { + newsArticles.addAll(newsArticles2); + return newsArticles; + } + }).cache().subscribeOn(Schedulers.io()); } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java b/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java deleted file mode 100644 index 38706e1..0000000 --- a/app/src/main/java/com/spielpark/steve/bernieapp/tasks/NewsTask.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.spielpark.steve.bernieapp.tasks; - -import android.content.Context; -import android.os.AsyncTask; -import android.text.Html; -import android.util.JsonReader; -import android.util.JsonToken; -import android.util.Log; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ListView; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.spielpark.steve.bernieapp.R; -import com.spielpark.steve.bernieapp.actMainPage; -import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; -import com.spielpark.steve.bernieapp.model.news.NewsArticle; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; - -/** - * Created by Steve on 7/8/2015. - */ -public class NewsTask extends AsyncTask { - private static ArrayList articles; - private static ListView list; - private static ProgressBar progressBar; - private static Context ctx; - private static TextView subHeader; - private static TextView header; - private static String NULL_IMAGE = "https://s.bsd.net/bernie16/main/page/-/website/fb-share.png"; - - public NewsTask(Context ctx, ListView listView, ProgressBar progressBar, TextView subHeader, TextView header) { - list = listView; - NewsTask.ctx = ctx; - NewsTask.progressBar = progressBar; - NewsTask.subHeader = subHeader; - NewsTask.header = header; - } - - public static NewsArticle getArticle(int pos) { - return articles.get(pos); - } - - public static ArrayList getData() { - return articles; - } - - @Override - protected Object doInBackground(Object[] params) { - BufferedReader in; - try { - URL[] urls = new URL[]{ - (new URL("https://berniesanders.com/?json=true&which=news&limit=12")), - (new URL("https://berniesanders.com/?json=true&which=daily&limit=12")) - }; - for (URL u : urls) { - in = new BufferedReader(new InputStreamReader(u.openStream())); - if (in == null) { - Log.d("reader null", "no events, null reader,"); - NewsArticle a = new NewsArticle(); - a.setTitle("Unable to Load News"); - a.setContent("Check your internet connection?"); - articles.add(a); - return null; - } - JsonReader reader = new JsonReader(in); - try { - readObjects(reader); - } catch (IOException e) { - e.printStackTrace(); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - - - private void readObjects(JsonReader reader) throws IOException { - NewsArticle a = new NewsArticle(); - while (reader.hasNext()) { - if (isCancelled()) { - return; - } - if (reader.peek() == JsonToken.BEGIN_ARRAY) { - reader.beginArray(); - } - if (reader.peek() == JsonToken.BEGIN_OBJECT) { - reader.beginObject(); - } - if (reader.peek() == JsonToken.END_ARRAY) { - reader.endArray(); - } - String next = reader.nextName(); - switch (next.toLowerCase().trim()) { - case "title": { - a.setTitle(reader.nextString()); - break; - } - case "permalink": { - a.setPermalink(reader.nextString()); - break; - } - case "date": { - a.setPubDate(reader.nextString()); - break; - } - case "content": { - String content = reader.nextString(); - if (content.contains("".length()); - } - a.setContent(content); - break; - } - case "og_image": { - if (reader.peek() == JsonToken.NULL) { - a.setImgSrc(NULL_IMAGE); - reader.nextNull(); - } else { - a.setImgSrc(reader.nextString()); - } - break; - } - default: { - if (reader.peek() != JsonToken.END_OBJECT) { - reader.skipValue(); - } - if (reader.peek() == JsonToken.END_OBJECT) { - if (a.getTitle() != null) { - a.setTxt(getHTMLForTitle(a)); - publishProgress(a); - a = new NewsArticle(); - } - reader.endObject(); - } - } - } - } - reader.close(); - } - - @Override - protected void onPreExecute() { - super.onPreExecute(); - articles = new ArrayList<>(); - ImgTxtAdapter adapter = new ImgTxtAdapter(ctx, R.layout.list_news_item, articles); - list.setAdapter(adapter); - } - - @Override - protected void onPostExecute(Object o) { - super.onPostExecute(o); - Collections.sort(articles); - NewsArticle a; - boolean setSubheader = false; - for (int i = 0; i < articles.size(); i++) { - a = articles.get(i); - if (!(setSubheader)) { - if (a.getPermalink() != null) { - if (a.getPermalink().contains("press-release")) { - subHeader.setText(Html.fromHtml(a.getContent())); - String s = a.getTitle(); - s = s.length() > 40 ? s.substring(0, 40) + "..." : s; - header.setText(s); - setSubheader = true; - } - } - } - } - ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); - list.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.GONE); - list.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - ((actMainPage) ctx).loadEvent(NewsTask.getArticle(position)); - } - }); - } - - @Override - protected void onProgressUpdate(NewsArticle[] a) { - super.onProgressUpdate(a); - articles.add(a[0]); - ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); - } - - private String getHTMLForTitle(NewsArticle e) { - StringBuilder bld = new StringBuilder(); - String title = e.getTitle(); - if (title.length() > 40) { - title = title.substring(0, 40); - title = title.substring(0, Math.min(title.length(), title.lastIndexOf(' '))).concat("..."); - } - bld.append("").append(title).append("
"); - bld.append("").append(e.getPubDate()); - return bld.toString(); - } -} diff --git a/app/src/main/res/layout/frag_newsarticles.xml b/app/src/main/res/layout/frag_newsarticles.xml index 2708d77..31397e6 100644 --- a/app/src/main/res/layout/frag_newsarticles.xml +++ b/app/src/main/res/layout/frag_newsarticles.xml @@ -13,7 +13,6 @@ android:id="@+id/pic_header" android:layout_width="match_parent" android:layout_height="160dp" - android:onClick="loadHeaderArticle" android:scaleType="fitXY" android:src="@drawable/vermont_state_house" /> @@ -39,7 +38,6 @@ android:layout_marginTop="-2dp" android:background="@drawable/news_header_border" android:maxLines="4" - android:onClick="loadHeaderArticle" android:paddingLeft="4dp" android:paddingRight="4dp" android:scrollbars="vertical" From 097c5571df8752d6633df0dfc6ce882374733e32 Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Mon, 2 Nov 2015 23:24:42 -0500 Subject: [PATCH 09/11] Remove the superfluous Rx, move it into the NewsManager --- .../bernieapp/fragments/NewsFragment.java | 68 +++++++------------ .../bernieapp/model/news/NewsManager.java | 22 ++++-- 2 files changed, 42 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index 75ebf22..c515744 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -21,7 +21,6 @@ import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.actMainPage; import com.spielpark.steve.bernieapp.misc.ImgTxtAdapter; -import com.spielpark.steve.bernieapp.model.news.Category; import com.spielpark.steve.bernieapp.model.news.NewsArticle; import com.spielpark.steve.bernieapp.model.news.NewsManager; @@ -32,12 +31,9 @@ import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; -import rx.Observable; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; -import rx.functions.Func1; -import rx.functions.Func2; /** * A placeholder instance containing a simple view. @@ -81,52 +77,36 @@ public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) @Override public void onResume() { super.onResume(); - - //Get all of the articles - Observable articles = NewsManager.get().getNews().flatMapIterable(new Func1, Iterable>() { - @Override - public Iterable call(List newsArticles) { - return newsArticles; - } - }); - - //Filter out only the first press release article to be used as the header. - Observable firstPressRelease = articles.filter(new Func1() { - @Override - public Boolean call(NewsArticle newsArticle) { - return newsArticle.getCategories().contains(Category.PressRelease); - } - }).first(); - - //Remove the header from the list of articles - newsSubscription = Observable.zip(articles.toList(), firstPressRelease, new Func2, NewsArticle, Pair>>() { - @Override - public Pair> call(List newsArticles, NewsArticle newsArticle) { - newsArticles.remove(newsArticle); - return new Pair(newsArticle, newsArticles); - } - }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>>() { + newsSubscription = NewsManager.get().getNews().observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>>() { @Override public void call(Pair> pair) { //Setup the header headerArticle = pair.first; - subHeader.setText(Html.fromHtml(headerArticle.getContent())); - String s = headerArticle.getTitle(); - s = s.length() > 40 ? s.substring(0, 40) + "..." : s; - header.setText(s); + if (headerArticle != null) { + subHeader.setText(Html.fromHtml(headerArticle.getContent())); + String s = headerArticle.getTitle(); + s = s.length() > 40 ? s.substring(0, 40) + "..." : s; + header.setText(s); + } else { + //TODO: We need to replace the header with something else. + } //Setup the remaining articles - Collections.sort(pair.second); - adapter.addAll(pair.second); - ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); - list.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.GONE); - list.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); - } - }); + if (pair.second != null && pair.second.size() > 0) { + Collections.sort(pair.second); + adapter.addAll(pair.second); + ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); + list.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); + } + }); + } else { + //TODO: Handle an empty list. + } } }); diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java index ed3253e..d45f067 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java @@ -1,5 +1,7 @@ package com.spielpark.steve.bernieapp.model.news; +import android.util.Pair; + import com.spielpark.steve.bernieapp.model.ApiManager; import com.spielpark.steve.bernieapp.model.BernieApi; @@ -26,12 +28,24 @@ public static NewsManager get() { return instance; } - public Observable> getNews() { - return Observable.zip(api.getNews(BernieApi.NEWS), api.getNews(BernieApi.DAILY), new Func2, List, List>() { + public Observable>> getNews() { + return Observable.zip(api.getNews(BernieApi.NEWS), api.getNews(BernieApi.DAILY), new Func2, List, Pair>>() { @Override - public List call(List newsArticles, List newsArticles2) { + public Pair> call(List newsArticles, List newsArticles2) { newsArticles.addAll(newsArticles2); - return newsArticles; + //Filter out only the first press release article to be used as the header. + NewsArticle pressRelease = null; + for (NewsArticle newsArticle : newsArticles) { + if (newsArticle.getCategories().contains(Category.PressRelease)) { + pressRelease = newsArticle; + break; + } + } + //Remove the header from the list of articles + if (pressRelease != null) { + newsArticles.remove(pressRelease); + } + return new Pair<>(pressRelease, newsArticles); } }).cache().subscribeOn(Schedulers.io()); } From 4981af82dd354838ffa6545c0c0347469538e8a9 Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Mon, 2 Nov 2015 23:55:32 -0500 Subject: [PATCH 10/11] Remove the superfluous Rx, move everything but subscription into the NewsManager --- .../bernieapp/fragments/NewsFragment.java | 46 ++++++++++++------- .../steve/bernieapp/model/ApiManager.java | 2 +- .../steve/bernieapp/model/BernieApi.java | 2 +- .../bernieapp/model/news/NewsArticle.java | 5 ++ .../bernieapp/model/news/NewsManager.java | 1 + 5 files changed, 38 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java index c515744..3e0d552 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/NewsFragment.java @@ -82,33 +82,26 @@ public void onResume() { public void call(Pair> pair) { //Setup the header headerArticle = pair.first; - if (headerArticle != null) { - subHeader.setText(Html.fromHtml(headerArticle.getContent())); - String s = headerArticle.getTitle(); - s = s.length() > 40 ? s.substring(0, 40) + "..." : s; - header.setText(s); + if (pair.first != null) { + setupHeader(headerArticle); } else { + //TODO: We need to replace the header with something else. } //Setup the remaining articles if (pair.second != null && pair.second.size() > 0) { - Collections.sort(pair.second); - adapter.addAll(pair.second); - ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); - list.setVisibility(View.VISIBLE); - progressBar.setVisibility(View.GONE); - list.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); - } - }); + setupListView(pair.second); } else { //TODO: Handle an empty list. } } + }, new Action1() { + @Override + public void call(Throwable throwable) { + setupHeader(new NewsArticle("Unable to Load News", "Check your connection and try again.")); + } }); } @@ -124,4 +117,25 @@ void onHeaderClicked() { if (headerArticle != null) ((actMainPage) getActivity()).loadEvent(headerArticle); } + + private void setupHeader(NewsArticle article) { + subHeader.setText(Html.fromHtml(article.getContent())); + String s = article.getTitle(); + s = s.length() > 40 ? s.substring(0, 40) + "..." : s; + header.setText(s); + } + + private void setupListView(List articles) { + Collections.sort(articles); + adapter.addAll(articles); + ((ImgTxtAdapter) list.getAdapter()).notifyDataSetChanged(); + list.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + ((actMainPage) getActivity()).loadEvent((NewsArticle) list.getAdapter().getItem(position)); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java index 588d520..1d59f99 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/ApiManager.java @@ -27,7 +27,7 @@ public static ApiManager get() { LoggingInterceptor interceptor = new LoggingInterceptor(); Retrofit retrofit = new Retrofit.Builder() - .baseUrl("https://search.berniesanders.tech/articles_en/berniesanders_com") + .baseUrl("https://berniesanders.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java index cdb4dbf..8d08abf 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/BernieApi.java @@ -12,6 +12,6 @@ public interface BernieApi { String NEWS = "news"; String DAILY = "daily"; - @GET("https://berniesanders.com/?json=true&limit=12") + @GET("?json=true&limit=12") Observable> getNews(@Query("which") String newsType); } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java index b45a89c..a2d9814 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsArticle.java @@ -38,6 +38,11 @@ public NewsArticle() { } + public NewsArticle(String title, String content) { + this.title = title; + this.content = content; + } + protected NewsArticle(Parcel in) { this.title = in.readString(); this.content = in.readString(); diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java index d45f067..44c03ac 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/model/news/NewsManager.java @@ -45,6 +45,7 @@ public Pair> call(List newsArticles, if (pressRelease != null) { newsArticles.remove(pressRelease); } + return new Pair<>(pressRelease, newsArticles); } }).cache().subscribeOn(Schedulers.io()); From 2005005e784840b7949caa0dc617f74cb02b6635 Mon Sep 17 00:00:00 2001 From: PatrickDattilio Date: Tue, 3 Nov 2015 00:07:11 -0500 Subject: [PATCH 11/11] Merged butterknife. --- .../main/java/com/spielpark/steve/bernieapp/actMainPage.java | 2 +- .../steve/bernieapp/fragments/SingleNewsFragment.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java index 9af264e..fb5bf71 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java @@ -155,7 +155,7 @@ public void onBackPressed() { ((ConnectFragment) curFrag).backPressed(); return; } else if (curFrag instanceof OrganizeFragment) { - if (((OrganizeFragment) curFrag).canGoBack()) { + if (OrganizeFragment.canGoBack()) { return; } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java index a676c91..73b69a9 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/SingleNewsFragment.java @@ -56,14 +56,14 @@ public void onViewCreated(View view, Bundle savedInstanceState) { ((TextView) root.findViewById(R.id.e_txtTitle)).setText(event.getTitle()); ((TextView) root.findViewById(R.id.e_txtTitle)).setShadowLayer(13, 0, 0, Color.BLACK); ((TextView) root.findViewById(R.id.e_txtDate)).setText(event.getPubDate() + " at " + time); - ((TextView) root.findViewById(R.id.e_txtDesc)).setText(Html.fromHtml(event.getDesc())); + ((TextView) root.findViewById(R.id.e_txtDesc)).setText(Html.fromHtml(event.getContent())); ((TextView) root.findViewById(R.id.e_txtDesc)).setMovementMethod(new LinkMovementMethod()); Util.getPicasso(getActivity()).load(event.getImgSrc()).placeholder(R.drawable.logo).into((ImageView) root.findViewById(R.id.e_imgLogo)); root.findViewById(R.id.e_btnWebsite).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_VIEW); - i.setData(Uri.parse(event.getUrl())); + i.setData(Uri.parse(event.getPermalink())); startActivity(i); } });