From a1a35277b9315f3139e5b24a100639b3f43270ce Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Thu, 8 Aug 2013 01:16:22 -0500 Subject: [PATCH 001/157] Fix for issue #264 --- .../com/battlelancer/seriesguide/ui/SeriesGuidePreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeriesGuidePreferences.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeriesGuidePreferences.java index 9df2c40beb..92a257d517 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeriesGuidePreferences.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeriesGuidePreferences.java @@ -402,7 +402,7 @@ public boolean onKeyLongPress(int keyCode, KeyEvent event) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: - NavUtils.navigateUpFromSameTask(this); + super.onBackPressed(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); return true; } From 6c06e7594c10c9b9266eade24e04a86b182934cc Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Thu, 8 Aug 2013 01:52:40 -0500 Subject: [PATCH 002/157] Fix navigational issues --- .../seriesguide/billing/BillingActivity.java | 10 +++++++ .../DataLiberationActivity.java | 10 +++++++ .../seriesguide/ui/BackupDeleteActivity.java | 10 +++++++ .../seriesguide/ui/ConnectTraktActivity.java | 12 +++++++- .../seriesguide/ui/TraktSyncActivity.java | 10 +++++++ SeriesGuideBeta/AndroidManifest.xml | 30 ++++--------------- 6 files changed, 56 insertions(+), 26 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/billing/BillingActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/billing/BillingActivity.java index 0b7a41af69..1e8f24007f 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/billing/BillingActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/billing/BillingActivity.java @@ -17,6 +17,7 @@ import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.view.MenuItem; import com.battlelancer.seriesguide.settings.AdvancedSettings; import com.battlelancer.seriesguide.ui.BaseActivity; import com.battlelancer.seriesguide.ui.SeriesGuidePreferences; @@ -112,6 +113,15 @@ public void onClick(View v) { mContentContainer = findViewById(R.id.containerBilling); } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + super.onBackPressed(); + return true; + } + return false; + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/DataLiberationActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/DataLiberationActivity.java index f189f168b6..d77624db4b 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/DataLiberationActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/DataLiberationActivity.java @@ -20,6 +20,7 @@ import android.os.Bundle; import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.view.MenuItem; import com.battlelancer.seriesguide.ui.BaseActivity; public class DataLiberationActivity extends BaseActivity { @@ -41,4 +42,13 @@ private void setupActionBar() { actionBar.setDisplayHomeAsUpEnabled(true); } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + super.onBackPressed(); + return true; + } + return false; + } + } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/BackupDeleteActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/BackupDeleteActivity.java index a5b59cbc0c..fb67e7d60f 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/BackupDeleteActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/BackupDeleteActivity.java @@ -34,6 +34,7 @@ import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.view.MenuItem; import com.battlelancer.seriesguide.provider.SeriesContract.Shows; import com.battlelancer.seriesguide.provider.SeriesGuideDatabase; import com.battlelancer.seriesguide.sync.SgSyncAdapter; @@ -123,6 +124,15 @@ protected void onDestroy() { onCancelTasks(); } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + super.onBackPressed(); + return true; + } + return false; + } + private void onCancelTasks() { if (mImportTask != null && mImportTask.getStatus() == AsyncTask.Status.RUNNING) { mImportTask.cancel(true); diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ConnectTraktActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ConnectTraktActivity.java index ab9901d1a5..db6998180e 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ConnectTraktActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ConnectTraktActivity.java @@ -5,6 +5,7 @@ import android.support.v4.app.FragmentTransaction; import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.view.MenuItem; import com.battlelancer.seriesguide.util.ServiceUtils; import com.uwetrottmann.seriesguide.R; @@ -36,10 +37,19 @@ protected void onCreate(Bundle savedInstanceState) { } } } - + private void setupActionBar() { final ActionBar actionBar = getSupportActionBar(); actionBar.setTitle(R.string.connect_trakt); actionBar.setDisplayHomeAsUpEnabled(true); } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + super.onBackPressed(); + return true; + } + return false; + } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java index 84f940f602..2cc4ef6eef 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java @@ -33,6 +33,7 @@ import android.widget.CheckBox; import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.view.MenuItem; import com.battlelancer.seriesguide.provider.SeriesContract.Shows; import com.battlelancer.seriesguide.util.TraktSync; import com.google.analytics.tracking.android.EasyTracker; @@ -137,6 +138,15 @@ protected void onDestroy() { } } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + super.onBackPressed(); + return true; + } + return false; + } + @Override protected Dialog onCreateDialog(int id) { switch (id) { diff --git a/SeriesGuideBeta/AndroidManifest.xml b/SeriesGuideBeta/AndroidManifest.xml index 0b46b5bb0d..497594b154 100644 --- a/SeriesGuideBeta/AndroidManifest.xml +++ b/SeriesGuideBeta/AndroidManifest.xml @@ -86,11 +86,7 @@ - - + android:label="@string/backup" /> @@ -129,11 +125,7 @@ android:name="android.app.default_searchable" android:value="com.battlelancer.seriesguide.ui.SearchActivity" /> - - - + @@ -188,11 +180,7 @@ - - - + - - - - - - + + Date: Thu, 8 Aug 2013 03:54:19 -0500 Subject: [PATCH 003/157] Fix styling issues when using the DarkActionBar. When using the "SeriesGuideLight" theme, the some widgets used in the `ActionBar` aren't inherited correctly. --- SeriesGuide/res/values-v11/themes.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SeriesGuide/res/values-v11/themes.xml b/SeriesGuide/res/values-v11/themes.xml index b396d29f51..43d6260626 100644 --- a/SeriesGuide/res/values-v11/themes.xml +++ b/SeriesGuide/res/values-v11/themes.xml @@ -39,6 +39,9 @@ @drawable/fastscroll_thumb + + + @null From 1a9657e86a6f1cabef1a4292542891fb9ee796b4 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Thu, 8 Aug 2013 12:21:10 -0500 Subject: [PATCH 004/157] Fix the `ActionBar` for the "light" theme. This change will use to correct `actionBarWidgetTheme` for the "SeriesGuideLight" theme. --- SeriesGuide/res/values-v11/themes.xml | 2 +- SeriesGuide/res/values/themes.xml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/SeriesGuide/res/values-v11/themes.xml b/SeriesGuide/res/values-v11/themes.xml index 43d6260626..587cc7388a 100644 --- a/SeriesGuide/res/values-v11/themes.xml +++ b/SeriesGuide/res/values-v11/themes.xml @@ -41,7 +41,7 @@ @drawable/fastscroll_thumb - @null + @style/SeriesGuideTheme diff --git a/SeriesGuide/res/values/themes.xml b/SeriesGuide/res/values/themes.xml index 0a4893de4e..ca225773dd 100644 --- a/SeriesGuide/res/values/themes.xml +++ b/SeriesGuide/res/values/themes.xml @@ -172,6 +172,9 @@ @drawable/ic_action_arrow_top_inverse @drawable/ic_action_contextmenu_light @drawable/ic_action_checkin_inverse + + + @style/SeriesGuideTheme @@ -172,6 +174,7 @@ @drawable/ic_action_arrow_top_inverse @drawable/ic_action_contextmenu_light @drawable/ic_action_checkin_inverse + @drawable/ic_action_collect_inverse @style/SeriesGuideTheme diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java index c5ac9add74..68e621cf66 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java @@ -595,7 +595,7 @@ public void onClick(View v) { ImageButton collectedButton = (ImageButton) buttons .findViewById(R.id.collectedButton); collectedButton.setImageResource(isCollected ? R.drawable.ic_collected - : R.drawable.ic_action_collect); + : Utils.resolveAttributeToResourceId(getActivity().getTheme(), R.attr.drawableCollect)); collectedButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { From f3771195379bea70c271192ea0df8742774dd1f7 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 14:14:03 +0200 Subject: [PATCH 041/157] Use new attribute resolver everywhere! --- .../seriesguide/ui/OverviewFragment.java | 15 ++++++--------- .../seriesguide/ui/ShowInfoFragment.java | 8 +++----- .../seriesguide/ui/ShowsFragment.java | 12 +++++------- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java index 68e621cf66..40378120dd 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java @@ -776,10 +776,8 @@ private void onPopulateShowData(Cursor show) { final TextView statusText = (TextView) getView().findViewById(R.id.showStatus); int status = show.getInt(ShowQuery.SHOW_STATUS); if (status == 1) { - TypedValue outValue = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.textColorSgGreen, - outValue, true); - statusText.setTextColor(getResources().getColor(outValue.resourceId)); + statusText.setTextColor(getResources().getColor(Utils.resolveAttributeToResourceId( + getActivity().getTheme(), R.attr.textColorSgGreen))); statusText.setText(getString(R.string.show_isalive)); } else if (status == 0) { statusText.setTextColor(Color.GRAY); @@ -789,13 +787,12 @@ private void onPopulateShowData(Cursor show) { // favorite final ImageView favorited = (ImageView) getView().findViewById(R.id.imageViewFavorite); boolean isFavorited = show.getInt(ShowQuery.SHOW_FAVORITE) == 1; - TypedValue outValue = new TypedValue(); if (isFavorited) { - getSherlockActivity().getTheme().resolveAttribute(R.attr.drawableStar, outValue, true); - favorited.setImageResource(outValue.resourceId); + favorited.setImageResource(Utils.resolveAttributeToResourceId(getActivity().getTheme(), + R.attr.drawableStar)); } else { - getSherlockActivity().getTheme().resolveAttribute(R.attr.drawableStar0, outValue, true); - favorited.setImageResource(outValue.resourceId); + favorited.setImageResource(Utils.resolveAttributeToResourceId(getActivity().getTheme(), + R.attr.drawableStar0)); } CheatSheet.setup(favorited, isFavorited ? R.string.context_unfavorite : R.string.context_favorite); diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java index 419966ef2a..506de08dd5 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java @@ -182,10 +182,8 @@ private void onPopulateShowData() { // Running state if (mShow.getStatus() == 1) { - TypedValue outValue = new TypedValue(); - getActivity().getTheme().resolveAttribute(R.attr.textColorSgGreen, - outValue, true); - status.setTextColor(getResources().getColor(outValue.resourceId)); + status.setTextColor(getResources().getColor(Utils.resolveAttributeToResourceId( + getActivity().getTheme(), R.attr.textColorSgGreen))); status.setText(getString(R.string.show_isalive)); } else if (mShow.getStatus() == 0) { status.setTextColor(Color.GRAY); @@ -308,7 +306,7 @@ private void onLoadTraktRatings(boolean isUseCachedValues) { && (mTraktTask == null || mTraktTask.getStatus() != AsyncTask.Status.RUNNING)) { mTraktTask = new TraktSummaryTask(getActivity(), getView().findViewById( R.id.ratingbar), isUseCachedValues).show(getShowTvdbId()); - AndroidUtils.executeAsyncTask(mTraktTask, new Void[] {}); + AndroidUtils.executeAsyncTask(mTraktTask, new Void[]{}); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java index 036a50bf0d..192206d061 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java @@ -135,13 +135,11 @@ public void onActivityCreated(Bundle savedInstanceState) { updateSorting(prefs); int showfilter = prefs.getInt(SeriesGuidePreferences.KEY_SHOWFILTER, 0); - TypedValue outValueStar = new TypedValue(); - getSherlockActivity().getTheme().resolveAttribute(R.attr.drawableStar, outValueStar, true); - TypedValue outValueStarZero = new TypedValue(); - getSherlockActivity().getTheme().resolveAttribute(R.attr.drawableStar0, outValueStarZero, - true); - mAdapter = new SlowAdapter(getActivity(), null, 0, outValueStar.resourceId, - outValueStarZero.resourceId, this); + int resIdStar = Utils.resolveAttributeToResourceId(getSherlockActivity().getTheme(), + R.attr.drawableStar); + int resIdStarZero = Utils.resolveAttributeToResourceId(getSherlockActivity().getTheme(), + R.attr.drawableStar0); + mAdapter = new SlowAdapter(getActivity(), null, 0, resIdStar, resIdStarZero, this); // setup grid view mGrid = (GridView) getView().findViewById(R.id.showlist); From 2687a53eaccee7bbef1b1d8dbd8d66f3cc64722e Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 14:55:03 +0200 Subject: [PATCH 042/157] Remove old low-res collected icon. --- SeriesGuide/res/drawable-mdpi/ic_collected.png | Bin 1887 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_collected.png diff --git a/SeriesGuide/res/drawable-mdpi/ic_collected.png b/SeriesGuide/res/drawable-mdpi/ic_collected.png deleted file mode 100644 index db2bc80ee364b31131d1f08276e6285a24b3db33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 zcmV-l2cYPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyZ1 z4iE|GtUMq900!SlL_t(o!=;zYj~rJO#(&?fM|aQ5j>i+nu@T5p0@#XzWE>F*lwKrJ z9!P}6tP%km5UlwFY;X7@*b(uHW`l%fDRGcGJOUAzBvPC}0OO#sQ8FIeagV3FtLom5 zMYSE<_z8De-F3d-Irr3gh`Twq{_B}!{*R+O7CwAf%X<%MZRwMDme%mfyO@Lce+AK< zh#vy|@;F&pt>&FcC#wsosO?E-5-+Y^jC+^&#uYH&*5aMR+y=nHX#a7t@o=qEX0cb6 zWv7ZEE3*_wv8+PXRH>TO7t2vxoL`T}_wSD_$elsxcHZ{~WaqZg>6}}ePlT-sd>IrR z{5C0UlGmH%I2%`?nskd|Qq&tYoN5OBe!LS1-Aa6Ug|N0nF`OUHQB~X3cn=OgFf0P^ zfCoX@ADrSi3!PyT>Wyr?c`1&yo8_HrB=NgAaf}b7F0XKz~3rux|;G-^%;d-Q>f~k9uWUEPy|wL|>8(UEoi^ zUku*?-zW6xBsygIDg&u!ceBHR$*Fgm%1P+dA-&J>*)1r~z&D)K$x5_m`O z5Abt{T|hMM0^d~dGg(OYkDJM2XR!+&@p}?k)F!QcaEFM;@sTq>~Nm)W)R_Kcb_htE3$FZbIN9& z_!?%b#P7i;F^_|{ftqO|=Tln(O7IKG@#)JDo%IjrZUzyq|L&JpR>J)7ROYfMGBw?h z>Muxq3Gpk#za%{=u@%#R19$?Q07gKVmZB2zd>aXNPRe{++T56(bSV0R!8H)q0vOho zmUXV`WwFf4MxIS**>KF}l<>2_0=Pj6NE6Vn!Eb@j8Unfs!hRvbQz6TCD5fo3TNQNU&t|^*X(^qCX(u>my*R|JWdON8|-{x2Y%hIHeKxY2bPAR-nNOpb7A@;GdQr zw*4?DV7~_(2PcaF5>SA?k>H7H6uaFf&xZ3{e+3qx)lokiR~Nf=U_NB!f>GDfx26df zfebMLUbgwb;){p_LNb1vpf`YZqlhg8h-9fNX(!#zO$w2rKOoc#XUnP%vnhmakRB5H zu3!->A~I;j1Dr~50CNB##9INqZu2S3S0sulaKdB~N3$&dNotyEHs2N*;_H)8t0S^; zU3Z8qkn|AnJzzVKT5(t4V-g=EH~>5{&H6Wi-x%)%9!K=R5s|<`yo&j8Q`Z+#nvCF7 zv$VEy1t0@!c^_f4``<Pk*uu&}Ts0Oc*uI>vtz}f(9Eu<*V(zqv8qwS9bI|Mr`X zY1aabCn(E}NNo+_Lxiz*v?-w(iO1U3tDd20pJU*NgI<#BGblSdA1@7uyOt)$_jAh` z@k%Ak7m`ESaZ(n+1+DSd!EXTL>E#-GyU+}F#Mg?4Os89M4~O%&7rzQ%0P9dUqm)rK zZkq*|&to1i&hgY(+kzvK)fzs6^z)GEv}0Vq8}TauOKW`(yD>QxwNkk$6x&PMaLTHERmPL-Q8i?dWL##Db>aGxQU+hJo` z*)NC2p!c2WD0O}|?}hUlqs>d*%i@Rdoh~PN8&(*;zaGaA&Q9jy%*S~Vf0*)OHmg#% zL3s!YZK5}%kVU1uvg4?zHLPJ{^zp{1ySSseTk)&*f_4MixAJbDZCNa$d!3oiq^vq2 zD{F<6>67+($!?TlC^}W%tE=8eVp(-=gMNm8! zuKX{nl4s|4q_qpAE%%c4oFuI*lkRpWyvb%{VK{UcaS%?d+-!4NVc)yUK6LQzm(lCb Ze*g_G$!P6--sk`T002ovPDHLkV1jJffZhNA From 901fb7dadb8f270ec397d35be80125be37cb7ec8 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 15:02:32 +0200 Subject: [PATCH 043/157] New non-faded tick mark, added light version. --- .../res/drawable-hdpi/ic_action_tick.png | Bin 393 -> 515 bytes .../drawable-hdpi/ic_action_tick_inverse.png | Bin 0 -> 604 bytes .../res/drawable-hdpi/ic_action_watched.png | Bin 874 -> 0 bytes .../{ic_watched.png => ic_ticked.png} | Bin .../res/drawable-mdpi/ic_action_watched.png | Bin 652 -> 0 bytes SeriesGuide/res/drawable-mdpi/ic_watched.png | Bin 1034 -> 0 bytes .../res/drawable-xhdpi/ic_action_tick.png | Bin 327 -> 590 bytes .../drawable-xhdpi/ic_action_tick_inverse.png | Bin 0 -> 592 bytes .../res/drawable-xhdpi/ic_action_watched.png | Bin 1230 -> 0 bytes .../{ic_watched.png => ic_ticked.png} | Bin SeriesGuide/res/layout/buttonbar.xml | 2 +- SeriesGuide/res/layout/search_row.xml | 2 +- SeriesGuide/res/layout/seasons_fragment.xml | 2 +- SeriesGuide/res/values/attrs.xml | 1 + SeriesGuide/res/values/themes.xml | 3 +++ .../battlelancer/seriesguide/WatchedBox.java | 10 +++++++--- .../adapters/SearchResultsAdapter.java | 4 ++-- .../seriesguide/ui/EpisodeDetailsFragment.java | 4 ++-- .../seriesguide/ui/SeasonsFragment.java | 5 +++-- 19 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 SeriesGuide/res/drawable-hdpi/ic_action_tick_inverse.png delete mode 100644 SeriesGuide/res/drawable-hdpi/ic_action_watched.png rename SeriesGuide/res/drawable-hdpi/{ic_watched.png => ic_ticked.png} (100%) delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_watched.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_watched.png create mode 100644 SeriesGuide/res/drawable-xhdpi/ic_action_tick_inverse.png delete mode 100644 SeriesGuide/res/drawable-xhdpi/ic_action_watched.png rename SeriesGuide/res/drawable-xhdpi/{ic_watched.png => ic_ticked.png} (100%) diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_tick.png b/SeriesGuide/res/drawable-hdpi/ic_action_tick.png index 3511bc6ad128f4b213b56801276d686599833f06..cadf116bdf1ef55eb337f0e1f0e09d7579e5564a 100644 GIT binary patch delta 444 zcmV;t0YmN2E#k;GfBa2U*|~_;uQ1B_#OEz&XT70w2H`@PF;Jhf0hN55w<3szecZ z2>S}fN)&^K@c%%lL{WH%Kaov=dtl#be+OQGa|*&k+L6*H(U%2q5xYQ4Qc4Nmc5*X1 zJfzn`LlO%{+%}uZDdv0*B!als4KCg+cw4SYPNMRGzCt8TMEL1&5Nz5Xdmjc mQw6kB1+-HIv>8(cwDSkV&1ABs$wY$y0000>13WDDbCEmz>siqi@**N4B6_=Ejl~?pm-m!b%vEyfwJCB`WsAphk_jGX#@i_kW%0a$E z3L-8S-9^`I(+Z28^Z)-vy(sAm0{7lz9m=sZPjnPmxw^Yt;qS|*7V-v`=a?@~{QSb> z{{Nl(-<`Q%wA|VGr`dy>2LE`M9DVeD=j&U7nSmedT`$&)a?Kafk{9*bFPgsgzX$`v z`f8r&hg;95>+TU;RUz?6-g~3+bJsUVJ!0pc3G)#;#gXp00i_>zopr04O@N A0RR91 diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_tick_inverse.png b/SeriesGuide/res/drawable-hdpi/ic_action_tick_inverse.png new file mode 100644 index 0000000000000000000000000000000000000000..95ee27457c6c8d4e62ce01035a0d3fcc2fc24fb9 GIT binary patch literal 604 zcmV-i0;BzjP)|Cv#2fu;-r zu^9qlGX%tD2#8Iu1B@{*cFpN+K$@mg5&3A0dE=Yc%YZaZr_Q+#z-tj%_#%22@F*`L zlfOeRMPxCX%?^s@_bQ-39suXu-Db17FFK|-0Ur5pS(be*JFXW2q4Lm!fF|+~IiRUL zL=5oAUsjceNC7+KztmZ)^MHNIL&pJS^1xMyJiyb1o-v=#->T{f@Y!1XJLDwbmtQWI z=b`I*e*t66k*c1G$T4tQWp`LaTk_xuFvc7K?;lSpB2xk)+LQ-RK%VD6fnVEWbtBrA z2T#Cyz5bEs`6pF<*dDJM(S4kwezLPTC|kE`nU(P(t*oO{=$Jk$(;@`w^zm4|?>MA_w3K(i!;;LTiFgsR?HYtOZ#|E?PCMxREg>P?nqXI;rdz)f64k|c-Y@i<+rRu^5$!=3_S q68)=0Q-*-p3<0qj0%9`+#O4n{CuL#^g`a5v0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L019CM019CN{LD%v00007bV*G`2iye& z6aW`?R^Ye*00QbsL_t(&-tAaTOBG=lJRv@j>;tLj1NsBeI;c$_JJET@ zMGI?_yBkQ9eQG%~?>k{-VWtZyXwiRZRge%wdlz%sT;c6zcGas+FlRT1cV5nU=FIbc z00jyZC{Un4fz5;DU0@u?XFSilUMiIadwY9-{#OR9wWmpr0oVfIbE#Ass5jx|ReYMJ zr$~<0!~;P0!otGY`f<55V2nALW!WfztqwgBhT*5&8?e@%05Aq%+agEuzN*eFHQvuz zY>ty0cg2gyLsgy5eHSvu90M>8V7o&B9tUaPp$Gh zoY;)2>YGO1Z`tJ79IaJ;heMAALGZfKIW{dqaU3535CPcf(9cwLawYS$Y*K6vi%482 zK2p_}E1he@zd)L%hw8xTNJOH~E@k<&gm&+GOo?Cp(vdpg4M3N+3BohF; z9s0Sd+O-zu4+B9E%!$Z*hdPjDSsF!A+bT1EP(%^{dmMT~Rg-3X**^@32>bi{he^&k z^nTy>tudy3C6h-{)R|@3Z{kV5P}OMNPh=#;S~~>bqC%!|)ye_dwAqBF0+VQJ48P02aVLhn`Z^C+oE^HoOw6 z>WGNEb4`%6Q51F7x=qFRedCHJ`BqgQb#3ki0D-LjcMSKdq_{a(ORg zjJW~e>M}!SRCOfR7hBfaL6X;&=v=e4e`Z6l>fLA%1dmD9A3Q#6ROOqpoeslr6u@My zTYa3LpC1+x;(vp+_I$Nk^-!QdfdT~z6j&L40UahBuPN8c^#A|>07*qoM6N<$f}HY# AGynhq diff --git a/SeriesGuide/res/drawable-hdpi/ic_watched.png b/SeriesGuide/res/drawable-hdpi/ic_ticked.png similarity index 100% rename from SeriesGuide/res/drawable-hdpi/ic_watched.png rename to SeriesGuide/res/drawable-hdpi/ic_ticked.png diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_watched.png b/SeriesGuide/res/drawable-mdpi/ic_action_watched.png deleted file mode 100644 index 75cc31db7e754074a3373e58565cc67d2fea353a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 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 delta 255 zcmX@da-3;`gaivS0|P^Zd(K-R#a!&<8N$KAar>eFgNcSV^$el`J|V9Ev4M1t#*085 z>?J{d!3?s_p4(2HDJ=hc4k$Fy)5S5w<9Kp{1nXf215SZ}gjXH$^DK2(_X{q|%*39ymb(lphHK&iTse}yGfj%o=rd^Ge$2(Z z!{VGni`N4_mlZtoA{e|McC&7fxtGD>`KZ@zg5ZzKjhY^g28|_6=8BCy9BLCDew1b~ mQJUc}^H7dK)Q7$j28OmbPG%D`4qXSjj=|H_&t;ucLK6T+5@j?1 diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_tick_inverse.png b/SeriesGuide/res/drawable-xhdpi/ic_action_tick_inverse.png new file mode 100644 index 0000000000000000000000000000000000000000..d11962c5c6ff6d5caf62a2044f7a985954c88fca GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4 zvEgxB;)AK5m+39=6JLOv2rxE0mdlYC{AuQLL4o8y4BzhkcJ6FhE->Li`MI6u&+qJV zar(@3?&0x`LY%(bJJ{-{P5u7w?>(8bTsv6pc@CQw*v$2d|Nbm9$U*H-`nj01oGUo_ zdpTF|^7C@eV3v~-G!VBjQAqHsFwjfLt1!?>;H)svO3Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iye& z6afYW{qYL`00d4+L_t(|+U=R&YaCS+$G>NGW2DKpHMMCH(@>*r#20-Cf`5Yq`~fLS zpTxQMZqn8eYi(69Zwl(hhwSd$nf!PVMJf2SDEJ_01*wXnD2fUSzU0BG^;b2U?i^o6 z2sg9&IlI|i@Aq-Pvv>HMIp@rtvw)SAm6es1m6es1m6cWNs8}oxd7gLQM%Ov52=95` zF~@O=L^S35{sZe>ORWYU1i{fT3_Sq*qK_EB^HR#UT0R4`*0+aYSX>4F-$Q;ZpU>}U z=>Yh?KM0@*V83Dg#LQ}ZeEeF=mVoDZgGA&3=rXJ;L?na|KelWW41(a+D)2v7DiygN zeA8!u*7^tl4d8%b{o*)|bY1s{mVFKSzCQrKi-TuowHf%P%>d8y28c)lIA~bE5|I=_ ze81VVnl1xoXJ-#bHE+US4Z~1v1-|JrKx^F(zz5K6Sid=rqg>bhZmVZDO$G!(&=)nl zHSo-w-3~keq?%-~>5HCxk74~DhT&K?oBejXXQ!H==6fUfUK1X`m{RJSot#e%Uh_Q> ze4k$+d>^d1e{1M>O&p{V9f_&7ws_tbH1VMK?oz?(uF|5DB zFdP>`e3jI_)-8dBg@qfImzQ4#@TF2p*Qw!kJC36P95&${$2sY`?iWekuWAP5a=G@E zm6d5Cx|fJtt+lE({M_8!LC0~t82D?x!QIpke(JhT%juoBg!beP`WQToi;$ot>RML^NdBckLty^YimJF|&??2QZ}y;X^@#I2!eCW{7_6eyeWiuF$TT>;EtHIKO=%PFu7h-~QTx)%H z)jW|&rBX97@GAh$?k0R9`+x{`G$s%i+S}U;<#IU>;7${snV(WhUE1xjJCTKm@B2?O z^YIw#D%Sp2cRhl?*a&-v#5O{n=RHA04{vbUbpYq2l#7kBcu906rnQ~~@JJQA!p!HD zQtvg=<|*-=pw@Z8Ddj87{Hg)}TqDBQBm-7u!f5~}BKUXk se^jwp9D + android:src="?attr/drawableWatch" /> diff --git a/SeriesGuide/res/layout/search_row.xml b/SeriesGuide/res/layout/search_row.xml index 6bbd232eec..9da303cb2b 100644 --- a/SeriesGuide/res/layout/search_row.xml +++ b/SeriesGuide/res/layout/search_row.xml @@ -11,7 +11,7 @@ android:layout_alignParentRight="true" android:layout_marginBottom="@dimen/inline_padding" android:layout_marginTop="@dimen/inline_padding" - android:src="@drawable/ic_action_watched" /> + android:src="?attr/drawableWatch" /> + android:src="?attr/drawableWatch" /> + \ No newline at end of file diff --git a/SeriesGuide/res/values/themes.xml b/SeriesGuide/res/values/themes.xml index 0600c44b61..03661457c5 100644 --- a/SeriesGuide/res/values/themes.xml +++ b/SeriesGuide/res/values/themes.xml @@ -53,6 +53,7 @@ @drawable/ic_action_arrow_top @drawable/ic_action_contextmenu @drawable/ic_action_checkin + @drawable/ic_action_tick @drawable/ic_action_collect @@ -121,6 +122,7 @@ @drawable/ic_action_arrow_top @drawable/ic_action_contextmenu @drawable/ic_action_checkin + @drawable/ic_action_tick @drawable/ic_action_collect @@ -174,6 +176,7 @@ @drawable/ic_action_arrow_top_inverse @drawable/ic_action_contextmenu_light @drawable/ic_action_checkin_inverse + @drawable/ic_action_tick_inverse @drawable/ic_action_collect_inverse diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/WatchedBox.java b/SeriesGuide/src/com/battlelancer/seriesguide/WatchedBox.java index c142cd0d1c..6b6e74a60b 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/WatchedBox.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/WatchedBox.java @@ -21,16 +21,20 @@ import android.util.AttributeSet; import android.widget.ImageView; +import com.battlelancer.seriesguide.util.Utils; import com.uwetrottmann.seriesguide.R; public class WatchedBox extends ImageView { + private final int mResIdWatchDrawable; private boolean checked; public WatchedBox(Context context, AttributeSet attrs) { super(context, attrs); this.checked = false; - this.setImageResource(R.drawable.ic_action_watched); + mResIdWatchDrawable = Utils.resolveAttributeToResourceId(context.getTheme(), + R.attr.drawableWatch); + this.setImageResource(mResIdWatchDrawable); } public boolean isChecked() { @@ -49,9 +53,9 @@ public void toggle() { private void updateStateImage() { if (checked) { - this.setImageResource(R.drawable.ic_watched); + this.setImageResource(R.drawable.ic_ticked); } else { - this.setImageResource(R.drawable.ic_action_watched); + this.setImageResource(mResIdWatchDrawable); } } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/adapters/SearchResultsAdapter.java b/SeriesGuide/src/com/battlelancer/seriesguide/adapters/SearchResultsAdapter.java index 6bfa0e83af..e487c42ba4 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/adapters/SearchResultsAdapter.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/adapters/SearchResultsAdapter.java @@ -68,8 +68,8 @@ public View getView(int position, View convertView, ViewGroup parent) { viewHolder.showTitle.setText(mCursor.getString(SearchQuery.SHOW_TITLE)); viewHolder.watchedStatus.setImageResource(mCursor .getInt(SearchQuery.WATCHED) == 1 - ? R.drawable.ic_watched - : R.drawable.ic_action_watched); + ? R.drawable.ic_ticked + : Utils.resolveAttributeToResourceId(mContext.getTheme(), R.attr.drawableWatch)); // ensure matched term is bold viewHolder.searchSnippet.setText(Html.fromHtml(mCursor.getString(SearchQuery.OVERVIEW))); diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java index 08cc0d5795..815c004508 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java @@ -433,8 +433,8 @@ public void onClick(View v) { // Watched button mWatched = cursor.getInt(DetailsQuery.WATCHED) == 1 ? true : false; ImageButton seenButton = (ImageButton) view.findViewById(R.id.watchedButton); - seenButton.setImageResource(mWatched ? R.drawable.ic_watched - : R.drawable.ic_action_watched); + seenButton.setImageResource(mWatched ? R.drawable.ic_ticked + : Utils.resolveAttributeToResourceId(getActivity().getTheme(), R.attr.drawableWatch)); seenButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java index 9548a0be9f..ca4e614a09 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java @@ -58,6 +58,7 @@ import com.battlelancer.seriesguide.util.FlagTask; import com.battlelancer.seriesguide.util.FlagTask.FlagTaskCompletedEvent; import com.battlelancer.seriesguide.util.FlagTask.SeasonWatchedType; +import com.battlelancer.seriesguide.util.Utils; import com.google.analytics.tracking.android.EasyTracker; import com.uwetrottmann.androidutils.AndroidUtils; import com.uwetrottmann.androidutils.CheatSheet; @@ -156,8 +157,8 @@ public void onClick(View v) { }; private void setWatchedToggleState(Integer result) { - mButtonWatchedAll.setImageResource(result == 0 ? R.drawable.ic_watched - : R.drawable.ic_action_watched); + mButtonWatchedAll.setImageResource(result == 0 ? R.drawable.ic_ticked + : Utils.resolveAttributeToResourceId(getActivity().getTheme(), R.attr.drawableWatch)); mButtonWatchedAll .setOnClickListener(result == 0 ? mListenerFlagAllUnwatched : mListenerFlagAllWatched); From 64716f9a21791d0eab0ef6d3c8679e921e615848 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 15:03:52 +0200 Subject: [PATCH 044/157] Use correct variant of collect icon. --- SeriesGuide/res/layout/seasons_fragment.xml | 2 +- .../com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java | 2 +- .../src/com/battlelancer/seriesguide/ui/SeasonsFragment.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SeriesGuide/res/layout/seasons_fragment.xml b/SeriesGuide/res/layout/seasons_fragment.xml index 25fee8f67f..8275c2266f 100644 --- a/SeriesGuide/res/layout/seasons_fragment.xml +++ b/SeriesGuide/res/layout/seasons_fragment.xml @@ -26,7 +26,7 @@ android:layout_toRightOf="@+id/dividerSeasons1" android:background="?custom_list_selector" android:padding="@dimen/default_padding" - android:src="@drawable/ic_action_collect" /> + android:src="?attr/drawableCollect" /> Date: Sat, 31 Aug 2013 15:22:42 +0200 Subject: [PATCH 045/157] Use less intrusive watched icon. --- SeriesGuide/res/drawable-hdpi/ic_ticked.png | Bin 1735 -> 607 bytes SeriesGuide/res/drawable-xhdpi/ic_ticked.png | Bin 2610 -> 617 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/SeriesGuide/res/drawable-hdpi/ic_ticked.png b/SeriesGuide/res/drawable-hdpi/ic_ticked.png index 114eeca63f05055ad6a0ef9ad206338995c5ed42..ae013281cf4ab55aad099125e792f43f3a84ccf7 100644 GIT binary patch delta 523 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 E0HI;j!vFvP delta 2527 zcmV<52_W|A1hN#6ZGQ=`NklIi zNH7bD7aDKTc;k)6gczf+%azg88;K?+fZ*~W@}bd0uJl493A&N2NB~JRl|=Sp6V|r7 zElf+N^Yy;xJYLK@vu|go-F6w6R`$7RGwnI^{Ql=T=RD^;M}Jh653-qFJJ4&pB0#Sl z=(SxDpw|xc+O7!DYX^F5L9ZR?rU@d=-{(M*pRGhkxj5qjsg>) zv!IfEoEAd%dnVW%^*h1Lg1p3x%~Lf6yi{;fCG=DD`5LEv5&Un#3l~J#*8(K)a%W@2 zZGq{aNF~hCAAcyZZTwH*DwN{_xv0oO47g{(HwDjrVkXG57FLmL2FZEqeS!~T z&_{2I^+zJlq`;#=?mdV_~=H{l!mJP51<_XX%1N?7$s6d~_JBgkBR^4e-XUua%0jJf$+;r{& zNPfA1DNq!z(>FoV=> z9kL;IpaxSG{gJ{Eflnx!H}JG#`VZEqUVr0|l%N1B#T`N`&p;n}0`I@Yk3|*pIb+X9V&HaH+28)n3_d@ ztdLc>Io&|eI{*XnB*1neG_CW<`!SE16!dBuBR}2=-oq(-0e-cc@Bmill%xEBe}il= zV#5m_ z)dKf|PIQ2OOyC7zDSnUOAvp{QFc11B3ob*w7U0W@S@r00fII}enr@Vg?PnGJ8t6em z4#WhbA!g7~>VxSJunSjijq?oDLR<-=qD7ZIvY_y= z!Ydv6xJ}{f%}59cN0t5|j|^0ieuv37wz>wqVm>P9@x1^KZGXklW>T~O7N$c-sjq?= z33whbz(f-nbefdwqn=I;`g;(k z=%8Z03Oae=3QGZ;z>|tRpTIA_-|$-sa48WWRD-CZkAEgKx3ppa5ab3AIYD0r`TT_> zr}ZCB(Wexix9Ac*f`=Wv5ZP*Bgs>pV!U%jr;Fb=p>!6v`6amD0~MMhadV!u(qBe*zXA!Eyp$>LonvvNpJt z2obS*LiHFgxJLvcMeazVz$-kX$R9jWY6*pe)E2 z6ix{GN5K?@pcoOYMY!?^BRz+Qckxazy*m`SDt~Akpn`sn;nM3gmzp~0KRw211SzG{wo&6AJz3Osb-rD(dQkYmP< zvmR8b2jFauL5V4O!MXwZ;v$6@=G| Date: Sat, 31 Aug 2013 15:22:46 +0200 Subject: [PATCH 046/157] Revert "Use less intrusive watched icon." This reverts commit 62c5d78973e46d7be8aca109c117b54beeefcefc. --- SeriesGuide/res/drawable-hdpi/ic_ticked.png | Bin 607 -> 1735 bytes SeriesGuide/res/drawable-xhdpi/ic_ticked.png | Bin 617 -> 2610 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/SeriesGuide/res/drawable-hdpi/ic_ticked.png b/SeriesGuide/res/drawable-hdpi/ic_ticked.png index ae013281cf4ab55aad099125e792f43f3a84ccf7..114eeca63f05055ad6a0ef9ad206338995c5ed42 100644 GIT binary patch delta 1660 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 E0HI;j!vFvP From d6a81baa0025e3f0470d11bdff4e78a8281ea3b8 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 16:07:05 +0200 Subject: [PATCH 047/157] Updated xhdpi icons, new shows menu icon. --- .../res/drawable-xhdpi/ic_action_add.png | Bin 1221 -> 318 bytes .../drawable-xhdpi/ic_action_add_inverse.png | Bin 1225 -> 327 bytes .../res/drawable-xhdpi/ic_action_bargraph.png | Bin 193 -> 326 bytes .../res/drawable-xhdpi/ic_action_calendar.png | Bin 1680 -> 383 bytes .../ic_action_calendar_inverse.png | Bin 1677 -> 392 bytes .../res/drawable-xhdpi/ic_action_cancel.png | Bin 359 -> 684 bytes .../ic_action_cancel_inverse.png | Bin 359 -> 709 bytes .../res/drawable-xhdpi/ic_action_checkin.png | Bin 240 -> 372 bytes .../ic_action_checkin_inverse.png | Bin 240 -> 387 bytes .../res/drawable-xhdpi/ic_action_help.png | Bin 1027 -> 1348 bytes .../res/drawable-xhdpi/ic_action_list.png | Bin 1446 -> 367 bytes .../res/drawable-xhdpi/ic_action_menu.png | Bin 183 -> 0 bytes .../res/drawable-xhdpi/ic_action_movie.png | Bin 243 -> 385 bytes .../res/drawable-xhdpi/ic_action_search.png | Bin 2127 -> 1090 bytes .../res/drawable-xhdpi/ic_action_settings.png | Bin 1641 -> 487 bytes .../res/drawable-xhdpi/ic_action_share.png | Bin 1780 -> 1042 bytes .../res/drawable-xhdpi/ic_action_sort.png | Bin 1247 -> 320 bytes .../res/drawable-xhdpi/ic_action_tv.png | Bin 0 -> 595 bytes .../res/drawable-xhdpi/ic_action_upcoming.png | Bin 2284 -> 1217 bytes .../seriesguide/ui/SlidingMenuFragment.java | 2 +- 20 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 SeriesGuide/res/drawable-xhdpi/ic_action_menu.png create mode 100644 SeriesGuide/res/drawable-xhdpi/ic_action_tv.png diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_add.png b/SeriesGuide/res/drawable-xhdpi/ic_action_add.png index 23b9a1c1857791d618ce961f019585acf47ed1c5..b1badb1fe4472cac23d5c27dee5a3627ef42ae92 100644 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4#y?{3^cv{k5;<$S2_dBvGyftR}1oO=c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=Yp{a|7i;J77lYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaT(7GEPQ9SSkXrz>*(J3ovn(~mttdZN0qkk3Ox$j9 z!D${;ZwgMgxVYlfs}FRHJ}7FDq8cUyOg|tdJmCU4@T8xb2Tbopz=Z9QHRk~X1Eaa8 zi(^Q|tv9!Qxegf!v_0$$aeO>+Pjj{Ty#t#&%nKghv#wC7|G@s3W%Gt0l?z)0Kk?Oc zi)nuKlsdgd>iL{0F`)bj1}}DNopmzix@~^e@3RJL!XnFzoEvtTX|sy^CY}h?tI7Py zaKcE4S#u9eJu>}kRr-^C=T>+9>B)~>oeO=2&+p+?Fi3E>pdO#jmsf{h^)Sw@nwUb}i8V z%C7wR$ZLlyN)pD*a+Cf|4880>&wa#)f(I4n0Oe1ucaK-UG2dP67+QSb6Mw<&;$U2b(L5E diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_add_inverse.png b/SeriesGuide/res/drawable-xhdpi/ic_action_add_inverse.png index 9b48a63dad67fc8cba5cb57abe12f5ce97dc9e01..122ad5d9a07e680c9f7636397ac63b585547c850 100644 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4ZGQ)# z_OzdTKc<&8nJ)wy6U?ByKoe6h?``%wt#8#A;84N8aJocs`n&^ofc|0dboFyt=akR{ E07a&7EC2ui literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=mfr*iesfDqrlYxt&p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLazx}jh^+-@<% zX&zK>3U0R;;nb@Sbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3b?R9%*DFXwewWo_? zNX4x;x1+h597K+N+}NV`x{&oEUzVlqt~pT-0)g+>E$2?XENNh%Aywd~eCB_1^Rwoc z`FjdCor%g0@&jd0FsShj6p^|=+xzUSm8WB~?)x+^TeWJww2-p%%B5Gf{H&Q|mBsL* z$7M~-9l;y3`X@Dd0`n>+_-oLM-}BfpSg&k8 zbZ+|E!}s3)@p`qYK=2Ju!2ey7*mm(+wM1*3XKdb=!|mUM=?sUW&Y$ZxWJm9>YBDor txSkv{`}_5$uO*}p$*VyXE8MkVm0&RGjTPG4(K#0+=;`X`vd$@?2>_7}l579~ diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_bargraph.png b/SeriesGuide/res/drawable-xhdpi/ic_action_bargraph.png index c3ff04147f69506d7938cc4f428b75e5a621cc98..e8c03b553ef4943b3db83b8c0ab80e2362947857 100644 GIT binary patch delta 253 zcmX@ec#LU+gd_(W0|UdV%))y>ilx}eGlT;OYB*9lCK}k*ANF){45^s&_Vz>0Lk1!Y ziQ0Wn{t530wrUdNng8kCKe1VlD_WLZNM2hy`%El%2G;^s6V?k%vzRg%eHphjEMtgr z2xib-pxGdH!NzRg@2}5(7C*ivZ(PTOrZDZfXMuRUZDQa22B6lnS8X5Y=T(GD*fU0A zG41En_l$4)3{ea@`-8!K{~4a;NEV7XK-}|~d5)MpSL3yfCtH9XWbkzLb6Mw<&;$UO CPF)WG delta 119 zcmX@cbdYg^gajiq0|Uc^<&WnADdu7)&kzm{j@u9YA51i~4PguL332@o2B9@ybAT$C zN`m}?8O}U$bY2YP$$PpuhG?8mPLL>R_{q;J`A7bP@e}#WQv>h&`yK2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4($##NU!jfrojs6!w o5PQe(nRo6ZDS~@oqWA~46;d)s@AH@P1H*yA)78&qol`;+0NR6$SO5S3 literal 1680 zcmaJ?ZBP?e6pevVz^@Rr_)+V+0jX88yMX{%6AUCla7>I4mDVz_Bnzal*)>_nimg&~ zEXrsV6;WG+sVx>Qpn#vPMzkPm)o~CJY7rE*AOtHiMFqM+(EcdhnSJ-YH|Lyt?|Wxw zw`etsC%VmW<8U|=Bf^!DY?M1*m$B?vY+UmP8>Z8$XgZ2apsko0=Y$x@cpQizutYo( z#|&%N)Z$VO$H~j6i>9O1OHn;Z2r&mn$Pg6E=5VBo7z)!T<1`SDCmKyM(0=wj2pA1A zaFtjMt0@JZWDHL?<5B4vojyHTFEN0Nf&nRmvH}E7V*o>>m@FtG1BY}`cJA1QKwt<$ zC(FP$MMbN%fPysRfLI9o>frzc2=Eso{;L(=4i4Y=@NFZ1QiA26E!q>9aL}QGv$s!n0P~sN7 z*+|hw(gZjZv3N3-mVs=gZ(1Ozx3VV7@G-Fm1~C`~Awt;E(g;wk{(mSzyhU5+Nc>&B z|0!(It)*}%61R}4W<7gx2?9qd3RReKj3&)Gl1v#nMQsvEla?fs0u)hVAp)o|z0u^@ z8Dgl_XoSf^V1mCLjvJ$;-?+rQ=6#VvP&*OnxN%{P}3u6i;v*`l*qrUs*);>_-k;VKzq5NMC3rC(&h(gJbL~qj^qX_* zwM*UPzFob}qVs#|ZZvf4-JO9vZ@0RTvg{2lK^L_BJ7VTaZChG3-Dp77s^*|W-qy_A z7UG6iSTuEK3-@%<`pf2uHlKM;uDh!4pLl%xu(w+Ux9H(i>`V8!=GxM!)n!CJQrcVv z*347Iw8N*yKg+2Ka6P%gZT^@gHl4R3_<*$zD{N2m*puyJL#vN0DDMD2IqLn9=Q11D zE9Kb6t4wb3r_wP3AH}shJ9CB@y*wQft;cLkqfsN>KS32V$Xnzx7Z@#_=H8kFU!mr+!Vf^ZNe0rhV+% zQfZi_eXrL{J8mXge62|@WA!t} j?s?2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4h~eZfWsD~8@Z4aUD(HJ3hro^Sb_{qH)lPrMVv3%>l3UK9FB{H3KDh-+ZO z8fCh8*?|`yOPCkMOIR*noLoN$E83IS3oEhUr_ywTLO{Cv>}Js3Pgy7SR%>bf2M; x@vwWs^!KgnCgeBlX;^pu$v;7ejp(iy7uuSmD1L!y6EM^mJYD@<);T3K0RYMGjp6_R literal 1677 zcmaJAyRicz*v>OEMkJ4}EyWV-9=e?dy(NRms zkM$l402r@|P{y#g+_^`)vF9;jbqjlWG2sbJES1QeNl93LZolq`Y{M8c`d= z@H8SK*M!IBMrri9>3Xq&Ckufj7K|kzaYhSS$PCJiS){xHUW|P^%`gudaADG=ymv_@ zsH34U+Jr+QJ`$iu0#PVX$VY{USSVfy2@n*4Q2~qu1)vBf3c?T+8eBX!n#quY#VD5y z#$ta`UK+y~F&NIy&gN$?;?t&77!`}fFd~2jf&kVdz??%dT1xDzpi`EFEe8gGOkfU1t|E?rC>}_UZ@b~%tC$U+R zW5nSY+)QVh^z7hL<~Tzcu`m;^WoVOzrZa}R7@bBlv^kA7LSeBYJ_@O|dV+FV1`ujB zrlQP@meS)YrIg2V@Cm|z2}R=Ypzy#jQ7EEB(Qs5OM8)C4&@jak5gH^6MTf9TTAxYc z6f=Z1yvHg>#5%=58rjH7+(cyIh9xGNga(Snh>>$qjL0{LHH@4~=!jUDO$K(3_FtnO zGO_w`K8J@-itgt%@_qYS#@>Zo(Xe`a`g%xyzd~$W|Syh^1BA09Se~~Wt zn8^LhuPsTg$(Vxca09;H%hi8T*+$NKxtHfL&87qW-0#CYiHJutJFhN&!8E1re{N2? zw&qs+rv8rhuIk6#E#jzy<)3_&;n$d72t0v{9E=7W2u!`Z`$k~XNZY4Tz zM3e4^doCv-eLJ@4ZJ=&$sg#rVo4Du8={y7g$@l!-SMGv> zuX}w_wKFLbluXHwFUTv8J+s+-%RV>DlW9n7S=eKbe6S_8xwpoVv#iqBvI8?letlRm zX~w?WXHO>9=@-~WS%Ll3bnIZcAh{MvX>3iMV4wN~TQTWd$LoErHHUhC=ceiNim!io zA@R_DDY%FgZGU<^-LcHGErg4m-w<(4djDvBtxu)@!tJrAskc%6u!5Gy3Qk&Q zA3RN6@wYsTJ^f&65z_sC5PIANjpvHCa?u|Vjt2>^7XBCsuFUjCc`B}-k6V9wGYUI?vlsv|utF=Dz z+gNc~lFkZ}T`S*2-n=>Q*iXyb;&j#pNpN6XscVz>7E(Ob>ieo2|K;+kj`gcn6h3VF z;Ul}PY}?N1I@_JNR#+nXroO#t0}3)89qE)_c@)^U&z|+vI`6IbPT_puY8_OfbyWEu aE*_x%^A9#2=*;5*cB#UnlqW)y^Zx-0G=Vz+ diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_cancel.png b/SeriesGuide/res/drawable-xhdpi/ic_action_cancel.png index fa97bdaf9205c444f620b9d610fac090a8affba1..bb349a0d3b29d7154b637e12fd8c453f4a4aedb1 100644 GIT binary patch delta 615 zcmV-t0+{{h0;~m)7#Ro#00020X>r~F000DYLP=Bz2nYy#2xN$nFg$+(DM>^@RCt{2 zn!QZ}K@dit5hYk;m(s{ZR|z!`AtGvUBX;BlD1p?O7c@sk5o_X*N;7t|a9l)C^z&n69Re*N@Z>j+A0Nzvq-T}O+0t(bBSfCktBPuzCWJJ4kxk$Jkf)gjWupOzVC1I%f#5QJHja0x9cmu8@HA_pFYW^Ct93_Qw&H)E( zBrIwEAT6GI8Pt}b+B_qL*PSV?jvm^Pn6l}0MT zy!jMJgS8S|ng@8)C>lwDhZ;)~nD`%1ZXRG`@NRJK=rZx0YV)AG0}^vPVF;7vrvj8_ z>YVT!v*y8eB(_9?Y4cELf~EqdPKF7~$F0Sf z2_*z*4Kqw6b9J8E674Q8gG9{+M4YwaBh~7ibXV7xn_Oc@%u^5a0YwAqU zJAgM;fOi0IssQf*-c$kJ0lcXKyaRYs1$YPW<{S3yLukBl7PeFgNcSV^$el`J|V9Ev4M1t#*085 z>?J{d!3?s_p4(2HDJ=hc4k)zI)5S5w}wr z$P(|BaP7ON^zYIFhHpnAjBj!pvKnLwEqG$$@KW-C>!Ugm;UYAR-pLRC> VX{Ai{C7|mWJYD@<);T3K0RUiue1rf1 diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_cancel_inverse.png b/SeriesGuide/res/drawable-xhdpi/ic_action_cancel_inverse.png index 6611eb01f8a9537d942cc59424bf7ef3a5d34a57..c091f9f08b62dc8dc1fd724780ec048bda81e0d2 100644 GIT binary patch delta 640 zcmaFPbd+_1gd_(W0|UdV%))y>ilx}eGlT;OYB*9lCK}k(GdX#>IEGZrc{|Iui^))+ zHNIud(O&KM0uv6z9PbtXpfK;?YmT!H_YY2$E|i^dCh5|JFFz))Te6BxEkB+6<##*9 zWpUd(4IkNOFU)m_=55%M%VW@4e%(^hhRgnvQROUMp@wy@?HK1I^~7I(Z=tY< zYrf5#Ny~34y=RQQK39=J(fH5IU3C}tGnliy`{2-8%plIvS^vRd>Ewi5j-ZE)UG5K~ z1XK<)Pfc$O;<)sXu`RKK%Td|pfC=xp)&-(+3_Q;lZ=93xar7@jEoEi zZWsU2_iSZvky;pDeJEtoL&k$%I_ym)6$?t6iWrK%F`i7zoWRjwIeUQ#OBuuae{4&= zrlu#cPN)?Kp% z0$3g1R>lcA88WOha^`XpWO%3M&cr0y5Yl^;w~<9*uYh7$a;lTU-X)Gq0!}*^cKEL^ zKKD8QS4;ILlV}x&+WYa&9LFUd=k8DoOtWbcNZ!*b&<7OM%oZzcidh_Mi z{eBxun}CHPz5-@fo_`Lhe7{|>#oM#OVTI_w(^+#D;Eq~ge1GM=`OA#c%+qQHFpV*I My85}Sb4q9e0Ihup?f?J) delta 287 zcmX@g`kZNkgaivS0|P^Zd(K-R#a!&<8N$KAar>eFgNcSV^$el`J|V9E|Nqz1(=$c_ zCMG6TUFlbVI@n8s{DK+8jLbWx&&*?vRRs!d^mK6y@i_i=%4yyf10L3&CJh3t8)OR> zGVons=-?9j9)Bo{)2VDq#W{~3&(gCeS#0ZmwDoyp_FaD&{pXImzg~0UoV(_hY-$%n zca02J;QLQoJF>)kC0zUNDgC>&fZ^Mb2;-ZahO7ozLJOXlIJ}fRAbW!GorhRK>!$|p zhYU=I7+G4_Ed=Eh6l@sOF9=q6R;h_~dG*eBz2D30tlRGEo!j5+ytw^v_v3!R djo0N8?5CZLe_AP1eF^A#22WQ%mvv4FO#p*VYxw{G diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_checkin.png b/SeriesGuide/res/drawable-xhdpi/ic_action_checkin.png index 6066f10fc585c42557627b472c057a4437b5619d..f8f183fb4c50126dfc88df4a54683b2984dfa98d 100644 GIT binary patch delta 300 zcmeys_=RbLgd_(W0|UdV%))y>ilx}eGlT;OYB*9lCK}k*fAn;545^s&cD5nkAqRmY zY8~nyqwXD<@8sMpa_DJG(w1!R5Rr;C+?=eZcddJQrd4c#A%m_%GDB3uF@`M+y^I-* zQp^{aOxPB%X7D(0Ux+EcS3M`Kknj8T*S&h`3B@&+ln)&L==qmn_v6X8829!0zhaY+ zntz4Iz{YN+_=5{Smehwe9DY36igDR7^{q@k8^3GpIhy;enax3N@9H@XnII!&{_?H( zCVW%)g53f8yKL@1U#8yp$0E@nw&0_g2loXK1KCBszZtsgXJquDI}E1ovfTmUT`$Eu VQ`CAk0)vBr!_(EzWt~$(695&=cTE5Q delta 167 zcmeyu^nr1Lgai{a0|Uc#_L;swin-XyGlYYKp25_LR|mDK%dvse;`FA zL4LsuX=kFD+fsmBFHaZ85R22v2@TF;VD-+?EkoZ`#Zv6#8NvYsH5@4&6Af(Y85ulX978JRyq$fT_mF`I zi+RVi7-7>u_L9V_1C>xpz*G?@XVJ5TDQ9^3-Q8+!rhubR8ZuY+>kSzQAO{ z=YS^ge5tvY=Joiln%UQG)y{i<`}1o}zXO*lG#wkZehm7+5dC=R0mg4V)0^0CSjTbI zOFTGHp&8Mz`0-K)Mz>?$j!Zp$)0g$z**$AF@{=hgvLV}5zfq~&V`%GUT#a!&<8N$KAar>eFgNcSV^$eT=J|V9E|Nl2KGBPnS z;lDG_5~Qjm$S;_|ccxjvf&}Y|hHO!xh$cM)#@GXlz6q+kB)u=N zsx9EQSirf)rTn;1Nh9YACSHL?(SpKHtOh))Ivbe8%0xIOB)(M;l(@*iu;=r+mnW1S S{s5ZF;OXke>axx$p$P!wJ2lz> diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_help.png b/SeriesGuide/res/drawable-xhdpi/ic_action_help.png index 31b9b15856dd534e587ad810467282c82009a611..d2fa20c56800f818d9aea0af5647e7b5481814b7 100644 GIT binary patch delta 1283 zcmV+e1^oJh2*e7I85jlt0063Kaozv`00eVFNmK|32nc)#WQdV4JbwhiNklf3NQfI_K!~737rBU{f)@Rg3JO|OWD6^85fw>@v@ock z7S%#Ys*NDIsY&{?(iqJ}iQ_~`nGQJ9;yt%{&vEX(=RNn1XJGCZ4s*`A=Y7s|e)Il$ zp68r_si`URnMU0X)PGH1fVv&1o4x>bJ5V=$0qS<3Zu$b$?LggJSL3}GVp+C-9+&HI z;#vu?6vNrJN_g-kg=;PdLY&6YZ2NPz9UGX%T%dt%*oyVihub86z#$yWj(g5*2{4SO zv8G4%MzL4u6+NZb0<6F**wEtlix|OKj0;_!FeHYsGHbiIMSuGd?8Lbq`P)+g*5M7| zL1Hf9Fpl6`Omwib02{FxcVkiE_i;RjpStokqgMiK!ApYkO(uo$yANX(?Jma-VIGO+ zkO{nsFDlyopI!*C1-lC8PT@tI?ACb3TI|N^!ugkVDMGgbtiyi!|NJq$fPcC%JOhK+ zgH6%72|TWg;eXJL04wl;{Fwg?ubZVMOBe>vV|#RN91p2DF?J)se)-w{7@pDj;fHW9 zZpKZ*I3L3q{EAQUdzM$yZn>75YWP{t} zBfLX8Km0vre)vD|6^`Rd;kP@5IG`0LvwJsLllhiJ6#=$J`S2zic|rX3W-gV!#W2!4PnBI*@N%pyX#53S-9>-T;Im_Smr~M z^_h>QNq-e!xX|WEi8ezxfuE!8#}?OqS2!MUb?{Rp_MwsaSen#&Ky3V?5ZiZROjsex zFo3D-Z>JQgkBrWm(IsW*|j?h4N*r@st~tV1F2Q6wVze**5lNiQsD~QUoX}dw#~N zs&NZmllSMi@|j-Im(smpE|kSr2(f)!1v(*ww#DG6=cEWwS>-m|fOiEEnw-H?_&dQ) z<=&Yhz-6Iy-K1FhN@X$LkzeP};YsBtzL?mT3liQjqz-{t*_DZHi`*e^R0VRSF{S;kIo5l920HEqiy%a(r&O z!gO3ntxHoS4v32oi-fv;UF?uAuN`W2VSg*C2yjroyKWWAQ>hFUw$urAt$YDwR6-Wm zq>2EO!i&n-#%`fdS(XL(vaoGx+ak|kcF)-Vy(*OBtA@fy~e<(%-AHZF>67ZRJ4;ZT;r%ywL0onXj( zsQkLT|8lhddc6OEME?_+UfGJ7w;xHx%h9^EG-c+j*$WmfUbb@8>UA48ZP~VS*Sbsxc?G}*E`5>RLI_mDP==*n{9VlXu$-ZzW_WJHCM$AGS zXTmaN|2ub!Mzrs|tNr-GQQ0!u&c_0K=re`;K? zUw`xOzYHJxi+(WQ*m{-UR9eB<=`Oq5?N$D_l@FXhvB-$s&s0CmiuKvcsWQxqZ`}X! zq4e3AeRE`71l*Of7@~d(;?WmhCtYy`&CE2j_dJ6Xo z_hZ%!b@OMMGvtfs$Y*3S&v3+J>dLFtqXBW=kI8!)Zcd7p|qD_YW9QU$`h3v zj9O)-ciizd_$3nJTJuA8hn+{zFQrxUKH3(1j#(5mFHmub@q@`nmT-DbD(a9d&@s#m znl?-G$o7*dpL~)o&GO7kHx0TSDW{ROgkPj`38!L9qJ-O~b&|@ya;uy=j1Ig$l6692 z)#>C~ONVa}@o_pu4L04WnOi*>i`H&?bb9NLD*d_y5&Oa}`N;BuXQK8d?;l;co6ua} aX@B&~w)B}g*{;BJ$l&Sf=d#Wzp$P!jHbq1L diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_list.png b/SeriesGuide/res/drawable-xhdpi/ic_action_list.png index 95708234a40b97eff42dc08540e2f86637278758..be258b408133fb1cdda1fa5403c1062cfbeac2c3 100644 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4bae^SMy70|IGc{;8#;tH8*i`S;NkxxDf6t-FTHFF zLof3MCKEmf?h6(Sx(<&S&;%~mHPn9G8#^g^(#NkhsykIHYn)$A=Q^(O+pZ;9s z`u6A5p{q_T{1o(6-9XPK+V<`HhF1)i4{g30yqEb_eADcOe`OQcZ!ns^X;=%Q%N+9G zFjy~WlieT+qz~}D=#~AzE*tP`pZ-z41*{oRF+xsK7cK}6UBtAu7wB&WPgg&ebxsLQ E02<c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=orIE9-iL0ZjlYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLa!4}y`aR9TL84#CABECEH%ZgC_h&L>}jh^Y;Lh| zG_^E0bHQmIRBsA4w?Oo|;?%1Tbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bowaoB zA_fK~2~QWtkcwMxX4!f(I|{UYFA{eS2oMOlaL7+!qlmP<*2l%yj>RvqKMccJ%tyKf3HCou3dFd8th z9bk}PVE#}a-TrJr*~#}49Q!YsTU$}Jw=PUmH)4wGfySOo-c z;Q;PiZDP#Nr{32(w_{u4iO-Bj*935Ek=!-a(U;*BQ*6TZS+k@TzWd@X`oNLn0Na+A zOfjchKQS~F@ZaU+bGDwv5FixO=oa&_T_<;)nXK<+g`0Y-UoZ>)*L}IltI1wmB35*T z#coNVosx^D&u>w4Drs)6GA=ogmC40;a`wWIU_OnXY@ASoz~0zpY$TtCNcySpq9-ISm-ZOIJ?zGK}>F7Mu*8u6{1- HoD!M<*h&8R diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_menu.png b/SeriesGuide/res/drawable-xhdpi/ic_action_menu.png deleted file mode 100644 index 9e4bf517ec4b974399a30a08c418f8ef2794537b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF&8^|hH!9j+9gP2NC6eG1^9%x z{s)85ny)!P5vGzLzhH(lPaK^W19_sJE{-7@=aUm8N*>q?OgJa8wZwseVe1F?okwyXwJYD@<);T3K0RZjuIN|^R diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_movie.png b/SeriesGuide/res/drawable-xhdpi/ic_action_movie.png index 166a31be787a75758c555259a321832a6c2a4835..10ec8bb3b4f1b8c39ff00ee767f58a9013547510 100644 GIT binary patch delta 313 zcmey&*vLFVLXv}xfq`LFX5l>`#Zv6#8NvYsH5@4&6Af(Z|9QGNhE&XXJL4edVFLk{ z^NOr0dzZ|ZG9&4dR{`g_)AkP|#G|>l8~ZEnNS&}{L1yH%f@h2P7O*kCV#pF$fX;Zs z8e{!!pTBn@U%&0_H~tNK8|G(T*LV|^vfq@~yJ?AZuVlH;_4B_D5xc$)o!9+vbdeH!%5ZC|MK)OfcMW6=u zk|4ie24R(5yHB0@lOp>QC}ivD;uzv_JUKyv)tP5WBI}jV1sWPJ+LSnj9KsY197t$e z#Gv93%X;qEu|y3n2d2gMWWGLIVeZ~w?tX9r1B2vLkw1#3_d5X%V(?^l^>bP0l+XkK DvJpoa diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_search.png b/SeriesGuide/res/drawable-xhdpi/ic_action_search.png index 3549f84dd8f5e38665849b46e252bc34f29be027..92408a07157d8a852cec143de059a3965a2fc264 100644 GIT binary patch delta 1069 zcmV+|1k(G@5W)zMB!2{RLP=Bz2nYy#2xN!=000SaNLh0L01ejw01ejxLMWSf0000P zbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$Tzez+vRCt{2+QEz5R2;zZ z&#ElN%I;}9X#EowDim5MmIXal1bg$~!IKm{l%k+L^iV_vrGNBLt)d6Pvn>`19`w*E zg%yejMe)!c#HwvCZlOh1JL};kY$n}V^OBcM2ImV4$;`{|{oZ$z_mW>`W^HZF|CtB6 zPM~Y10=iD1Yo-FaPM~Y10=iD1Yo-FaPM~WZY9ZzhEMYGOSin41a0@rEj0?EgLjO_B zB)k>gjYHUlnSToH*YE>Q<8rDbVo4!jCtkyo4PtzYcX7RGGO;ujum|s8uJrj`T*4LM zv|kY}g9R*NA093pa~rSYyCw<6(nP>>c*E#KdIu+Q9;=%iJBtH2jO~Tbhj<%j>n0UT zT>*P=%IM&iaa@?>sxrVaVZzKA;uTwTCe#tI6Q5Z>?SKEm37lz=$3Yyywru}4Ua$po zLY@17SB+ltO$RSK{zPGaF6*atVg>BR{=)vU=7Y~Ulf}!~pY_)&u>uYiw(khnd`gaI zaX0F(6=DSJ5N>jEPKulGs&FHVo3ktHw>4q}ELp$9yDKbpZE!w|FY9lqrG5}6ptw|B zviUmSgn!j6{zm;KCq}@auze+UA|;CP2V+|$AV$DKVf$9`1cVj;4;1`?C%wd87Vku^tSh`mjCWN&k2LPn*CkF&&JpNw@gAC0#flZUfksS zBog}k1Bs{qW+;i^nY2v2l%~0yG9cFEZ`5kq-6jb)HDkh-o n1iEG_pz8#>W-6fT1iI#5NATfByL&E300000NkvXXu0mjfa6tD< literal 2127 zcmaJ?3p8749=`}>v|V&cXT7fIiVk^PBSY|2Yr&=v7ow6Rs?3P)tYO9UbY&YptXLrxq`<;8g@B5$M@ArS6bB_lH z?%ndy?>_cC6SB(G6&(~SQ-pY&KIiL0O0N^7qU1>umoho2|NJ>z0}@`26fXS$!Y;UEMb9iezHJJmQ&F0bjj+o#*9aU z?;w&S3i{WeA{oJ;HzI;TB94IN5L_V8#Tf@V6G+Y^N6?7?5%7=`p5Tgw2xOuwnE-+B zAGF$=h#OB1rTM=1rM^+ni4uvBjK|AlGMwx)93o1;nrZR=!^>O;c6UJUq#;$DF zaAB#T;l97>E*sSPM#W}D*%&vC9?NAupxYHKzlA!#x5!R$$}KEz`?K}h?B51n479y{ zQ?w+-T-{f_$ZXze2L9K&)Yu$QW7O|sondWutk)Q_JN)t9M!T--)21nHt$r5=vLfUe z#a~sbymPXRm$zn0t^*N@y}d^w!HQdfF;iuh84+$H+Z4+ka__aF6WZ>MRwfDAoU*_4 zKAt=6rl=k>E5ha}R?E)6T2N6Nf^OP-%$aH>Bc8h!4HjG5*0h$}RLuF0wJIdU zjbsxQA=8r?J*La4uKG`NBKyje7GpNe$A4*b?~}^!@0p@BU-D}9Y0|DSGj9_&&vy2n zQeDat7d%QfdZnZfB$RpBz3j0+qI>gE4|*|g|5_uvwMYuieyxZbW3|Ym*9t0tEK}11 zgB`JFNiGkc^uC#|FE~5P={}HhaMbF44G_^7>)*O~(scZ=-NEp+E*C;j>-o*bCxDi3 zXOy%zwU#lt!zkoitfTlMMv&ukM11wB<9Ly8m4A7rd4=8VmEuTqCE#F>RMNjFx!hDS z*^3*Aj}bPwVf3_cag!0d1gTf#oDN&Pd_dVdv;*a))ZL!>%mq7^3xp5xV>fH7@?30Q zVZ_0I3ioUK1=0^Dmsa~f=zf0w_-@SpBesVoWKv#w7qz2*hgn81*v0aQExoe8xC}Ud zTF)@Kr5w^Hd|ny~nn#~01FEkQYo=Zk?|RW2wR1u*{x~g|l2$HI8$O*Sc9iaR|5^LT z7z@^tH7CEpE{iyR=lRT`f)Gq&W#>w?$%+474im${sA7G49aR&=5h)*xuKt( zs=lY~A0X2EGC2yz*(%&NQ`6m4sFRdnpWY(BuzLy9{bqK?^RhtY*?v?Rb8IX~Z+jfI z;;~&!>dGdE5QDf>2lR{f*G!oe^^i@6bj6^de z|760+^ec-hFSDPm&usrXosE~R+77^4Qp$9A=Gi&x>XqsJg^B&;MqPy~i!R@{7aI(* zPp*h%eOKpxS5Nuohv%4z8e7tNq)^&ziI^HKVDgG4t07*+q|$&B9LYtwE& zuX8zyz5BF4SJBd78KhXt*r~-u9TxnaihZE<@~dg zf?Taq%d**36IX-_-{`-ie?JGKIv|#fpz>=msy(frIe0zoOg8uRrTKhIv%w?7`7Tcyl|isZ*ecw#u<}mcLbp((0&jng0SYa%AcN diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_settings.png b/SeriesGuide/res/drawable-xhdpi/ic_action_settings.png index 09b01483454788c435acf715c57d92fc0ead0a7c..a32ac199701413bb5358a64cadc3d8f981230f86 100644 GIT binary patch delta 461 zcmaFK^PG8tN` z(QLuHp#LV7$gzUs9mm)A>Q?L5zg(!^i`C{iohf-PIeIF#YhGU$p^$8K(Z4%lnyQ#g+Ft zGnhhNm7Do6YJIhqKA+DhdWbvW3-gVy*0bNRmk7o+xY{2GtycsYdL(@%s&b%;Cp8W6 zMRp4e)DCTKn8SZTVGocL(EC>2;wC=fGvgYaHZQIXehZrC@N0k^lK>RUar(|2@}Y($ o1mwzy$xLg6H>j~js3)A2^{ES5ZfDjN1B@32Pgg&ebxsLQ0JzA$dH?_b literal 1641 zcmaJ>c~BE~6yA_XI1DNx4tQ;2tWqJn8xu$(;Yb1`lrR)Bl4(0iNS3f-vN2hb;JJmd z#e)&FR;g4iRmP*XT4ijNk*%drb?kVQ0WT1(fI@*<)JP3>gMj^`bZ2&dzxU>S-@Crq z%^B$_oPh8E001~@l`@k)6TGjVFa14=t!|@_Fd|7uWZ`*)Q*T3oL?fPyf@-tggl3|8 zW6|o1Xe0?b8Cm_^3zKUdEMF{6x| zEz-ams{+l(RBLQ#)|zy!VNHQSV&ulhfw3+rO<+a|J?Jv8ve>0A8Fz$NO5eS1hzpK{ z5Ct;s>!Ng;3{ZjFP*B8&qYQ8~0!9n@h!Bdq!mror(2L8P?@eWuDr~5pz-?L_Uo|$xjC`EH?fJMBRAhAcr8SdB$O)>lSN33P>zgY zmAIkMj9Q2>tnm#NnGow0gV{=FR-!h{ff|!-xEUO2T8d3r3z9S;-ze5NVJ%4Vgjk3! z2J)`lzL5DxWNsL*#xGc<^7H2{+TnJ{ zn9h!qy-js@D_1+Zf@Zt^eugYr>*#8enEC_ni$mkiWVqV)0B@821LruRoDEr&aLy~1 zyB?9b0<;9u46|NoT=ivDSMdve5Or{-s#V3xd64*MQMnUK9!80p9AxYmyS4}rq+OUQAhE&h4 zX#*VHi8_`8yD#tP{AE3r`(r=4ac`lYnAd8VzlGIsx=|A7RwcALd@gl5dIb#qmGh8l z$g$+t!ibEOn>A-WTZufCRb5xU8oK3xBjZy@C zo2@M_tN7_Gr{Z*dd9?EAP++6K3Oatcap%qMA@XqNvfVvQRtvlJPf$0xd61cQr@5@E zcE3fvo~l~3QL?gO3Vf)29uObmUp{kK9@4@N8Db~`N_ab3gp7;2lFo;9FCw01CsUyV zcb)``rtBy^9uMtCmWjxBgBF|^IYf(S*waUKtOwR#oHr;ekxyEF67ncuy0=A5~2pwsF2 zKQoxyf!wqLEL)Sdi6Jb|f1d&@>@El{6Kyw2KL;WQ@Sy6n z7v9GWBKH$%+=4&)X9P8DYa+p(^zZECi?`+7G!@NtUq5(JoI z1b2%^y)F~tQ1!RE150`@FoFAVyM^n&7e;VtiqVn;m}6WliTyRljineXQ2-(c9;rFz z%oIbV3IJc!?4R^%tYiU>;in$^&WNQ`n{|=}_*?Apy|548q!=k#0C>;R|Nr?&oK7cE zQXX(JE)#{+X8+!_6L?9SOC+;e1ejx;NQqDQ?=rj=t4)B$DLn=(JFNh@9mq{9KyC+e q(+ZH=f!wqLq1bi+ literal 1780 zcmaJ?c~BE)9NmO+j!-OM6)g=xDM*ve2__~8Bmq(h#c+s%l8|g*3&}3YB0-=6K}56+ z9z{hIv#Rb$5CMW6Di5eYO&nHjma`Cxw8zhsaAXoyQ z{648jNeD@RXdx1tN~0)fo^+BYi%MtFI4sVWBnFL61L+Kq=0%~?xNI*jjZT_=$aplZ zQpJ@D{ikE$D?T|M!%!{=rlh1$QH8AY=&Y1zcw`}@g*QP;e=VXWO%=_B=g!4%PQ7Waa_(FNb88x?_#jN!q4eoa>ZtMo1*Z};#sKi3wFn#Z{;;1~ynuXUUII4mh zc}K(wSFJ~V&S+*{qs5+G=Enm4oLWs%C(6osqtC_%zTL9t1*5%A$a91D2OcOP?+apf zKpo@no-`fo8(DI$yYSp^y-!cXgm(R|8=r{jU*8W!{4$XNwijuMD+nb(Fz`jDU9+X^ z=G$yo#;7t~Hab5Y$PnAg=siHOdv4FCcWg$8{Skz#Stc_6LUBMwexaG^sQnVcbG4n! zeuY(cwo`6KeT{Qzn)x^y73tFK{a2`S>$S|Zfx;&TY*Pr1SHij7r}cq0m9pXGF@*)M zpMWMW9e%!C(*8|%=CSG+9HL_MJ-V45&%Vf^F z#*PJrl(D-HSu4yFO%sNKyzP4p>&((kR{HLPi8q0RSNuo*j;^{pcED`4K{#fCE-7KV z6R#SE%N&A$re<0NlVcLhtbJ~tY+uo|^TFWtMX2yeDGrV8=BL-qsqsmFOstp(p|@Ih2)-~-1pv5@G2TQ{_?cpp2PSV-pYNcmk)Q2nl;8A zpX|SPKQ|H~Vrol6+mHH%d=mk>^fm&g9#eo0mN6dt_f-Q|;m^Aw*=` z9dT|g9e*8{n_=?V?U0h%0bX58e_DkFtq4|m4uzk*p8n^EEYjKI+m^+Hlc#!#=e3Nk z$~DCmsXwm%ddrSD;mMQ!56<1Vl(nv8cirUMPev*Sd(k15;5**0Snu6=UFC5GAfmVc zSa*wJXV2}sXmQ84QtB90cAXdx?q3){h<3!b7J6*mzI}cDI>{ZjKjP3)+4t>e;eWNa-2df%z48>gJU&FD*_dZp_K|2;bwV zI7}HvnI8)d(I`oqj|9tMM-E5~`vQN>N zf!pR*IByi-G3#ye)(?VT<(saBq8hUrfbI3m7kk#ftEI9GwyRsA$Ia#9Vk_5F%S%+G n&8O9J;3M?C*E9F`AOthOrR959nu@X4_#YCBf`zC2WZC}!HVLh* diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_sort.png b/SeriesGuide/res/drawable-xhdpi/ic_action_sort.png index cb2dff32b88940a77b17fb12c7a0cd33b339c164..389fe1d718eb95ac76e39952d25e7afc5c1c1b5b 100644 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4~2IJY+5B?T+AN{)LyWFvO2gWU6wVS_c+spw<`U3fBH4XJr z&bynR@jTXF05vC*Clf3OGS}GdKy31hNs6Dj5&ADnTml;o(vQvV_)Z4?@|l;uUIKcA N!PC{xWt~$(69AbrZ`}X@ literal 1247 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=oxs!#Ho13AjlYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLaz}{y`aR9TL84#CABECEH%ZgC_h&L>}jh^oNjS- z!)YE=ZwhX=7~s^a4|I$^C~A?S8YToxKOiPN;Q~4Eq@S7xOz%a&gspp0oQHvdG0@Y+ zF{I+wn;V8fha5zXeM}LY=_s?#;i;<5%e{@sy{+O0`lJh(`5%OCSpJEtkIiw)hqq_6 zH5587?(qJX|7^9<$&~t&X`ju`ezsXzycC?xP>2I*cQwjS>3lNWHg)5t4R0TK9_;j8 z`go!eyT#^>D(y@^!jn@wcZQiwTl;jC99CsImKaFNCj~^3(qQ;?30(n)0DcJX017)z9_PNPTw29g!~9X=g8PTbaHF)CU#LDccMZ0#U$o~4Tfyo((aN7Lf3n{6 z{?yh_BDdFnI5aQn8#lwjytS8k-p<^=PG!>VjI>3}5x4%#m;Ee~AjyK_Q6Q(`*VU*7 ZMg~TaQ`)O)t!IFwJzf1=);T3K0RXY#q__Y8 diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_tv.png b/SeriesGuide/res/drawable-xhdpi/ic_action_tv.png new file mode 100644 index 0000000000000000000000000000000000000000..663abfc8c4bc76284b61f8c3558c94bc540036a3 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4$KNl2a&e@UGE<`u?U*)a}NyJqwvDXB{1;*p{j$g4sl<7wR(qO;pFF?-Ahb* zP5oZ`{F^q1pG$Uz&;HNmmV14&3T1**)vhpQ=`d_o=xX*ApL)Om&cLZ%ta-!47>ec+Y=P|SD%+Z!hCx+_(jq6gGZ z?!Nz!Awu@SkDQMT`3H8(Z;f+`V=_OGoL0lJ#zJPg{y$NR@2jt=mI&uul0GE3A;!Qy zzD7EuCD2>raq_Q zk~@rs8|L=;UoJdz{?YnVlU8y56T0mwKS6~5?xW}fr8AB67|%>9`S9|CRa~cs)Qj+o zD$^OFdg4FIDkUt=Xz~`8x&G+j!P*OI7WPX#Zr1GZ+cN)f7NejJTWWX2V& zS0WgQ5#rfp_-M~V1HBz{7y}Es3;w)(C**KAb)n#r&DJpFVdQ&MBb@0CN%V00000 literal 0 HcmV?d00001 diff --git a/SeriesGuide/res/drawable-xhdpi/ic_action_upcoming.png b/SeriesGuide/res/drawable-xhdpi/ic_action_upcoming.png index c8771db9715876f0a72616036554e9002e506373..5ceb004f02efc7c9e76f93c79aa5551dc7c935b9 100644 GIT binary patch delta 1197 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 diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java index 1d27026e2c..d57f0b70d4 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java @@ -70,7 +70,7 @@ public void onActivityCreated(Bundle savedInstanceState) { // main views mAdapter = new MenuAdapter(getActivity()); - mAdapter.add(new MenuItem(getString(R.string.shows), R.drawable.ic_action_menu, + mAdapter.add(new MenuItem(getString(R.string.shows), R.drawable.ic_action_tv, MENU_ITEM_SHOWS_ID)); mAdapter.add(new MenuItem(getString(R.string.lists), R.drawable.ic_action_list, MENU_ITEM_LISTS_ID)); From d9a7f9ff9dbe5f46d6c3fd0b416519ac5abc66d5 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 16:08:20 +0200 Subject: [PATCH 048/157] Remove old mdpi icons. --- SeriesGuide/res/drawable-mdpi/ic_action_add.png | Bin 1090 -> 0 bytes .../res/drawable-mdpi/ic_action_add_inverse.png | Bin 1099 -> 0 bytes .../res/drawable-mdpi/ic_action_bargraph.png | Bin 199 -> 0 bytes .../res/drawable-mdpi/ic_action_calendar.png | Bin 1404 -> 0 bytes .../drawable-mdpi/ic_action_calendar_inverse.png | Bin 1393 -> 0 bytes .../res/drawable-mdpi/ic_action_cancel.png | Bin 338 -> 0 bytes .../drawable-mdpi/ic_action_cancel_inverse.png | Bin 333 -> 0 bytes .../res/drawable-mdpi/ic_action_movie.png | Bin 206 -> 0 bytes .../res/drawable-mdpi/ic_action_refresh.png | Bin 3033 -> 0 bytes .../res/drawable-mdpi/ic_action_search.png | Bin 1394 -> 0 bytes SeriesGuide/res/drawable-mdpi/ic_action_send.png | Bin 1279 -> 0 bytes .../res/drawable-mdpi/ic_action_settings.png | Bin 234 -> 0 bytes .../res/drawable-mdpi/ic_action_share.png | Bin 1341 -> 0 bytes SeriesGuide/res/drawable-mdpi/ic_action_sort.png | Bin 1095 -> 0 bytes 14 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_add.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_add_inverse.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_bargraph.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_calendar.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_calendar_inverse.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_cancel.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_cancel_inverse.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_movie.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_refresh.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_search.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_send.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_settings.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_share.png delete mode 100644 SeriesGuide/res/drawable-mdpi/ic_action_sort.png diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_add.png b/SeriesGuide/res/drawable-mdpi/ic_action_add.png deleted file mode 100644 index 4d5d484b39978c1b37dec37c77c6b3d9de6ce74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1090 zcmaJ=O-K|`9G`9R1I+@-A~AYQR$%VTylq#T!A*B}c6Ff)FnCz_QqW8&^GYqz4zz;`~83ak9Vf8 zx4W*Uv4&xox>S#xraSOfbtV0~#o|x8Z6}E=>Bqw)uR4f{>Uao&l&OxOG*b2P{rfkEPKZeOOA%$<j@ z^LZ}6pTo`w4@FVrg&-dc2B=5C9k+;D2w3i}5`&Cf%`t3ZU<-JR>JT0y5tb_blY(il z(OT|mnP|cIf@<@S6TFm4j*9YsSJPbcc1aqo>-{IOn;EwepGGbob2Qqx;ay%RTZ%hK zCD_See5_Q(z8ogl&0!nF`@s zOUuihPr5ejIqj>wx@l(KH_-K|>gm9j#>cTqe|Blr0qHF4)vzWG;HqqD zqVvGwmW%!Yd3y81t{2s)w*FStmj!&PX`yEReb>^-2^BmSXTCMaTaw^j_vC%M@47G9 zT34UGGFWk8hj0G!t%i!vJw2y{53_rtJKs6J+HlLg*HgK-KC0lFQr&V^Jikcta~K>v lH-F>k;f_ny-P3+%!$xNJBes5e+wwl|Ri_fY^6l8*)Nc=SU$6iG diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_add_inverse.png b/SeriesGuide/res/drawable-mdpi/ic_action_add_inverse.png deleted file mode 100644 index 884c9d2703775305168d0e36579816ca95140fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1099 zcmaJ=O-K|`9G|svOH%r{RAfEJ4j$V1*mji}-E?5kkOdXd7X@{whzN=f8FYytf-ZqzZ_Kq0Z3A!Kdw>4F-~a3Pj(2yp zS66MSqA035)gh(H4!pIplKh=w@dw#9;zSnrqJCUZY)C~ll!G8;C<8DJ6>a#yGuT2= z%eLv6EY8ZiL=_o~;`uPHVG%S%wY0jHq7Fg~a&SO5BlNes_i3PO5qeKp=42}l^Lj_o zhP}nEj9MI21&waq30ho{5Eu|Ez%}-pj_5|{1zwSyJu^##1s6ORp?@cpmAgS4*${*o zE}(LaJZKCte25c5!gdhkc#h?REY}p^IWgQMay(f4XcEoV`o*-AT#Q9-5ju~tC9-Ux zP+$r>7-SEyydVfH7i5FM0PzSo!zNbTfa%ni7$oSZwr*h^nZRRIa%c!gXp-sg5)5mJ z)^rxzL>k7ripBB_=ap1)l;!`s8pe{hgVXR&zW*e4GQ$>R)6hXfwn_%qU+;yo#JCL= zjO+|T`%7Ky&LfPRJhDK%H_Y%rR#e^eEDH!(7E`8!6;p*NDMAwtM%Ohl%*EnKAr=b9 zIEm*Iyb$7rL?{-ICc}JFD8`qt5>kf@XyOu9`-2Ua#d=~eED~9Qwtf(5NgEkpp=ePr zpG&YT-y&8kpUaN2Se7KidZYbo)Fl(qk9S-WF1aj8ADTq(HWBvjt5qk+qqvunq8ayn zZf<_Q^>JIp(;ok7(LXgcwdTrX?b!JA*V}D#;~V6G7w4n1H@ZK%{orjpH@+g9td0_U?It4UO z>}?+%iSA>4-)Ev{Dz6`V(6a9GrJCnv#U~^seNq1$s9XDJ^Ut#%ibqa2^gVsJB`}t( w<-SmNZmoLff9*Rw4Vx1;XY()fZ+w)mlDaV06z>c?YxACWD$ylfi}fA-1s(`wsQ>@~ diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_bargraph.png b/SeriesGuide/res/drawable-mdpi/ic_action_bargraph.png deleted file mode 100644 index 1eb154c66b025d92dc02285cf9010f8a628765a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@=3*z$5DpHG+YkL80J)q69+AaB z<<~)&(Me-=1yE43#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDUi+ppAgso zFwp1q^dC@=xg^Lhm?7;=DkgMqF;us=vIXOXrcSD8(`9Z)fYr>mdKI;Vst0Q+S=n*aa+ diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_calendar.png b/SeriesGuide/res/drawable-mdpi/ic_action_calendar.png deleted file mode 100644 index afd82e9ca554b093412d596a6f7951744db8a371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1404 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)%*n*i$iUdt$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1ObbUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfX zG!Lpb1-Dy_aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zzFPb&oPmMyou`Xq zNX4x;)A#E;2Z|iOuf1rk3y*11;>M06i|Ta#F&s)TkycT0N;c@=NSY9#vyG1@hb<}7 z=@JB$hUCR9syn&CDz^focAn?FUVF zXvQXFpDN()xjgal0nh0=8dE%1o-K6z$?oz)aK?HQrrrl4Iv4WT+86ZpO*46YP2-Q8 zPlL{L^Ou*e%AL^UyQiV%^E~qGtk{Ax7t*J2JehJLM8_dkp-)Kk%}No?=dbUFKG?$M z=5&kww_306#2;q0d@ct$U#ePJXMK{{FlEx42Noyd(%V-nI+!KSdCdNS^;^dMAeWe* z*ETm?nsZvMyD+)!z?wy=h@N${#%45wgpLU%8C|o^v?z%Px&DA?6 z?cASpKHtgGH|8u+l(SHaviH~}SdjMPl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVip)Xmb^$->3d$-u?X(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1P3sUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnrq$ zG!Lpb1-DzAaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z*0?Ksm4Sirv8Rh; zNX4x;(`~&E2Z*#y{uQ{fiEq&YzITiG%7od~&DGV#3j@smH_qPgAh2<+OF>alf#!{a zt{a*b#YVHcZU}pu@OMFOjsBiS=NG1#)vDh7Hc#eFe)8$rykh$#>%QdHOhN6GY;KNN zhxEM(HgfC5;~4)w5L;sU_iVFg02BMY*)x6AW-#2)kYIi%(%BTrCBYy+>-)0Er9oYUEL!?F>my5k0FDW)<&Ga5_*scaGW-recm?FIM}$>a$M! ze0$^ZWwp<019NOnDzv7rVvC74)GM<+y@g@wapP_GE3W=*{V%X!+0}LG&z?(L3WxE^ z{atmo=fD(=ZDGE$mpAot>@ceNarV`(Ew}flFVdQ I&MBb@0Obk&82|tP diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_cancel.png b/SeriesGuide/res/drawable-mdpi/ic_action_cancel.png deleted file mode 100644 index 3ebbb284e3cc208e457165af91ac86345e2b0356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=3*z$5DpHG+YkL80J)q69+AaB z<<~)&(Me-=1yE43#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD>i0G|-o z|3rYRP~^EBEyh_uVfQcd+zR5@RCS>pT}}hXm`2OSFbns_)-kRoR1vLDpxl$=y-cikzuo2 z&37}#V{h)Z7F0LRaR^+Xa7Z<2_x6hBEs9fI-rw6B%5Za|((ZC=qX)tVE;Qw7v~7LC rceuc6*K>nC{elh>jvbOGLf9EDxLO3>neSx>bQ6Q8tDnm{r-UW|{zQ)> diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_cancel_inverse.png b/SeriesGuide/res/drawable-mdpi/ic_action_cancel_inverse.png deleted file mode 100644 index f4466c8a43f997fe5410cbf780497cc34de00afd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=3*z$5DpHG+YkL80J)q69+AaB z<<~)&(Me-=1yE43#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD?70G|-o z|Ns93nLwbguWt+nMqprKVgjUrWbB)^l|X6kk|4ie21X`njrfGbq{%Zs8T0Q43b%W@ zIEHAPPfl1Mm=M-*!G|q?@w^*{t|9BHglk-k0%vb*6psA4K5Lv9WFUnFKJ9LYniknboDeY1?#Yq ztE(K?YM3OVF7O`RAa*xV!q5G?Oxt%uCJto|L*|*U7#Om{Oci?;nJoZ1iNVv=&t;uc GLK6T$3uaCL diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_movie.png b/SeriesGuide/res/drawable-mdpi/ic_action_movie.png deleted file mode 100644 index 4468af476f2fdfdd472617f43478416ec6e6951b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@=3*z$5DpHG+YkL80J)q69+AaB z<<~)&(Me-=1yE43#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD>r0G|-o z|488LQa+$b3@jx0ntPTMADxNNmArhC96BPI})-pATI<)<*SNPF<#(;6t izfTIrY+<~v3=B-$gA42aTFwTlXYh3Ob6Mw<&;$T7vqAF! diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_refresh.png b/SeriesGuide/res/drawable-mdpi/ic_action_refresh.png deleted file mode 100644 index bd611e8e24d2e211a94d1658a49c823c4201716f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3033 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 IFo%f$0VKS%G5`Po diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_search.png b/SeriesGuide/res/drawable-mdpi/ic_action_search.png deleted file mode 100644 index 587d9e0bf392fc928947f04293ba009f7fc77b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1394 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)(9*=*)zI10$-vFf5X3XIbTx5uc62i} zG&gZFgz0t3PcF?(%`1WFO+n~&!KoLN7;+1MHoK%2WtOF;xE1B+Du6w0m5JLejyTPO z>P^Az7AKr~^?{Dj2SqJXRKtXT=?BDwCtM&0p7c}mfa$#mn6M+i2Q6b@V0_}~;uunK z>&^AE+Ae`I$3E`tm@-`{zx9(?>dU1k*tm~+ZG0%dVMD+vFR`R_eQ9k~)lEW^HhtI? zB&0NvW8=gpsXg!4y8B+<@$PBQ%`+>{C%wC~^SkBqd7pQuuW?X#(4E%(*>&epCKp?W zrqiE|F7`;J9Gc@U;Ny}9H~GSBM$UJ2|47y7x^EaYbO zm=^RUfnEK@zlTwYmbEt*&h}S4{%}u`&SQ?!WlSjvv9{-n3Kw#{NfhghW2)KCHS6mc z^@8V*Jmr$4uC6fJ$dg^zU&?d@|$3_EuOa%?|q_h0a*8dJ>+>(i$vUCaNY#uTIE zul#VEs1omUHKv?ZC$?1V2%BBCKXsA7(geZX8pRvuyee!cJTgs9KN2D`QS`=`xX%9*}?nyAhK z_Nf-Z4{Ui>oBh!|a6Nmso8l+YBlF(g-ZfEwMbWdDrE^;>d8}GD@Z@>D4V>xD8CRkc zdVC*mVv&1FrpctHKHIFmo)(#Y4~A;Ho~#?e&Q2v6MQ%0zKUO`Q$Im5rVUFgn)AKHP zSBG=VuX=ZVUZK&Y$p$gc*{*!{ocg_l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy$q^X9rY5FN25yFiu7;K-hL)}-PR@>Q zriSJwPKGeOF8Rr&xv6<2Fuf^Yy{^WlMlOyx^@0*ZZUN9{m(-%nveXo}qWoM1u&1pu zal6F`r+HAlDOlYC_J=V}z4}1M=!2pbDXL*Y!1M!R!V@l#15f&?dBF5u1WedxG&1%v zFfbN+x;TbZ+UAhd|}sHIr**OLWb=ncA*!d*OEv-_5mFsJVY$Mbdj_i?XN(YY3C+ zhRI6~$XT$ln`tlo^}u`sh)Y|ZYNtlt1VbQs)HK!^&T0ljTr>mdKI;Vst0H=$yG5`Po diff --git a/SeriesGuide/res/drawable-mdpi/ic_action_settings.png b/SeriesGuide/res/drawable-mdpi/ic_action_settings.png deleted file mode 100644 index 550603059cac7098493b9d4906e3e92394537e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=3*z$5DpHG+YkL80J)q69+AaB z<<~)&(Me-=1yE43#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWD?$0G|-o z|EOSMd9Wx@inS!jFPOn*#g;RB+g5}F1#CQB978nDCnqdWO9&Bi5KSmE1QLaX4Vz*V z7&IO{YKmoW=GJqbxK{NjXF&ErvnIwe#-Ol3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy+1$*~)y&z{$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OecUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dHn%vr z8k-scF;2HY^rm2Q3q-F8PQCg-$LNEi7AdM>LcsI`V!{(HkONQpsd>QkUIa|oY=Ude z85kJXd%8G=RNQ)V-Cn~rQR4W=>Iwg!+|Ni*WNYr69dv4uOJs^bv(n~+4rZxFnoD?6 zl6HFG>y>EV?T>6lD9{=aW!tiT&*Nv0Zd_AabLq(3ibHBr0Sz_)S7gB_S8S&CY@E#&-=7Qv+6>((cSq+1C{(AiaT&F`>J(+ z%d+he?%Jz1F7DjEe^Xr@V^4wr|2)~ePk($~O9mB$c@+lie7)~X%K8~c?yY~{R(&e= zeZH?(?;_jCgTHwi(z6vN-r7kvEZP(qI+}w3Pa-k7h7g|Ed*_o$1=zKKuwp}+5 zW)Uldb?DY1B8Y;hgBV1I0`*WJWT)(6c?={`pPA1#Wg0>uw2~>zgkW+^=i_iJV4PG9fZ8J@R4Hq=%CpVKy3f&;2n-F*? z#wjtaENFF8tefH7+$rERaLjWEfj}4`TmpGN(>v2jzde&m=Ydbf0G@`;6o-9 zk!~h*eW=*Q?zE0{E3F$K)Z?L8Ac&Hp*_I82An-BGLZT+YSlCZu4oXpEKH_uxB2k~u z)4@bpHo|glmW#MMLcyqq^}0LQA~vi`85L@%h?RG+TuH1g2Gzik!_ZW&LOE*cD%dER zS4!v7T9R)IE0@m2TM|p-WN3S|e~r3m!uqj~+rq_{ZRtY|>)ph{p2^TOeiW}_;b0>7 zIkmRF-aZ}Jb@Eo(o<}wHnYT~MlOKNh14E9PMMZ9Gu5GMX+TUAKTan_x?`Tt{QMT$F zId0S!7I&@E4cw@s@ZxwiGjVA4hO@3dcwp(WYfifP_< Date: Sat, 31 Aug 2013 16:15:33 +0200 Subject: [PATCH 049/157] Add updated hdpi icons. --- .../res/drawable-hdpi/ic_action_add.png | Bin 1142 -> 257 bytes .../drawable-hdpi/ic_action_add_inverse.png | Bin 1157 -> 263 bytes .../res/drawable-hdpi/ic_action_bargraph.png | Bin 187 -> 261 bytes .../res/drawable-hdpi/ic_action_calendar.png | Bin 1419 -> 309 bytes .../ic_action_calendar_inverse.png | Bin 1429 -> 318 bytes .../res/drawable-hdpi/ic_action_cancel.png | Bin 379 -> 673 bytes .../drawable-hdpi/ic_action_cancel_inverse.png | Bin 361 -> 777 bytes .../res/drawable-hdpi/ic_action_checkin.png | Bin 330 -> 387 bytes .../ic_action_checkin_inverse.png | Bin 323 -> 431 bytes .../res/drawable-hdpi/ic_action_help.png | Bin 907 -> 976 bytes .../res/drawable-hdpi/ic_action_list.png | Bin 1386 -> 320 bytes .../res/drawable-hdpi/ic_action_menu.png | Bin 185 -> 0 bytes .../res/drawable-hdpi/ic_action_movie.png | Bin 191 -> 264 bytes .../res/drawable-hdpi/ic_action_search.png | Bin 1764 -> 958 bytes .../res/drawable-hdpi/ic_action_settings.png | Bin 253 -> 399 bytes .../res/drawable-hdpi/ic_action_share.png | Bin 1606 -> 789 bytes .../res/drawable-hdpi/ic_action_sort.png | Bin 1142 -> 255 bytes SeriesGuide/res/drawable-hdpi/ic_action_tv.png | Bin 0 -> 500 bytes .../res/drawable-hdpi/ic_action_upcoming.png | Bin 1794 -> 947 bytes 19 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 SeriesGuide/res/drawable-hdpi/ic_action_menu.png create mode 100644 SeriesGuide/res/drawable-hdpi/ic_action_tv.png diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_add.png b/SeriesGuide/res/drawable-hdpi/ic_action_add.png index ad8ada6bdfa0d08e96c96ef2e8fc6656efc31f34..fd4c54c1367fcb2e5a74ca3c20aeb4512ef4ae26 100644 GIT binary patch delta 229 zcmeyy(a1DGrJkkO$uool2x>S|Iv5xjI14-?iy0VruY)k7lg8`{prB-lYeY$Kep*R+ zVo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt*+)E{-7?jc;#k9))AAEq&yFlVq`;E7wXmEVGEzHR>X^sC;t{0}h9f=Vpt zJ(555XU*yKY30km31`Spuyl%CcUhZffuw_RLmIOp=oAJ|S3j3^P6l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy(A34k#nsr<$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1ObbUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnqfX zG!Lpb1-Dy_aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z4q0f*3(OQRJY5_^ zDsH`*smOQ8K%~vwiGeZv-~+WZOSZ=B1v}ZkA5bcg&|!bTpuiCPPfc~@%_GO8r_|{G zoD{$H=e4|Q-{R*n(~6#QC^RrIg@$%jp0M7yea4df9|g;jBtNOTHZI@cdUHutO?01w6Wim;H*=-YJSF-6)vTXc4;gaVh((-iXfZZqW+vo+u8V zBVlX)f0A7h-RPgQQ0YmtMO4nhGu#pz1)d)`lqGk1{e=6U^-ld^7jR%;WC0UGRzbha uDrBCXJI|cEda|~f-cO)#^eP*AeOHKHUqKdq!Z zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprRH}7srr{#PayA(7I0S01yE1dm$(cqW zww!X&Ds@c%=T=>+d!%^dm_&4{b#3E%o&}N)#wiVH3~Or+O#J%b-tVt-lpmd`^8d*x z;b06DKFctRaf{jS=%;&cr$pbJd&+-7&4DlKTTYc$O=2`*&S1L$GQj(G>%X8nCJ4v4 bp^W*xvqW(Ixt51O2QhfM`njxgN@xNAuy$Kv literal 1157 zcmaJ=TWHfz7>*N%%qyr&9ZHCb7i@CUHQgFpb!}D~G^2Kv?LpBjIa|Zb#pKLpdl3Z{ zK|uu{ydYEYvIj4qpdwxn*_fygMMT9HhoHmDgn31#o^3Ows0K~~k`;p)Ezx1a z`i{D^($T7fRBFX?GVJnLK!->sU466R@NR_4>+<;QnHh@ALr`mk8V;&aN|G_th9pM= zp8|p`84S>D0E7aerKBIQfMNX%sPeIZ=c;(Xk|Q65z1eCrpAzCDzVIzVWe~D>hRJ5L zbheT1oAx{8Ye zfn{siP=F292BNW=ILB56qHKXHm`a-t4OHN&f4J2}x!y477WOPaTiXiNxNYiWK51Sn z9t&4gZ-lEBk0n@?%iv%bueE=*x?sZd;~hr_7hgt49~yYxZ9Leg2ex_7;;Sgsq}}K5 z4ohWs!PK48x+YwFd3RrQZEo3{J)b8(JkwcGeslZVzA5(>KcJ3IKd2pgQ{jH>-2dv7 z_+wY*^|AZco0klh5X8?po#P{*JJCanGkzR-oG88gq1R8TVkvg=4B-HR8jh5Xi3YayO`a}}AsLNtZyw}qFc4r3 zRGyadU-U+BkYm7^S057ZU34ypNMzo2@AtHvuaILa>L`aEXx^Yn{9 zgFgxzG^8<{Wr(^e7xA^K|A@bW-Gi6vEwQ5Sj`$y7m<7`Ek+J@6t6g*pM5(Ubf}hic gKw4%oN&sb<->YyXe)w%A4Rjxar>mdKI;Vst0KRTV%>V!Z delta 113 zcmZo=+RZpYLV}T*fq^0SO!g5V#a!&<8N$KAar>eFgNcT=ery3gA+GJXc)=@;rLQ~|uV7@@Sfu!!v$SC$P!WTt LtDnm{r-UW|=n5(4 diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_calendar.png b/SeriesGuide/res/drawable-hdpi/ic_action_calendar.png index 35fe6b1e95872c3a4fb84830a147ba8e90b76857..7568ebc8310d923d903d7c3a5b3b2734d5be4df2 100644 GIT binary patch delta 282 zcmV+#0pKjO zKe0WnuX(jYZ=hucN+&UM23+QsGEkzoJ-S=RLT^9;&_rjzQfrsibvN_|6adZW8K`~3 zt?O==fD;!Sr8>Ey4gdfE07*qoM6N<$f|NaNcmMzZ literal 1419 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)%+$!x$j!pk$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19ytk=oJ(8$05r(RHE$SnZc?2=lPS(cjOR+OKs0QR(1 zCT_Qw;WQ7bHwCL(!2U4DsaGH97=2LGB1JV!2$+6AOnAZta^OinH4m8Hi+~B+RmVbz zfr0U_r;B4q#jQ7y54{c>2>9g|J~AtPr2VFst*ideOXHuH<(r!Fx0FkS?S8pLHSPh^ z@rhfn>v>D4ec1T)n)fH&^7wVR%eICczvFjh;&vAWK@S$8#vN;K9RAMpfp5o=I?f1& zI=(07GY)7busl$|$5P-bHYsucD+&Ks>2IPB@X=*`*%YCt5}PkXJpOK1Cfj|$^1;=G zdaK(1PMgrZi8;;CI4zj@jV62Bsvyr_s<(QUt@qFjdK5X~{SG^+M&4s)*UKlb=s#n3 zC?cN6!u^}tgs%bphH9@^{+C*(x3)*hD!1Ia(ss>4`_J>UkMboLqu<*wu5(^JAtX0z z%XOBnzhx6cPAtBqk@nxE`rxyTwY}Fx7KWZ!YPL<}*|#Q^on?)051C8=kjKXOB+182oaw(fRGmI+Wt~$(69D-I5k3F_ diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_calendar_inverse.png b/SeriesGuide/res/drawable-hdpi/ic_action_calendar_inverse.png index 3b5f92c35825f6bc3193d8b688a3bc482a6bb958..f0e3557b076e94e374c87f9a9b251ff9e7aed02e 100644 GIT binary patch delta 291 zcmbQry^m>vNl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVip)Y8@5)!e|;$-u?X(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19ytk=!b*vY~Xr(RHE$SnZc?2=lPS(cjOR+OKs0QR(1 zCQi4Qx#Bbrsy79zTR{FWbHk}uALtl;P}CwtHB1PYen3ok!Ub~RNk26YnBI$k3Hw!J zm=gm76T7F2V@SoVH<8g8WQw z>P?2^rIq)q_I_h-F#Ed1L##@roo2M@kDS)a{@>IVPYc#$`nLO$%d-_S$&a*of{OlB z=e_yQ-VmLt?-Dz0Me$!t2N!F`S&3(TPJiq^!ss8m=vSPgV4d@AW0j*qv#(#VlWMRv zT4lg6*WnHSqy3qg^*oFVymK=on^y=wW>LAdo+ti-z^kCyOCSCZ`qp{WUVuSTFT4MT z?h3BLtIu-oWP5G8z01y5>&oO?CRfYdPIwdrPIjA}m?8Qqi2v1ewu73T^;7mv+{ka3 zx`p=*my6gFv#29n3k}O|Epz(iyZRjKd4)B6vu)JaW8T>?DHiAdSbCb@ z{|q`>0}07#v0g(FIf}@;h%6%7S+9lm zebij0cGfpA1eU<9e!qVM=21^7%v}3Kb1X5w39EshoW-BG2WH0hA!gdwCAXTh6RUyW zz|j$ZAkV~1`)G62oSnoB;w5l!#8XZ9#2+-5iP%}_7qEB4AAo5@KU3V|_nN~@$~v&Z zZQ>D|iK+g!&0hPCB6T4PnV1CHO(-ZH@>b#%uye$pfUzS!)_Z?#b|i|2{H??qw}}z| zn;2`X%})DB<|e1HvId0fr#sU4>2sSm;3YTtpkPt&d&(|eflY~|C3mA6{t4@%n0P3^ zo!$W3!2K-+#lttO2f7#o&w=~TxTn};N*b^Z;`S7qMJWRl+~T*m$Ha*6ifyLEI^f&e zymA&l;M(Am#z#M-i6*Cyu_$#}p(~cMe3$9NOAiWsz6-D=&%Y@ZH z!};9ilH^KC@tL^8cmilO@CW#4#SY|&Ke6KawBti_cJnyZj}~K-3`L~*1o5Y6mzkYX9x!e$L)vy4<;Jg)HA3A_=LFrCjwk8-*_5m z08dGfUoZntNLqSEW>$92f-|W$`^16b8$DedLo7}|on$D~WFX=a&NkuFty9$(E?h2P zsg|midheK;%ei>*`yw&6PoZ^*tM}jXNsFI!w%)7WaCPjJlgDy$@&muCCtDQHDLH5x zCA7nD7xUq_4?l!t8$^h1UaA~)xJuu1XQN+Bx5`%I%MntV)#e_SJwdV^Wl<|GG1ScD zX%m`teot0Iq2dXV1yNl)S{(1^?9g~$@O{@k=DQwy1n%D0+h4T*ns#%v{Pu!8*S|sk cKiDwDXyggn+QlhO1v;O>)78&qol`;+0I}$m3;+NC diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_cancel_inverse.png b/SeriesGuide/res/drawable-hdpi/ic_action_cancel_inverse.png index f4b035e40ea32fea76e76baeb5902a9a90f67cad..eafbaceb4c29d7f97dd71677c8f148cc4a413827 100644 GIT binary patch delta 709 zcmV;$0y_Qa0*MBY7#Ro#000120{Mpk000DYLP=Bz2nYy#2xN$nFg$+(hDk(0RA_H6so6f3iu=kRT#_XVIYzglYsBS|h;F8UcpZ&jQHvd@6*PeU%v@#4OMAsY{ME zK%VE*x~`uP@sTmMcDH}mFUHs!5g+TiesX~zHl@VLJR#)f6hp*aRaGyZem^Nq(+5Jx z;%w~WWHR}EI2`_7%eDFinx+xw<^cc*A&WFkAKdMJR@=ND`=)6cVUuqKP!z?7Qfl9h zheDXl0{|$c_C-;A*oO-mK)hM>A%Ls*Hucr0sIFt zq;1Qx{1f`_C;)!|y#n6+1%9tfu@)+BF$F7p7e zH7%7owlzE-1mOjsyD(!_+4sNJ_l#AnZ)fKW(A5TlWnq8TRRH?7r%nK&=1+gu{EW1?s6&z004++ePvlT<($u4a$GLX`7Fz_sY_0@ rj%+B6{lFp68UcpZ2r#rpfT8sdZ?X5zJRd;B00000NkvXXu0mjf`TRz% delta 289 zcmeBVd&x9GLV|^vfq`ME&XX-bin-XyGlYYKKWt$d_r9R|Nn1kX=!R| zYGh<&0tUv$#y~cZ1oGn2xUK@Va+L)61v7Bk`}+9@1Xj#!Y(4V?D7xI!#WBR<^wUX- zV$B8uF54Y0p782x=zT4?VaF{w#>mcRj@H|CIa_oZcQW*xoKXAO*-X2L^X{n!lbuB6 z?mwuz-Op80Q91vyxDuy9)qggT?XCS!8V=n$pIFArRLXdzY_IkUH6ivp=YmzDC$3g= z(@zph5?Ohv_CR3O+PaXqLzAb8=mFy3%Y` jb|nv9bbMN9xA7lOb`)>pC8K7bn;AS^{an^LB{Ts59qw{1 diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_checkin.png b/SeriesGuide/res/drawable-hdpi/ic_action_checkin.png index a1db63f3858b0262c56df840415bab02762aa707..85456e99cfe443b493b87688d229d09b3b88d179 100644 GIT binary patch delta 315 zcmX@b)XY3VQi6?vfgzmfXFHH$DR%M<;Q)dfj+Bmx1~&DK44y8IAsLNtXIOI`au9Hs zpQKnNpr7!V*Je^g1=s(2o5roZdv8>-R%^e$!QxU-I>|L%?AbxHn={YYsL4$;9-|@Z`z+ zN2VS)AA9zFW7)(9Pt+eU-P+M$c9OeAZt=+pe^`(lD*<#Z`?d_(ZM)_iI13CP22WQ% Jmvv4FO#myyf#m=I delta 257 zcmZo>KE*UaQkV7*sNy0N9QKX9fgCUEkDjNa}?^o-uCs+bf85Hp00i_>zopr0O1*s A+W-In diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_checkin_inverse.png b/SeriesGuide/res/drawable-hdpi/ic_action_checkin_inverse.png index 25341f149133e3faf299fe53c9684fb724bb83db..051f985acd2eff1192d98ab5d25919ed720dae0b 100644 GIT binary patch delta 359 zcmX@iw4Ql_qy!rS14B5|&vqciQtadz!T|&|94Q?W4Q%Qebv#`hLoyoQ&b0PpG305> zbtGWAN&=t^-WXq+O?NKmG$b4FCA}E)TQPq)TbWn{O|9#%2BX! zn&MlAr864L)E4w|W+XG+0y58X%lzH;V(ti3JNwn1;uVppmj`?2u-y}5Twe$%t{(y%pGk$6v`!Odv{w@n2C;tRP#;d%Z2GCh39g;zP(?(OS?p4varLE;^%iFJ%t4=9gj>> zp7exc4MRfcrIeK)7$ljLKDoK*d$T4y<94x`yW8IVfpN=**|!t8T%O+vKl$(f|BlX# zw|nFDMHhUjHL+(DzHp3XOJ*FyTltwrNZwLgaMnC|N=V?k*7ehYVaed>>gTe~DWM4f D1QLR|m<|8EKgMn*;^ zU|?))3}gcVgaIUx0YnO@@a=QH`#@8LOM?7@8I(*tJiWYqqB9DLYuYAEnml8s@9jUf zKm;r^1RU0oV4cFuu#rhy Un7?YS3eYA7Pgg&ebxsLQ0Kg|vYybcN diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_help.png b/SeriesGuide/res/drawable-hdpi/ic_action_help.png index 3e3bc4ec7f28dd60ea3e4ae2b6e48f30ab36b71c..7d6766201fc947155e278c3b5889bc5799efba2b 100644 GIT binary patch delta 908 zcmV;719SX~2hazQ85jlt00374`G)`i00eVFNmK|32nc)#WQdV4JbwdCNklL`Bg$kD;!5D!pqG(f#poEcvK%+&wiip~{3EZd< zD7FyX2v!ydP9XGWpv6ceWR%rl8}+p~=W@?H@4N5ZnJ14&?+cf6&VA>8f4}efo&T@Z z>2!=TZWy)$E5%sAuzxWYFl>wk3>zaaVATM**5V0l#a)=f?YM{w_!Xz{CH@?g(bfP~ z;*EF>kIRebReXz2@zY9;uSCGD*o~*rO5Xp5AMrc>!flwu16Y^T>);sP$KT6!Vz~k~ z;G>ulTJ>{$fgftV+k|KEoHAPHuq&pGu^a&p3gN#cmVd#!n15@)@d)0*-Ld?S&<($D z>P%AsQ`jHVj?n5KC z|5VRf39k2fU_#h46|K1+M+a#jM?ku?XN5IlwcvcwmyZhDjyk0LSzC%60clv*=a5Fc ziicx<&VSNw)C(zpR(H)2FptYIza@t>Vq=p3MBe_U;J+O0_C=0>MdeERWDaSU6Z7(C zuY&)Kj5UD#&D;q*CM-ZR>SvMyZ)9>8m{A^(PULIZ)-^0i}mpG@azwhkOt9{Dy4QK-Ys$!Sw3c4y=h`42bnsgZyym{rctvv^B5 z8dhO3d8$rgYvT8_v3w!svrl9E4-fSPM*3Q%z(`+gr5M?(#cqu3Tw i0mH^vz_2m$0{#P4l;)}M?|3W#0000q< zwT-=_n}?@gKuBnKM08?yUO{nLc~xCgN8iLrQ>RUzIcxTud5e~L-e7J-4AGgiMNeZbAc3V@ss35^=)=n7^NO|y6j*qaa#6^m$T?zqKD-t zqb0n;dt(`blwaMkx4#=1l))wNCdZj+#Z8UKov$uQ?UlQHAdFeaXYc0TdH#v5g^~Ul zPhKy4n<6>MAx4qirAl~b1(C;Hlv@Xwk6GI?#a;Q${v*>_%HYbO+e}GWe;c+e zJs8SvbVsN8qsQv=2i9JjbVgaS-ip~KllS1i%)M(wz8_d9w&C=uc$uTId*5AU`gZi? z+K;knYZsc&7hHCB`F3;1-S@-KK6`6x=^!K7p?fZ?LCyWk+S_-x$Xxt6{lK5>w12K< j|5yDvY83Y%{{c6gTe~DWM4fcxM?I diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_list.png b/SeriesGuide/res/drawable-hdpi/ic_action_list.png index e45ea1fd95e1358024f67772968143164462c87c..385940a5b7173a598c739ad8ca3e743e82037d7b 100644 GIT binary patch delta 293 zcmaFGb%1GtN?srJ5AC&mIBy z4_x2kjFpC{MSGmpUGhvUsF-`@%BUAX+tczCO}9_Db^p(eSJRkR iST@Mb0+B$%mT_0PkLYtzuWLZBFnGH9xvXl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)(#YA^#MRZ*$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1O$kUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnrq& zG!Lpb1-DyVaO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zu6S6tl7WHoj;D)b zNX4x;GxvKPaS%ARxx89VJxP&6Eb4~Fin&Y8%J#Li7H#ddYv@nVOj`WNxMS}RK6Ng! zuxbAslP7iGKOl1=G4Wd(+o89I)_a$IzkSAhre{p#G|##2$}4|%FfD4(Sn%v{_>MA3 z9Y*#oMeh^dRbQAawt;ik9*=lKC65C$+Zc9jOIA6M-6G%{qrt6Fuc-H6eZ|y!dscO} zo8K1``yi`yh`p)T0YddvTarCi6fsMI2}Ba zIoEei-2ZtVb?ppa%XVqxeG!;&4Qwk$7adUDtz z^=~%miGogBUPcyZylLdu7Phuq8Q%JDN#IrHsb+~^z(G}b6Mw<&;$U$7x5hc diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_menu.png b/SeriesGuide/res/drawable-hdpi/ic_action_menu.png deleted file mode 100644 index 92d2fdbc305b4a5ef39047d7d67a199e7fc9552f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-i%*9TgAsieWw;%dH0CG7CJR*yM z%CCbkqm#z$3ZS55iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0v)0X`wF z|G^-%=4%d6gsCLRFPP!X6G!L8K%Tg#i(`ny<>Z6~iU~kfjCxrYveo$+820T@+B-}A R^eLbc22WQ%mvv4FO#nS_I!6Ei diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_movie.png b/SeriesGuide/res/drawable-hdpi/ic_action_movie.png index 05612650803ba2c4fb77e6f1dadfbe5b3fd7ed28..fbabad86fa56317649f0b1f7be34bbdadafe0e76 100644 GIT binary patch delta 191 zcmdnb*ugYGLXv}xfq@~M>1R8TVkvg=4B-HR8jh5Xi3Yayt)4E9AsLNtXBzS~D2N^ch_$^S4%juw?o_@NlJNHCk8d^k-B^jlL^-a4QYqP d48D5~@EONSruV7cxdL<|gQu&X%Q~loCIFI!NTmP( delta 117 zcmeBR+Rr#aLV}T*fq^0SO!g5V#a!&<8N$KAar>eFgNcT=L2Lm&A+GM9h>}s~x~RI&h0N`)e#D+h=G)ZiuG8N+UsrWio$hP5+om&SHJw0J z%m`>2GXk2%v==a^CY}~n;4hrQ-!<{(qO5>fxDRVEgk_i=`^InrBlr?uRLn6GeI+)s zC3saxJ_VoRHGlk8G*AkP2)G7KiY>Y#u^uvRKlh=JHs~_c>)Hz?2(>c={OeKe&M^Qj8p-m zxL8BH5fjVqsv7um1uTs1r8eih#o=j=@i1ZHYJ!V?(q*!O0RFlOnYyejUF?|NVG6@!5Xtz>8h? zj`i>@g(CI9df_}jFJ6C(JvfekuJdgPhqfKK{eQZ?abY^uQrr|RDHjQ~z&%~}#)SRi zxRCftVae^@H%pw`bTkZ7D3a$*Dqj;-sS2yc?3<5KnF{NKYt6m?j6N8{GRn-(<9Kqd0`|v zANCOm$uo6Epo6)%TR2xGB{tOr6vkAULLsFwBcN%_2xuD9UckRyceO2p!~=`~0000< KMNUMnLSTY`H>#ol literal 1764 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)(9*=*)zHG!$-vFf5X3XIbTx5uc62i} zG&gZFgz0t3PcF?(%`1WFO+o0j#HkmQ7;+1MHoK%2WtOF;xE1B+Du6w0m5J3Y2F^}y zE>1YjgX&Ge>K3qGXPkQVfsWA!MJ-ZP!-Rn82gHOYTp$OY^i%VI>AeV;uyg*O2mt1n zFi#i9kcwMxX5P*g4iq?MeqHUBR%njnmW0b3zm{-xi3cqC%GT9Y-=L)QsQBYTjiwL* zQ5VNm{=WiPYXt*!emv`4R1xlT_0eA;?zI_Pugq9?|H1YREUD%vZ%*cYbAZ3>_M3U1 z=gu@XR_C0#EHh+tYp>RJ2L}ZOfqrb7mLU4AyVWH|NY* zQ^IzKO}@fjZcD>Y1y@7G0?{|jH@!F~c*?W)&e`MhOJ&F54VqgD7x3n=W>&q_yTREu zMN@!LZw0&f0pkxMTbg&APM3BRKha=UAkh+Q_qyY@$*$&y%G&i@GA#RJ?6egx^Q|lF zU&Hpgzxdm z0o;{y7qXw)*u936b3;UXgPPb%gU#n6Wt&)pt4V_e_XTU$-|uu^H+{|X zXZ1-)Ju5!3bk3Po7q(j27@Y8x4xMV6U@BAY;hOzWMd9=t;Y8C=!?>Wu3T zaP#eOXcUji;rddmYK6lR6#qHU^Ba<|-IJx*BXInxa_oeX8 z&koGeJ1b*sU*?``_TFR0-M1>UY_9anjWV7ajPD**^MBo$BXol|>{7KF|A+GjrSBb| zsdf3zhA`WcMl9}4?5PyAUL=N+fGo5O0o-4l-eZBPXoi)cTJa5{sjrl3T zJ#)!3`Is4Uu}nOCds^;h89V!&I~*UmWL|^xgL%65uYdH}JLO?Y=hl5^UucB6cwD^x zTCmM;im;^a4dJrMhwH@u=l}0{I&qPUi>PX|O*EhRHJA5)b$(R$DOpwCUu@L7YD?X1 zIfH+SN?wAi|7baEIxBa(%es@}w{L@}oNUj}|D7F%#=74ZGngx_5wSkHo@tJYN~A({ zY0APPSBajVQf>Z|uKs2?ud?r}!$S3aAOB7K_}x0>_&22|o9}l1R8TVkvg=4B-HR8jh5Xi3T?Hj69w$jv*P1Z)a@eJ>>e4uYVBJed>GLr@BA?)@uj+KECLuR{m$v0FD=0$)Or7GTJ~=?IYuk z&v~jo6>5bmmT!Et(g8tcJ__(pUi#BA;iFTWf3oV{3)}x3@ivWT>~8>yA5~VkayjCo z4@iyc#;GUv26(<}<#`gfLgl+tR+0V^weL=BMJoCsi)I{Im?FH|lQCmRn_W&S Ty@=fd3@ZjtS3j3^P6wN)LV|^vfq`ME&XX-bin-XyGlYYKKQ}>d_r9RV*}|PjTeDB z*h_-^f*H6HQdjId6L)HdIZ(*m)5S5w;&gI?1e3!FSHayakx@ovog218bg=d#Wzp$PyAB1%mF diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_share.png b/SeriesGuide/res/drawable-hdpi/ic_action_share.png index c329f58daae65d1f35d2959a5c2cac0a0cc7d218..02dccf57bda494ad8ee1f7d6e520eb4227d5070f 100644 GIT binary patch delta 765 zcmVGx#xdp?medNukPZW^W5h=-~V}gp8u^Y6bgp2>Qe_WP}KlZs|Ju-HGtF_ z@&LmUkG~iTF&u5Ug`asGqyiX=gJ|y6{uI0MF4j@1CA7=m!NY7EkRz@X0F7AIPyc)@ ziglI(U~YuX?0;BiDFCKN*nEz4R?SV^gdJE=!tNIy#yYJAKqIzbDeAJeZ)oVl{ybjA zIpz&-%J>3K#PXQdfbBtRAh{gmK;4@8X!hpYBv)HeLwJ zCzr|rn1dEf&IY}W4_RL`wqr&&`{y`FUgH}Q9T zDPc2F+$}q(iUla(ehHgN!Wq63V+Imb9_87@Q*cSRpn9ua&ojSW*bCPM_=+h{GWQN^ z@xY&;zJCirwqhfmW$ojzPdJI11|!hERPIeYT39k~^eh4Eu?m}os*3=7U6_&fvLo$7 zl}IHB!EY8|inH7)_l}-$}SwwKBY7>)@h2G_;rNM z$5>}60NV6lw0GfAtg{pV9XQla|6zQJbylrY=wE6P-cn4l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy$<^4@$kou)$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OnfUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dPPe$Y z;WQ7bHwCv_3~=hz2RcR{6tzfE4HE*U9}p9saDg0n(of9;ruQOX!cO_L`zQkg(+*D; z$B>F!Z)TqL77dg*mi}kQ&sH|pEN=10#ExwmS&1DJbC-lVx$5Q!HqBnt%JG*ysC&iK z5SFc5!gOz`?A+0~wd;-BBDWBMRFo2ZJ?h$_;_~>Yj3X>4y?O2DIOwwA8(isoFihqz>bHwpL-Ua?$j-u~%8`2-x)myjA zC(328lpj#sz|r&cn$k1T9ZYqZvCPg3WY094ZtyGGQ_d5^Y%0aNrRnj5{>PF(-;2Ds zqTwKxyY;Erf2qn{LA%`;MQh40FzIX*+pfhZ^fyekV+Rw@{Fzrp+>UNmxy=}O)|DEvX7#2~~h>fMxd zGdZ@GD}*9tEx6A$s%am#W9>iS{`#ivg6_>K$9x(KKNz3s-lnubM26*e<=;-bS)1qG zWIWfv{eWSAme?MK?+$9KlKgt)SlVCCZ>zKB%nR_~-*IF|?5U(2raP?bomwZ;Vu5W89YpmiD`d{l1AAj`% z{~Q+gNL?|h*CziAcbxpNe3^1~;^Bv%j1NcHMdv);?&|-iG2YbY?4>g|gH#iG6gOBY z*mFETsIfV3RRmL#yxZZlM-l2qSC_UNOUj$o^n8)X1FhxtEK@GGWoONBbUC_j!s>;Z z`WG&&+0f&eee1@i=u;x6CpZPJ>dJnzYqhp^ncBGvscuehymXptON>jG9+65{@aes} zCh)+ft=bP+bMjJ6xn`tvzGJ_kcDp;@gzJRCt{rB1*%4h!wobb&^!&cj%c+sBiI(qA ze*2|+elMfU%by4CPb+1Zlc4#o+R*C3hR3zizq8KYek3?~{+ui7z@*dJ;BmZ-ftkT( W{3ByL-_1`Ndj;#6*)GT!&4L*LGGPa!-7Ws`bGpCv QfevBtboFyt=akR{0AkKhsQ>@~ literal 1142 zcmaJ>TWHfz7>=9D7+$7Mar$70BIw#&YP&UYajs3PRWnCd*dDy4$=MofazPc=WJ{F8bTjC+EF&N=WSP81V1~5?xtNp=-%3{4?Ff5!|0=B*vXmJ}F zWU**LFRvv~mTwZPmDjSSESAAy7_YT|wYucO^W&LQgNqMSqYq3x?=~Ln!MbM#{wUri zq?VNXeB$ipIfvNV*wtlE^S%f9`kueQ|$i+K6*^p)bt z+quE3*H$n6G@@1RtRfE(6?j?yD3tBHv2fse?Rn`7zi?|$%^UjQw%YX2aN*8}4?j<~ ztr~qj^m5+nbIg{9KMUJ@^Zhsd?{95Bz?~?JANHjdEPZz7GCU|>Sg~X9V))yls-e3_ z>gS6!_4zS+`~K{uWY1*$B({~}U&3=E8go-U3d z8I5meSbH%CinQ(TXwAre$hRddjNeo-8YNoZf#9?E~FB*o4MRz z>G32rgO-z}a_L1z1$Gi1?{=2|`^%oz}uLbz-GbBS9B(y+5F_JQ%oHl#|pKS{yw?Eep>)2Y=;W8{^C9vSfBvk-6!<$x`;$&*XIe+kcU-V9uU>>?}L{?%6Z*&r1By zsl!;Tdajx!ho|>zqk7UpC6@!=S0s5n;JcwC5hnirKyH|#%7=qb{sjGJ%8qP(d0>&_ zXW0kAyBE({!(huKUKF&hAT#EGl=y~YtZNDxvyqri{wd62+3y!Qm3b&Ir8R1AEjuOL ztJPxXwD-axLm|QMlRB>*yQch6Enje7!{k*5EB7&1Rw&=wp>?R=tw1)qJ9+8H?SWup dGxr>jfB513rKbGoKfoAb@O1TaS?83{1OQW6#NYq` literal 0 HcmV?d00001 diff --git a/SeriesGuide/res/drawable-hdpi/ic_action_upcoming.png b/SeriesGuide/res/drawable-hdpi/ic_action_upcoming.png index 314ec9319a071bf3743105057fe07e7283cf7b89..4ff8837b6444834111edd7d1c3e9dfbd203eb6c6 100644 GIT binary patch delta 925 zcmV;O17iGw4zmZ4B!2{RLP=Bz2nYy#2xN!=000SaNLh0L01ejw01ejxLMWSf0000P zbVXQnQ*UN;cVTj60C#tHE@^ISb7Ns}WiD@WXPfRk8UO$TFiAu~RA_3<(6`U6s71Zn9a2uyHQ zsEZJTS#()K24v2sPFf6~j0?vRFU?128F4|Ev*M@~`8dw2lft<2W9XJ5CfbXpo zZ^ghUunH{Fcz-C?fOBb&r^I{)%E0etL^Nw40ycq3@3SgU0rr4H;FkylBYpxX0`tHF zV9@J(3OvIMu}m~$;2!V}81X(k0@gDKh$Mc-`|J{U4t&ibCaZx6c#jib1-5}5+|#x^ z1a1Kzfu9X><$-13Dei4t0#C^BCbCSUqnKf1#s2_G7=J@?@c>IA?sh`Hn)EG6E+qG+ z)KZbfz$$LcSAmznaZ0?MLT?809!svO{5&bORA>!MV`dx6HtFKQ3D+!S$CA^sC^ds< z4Xk*vN0>1mLi+|RJCfV#TG4dU7#PDWQea;5I*rGC9BV+km8eN>JCtUnb}AYJ3%C`w zf^LQwz<@Mnx{R zxAm|E0Ki@nE|O6zY<_L5sBbLoLm{=elVUj;jU|&=3IYW}R9F%UO04hKyD; z2mmH{t7GJ(T)LF6#I!7h8NgF)GRN&3zKD9TSAqMybLZ%BC zUxSiMqd*}>pdgn8GnH@v0tRqc2nXhIcymEEjKC1WhTuRZ0`s|nd>8>o9tP!&P$lza zqOcKP)JecdB}tqQL0MT@tgLw~j7WhH9*+mXY>3TfQV6Erpd%I8Or73qR6&I5m4q56 z)tC-6D=Lz(Oj5w0BK?|z79W$<=|{>$6%5K&;1I%s%_)rnrPBY0YPDl%Jt;%K#rvPa z`WOR_LNZj3WfDrNamik0S2$ltpb8QrVlYfITE(bTjKuV*7!C@fxhw>fDwJxS+46-U zmGUJzJ*m(sQHe;vpfp%&wTdqa8e>Pu|9(`9-CZ9YYSLs$ZBK zrqRJuDt38ATEH^to=X4bX(n5o z9@CY^9RAt*{vw-Gn?QL-|AsuvE%_M(R_&i58qEZBPiX*V;fwlg%Rgyc)&bj_g#+hz znW-G&#RdBLf-D zxh@VC{nrH!@sIAojr4}zLD#D7#)~$})Q6=K_dN%LZ}>tkblyCLh}9Bdgref zeYjAG>?Mp73d`Q?3MjSX?CH&slq_ujv@SsWed*AQ{8eIt9b#{LGHpIkg~_$|D0Khxs1<-5Vwb;(zMSyg`9W6t4wHcFM- z$)18-md;+aGpB{VLyy7H4>Pa%Tg7@9p-P7>V+;-D#Qn6ax9F!2; z+FJ6es;KUcY5rPZP)|SA``zuE{q@?X=j<(#4w;;Mdx5q0lU@ntTdb}>u901MdAOgm zIPKRp5eB!Vd2WqU@(TVqx&#=S-Jd_?u1q)7dNPlAt`Ab|)1_ppnS{5hdZ6e;!t?5V z7kn~j?ml#+9llj2V-^^u#u_(2^Gf)=#m(z{(zX?ChFb3B4d7WQ{zYPS!LcTdbwa~- z7mOJ4BLd?8EIivJ{a8Qi#Dc!hTUS}s0I|9LiQ-A`eVc)vLZ{j;XtRU)uOtyiifTd= G^Zo%Fg0y%5 From 44f1f811e32470316c743228ba3e441843da1c3e Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 31 Aug 2013 16:44:46 +0200 Subject: [PATCH 050/157] Also update ticked icon. --- SeriesGuide/res/drawable-hdpi/ic_ticked.png | Bin 1735 -> 308 bytes SeriesGuide/res/drawable-xhdpi/ic_ticked.png | Bin 2610 -> 273 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/SeriesGuide/res/drawable-hdpi/ic_ticked.png b/SeriesGuide/res/drawable-hdpi/ic_ticked.png index 114eeca63f05055ad6a0ef9ad206338995c5ed42..f18b10c870bea53923fa7ea27007ffd255f726f6 100644 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sfdM`tt_kxQ82&R9_Az8lWk{O| zLg_OYQfEQga1kH_E(lZr;X)V?HE=R|+vXWS!x>A0{DK)Ap4~_Tagw~PXo>AzhjEB~F zUax2N8^7#hoMotNgn3Kd~Ee(7!7ETBCMp00i_>zopr00FvV A@c;k- delta 1730 zcmV;z20i(-0>=%I8Gi-<00374`G)`i00eVFNmK|32nc)#WQYI&010qNS#tmY3Sj^M z3Sj~K%t|Ey000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S*E^l&Yo9;Xs000I=Nklan_StLgb@mZ6?-IK=yXoxzzLj3+(mE`OhgISV^2~@sEDu}JOiB;^T}~Yr+X3y zY6+c39N-@0XxyMPSR@`wU@#)MK-~6dqfK@B3JV4Vzz$3jXYl{x{$hi);%FW25RM7* zu|W8~qVH+r?;FOK>WoEaKm?HkA|OH!-lG+V92WdB!+$=kxM@KibhsIVi9owlp%q>2 zCHDak5IGM%gHLdyhK_?g=HLl|f&hYyd%{U5`Zl^!nf5sc*29PHviYE)p9U!a^vcY4 zKz^YlNx*A%hkbkktMIMd%tyFK1^bls;Ct}{LBFfGMPZ;>rkqZJ!oHQ!e)zZtFUX^y zXF=lJ*nb}Z7X+=PFjv4|dz1P0MF@uNM-^IyPqCo^T(vv%@&Q`|FYsf9ZwK^EL;pJn zjS};nsow0vo-d((_y`$QbX>40#m+h;mes*O0r{4pHPCtBdV_`bQ3%tyop=ugHiieA zGUOakG*%M!r-EFN9=wNZ9sbwK@4(qz*HxjciGMOyyQsAd)Sbd#;b@$auE0BZM3Hk2 zimU(6&kQaY;om8COL)j7u^?i=Csvv$WCZM=U{h-vs5^ykkXB+`H4w%P-VZzh3xOFSd|D59OFNP7xDA(+JB6mDW`*Coe>3x8lI z6h98>eQPDUrFT6%L}Ly;<*=tRcmP9wE7*%+oA3ahY2*Y*nZu%(Hz*kL4?*4qjP=G9 zffEKba7#i+QY5q(4u7Lzqac3=w-(;eQ-*vFDCZ{RWr43MI=fwX$W@{DLi7%*1B2)x zha3TUx8R-xdtY};Gk}JJrxke>(tpd2!UC}DDTP4O1LZutAfE+>a_j7OzzZo_i_y2X z3lF&^^brU}7TN*34)MI;XBB75hetA95~r8!LtId z8Fs@VB}0zWP1s5{PT-FQ&pUK>r{UKLY$gG6PT*8dV%gxE4lXMk5%?rIc;L^#a}a8V zzO~cv8w%V?0`#50IpCq(@P8)QpXiE}bJu(Du4c4%1^%W28%Yepu&4Ndq7%Sb;Pg#y z3D_%!%?N%rgI}WFnuKI0;o%mi5{8)|dIr)Z7Mle|4BB{#DEgJ&nA5_V%^1DpU`F=< z{+0skCF-pqMiw&(L!Sc)z$2^U`K!SUJ@^}Nt-Xuzn+oJ5rXjgRoqtS1@M`d7a7}>^ z0k3%EnFRMAqdk`(i@OaETR2w9_KDXaf{{{;RG=`T=&(l~6Z9p))jOp1d$8;ET}aq% z39OeGjlq{Zoq=u_+X+V8DiE3t7TS9O4|i~|l}P|@mWe3P^aX-zAXcWF#>|GbM<2Tx zcXTqB|NL_?*H2CLUOWC_Cr&bMlVv+ci?YF6*_!@hljQC0 z!qCAg>oL(#qMp6P)7O>#E{8myy2>`SOV5D{Dm+~rLp+YZ4cW+hz<{Isip-Uz*4}y= zfBt)QFVc`~vMtk)%T3{o4)A)!zd~Iy!`#r|u-I9jj>csN#o5{gn!P&@9?InnE82f3 zrCC%>Hr3#VL9^l!#WL2G8>&~DvNy1b7xu32%3foqup}*2@wwKM2UGX*oZLQBp@QMv XT73(q+a||>j$rU~^>bP0l+XkKO<-4g literal 2610 zcmV-23eEM2P)CMJO3@*(n}(L}EFLL&*fk*r7nNi>y2_F@y(w!1A% zOQ-YozUMq%%saDhXQ$nE8JJe~xoI=)IrIGf=Q-y*=R8MLl@GF+UOUihyCOiZ9q6@P z5un!&^xCcn&}#>JZ9%Uc=%xuG&EMxhlAojrVkXG57FLmL2FZEqeS!~T&|<)H-dLcw!XnebQs*x#CfU@@Bw;*hi^CG8~Z#6tONH2=o?B{^+*&Tu8;_z=-yrfwt^26c!kLX z{yQK8&A9e}LdhdPQFPuRYYxgnt!~M=BKWyPggq<3cJMxdmt^EY20)Xz76di~?ictc z*p(2o8lh!NUp>PaH@nxTz@^|lOd0sNHby=*r3KIp1NS@RH3R1i?(I6J1g=u$KvdGZ-h9j8Ylm^2d6JV$Cir%BhU@DRk zvjF#*tkHUj`fgraMmq@Kbj;Hmn%Xi_<g-MTIXW*E^NL%x&q7Mo3 zl7}VmD_P8Hl)zUw?M^27(53tf+To8dW0yD|=E!8TkWsJzS=1TU>H*{R0rC-?iRY4N z*sTcL!3$>0pp%Nu3f$8UFHlqT;ZE?QjMo0U3wTH(KoGgJu_M?)#5WY{8Ac6gY`3}ZIIgI?p1l%N1B#T` zN`&p;n@3vk*O*4wkF|Yg1o8-QstF%<5q^^ZdC(Z^>ktQ+nni!CkX5)j-9XSg00Z(Q zz;+@ut@FtHF^`!P^lBO-Ki&!6!zp_KezlwM09NOeqx^t>gKRKj%7`_1Yas-E-NPY4 zrZ>3;hk!9b-cZ0}d=}g~HJ@Wl*ICz(0AB(oz`(2pHo+@0Dah3V_kvDzfPYNj1z;(D zkKiFW3<)p~`X&o5L%kN@%Zgd`=yHHO1iYGVl#K0X75y6MK|v101fwBl&{67x=@76B zV5gV~;QU4K9u9-vt6RhW)x(m-FNer#4Ob2ss&^9}HkHOiZU;NTRbj|_Uw|2m2}T7u zAn1oYd{f}Y4t=};JOQ$(=y`~W0j?B~tw&hziL4>)+YE0G3wkebU=unT1CJZzWD`C@ z)*NnQfZ^I1&cxk>htzRcfTQ3GoQ?Ag)IwYdqM}8YJ+h$iu)-@H`nXNu>&-|A2uGFv zA&(4Hk$#8CH@3P4ykb5o=<&S(4{gQKW>T~O7N$c-sjq?=33whbz(f-nbe zfdwqn$Cy? zXOAu!f)z*nzQK1CV5cH@c+@l~ZWa_zb9a!NJY)>|dl0ASpklrXI(gv=O97m~lZrf_ zz%Rew@LLLSDG?x4gQ%j9CN#ISVgL~21`jzwUk3U7g(Ro-A5PJy6rQ)}5p89eNw zG`7P?c$~&4-$n{v8^Zir@P7gp9l>$}U+N`1?6Nkvl?V~BdP4OWFSthpB1P^;n zM3gmzp~0KRw211SzG{wo&6AJz3Osb-rD(dQkYmP0X- ze3EjhLS-+k>yM?|OX_LcOW;l0*RRF9VSDC Date: Fri, 6 Sep 2013 11:44:09 +0200 Subject: [PATCH 051/157] Do not synthetize back stack when advertising sub. Fixes #313. --- .../src/com/battlelancer/seriesguide/util/Utils.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java index cfa17a741d..d5289399fb 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java @@ -30,7 +30,6 @@ import android.content.res.Resources; import android.database.Cursor; import android.preference.PreferenceManager; -import android.support.v4.app.TaskStackBuilder; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.text.format.DateFormat; @@ -905,11 +904,7 @@ public static String makeViewPagerFragmentName(int viewId, long id) { */ public static void advertiseSubscription(Context context) { Toast.makeText(context, R.string.onlyx, Toast.LENGTH_SHORT).show(); - TaskStackBuilder - .create(context) - .addNextIntent(new Intent(context, SeriesGuidePreferences.class)) - .addNextIntent(new Intent(context, BillingActivity.class)) - .startActivities(); + context.startActivity(new Intent(context, BillingActivity.class)); } /** From ee82adfa0379a0509e61a3e7a664449f25e3bf82 Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Fri, 6 Sep 2013 12:01:45 +0200 Subject: [PATCH 052/157] Comment clean up, small tweaks. --- .../battlelancer/seriesguide/util/Utils.java | 47 ++----------------- 1 file changed, 3 insertions(+), 44 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java index d5289399fb..fd382dddec 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java @@ -101,9 +101,6 @@ public class Utils { /** * Parse a shows TVDb air time value to a ms value in Pacific Standard Time * (always without daylight saving). - * - * @param tvdbTimeString - * @return */ public static long parseTimeToMilliseconds(String tvdbTimeString) { Date time = null; @@ -149,11 +146,6 @@ public static long parseTimeToMilliseconds(String tvdbTimeString) { * Parse a shows airtime ms value to an actual time. If given a TVDb day * string the day will get determined, too, all respecting user settings * like time zone and time offset. - * - * @param milliseconds - * @param dayofweek - * @param context - * @return */ public static String[] parseMillisecondsToTime(long milliseconds, String dayofweek, Context context) { @@ -224,8 +216,7 @@ public static String[] parseMillisecondsToTime(long milliseconds, String dayofwe * given TVDb airday string (Monday through Sunday and Daily). If no match * is found -1 will be returned. * - * @param TVDb day string - * @return + * @param day TVDb day string */ private static int getDayOfWeek(String day) { // catch Daily @@ -311,10 +302,6 @@ public static String formatToDayAndTimeWithoutOffsets(Context context, long airt /** * Return date string of the given time, prefixed with the actual day of the * week (e.g. 'Mon, ') or 'today, ' if applicable. - * - * @param airtime - * @param context - * @return */ public static String formatToDate(long airtime, Context context) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); @@ -341,10 +328,6 @@ public static String formatToDate(long airtime, Context context) { /** * Create a calendar set to the given airtime, time is adjusted according to * 'Use my time zone', 'Time Offset' settings and user time zone. - * - * @param airtime - * @param prefs - * @return */ public static Calendar getAirtimeCalendar(long airtime, final SharedPreferences prefs) { Calendar cal = Calendar.getInstance(); @@ -357,9 +340,6 @@ public static Calendar getAirtimeCalendar(long airtime, final SharedPreferences /** * Add user set manual offset and auto-offset for US time zones. - * - * @param prefs - * @param cal */ private static void setOffsets(SharedPreferences prefs, Calendar cal, long airtime) { boolean pacificInDaylight = TimeZone.getTimeZone(TIMEZONE_US_PACIFIC).inDaylightTime( @@ -402,9 +382,6 @@ private static void setOffsets(SharedPreferences prefs, Calendar cal, long airti /** * To correctly display and calculate upcoming episodes we need to modify * the current time to be later/earlier. Also respecting user-set offsets. - * - * @param prefs - * @return */ public static long getFakeCurrentTime(SharedPreferences prefs) { return convertToFakeTime(System.currentTimeMillis(), prefs, true); @@ -413,10 +390,6 @@ public static long getFakeCurrentTime(SharedPreferences prefs) { /** * Modify a time to be earlier/later respecting user-set offsets and * automatic offsets based on time zone. - * - * @param prefs - * @param isCurrentTime - * @return */ public static long convertToFakeTime(long time, SharedPreferences prefs, boolean isCurrentTime) { boolean pacificInDaylight = TimeZone.getTimeZone(TIMEZONE_US_PACIFIC).inDaylightTime( @@ -485,8 +458,7 @@ public static long buildEpisodeAirtime(String tvdbDateString, long airtime) { dayCal.set(Calendar.MILLISECOND, 0); } - long episodeAirtime = dayCal.getTimeInMillis(); - return episodeAirtime; + return dayCal.getTimeInMillis(); } catch (ParseException e) { // we just return -1 then @@ -544,9 +516,6 @@ public static String getEpisodeNumber(SharedPreferences prefs, int season, /** * Splits the string and reassembles it, separating the items with commas. * The given object is returned with the new string. - * - * @param tvdbstring - * @return */ public static String splitAndKitTVDBStrings(String tvdbstring) { if (tvdbstring == null) { @@ -566,7 +535,6 @@ public static String splitAndKitTVDBStrings(String tvdbstring) { /** * Get the currently set episode sorting from settings. * - * @param context * @return a EpisodeSorting enum set to the current sorting */ public static EpisodeSorting getEpisodeSorting(Context context) { @@ -659,10 +627,6 @@ public static String getVersion(Context context) { /** * Put the TVDb season number in, get a full 'Season X' or 'Special * Episodes' string out. - * - * @param context - * @param seasonNumber - * @return */ public static String getSeasonString(Context context, int seasonNumber) { if (seasonNumber == 0) { @@ -836,11 +800,9 @@ public static void setPosterBackground(ImageView background, String posterPath, /** * Sets the global app theme variable. Applied by all activities once they * are created. - * - * @param themeIndex */ public static synchronized void updateTheme(String themeIndex) { - int theme = Integer.valueOf((String) themeIndex); + int theme = Integer.valueOf(themeIndex); switch (theme) { case 1: SeriesGuidePreferences.THEME = R.style.ICSBaseTheme; @@ -873,9 +835,6 @@ public static void trackExceptionAndLog(Context context, String tag, Exception e /** * Returns true if we are on a user-permitted and connected internet * connection. - * - * @param context - * @return */ public static boolean isAllowedConnection(Context context) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); From 1d9db0dc1a01e9f0210a31383af49ed6d93c8f9c Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Fri, 6 Sep 2013 12:02:13 +0200 Subject: [PATCH 053/157] Remove unused method. --- .../src/com/battlelancer/seriesguide/util/Utils.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java index fd382dddec..3a897f005b 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java @@ -847,16 +847,6 @@ public static boolean isAllowedConnection(Context context) { } } - /** - * Creates the tag of a {@link ViewPager} fragment. - * - * @param viewId of the {@link ViewPager} - * @param id of the fragment, often the position - */ - public static String makeViewPagerFragmentName(int viewId, long id) { - return "android:switcher:" + viewId + ":" + id; - } - /** * Launches {@link BillingActivity} and notifies that something is only * available with the X subscription. From 9b0a3a39b1d1a655b3dc697f71a3411ba6e96fbf Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Fri, 6 Sep 2013 12:04:47 +0200 Subject: [PATCH 054/157] Remove unneeded Context param from tracking methods. Truly odd why this was included in the first place...? --- .../dataliberation/JsonExportTask.java | 8 ++++---- .../dataliberation/JsonImportTask.java | 8 ++++---- .../seriesguide/getglueapi/GetGlue.java | 20 +++++++++---------- .../getglueapi/GetGlueAuthActivity.java | 16 +++++++-------- .../loaders/GetGlueObjectLoader.java | 10 +++++----- .../loaders/TmdbMovieDetailsLoader.java | 4 ++-- .../seriesguide/loaders/TmdbMoviesLoader.java | 4 ++-- .../loaders/TraktCommentsLoader.java | 4 ++-- .../loaders/TraktMoviesWatchlistLoader.java | 4 ++-- .../seriesguide/sync/SgSyncAdapter.java | 14 ++++++------- .../seriesguide/util/SimpleCrypto.java | 8 ++++---- .../seriesguide/util/TraktSync.java | 12 +++++------ .../seriesguide/util/TraktTask.java | 4 ++-- .../battlelancer/seriesguide/util/Utils.java | 11 +++++----- .../com/battlelancer/thetvdbapi/TheTVDB.java | 12 +++++------ 15 files changed, 69 insertions(+), 70 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonExportTask.java b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonExportTask.java index 73193c547a..fd2f334dcb 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonExportTask.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonExportTask.java @@ -151,11 +151,11 @@ protected Integer doInBackground(Void... params) { } catch (JsonIOException e) { // Only catch IO exception as we want to know if exporting fails due // to a JsonSyntaxException - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } catch (IOException e) { // Backup failed - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } finally { shows.close(); @@ -189,10 +189,10 @@ protected Integer doInBackground(Void... params) { } catch (JsonIOException e) { // Only catch IO exception as we want to know if exporting fails due // to a JsonSyntaxException - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } catch (IOException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } finally { lists.close(); diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java index 5be1131649..92294d704a 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java @@ -123,10 +123,10 @@ protected Integer doInBackground(Void... params) { } catch (JsonParseException e) { // the given Json might not be valid or unreadable - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } catch (IOException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } @@ -158,10 +158,10 @@ protected Integer doInBackground(Void... params) { } catch (JsonParseException e) { // the given Json might not be valid or unreadable - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } catch (IOException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return ERROR; } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlue.java b/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlue.java index 4376f9a4be..b6e901a8d0 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlue.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlue.java @@ -160,20 +160,20 @@ protected Integer doInBackground(Void... params) { } } } catch (ClientProtocolException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (IOException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (IllegalStateException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (XmlPullParserException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } finally { if (responseIn != null) { try { responseIn.close(); } catch (IOException e) { Log.w(TAG, e); - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } } } @@ -221,15 +221,15 @@ public static HttpURLConnection buildGetGlueRequest(String url, Context context) consumer.sign(request); return request; } catch (OAuthMessageSignerException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (OAuthExpectationFailedException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (OAuthCommunicationException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (IOException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (IllegalArgumentException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } return null; } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlueAuthActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlueAuthActivity.java index 6bdb80b7f5..5d910a3c7b 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlueAuthActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/getglueapi/GetGlueAuthActivity.java @@ -160,13 +160,13 @@ protected Integer doInBackground(Uri... params) { Log.i(TAG, "OAuth - Access Token Retrieved"); return AUTH_SUCCESS; } catch (OAuthMessageSignerException e) { - Utils.trackExceptionAndLog(getApplicationContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (OAuthNotAuthorizedException e) { - Utils.trackExceptionAndLog(getApplicationContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (OAuthExpectationFailedException e) { - Utils.trackExceptionAndLog(getApplicationContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (OAuthCommunicationException e) { - Utils.trackExceptionAndLog(getApplicationContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } return AUTH_FAILED; @@ -218,16 +218,16 @@ protected String doInBackground(Void... params) { Log.i(TAG, "Popping a browser with the authorize URL"); publishProgress(authUrl); } catch (OAuthMessageSignerException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return e.getMessage(); } catch (OAuthNotAuthorizedException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return e.getMessage(); } catch (OAuthExpectationFailedException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return e.getMessage(); } catch (OAuthCommunicationException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return e.getMessage(); } return null; diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/GetGlueObjectLoader.java b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/GetGlueObjectLoader.java index 9a867ca652..eb3ad192ac 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/GetGlueObjectLoader.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/GetGlueObjectLoader.java @@ -65,19 +65,19 @@ public List loadInBackground() { // getGlueXmlParser.parseError(responseIn); } } catch (ClientProtocolException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (IOException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (IllegalStateException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (XmlPullParserException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } finally { if (responseIn != null) { try { responseIn.close(); } catch (IOException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMovieDetailsLoader.java b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMovieDetailsLoader.java index 7f932d810a..ba9e82ce73 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMovieDetailsLoader.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMovieDetailsLoader.java @@ -57,10 +57,10 @@ public MovieDetails loadInBackground() { details.casts(manager.moviesService().casts(mTmdbId).fire()); return details; } catch (TmdbException e) { - Utils.trackException(getContext(), TAG, e); + Utils.trackException(TAG, e); Log.w(TAG, e); } catch (ApiException e) { - Utils.trackException(getContext(), TAG, e); + Utils.trackException(TAG, e); Log.w(TAG, e); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMoviesLoader.java b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMoviesLoader.java index a36cf0b2cd..19e831a25f 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMoviesLoader.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TmdbMoviesLoader.java @@ -61,10 +61,10 @@ public List loadInBackground() { return page.results; } } catch (TmdbException e) { - Utils.trackException(getContext(), TAG, e); + Utils.trackException(TAG, e); Log.w(TAG, e); } catch (ApiException e) { - Utils.trackException(getContext(), TAG, e); + Utils.trackException(TAG, e); Log.w(TAG, e); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktCommentsLoader.java b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktCommentsLoader.java index f87304cb23..9585d170fd 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktCommentsLoader.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktCommentsLoader.java @@ -70,10 +70,10 @@ public List loadInBackground() { } } catch (TraktException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); return null; } catch (ApiException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); return null; } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktMoviesWatchlistLoader.java b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktMoviesWatchlistLoader.java index b98ae6b47f..2cd7e96445 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktMoviesWatchlistLoader.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/loaders/TraktMoviesWatchlistLoader.java @@ -33,9 +33,9 @@ public List loadInBackground() { .watchlistMovies(ServiceUtils.getTraktUsername(getContext())) .fire(); } catch (TraktException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (ApiException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } return null; diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java b/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java index 4ea5993a8c..197d0286c8 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java @@ -231,7 +231,7 @@ public void onPerformSync(Account account, Bundle extras, String authority, if (itry == 1) { // failed twice, report error resultCode = UpdateResult.INCOMPLETE; - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } } } @@ -267,9 +267,9 @@ public void onPerformSync(Account account, Bundle extras, String authority, config.images.base_url).commit(); } } catch (TmdbException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (ApiException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); } // validate trakt credentials @@ -389,10 +389,10 @@ private UpdateResult getTraktActivity(long currentTime) { .minimal() .timestamp(startTimeTrakt).fire(); } catch (TraktException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); return UpdateResult.INCOMPLETE; } catch (ApiException e) { - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); return UpdateResult.INCOMPLETE; } @@ -484,12 +484,12 @@ private UpdateResult getTraktActivity(long currentTime) { .applyBatch(SeriesGuideApplication.CONTENT_AUTHORITY, batch); } catch (RemoteException e) { // Failed binder transactions aren't recoverable - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); throw new RuntimeException("Problem applying batch operation", e); } catch (OperationApplicationException e) { // Failures like constraint violation aren't // recoverable - Utils.trackExceptionAndLog(getContext(), TAG, e); + Utils.trackExceptionAndLog(TAG, e); throw new RuntimeException("Problem applying batch operation", e); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/SimpleCrypto.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/SimpleCrypto.java index 8ce7e0cdbf..932808217a 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/SimpleCrypto.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/SimpleCrypto.java @@ -59,9 +59,9 @@ public static String encrypt(String cleartext, Context context) { byte[] result = encrypt(key, cleartext.getBytes()); return toHex(result); } catch (GeneralSecurityException e) { - Utils.trackExceptionAndLog(context, TAG + ".encrypt()", e); + Utils.trackExceptionAndLog(TAG + ".encrypt()", e); } catch (IOException e) { - Utils.trackExceptionAndLog(context, TAG + ".encrypt()", e); + Utils.trackExceptionAndLog(TAG + ".encrypt()", e); } return null; } @@ -77,9 +77,9 @@ public static String decrypt(String encrypted, Context context) { byte[] result = decrypt(key, enc); return new String(result); } catch (GeneralSecurityException e) { - Utils.trackExceptionAndLog(context, TAG + ".decrypt()", e); + Utils.trackExceptionAndLog(TAG + ".decrypt()", e); } catch (IOException e) { - Utils.trackExceptionAndLog(context, TAG + ".decrypt()", e); + Utils.trackExceptionAndLog(TAG + ".decrypt()", e); } return null; } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktSync.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktSync.java index 701f0c1341..31d408a27a 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktSync.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktSync.java @@ -114,10 +114,10 @@ private Integer syncToSeriesGuide(ServiceManager manager, String username) { shows = manager.userService().libraryShowsWatched(username).extended(ExtendedParam.Min) .fire(); } catch (TraktException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return FAILED_API; } catch (ApiException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return FAILED_API; } @@ -186,12 +186,12 @@ private Integer syncToSeriesGuide(ServiceManager manager, String username) { batch); } catch (RemoteException e) { // Failed binder transactions aren't recoverable - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); throw new RuntimeException("Problem applying batch operation", e); } catch (OperationApplicationException e) { // Failures like constraint violation aren't // recoverable - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); throw new RuntimeException("Problem applying batch operation", e); } @@ -281,10 +281,10 @@ private Integer syncToTrakt(ServiceManager manager) { builderUnseen.fire(); } } catch (TraktException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return FAILED_API; } catch (ApiException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); return FAILED_API; } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktTask.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktTask.java index d62adf619c..ff4aaf9b16 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktTask.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/TraktTask.java @@ -344,13 +344,13 @@ protected Response doInBackground(Void... params) { return r; } catch (TraktException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); Response r = new Response(); r.status = TraktStatus.FAILURE; r.error = mContext.getString(R.string.trakt_error_general); return r; } catch (ApiException e) { - Utils.trackExceptionAndLog(mContext, TAG, e); + Utils.trackExceptionAndLog(TAG, e); Response r = new Response(); r.status = TraktStatus.FAILURE; r.error = mContext.getString(R.string.trakt_error_general); diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java index 3a897f005b..3ea8eef5c2 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/Utils.java @@ -30,7 +30,6 @@ import android.content.res.Resources; import android.database.Cursor; import android.preference.PreferenceManager; -import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.text.format.DateFormat; import android.text.format.DateUtils; @@ -670,9 +669,9 @@ public static String toSHA1(Context context, String message) { return result; } catch (NoSuchAlgorithmException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (UnsupportedEncodingException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } return null; } @@ -819,7 +818,7 @@ public static synchronized void updateTheme(String themeIndex) { /** * Tracks an exception using the Google Analytics {@link EasyTracker}. */ - public static void trackException(Context context, String tag, Exception e) { + public static void trackException(String tag, Exception e) { EasyTracker.getTracker().sendException(tag + ": " + e.getMessage(), false); } @@ -827,8 +826,8 @@ public static void trackException(Context context, String tag, Exception e) { * Tracks an exception using the Google Analytics {@link EasyTracker} and * the local log. */ - public static void trackExceptionAndLog(Context context, String tag, Exception e) { - trackException(context, tag, e); + public static void trackExceptionAndLog(String tag, Exception e) { + trackException(tag, e); Log.w(tag, e); } diff --git a/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java b/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java index 97aa216ba4..8096330d13 100644 --- a/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java +++ b/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java @@ -364,9 +364,9 @@ private static Show fetchShow(String showTvdbId, String language, Context contex try { traktShow = manager.showService().summary(showTvdbId).fire(); } catch (TraktException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } catch (ApiException e) { - Utils.trackExceptionAndLog(context, TAG, e); + Utils.trackExceptionAndLog(TAG, e); } } @@ -793,20 +793,20 @@ private static Bitmap downloadBitmap(String url, Context context) { } } catch (IOException e) { Log.w(TAG, "I/O error retrieving bitmap from " + url, e); - Utils.trackException(context, TAG + " I/O error retrieving bitmap from " + url, e); + Utils.trackException(TAG + " I/O error retrieving bitmap from " + url, e); } catch (IllegalStateException e) { Log.w(TAG, "Incorrect URL: " + url); - Utils.trackException(context, TAG + " Incorrect URL " + url, e); + Utils.trackException(TAG + " Incorrect URL " + url, e); } catch (Exception e) { Log.w(TAG, "Error while retrieving bitmap from " + url, e); - Utils.trackException(context, TAG + " Error while retrieving bitmap from " + url, e); + Utils.trackException(TAG + " Error while retrieving bitmap from " + url, e); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { Log.w(TAG, "I/O error while retrieving bitmap from " + url, e); - Utils.trackException(context, TAG + " I/O error retrieving bitmap from " + url, + Utils.trackException(TAG + " I/O error retrieving bitmap from " + url, e); } } From 0b741e058f746ffdb9407dff704a2de08c1c451c Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Fri, 6 Sep 2013 16:39:30 +0200 Subject: [PATCH 055/157] Include 2.0 snapshot of StickyGridHeaders, fixes layout issues, black bar. --- SeriesGuide/build.gradle | 1 + SeriesGuide/libs/stickygridheaders-1.0.1.jar | Bin 39171 -> 0 bytes .../stickygridheaders/AndroidManifest.xml | 10 + libraries/stickygridheaders/build.gradle | 28 + libraries/stickygridheaders/pom.xml | 24 + .../stickygridheaders/project.properties | 15 + libraries/stickygridheaders/res/.gitignore | 0 .../StickyGridHeadersBaseAdapter.java | 67 + .../StickyGridHeadersBaseAdapterWrapper.java | 462 +++++++ .../StickyGridHeadersGridView.java | 1081 +++++++++++++++++ .../StickyGridHeadersListAdapterWrapper.java | 64 + .../StickyGridHeadersSimpleAdapter.java | 62 + ...StickyGridHeadersSimpleAdapterWrapper.java | 136 +++ .../StickyGridHeadersSimpleArrayAdapter.java | 145 +++ settings.gradle | 1 + 15 files changed, 2096 insertions(+) delete mode 100644 SeriesGuide/libs/stickygridheaders-1.0.1.jar create mode 100644 libraries/stickygridheaders/AndroidManifest.xml create mode 100644 libraries/stickygridheaders/build.gradle create mode 100644 libraries/stickygridheaders/pom.xml create mode 100644 libraries/stickygridheaders/project.properties create mode 100644 libraries/stickygridheaders/res/.gitignore create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapter.java create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapterWrapper.java create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersListAdapterWrapper.java create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapter.java create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapterWrapper.java create mode 100644 libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleArrayAdapter.java diff --git a/SeriesGuide/build.gradle b/SeriesGuide/build.gradle index 9de0b0f872..95176f78b1 100644 --- a/SeriesGuide/build.gradle +++ b/SeriesGuide/build.gradle @@ -5,6 +5,7 @@ dependencies { compile project(':libraries:android-menudrawer') compile project(':libraries:androidutils') compile project(':libraries:pagerslidingtabstrip') + compile project(':libraries:stickygridheaders') compile fileTree(dir: 'libs', include: '*.jar') compile 'com.android.support:support-v4:18.0.+' } diff --git a/SeriesGuide/libs/stickygridheaders-1.0.1.jar b/SeriesGuide/libs/stickygridheaders-1.0.1.jar deleted file mode 100644 index 721c7c0fbeb71890d32349bc2fe4bdf4200e0b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39171 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

TgprF1qs; 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 diff --git a/libraries/stickygridheaders/AndroidManifest.xml b/libraries/stickygridheaders/AndroidManifest.xml new file mode 100644 index 0000000000..a9b38b1c1c --- /dev/null +++ b/libraries/stickygridheaders/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/libraries/stickygridheaders/build.gradle b/libraries/stickygridheaders/build.gradle new file mode 100644 index 0000000000..78237e9d42 --- /dev/null +++ b/libraries/stickygridheaders/build.gradle @@ -0,0 +1,28 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:0.5.+' + } +} +apply plugin: 'android-library' + +android { + compileSdkVersion 18 + buildToolsVersion "18.0.1" + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = ['src'] + resources.srcDirs = ['src'] + aidl.srcDirs = ['src'] + renderscript.srcDirs = ['src'] + res.srcDirs = ['res'] + assets.srcDirs = ['assets'] + } + + instrumentTest.setRoot('tests') + } +} diff --git a/libraries/stickygridheaders/pom.xml b/libraries/stickygridheaders/pom.xml new file mode 100644 index 0000000000..70b1a5fb81 --- /dev/null +++ b/libraries/stickygridheaders/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + stickygridheader-parent + com.tonicartos + 2.0-SNAPSHOT + + stickygridheaders + StickyGridHeaders + jar + + + + com.google.android + android + provided + + + + + src + + diff --git a/libraries/stickygridheaders/project.properties b/libraries/stickygridheaders/project.properties new file mode 100644 index 0000000000..1b8c5a340e --- /dev/null +++ b/libraries/stickygridheaders/project.properties @@ -0,0 +1,15 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-18 +android.library=true diff --git a/libraries/stickygridheaders/res/.gitignore b/libraries/stickygridheaders/res/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapter.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapter.java new file mode 100644 index 0000000000..afa3704e40 --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapter.java @@ -0,0 +1,67 @@ +/* + Copyright 2013 Tonic Artos + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.tonicartos.widget.stickygridheaders; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListAdapter; + +/** + * Base adapter interface for StickyGridHeadersGridView. The adapter expects two + * sets of data, items, and headers. Implement this interface to provide an + * optimised method for generating the header data set. Otherwise see + * {@link StickyGridHeadersSimpleAdapter} for a solution which will + * auto-generate the set of headers. + * + * @author Tonic Artos + */ +public interface StickyGridHeadersBaseAdapter extends ListAdapter { + /** + * Get the number of items with a given header. + * + * @param section + * The header in the adapter's data set. + * @return The number of items for the specified header. + */ + public int getCountForHeader(int header); + + /** + * Get the number of headers in the adapter's data set. + * + * @return Number of headers. + */ + public int getNumHeaders(); + + /** + * Get a View that displays the header data at the specified position in the + * set. You can either create a View manually or inflate it from an XML + * layout file. + * + * @param position + * The position of the header within the adapter's header data + * set. + * @param convertView + * The old view to reuse, if possible. Note: You should check + * that this view is non-null and of an appropriate type before + * using. If it is not possible to convert this view to display + * the correct data, this method can create a new view. + * @param parent + * The parent that this view will eventually be attached to. + * @return A View corresponding to the data at the specified position. + */ + View getHeaderView(int position, View convertView, ViewGroup parent); +} diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapterWrapper.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapterWrapper.java new file mode 100644 index 0000000000..c4e6bd173c --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapterWrapper.java @@ -0,0 +1,462 @@ +/* + Copyright 2013 Tonic Artos + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.tonicartos.widget.stickygridheaders; + +import android.content.Context; +import android.database.DataSetObserver; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; + +/** + * Adapter wrapper to insert extra views and otherwise hack around GridView to + * add sections and headers. + * + * @author Tonic Artos + */ +public class StickyGridHeadersBaseAdapterWrapper extends BaseAdapter { + private static final int sNumViewTypes = 3; + + protected static final int ID_FILLER = -0x02; + + protected static final int ID_HEADER = -0x01; + + protected static final int ID_HEADER_FILLER = -0x03; + + protected static final int POSITION_FILLER = -0x01; + + protected static final int POSITION_HEADER = -0x02; + + protected static final int POSITION_HEADER_FILLER = -0x03; + + protected static final int VIEW_TYPE_FILLER = 0x00; + + protected static final int VIEW_TYPE_HEADER = 0x01; + + protected static final int VIEW_TYPE_HEADER_FILLER = 0x02; + + private final StickyGridHeadersBaseAdapter mDelegate; + + private final Context mContext; + + private int mCount; + + private DataSetObserver mDataSetObserver = new DataSetObserver() { + @Override + public void onChanged() { + updateCount(); + notifyDataSetChanged(); + } + + @Override + public void onInvalidated() { + mCounted = false; + notifyDataSetInvalidated(); + } + }; + + private StickyGridHeadersGridView mGridView; + + private int mNumColumns = 1; + + private View mLastViewSeen; + + private View mLastHeaderViewSeen; + + private boolean mCounted = false; + + public StickyGridHeadersBaseAdapterWrapper(Context context, StickyGridHeadersGridView gridView, + StickyGridHeadersBaseAdapter delegate) { + mContext = context; + mDelegate = delegate; + mGridView = gridView; + delegate.registerDataSetObserver(mDataSetObserver); + } + + @Override + public boolean areAllItemsEnabled() { + return false; + } + + @Override + public int getCount() { + if (mCounted) { + return mCount; + } + mCount = 0; + int numHeaders = mDelegate.getNumHeaders(); + if (numHeaders == 0) { + mCount = mDelegate.getCount(); + mCounted = true; + return mCount; + } + + for (int i = 0; i < numHeaders; i++) { + // Pad count with space for header and trailing filler in header + // group. + mCount += mDelegate.getCountForHeader(i) + unFilledSpacesInHeaderGroup(i) + mNumColumns; + } + mCounted = true; + return mCount; + } + + /** + * Get the data item associated with the specified position in the data set. + *

+ * Since this wrapper inserts fake entries to fill out items grouped by + * header and also spaces to insert headers into some positions will return + * null. + *

+ * + * @param position Position of the item whose data we want within the + * adapter's data set. + * @return The data at the specified position. + */ + @Override + public Object getItem(int position) throws ArrayIndexOutOfBoundsException { + Position adapterPosition = translatePosition(position); + if (adapterPosition.mPosition == POSITION_FILLER + || adapterPosition.mPosition == POSITION_HEADER) { + // Fake entry in view. + return null; + } + + return mDelegate.getItem(adapterPosition.mPosition); + } + + @Override + public long getItemId(int position) { + Position adapterPosition = translatePosition(position); + if (adapterPosition.mPosition == POSITION_HEADER) { + return ID_HEADER; + } + if (adapterPosition.mPosition == POSITION_FILLER) { + return ID_FILLER; + } + if (adapterPosition.mPosition == POSITION_HEADER_FILLER) { + return ID_HEADER_FILLER; + } + return mDelegate.getItemId(adapterPosition.mPosition); + } + + @Override + public int getItemViewType(int position) { + Position adapterPosition = translatePosition(position); + if (adapterPosition.mPosition == POSITION_HEADER) { + return VIEW_TYPE_HEADER; + } + if (adapterPosition.mPosition == POSITION_FILLER) { + return VIEW_TYPE_FILLER; + } + if (adapterPosition.mPosition == POSITION_HEADER_FILLER) { + return VIEW_TYPE_HEADER_FILLER; + } + int itemViewType = mDelegate.getItemViewType(adapterPosition.mPosition); + if (itemViewType == IGNORE_ITEM_VIEW_TYPE) { + return itemViewType; + } + return itemViewType + sNumViewTypes; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Position adapterPosition = translatePosition(position); + if (adapterPosition.mPosition == POSITION_HEADER) { + HeaderFillerView v = getHeaderFillerView(adapterPosition.mHeader, convertView, parent); + View view = mDelegate.getHeaderView(adapterPosition.mHeader, (View)v.getTag(), parent); + v.setTag(view); + v.removeAllViews(); + v.addView(view); + v.setVisibility(View.GONE); + convertView = v; + mLastHeaderViewSeen = v; + } else if (adapterPosition.mPosition == POSITION_HEADER_FILLER) { + convertView = getFillerView(convertView, parent, mLastHeaderViewSeen); + } else if (adapterPosition.mPosition == POSITION_FILLER) { + convertView = getFillerView(convertView, parent, mLastViewSeen); + } else { + convertView = mDelegate.getView(adapterPosition.mPosition, convertView, parent); + mLastViewSeen = convertView; + } + + return convertView; + } + + /** + * @return the adapter wrapped by this adapter. + */ + public StickyGridHeadersBaseAdapter getWrappedAdapter() { + return mDelegate; + } + + @Override + public int getViewTypeCount() { + return mDelegate.getViewTypeCount() + sNumViewTypes; + } + + @Override + public boolean hasStableIds() { + return mDelegate.hasStableIds(); + } + + @Override + public boolean isEmpty() { + return mDelegate.isEmpty(); + } + + @Override + public boolean isEnabled(int position) { + Position adapterPosition = translatePosition(position); + if (adapterPosition.mPosition == POSITION_FILLER + || adapterPosition.mPosition == POSITION_HEADER) { + return false; + } + + return mDelegate.isEnabled(adapterPosition.mPosition); + } + + @Override + public void registerDataSetObserver(DataSetObserver observer) { + mDelegate.registerDataSetObserver(observer); + } + + public void setNumColumns(int numColumns) { + mNumColumns = numColumns; + mCounted = false; + // notifyDataSetChanged(); + } + + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + mDelegate.unregisterDataSetObserver(observer); + } + + private FillerView getFillerView(View convertView, ViewGroup parent, View lastViewSeen) { + FillerView fillerView = (FillerView)convertView; + if (fillerView == null) { + fillerView = new FillerView(mContext); + } + + fillerView.setMeasureTarget(lastViewSeen); + + return fillerView; + } + + private HeaderFillerView getHeaderFillerView(int headerPosition, View convertView, + ViewGroup parent) { + HeaderFillerView headerFillerView = (HeaderFillerView)convertView; + if (headerFillerView == null) { + headerFillerView = new HeaderFillerView(mContext); + } + + return headerFillerView; + } + + /** + * Counts the number of items that would be need to fill out the last row in + * the group of items with the given header. + * + * @param header Header set of items are grouped by. + * @return The count of unfilled spaces in the last row. + */ + private int unFilledSpacesInHeaderGroup(int header) { + int remainder = mDelegate.getCountForHeader(header) % mNumColumns; + return remainder == 0 ? 0 : mNumColumns - remainder; + } + + protected long getHeaderId(int position) { + return translatePosition(position).mHeader; + } + + protected View getHeaderView(int position, View convertView, ViewGroup parent) { + if (mDelegate.getNumHeaders() == 0) { + return null; + } + + return mDelegate.getHeaderView(translatePosition(position).mHeader, convertView, parent); + } + + protected Position translatePosition(int position) { + int numHeaders = mDelegate.getNumHeaders(); + if (numHeaders == 0) { + if (position >= mDelegate.getCount()) { + return new Position(POSITION_FILLER, 0); + } + return new Position(position, 0); + } + + // Translate GridView position to Adapter position. + int adapterPosition = position; + int place = position; + int i; + + for (i = 0; i < numHeaders; i++) { + int sectionCount = mDelegate.getCountForHeader(i); + + // Skip past fake items making space for header in front of + // sections. + if (place == 0) { + // Position is first column where header will be. + return new Position(POSITION_HEADER, i); + } + place -= mNumColumns; + if (place < 0) { + // Position is a fake so return null. + return new Position(POSITION_HEADER_FILLER, i); + } + adapterPosition -= mNumColumns; + + if (place < sectionCount) { + return new Position(adapterPosition, i); + } + + // Skip past section end of section row filler; + int filler = unFilledSpacesInHeaderGroup(i); + adapterPosition -= filler; + place -= sectionCount + filler; + + if (place < 0) { + // Position is a fake so return null. + return new Position(POSITION_FILLER, i); + } + } + + // Position is a fake. + return new Position(POSITION_FILLER, i); + } + + protected void updateCount() { + mCount = 0; + int numHeaders = mDelegate.getNumHeaders(); + if (numHeaders == 0) { + mCount = mDelegate.getCount(); + mCounted = true; + return; + } + + for (int i = 0; i < numHeaders; i++) { + mCount += mDelegate.getCountForHeader(i) + mNumColumns; + } + mCounted = true; + } + + /** + * Simple view to fill space in grid view. + * + * @author Tonic Artos + */ + protected class FillerView extends View { + private View mMeasureTarget; + + public FillerView(Context context) { + super(context); + } + + public void setMeasureTarget(View lastViewSeen) { + mMeasureTarget = lastViewSeen; + } + + public FillerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public FillerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + heightMeasureSpec = MeasureSpec.makeMeasureSpec(mMeasureTarget.getMeasuredHeight(), + MeasureSpec.EXACTLY); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + + /** + * A view to hold the section header and measure the header row height + * correctly. + * + * @author Tonic Artos + */ + protected class HeaderFillerView extends FrameLayout { + private int mHeaderId; + + public HeaderFillerView(Context context) { + super(context); + } + + public HeaderFillerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public HeaderFillerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public int getHeaderId() { + return mHeaderId; + } + + /** + * Set the adapter id for this header so we can easily pull it later. + */ + public void setHeaderId(int headerId) { + mHeaderId = headerId; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + View v = (View)getTag(); + android.view.ViewGroup.LayoutParams params = v.getLayoutParams(); + if (params == null) { + params = generateDefaultLayoutParams(); + v.setLayoutParams(params); + } + if (v.getVisibility() != View.GONE) { + int heightSpec = getChildMeasureSpec( + MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 0, params.height); + int widthSpec = getChildMeasureSpec( + MeasureSpec.makeMeasureSpec(mGridView.getWidth(), MeasureSpec.EXACTLY), 0, + params.width); + v.measure(widthSpec, heightSpec); + } + setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), v.getMeasuredHeight()); + } + + @Override + protected LayoutParams generateDefaultLayoutParams() { + return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + } + } + + protected class HeaderHolder { + protected View mHeaderView; + } + + protected class Position { + protected int mHeader; + + protected int mPosition; + + protected Position(int position, int header) { + mPosition = position; + mHeader = header; + } + } +} diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java new file mode 100644 index 0000000000..092260d087 --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java @@ -0,0 +1,1081 @@ +/* + Copyright 2013 Tonic Artos + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.tonicartos.widget.stickygridheaders; + +import com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper.HeaderFillerView; +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.database.DataSetObserver; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.os.Build; +import android.os.Handler; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.view.HapticFeedbackConstants; +import android.view.MotionEvent; +import android.view.SoundEffectConstants; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.widget.AbsListView; +import android.widget.AbsListView.OnScrollListener; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.GridView; +import android.widget.ListAdapter; + +/** + * GridView that displays items in sections with headers that stick to the top + * of the view. + * + * @author Tonic Artos, Emil Sjölander + */ +public class StickyGridHeadersGridView extends GridView implements OnScrollListener, + OnItemClickListener, OnItemSelectedListener, OnItemLongClickListener { + private static final int MATCHED_STICKIED_HEADER = -2; + + private static final int NO_MATCHED_HEADER = -1; + + protected static final int TOUCH_MODE_DONE_WAITING = 2; + + protected static final int TOUCH_MODE_DOWN = 0; + + protected static final int TOUCH_MODE_FINISHED_LONG_PRESS = -2; + + protected static final int TOUCH_MODE_REST = -1; + + protected static final int TOUCH_MODE_TAP = 1; + + public CheckForHeaderLongPress mPendingCheckForLongPress; + + public CheckForHeaderTap mPendingCheckForTap; + + private boolean mAreHeadersSticky = true; + + private final Rect mClippingRect = new Rect(); + + private boolean mClippingToPadding; + + private boolean mClipToPaddingHasBeenSet; + + private int mColumnWidth; + + private long mCurrentHeaderId = -1; + + private DataSetObserver mDataSetObserver = new DataSetObserver() { + @Override + public void onChanged() { + reset(); + } + + @Override + public void onInvalidated() { + reset(); + } + }; + + private int mHeaderBottomPosition; + + private int mHorizontalSpacing; + + private float mMotionY; + + /** + * Must be set from the wrapped GridView in the constructor. + */ + private int mNumColumns; + + private boolean mNumColumnsSet; + + private int mNumMeasuredColumns = 1; + + private OnHeaderClickListener mOnHeaderClickListener; + + private OnHeaderLongClickListener mOnHeaderLongClickListener; + + private OnItemClickListener mOnItemClickListener; + + private OnItemLongClickListener mOnItemLongClickListener; + + private OnItemSelectedListener mOnItemSelectedListener; + + private PerformHeaderClick mPerformHeaderClick; + + private OnScrollListener mScrollListener; + + private int mScrollState = SCROLL_STATE_IDLE; + + private View mStickiedHeader; + + private Runnable mTouchModeReset; + + private int mTouchSlop; + + private int mVerticalSpacing; + + protected StickyGridHeadersBaseAdapterWrapper mAdapter; + + protected boolean mDataChanged; + + protected int mMotionHeaderPosition; + + protected int mTouchMode; + + private boolean mMaskStickyHeaderRegion = true; + + private boolean mHeadersIgnorePadding; + + boolean mHeaderChildBeingPressed = false; + + public StickyGridHeadersGridView(Context context) { + this(context, null); + } + + public StickyGridHeadersGridView(Context context, AttributeSet attrs) { + this(context, attrs, android.R.attr.gridViewStyle); + } + + public StickyGridHeadersGridView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + super.setOnScrollListener(this); + setVerticalFadingEdgeEnabled(false); + + if (!mNumColumnsSet) { + mNumColumns = AUTO_FIT; + } + + ViewConfiguration vc = ViewConfiguration.get(context); + mTouchSlop = vc.getScaledTouchSlop(); + } + + public boolean areHeadersSticky() { + return mAreHeadersSticky; + } + + /** + * Gets the header at an item position. However, the position must be that + * of a HeaderFiller. + * + * @param position Position of HeaderFiller. + * @return Header View wrapped in HeaderFiller or null if no header was + * found. + */ + public View getHeaderAt(int position) { + if (position == MATCHED_STICKIED_HEADER) { + return mStickiedHeader; + } + + try { + return (View)getChildAt(position).getTag(); + } catch (Exception e) { + } + return null; + } + + /** + * Get the currently stickied header. + * + * @return Current stickied header. + */ + public View getStickiedHeader() { + return mStickiedHeader; + } + + public boolean getStickyHeaderIsTranscluent() { + return !mMaskStickyHeaderRegion; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + mOnItemClickListener.onItemClick(parent, view, + mAdapter.translatePosition(position).mPosition, id); + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + return mOnItemLongClickListener.onItemLongClick(parent, view, + mAdapter.translatePosition(position).mPosition, id); + } + + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + mOnItemSelectedListener.onItemSelected(parent, view, + mAdapter.translatePosition(position).mPosition, id); + } + + @Override + public void onNothingSelected(AdapterView parent) { + mOnItemSelectedListener.onNothingSelected(parent); + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState ss = (SavedState)state; + + super.onRestoreInstanceState(ss.getSuperState()); + mAreHeadersSticky = ss.areHeadersSticky; + + requestLayout(); + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + + SavedState ss = new SavedState(superState); + ss.areHeadersSticky = mAreHeadersSticky; + return ss; + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + if (mScrollListener != null) { + mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { + scrollChanged(firstVisibleItem); + } + } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + if (mScrollListener != null) { + mScrollListener.onScrollStateChanged(view, scrollState); + } + + mScrollState = scrollState; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + final int action = ev.getAction(); + if (mHeaderChildBeingPressed) { + View tempHeader = getHeaderAt(mMotionHeaderPosition); + if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { + mMotionHeaderPosition = NO_MATCHED_HEADER; + mHeaderChildBeingPressed = false; + } + if (tempHeader != null) { + tempHeader.dispatchTouchEvent(ev); + tempHeader.invalidate(); + invalidate(0, tempHeader.getTop(), getWidth(), tempHeader.getHeight()); + } + } + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + if (mPendingCheckForTap == null) { + mPendingCheckForTap = new CheckForHeaderTap(); + } + postDelayed(mPendingCheckForTap, ViewConfiguration.getTapTimeout()); + + final int y = (int)ev.getY(); + mMotionY = y; + mMotionHeaderPosition = findMotionHeader(y); + View tempHeader = getHeaderAt(mMotionHeaderPosition); + if (tempHeader != null){ + if (tempHeader.dispatchTouchEvent(ev)) { + mHeaderChildBeingPressed = true; + } + tempHeader.invalidate(); + invalidate(0, tempHeader.getTop(), getWidth(), tempHeader.getHeight()); + } + if (mMotionHeaderPosition == NO_MATCHED_HEADER + || mScrollState == SCROLL_STATE_FLING) { + // Don't consume the event and pass it to super because we + // can't handle it yet. + break; + } + mTouchMode = TOUCH_MODE_DOWN; + return true; + case MotionEvent.ACTION_MOVE: + if (mMotionHeaderPosition != NO_MATCHED_HEADER + && Math.abs(ev.getY() - mMotionY) > mTouchSlop) { + // Detected scroll initiation so cancel touch completion on + // header. + mTouchMode = TOUCH_MODE_REST; + if (!mHeaderChildBeingPressed) { + final View header = getHeaderAt(mMotionHeaderPosition); + if (header != null) { + header.setPressed(false); + } + final Handler handler = getHandler(); + if (handler != null) { + handler.removeCallbacks(mPendingCheckForLongPress); + } + mMotionHeaderPosition = NO_MATCHED_HEADER; + } + } + break; + case MotionEvent.ACTION_UP: + if (mTouchMode == TOUCH_MODE_FINISHED_LONG_PRESS) { + return true; + } + if (mTouchMode == TOUCH_MODE_REST || mMotionHeaderPosition == NO_MATCHED_HEADER) { + break; + } + + final View header = getHeaderAt(mMotionHeaderPosition); + if (!mHeaderChildBeingPressed) { + if (header != null && !header.hasFocusable()) { + if (mTouchMode != TOUCH_MODE_DOWN) { + header.setPressed(false); + } + + if (mPerformHeaderClick == null) { + mPerformHeaderClick = new PerformHeaderClick(); + } + + final PerformHeaderClick performHeaderClick = mPerformHeaderClick; + performHeaderClick.mClickMotionPosition = mMotionHeaderPosition; + performHeaderClick.rememberWindowAttachCount(); + + if (mTouchMode != TOUCH_MODE_DOWN || mTouchMode != TOUCH_MODE_TAP) { + final Handler handler = getHandler(); + if (handler != null) { + handler.removeCallbacks(mTouchMode == TOUCH_MODE_DOWN ? mPendingCheckForTap + : mPendingCheckForLongPress); + } + + if (!mDataChanged) { + // Got here so must be a tap. The long press would + // have trigger on the callback handler. Probably. + mTouchMode = TOUCH_MODE_TAP; + header.setPressed(true); + setPressed(true); + if (mTouchModeReset != null) { + removeCallbacks(mTouchModeReset); + } + mTouchModeReset = new Runnable() { + @Override + public void run() { + mTouchMode = TOUCH_MODE_REST; + header.setPressed(false); + setPressed(false); + if (!mDataChanged) { + performHeaderClick.run(); + } + } + }; + postDelayed(mTouchModeReset, + ViewConfiguration.getPressedStateDuration()); + } else { + mTouchMode = TOUCH_MODE_REST; + } + } else if (!mDataChanged) { + performHeaderClick.run(); + } + } + } + mTouchMode = TOUCH_MODE_REST; + return true; + } + return super.onTouchEvent(ev); + } + + public boolean performHeaderClick(View view, long id) { + if (mOnHeaderClickListener != null) { + playSoundEffect(SoundEffectConstants.CLICK); + if (view != null) { + view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); + } + mOnHeaderClickListener.onHeaderClick(this, view, id); + return true; + } + + return false; + } + + public boolean performHeaderLongPress(View view, long id) { + boolean handled = false; + if (mOnHeaderLongClickListener != null) { + handled = mOnHeaderLongClickListener.onHeaderLongClick(this, view, id); + } + + if (handled) { + if (view != null) { + view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_LONG_CLICKED); + } + performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + } + + return handled; + } + + @Override + public void setAdapter(ListAdapter adapter) { + if (mAdapter != null && mDataSetObserver != null) { + mAdapter.unregisterDataSetObserver(mDataSetObserver); + } + + if (!mClipToPaddingHasBeenSet) { + mClippingToPadding = true; + } + + StickyGridHeadersBaseAdapter baseAdapter; + if (adapter instanceof StickyGridHeadersBaseAdapter) { + baseAdapter = (StickyGridHeadersBaseAdapter)adapter; + } else if (adapter instanceof StickyGridHeadersSimpleAdapter) { + // Wrap up simple adapter to auto-generate the data we need. + baseAdapter = new StickyGridHeadersSimpleAdapterWrapper( + (StickyGridHeadersSimpleAdapter)adapter); + } else { + // Wrap up a list adapter so it is an adapter with zero headers. + baseAdapter = new StickyGridHeadersListAdapterWrapper(adapter); + } + + this.mAdapter = new StickyGridHeadersBaseAdapterWrapper(getContext(), this, baseAdapter); + this.mAdapter.registerDataSetObserver(mDataSetObserver); + reset(); + super.setAdapter(this.mAdapter); + } + + public void setAreHeadersSticky(boolean useStickyHeaders) { + if (useStickyHeaders != mAreHeadersSticky) { + mAreHeadersSticky = useStickyHeaders; + requestLayout(); + } + } + + @Override + public void setClipToPadding(boolean clipToPadding) { + super.setClipToPadding(clipToPadding); + mClippingToPadding = clipToPadding; + mClipToPaddingHasBeenSet = true; + } + + @Override + public void setColumnWidth(int columnWidth) { + super.setColumnWidth(columnWidth); + mColumnWidth = columnWidth; + } + + @Override + public void setHorizontalSpacing(int horizontalSpacing) { + super.setHorizontalSpacing(horizontalSpacing); + mHorizontalSpacing = horizontalSpacing; + } + + @Override + public void setNumColumns(int numColumns) { + super.setNumColumns(numColumns); + mNumColumnsSet = true; + this.mNumColumns = numColumns; + if (numColumns != AUTO_FIT && mAdapter != null) { + mAdapter.setNumColumns(numColumns); + } + } + + public void setOnHeaderClickListener(OnHeaderClickListener listener) { + mOnHeaderClickListener = listener; + } + + public void setOnHeaderLongClickListener(OnHeaderLongClickListener listener) { + if (!isLongClickable()) { + setLongClickable(true); + } + mOnHeaderLongClickListener = listener; + } + + @Override + public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener listener) { + this.mOnItemClickListener = listener; + super.setOnItemClickListener(this); + } + + @Override + public void setOnItemLongClickListener( + android.widget.AdapterView.OnItemLongClickListener listener) { + this.mOnItemLongClickListener = listener; + super.setOnItemLongClickListener(this); + } + + @Override + public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener listener) { + this.mOnItemSelectedListener = listener; + super.setOnItemSelectedListener(this); + } + + @Override + public void setOnScrollListener(OnScrollListener listener) { + this.mScrollListener = listener; + } + + public void setStickyHeaderIsTranscluent(boolean isTranscluent) { + mMaskStickyHeaderRegion = !isTranscluent; + } + + @Override + public void setVerticalSpacing(int verticalSpacing) { + super.setVerticalSpacing(verticalSpacing); + mVerticalSpacing = verticalSpacing; + } + + private int findMotionHeader(float y) { + if (mStickiedHeader != null && y <= mStickiedHeader.getBottom()) { + return MATCHED_STICKIED_HEADER; + } + + int vi = 0; + for (int i = getFirstVisiblePosition(); i <= getLastVisiblePosition();) { + long id = getItemIdAtPosition(i); + if (id == StickyGridHeadersBaseAdapterWrapper.ID_HEADER) { + View headerWrapper = getChildAt(vi); + + int bottom = headerWrapper.getBottom(); + int top = headerWrapper.getTop(); + if (y <= bottom && y >= top) { + return vi; + } + } + i += mNumMeasuredColumns; + vi += mNumMeasuredColumns; + } + + return NO_MATCHED_HEADER; + } + + private int getHeaderHeight() { + if (mStickiedHeader != null) { + return mStickiedHeader.getMeasuredHeight(); + } + return 0; + } + + private long headerViewPositionToId(int pos) { + if (pos == MATCHED_STICKIED_HEADER) { + return mCurrentHeaderId; + } + return mAdapter.getHeaderId(getFirstVisiblePosition() + pos); + } + + private void measureHeader() { + if (mStickiedHeader == null) { + return; + } + + int widthMeasureSpec; + if (mHeadersIgnorePadding) { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY); + } else { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth() - getPaddingLeft() + - getPaddingRight(), MeasureSpec.EXACTLY); + } + + int heightMeasureSpec = 0; + + ViewGroup.LayoutParams params = mStickiedHeader.getLayoutParams(); + if (params != null && params.height > 0) { + heightMeasureSpec = MeasureSpec.makeMeasureSpec(params.height, MeasureSpec.EXACTLY); + } else { + heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + } + mStickiedHeader.measure(widthMeasureSpec, heightMeasureSpec); + + if (mHeadersIgnorePadding) { + mStickiedHeader.layout(getLeft(), 0, getRight(), mStickiedHeader.getMeasuredHeight()); + } else { + mStickiedHeader.layout(getLeft() + getPaddingLeft(), 0, getRight() - getPaddingRight(), + mStickiedHeader.getMeasuredHeight()); + } + } + + /** + * If set to true, headers will ignore horizontal padding. + * + * @param b if true, horizontal padding is ignored by headers + */ + public void setHeadersIgnorePadding(boolean b) { + mHeadersIgnorePadding = b; + } + + private void reset() { + mHeaderBottomPosition = 0; + mStickiedHeader = null; + mCurrentHeaderId = INVALID_ROW_ID; + } + + private void scrollChanged(int firstVisibleItem) { + if (mAdapter == null || mAdapter.getCount() == 0 || !mAreHeadersSticky) { + return; + } + + View firstItem = getChildAt(0); + if (firstItem == null) { + return; + } + + long newHeaderId; + int selectedHeaderPosition = firstVisibleItem; + + int beforeRowPosition = firstVisibleItem - mNumMeasuredColumns; + if (beforeRowPosition < 0) { + beforeRowPosition = firstVisibleItem; + } + + int secondRowPosition = firstVisibleItem + mNumMeasuredColumns; + if (secondRowPosition >= mAdapter.getCount()) { + secondRowPosition = firstVisibleItem; + } + + if (mVerticalSpacing == 0) { + newHeaderId = mAdapter.getHeaderId(firstVisibleItem); + } else if (mVerticalSpacing < 0) { + newHeaderId = mAdapter.getHeaderId(firstVisibleItem); + View firstSecondRowView = getChildAt(mNumMeasuredColumns); + if (firstSecondRowView.getTop() <= 0) { + newHeaderId = mAdapter.getHeaderId(secondRowPosition); + selectedHeaderPosition = secondRowPosition; + } else { + newHeaderId = mAdapter.getHeaderId(firstVisibleItem); + } + } else { + int margin = getChildAt(0).getTop(); + if (0 < margin && margin < mVerticalSpacing) { + newHeaderId = mAdapter.getHeaderId(beforeRowPosition); + selectedHeaderPosition = beforeRowPosition; + } else { + newHeaderId = mAdapter.getHeaderId(firstVisibleItem); + } + } + + if (mCurrentHeaderId != newHeaderId) { + mStickiedHeader = mAdapter.getHeaderView(selectedHeaderPosition, mStickiedHeader, this); + measureHeader(); + mCurrentHeaderId = newHeaderId; + } + + final int childCount = getChildCount(); + if (childCount != 0) { + View viewToWatch = null; + int watchingChildDistance = 99999; + + // Find the next header after the stickied one. + for (int i = 0; i < childCount; i += mNumMeasuredColumns) { + View child = super.getChildAt(i); + + int childDistance; + if (mClippingToPadding) { + childDistance = child.getTop() - getPaddingTop(); + } else { + childDistance = child.getTop(); + } + + if (childDistance < 0) { + continue; + } + + if (mAdapter.getItemId(getPositionForView(child)) == StickyGridHeadersBaseAdapterWrapper.ID_HEADER + && childDistance < watchingChildDistance) { + viewToWatch = child; + watchingChildDistance = childDistance; + } + } + + int headerHeight = getHeaderHeight(); + + // Work out where to draw stickied header using synchronised + // scrolling. + if (viewToWatch != null) { + if (firstVisibleItem == 0 && super.getChildAt(0).getTop() > 0 + && !mClippingToPadding) { + mHeaderBottomPosition = 0; + } else { + if (mClippingToPadding) { + mHeaderBottomPosition = Math.min(viewToWatch.getTop(), headerHeight + + getPaddingTop()); + mHeaderBottomPosition = mHeaderBottomPosition < getPaddingTop() ? headerHeight + + getPaddingTop() + : mHeaderBottomPosition; + } else { + mHeaderBottomPosition = Math.min(viewToWatch.getTop(), headerHeight); + mHeaderBottomPosition = mHeaderBottomPosition < 0 ? headerHeight + : mHeaderBottomPosition; + } + } + } else { + mHeaderBottomPosition = headerHeight; + if (mClippingToPadding) { + mHeaderBottomPosition += getPaddingTop(); + } + } + } + } + + @Override + protected void dispatchDraw(Canvas canvas) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) { + scrollChanged(getFirstVisiblePosition()); + } + + boolean drawStickiedHeader = mStickiedHeader != null && mAreHeadersSticky + && mStickiedHeader.getVisibility() == View.VISIBLE; + int headerHeight = getHeaderHeight(); + int top = mHeaderBottomPosition - headerHeight; + + // Mask the region where we will draw the header later, but only if we + // will draw a header and masking is requested. + if (drawStickiedHeader && mMaskStickyHeaderRegion) { + if (mHeadersIgnorePadding) { + mClippingRect.left = 0; + mClippingRect.right = getWidth(); + } else { + mClippingRect.left = getPaddingLeft(); + mClippingRect.right = getWidth() - getPaddingRight(); + } + mClippingRect.top = mHeaderBottomPosition; + mClippingRect.bottom = getHeight(); + + canvas.save(); + canvas.clipRect(mClippingRect); + } + + // ...and draw the grid view. + super.dispatchDraw(canvas); + + // Find headers. + List headerPositions = new ArrayList(); + int vi = 0; + for (int i = getFirstVisiblePosition(); i <= getLastVisiblePosition();) { + long id = getItemIdAtPosition(i); + if (id == StickyGridHeadersBaseAdapterWrapper.ID_HEADER) { + headerPositions.add(vi); + } + i += mNumMeasuredColumns; + vi += mNumMeasuredColumns; + } + + // Draw headers in list. + for (int i = 0; i < headerPositions.size(); i++) { + View frame = getChildAt(headerPositions.get(i)); + View header; + try { + header = (View)frame.getTag(); + } catch (Exception e) { + return; + } + + boolean headerIsStickied = ((HeaderFillerView)frame).getHeaderId() == mCurrentHeaderId + && frame.getTop() < 0 && mAreHeadersSticky; + if (header.getVisibility() != View.VISIBLE || headerIsStickied) { + continue; + } + + int widthMeasureSpec; + if (mHeadersIgnorePadding) { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY); + } else { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth() - getPaddingLeft() + - getPaddingRight(), MeasureSpec.EXACTLY); + } + + int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + header.measure(widthMeasureSpec, heightMeasureSpec); + + if (mHeadersIgnorePadding) { + header.layout(getLeft(), 0, getRight(), frame.getHeight()); + } else { + header.layout(getLeft() + getPaddingLeft(), 0, getRight() - getPaddingRight(), + frame.getHeight()); + } + + if (mHeadersIgnorePadding) { + mClippingRect.left = 0; + mClippingRect.right = getWidth(); + } else { + mClippingRect.left = getPaddingLeft(); + mClippingRect.right = getWidth() - getPaddingRight(); + } + + mClippingRect.bottom = frame.getBottom(); + mClippingRect.top = frame.getTop(); + canvas.save(); + canvas.clipRect(mClippingRect); + if (mHeadersIgnorePadding) { + canvas.translate(0, frame.getTop()); + } else { + canvas.translate(getPaddingLeft(), frame.getTop()); + } + header.draw(canvas); + canvas.restore(); + } + + if (drawStickiedHeader && mMaskStickyHeaderRegion) { + canvas.restore(); + } else if (!drawStickiedHeader) { + // Done. + return; + } + + // Draw stickied header. + int wantedWidth; + if (mHeadersIgnorePadding) { + wantedWidth = getWidth(); + } else { + wantedWidth = getWidth() - getPaddingLeft() - getPaddingRight(); + } + if (mStickiedHeader.getWidth() != wantedWidth) { + int widthMeasureSpec; + if (mHeadersIgnorePadding) { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY); + } else { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth() - getPaddingLeft() + - getPaddingRight(), MeasureSpec.EXACTLY); // Bug here + } + int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + mStickiedHeader.measure(widthMeasureSpec, heightMeasureSpec); + if (mHeadersIgnorePadding) { + mStickiedHeader.layout(getLeft(), 0, getRight(), mStickiedHeader.getHeight()); + } else { + mStickiedHeader.layout(getLeft() + getPaddingLeft(), 0, getRight() + - getPaddingRight(), mStickiedHeader.getHeight()); + } + } + + if (mHeadersIgnorePadding) { + mClippingRect.left = 0; + mClippingRect.right = getWidth(); + } else { + mClippingRect.left = getPaddingLeft(); + mClippingRect.right = getWidth() - getPaddingRight(); + } + mClippingRect.bottom = top + headerHeight; + if (mClippingToPadding) { + mClippingRect.top = getPaddingTop(); + } else { + mClippingRect.top = 0; + } + + canvas.save(); + canvas.clipRect(mClippingRect); + + if (mHeadersIgnorePadding) { + canvas.translate(0, top); + } else { + canvas.translate(getPaddingLeft(), top); + } + + if (mHeaderBottomPosition != headerHeight) { + canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), 255 + * mHeaderBottomPosition / headerHeight, Canvas.ALL_SAVE_FLAG); + } + + mStickiedHeader.draw(canvas); + canvas.restore(); + canvas.restore(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (mNumColumns == AUTO_FIT) { + int numFittedColumns; + if (mColumnWidth > 0) { + int gridWidth = Math.max(MeasureSpec.getSize(widthMeasureSpec) - getPaddingLeft() + - getPaddingRight(), 0); + numFittedColumns = gridWidth / mColumnWidth; + // Calculate measured columns accounting for requested grid + // spacing. + if (numFittedColumns > 0) { + while (numFittedColumns != 1) { + if (numFittedColumns * mColumnWidth + (numFittedColumns - 1) + * mHorizontalSpacing > gridWidth) { + numFittedColumns--; + } else { + break; + } + } + } else { + // Could not fit any columns in grid width, so default to a + // single column. + numFittedColumns = 1; + } + } else { + // Mimic vanilla GridView behaviour where there is not enough + // information to auto-fit columns. + numFittedColumns = 2; + } + mNumMeasuredColumns = numFittedColumns; + } else { + // There were some number of columns requested so we will try to + // fulfil the request. + mNumMeasuredColumns = mNumColumns; + } + + // Update adapter with number of columns. + if (mAdapter != null) { + mAdapter.setNumColumns(mNumMeasuredColumns); + } + + measureHeader(); + + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + public interface OnHeaderClickListener { + void onHeaderClick(AdapterView parent, View view, long id); + } + + public interface OnHeaderLongClickListener { + boolean onHeaderLongClick(AdapterView parent, View view, long id); + } + + private class CheckForHeaderLongPress extends WindowRunnable implements Runnable { + @Override + public void run() { + final View child = getHeaderAt(mMotionHeaderPosition); + if (child != null) { + final long longPressId = headerViewPositionToId(mMotionHeaderPosition); + + boolean handled = false; + if (sameWindow() && !mDataChanged) { + handled = performHeaderLongPress(child, longPressId); + } + if (handled) { + mTouchMode = TOUCH_MODE_FINISHED_LONG_PRESS; + setPressed(false); + child.setPressed(false); + } else { + mTouchMode = TOUCH_MODE_DONE_WAITING; + } + } + } + } + + private class PerformHeaderClick extends WindowRunnable implements Runnable { + int mClickMotionPosition; + + @Override + public void run() { + // The data has changed since we posted this action to the event + // queue, bail out before bad things happen. + if (mDataChanged) + return; + + if (mAdapter != null && mAdapter.getCount() > 0 + && mClickMotionPosition != INVALID_POSITION + && mClickMotionPosition < mAdapter.getCount() && sameWindow()) { + final View view = getHeaderAt(mClickMotionPosition); + // If there is no view then something bad happened, the view + // probably scrolled off the screen, and we should cancel the + // click. + if (view != null) { + performHeaderClick(view, headerViewPositionToId(mClickMotionPosition)); + } + } + } + } + + /** + * A base class for Runnables that will check that their view is still + * attached to the original window as when the Runnable was created. + */ + private class WindowRunnable { + private int mOriginalAttachCount; + + public void rememberWindowAttachCount() { + mOriginalAttachCount = getWindowAttachCount(); + } + + public boolean sameWindow() { + return hasWindowFocus() && getWindowAttachCount() == mOriginalAttachCount; + } + } + + final class CheckForHeaderTap implements Runnable { + @Override + public void run() { + if (mTouchMode == TOUCH_MODE_DOWN) { + mTouchMode = TOUCH_MODE_TAP; + final View header = getHeaderAt(mMotionHeaderPosition); + if (header != null && !header.hasFocusable()) { + if (!mDataChanged) { + header.setPressed(true); + setPressed(true); + refreshDrawableState(); + + final int longPressTimeout = ViewConfiguration.getLongPressTimeout(); + final boolean longClickable = isLongClickable(); + + if (longClickable) { + if (mPendingCheckForLongPress == null) { + mPendingCheckForLongPress = new CheckForHeaderLongPress(); + } + mPendingCheckForLongPress.rememberWindowAttachCount(); + postDelayed(mPendingCheckForLongPress, longPressTimeout); + } else { + mTouchMode = TOUCH_MODE_DONE_WAITING; + } + } else { + mTouchMode = TOUCH_MODE_DONE_WAITING; + } + } + } + } + } + + /** + * Constructor called from {@link #CREATOR} + */ + static class SavedState extends BaseSavedState { + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + + boolean areHeadersSticky; + + public SavedState(Parcelable superState) { + super(superState); + } + + /** + * Constructor called from {@link #CREATOR} + */ + private SavedState(Parcel in) { + super(in); + areHeadersSticky = in.readByte() != 0; + } + + @Override + public String toString() { + return "StickyGridHeadersGridView.SavedState{" + + Integer.toHexString(System.identityHashCode(this)) + " areHeadersSticky=" + + areHeadersSticky + "}"; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeByte((byte)(areHeadersSticky ? 1 : 0)); + } + } +} diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersListAdapterWrapper.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersListAdapterWrapper.java new file mode 100644 index 0000000000..dfe78c6698 --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersListAdapterWrapper.java @@ -0,0 +1,64 @@ +package com.tonicartos.widget.stickygridheaders; + +import android.database.DataSetObserver; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListAdapter; + +public class StickyGridHeadersListAdapterWrapper extends BaseAdapter implements StickyGridHeadersBaseAdapter { + private ListAdapter mDelegate; + + private DataSetObserver mDataSetObserver = new DataSetObserver() { + @Override + public void onChanged() { + notifyDataSetChanged(); + } + + @Override + public void onInvalidated() { + notifyDataSetInvalidated(); + } + }; + + public StickyGridHeadersListAdapterWrapper(ListAdapter adapter) { + mDelegate = adapter; + adapter.registerDataSetObserver(mDataSetObserver); + } + + @Override + public int getCount() { + return mDelegate.getCount(); + } + + @Override + public Object getItem(int position) { + return mDelegate.getItem(position); + } + + @Override + public long getItemId(int position) { + return mDelegate.getItemId(position); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + return mDelegate.getView(position, convertView, parent); + } + + @Override + public int getCountForHeader(int header) { + return 0; + } + + @Override + public int getNumHeaders() { + return 0; + } + + @Override + public View getHeaderView(int position, View convertView, ViewGroup parent) { + return null; + } + +} diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapter.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapter.java new file mode 100644 index 0000000000..a7d9d643c8 --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapter.java @@ -0,0 +1,62 @@ +/* + Copyright 2013 Tonic Artos + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.tonicartos.widget.stickygridheaders; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListAdapter; + +/** + * Adapter interface for StickyGridHeadersGridView. The adapter expects two sets + * of data, items, and headers. Implement this interface to provide an optimised + * method for generating the header data set. + * + * The is a second interface + * {@link com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapter}. + * + * @author Tonic Artos + */ +public interface StickyGridHeadersSimpleAdapter extends ListAdapter { + /** + * Get the header id associated with the specified position in the list. + * + * @param position + * The position of the item within the adapter's data set whose + * header id we want. + * @return The id of the header at the specified position. + */ + long getHeaderId(int position); + + /** + * Get a View that displays the header data at the specified position in the + * set. You can either create a View manually or inflate it from an XML + * layout file. + * + * @param position + * The position of the header within the adapter's header data + * set. + * @param convertView + * The old view to reuse, if possible. Note: You should check + * that this view is non-null and of an appropriate type before + * using. If it is not possible to convert this view to display + * the correct data, this method can create a new view. + * @param parent + * The parent that this view will eventually be attached to. + * @return A View corresponding to the data at the specified position. + */ + View getHeaderView(int position, View convertView, ViewGroup parent); +} diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapterWrapper.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapterWrapper.java new file mode 100644 index 0000000000..612b9fa474 --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleAdapterWrapper.java @@ -0,0 +1,136 @@ +/* + Copyright 2013 Tonic Artos + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.tonicartos.widget.stickygridheaders; + +import android.database.DataSetObserver; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Adapter wrapper to insert extra views and otherwise hack around GridView to + * add sections and headers. + * + * @author Tonic Artos + */ +public class StickyGridHeadersSimpleAdapterWrapper extends BaseAdapter implements + StickyGridHeadersBaseAdapter { + private StickyGridHeadersSimpleAdapter mDelegate; + + private HeaderData[] mHeaders; + + public StickyGridHeadersSimpleAdapterWrapper(StickyGridHeadersSimpleAdapter adapter) { + mDelegate = adapter; + adapter.registerDataSetObserver(new DataSetObserverExtension()); + mHeaders = generateHeaderList(adapter); + } + + @Override + public int getCount() { + return mDelegate.getCount(); + } + + @Override + public int getCountForHeader(int position) { + return mHeaders[position].getCount(); + } + + @Override + public View getHeaderView(int position, View convertView, ViewGroup parent) { + return mDelegate.getHeaderView(mHeaders[position].getRefPosition(), convertView, parent); + } + + @Override + public Object getItem(int position) { + return mDelegate.getItem(position); + } + + @Override + public long getItemId(int position) { + return mDelegate.getItemId(position); + } + + @Override + public int getNumHeaders() { + return mHeaders.length; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + return mDelegate.getView(position, convertView, parent); + } + + protected HeaderData[] generateHeaderList(StickyGridHeadersSimpleAdapter adapter) { + Map mapping = new HashMap(); + List headers = new ArrayList(); + + for (int i = 0; i < adapter.getCount(); i++) { + long headerId = adapter.getHeaderId(i); + HeaderData headerData = mapping.get(headerId); + if (headerData == null) { + headerData = new HeaderData(i); + headers.add(headerData); + } + headerData.incrementCount(); + mapping.put(headerId, headerData); + } + + return headers.toArray(new HeaderData[headers.size()]); + } + + private final class DataSetObserverExtension extends DataSetObserver { + @Override + public void onChanged() { + mHeaders = generateHeaderList(mDelegate); + notifyDataSetChanged(); + } + + @Override + public void onInvalidated() { + mHeaders = generateHeaderList(mDelegate); + notifyDataSetInvalidated(); + } + } + + private class HeaderData { + private int mCount; + + private int mRefPosition; + + public HeaderData(int refPosition) { + mRefPosition = refPosition; + mCount = 0; + } + + public int getCount() { + return mCount; + } + + public int getRefPosition() { + return mRefPosition; + } + + public void incrementCount() { + mCount++; + } + } +} diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleArrayAdapter.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleArrayAdapter.java new file mode 100644 index 0000000000..2cf7eada00 --- /dev/null +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersSimpleArrayAdapter.java @@ -0,0 +1,145 @@ +/* + Copyright 2013 Tonic Artos + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +package com.tonicartos.widget.stickygridheaders; + +import java.util.Arrays; +import java.util.List; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +/** + * @author Tonic Artos + * + * @param + */ +public class StickyGridHeadersSimpleArrayAdapter extends BaseAdapter implements StickyGridHeadersSimpleAdapter { + private int mHeaderResId; + private LayoutInflater mInflater; + private int mItemResId; + private List mItems; + + public StickyGridHeadersSimpleArrayAdapter(Context context, List items, int headerResId, int itemResId) { + init(context, items, headerResId, itemResId); + } + + public StickyGridHeadersSimpleArrayAdapter(Context context, T[] items, int headerResId, int itemResId) { + init(context, Arrays.asList(items), headerResId, itemResId); + } + + @Override + public boolean areAllItemsEnabled() { + return false; + } + + @Override + public int getCount() { + return mItems.size(); + } + + @Override + public long getHeaderId(int position) { + T item = getItem(position); + CharSequence value; + if (item instanceof CharSequence) { + value = (CharSequence) item; + } else { + value = item.toString(); + } + + return value.subSequence(0, 1).charAt(0); + } + + @Override + @SuppressWarnings("unchecked") + public View getHeaderView(int position, View convertView, ViewGroup parent) { + HeaderViewHolder holder; + if (convertView == null) { + convertView = mInflater.inflate(mHeaderResId, parent, false); + holder = new HeaderViewHolder(); + holder.textView = (TextView) convertView.findViewById(android.R.id.text1); + convertView.setTag(holder); + } else { + holder = (HeaderViewHolder) convertView.getTag(); + } + + T item = getItem(position); + CharSequence string; + if (item instanceof CharSequence) { + string = (CharSequence) item; + } else { + string = item.toString(); + } + + // set header text as first char in string + holder.textView.setText(string.subSequence(0, 1)); + + return convertView; + } + + @Override + public T getItem(int position) { + return mItems.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + @SuppressWarnings("unchecked") + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + convertView = mInflater.inflate(mItemResId, parent, false); + holder = new ViewHolder(); + holder.textView = (TextView) convertView.findViewById(android.R.id.text1); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + T item = getItem(position); + if (item instanceof CharSequence) { + holder.textView.setText((CharSequence) item); + } else { + holder.textView.setText(item.toString()); + } + + return convertView; + } + + private void init(Context context, List items, int headerResId, int itemResId) { + this.mItems = items; + this.mHeaderResId = headerResId; + this.mItemResId = itemResId; + mInflater = LayoutInflater.from(context); + } + + protected class HeaderViewHolder { + public TextView textView; + } + + protected class ViewHolder { + public TextView textView; + } +} diff --git a/settings.gradle b/settings.gradle index 40cb69b270..851882af1f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,6 @@ include ':libraries:androidutils' include ':libraries:pagerslidingtabstrip' include ':libraries:android-menudrawer' +include ':libraries:stickygridheaders' include ':SeriesGuide' include ':SeriesGuideFree' \ No newline at end of file From 132e3e8b9af4daac6b629bdfe707209abec586f3 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Fri, 6 Sep 2013 19:19:17 -0500 Subject: [PATCH 056/157] Clean up: These should be static --- .../dataliberation/JsonImportTask.java | 2 +- .../provider/SeriesGuideDatabase.java | 28 +++++++++---------- .../provider/SeriesGuideProvider.java | 4 +-- .../seriesguide/sync/SgSyncAdapter.java | 2 +- .../ui/EpisodeDetailsFragment.java | 2 +- .../seriesguide/ui/EpisodesFragment.java | 4 +-- .../seriesguide/ui/FirstRunFragment.java | 2 +- .../seriesguide/ui/HelpActivity.java | 2 +- .../seriesguide/ui/ListsFragment.java | 2 +- .../seriesguide/ui/MovieDetailsFragment.java | 2 +- .../seriesguide/ui/MovieSearchFragment.java | 2 +- .../ui/MoviesWatchListFragment.java | 2 +- .../seriesguide/ui/OverviewFragment.java | 2 +- .../seriesguide/ui/SeasonsFragment.java | 4 +-- .../seriesguide/ui/ShowInfoFragment.java | 2 +- .../seriesguide/ui/ShowsFragment.java | 2 +- .../seriesguide/ui/SlidingMenuFragment.java | 2 +- .../seriesguide/ui/TraktSyncActivity.java | 2 +- .../seriesguide/util/ImageDownloader.java | 4 +-- 19 files changed, 36 insertions(+), 36 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java index 92294d704a..dbb1109d71 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/dataliberation/JsonImportTask.java @@ -255,7 +255,7 @@ private void addShowToDatabase(Show show) { * {@link ContentValues} packages put into arrays. The first array returned * includes all seasons, the second array all episodes. */ - private ContentValues[][] buildSeasonAndEpisodeBatches(Show show) { + private static ContentValues[][] buildSeasonAndEpisodeBatches(Show show) { // Initialize arrays ContentValues[] seasonBatch = new ContentValues[show.seasons.size()]; int episodesSize = 0; diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java b/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java index 2f5b077234..78503ac6c7 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java @@ -512,7 +512,7 @@ private void upgradeToThirtyOne(SQLiteDatabase db) { /** * Add {@link Episodes} column to store absolute episode number. */ - private void upgradeToThirty(SQLiteDatabase db) { + private static void upgradeToThirty(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.EPISODES + " ADD COLUMN " + EpisodesColumns.ABSOLUTE_NUMBER + " INTEGER;"); } @@ -520,7 +520,7 @@ private void upgradeToThirty(SQLiteDatabase db) { /** * Add {@link Shows} column to store a GetGlue object id. */ - private void upgradeToTwentyNine(SQLiteDatabase db) { + private static void upgradeToTwentyNine(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.GETGLUEID + " TEXT DEFAULT '';"); } @@ -528,7 +528,7 @@ private void upgradeToTwentyNine(SQLiteDatabase db) { /** * Add tables to store lists and list items. */ - private void upgradeToTwentyEight(SQLiteDatabase db) { + private static void upgradeToTwentyEight(SQLiteDatabase db) { db.execSQL(CREATE_LISTS_TABLE); db.execSQL(CREATE_LIST_ITEMS_TABLE); @@ -541,7 +541,7 @@ private void upgradeToTwentyEight(SQLiteDatabase db) { * * @param db */ - private void upgradeToTwentySeven(SQLiteDatabase db) { + private static void upgradeToTwentySeven(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.LASTEDIT + " INTEGER DEFAULT 0;"); db.execSQL("ALTER TABLE " + Tables.EPISODES + " ADD COLUMN " + EpisodesColumns.IMDBID @@ -556,7 +556,7 @@ private void upgradeToTwentySeven(SQLiteDatabase db) { * * @param db */ - private void upgradeToTwentySix(SQLiteDatabase db) { + private static void upgradeToTwentySix(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.EPISODES + " ADD COLUMN " + EpisodesColumns.COLLECTED + " INTEGER DEFAULT 0;"); } @@ -567,7 +567,7 @@ private void upgradeToTwentySix(SQLiteDatabase db) { * * @param db */ - private void upgradeToTwentyFive(SQLiteDatabase db) { + private static void upgradeToTwentyFive(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.NEXTAIRDATEMS + " INTEGER DEFAULT 0;"); } @@ -578,7 +578,7 @@ private void upgradeToTwentyFive(SQLiteDatabase db) { * * @param db */ - private void upgradeToTwentyFour(SQLiteDatabase db) { + private static void upgradeToTwentyFour(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.EPISODES + " ADD COLUMN " + EpisodesColumns.FIRSTAIREDMS + " INTEGER DEFAULT -1;"); @@ -627,7 +627,7 @@ private void upgradeToTwentyFour(SQLiteDatabase db) { * * @param db */ - private void upgradeToTwentyThree(SQLiteDatabase db) { + private static void upgradeToTwentyThree(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.HIDDEN + " INTEGER DEFAULT 0;"); } @@ -640,17 +640,17 @@ private void upgradeToTwentyThree(SQLiteDatabase db) { * * @param db */ - private void upgradeToTwentyTwo(SQLiteDatabase db) { + private static void upgradeToTwentyTwo(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.LASTUPDATED + " INTEGER DEFAULT 0;"); } - private void upgradeToTwentyOne(SQLiteDatabase db) { + private static void upgradeToTwentyOne(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.AIRTIME + " TEXT DEFAULT '';"); } - private void upgradeToTwenty(SQLiteDatabase db) { + private static void upgradeToTwenty(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.SYNCENABLED + " INTEGER DEFAULT 1;"); } @@ -660,7 +660,7 @@ private void upgradeToTwenty(SQLiteDatabase db) { * * @param db */ - private void upgradeToNineteen(SQLiteDatabase db) { + private static void upgradeToNineteen(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SEASONS + " ADD COLUMN " + SeasonsColumns.TOTALCOUNT + " INTEGER DEFAULT 0;"); } @@ -670,7 +670,7 @@ private void upgradeToNineteen(SQLiteDatabase db) { * * @param db */ - private void upgradeToEighteen(SQLiteDatabase db) { + private static void upgradeToEighteen(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.NEXTAIRDATETEXT + " TEXT DEFAULT '';"); @@ -711,7 +711,7 @@ private void upgradeToEighteen(SQLiteDatabase db) { * * @param db */ - private void upgradeToSeventeen(SQLiteDatabase db) { + private static void upgradeToSeventeen(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.FAVORITE + " INTEGER DEFAULT 0;"); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideProvider.java b/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideProvider.java index f5c37a543f..7ba180f3d6 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideProvider.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideProvider.java @@ -420,7 +420,7 @@ private int bulkInsertHelper(String table, ContentValues[] values) { * {@link Uri}. This is usually enough to support {@link #insert}, * {@link #update}, and {@link #delete} operations. */ - private SelectionBuilder buildSimpleSelection(Uri uri) { + private static SelectionBuilder buildSimpleSelection(Uri uri) { final SelectionBuilder builder = new SelectionBuilder(); final int match = sUriMatcher.match(uri); switch (match) { @@ -488,7 +488,7 @@ private SelectionBuilder buildSimpleSelection(Uri uri) { * {@link Uri}. This is usually only used by {@link #query}, since it * performs table joins useful for {@link Cursor} data. */ - private SelectionBuilder buildExpandedSelection(Uri uri, int match) { + private static SelectionBuilder buildExpandedSelection(Uri uri, int match) { final SelectionBuilder builder = new SelectionBuilder(); switch (match) { case SHOWS: { diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java b/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java index 197d0286c8..dc16034c24 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/sync/SgSyncAdapter.java @@ -527,7 +527,7 @@ private static void addEpisodeCollectedUpdateOp(ArrayList batch, int season, int number, String showTvdbId) { // query for the episode id final Cursor episode = resolver.query( diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java index 38fbc6f8a7..2864b7e0a4 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodeDetailsFragment.java @@ -627,7 +627,7 @@ public void onEvent(TraktActionCompleteEvent event) { } } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodesFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodesFragment.java index 4f39ae7a5a..3deb25e02a 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodesFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/EpisodesFragment.java @@ -437,11 +437,11 @@ public void onClick(View v) { getActivity().openContextMenu(v); } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } - private void fireTrackerEventContextMenu(String label) { + private static void fireTrackerEventContextMenu(String label) { EasyTracker.getTracker().sendEvent(TAG, "Context Item", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/FirstRunFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/FirstRunFragment.java index a6b12533a3..c77cdf4639 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/FirstRunFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/FirstRunFragment.java @@ -156,7 +156,7 @@ public void onNothingSelected(AdapterView parent) { } } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Click", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/HelpActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/HelpActivity.java index e9ed5d1614..1bca119c33 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/HelpActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/HelpActivity.java @@ -79,7 +79,7 @@ public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { return super.onOptionsItemSelected(item); }; - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ListsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ListsFragment.java index e62fae1ca7..5e9111bd0f 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ListsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ListsFragment.java @@ -388,7 +388,7 @@ interface ListItemsQuery { } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Context Item", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieDetailsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieDetailsFragment.java index 5d9a832a0b..75c5aad4ce 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieDetailsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieDetailsFragment.java @@ -265,7 +265,7 @@ public void onClick(View v) { } } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieSearchFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieSearchFragment.java index d3dd73d44c..8798d02c68 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieSearchFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/MovieSearchFragment.java @@ -208,7 +208,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) startActivity(i); } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/MoviesWatchListFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/MoviesWatchListFragment.java index 7076a98e97..4e8d305d19 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/MoviesWatchListFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/MoviesWatchListFragment.java @@ -174,7 +174,7 @@ public void onEvent(TraktActionCompleteEvent event) { } } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java index 40378120dd..1a1db7d4c7 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java @@ -505,7 +505,7 @@ public void onEvent(TraktActionCompleteEvent event) { } } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java index 96f560f3f5..148429fc89 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SeasonsFragment.java @@ -570,11 +570,11 @@ public void onClick(View v) { getActivity().openContextMenu(v); } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } - private void fireTrackerEventContextMenu(String label) { + private static void fireTrackerEventContextMenu(String label) { EasyTracker.getTracker().sendEvent(TAG, "Context Item", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java index 506de08dd5..553395935b 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowInfoFragment.java @@ -285,7 +285,7 @@ public void onClick(View v) { onLoadTraktRatings(true); } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java index 192206d061..35b6b39d74 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/ShowsFragment.java @@ -646,7 +646,7 @@ public void onFilterChanged(int itemPosition) { setEmptyView(itemPosition); } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Context Item", label, (long) 0); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java index d57f0b70d4..00545cba09 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/SlidingMenuFragment.java @@ -234,7 +234,7 @@ public void attach(View v) { } } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java index 2cc4ef6eef..ce0ba6b57b 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/TraktSyncActivity.java @@ -200,7 +200,7 @@ public void onClick(DialogInterface dialog, int which) { return null; } - private void fireTrackerEvent(String label) { + private static void fireTrackerEvent(String label) { EasyTracker.getTracker().sendEvent(TAG, "Click", label, (long) 0); } } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/util/ImageDownloader.java b/SeriesGuide/src/com/battlelancer/seriesguide/util/ImageDownloader.java index e19cec6dae..9036145e5f 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/util/ImageDownloader.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/util/ImageDownloader.java @@ -167,7 +167,7 @@ private static BitmapDownloaderTask getBitmapDownloaderTask(ImageView imageView) return null; } - private Bitmap getBitmapFromDisk(String urlString, File imageFile) { + private static Bitmap getBitmapFromDisk(String urlString, File imageFile) { if (AndroidUtils.isExtStorageAvailable()) { if (imageFile.exists()) { // disk cache hit @@ -180,7 +180,7 @@ private Bitmap getBitmapFromDisk(String urlString, File imageFile) { return null; } - private Bitmap downloadBitmap(String urlString, boolean isDiskCaching, File imageFile) { + private static Bitmap downloadBitmap(String urlString, boolean isDiskCaching, File imageFile) { try { InputStream inputStream = AndroidUtils.downloadUrl(urlString); From 941a1caa7a5b824ddebb91984bd471ca17dcfbb2 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Fri, 6 Sep 2013 19:22:10 -0500 Subject: [PATCH 057/157] Clean up: These should be static --- .../battlelancer/seriesguide/provider/SeriesGuideDatabase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java b/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java index 78503ac6c7..c83a27dc86 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/provider/SeriesGuideDatabase.java @@ -465,7 +465,7 @@ private void onResetDatabase(SQLiteDatabase db) { * Add {@link Shows} column to store the last watched episode id for better * prediction of next episode. */ - private void upgradeToThirtyOne(SQLiteDatabase db) { + private static void upgradeToThirtyOne(SQLiteDatabase db) { db.execSQL("ALTER TABLE " + Tables.SHOWS + " ADD COLUMN " + ShowsColumns.LASTWATCHEDID + " INTEGER DEFAULT 0;"); From abfd0d5f971f68ae75fe6f46f197cbbed828fe5c Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Fri, 6 Sep 2013 19:34:25 -0500 Subject: [PATCH 058/157] Fix Cursor leak --- SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java b/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java index 8096330d13..880320eca3 100644 --- a/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java +++ b/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java @@ -101,19 +101,17 @@ public static boolean isUpdateShow(String showId, long currentTime, Context cont new String[] { Shows._ID, Shows.LASTUPDATED }, null, null, null); - + boolean update = false; if (show != null) { if (show.moveToFirst()) { long lastUpdateTime = show.getLong(1); if (currentTime - lastUpdateTime > DateUtils.HOUR_IN_MILLIS * 12) { - return true; + update = true; } } - show.close(); } - - return false; + return update; } /** From 55a08823b063e3eee13c4c86a7046a1a00a88bba Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sat, 7 Sep 2013 08:53:30 +0200 Subject: [PATCH 059/157] Start boolean with an is prefix. --- SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java b/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java index 880320eca3..bb07875715 100644 --- a/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java +++ b/SeriesGuide/src/com/battlelancer/thetvdbapi/TheTVDB.java @@ -101,17 +101,17 @@ public static boolean isUpdateShow(String showId, long currentTime, Context cont new String[] { Shows._ID, Shows.LASTUPDATED }, null, null, null); - boolean update = false; + boolean isUpdate = false; if (show != null) { if (show.moveToFirst()) { long lastUpdateTime = show.getLong(1); if (currentTime - lastUpdateTime > DateUtils.HOUR_IN_MILLIS * 12) { - update = true; + isUpdate = true; } } show.close(); } - return update; + return isUpdate; } /** From 4521240dd27fb8c2dd7db08cd15c74b9a09d48f9 Mon Sep 17 00:00:00 2001 From: Andrew Neal Date: Sat, 7 Sep 2013 11:49:50 -0500 Subject: [PATCH 060/157] Fix for issue #311 --- .../res/menu/overview_activity_menu.xml | 16 ++++++++ ...ew_menu.xml => overview_fragment_menu.xml} | 11 ------ SeriesGuide/res/menu/showinfo_menu.xml | 4 +- .../seriesguide/ui/OverviewActivity.java | 38 +++++++++++++++++++ .../seriesguide/ui/OverviewFragment.java | 20 +--------- 5 files changed, 57 insertions(+), 32 deletions(-) create mode 100644 SeriesGuide/res/menu/overview_activity_menu.xml rename SeriesGuide/res/menu/{overview_menu.xml => overview_fragment_menu.xml} (58%) diff --git a/SeriesGuide/res/menu/overview_activity_menu.xml b/SeriesGuide/res/menu/overview_activity_menu.xml new file mode 100644 index 0000000000..c352637caf --- /dev/null +++ b/SeriesGuide/res/menu/overview_activity_menu.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/SeriesGuide/res/menu/overview_menu.xml b/SeriesGuide/res/menu/overview_fragment_menu.xml similarity index 58% rename from SeriesGuide/res/menu/overview_menu.xml rename to SeriesGuide/res/menu/overview_fragment_menu.xml index d8d9933033..4a4427402f 100644 --- a/SeriesGuide/res/menu/overview_menu.xml +++ b/SeriesGuide/res/menu/overview_fragment_menu.xml @@ -13,16 +13,5 @@ android:orderInCategory="1" android:showAsAction="ifRoom" android:title="@string/share_episode"/> - - \ No newline at end of file diff --git a/SeriesGuide/res/menu/showinfo_menu.xml b/SeriesGuide/res/menu/showinfo_menu.xml index 6567bd6d22..80f5d7eb7f 100644 --- a/SeriesGuide/res/menu/showinfo_menu.xml +++ b/SeriesGuide/res/menu/showinfo_menu.xml @@ -4,13 +4,13 @@ diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewActivity.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewActivity.java index 7dce0d5660..6f38badd98 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewActivity.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewActivity.java @@ -34,12 +34,15 @@ import android.view.View; import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.astuetz.viewpager.extensions.PagerSlidingTabStrip; import com.battlelancer.seriesguide.adapters.TabStripAdapter; import com.battlelancer.seriesguide.items.Series; import com.battlelancer.seriesguide.sync.SgSyncAdapter; import com.battlelancer.seriesguide.util.DBUtils; +import com.battlelancer.seriesguide.util.ShortcutUtils; +import com.battlelancer.seriesguide.util.Utils; import com.battlelancer.thetvdbapi.TheTVDB; import com.google.analytics.tracking.android.EasyTracker; import com.uwetrottmann.androidutils.AndroidUtils; @@ -55,6 +58,8 @@ */ public class OverviewActivity extends BaseNavDrawerActivity { + private static final String TAG = "Overview"; + private int mShowId; private NfcAdapter mNfcAdapter; @@ -241,6 +246,20 @@ public void onBackPressed() { overridePendingTransition(R.anim.shrink_enter, R.anim.shrink_exit); } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + // If the nav drawer is open, hide action items related to the content + // view + menu.findItem(R.id.menu_overview_search).setVisible(!isMenuDrawerOpen()); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getSupportMenuInflater().inflate(R.menu.overview_activity_menu, menu); + return super.onCreateOptionsMenu(menu); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); @@ -253,6 +272,21 @@ public boolean onOptionsItemSelected(MenuItem item) { } else if (itemId == R.id.menu_overview_search) { onSearchRequested(); return true; + } else if (itemId == R.id.menu_overview_add_to_homescreen) { + if (!Utils.hasAccessToX(this)) { + Utils.advertiseSubscription(this); + return true; + } + + // Create the shortcut + final Series show = DBUtils.getShow(this, mShowId); + String title = show.getTitle(); + String poster = show.getPoster(); + ShortcutUtils.createShortcut(this, title, poster, mShowId); + + // Analytics + fireTrackerEvent("Add to Homescreen"); + return true; } return super.onOptionsItemSelected(item); } @@ -287,4 +321,8 @@ public boolean onSearchRequested() { return true; } + private static void fireTrackerEvent(String label) { + EasyTracker.getTracker().sendEvent(TAG, "Action Item", label, (long) 0); + } + } diff --git a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java index 40378120dd..89a9ebcc27 100644 --- a/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java +++ b/SeriesGuide/src/com/battlelancer/seriesguide/ui/OverviewFragment.java @@ -32,7 +32,6 @@ import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.text.TextUtils; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -63,7 +62,6 @@ import com.battlelancer.seriesguide.util.ShareUtils; import com.battlelancer.seriesguide.util.ShareUtils.ShareItems; import com.battlelancer.seriesguide.util.ShareUtils.ShareMethod; -import com.battlelancer.seriesguide.util.ShortcutUtils; import com.battlelancer.seriesguide.util.TraktSummaryTask; import com.battlelancer.seriesguide.util.TraktTask; import com.battlelancer.seriesguide.util.TraktTask.TraktActionCompleteEvent; @@ -191,7 +189,7 @@ public void onDestroy() { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.overview_menu, menu); + inflater.inflate(R.menu.overview_fragment_menu, menu); } @Override @@ -231,22 +229,6 @@ public boolean onOptionsItemSelected(MenuItem item) { ListItemTypes.EPISODE, getFragmentManager()); } return true; - } else if (itemId == R.id.menu_overview_add_to_homescreen) { - if (!Utils.hasAccessToX(getActivity())) { - Utils.advertiseSubscription(getActivity()); - return true; - } - - if (mShowCursor != null && mShowCursor.moveToFirst()) { - // Create the shortcut - String title = mShowCursor.getString(ShowQuery.SHOW_TITLE); - String poster = mShowCursor.getString(ShowQuery.SHOW_POSTER); - ShortcutUtils.createShortcut(getActivity(), title, poster, getShowId()); - - // Analytics - fireTrackerEvent("Add to Homescreen"); - } - return true; } return super.onOptionsItemSelected(item); } From bec196be78b5baf247f39f4f48acce9663df1dee Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sun, 8 Sep 2013 08:46:18 +0200 Subject: [PATCH 061/157] Fix for StickyGridHeaders. Closes #316. --- .../widget/stickygridheaders/StickyGridHeadersGridView.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java index 092260d087..b6ec98e2b6 100644 --- a/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java +++ b/libraries/stickygridheaders/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersGridView.java @@ -883,7 +883,10 @@ protected void dispatchDraw(Canvas canvas) { } mStickiedHeader.draw(canvas); - canvas.restore(); + + if (mHeaderBottomPosition != headerHeight) { + canvas.restore(); + } canvas.restore(); } From db2b263b668456b2e5ca05fccf677499b30cedfd Mon Sep 17 00:00:00 2001 From: Uwe Trottmann Date: Sun, 15 Sep 2013 16:15:46 +0200 Subject: [PATCH 062/157] Dump BB, beta and test projects. --- SeriesGuideBB/.classpath | 9 - SeriesGuideBB/.project | 39 --- SeriesGuideBB/AndroidManifest.xml | 261 ------------------ .../dist/Android 4.2/SeriesGuideBB.bar | Bin 1693283 -> 0 bytes .../dist/Android 4.2/SeriesGuideBB.lsv | 1 - .../dist/Android 4.2/SeriesGuideBB.wrn | 13 - SeriesGuideBB/ic_launcher-web.png | Bin 53555 -> 0 bytes SeriesGuideBB/proguard-project.txt | 20 -- SeriesGuideBB/project.properties | 15 - .../res/drawable-hdpi/ic_launcher.png | Bin 3168 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 1892 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 4733 -> 0 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 6028 -> 0 bytes SeriesGuideBB/res/values/strings.xml | 4 - SeriesGuideBB/res/xml/searchable.xml | 12 - SeriesGuideBB/src/.donotremove | 0 SeriesGuideBeta/.classpath | 9 - SeriesGuideBeta/.project | 33 --- .../.settings/org.eclipse.jdt.core.prefs | 11 - SeriesGuideBeta/AndroidManifest.xml | 82 ------ SeriesGuideBeta/build.gradle | 34 --- SeriesGuideBeta/ic_launcher-web.png | Bin 57011 -> 0 bytes SeriesGuideBeta/proguard-project.txt | 32 --- SeriesGuideBeta/project.properties | 15 - .../res/drawable-hdpi/ic_launcher.png | Bin 4221 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 2425 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 6708 -> 0 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 10825 -> 0 bytes SeriesGuideBeta/res/values/strings.xml | 4 - SeriesGuideBeta/res/xml/accountauth.xml | 6 - SeriesGuideBeta/res/xml/searchable.xml | 12 - SeriesGuideBeta/res/xml/sync_seriesguide.xml | 6 - SeriesGuideBeta/src/.donotremove | 0 SeriesGuideBetaTest/.classpath | 9 - SeriesGuideBetaTest/.project | 34 --- SeriesGuideBetaTest/AndroidManifest.xml | 19 -- .../libs/fest-android-1.0.4.jar | Bin 337753 -> 0 bytes .../libs/fest-android-1.0.4.jar.properties | 1 - .../libs/fest-assert-core-2.0M10.jar | Bin 267580 -> 0 bytes .../fest-assert-core-2.0M10.jar.properties | 1 - SeriesGuideBetaTest/libs/fest-test-2.1.0.jar | Bin 9172 -> 0 bytes SeriesGuideBetaTest/libs/fest-util-1.2.5.jar | Bin 32508 -> 0 bytes .../libs/mockito-all-1.9.0.jar | Bin 1495219 -> 0 bytes .../libs/src/fest-android-1.0.4-sources.jar | Bin 192326 -> 0 bytes .../src/fest-assert-core-2.0M10-sources.jar | Bin 300232 -> 0 bytes SeriesGuideBetaTest/proguard-project.txt | 20 -- SeriesGuideBetaTest/project.properties | 14 - .../res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 0 bytes .../res/drawable-ldpi/ic_launcher.png | Bin 2729 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 0 bytes SeriesGuideBetaTest/res/values/strings.xml | 6 - .../seriesguide/beta/test/FlagTaskTest.java | 139 ---------- .../beta/test/SimpleCryptoTest.java | 70 ----- SeriesGuideFree/.classpath | 9 - SeriesGuideFree/.project | 33 --- SeriesGuideFree/AndroidManifest.xml | 80 ------ SeriesGuideFree/build.gradle | 34 --- SeriesGuideFree/ic_launcher-web.png | Bin 57568 -> 0 bytes SeriesGuideFree/proguard-project.txt | 20 -- SeriesGuideFree/project.properties | 15 - .../res/drawable-hdpi/ic_launcher.png | Bin 3585 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 2144 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 5295 -> 0 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 9519 -> 0 bytes SeriesGuideFree/res/values/strings.xml | 4 - SeriesGuideFree/res/xml/accountauth.xml | 6 - SeriesGuideFree/res/xml/searchable.xml | 12 - SeriesGuideFree/res/xml/sync_seriesguide.xml | 6 - SeriesGuideFree/src/.donotremove | 0 70 files changed, 1150 deletions(-) delete mode 100644 SeriesGuideBB/.classpath delete mode 100644 SeriesGuideBB/.project delete mode 100644 SeriesGuideBB/AndroidManifest.xml delete mode 100644 SeriesGuideBB/dist/Android 4.2/SeriesGuideBB.bar delete mode 100644 SeriesGuideBB/dist/Android 4.2/SeriesGuideBB.lsv delete mode 100644 SeriesGuideBB/dist/Android 4.2/SeriesGuideBB.wrn delete mode 100644 SeriesGuideBB/ic_launcher-web.png delete mode 100644 SeriesGuideBB/proguard-project.txt delete mode 100644 SeriesGuideBB/project.properties delete mode 100644 SeriesGuideBB/res/drawable-hdpi/ic_launcher.png delete mode 100644 SeriesGuideBB/res/drawable-mdpi/ic_launcher.png delete mode 100644 SeriesGuideBB/res/drawable-xhdpi/ic_launcher.png delete mode 100644 SeriesGuideBB/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 SeriesGuideBB/res/values/strings.xml delete mode 100644 SeriesGuideBB/res/xml/searchable.xml delete mode 100644 SeriesGuideBB/src/.donotremove delete mode 100644 SeriesGuideBeta/.classpath delete mode 100644 SeriesGuideBeta/.project delete mode 100644 SeriesGuideBeta/.settings/org.eclipse.jdt.core.prefs delete mode 100644 SeriesGuideBeta/AndroidManifest.xml delete mode 100644 SeriesGuideBeta/build.gradle delete mode 100644 SeriesGuideBeta/ic_launcher-web.png delete mode 100644 SeriesGuideBeta/proguard-project.txt delete mode 100644 SeriesGuideBeta/project.properties delete mode 100644 SeriesGuideBeta/res/drawable-hdpi/ic_launcher.png delete mode 100644 SeriesGuideBeta/res/drawable-mdpi/ic_launcher.png delete mode 100644 SeriesGuideBeta/res/drawable-xhdpi/ic_launcher.png delete mode 100644 SeriesGuideBeta/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 SeriesGuideBeta/res/values/strings.xml delete mode 100644 SeriesGuideBeta/res/xml/accountauth.xml delete mode 100644 SeriesGuideBeta/res/xml/searchable.xml delete mode 100644 SeriesGuideBeta/res/xml/sync_seriesguide.xml delete mode 100644 SeriesGuideBeta/src/.donotremove delete mode 100644 SeriesGuideBetaTest/.classpath delete mode 100644 SeriesGuideBetaTest/.project delete mode 100644 SeriesGuideBetaTest/AndroidManifest.xml delete mode 100644 SeriesGuideBetaTest/libs/fest-android-1.0.4.jar delete mode 100644 SeriesGuideBetaTest/libs/fest-android-1.0.4.jar.properties delete mode 100644 SeriesGuideBetaTest/libs/fest-assert-core-2.0M10.jar delete mode 100644 SeriesGuideBetaTest/libs/fest-assert-core-2.0M10.jar.properties delete mode 100644 SeriesGuideBetaTest/libs/fest-test-2.1.0.jar delete mode 100644 SeriesGuideBetaTest/libs/fest-util-1.2.5.jar delete mode 100644 SeriesGuideBetaTest/libs/mockito-all-1.9.0.jar delete mode 100644 SeriesGuideBetaTest/libs/src/fest-android-1.0.4-sources.jar delete mode 100644 SeriesGuideBetaTest/libs/src/fest-assert-core-2.0M10-sources.jar delete mode 100644 SeriesGuideBetaTest/proguard-project.txt delete mode 100644 SeriesGuideBetaTest/project.properties delete mode 100644 SeriesGuideBetaTest/res/drawable-hdpi/ic_launcher.png delete mode 100644 SeriesGuideBetaTest/res/drawable-ldpi/ic_launcher.png delete mode 100644 SeriesGuideBetaTest/res/drawable-mdpi/ic_launcher.png delete mode 100644 SeriesGuideBetaTest/res/drawable-xhdpi/ic_launcher.png delete mode 100644 SeriesGuideBetaTest/res/values/strings.xml delete mode 100644 SeriesGuideBetaTest/src/com/battlelancer/seriesguide/beta/test/FlagTaskTest.java delete mode 100644 SeriesGuideBetaTest/src/com/battlelancer/seriesguide/beta/test/SimpleCryptoTest.java delete mode 100644 SeriesGuideFree/.classpath delete mode 100644 SeriesGuideFree/.project delete mode 100644 SeriesGuideFree/AndroidManifest.xml delete mode 100644 SeriesGuideFree/build.gradle delete mode 100644 SeriesGuideFree/ic_launcher-web.png delete mode 100644 SeriesGuideFree/proguard-project.txt delete mode 100644 SeriesGuideFree/project.properties delete mode 100644 SeriesGuideFree/res/drawable-hdpi/ic_launcher.png delete mode 100644 SeriesGuideFree/res/drawable-mdpi/ic_launcher.png delete mode 100644 SeriesGuideFree/res/drawable-xhdpi/ic_launcher.png delete mode 100644 SeriesGuideFree/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 SeriesGuideFree/res/values/strings.xml delete mode 100644 SeriesGuideFree/res/xml/accountauth.xml delete mode 100644 SeriesGuideFree/res/xml/searchable.xml delete mode 100644 SeriesGuideFree/res/xml/sync_seriesguide.xml delete mode 100644 SeriesGuideFree/src/.donotremove diff --git a/SeriesGuideBB/.classpath b/SeriesGuideBB/.classpath deleted file mode 100644 index 2731f9c53b..0000000000 --- a/SeriesGuideBB/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/SeriesGuideBB/.project b/SeriesGuideBB/.project deleted file mode 100644 index a2ac487cc3..0000000000 --- a/SeriesGuideBB/.project +++ /dev/null @@ -1,39 +0,0 @@ - - - SeriesGuideBB - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - net.rim.ajde.internal.verifier - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - net.rim.ajde.BlackBerryAndroidNature - - diff --git a/SeriesGuideBB/AndroidManifest.xml b/SeriesGuideBB/AndroidManifest.xml deleted file mode 100644 index 645da703d2..0000000000 --- a/SeriesGuideBB/AndroidManifest.xml +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SeriesGuideBB/dist/Android 4.2/SeriesGuideBB.bar b/SeriesGuideBB/dist/Android 4.2/SeriesGuideBB.bar deleted file mode 100644 index 032372bf68daafd5ce8a6b0ba8ae9dd54093c912..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1693283 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
egnjx-2* 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 z%0A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 z z)P{!)0n#OKDE6^~1MfhN6k{Vfika%ow_0aAYzb92u3dI#J8Jiv<4M|!+hFD1^y|+^ zqkR|YG7BDt;#?0^g`MWp?Wxj@QMtlI8+VR$ZRO|9;egB2g<78OjkjAe(uQQ}!}jF| zJsY}(>s0R3KhZ5=duR>iS4I#2j~V^HuU-7RnE$nQ5g5a0vHF|GPu!VCG@(pD5EU8$ zCYecV?z@wM>AX#8}czCTvUz;KgJ5{G1{LGYS=L==ji|%XYYk7#-U_B z@8R?CeLUv~Q?~;TKCC%g`~?|)AxF+5%ZS2H9VH@B? z*a7v9fDC5}cZt~)T;AJyO!!otO?_SE{bO?G9%x>9hsPCnb-u&QZRT=OvY=vWAwsLO zSb|$$rbMu65D_?IDaiTBMUJC(q9v;N6sO#H_wAE~-ig|}1Yyaqppuc@=;RYQooO(~ zS*W}$IXmS%L|I=Se@ET`Z>78w-t9NNazsNGz;XNen+lkjA`hp#5A)A9Ug z4`lO``&->FEAafs&gs8T+yAnH-$r1iXJ-8uBjBWY&+n}#*6Lv*e<&mZSc02fy?ga1 z#0+zC#O`k=I($;b%;6z<=9`yI!zd(5Ej6yUJS)nrGUCk_ztYbtKly7e z=1Zg^)sJh;a~F`IVH#>AjVY!wRXW!&P(RuaV~t&sY+q|aLEC-y`Jf+Cof`3?0BUe( z|1^rbd9>BG2<^AYd^0_-udPRw1H7=0oWO0t-ncnx>v~`9JfS~-vCcsIEvxES;TXU# zNqGL_&J6KC%IaS?Ljq&Qe=hyQSgVg@Xr**Bx@A@nR-KID2q|(VnI76ti%H zYo$gNba19v)2XK1`eDb8fLlf5wMwOWf+0DHO;Rz%ObjRfvOwRIXR=P4zNbptNE~I} zZy8!y2}R_j&^B&P&xM)PD7{oQp3=DXJuY!tStUv42Ur|+tUd0oInEm46X%^P3Z2a3 zjSKW8?6hZ<_YCqI(m~RNFo!XLAf4KJ1NkEN#>mdo_r%#$@-ZIfZGj=I^Z(R(xJSeKX8f& znl95c2pj8IP$ylavb?H{>gMI4xqh8TAzaCPQ#pocH-3>ue_3|xoMD@Az?+mDxc>51 z$EN4WSL-;&#V*=r^fWeW{5C4sN{>KPI{@>N=Xs>7CsAFJnWN2jV zXr^cRf5M;pRsOoXJy>mUQ0pu&CZ=I3ULs(+EsyLkhI~9#5*(6476?u_t}nYyYEjur zKrRg-olAw9hK#x^AeRpdW4F^sUlbjUEZ`3=koE}ii3c&zWIOrPwMJQ=6a$w#C4I0K zIC$N`oKhzjsx5)W_*H7NKZJnvmLX@7(i0IR3dEqx>=TqGm?q$B6{07sC#WaFulgJ8 z1@Q&Wv1^05%c08+fXV9epc=TwVqN zE3LgtHbqhCD3Yc&W~A*a6OTRIR_xwWtfTt4q)Zhc!Q>UzhzVhiB@=6Iaj{El?S+j1 z>!l>??Ja22z606&$JeiG_W5MSDpXwX*H-6`quH`sHXmCUWZTIsFtS96n-G z*cGb7Jy=vw$n-K)h8E|XU{J)zN}8-$q{WICYC?PFv3^xY&tZxgSH2e3wlCQ^4!&&D z8TlIDZ`oC<)}EASJ8O;8QNRwKJu#8&3Gmn`rPB!tQ2X+&(gdy|TA@t_!_AxVK&O8Y zv{PP?@8HF=JamcP9toA+&ZxY-J%e!DVbrZs8NkAFqn|#CxklR96)-CNb3Y|&#r3C{ zVt?qMT!jjl4`__CgA8A9ZyXf>Ml|G;28>T?%&3V(nd5t zfc(Q3V<6)llr7c+sH#EuYv83Uzy<)e|E|mR(ZCWP$nICj_zrU|%YZ65`{}gL5NW5I zEjv6dAd}hk@n+}s)7#3N_b_&6VaSY>ouRG$*j%GJIQbczt$6PnzY(wXk_}v^0lBKZ z6V@Ht*GSi)t=oaTn@66ejF2=`&RxTSOOi9H$Q$l{(r}w7g~gKaorQu;hDazyyfbP0 z&e@zv=TVb^sg+%M$a}66H7kWz+o4eDfftMc63F+gP>$u#`-4lbKbm{XoZ8MCnRl6H z8YXs{Fe(?`gy2?q31SA@y%xM@ro7vJ+!d-%dEfZVc#luLEkmCH_0t$0K;uPA#0g|i z1Mc?Ua5uE9HBQDprZbzf80}?QII?Y9iZ|Fcq_w>}8IT;q#~uJjQJ%AwA2}EFX{FAz z8R}Ah9NJ``t2_I!hZ(gAr;ibE7kEbMdahq^6nP$t4n7Cfi(K2NUz)$smO?ptJ3ziq zAwIq?Y`YOEZJOC$2Tcl&n3VmPq+y8%3IY%pPX=Y=SC!X86KL13f!Hs-2;7-#`#W<4 zch^IAuW7o)?gUyWZg_I{Zno7JYfg>?DrK%l1iS`iBBz0ff~6T#qLu+mCF!ei&*>UD z=j=Gu6`TSJ8sO=`R%PuJpUGp3%;g*NuxryFj?4JaN4PlAXhBs>NnYYC+BnXFCa>jJl9VJ%~DE#q-ViPO_m zsPyJIZ|Kx|TPk~BPs3nNXZ$Tk!7;P(+`&%BlUO<1UD3RP$JFr{qWXG`{_Km1wEI&- zKXcgPJJRbPJ^=Ycdj|IpARt1>{{g+)U*XLDS4r}J#If{*zweyv4o2cZmHdS06j0RS z`({CD4u|klgrbBmv?vQqNetslHLmQ=QapFI5KRv%QMG=sD`J@fX{u&Hg zKek4NS8gs2VU%o#M{UUUH~&~LJ^-;MDM%qd`nijq@>*xOy1=|#Y7y-mqB+tn<}Kna z=q=1G&MicKNdu34@aZxNYZ63!Xj7fkN-g%!(F#%N;G^&s#9jM25aFZ4b?-@s;7HIw zFlHU58|`nI&PCG8(1vO*@RR+y^(p;JdV;er6-J1TK5A>K=PlsUyr&i!M;5cas-ZQr zx0fCh@m>bOeF#Llfv2O&p)05JpBqV#8#9ChiGQ=R6+Lrpd{-MruO~gkbvg9D`>UPtzBbskGyHWg`dA}L67C5S z6El#U0XV?GE8X3O(!FN6F*#;Q#&AN^P`nBADl6r|D1T#5o|C9t8sCgXlAY)+Mekgc zSPcBW!74VC*^&D4XG(@kKO(F3`;g;5VvlkDCsTEBvo`p%M4KS}8|@#|N%^yaHZZ{l zf|c=OJh(J8xgfeaij>%=kc^O~I?2|Wb*qNaOvdg$Y&j&rI=ISCzmTkUn=R|*_IMbS z&!jn5F_5m-xkkncIic;*dGpBgnujxP=BvEe4;04ZYzv~C-adMfI`MdFSXM#NEFM$j z7Wi>K;X|@IQ0^dYzRE0@DHk#RO6x=PIizs`hbbphoE6`OEb=LbLsIk~Kj$=M*ssxH zk2uUNS>}{1rjxZ69Ax~q?cP+UZallQRmWNm90lB}~^~C1~hML%b-@Mv$ z%fHOc?Ivu=iz`^okD14xJEZ8*DiC)QhLxl*j+>PVrKhirr>r*^PmorENZ1BwQy}NStT(=OA+I2JtXl#{LiJ#4L7Oc!$!}Os zTSGJSnzTjb=gcp5-7b}gYmHmG;wmO{rFUsBms*Yw^*xo>b1b24`1PSi$!GpWI1^10ZfZ*;B zAh^4`dvKTFF2RHSlf37C_nh;c@4fe5i)X=}*?TinRoz|HT~n>Gl7?UIM*pd7>)|`r z;I7$eVT{HoM{6+n%z`S5>_=JReI>=E(oAmbXbertbjv7MFxit}@BQF~P&boyz}B}w zBmC>y4dP9LFP*3*SJH1Oty8>AA1Dki*Y#@OX!-bdt>^mb98cc!*`-I@f#dCrEsrPl z6Zp8bjG{y%W4zX)CeV;xbl9X8HX$a=@Dq+>MqCumTdXQ|?tJPQt(Fg{s=Z<=BR(vM zQ&^KjE-U+X3HVI=uPbdmM*L)pg_H<+etv$zwiS+T(%58E`H>8_ea%&V>ThJ7#l?&k z86GIYYjx?@+Mb2{7tch2Mc8vNqgWBa>t&ij4ER0UjO*uR}zCjJkN)4&$Mh2M7w@K(7gv;oNh(C@nug#+Oqz+aN?CTT z=a17sY<0e3gdc^V?UWS+x%xeH8g0Bghx}dLnjb>XFG~>G-OP8ZlS?0>5y{Eb6U<`% z1s}hh-cp&acs_MY)yf~Cr%p&Sb6Fh;tI4LtJ3(gpO{?i@$K0EDNwyas=rjyA-1ofN z54qS)YG$J=S`5+ktc3R0;J{sNdC(2Uyq3)&cDw^HB|SE5yFn88OeebxbyB~va<(QOXHW1dPVFvMqEBMHR*%r0Wz7burkH&DkY$0X+j z&ydHS3mO}!f~85~(GwtVgX^xF5!dreJcfCaM+n}}sYTupK74O3|pJk}ZwdD#mI*TaPzBi&9*E@Y9qvWn9# z@4>wdsWYt6Y*#84cZD>wyhq66Dm&pRy4gWLba8Ivw@^APmoV~*ee#6#{IC_Q^1}RZ zRnaIfKV4j)S<$?3)aK<;;gYaRM1KQ;*|3y~JWyMAPhOQ0YleC#FuyA?qcOFlaWn13 zW$^5Re(I)nbYxtbKl2mSg(kbgT~@k+ofvr*9M49-6~Fw&sy+3qd+-fw688$uirPg= z=0_IC=$gK>?F<(xmY2pjqbeQ)ruL_(`#-e-5gKM3I{wFH*?*gaa&j>?{P(61FCC5{ zhBMHSiR5IOB z5z?i#L3qx8hoTKF;7i<9u>o!VwcouGe{?i_!Gklgq7+UZsc3PgLgYQPh-4&szduZ@ zBr3FW5p2}%?v)xC3t7~TF`oIVXgcNN!(;fjPp-l|G2+$@RK2r|!*S&{6eljLjM0O? zSmjsLMJ-M>ZKxq7r>DF31{B|Ai;KLPR4*@=Aiyt3@pM56-s;S?WDC{lb(SF0M2upY zK<@&LHU2O^hGEDnbKy2qCzEfs=fopKS~x(xEz~9MJx-54S|H51oL7Ls&j?R0d1Ru6 zK<3{pM=&x*=zq>;HH4hlH%%1n*KY2~%^oP4PNjv zXX-aHnSmA!YC3erauNmG&vQ6X+zge^8ycIL+OS`A^QZb+QY<;yfzM7M;Qk9%g z8nfYQnUP9_I%dzrudIvNCl{&B`G~vOl?jiv;;fF0JC54=zH=Q?s_U{Ob0td6vG0l5 zMIIIT*E`pzbJt4^g$*4|YxIlZ!-pB{;EInd*L9AFlsaxw7A#G3Lz`TmRcAGGQ7Vcj z#tgGzW|v`>sHV>*+hkXB8giQ(Ov_c)D6JejkUt&X=CfP%F3Z=el-|SV?(PWNq_it? z3KSXojK99D8ru+OrDIZa&!?EIlrNykJb$Kti~s9Ord3b!QAWReW8p+k zj>48)wUSLR(+jrLu1^Ge1_S2q<)&?Qsb_xdgR;xODI>Upd3@eaSTDu9@LbOl^Xj zovV~1xAtr+EV zD@|>VS&fE;j91FuSTTmyn(+;pR*}v4(SUZ?+q1NySYuM!uIn7f0jH%~j+SQCCF2M8 z`lQY1)#<&+iXdoRjX))j2c&-fP=?J25WXw7n6GVd%<3%pDyN5*K~mQ%aw_!oHHpq- z4Md5E)#`J~yNJt*3O=ZTmieU=@kMKvV*120r7qA0)-b*wOs{BKbadOOnvm=wyJ5JS&W?_d!n&QR} z*^?WnoJg|d?-&nnjq<8<8Am0U(!TS4$M5VWId&&o^1T(J+i)R4JY{FSqjM7D z{`F`RIMqbBSlDen78X8h0(jebYeD)0xT&#M{I+y+Y()012UG76b= zN<<&v>#J_4P<{rrk`lv4yA*Lm+Y-p8pBP5`k`-h49B_ffpZGlBV$$*YJ3F3otzmuA z{G~MQBc`QXpO5SVhjg&%fl1kT47?o{o6qu0>BAAuT+HS%x*NQ-Pl;BEg~tVL^MeFK z()LT6TXWK$6hm5Fs`%O5Gf&aMZl?F21v+^%&)ZMG=fnU1lw$qAmG|GJSYrXdM+jqJ zeg9YP3^O7Pb#KY{_o4;w#gv^;eqyXze(xfjS~YQ14iw~Zl`0hRktulgMS6Pugy>w( z!5wgf75H6?|M>W}&Hb!|#r}iHEQq8Mjt#OBfyT}YVmjIbZc*GNTIAc8s~G%kBwSMY zL6)DNTgex#!){h18;>tOSCS?vWwCF`Y6-sG`jyV*|K^k%CG4WV_8Z4L$-KhpbDdFT zntGJAOq18nX>}I*#eo{G%UIXt^jWVH-xE!gI|M6qaG%0_wjb9(Mhg|Z(n1(EY2({> z%RGXwX|Zyt>W(*ITQcUy2!q)&JX+ZDThWJgbm)!Nva#4u5kM7h#lghTo#gV5^ z8vFQZ(#-e>U2_OOZB2V^6DbCKcnK^g?-*sx$9o_AV1KQ}5|gqd{r;PoX)BIEYx?*P zvHqM^sF0Nh(4yZ>HCjqh8-|F-DKdkZu{VSC@QBgih^BG=O*PX1Zp8CJcs&_Qo$i+v z3AD-Urzhy&`roHHp(q9PFY~uWTk-!N`v1pjNQTP9@5%C~{>Y=cjK)t=!oKX*sFtZx z3lP^B-pcf_ewNyCslJWhLtQN^4A074sGLXh%23eI=nwN?USU&wB0zb8;&@L$v*b{a zFx$eDT@fD&K zG96;c7f~C6AFBOTJ5)Q&DX0T<>-!)G@x1Go+xf;0jT5RAYR}KA(|Ln-17-uu4*L%A z4nNty{@?(DxJBz{K#a{0|JZ1uf!;z}d+)+lq6tsibb0(K%E+u6ed_z9*~%@C_>o1d zu?boju>Ng2`)v?;+NS@vrlw%3Zk?T<&}W}+z^)@zg^CK#IrKF(mLt&*e9I{W8YS-( zn^Em=Am^NQB)ZqF$o7BLQ`yXCE56(R>9-%wCv*?qaE;4Acm450NlDRKx>!}jarpAp zZPPTSB%XL2D@GV!mR{`+=g|CToJR6=GH9q}_+#YPxc$+#95xcK)F%i>Tw|iP1|AeW zN+QI+pM;SjA6n+DIR_)2+OUIBSvULcif7rFHm2ICQzyAZf^v@E#gu)WYg@#HJASdv%Xb1iStN> zN9--X`C@d3Ig{~bUbe^`isO`8<$aL0?pCIX_Io2jN^SaD_&BQv-xg&2!#hlE$?1#u zDTO&F4AvJL)$m7rxTF?wx=krKHT|GqL$}Ty=W!CLzK{A3R0Mff`9>jIOG$P$OlmUr z?kZscMe02SE1xr_??h-|@^l=|X)vd`-d85QJxU&L6ZkQV%T{8!G7%rvh)ZAJ%H0qf z^I$06I?Z!6ru}70N2U++HnZp=n8iar>efc}ae}Yz>so-*7;VvG5O+6+f#h^mq0{lS z6T$ai$Da>bbe2=65}g@t4zrR=if-Yx`D^V@Go>xy*|OBmv`5pV9CfE#a~Y^}85RQ5 zWI46tMyR$N^*-E3IXZ8mIyf`_K*C_Q^n9ON@40grGCYe)uU7KThUvwycw+P6#zCAe zPsi|HxQ{u>Uf@cd`=v(SYH3YuB_%p-er|`l#TA>Zjps~);Oq#O4}I=5g3q#G;9{J7 zhGOlZ>5CD=7@@4ARnk(O(iyt+#f9h1pJlZrwbAogU}T{F+sQq$fA1ZPf6qaGvURdB zwJ~@h3xX_Oha!>#ssm$U5>wZw!wmvlkSlG2a{}%fxlbzCDht ze<%F6=6lqMMdGI{ zRbQljb@!2P?$*^<%e6?kx%#v3S%2;i4Y0{NANd zn5Ur;CrZ2=jCWXmK@@?Os%8n1N{Pe*A{&m9W{_sd@<;ScDj2^N^bgpz;2n34c!pbL zJ;w=r#kaYAIy zRCTe5=6{B&!@XAM8Y4Ojk$vYvorZYz9X)=;hQ#8-*f_h$cw1iWN+P|sidT(vPdUDBZzID8z&5a3fEDlXb zmg~iRLf%ME_8vRrdHLSqs4Xy(TE7Oz#d6`;H`#>F)K(Gy=DND7C2}l{$dL_wx?X-q zw5>n*T_N6?*C+cB^>S|`T}lh;onxK{jch3zt{U242+yC zTr8a2|70Wm<)g|=^$6nhttSb5L#0r_&}p1j2{PU3PuLhHS5~v&Uikj@-B6=l-oOQj zs24xvEA~0$O`eQ7tik~{5&GKg+jRyOcIdlWP#2so#2q7LCno!jqUX#zXE~jZ=u!&s z!_`yozyc{n#zgX1Z-hR^E2*q)&sVA5irvG`&lZ^uTyBCju||=DS;~@<6qN1tu++$> zaVW*G`bON9i)k#o=>~?BpF1gMX`nJqe2tcDQSQ-VTn_{M1Ff<;f`}81?&yD+(RaL$ zI)eeH7PB-H%?=~T^jl=SmdWD74ZGd0Z|W8?&tr8iKnqk)>KlwPfA*^ zPl~u3rm_w#OZ2Q1-33lz5g$o%JU#9H6Ar%3@dC&Isshx^DAq}8x>F6Fdux?eH?m|F zp%LrcQ(fu=J0OXkLJn)pgwdzqjY4bxE{x~Sn=7^@g zTuSyPr%*g0@Tm3duqoh^IQkKtZ zH>m2sdDme;J$3gurJ=OLC=HjJE%Hl63us*lYFz_rT?}e{NC4c$0R909omB27NkS0wp;rZw?KTJ=x{T&u2$I*1Ay-~^<1B}Z~ScTp5R%RtOQZbDfqQr(` zcVU8tAP?=j5}71|b1$942vMAT=QZj~ZMrvQ4cL-Xra`4sE*2b#DaEl)o=L3Lvf9Zz z?g^!5V}6>d{chPIS|DN)v{7tSuQxfi-T}Lutggo18u{}2bH`Z-;M|Z7&$cQ~LNI|Bq#jNd8%_CUzE%w#FvLCQb$x){g(wm;Byj1VijBP42^+qCzLqeL1z) zJhU92YCA|_`;AG2;^N0cq@RfFx3U`P8!xC<4yBW`Nk#KGv_G7-Y-bpYhn$mwx>0o@ z!heW%QnJ5UV0wu58s#_9tEyPU)e0dCh!@jT3o(kDkAkoHVAB;Pqz~^|f%;i8q0I7h z%(SU)#4%4M^@y3tkt4alxhQrgL(?J`oI+_*R1&; z@tFWz^KA<&Jy|tpQx>C6sUM|CDTG> z>*rkvY-g4aH2SqFTM;WMpy;sg(oBBBkBno{F+kBZK+zrfsNZ<@-!|s zgyerQXZFHe98OYAE>=n>eSG))BX~P)=s8X%5Q7+!Wb_<*10?rK+n^*lqe_0!>=^!r z?cuXdbx@)72MuhUFuJ3XQ-ehYc%@4tg0!U-3ku1##I(qV-OJ(R>pVp-g@dNr3=6a&>iezjZQ#)N;rRF z($lRUSSb8T<;=%?2eW;so$DG>urSL@OO30JQ7It<{kH!2dpmlQ`?NxS#?IV{A+I#X zDB5l!kAvRLwyDpy+;dEc>vsF;P)6kV?W1`uF`j+L#Ge8nC#GTLn1Fn1|5sbu{gLl) z!8-n3zfh=Zs5JTgE9SCYI5iW6A$kP?RE~eFk{uqBpomaVBNQJmj6^8&WI^wido>lh z=pCuAT_6XD$Ij3;LYE(%WnlE3W4|^dzBtouIEo3<1TBk-5xWw1(y!unnTS?}U#Rvg z7>5S4rOZkWowu?U>}Uqbb4{weP3jo^))R5xhTdr8jZN9mv8YfU+^|npOExo(T+(Q) zFG59>mR`u9Hh|WID3Te-eqo5NKSGb$o1YCnR$FIvmM;q6-l?Mc5T8#End%<<1&q#^ zfRo^!eQ;NJ+k|;vf2z1Fe`n1%>FMZDvqp03*T&9q(DvkV!Yw0lyZ^YV0E2h`kAC3< zS9a)s?ic>WyZG--ZT`z(XZ{#0=zEH+Fj=jBUZFnnmnD(O-EA?U6I)nABRrWIR={Q# zh&(QMT0=re?nre#uc%rNzkPFoi~Ed#AZZ$$kwhs91^*TrBn-6%(tkZA=P&!Z*zVmGymcFO< zd3QBKU)WwS6US(Fru5>|@vR^&T+ySnRzhhUH07+>L(3}hx!P9I%FtQ0N31N7*Q#i2 z^f+rY!Kp5}shL?#$rS95V?xgnZUQ+%pFkj87q}Btbr-%<)Tua9Rhm!c0;?~k&cIwZX%pgpN{JFUUim{MPg+u zOQKf4!HxrSQ#X>w73R6$L&#z7gmwlkO0;l^Tv;b0Fb6i)p10 zie!Lzg?$II^TlcAIgX3GemyNqw7J-blubfm7XCSo>x61S*fmTxM4G=9Ti;AzXVq2rLQ;3Fa$LrnRT zmMnT}lJ@7oK4(KtN9uia_>q#gl5iBV#F)p=gD!ka*JQ3Voz_ z!ObZ}X&k3*JE!B%;4pWS9|aG8ZS$bwFqwD^$fNgf&7I)iB<5)Q=|A+)zlT7X4>U#U zP6~xQI+(}DI*aQlfuAX&0cUzF1RlG2D$AbIJ47qVJG31RojdTu#pe-?6jOC@>GBtn?`}SU?Ri{K}uCN>!15;FPO+7ObI$45}nV(<9==;Fs z*pfkJ)c)zBE%vZR83;dNoIl~}WynOaE6B;4dw#n_9-M0uKSPmkFLSn*6&m3U<}+Mj zt};Wvj5OOLyk;Jwqt%UqHoZvKSXmhpJRR{{xgc&Dcp0RJanM8Fmh*UUeXMompV?Y< zfBsXY4)O!9HO~LoNfZ97gdHqQ9L=09jQ`u4&YK?l-KW5ur;JGm6xIr3c9Bv0t5f@fVjG-s?LDi*~bWcwB70u>CZ$m|6M!{%&KYuG&WXNru`>JG#iUz%Ea zP#_W*BuJ=C+KDO?CjM1OBlq~D%R88O)F7pD>hRZ4jANZ!sH|zcM0XeVPWx|O;s-ds zn^TB*ugd?*gf;K179|nqSEl*I8p2g}>=G;-eoH`g@!5O-E#Gy{-ot|$!=}oWo2KiT7si5=rQjS&Cc7*!A21iGk0s!;F8zv zmME_02!KF;PHh__zWZ#Q5I_ zoWH&Ae-w=QM+;H-vnbLgJ;hG{4sr$@gu}e3J1-> zpJD|)6E-nHbc0heS+?uaIDHJ-0i`&wzAja2CQziHC$Tqg@H93g>_?y^Tm*EQI9cwg zE`utK06ZjaKd;FY2aI=e9>mCi-v%>vuX1GE&x0~{72Y84EaT^4gWkaKrexzE3t5zt zh-%L&qpyg;7r_!v2R9%FUvpF}tW8?7aU0Q2!iD);GVsR(u9@r1yDhYekv!+5_MBSr z17AwnX>)?yq6%@ueB$*^kHWMX|Cav#*c#~-xca2@x?LA%_T_D7+Dx&;U1E*lcI$w% z*Wg>R>5`XeP50$8#l#zAjrtd+q&-AOT${lL-}Sv}wF|ntPdkKF-PmW(aKDw*;n_8z z11O2{Z{sB5e^%0832fFDh7JY}?*B9b{8fHw!r2>Mh#pM@rngr))YQ;G2$POiJYHQ^ z6kV+ff~jjz>zp|xB?0aN>DW$(fO5Esf02t{ZJvY3@DW9jvmf7=kF&}(LKh;Ak!lpz zaa^1EFPBIKV!gs)R-aqNhIBb?mxjfmY)OJ5^!;p)RE2|*JqfIg2|JoXJeycaqeB&S z#G>xEqH$>rGmnG!iA}}R)}CqgiUm5!I}df%r`96mR#v=9qe}l2DXj^yjGo}9=p|-Q z)vh0BA%RPhCnQ?A7e~WvI0t34-`b^|za(|dPSf@(?VobXE7e|#o{bI8{t8&(L2}`$ zxJ9xdo)}}qZOgs9m0vFS4@ zDI>Yx!h3wo;)pW`3Db@OGJqBUZ3yGLkUCu?fzh1 z##dX3DOh*fH+qv<7~(`ZXS07RPE!_r1NJG)W3()KGrYq`375c#7b=6rC7C>7WOQYM z5?`X8m!n-9(MKZ>m7NtJoY3W+y!9Y_^u_qwXw&|Lm-eLudPX@j?WSf|mW7n|| zSNg+k5SJrW_e68HH(7jo13!KxN3A{&RnG5aMkrYm+^i0~tSIcYR&rYqI3dY*EzOM| zHW4D!tF~l$R>Bb7J+1lt7OyK6m-Ao6`+tcR?H{6@tNB>jDX0R!UQ?|$#k&(C5u zo(#X6=x)50>}txLmyQs6CD)3950#mu;9W*7htT+bUYsk!) zGG)o2)&kbNH~mI2Bh@5uVPb~i?Fc=V8HF;+Bjr`v*c#MVj_SoUE69%ig62AL;R#&x zCRLP0Qgapi^(_MGA*f`!OzYYeID*8cD>cb_kv+GC?lmtscW>X%4}jB8<;4T|Zwb;3 zj_mexUYc^(?iIYIxc3P&{oAb4`RuavPmVtcoarO;oQJ=9jcLUo+|mE_*Zjh^;D3mEI41pJr7ZD43^^4Bw19iPyJP=d|8*!f|2LdjxL z;2~s1<2TDirBID26}FLv&{$cIE(aS7Ys^l{b3Y2n4q1I0$N#8E9?Oiz&=Tr-2 z2aH_WIj-Fe5?*S}Q!#(_*IcxfS}v_UOPr{CG_|hyvQ22F%36rmeY>_*OLH zz#sP>E{KA5T#@TOS<~eJ%xq|4QvZ#>GJjQPRO<7T=a^<{xXtDQjmuUMo;`C_A6IqW zC)f7kVx*+OL!6C(buA+BFpJC=1xws!FhWchsC4Z^TWJz;@&UmnqWtn8q? zRXj2>4RsM$NDa4D?-5^~{1~>F`sL4ifB2X`tx{zw?K#rU?4B|Y z72{vD?DTspxIa~tGL&THmjzKWB5XEM(1gFzh{3)ZhO4`26ZqO>C%8E!)n>g(TJ<5l zvPGy6`_7*4W{teqqxhHoAz|iFv$|>-HSUpx>-y+;d%-pLcH9vv+)}}%=jUi387xTCiYqw2aNli@|0 z36kI5+KWhLOEYJn8gAZD@P$F$erk_HBoUQX*2?M< z*STc@>*`xq3VA3RrnxH9Q5Rh#XL4WH{d9HO`-x|^sSHQfe3j zE861kJ<3-88XZ6B>>(5Q?O4|I^J$=b%lG>>vR)3-KoMal5Ly{kJ0vfOcDQac^!m_+ zg)-B6SCW{f?*}M9DL#x(%%-FHeteM7Z>+-}kxEQ68>*8IHvX=t2zGtX|_U0V| z{T_#deRcUd;fioQhW)Yea)uvU^N_@2m|m=O^MeOA33m%L7n8c(181-KbxZeiEt*W_ z&PLFPTPXQ;>3?iZKoURD{#vMA0geiVM)mlwg$vNMk}7P}aNNTFR(-&WadZ=)`d9xe z=l7pguV-NRk0S6H@&9;!rT5;}TN@HXERQBfxDbVhwMe*{PPtGKJ0!kZG?I@(WXqnF zh{H*x_Y0<$ZeYO%{X&;g{E<_sxM>d$4sDsXSs#!dl?}w7R~UyBiq+cqOW(@ zPnP`^k@_~Z{e`>m-24zQd9&;#n*u%f4n1gb8rs7zdz2EkJ?ca5C#=T zRafTsM-M45CcAqGm`z^ygyTA;+FsBkl`xV-B2Ub1H$~F1@EARF z5snOo<8o0QG~Pbl_82bdRS){zOmmkADUs|05QAZ6LgM z`rE8v!vAQa#x4e*j7*IGN(z?!T@864>xBJGHZ}iDg)UKw@`L|(4{HBfl~xQoSP!&x z>$gL(tFj9jn2ymN)5s(q7wB$i9lqX}$o_n87a#RLUJ0Dg;U?O!);y-Hnq|6YuJhKg zyfrznNgVuodFA21Pf%ov!dGCB_IWp3#T;tM|C5mGSD26Z9uRH*Yl3Ily-h}UU>wrE!-?co-9FLEA$PpyJatLc$e(8$UItUbi24$%)V*-T30ujSy->#vSYV< z#)Ltfw?kyb`FImKknUGm2HGOzTz-GUEO?QHr_mh#9A>X8yf!_RaHRd^gFqP$$#Mi7DaDM#6x1TXpqXyPn*qF$U1rkADei9GZ zF%1{pKL9*I!@j9{v(~B@+tRFA(-j!IhwxV{N`L9&4cJjPN>QbohND~GpxQd?QJvaM zQh9`<_m)a)DBc{=94)-7j+*-z+4tp`rHXBE<)?1S>@j8nPu`B4Rnv$vcX&mEIl??o ziJR%HcGWzf6jPG zQ@mY0^Lg0MIrL{w_YQ5sE$<;K_av3Ioxs-DMpsYO33eSH60M9XjoA`0`>JC*V;^8f zT zYKG!M3Cm<qhwY*H%9NcLuHkq%d%d)3+>K`;#1*;nKJ6>AT zpRw#JvbQLk-j|K61@xnZXKEGc!HaIxl&}SRz6KHD%qNfW-BwIiN7FP|z!Q`ilFv=p zzm->elMXqu=y&d~*@a~dQ^K4%bzl+&#pb+ z4~&dfdV+}^R*u`3aV`b%m|@*KK^7MJK+Kbqr>$Cy+7s(voT!nF#U5p|29`8uO^}F* zPsYNX0a~r&uS+z4vEMdgH@;5Iupza-vm8p=$d38;Zj>0I#|@?}cukmLknx7mC)it1 zfRve;^^IQZ+7&*OTBPDnj$SAaQF$vZ*IYc9xa9hr)B9qEHbP`7ok{|=@CU2 zpZhsV?>-~n^3>ocZ4s6A7Z_U7SvltiX|7JGi(`y@kSSA*Dx6i0<8d#4o#-4Pw(97} z`gy1R;*5uju;(YnWvQt^zB+emWvK<-))y1)qsipzh<92N(B|H)|6!1EW8Mi!$OyAP{{1H6 z4Qf*5?B>FkV|7u#kTh%|k%jAk6T-9G{G*dubLZ=^sj$u)-K3VGYEM;!ORw}FUe3rj zH?9`$O;LufN8eW~Y;3R1)>j{IE@5<70@k*sc^UgvLzrMReM40AF3-MV_ri+vX^_8A z#>wXd-eY94#-_4`lc(T`%rdIvmMEN5br|bVdil)gE^*}ls+Gw~JV=wsT5I}Z>~i|m zG+#HndYCddKRJBmVfs;h+;-Risq=!NM}a8TNZXz0tV`kDMl$tAA#gDHM>0Wdk78yS z5rNWcg6Y=;EKqj5CY+|h+lAB<2}A_MZ#emPAM@|!n|wlcejW(i{xORKG5E@H!14C| zTgRK=KbeK2xq-t!o_feo`ctGlBO;Ddc5}vFs0byewwQBUzeF(zC7ncg$5%9uY+UEq z!mzKZ)d#DpOcYMmrg(vZdgOuyu;B`?gSwe2w&HU zCEdN(FBN?P(KDM5JFnwH2POtGJ7;M9FWHZc{LH8sZ!UVVLzr08q~Cb(2?)QB{74it zDX8yTh2S3VzeU#rt-Z;ZefZ$@(_YU(l3p}jE-) zy>Wg%RZ8as6BfVc{w$*Rxk8vLsI9GJY-3}C=A>zVi1mgckkE`#*yoYjJ$E(mNSCIU zCFPtXIW0eT+gU2%nnUdDn+7SpH@M`_ypI|hsCn2hrr8H!o0GQspF4Tf3a(rB#rsb|y;VuUTN zUVXnSajAxa?IrQy6ZD7&y-G!0j&1<`RTkR(Lul^xrFsCb6UTnUhZP=6F(HUfR()>OdTWxP4jAG0y4i zP~9*aAxFFJ-slrnqVI#medQssea|2nAd>uOJAM3q^5#J3!@8j~f*#Qt5gsvDMXEAbTz`=YxE_>dC-U(#YSb z`PtO?N>A>2WD1J#=2tgx@=%|*lRdKZ6XI4xYRr9|JsGKnWZ=S&`j1db(hB)*AgP_h zsDkcT;pA9`Tcrc?)OgdzQ#hgXydP5)L}F7YtWCEW-C(%V+Cs*Ar=-m`lBymog9dX$ zO_e!=-EJh^7zJVaYfel^gKl#h4^5X@$0gD49zF7s4Fb2A*gh1c%k9YA>E2XQ!bv0d zBN@e4l?IyPb&%Ia%x!Y?=_b3yHAcep4{%9SF}@GQ9k@8WZ)6WkQnwMMiQ6ttPL?|# z6gu2;&zFJ^Vi|X4ZAY*_jY~&GS0fs<&HnA0Iz#wCssRZZwhHu0PU!Gu}oRRqtJ%66ntCemZWc*gBcl~k-R+U z*z7B^9%^xFqfGDHFr!wZ%rU08-Qiy5&f5@-vupH4={ur? z#D{=`9wEDezN~j!&u%JXx_llk;O>3So0C^(7;nozHPu{QmfOZ->jltql1H+|e|0&Z z{fa-@%_gM{hK&4?OZDfobAL_J9G-NvvwpI{9_vEMZ%~>_6%HdmZ zdC829HxK@5LuL78mrz!9-u$aE;r0salqa3DY!!1&cG)pxfQRsAq-k(J`R;I0lVL6} zy}CMA8()FAU|X3Dx2||AS<#_8jUeJJS8mir$aGva8CAamZAb)hbN z7K`ILjOE?^!0~!Ma&=8Tn^_Rwo#)%i8WUxF5fw)P-1}L$qreq;2$*dr?Dh(qFJEc$ zk>wmBr;2-O>hj-A<77?CcBt%p<&U9_^u{-BYwuJNv=W^5^x&8es3zZ=<0?O*f0$_} z%bA@+l0La(*-Q;FN*Ux|AKE)M`%;`1{X;)5iIbmR?efykU6Y+>7UEdvt*YZ`DU^>@ zr0WagS=*k<3D4xXE@adtH&it1*RU&DM5?G^*94r>*r$G`Uj_ z`4h`YtE};XFZDYF@gc%FoFHNm-er zx^nmMed3nsK2N02?34Hnf~>cf8PvJ%Y394{#=w1SI@Yg;*?Yoc8uMQ_hKpnRyd+dH zphYB4QE!_WPBbiI>e*#Zs2z7UsNZ4Hwj09hg+i?pcDn{|(pH@(aG$Hd>IH4m)}1GC zoztVXQ+}zS3!In%f38;hJkuK8A#r(^_{Bylf0sqlVid^^HzMn&l6(KN!6daJULS7z z!foN*infZak(MZ>by~Uggwh(gw@ymPFcMl%$>(D=zzux&@f*%eA5xgh*6TEWs%s4{F-&Q4D>WtOc zsNx+#YPWlNk({;Pe2(@ow^?ln{$>k*@4i0Wu4HfH5@HlKx}3B5{rcu<)i5-77;Rwg zC}hhEQzF4!?Oiz`YJb%<+CX_UXE<^T;oN}gXZXBOr&ONt>d;P7)a{Nn|d%IVKiO#9(;DO8J;`{oP;)yrr!(4h>UnvV@6Vusw zww;2_&tQivGB+(FDzld9?VZ$rHBDz{ouOs4#7_j19q*B2Wt~;sfhz(gc*M*Ke%`mk zdYx9^foG-|B!j&dDY;vE*=eU4SPZ|EP<3G>cn^kb)Ny#zacT3iFkoUfN2v@<6vjAVM#rCpc(GVo7WMfq z-Ihzjsn}68!hBwP=h@WIld;<)y`lFeI**9hwNRpLe}*PY05y9etNQNIB5Wed{=7-f z>2QW?(;(QfmmFy?gs;0z;{I324#9=F;B9GCUKwg%e z60>|_jbA$he%!y71mF&mzPgl{H+&g0E|#^nk=inmMt(Zx_Sj!j&ktS_%hj1Z*+X(} zaSGsb8d7Y~Q$M^ZAvnTPa(<}G`&99HW~|q3(ICS$#3gw1!RAB6DDJ5%DO+{Mk5eVK zLyQPHT-OpjHL2X!EnM}<32#fiaUx94n@_pZU3?T!I;-~q)EAK>H!fmKR@I_zVK2 zhrjyc>8bz}1H1qz1LsP9e+cl8RRD?sUViUT3WWDX0M7tQz{d&!o&dA~AG!(v9~uO* z1K0&nf&tD0zyVk42e1rK3kL#;0T-VN@CqITase0t5JUihngEaxL7+MST;Ntd0W1KR zA%j4z0OBYhP$j@?R1hc<;0Ztx4LAls0J!P)0Q~^?7$DFYfH@`zq>2T69{@2n2!x6Q zTn_*|F7SRl5GV=&4j%;407B0^LJ%m92>4C_WMbg|lYl^M015!kfV_eMk^wf!K_D0k z;PU|Tlpv4=fEPg2TM(!mpc9~<3ItjMxB-BC2Lj;%FaQwJfIz|kDgfuSAP@o_aIFB^ z^uVec6 zAkZMd53((930_AXnKj-07C%h0C0l9Jp)h!7yvx{ek}w7$pV-IqylsRYym(6 zu@()06o5TIG(Zu+C;*}e2t*HH29O1?13)JV0_gz615^Oa13-#_KyLw50fGSv0EPiB z05HXY=ncRKAP68Ipc`NV0A2zF;stO3C<6HZD7dQtt%^1Pz~AoDuz-MyAc7!*ARs6b zQqo8x-QC^Y-Q6tREZyBmcXuz{UH|i6JU8ro=giC-Gv`9j@QUvW%UwD%ft}nUQjtL5 zFWNAb?K~yPKY>6|>M@KhTqkbPKp-de8O0W^5u=zqpfaP_##N#gH=b$?VlAf#ln4Y; zQih&PV;2vJQ_^p!%s>`!ibsT$3Iu+nBuyE?GLG?zIHd!D^c1BTqgclY?h&nwzf*$d z3}FSwh#=Cx=0yQ&(Tn+P;~@#ldN%{uO|S-&js}coBQHo$J`nhw(lloXi}{bMydz!( z^+-k9F^P@bAZA6mOm+IRh?6`ZxKbdHf`T+*5Q{m*TjEvrZc5OSq0C_)&-kiJAdrbN zbYKjtxyV~mR1F03(UgJAW)~NEPP}U7Mh$v1hXXt$w7Pdwfewsj6$f}v@*47lMhs>d zCkUx2F4SfmyZOK`wE}_0jAkd#NmAR|7{EqulAw;9p#c-w&j&Ks4Fo!|nJD!Ff!qw_ zIN#ORrwHRbK@9?d>@;B!KP>62K;R115sdL72oEWV=k47xz zA~D(o0=a0;OimG{tv*027I2xb+sP3IvzO20YVUkw4Ub6GK^_ps8De*om-J;95&Yaq zA7dORiPYJeX~$gd@N*Yq=*$|PkfN)9V<6jkLzZsd&vG8{LwEbaXm;_DtUdH6#&e4J zJ=G!oSix-)_X-4x(1YdN<(uB#$8h%Ynv{KvqctnIPNKeQmQn2FJ%9CcZm^nLBy|U= z%vkpEf%F5!fhim$WMCjrjIQhJj#jer)AB!6VfPU6{=^z8~d2Lmfu4h8H9p?d+!qo4HGh zG0r}^F_&|EJ=VEIM`m(~DC0bnhJ>+)_xw0sPSKxTJR-fzT}39c|Nj@giFyMy7|lMO z^YbJ*OCMGcLA=RFlDi?^n)OkV+W^j&p%j6=%Ilw2fE!Pg2$r<9WP*=2IB8T`y&XsC} zZ9L%nRi4ERu99T69?K{W@`4;|>=X03$Iol6k1);>v`&oa%6e{+biEp8Jll9r_6^P` zCb5GzWZmc-WCwvw_JoGa;|^bK7E8u*oR1XRqUPAo7xHfvH#YNxG~1m0jA9RO_+`6) zV=wmpMNMxd8$&IX0)L%gPFoy zR=Nqoc}l9u1eN)bv>o+{L&9*t>3M~1V2C9GgAo7vA%Zt{YUL^~?? zNk}R(@)rduMLBBHj?VOB7*klu9*%OJTLg}ICUN+Nq@<%5HKY%p{y`oaH(X z2|4arB;il~rZhEaK{tjnj=3ynGy6EiS*~%L`#j+#@Ayo}3C|~#cqAqnDM>>H{vaFq zC`?_ZvzjBsI4SN-rtT@diJ5HRC|7wwjMMrOt2oLB5}grK3R0T^?BFpUh;r7sLu%5K zg@RO~8GV?t-3ezWSBP<5{!)le3}!7mxW+4@UvO8U6%$y@R?c#r z$3(d(HgqA3C9GsU|8blP+~En4FS%ooo{XWDd(Y$qgP7eA9Oh3HXtm6rwYOn7{&7 zvWJu0;t7FU_MOCJq&h7b$OtAdgZV7u5I1;7$Zh-2ul!AUS}=t(+~pZ>h;qmLNKO$d zQj=~BU^?NfVF!nKN4&f0jXeBA1)9>EVa#9?N4UZh-V-@OF7q9!$xboK(}cc^VKyr{ z&ND*psb#t{hYeihDZk!VljNrwO=-^$8j zhx!=p7|RBZ@|5_G)Ev_YXCnuAK;*~roZ?Jp6}Jd}qL=U+IVnshMzN3`yd?5d=PR=a zXFn0VBIYwSMsb?bfqASV@^f`gC3+IZPVVr9CIwp z5a+Xg$UIiDl~V+L@vTS-{-GAL*~X(( z4T6ILz4(u7HEQg8~`IK~Y-Mi4iPeFUN@$D=3hh4CJOh!-yFg6!@OpRG<|-na>vP5GQs} zAT?Pi%Lt}&iI)V$2?`XZCwqBLc-)}CW{z`@&xC#z6o^k2`ZAx@yeECUpupdhVH7*K z&L?8U_jhvg|No9}DtCyNASjTZax`QD3pmI*-tyzuL4o45XEFzQM!avVnexaFfr3CJhQ?q6jtV&qqR&$q}+sl&Z8~J9qd<$d5sR zA1F*^nlg|{gmZ{T#7S=+6yalQvUOpcM6KL1#v?fj4CMUCmIFyL|nJ zy(JwLX~bxj@|hnqn*(ha!eq8^jVF92-JhOGRoXIyi7aCyM~Rlj9+RD7G-U`=nZsr- z@|v%*1_ct6of7nB1T$F54o>of-?OQGIx(0r%x5(x_`(m_^=NuAmmQqqHcyH1S5V+v zvQve63}71Jtm7dua#$nH8OUg6vxQT<;oF?{n7`@BAi_Atb)FMBS5V*^GEjp0G-nQL zILvuMa@#YqP>5QzV+>2!!X;jjD3AK57`181K8|sX_eA?!&!ZUi=}3R(v5Ku6