ayuget / redface Goto Github PK
View Code? Open in Web Editor NEWAndroid client for HFR's forum
License: Apache License 2.0
Android client for HFR's forum
License: Apache License 2.0
Il faudrait ajouter un bouton afin de dérouler le sélectionneur de smileys car par défaut lorsqu'on rédige un message, le focus est fait sur le champ texte et le clavier virtuel s'ouvre, masquant les smileys.
Chez certains utilisateurs, le cercle à droite de la liste des sujets, indiquant le nombre de pages non lues, ne s'affiche pas
Une fois une réponse effectuée dans un sujet, lorsqu'on reposte dans le même sujet, la réponse précédemment saisie revient, obligeant à la supprimer si on veut reposter quelque-chose
Fonctionnalité à prévoir, au sens large
Tout est dans le titre, effectivement cette feature est importante car tout le monde n'a pas une vision d'aigle !
En tentant d'installer l'application depuis l'apk dl ici ou depuis le playstore je rencontré un message d'erreur :
Code erreur inconnu lors de l'installation : "-24"
J'ai un Samsung GS3 (i9300) sous cyanogenmod snapshot du 15/11/2014 android 4.4.4
Sur certains appareils, la présence d'un smiley animé dans la webview provoque des effets de clignotement de blocs de texte : https://youtu.be/j-lOsHhxWZw
Je pense que c'est lié à l'accélération matérielle sur les Webviews, il faudrait voir si proposer une option permettant de la désactiver ne serait pas pertinent (faute de mieux...)
Il serait sympa de proposer un mode d'affichage compact sur la liste des topics, comme c'est fait aujourd'hui sur HFR4droid.
Dès fois, on poste un peu vite, et il serait sympa de pouvoir supprimer un message qu'on a posté :-)
Indispensable car aujourd'hui pour rafraîchir, on doit revenir en haut de la page manuellement, puis effectuer un pull-to-refresh, ce qui est effectivement assez énervant
Tout est dans le titre, il faudrait gérer les messages privés, avec notifications...
Le fait de basculer de portrait à paysage le téléphone recharge la page et replace l'ancre en début de page.
L'affichage de la date du dernier post est donnée par rapport à l'heure du fuseau dans lequel on se trouve.
Ce qui fait que cela peut donner une date dans le futur suivant les réglages du profil.
Certains users semblent touchés par ce bug, a creuser !
Dans le menu latéral il y a la liste complète des catégories (et y en a beaucoup :o )
Pour une meilleure lisibilité du menu ça serait peut être pas mal de la replier par défaut ?
Sur le forum, les messages postés par la modération sont clairement mis en avant par un fond rouge. Ca serait bien de faire de même sur l'appli
Lorsqu'on fait back en écrivant ou éditant en post il ne se passe rien.
En insistant cela fini par poster.
Il vaudrait mieux simplement annuler l'écriture du post.
Crash dans certains cas :
java.lang.RuntimeException: Could not dispatch event: class com.ayuget.redface.ui.event.TopicContextItemSelectedEvent to handler [EventHandler public void com.ayuget.redface.ui.TopicsActivity.onTopicContextItemSelected(com.ayuget.redface.ui.event.TopicContextItemSelectedEvent)]: Can not perform this action after onSaveInstanceState
at com.squareup.otto.Bus.throwRuntimeException(Bus.java:456)
at com.squareup.otto.Bus.dispatch(Bus.java:386)
at com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:367)
at com.squareup.otto.Bus.post(Bus.java:336)
at com.ayuget.redface.ui.fragment.TopicListFragment.onContextItemSelected(TopicListFragment.java:480)
at android.support.v4.app.Fragment.performContextItemSelected(Fragment.java:1909)
at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:2058)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:359)
at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:152)
at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4995)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:155)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:172)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1019)
at android.widget.AdapterView.performItemClick(AdapterView.java:334)
at android.widget.AbsListView.performItemClick(AbsListView.java:1531)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3664)
at android.widget.AbsListView$3.run(AbsListView.java:5585)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5940)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1375)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1393)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615)
at com.ayuget.redface.ui.TopicsActivity.loadTopic(TopicsActivity.java:289)
at com.ayuget.redface.ui.TopicsActivity.onTopicContextItemSelected(TopicsActivity.java:346)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.squareup.otto.EventHandler.handleEvent(EventHandler.java:89)
at com.squareup.otto.Bus.dispatch(Bus.java:384)
at com.squareup.otto.Bus.dispatchQueuedEvents(Bus.java:367)
at com.squareup.otto.Bus.post(Bus.java:336)
at com.ayuget.redface.ui.fragment.TopicListFragment.onContextItemSelected(TopicListFragment.java:480)
at android.support.v4.app.Fragment.performContextItemSelected(Fragment.java:1909)
at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:2058)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:359)
at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:152)
at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4995)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:155)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:172)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1019)
at android.widget.AdapterView.performItemClick(AdapterView.java:334)
at android.widget.AbsListView.performItemClick(AbsListView.java:1531)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3664)
at android.widget.AbsListView$3.run(AbsListView.java:5585)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5940)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Lié au fait qu'on traite un event trop tard. Il faut s'enregistrer / se désenregistrer du bus d'évènement plus tôt dans le cycle de vie de l'Activity / du Fragment
Tout est dans le titre !
Feature qui serait sympa notamment quand le réseau est chaotique :D Et de manière générale très pratique pour réduire les temps de chargement
On pourrait élargir le concept avec un mode offline complet. A creuser
Plusieurs rapports de crash avec l'exception suivante
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ayuget.redface/com.ayuget.redface.ui.TopicsActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@412b7e48: Unmarshalling unknown type code 464 at offset 856
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@412b7e48: Unmarshalling unknown type code 464 at offset 856
at android.os.Parcel.readValue(Parcel.java:2032)
at android.os.Parcel.readListInternal(Parcel.java:2235)
at android.os.Parcel.readArrayList(Parcel.java:1655)
at android.os.Parcel.readValue(Parcel.java:1986)
at android.os.Parcel.readMapInternal(Parcel.java:2226)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1240)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1118)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1922)
at android.support.v4.app.Fragment.performCreate(Fragment.java:1776)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1118)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1922)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:266)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:122)
at com.ayuget.redface.ui.BaseActivity.onCreate(BaseActivity.java:42)
at com.ayuget.redface.ui.BaseDrawerActivity.onCreate(BaseDrawerActivity.java:100)
at com.ayuget.redface.ui.TopicsActivity.onCreate(TopicsActivity.java:93)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
... 11 more
Le forum permet d'afficher les citations en mode "classique", ce qui provoque un markup HTML différent qui n'est du coup pas interprété par l'application.
Il faudrait dans un premier temps unifier l'affichage des quotes dans l'appli et parser correctement les citations "classiques".
Important, tout de même !
Salut,
l'accès via proxy n'est pas fonctionnel si le proxy utilisé demande une authentification.
J'ai lancé un logcat et je n'ai pas vu de stackTrace.
Si tu veux que je teste une version de debug, no problem.
A+
Dans la fenêtre de réponse si on sélectionne du texte et qu'on utilise les boutons b, i, ... Les balises sont bien insérées mais n'incluent aucun texte alors qu'elles devraient inclure le texte sélectionné
Crash reçu ce matin
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ayuget.redface/com.ayuget.redface.ui.TopicsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.ayuget.redface.data.api.model.User.isGuest()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2362)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.ayuget.redface.data.api.model.User.isGuest()' on a null object reference
at com.ayuget.redface.account.UserManager.activeUserIsLoggedIn(UserManager.java:54)
at com.ayuget.redface.ui.BaseDrawerActivity.initiateNavDrawer(BaseDrawerActivity.java:303)
at com.ayuget.redface.ui.BaseDrawerActivity.setupNavigationDrawer(BaseDrawerActivity.java:121)
at com.ayuget.redface.ui.BaseDrawerActivity.setContentView(BaseDrawerActivity.java:106)
at com.ayuget.redface.ui.TopicsActivity.onCreate(TopicsActivity.java:51)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1116)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733)
Il serait sympa d'avoir un thème avec une dominante complètement noire, notamment pour les possesseurs d'écrans OLED.
Pourquoi pas mettre une barre d'action de couleur sombre au passage, pour contenter ceux qui trouvent le rouge des thèmes principaux trop agressif :)
Dans la liste de topic par favoris et cyan, il apparaît tous les topics y compris ceux qui n'ont pas de nouveaux messages.
Le forum affiche simplement ceux qui ont de nouveaux messages non lus.
ça serait plus lisible d'avoir le même comportement.
Dans la liste des topics, les favoris & drapeaux cyans sont chargés à l'infini
Je viens de constater qu'en ouvrant un topic j'ai eu un but qui faisait qu'après disparition du spinner de chargement, je gardais une page blanche. Même chose si je change de page et même en changeant de topic.
Je suis en WiFi. J'ai bien accès au net et c'est la première fois que je vois ce bug.
Il pourrait être sympa de cacher la toolbar lorsqu'on scroll dans un topic, comme c'est fait pour la liste des topics.
Ca permettrait de maximiser la surface d'affichage
Certains cas amènent des espaces et lignes vides dans les posts, ce qui est très gênant sur mobile...
Appareil utilisé : Nexus 7 sous Android 4.2.2
Lors de l'affichage des messages d'un topic, en basculant du mode portrait à paysage, les messages s'affichent sur une partie de l'écran (sur le côté gauche).
Voir les images de l'affichage en portrait et en mode paysage.
Je ne sais pas si c'est à rapprocher de l'issue #1
Pouvoir visualiser et éditer les mots clefs associés à un smiley.
Tout est dans le titre !
Proposer le choix d'une catégorie par défaut, ou meta.
Nécessaire pour indiquer à l'utilisateur que la recherche est en cours et ne pas qu'il ai l'impression que rien ne se passe.
De même, si aucun résultat n'est remonté, l'indiquer clairement
Parfois, une activity ou fragment reçoit un onNext de RxJava après que sa méthode onSaveInstanceState ait été appelée
BaseDrawerActivity E Error on retrieving categories for user 'User{username='Guest'}'
E java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
E at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1375)
E at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1393)
E at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636)
E at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615)
E at com.ayuget.redface.ui.TopicsActivity.onCategoryClicked(TopicsActivity.java:231)
E at com.ayuget.redface.ui.TopicsActivity.loadDefaultCategory(TopicsActivity.java:217)
E at com.ayuget.redface.ui.TopicsActivity.onCategoriesLoaded(TopicsActivity.java:199)
E at com.ayuget.redface.ui.BaseDrawerActivity$1.onNext(BaseDrawerActivity.java:153)
E at com.ayuget.redface.ui.BaseDrawerActivity$1.onNext(BaseDrawerActivity.java:149)
E at rx.Observable$34.onNext(Observable.java:7212)
E at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)
E at rx.subjects.SubjectSubscriptionManager$SubjectObserver.onNext(SubjectSubscriptionManager.java:224)
E at rx.subjects.PublishSubject.onNext(PublishSubject.java:121)
E at rx.Observable$34.onNext(Observable.java:7212)
E at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:130)
E at rx.internal.operators.NotificationLite.accept(NotificationLite.java:150)
E at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:189)
E at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.access$000(OperatorObserveOn.java:65)
E at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:153)
E at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:47)
E at android.os.Handler.handleCallback(Handler.java:739)
E at android.os.Handler.dispatchMessage(Handler.java:95)
E at android.os.Looper.loop(Looper.java:135)
E at android.app.ActivityThread.main(ActivityThread.java:5466)
E at java.lang.reflect.Method.invoke(Native Method)
E at java.lang.reflect.Method.invoke(Method.java:372)
E at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733)
Il faudrait voir si le unsubscribe ne serait pas à faire dans le onPause, qui à réinitialiser le CompositeSubscription dans le onResume (attention aujourd'hui on subscribe pas mal dans le onCreate des fragments & activity,...)
Les liens internes dont l'URL n'est pas rewritee ne sont pas gérés.
L'appli plante systématiquement lorsqu'on suit un lien sur les mails de notifications du forum
Dans la webview de visualisation on peut faire un miniscroll sur la div contenant le pseudo de l'user :o
observé sur nexus 5 lolipop 5.1
Via appui long sur une image, pouvoir enregistrer cette dernière
Fonctionnalité très sympa présente notamment sur HFR+ : un navigateur d'images lorsqu'on est sur un topic.
Cela serait super pratique, notamment pour la cat Photo
Ces mentions entre crochets souvent présentes en début du titre n'apportent au final que peu d'information puisqu'elles sont quasiment systématiquement présentes et gagneraient à être déplacées en fin de ligne
Sur le forum, il est possible de visualiser tous les favoris / cyans / lus de toutes les catégories, sur une vue fusionnée.
Il faudrait pouvoir faire la même chose dans l'application
Aucune idée de comment faire pour l'instant.
:o
Une recherche avancée serait sympa. A voir si on utilise la recherche du forum, que je trouve assez bof, ou bien l'API Google Search
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.