{"id":15,"date":"2012-06-13T18:39:00","date_gmt":"2012-06-13T18:39:00","guid":{"rendered":"http:\/\/cyol.fr\/blogwp\/?p=15"},"modified":"2013-11-14T16:23:00","modified_gmt":"2013-11-14T15:23:00","slug":"srdice-preference-sur-les-logs","status":"publish","type":"post","link":"https:\/\/cyol.fr\/blog\/post\/srdice-preference-sur-les-logs\/","title":{"rendered":"SRDice Pr\u00e9f\u00e9rence sur les logs"},"content":{"rendered":"<p><a href=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/Android_Robot_100.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-124\" title=\"Android_Robot_100\" alt=\"Logo Android\" src=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/Android_Robot_100.png\" width=\"85\" height=\"100\" \/><\/a>Encore une fois, apr\u00e8s le <a title=\"SRDice nouvelle fonctionnalit\u00e9 : bouton \u00ab\u00a0Relancer\u00a0\u00bb\" href=\"https:\/\/cyol.fr\/blog\/post\/srdice-nouvelle-fonctionnalite-bouton-relancer\/\">probl\u00e8me sur le bouton relancer<\/a>, je me trouve face \u00e0 un d\u00e9veloppement Android qui semblait une fois de plus super facile et sans surprise \u00e0 impl\u00e9menter pour SRDice.<br \/>\nLa fonctionnalit\u00e9 en question est d&rsquo;avoir dans les pr\u00e9f\u00e9rences un choix sur la m\u00e9thode de log proposant 3 possibilit\u00e9s : Logguer tout le temps, demander \u00e0 chaque fois (comportement par d\u00e9faut), ou ne pas logguer.<\/p>\n<p>Ensuite, l&rsquo;affichage du bouton \u00ab\u00a0Enregistrer\u00a0\u00bb sur le Dialog de r\u00e9sultat d\u00e9pend de ce choix. Et l\u00e0 probl\u00e8me : \u00e0 moins de relancer l&rsquo;application, ce choix n&rsquo;est pas pris en compte&#8230;<\/p>\n<p><!--more--><\/p>\n<p>&#8230; L&rsquo;explication est assez rapidement trouv\u00e9e, depuis le temps que je me heurte sur les subtilit\u00e9s des Dialogs (<a title=\"SRDice nouvelle fonctionnalit\u00e9 : bouton \u00ab\u00a0Relancer\u00a0\u00bb\" href=\"https:\/\/cyol.fr\/blog\/post\/srdice-nouvelle-fonctionnalite-bouton-relancer\/\">Le bouton Relancer<\/a>, <a title=\"D\u00e9v Android : les Dialog (probl\u00e8me de persistance du contenu avec onCreateDialog)\" href=\"https:\/\/cyol.fr\/blog\/post\/dev-android-les-dialog-probleme-de-persistance-du-contenu-avec-oncreatedialog\/\">les probl\u00e8mes de persistance du contenu<\/a>, &#8230;), je commence \u00e0 les conna\u00eetre :<\/p>\n<p>Ayant conditionn\u00e9 l&rsquo;apparition du bouton dans le onCreateDialog avec la pr\u00e9f\u00e9rence de logging, on ne repasse pas dans le onCreateDialog par la suite et du coup on r\u00e9utilise la m\u00eame instance du Dialog. Instance utilise donc le param\u00e9trage de logging en place lors de la premi\u00e8re apparition du Dialog.<\/p>\n<p>La solution est donc d&rsquo;effectuer une action pour soit a\/ mettre \u00e0 jour l&rsquo;instance de Dialog actuel soit b\/ d\u00e9truire l&rsquo;instance de Dialog actuel au moment o\u00f9 on sort des pr\u00e9f\u00e9rences. Ou (id\u00e9e venue apr\u00e8s coup mais qui semble encore plus propre que la a\/) c\/cacher le bouton \u00ab\u00a0Enregistrer\u00a0\u00bb dans le onPrepareDialog s&rsquo;il n&rsquo;est pas n\u00e9cessaire.<\/p>\n<p>&#8230;<\/p>\n<h3>Ou comment sauter trop vite aux conclusions, 1\u00e8re partie<\/h3>\n<p>Je d\u00e9finie logging dans le onCreate de l&rsquo;activity gr\u00e2ce \u00e0 la pr\u00e9f\u00e9rence et c&rsquo;est la variable que j&rsquo;utilise apr\u00e8s pour faire mes v\u00e9rifications. Hors j&rsquo;ai oubli\u00e9 de mettre \u00e0 jour cette variable apr\u00e8s l&rsquo;enregistrement des pr\u00e9f\u00e9rences&#8230; Malgr\u00e9 ceci, \u00e7a ne marche pas. Bon, mon hypoth\u00e8se de base \u00e9tait quand m\u00eame bonne. Ou pas&#8230;<\/p>\n<h3>Ou comment sauter trop vite aux conclusions, 2\u00e8me partie<\/h3>\n<p>Autre possibilit\u00e9, ma v\u00e9rification se fait sur if(logging==\u00a0\u00bbask\u00a0\u00bb) mais logging est il un String ?<\/p>\n<p>=&gt; if ((String)logging == (String)\u00a0\u00bbask\u00a0\u00bb) me renvoie false&#8230;<\/p>\n<p>Huhu, la question \u00e9tait mauvaise ! C&rsquo;est un probl\u00e8me de Java tout b\u00eate. Je n&rsquo;aurais pas du me demander si logging est un String mais plut\u00f4t \u00ab\u00a0comment on compare des Strings en Java\u00a0\u00bb.<\/p>\n<p>Autant en PhP on peut comparer deux \u00e9l\u00e9ments avec == m\u00eame si ce sont des strings, autant en Java, il faut utiliser logging.equals(\u00ab\u00a0ask\u00a0\u00bb). Faute idiote d&rsquo;inattention.<\/p>\n<h3>R\u00e9solution<\/h3>\n<p>Bon maintenant que ces deux petits points sont r\u00e9gl\u00e9s, je me penche \u00e0 nouveau sur la question du Dialog. M\u00eame apr\u00e8s ces deux micro-corrections, le probl\u00e8me reste le m\u00eame. Mon hypoth\u00e8se de base \u00e9tait d\u00e9cid\u00e9ment bonne quoi qu\u2019incompl\u00e8te.<\/p>\n<p>Pour le r\u00e9soudre, la solution consiste \u00e0 d\u00e9clarer le bouton dans le onCreateDialog et apr\u00e8s de varier dans le onPrepareDialog sur la visibilit\u00e9 du bouton, voici le code :<\/p>\n<pre class=\"brush:java\">@Override\r\nprotected void onPrepareDialog(int id, Dialog dialog, final Bundle bundle) {\r\n\tswitch (id) {\r\n\tcase DIALOG_RESULT:\r\n\t\t\/\/Carte SD pr\u00e9sente et pr\u00e9f\u00e9rence \"On pose la question\" pour le logging if (mExternalStorageWriteable == true &amp;&amp; logging.equals(\"ask\")) {\r\n\t\t\t\/\/On affiche le bouton ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE).setVisibility(View.VISIBLE);\r\n\t\t\t\/\/ On a une carte SD, on peut proposer d'enregistrer le log\r\n\t\t\t((AlertDialog) dialog).setButton(DialogInterface.BUTTON_POSITIVE, res.getString(R.string.logResult), new DialogInterface.OnClickListener() {\r\n\t\t\t\t\/\/ D\u00e9finit action pour le Log\r\n\t\t\t\t\/\/ =&gt; enregistre dans les logs, le dialog se ferme\r\n\t\t\t\tpublic void onClick(DialogInterface dialog, int id) {\r\n\t\t\t\t\t_saveResult(bundle);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\/\/On cache le bouton ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE).setVisibility(View.GONE);\r\n\t\t}\r\n\t}\r\n}<\/pre>\n<p>Pour cacher le bouton j&rsquo;utilise View.GONE plut\u00f4t que View.INVISIBLE car le second garde la place pour le bouton, du coup, il y a comme un trou dans l&rsquo;interface.<\/p>\n<p>Il ne faudra pas que j&rsquo;oublie de d\u00e9clencher l&rsquo;enregistrement automatique si logging.equals(\u00ab\u00a0all\u00a0\u00bb) !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Encore une fois, apr\u00e8s le probl\u00e8me sur le bouton relancer, je me trouve face \u00e0 un d\u00e9veloppement Android qui semblait une fois de plus super facile et sans surprise \u00e0 impl\u00e9menter pour SRDice. La fonctionnalit\u00e9 en question est d&rsquo;avoir dans les pr\u00e9f\u00e9rences un choix sur la m\u00e9thode de log proposant 3 possibilit\u00e9s : Logguer tout le temps, demander \u00e0 chaque fois (comportement par d\u00e9faut), ou ne pas logguer. Ensuite, l&rsquo;affichage du bouton \u00ab\u00a0Enregistrer\u00a0\u00bb sur le Dialog de r\u00e9sultat d\u00e9pend de ce choix. [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":124,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,2,6,4],"tags":[26,114,62,34,18,113,47,112],"class_list":["post-15","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-developpement","category-php","category-srdice","tag-activity","tag-android","tag-developpement-2","tag-dialog","tag-java","tag-php","tag-preferences","tag-srdice","odd"],"_links":{"self":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/15","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/comments?post=15"}],"version-history":[{"count":6,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/15\/revisions"}],"predecessor-version":[{"id":210,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/15\/revisions\/210"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media\/124"}],"wp:attachment":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media?parent=15"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/categories?post=15"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/tags?post=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}