diff --git a/app/build.gradle b/app/build.gradle index 3f3710a..15d5bf9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.spielpark.steve.bernieapp" minSdkVersion 14 targetSdkVersion 23 - versionCode 15 - versionName "1.51R" + versionCode 18 + versionName "1.6R" } buildTypes { release { @@ -23,6 +23,6 @@ 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.google.android.gms:play-services:8.1.0' compile 'com.squareup.picasso:picasso:2.5.2' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5874307..450480c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,6 +25,11 @@ + + 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 09e2789..5aa0562 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/actMainPage.java @@ -1,21 +1,31 @@ package com.spielpark.steve.bernieapp; +import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; +import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; +import android.support.v7.widget.ShareActionProvider; import android.util.Log; import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.widget.TextView; +import com.google.android.gms.appindexing.Action; +import com.google.android.gms.appindexing.AppIndex; +import com.google.android.gms.common.api.GoogleApiClient; import com.spielpark.steve.bernieapp.fragments.BernRateFragment; import com.spielpark.steve.bernieapp.fragments.ConnectFragment; +import com.spielpark.steve.bernieapp.fragments.DonateFragment; import com.spielpark.steve.bernieapp.fragments.FeedbackFragment; import com.spielpark.steve.bernieapp.fragments.IssuesFragment; import com.spielpark.steve.bernieapp.fragments.NavigationDrawerFragment; @@ -36,14 +46,28 @@ public class actMainPage extends ActionBarActivity private NavigationDrawerFragment mNavigationDrawerFragment; private static SharedPreferences preferences; private static Fragment curFrag; - /** - * Used to store the last screen title. For use in {@link #restoreActionBar()}. - */ + private CharSequence mTitle; + private GoogleApiClient client; + @Override protected void onStop() { super.onStop(); + Action viewAction = Action.newAction( + Action.TYPE_VIEW, // TODO: choose an action type. + "actMainPage Page", // TODO: Define a title for the content shown. + // TODO: If you have web page content that matches this app activity's content, + // make sure this auto-generated web page URL is correct. + // Otherwise, set the URL to null. + Uri.parse("http://host/path"), + // TODO: Make sure this auto-generated app deep link URI is correct. + Uri.parse("android-app://com.spielpark.steve.bernieapp/http/host/path") + ); + AppIndex.AppIndexApi.end(client, viewAction); + // ATTENTION: This was auto-generated to implement the App Indexing API. + // See https://g.co/AppIndexing/AndroidStudio for more information. + client.disconnect(); } @Override @@ -62,44 +86,50 @@ protected void onCreate(Bundle savedInstanceState) { mTitle = "News"; preferences = getApplicationContext().getSharedPreferences("bernie_app_prefs", 0); adjustNavBarText(0); + // ATTENTION: This was auto-generated to implement the App Indexing API. + // See https://g.co/AppIndexing/AndroidStudio for more information. + client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } @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 : { + switch (position) { + case 0: { replacement = NewsFragment.getInstance(); break; } - case 1 : { + case 1: { replacement = IssuesFragment.getInstance(); break; } - case 2 : { + case 2: { replacement = OrganizeFragment.getInstance(); break; } - case 3 : { + case 3: { replacement = ConnectFragment.getInstance(); break; } - case 4 : { + case 4: { replacement = BernRateFragment.getInstance(); break; } - case 5 : { + case 5: { + replacement = DonateFragment.getInstance(); + break; + } + case 6: { replacement = FeedbackFragment.getInstance(); break; } - default: { + default: { replacement = NewsFragment.getInstance(); } } @@ -132,6 +162,9 @@ public void onSectionAttached(int number) { case 6: mTitle = getString(R.string.title_section6); break; + case 7: + mTitle = getString(R.string.title_section7); + break; } } @@ -142,12 +175,11 @@ public void restoreActionBar() { actionBar.setTitle(mTitle); } - @Override public boolean onCreateOptionsMenu(Menu menu) { if (!mNavigationDrawerFragment.isDrawerOpen()) { restoreActionBar(); - return true; + //return true; } return super.onCreateOptionsMenu(menu); } @@ -176,6 +208,7 @@ public void loadEvent(NewsArticle e) { manager.popBackStack(); } manager.beginTransaction().addToBackStack("base").replace(R.id.container, f).commit(); + curFrag = f; } public void loadIssue(Issue i) { @@ -185,6 +218,7 @@ public void loadIssue(Issue i) { manager.popBackStack(); } manager.beginTransaction().addToBackStack("base").replace(R.id.container, f).commit(); + curFrag = f; } public SharedPreferences getPrefs() { @@ -203,7 +237,7 @@ public void loadHeaderArticle(View view) { } public void adjustNavBarText(int selected) { - TextView[] views = new TextView[] { + TextView[] views = new TextView[]{ (TextView) findViewById(R.id.newsTxt), (TextView) findViewById(R.id.issuesTxt), (TextView) findViewById(R.id.organizeTxt), @@ -230,4 +264,24 @@ public void switchPage(View view) { adjustNavBarText(selected); NavigationDrawerFragment.setSelected(selected); } + + @Override + public void onStart() { + super.onStart(); + + // ATTENTION: This was auto-generated to implement the App Indexing API. + // See https://g.co/AppIndexing/AndroidStudio for more information. + client.connect(); + Action viewAction = Action.newAction( + Action.TYPE_VIEW, // TODO: choose an action type. + "actMainPage Page", // TODO: Define a title for the content shown. + // TODO: If you have web page content that matches this app activity's content, + // make sure this auto-generated web page URL is correct. + // Otherwise, set the URL to null. + Uri.parse("http://host/path"), + // TODO: Make sure this auto-generated app deep link URI is correct. + Uri.parse("android-app://com.spielpark.steve.bernieapp/http/host/path") + ); + AppIndex.AppIndexApi.start(client, viewAction); + } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BernRateFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BernRateFragment.java index 5eafcc2..c7bd930 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BernRateFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BernRateFragment.java @@ -4,10 +4,13 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -63,16 +66,18 @@ private String[] generateURLs() { private void displayWebViews(String[] urls) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, - RelativeLayout.LayoutParams.MATCH_PARENT +900 ); LinearLayout parent = (LinearLayout) getView().findViewById(R.id.layoutBernRate); params.setMargins(8, 8, 8, 8); params.gravity = Gravity.CENTER_HORIZONTAL; for (String s : urls) { WebView wv = new WebView(getActivity()); - wv.getSettings().setJavaScriptEnabled(true); + WebSettings settings = wv.getSettings(); + settings.setJavaScriptEnabled(true); wv.setLayoutParams(params); - wv.loadData(s, "text/Html", "UTF-8"); + wv.setWebChromeClient(new WebChromeClient()); + wv.loadDataWithBaseURL("http://www.bernrate.com", s, "text/html", "UTF-8", null); parent.addView(wv); } } diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BottomNavFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BottomNavFragment.java index 3569189..7f442ee 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BottomNavFragment.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/BottomNavFragment.java @@ -25,11 +25,6 @@ public static BottomNavFragment getInstance() { } } - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 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 02cf42a..56d4df3 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 @@ -104,6 +104,7 @@ public void onItemClick(AdapterView adapterView, View view, int i, long l) { } }); fetchCountry = true; + Toast.makeText(getActivity(), "Only Start Date Listed, Events May End at a Later Date", Toast.LENGTH_LONG).show(); setUpMap(); MapsInitializer.initialize(getActivity().getApplicationContext()); super.onViewCreated(view, savedInstanceState); @@ -182,7 +183,7 @@ public void onClick(View view) { ((TextView) base.findViewById(R.id.cd_txtDescContent)).setText(Html.fromHtml(e.getDescription())); ((TextView) base.findViewById(R.id.cd_txtDescContent)).setMovementMethod(new ScrollingMovementMethod()); if (e.getVenue_city() != null) ((TextView) base.findViewById(R.id.cd_txtLocation)).setText(e.getVenue_addr() + "\n" + e.getVenue_city() + ", " + e.getState() + " - " + e.getZip()); - if (e.getAttendee_count() != 0) ((TextView) base.findViewById(R.id.cd_txtRSVP)).setText(e.isOfficial() ? "N/A" : Integer.toString(e.getAttendee_count())); + ((TextView) base.findViewById(R.id.cd_txtRSVP)).setText(e.isOfficial() ? "N/A" : Integer.toString(e.getAttendee_count())); Animation fadeIn = AnimationUtils.loadAnimation(getActivity(), alreadyLoaded ? R.anim.view_fade_in_fast : R.anim.view_fade_in); fadeIn.setAnimationListener(new Animation.AnimationListener() { @Override @@ -308,7 +309,7 @@ public void updateViews(ArrayAdapter a) { if (parent == null) { return; //We switched out of this view. } - ListView list = (ListView) getView().findViewById(R.id.c_listEvents); + ListView list = (ListView) parent.findViewById(R.id.c_listEvents); list.setAdapter(a); list.setVisibility(View.VISIBLE); parent.findViewById(R.id.c_mapContainer).setVisibility(View.VISIBLE); diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/fragments/DonateFragment.java b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/DonateFragment.java new file mode 100644 index 0000000..d0e9aa3 --- /dev/null +++ b/app/src/main/java/com/spielpark/steve/bernieapp/fragments/DonateFragment.java @@ -0,0 +1,50 @@ +package com.spielpark.steve.bernieapp.fragments; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.spielpark.steve.bernieapp.R; +import com.squareup.picasso.Picasso; + +/** + * Created by Steve on 2/28/2016. + */ +public class DonateFragment extends Fragment{ + private static DonateFragment mInstance; + + public static DonateFragment getInstance() { + if (mInstance == null) { + mInstance = new DonateFragment(); + } + return mInstance; + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + ImageView thermometer = ((ImageView) view.findViewById(R.id.d_imgThermometer)); + Picasso.with(getContext()).invalidate("https://secure.actblue.com/x/object/actblue-badges/page/reddit-for-bernie/thermometer/dark.png"); + Picasso.with(getContext()).load("https://secure.actblue.com/x/object/actblue-badges/page/reddit-for-bernie/thermometer/dark.png").into(thermometer); + view.findViewById(R.id.d_btnDonate).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse(getResources().getString(R.string.donate_url))); + startActivity(i); + } + }); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.frag_donate, container, false); + } +} 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 c939f28..4e9a2f3 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 @@ -111,7 +111,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) new NavDrawerItem(R.drawable.ic_people_white_24dp, getString(R.string.title_section3)), new NavDrawerItem(R.drawable.ic_map_white_24dp, getString(R.string.title_section4)), new NavDrawerItem(R.drawable.ic_insert_chart_white_24dp, getString(R.string.title_section5)), - new NavDrawerItem(R.drawable.ic_feedback_white_24dp, getString(R.string.title_section6)), + new NavDrawerItem(R.drawable.ic_attach_money_white_24dp, getString(R.string.title_section6)), + new NavDrawerItem(R.drawable.ic_feedback_white_24dp, getString(R.string.title_section7)), }; mDrawerListView.setAdapter(new NavDrawerAdapter(getActivity(), R.layout.list_drawer_item, datas)); mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 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 761eaaa..d71d0d4 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 @@ -39,23 +39,6 @@ public void onViewCreated(final View view, @Nullable Bundle 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(); - - /*if (!(NewsTask.hasData())) { - new NewsTask(getActivity(), newsList, (ProgressBar) view.findViewById(R.id.progressBar), (TextView) view.findViewById(R.id.txtSubHeader), (TextView) view.findViewById(R.id.txtHeader)).execute(); - } else { - for (NewsArticle a : NewsTask.getData()) { - if (a.getUrl().contains("press-release")) { - ((TextView) view.findViewById(R.id.txtSubHeader)).setText(Html.fromHtml(a.getDesc())); - String s = a.getTitle(); - s = s.length() > 42 ? s.substring(0, 42) + "..." : s; - ((TextView) view.findViewById(R.id.txtHeader)).setText(s); - break; - }\ - } - newsList.setVisibility(View.VISIBLE); - view.findViewById(R.id.progressBar).setVisibility(View.GONE); - newsList.setAdapter(new ImgTxtAdapter(getActivity(), R.layout.list_news_item, NewsTask.getData())); - }*/ } @Override 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 bdf1f67..9138170 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 @@ -1,16 +1,21 @@ package com.spielpark.steve.bernieapp.fragments; - +import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.ShareActionProvider; import android.text.Html; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.webkit.WebChromeClient; import android.webkit.WebView; import android.widget.TextView; @@ -21,6 +26,7 @@ * A simple {@link Fragment} subclass. */ public class SingleIssueFragment extends Fragment { + private ShareActionProvider shareActionProvider; private static Issue mIssue; public static SingleIssueFragment newInstance(Issue i) { @@ -40,7 +46,7 @@ public void onCreate(Bundle savedInstanceState) { } @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (mIssue == null) { //User exited the app and returned to it, but android cleared some stuff from memory... @@ -52,14 +58,43 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { ((TextView) root.findViewById(R.id.i_txtDate)).setText("Published " + mIssue.getPubDate()); ((TextView) root.findViewById(R.id.i_txtDesc)).setText(Html.fromHtml(mIssue.getDesc())); ((TextView) root.findViewById(R.id.i_txtDesc)).setMovementMethod(new LinkMovementMethod()); - ((WebView) root.findViewById(R.id.i_video)).getSettings().setJavaScriptEnabled(true); - ((WebView) root.findViewById(R.id.i_video)).loadData(mIssue.getEmbedURL(getActivity()), "text/Html", "UTF-8"); + WebView wv = ((WebView) root.findViewById(R.id.i_video)); + wv.setWebChromeClient(new WebChromeClient()); + wv.getSettings().setJavaScriptEnabled(true); + wv.loadDataWithBaseURL(null, mIssue.getEmbedURL(getActivity()), "text/Html", "UTF-8", null); } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.share_menu, menu); + MenuItem item = menu.findItem(R.id.menu_item_share); + shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); + shareActionProvider.setShareIntent(getShareIntent()); + shareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { + @Override + public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { + getActivity().onBackPressed(); + return false; + } + }); + super.onCreateOptionsMenu(menu, inflater); + } + + private Intent getShareIntent() { + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + StringBuilder text = new StringBuilder("Hey, here's Bernie Sanders' official stance on this issue -- \n"); + text.append(mIssue.getTitle()); + text.append("\n\nRead more here: " + mIssue.getUrl()); + text.append("\n\nSent from Bernie Sanders for President 2016 Android Application"); + shareIntent.putExtra(Intent.EXTRA_TEXT, text.toString()); + return shareIntent; + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + setHasOptionsMenu(true); return inflater.inflate(R.layout.frag_single_issue, container, false); } 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 3814c80..76099e6 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 @@ -5,9 +5,15 @@ import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.ShareActionProvider; import android.text.Html; import android.text.method.LinkMovementMethod; +import android.util.Log; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -20,6 +26,7 @@ public class SingleNewsFragment extends Fragment { private static NewsArticle mEvent; private static SingleNewsFragment mInstance; + private ShareActionProvider shareActionProvider; public static SingleNewsFragment getInstance(NewsArticle e) { mEvent = e; @@ -40,7 +47,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) { ((TextView) root.findViewById(R.id.e_txtDate)).setText(mEvent.getPubDate()); ((TextView) root.findViewById(R.id.e_txtDesc)).setText(Html.fromHtml(mEvent.getDesc())); ((TextView) root.findViewById(R.id.e_txtDesc)).setMovementMethod(new LinkMovementMethod()); - Util.getPicasso(getActivity()).load(mEvent.getImgSrc()).placeholder(R.drawable.logo).into((ImageView)root.findViewById(R.id.e_imgLogo)); + Util.getPicasso(getActivity()).load(mEvent.getImgSrc()).placeholder(R.drawable.logo).fit().into((ImageView)root.findViewById(R.id.e_imgLogo)); root.findViewById(R.id.e_btnWebsite).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -52,14 +59,36 @@ public void onClick(View v) { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.share_menu, menu); + MenuItem item = menu.findItem(R.id.menu_item_share); + shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); + shareActionProvider.setShareIntent(getShareIntent()); + shareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { + @Override + public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { + return false; + } + }); + super.onCreateOptionsMenu(menu, inflater); + } + + private Intent getShareIntent() { + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + StringBuilder text = new StringBuilder("Hey, check out this article on Bernie Sanders!\n"); + text.append(mEvent.getTitle()); + text.append("\n\nRead more here: " + mEvent.getUrl()); + text.append("\n\nSent from Bernie Sanders for President 2016 Android Application"); + shareIntent.putExtra(Intent.EXTRA_TEXT, text.toString()); + return shareIntent; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment + setHasOptionsMenu(true); return inflater.inflate(R.layout.frag_event, container, false); } } 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 75c0673..fa0a39b 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 @@ -45,7 +45,7 @@ public View getView(int position, View convertView, ViewGroup parent) { } else { v = (ViewHolder) convertView.getTag(); } - Util.getPicasso(ctx).load(item.getImgSrc()).into(v.img); + Util.getPicasso(ctx).load(item.getImgSrc()).fit().into(v.img); v.txt.setTypeface(Typeface.createFromAsset(ctx.getAssets(), "Jubilat.otf")); v.txt.setText(Html.fromHtml(item.getTxt())); return convertView; diff --git a/app/src/main/java/com/spielpark/steve/bernieapp/misc/Util.java b/app/src/main/java/com/spielpark/steve/bernieapp/misc/Util.java index 8e2d4e2..013532a 100644 --- a/app/src/main/java/com/spielpark/steve/bernieapp/misc/Util.java +++ b/app/src/main/java/com/spielpark/steve/bernieapp/misc/Util.java @@ -54,8 +54,8 @@ public static int getFullScreenHeight(Activity ctx) { } public static AlertDialog getShowAgainDialogue(Context ctx, final SharedPreferences prefs, final Preferences p, String message) { - LayoutInflater inflator = LayoutInflater.from(ctx); - final View view = inflator.inflate(R.layout.dialogue_checkbox, null); + LayoutInflater inflater = LayoutInflater.from(ctx); + final View view = inflater.inflate(R.layout.dialogue_checkbox, null); AlertDialog.Builder bld = new AlertDialog.Builder(ctx, 4); bld.setMessage(message) .setTitle("Welcome!") 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 edd5e00..e1eb5c2 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 @@ -1,16 +1,25 @@ package com.spielpark.steve.bernieapp.tasks; +import android.app.Activity; import android.content.Context; +import android.graphics.Typeface; import android.os.AsyncTask; import android.text.Html; import android.util.JsonReader; import android.util.JsonToken; import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; import com.spielpark.steve.bernieapp.R; import com.spielpark.steve.bernieapp.fragments.ConnectFragment; +import com.spielpark.steve.bernieapp.misc.Util; import com.spielpark.steve.bernieapp.wrappers.Event; +import com.spielpark.steve.bernieapp.wrappers.ImgTxtItem; import java.io.BufferedReader; import java.io.IOException; @@ -45,7 +54,7 @@ protected Object doInBackground(Object[] params) { BufferedReader in = null; try { URL url = frag.fetchCountry ? - new URL("https://go.berniesanders.com/page/event/search_results?orderby=date&format=json") : + new URL("https://go.berniesanders.com/page/event/search_results?orderby=date&format=json&limit=500") : new URL("https://go.berniesanders.com/page/event/search_results?orderby=date&format=json&zip_radius=" + frag.mRadius + "&zip=" + frag.mZip); Log.d("URL", url.toString()); in = new BufferedReader(new InputStreamReader(url.openStream())); @@ -75,10 +84,12 @@ protected void onPostExecute(Object o) { Log.d("OPE", "There are " + events.size() + " events."); Collections.sort(events); String[] titles = new String[events.size()]; + String[] dates = new String[events.size()]; for (int i = 0; i < events.size(); i++) { titles[i] = getHTMLForTitle(events.get(i)); + dates[i] = getHTMLForDate(events.get(i).getDate()); } - NewsAdapter adapter = new NewsAdapter(ctx, R.layout.list_news_item, R.id.txtItem, titles); + ConnectAdapter adapter = new ConnectAdapter(ctx, R.layout.list_connect_events, dates, titles); frag.setMarkers(); frag.updateViews(adapter); frag = null; @@ -99,11 +110,23 @@ private String getHTMLForTitle(Event e) { bld.append("").append(e.getName()).append("
"); if (e.getVenue_city() != null) { bld.append(" ").append(e.getVenue_city()).append(", ").append(e.getState()).append(" - ").append(e.getZip()).append("
"); - bld.append(" # of RSVP: ").append(e.isOfficial() ? "N/A" : Integer.toString(e.getAttendee_count())); + bld.append(" Participating: ").append(e.isOfficial() ? "N/A" : Integer.toString(e.getAttendee_count())); } return bld.toString(); } + private String getHTMLForDate(String s) { + String ret = s; + SimpleDateFormat ft = new SimpleDateFormat("MMMM d, yyyy"); + try { + Date date = ft.parse(s); + ret = new SimpleDateFormat("''d'
'MMM''").format(date); + } catch (ParseException e1) { + e1.printStackTrace(); + } + return ret; + } + private void readObjects(JsonReader reader) throws IOException { Log.d("JsonReader", "Beginning parsing"); Event e = new Event(); @@ -226,16 +249,50 @@ private void readObjects(JsonReader reader) throws IOException { reader.close(); } - private class NewsAdapter extends ArrayAdapter { + private class ConnectAdapter extends ArrayAdapter { + private String[] dates; + private String[] titles; + private int res; - private NewsAdapter(Context context, int resource, int textViewResourceId, Object[] objects) { - super(context, resource, textViewResourceId, objects); + public ConnectAdapter(Context context, int resource, String[] dates, String[] titles) { + super(context, resource, dates); + this.dates = dates; + this.titles = titles; + this.res = resource; } @Override public Object getItem(int position) { - return Html.fromHtml( (String) super.getItem(position)); + return Html.fromHtml( dates[position] + " " + titles[position]); + } + + @Override + public int getCount() { + return dates.length; } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder v; + if (convertView == null) { + LayoutInflater inflater = ((Activity) ctx).getLayoutInflater(); + convertView = inflater.inflate(res, parent, false); + v = new ViewHolder(); + v.date = (TextView) convertView.findViewById(R.id.list_con_txtDate); + v.title = (TextView) convertView.findViewById(R.id.list_con_txtDesc); + convertView.setTag(v); + } else { + v = (ViewHolder) convertView.getTag(); + } + v.date.setText(Html.fromHtml(dates[position])); + v.date.setTypeface(Typeface.createFromAsset(ctx.getAssets(), "Jubilat.otf")); + v.title.setText(Html.fromHtml(titles[position])); + return convertView; + } + + private class ViewHolder { + TextView date; + TextView title; + } } } 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 62b2ded..5d75109 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 @@ -119,9 +119,23 @@ private void readObjects(JsonReader reader) throws IOException { } case "content" : { String content = reader.nextString(); + content = content.replaceAll("\\[.*?\\]",""); //at the risk of removing innocuous []'s if (content.contains("".length()); } + if (content.contains(")|()", ""); + } + //This shouldn't have to happen but I can't change the text formatting from the source. /me shrugs "it works" + try { + while (content.contains(("[rwd"))) { + String p1 = content.substring(0, content.indexOf(("[rwd"))); + String p2 = content.substring(content.indexOf(']', p1.length()) + 1); + content = p1.concat(p2); + } + } catch (Exception e) { //can't win'm all. + a.setDesc(content); //just roll with it. + } a.setDesc(content); break; } @@ -129,6 +143,9 @@ private void readObjects(JsonReader reader) throws IOException { if (reader.peek() == JsonToken.NULL) { a.setImgSrc(NULL_IMAGE); reader.nextNull(); + } else if (reader.peek() == JsonToken.BOOLEAN) { + a.setImgSrc(NULL_IMAGE); + reader.nextBoolean(); } else { a.setImgSrc(reader.nextString()); } diff --git a/app/src/main/res/drawable-hdpi/ic_attach_money_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_attach_money_white_24dp.png new file mode 100644 index 0000000..ee833c6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_attach_money_white_24dp.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_attach_money_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_attach_money_white_24dp.png new file mode 100644 index 0000000..707d167 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_attach_money_white_24dp.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_attach_money_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_attach_money_white_24dp.png new file mode 100644 index 0000000..20efc6c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_attach_money_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_attach_money_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_attach_money_white_24dp.png new file mode 100644 index 0000000..d4bde81 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_attach_money_white_24dp.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_attach_money_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_attach_money_white_24dp.png new file mode 100644 index 0000000..f3c5685 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_attach_money_white_24dp.png differ diff --git a/app/src/main/res/layout/frag_donate.xml b/app/src/main/res/layout/frag_donate.xml new file mode 100644 index 0000000..47f9bb8 --- /dev/null +++ b/app/src/main/res/layout/frag_donate.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + +