GithubHelp home page GithubHelp logo

mcmrarm / revolution-irc Goto Github PK

View Code? Open in Web Editor NEW
532.0 33.0 62.0 2.38 MB

A modern Android IRC client. #revolutionirc on Libera.chat

License: GNU General Public License v3.0

Java 99.95% Groovy 0.05%
irc irc-client chat android

revolution-irc's Introduction

Revolution IRC

Revolution IRC Client is the next-generation IRC client for Android, made with design and functionality in mind. Let's start this revolution!

Get it on F-Droid Get it on Google Play

This client features a modern Material design as well as many other awesome features:

  • Stays in background properly, even on more recent Android versions
  • Store chat messages to be displayed after reconnecting to the server later
  • Nick/channel/command autocomplete
  • Ignore list
  • mIRC color formatting support
  • SSL certificate exception list
  • Command list to run after connecting
  • Customization: custom command aliases, notification rules, reconnection interval, chat font, message format, app colors

...and much more!

revolution-irc's People

Contributors

cbrt64 avatar currificado avatar danieru98 avatar duggalsu avatar jlu5 avatar kurahaupo avatar mcmrarm avatar poussinou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

revolution-irc's Issues

Open active channel instead of server list after returning to the app

First of all, great app. I'm enjoying it a lot after years of looking for a good replacement for AndChat. The interface is intuitive and it has all the features a modern IRC clients should have.

But it be great if the app could remember what channel I was in before minimizing so it's just there after maximizing it again instead of returning to the server list, especially when you're only connected to one server.

Option to change the character added after autocompleting a nick

So, if I start to type a nick, then press the autovomplete button, or double tap the input, the result will be <nick>: , which poses a problem if I try to mention multiple people (<nick>: <nick2>: <nick3>:) Personally I'd rather have commas , or nothing (just a space) preferably, a setting for this would be nice!

/whois nick nick only shows two line response rather than the full response

When I run /whois nick nick (on charybdis-4-rc7) I expect to see the same as with any other client (Weechat):

  • user@host: Real Name
  • channel list
  • IRC server and description
  • SSL connection if it's used
  • SSL certificate fingerprint if used
  • the actual host where the user is connecting from
  • idle time
  • NickServ username

What I see instead is:

  • SSL certificate fingerprint if used
  • the actual host where the user is connecting from

I am oper and I mainly use Revolution IRC for connecting to ZNC which is opered.

Send as raw doesn't clear input

When sending an unrecognized command you get the prompt "No such command was found. Send as raw" if you press send as raw the input doesn't get cleared as it does when messages or other commands are sent, it'd be great if it did

User modes aren't working

I gave some feedback on the Play store about this, but I figured I'd put this here as well - and give some details about further attempts.

Originally, I noticed I could not set user modes for myself (such as +p) using the /mode command. However, I'm also noticing that I can't set them with /raw either.

Typing in /raw MODE Tynach +p causes a thing to pop up saying that no such command was found, but it lets me 'send as raw'... After which the server pops this message back at me:

421 Tynach raw :Unknown command

I finally got it to work by making my own custom command alias, but I feel like this sort of thing should be built in. I poked around the code a bit and saw CommandAliasManager.java, and am tempted to simply send a pull request with an additional mode line... But I feel like it'd be more intuitive to users if the two could be merged somehow.

How to compile?

I'd like to know how to compile the apk, so I can use it to connect to my znc's.
Thanks in advance.

Messages ending up in the wrong window

So, I had twl query windows open, I /msg dax Some message, when he replied it ended up in the query window I had with myself (for testing purposes, duh) see below

screenshot_20171104-210321_01_01

Nick's status isn't shown

So, it'd be great if we could have @ for operators and + for voiced users, currently it only shows
[HH:mm] <Nick> message whereas I'd love if it showed [HH:mm] <@Nick> message for channel operators. Like it's visible in the channels nicklist

Incorrect colors when copying

So, when I copy someone's messages and paste them and send them, they do appear weird in other clients, like here, a message I echoed was received with green background on weechat Green Text BG
The normal message had no formatting whatsoever. (It's not because of the highlight of that person)

Ignore topic if it was shown recently after re-connection

Sometimes when on a spotty network you tend to connect and reconnect and after a while the timeline can be cluttered with nothing but the topic repeating itself when the previous line was exactly the same, something similar but not that often happens with ChanServ messages.

So, maybe a option to ignore the topic all the times or just showing it once per day would be good?

Cheers

Automatically focus new channels on join

When znc is replaying my backlog, its much easier to see when the backlog replay ends when a JOIN message automatically focuses the newly created channel tab. Also useful for noticing new PMs.

Revolution appears to decode non-UTF-8 charset

Where are Revolution IRC charsets configured? I just noticed that it's decoding something else than UTF-8 and I hope that it's at least sending UTF-8. I don't like messages getting decoded from other charsets as I run multiple relay bots and if someone is using wrong charset, I cannot immediately see that from Revolution.
Mikaela: if the character encodings are an issue for you, please open an GitHub issue

Maxlength messages

It'd be nice if the app either automatically split messages longer than the maximum allowed length, or stopped you from typing longer than it. Right now it just cuts and the complete message doesn't come through

Short loss in connection causing connection to be dropped completely

I recently noticed that whenever my phone loses signal for a short time (even if it's only a a second or less on a spotty wifi connection), the app immediately considers every server disconnected and tries reconnecting from scratch instead of just waiting until the connection is back. It would be a good idea to have a timeout for when the connection should be considered lost.

Clearer indication of mentions in app

So, neither in the navbar at the top (where you scroll between channels) not in the side menu, there isn't any clear indication of what channels you have been mentioned in, they look the same as any channel that have received a message. It'd be great if there were some clear indicator (like changing the colour of the channel name in those menus) that would indicate that you've been mentioned in that channel

Sometimes the app fails to reconnect to servers

Sometimes the app is stuck while reconnecting to a server and the server connections are stuck in the "Disconnected" state. You have to reopen the application to fix this.

I think this was caused by adding a safecheck in IRCConnection.connect (in 0.3.0) to prevent duplicate network connections on a single instance from happening (as I suspected that was happening, looking at one of the crashes).

New join/part messages are not hidden

Activating the "Hide Join/Part messages" options removes all join and part messages that exist at the time the option is activated, but any new joins/parts after that are displayed normally.
The process can be repeated (i.e. disabling and reenabling the option) with the same result.

Crashes master-issue (0.3.1)

This is a master issue for random crashes for I have collected on Google Play that have no actual issues opened yet.

  • ChannelData.addMessage crash (from JoinCommandHandler, QuitCommandHandler, PartCommandHandler)
java.lang.RuntimeException: 
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:243)
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:252)
  at io.mrarm.chatlib.irc.handlers.JoinCommandHandler.handle (JoinCommandHandler.java:36)
  at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
  at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
  at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
  at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
  at java.lang.Thread.run (Thread.java:761)
Caused by: java.util.concurrent.ExecutionException: 
  at java.util.concurrent.FutureTask.report (FutureTask.java:94)
  at java.util.concurrent.FutureTask.get (FutureTask.java:164)
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:241)
Other similar crashes

java.lang.RuntimeException: 
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:243)
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:252)
  at io.mrarm.chatlib.irc.handlers.QuitCommandHandler.handle (QuitCommandHandler.java:32)
  at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
  at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
  at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
  at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
  at java.lang.Thread.run (Thread.java:761)
Caused by: java.util.concurrent.ExecutionException: 
  at java.util.concurrent.FutureTask.report (FutureTask.java:94)
  at java.util.concurrent.FutureTask.get (FutureTask.java:164)
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:241)
java.lang.RuntimeException: 
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:243)
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:252)
  at io.mrarm.chatlib.irc.handlers.PartCommandHandler.handle (PartCommandHandler.java:37)
  at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
  at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
  at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
  at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
  at java.lang.Thread.run (Thread.java:761)
Caused by: java.util.concurrent.ExecutionException: 
  at java.util.concurrent.FutureTask.report (FutureTask.java:94)
  at java.util.concurrent.FutureTask.get (FutureTask.java:164)
  at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:241)
java.lang.RuntimeException: 
  at io.mrarm.chatlib.irc.filters.ZNCPlaybackMessageFilter.onBatchEnd (ZNCPlaybackMessageFilter.java:78)
  at io.mrarm.chatlib.irc.cap.BatchCapability.handle (BatchCapability.java:60)
  at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
  at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
  at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
  at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
  at java.lang.Thread.run (Thread.java:761)
Caused by: java.util.concurrent.ExecutionException: 
  at java.util.concurrent.FutureTask.report (FutureTask.java:94)
  at java.util.concurrent.FutureTask.get (FutureTask.java:164)
  at io.mrarm.chatlib.irc.filters.ZNCPlaybackMessageFilter.onBatchEnd (ZNCPlaybackMessageFilter.java:76)


  • mChannelsListeners java.util.ConcurrentModificationException (fixed with b97696b)

    Crash

    java.util.ConcurrentModificationException: 
      at java.util.ArrayList$Itr.next (ArrayList.java:831)
      at io.mrarm.irc.ServerConnectionInfo.setChannels (ServerConnectionInfo.java:306)
      at io.mrarm.irc.ServerConnectionInfo$1.onChannelListChanged (ServerConnectionInfo.java:76)
      at io.mrarm.chatlib.irc.ServerConnectionData.onChannelJoined (ServerConnectionData.java:118)
      at io.mrarm.chatlib.irc.handlers.JoinCommandHandler.handle (JoinCommandHandler.java:26)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:761)
    


  • NamesReplyCommandHandler -> ChannelData.setMembers (fixed with MCMrARM/chatlib@ba60097)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.chatlib.irc.ChannelData.setMembers (ChannelData.java:117)
      at io.mrarm.chatlib.irc.handlers.NamesReplyCommandHandler.handle (NamesReplyCommandHandler.java:72)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:761)
    


  • NoSuchChannelException from QuitCommandHandler (fixed with MCMrARM/chatlib@8928d08)

    Crash

    java.lang.RuntimeException: 
      at io.mrarm.chatlib.irc.handlers.QuitCommandHandler.handle (QuitCommandHandler.java:35)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:761)
    Caused by: io.mrarm.chatlib.NoSuchChannelException: 
      at io.mrarm.chatlib.irc.ServerConnectionData.getJoinedChannelData (ServerConnectionData.java:94)
      at io.mrarm.chatlib.irc.handlers.QuitCommandHandler.handle (QuitCommandHandler.java:30)
    


  • ChannelData.removeMember from PartCommandHandler (fixed with MCMrARM/chatlib@74be4ca)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.chatlib.irc.ChannelData.removeMember (ChannelData.java:100)
      at io.mrarm.chatlib.irc.handlers.PartCommandHandler.handle (PartCommandHandler.java:36)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:762)
    


  • UserBottomSheetDialog message button crash (fixed with d66d2a0)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.irc.dialog.UserBottomSheetDialog.lambda$create$4$UserBottomSheetDialog (UserBottomSheetDialog.java:149)
      at io.mrarm.irc.dialog.UserBottomSheetDialog$$Lambda$1.onClick (Unknown Source)
      at android.view.View.performClick (View.java:5669)
      at android.view.View$PerformClick.run (View.java:22549)
      at android.os.Handler.handleCallback (Handler.java:751)
      at android.os.Handler.dispatchMessage (Handler.java:95)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6290)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
    


  • Finalizer crash (fixed with c72d7c9)

    Crash

    java.util.concurrent.TimeoutException: 
      at java.lang.Object.wait (Native Method)
      at io.mrarm.irc.util.SettableFuture.get (SettableFuture.java:36)
      at io.mrarm.irc.config.NotificationCountStorage.close (NotificationCountStorage.java:80)
      at io.mrarm.irc.config.NotificationCountStorage.finalize (NotificationCountStorage.java:89)
      at java.lang.Daemons$FinalizerDaemon.doFinalize (Daemons.java:222)
      at java.lang.Daemons$FinalizerDaemon.run (Daemons.java:209)
      at java.lang.Thread.run (Thread.java:761)
    
    java.util.concurrent.TimeoutException: 
      at java.lang.Object.wait (Native Method)
      at io.mrarm.irc.util.SettableFuture.get (SettableFuture.java:36)
      at io.mrarm.irc.config.NotificationCountStorage.close (NotificationCountStorage.java:80)
      at io.mrarm.irc.config.NotificationCountStorage.finalize (NotificationCountStorage.java:89)
      at java.lang.Daemons$FinalizerDaemon.doFinalize (Daemons.java:250)
      at java.lang.Daemons$FinalizerDaemon.runInternal (Daemons.java:237)
      at java.lang.Daemons$Daemon.run (Daemons.java:103)
      at java.lang.Thread.run (Thread.java:764)
    


  • MessageCommandHandler parameter out-of-bounds exception (fixed with MCMrARM/chatlib@bf243a2)

    Crash

    java.lang.IndexOutOfBoundsException: 
      at java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:255)
      at java.util.ArrayList.get (ArrayList.java:308)
      at io.mrarm.chatlib.irc.handlers.MessageCommandHandler.handle (MessageCommandHandler.java:46)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:818)
    


  • WelcomeCommandHandler parameter out-of-bounds exception (fixed with MCMrARM/chatlib@bf243a2)

    Crash

    java.lang.IndexOutOfBoundsException: 
      at java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:255)
      at java.util.ArrayList.get (ArrayList.java:308)
      at io.mrarm.chatlib.irc.handlers.WelcomeCommandHandler.handle (WelcomeCommandHandler.java:43)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:848)
    


  • SQLiteMessageStorageApi.open NPE (fixed with 74ecca3)

    Crash

    java.lang.RuntimeException: 
      at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2678)
      at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2743)
      at android.app.ActivityThread.-wrap12 (ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1490)
      at android.os.Handler.dispatchMessage (Handler.java:102)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6165)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:888)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:778)
    Caused by: java.lang.NullPointerException: 
      at io.mrarm.chatlib.android.storage.SQLiteMessageStorageApi.open (SQLiteMessageStorageApi.java:89)
      at io.mrarm.chatlib.android.storage.SQLiteMessageStorageApi.<init> (SQLiteMessageStorageApi.java:45)
      at io.mrarm.irc.ServerConnectionInfo.connect (ServerConnectionInfo.java:111)
      at io.mrarm.irc.ServerConnectionManager.createConnection (ServerConnectionManager.java:196)
      at io.mrarm.irc.ServerConnectionManager.<init> (ServerConnectionManager.java:84)
      at io.mrarm.irc.ServerConnectionManager.getInstance (ServerConnectionManager.java:51)
      at io.mrarm.irc.MainActivity.onCreate (MainActivity.java:62)
      at android.app.Activity.performCreate (Activity.java:6687)
      at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1140)
      at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2631)
    
    java.lang.RuntimeException: 
      at android.app.ActivityThread.handleCreateService (ActivityThread.java)
      at android.app.ActivityThread.access$2000 (ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage (ActivityThread.java)
      at android.os.Handler.dispatchMessage (Handler.java)
      at android.os.Looper.loop (Looper.java)
      at android.app.ActivityThread.main (ActivityThread.java)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java)
    Caused by: java.lang.NullPointerException: 
      at io.mrarm.chatlib.android.storage.SQLiteMessageStorageApi.open (SQLiteMessageStorageApi.java:89)
      at io.mrarm.chatlib.android.storage.SQLiteMessageStorageApi.<init> (SQLiteMessageStorageApi.java:45)
      at io.mrarm.irc.ServerConnectionInfo.connect (ServerConnectionInfo.java:111)
      at io.mrarm.irc.ServerConnectionManager.createConnection (ServerConnectionManager.java:196)
      at io.mrarm.irc.ServerConnectionManager.<init> (ServerConnectionManager.java:84)
      at io.mrarm.irc.ServerConnectionManager.getInstance (ServerConnectionManager.java:51)
      at io.mrarm.irc.ChatLogStorageManager.<init> (ChatLogStorageManager.java:60)
      at io.mrarm.irc.ChatLogStorageManager.getInstance (ChatLogStorageManager.java:44)
      at io.mrarm.irc.IRCService.onCreate (IRCService.java:50)
    


  • ModeCommandHandler.addMode NPE (fixed with MCMrARM/chatlib@3dea12d)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.chatlib.irc.handlers.ModeCommandHandler.addMode (ModeCommandHandler.java:112)
      at io.mrarm.chatlib.irc.handlers.ModeCommandHandler.handleChannelModes (ModeCommandHandler.java:64)
      at io.mrarm.chatlib.irc.handlers.ModeCommandHandler.handle (ModeCommandHandler.java:35)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:762)
    


  • ChatMessagesAdapter.clearSelection NPE (fixed with b6a5270)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.irc.chat.ChatMessagesAdapter.clearSelection (ChatMessagesAdapter.java:85)
      at io.mrarm.irc.chat.ChatMessagesFragment$MessagesActionModeCallback.onDestroyActionMode (ChatMessagesFragment.java:460)
      at android.support.v7.app.AppCompatDelegateImplV9$ActionModeCallbackWrapperV9.onDestroyActionMode (AppCompatDelegateImplV9.java:1796)
      at android.support.v7.view.StandaloneActionMode.finish (StandaloneActionMode.java:110)
      at android.support.v7.widget.ActionBarContextView$1.onClick (ActionBarContextView.java:172)
      at android.view.View.performClick (View.java:5617)
      at android.view.View$PerformClick.run (View.java:22271)
      at android.os.Handler.handleCallback (Handler.java:751)
      at android.os.Handler.dispatchMessage (Handler.java:95)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6153)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:868)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:758)
    
    java.lang.NullPointerException: 
      at io.mrarm.irc.chat.ChatMessagesAdapter.clearSelection (ChatMessagesAdapter.java:85)
      at io.mrarm.irc.chat.ChatMessagesFragment$MessagesActionModeCallback.onDestroyActionMode (ChatMessagesFragment.java:460)
      at android.support.v7.app.AppCompatDelegateImplV9$ActionModeCallbackWrapperV9.onDestroyActionMode (AppCompatDelegateImplV9.java:1796)
      at android.support.v7.view.StandaloneActionMode.finish (StandaloneActionMode.java:110)
      at android.support.v7.app.AppCompatDelegateImplV9.onBackPressed (AppCompatDelegateImplV9.java:889)
      at android.support.v7.app.AppCompatDelegateImplV9.onKeyUp (AppCompatDelegateImplV9.java:975)
      at android.support.v7.app.AppCompatDelegateImplV9.dispatchKeyEvent (AppCompatDelegateImplV9.java:953)
      at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent (AppCompatDelegateImplBase.java:315)
      at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent (WindowCallbackWrapper.java:58)
      at com.android.internal.policy.DecorView.dispatchKeyEvent (DecorView.java:351)
      at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent (ViewRootImpl.java:4714)
      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:4586)
      at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4128)
      at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4181)
      at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4147)
      at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:4274)
      at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4155)
      at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:4331)
      at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4128)
      at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4181)
      at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4147)
      at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4155)
      at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4128)
      at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4181)
      at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4147)
      at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:4307)
      at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent (ViewRootImpl.java:4468)
      at android.view.inputmethod.InputMethodManager$PendingEvent.run (InputMethodManager.java:2435)
      at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback (InputMethodManager.java:1998)
      at android.view.inputmethod.InputMethodManager.finishedInputEvent (InputMethodManager.java:1989)
      at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished (InputMethodManager.java:2412)
      at android.view.InputEventSender.dispatchInputEventFinished (InputEventSender.java:141)
      at android.os.MessageQueue.nativePollOnce (Native Method)
      at android.os.MessageQueue.next (MessageQueue.java:325)
      at android.os.Looper.loop (Looper.java:142)
      at android.app.ActivityThread.main (ActivityThread.java:6541)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)
    


  • Dialogs - invalid current fragment (fixed with 9fe7b4d)

    Crash

    java.lang.ClassCastException: 
      at io.mrarm.irc.MainActivity.lambda$onOptionsItemSelected$3$MainActivity (MainActivity.java:346)
      at io.mrarm.irc.MainActivity$$Lambda$3.onClick (Unknown Source)
      at android.support.v7.app.AlertController$ButtonHandler.handleMessage (AlertController.java:162)
      at android.os.Handler.dispatchMessage (Handler.java:102)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6119)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
    


  • ChatAutoCompleteEditText.terminateNickToken out-of-bounds crash (fixed with 41fa17a)

    Crash

    java.lang.IndexOutOfBoundsException: 
      at android.text.SpannableStringBuilder.charAt (SpannableStringBuilder.java:119)
      at io.mrarm.irc.view.ChatAutoCompleteEditText.terminateNickToken (ChatAutoCompleteEditText.java:358)
      at io.mrarm.irc.view.ChatAutoCompleteEditText.onItemClick (ChatAutoCompleteEditText.java:254)
      at io.mrarm.irc.chat.ChatSuggestionsAdapter$ItemHolder.lambda$new$0$ChatSuggestionsAdapter$ItemHolder (ChatSuggestionsAdapter.java:110)
      at io.mrarm.irc.chat.ChatSuggestionsAdapter$ItemHolder$$Lambda$0.onClick (Unknown Source)
      at android.view.View.performClick (View.java:5721)
      at android.widget.TextView.performClick (TextView.java:10936)
      at android.view.View$PerformClick.run (View.java:22620)
      at android.os.Handler.handleCallback (Handler.java:739)
      at android.os.Handler.dispatchMessage (Handler.java:95)
      at android.os.Looper.loop (Looper.java:148)
      at android.app.ActivityThread.main (ActivityThread.java:7409)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)
      at de.robv.android.xposed.XposedBridge.main (XposedBridge.java:102)
    


  • Channel list button in Join channel dialog NPE after activity destroy and reopen (fixed with 4f6422d)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.irc.MainActivity.lambda$onOptionsItemSelected$3$MainActivity (MainActivity.java:346)
      at io.mrarm.irc.MainActivity$$Lambda$3.onClick (Unknown Source)
      at android.support.v7.app.AlertController$ButtonHandler.handleMessage (AlertController.java:162)
      at android.os.Handler.dispatchMessage (Handler.java:102)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6334)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:886)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)
    


  • SpannableStringBuilder.setSpan from FormattableEditText$1.afterTextChanged crash (fixed with a7b5b4b)

    Crash

    java.lang.RuntimeException: 
      at android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.java:693)
      at android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.java:677)
      at io.mrarm.irc.view.FormattableEditText$1.afterTextChanged (FormattableEditText.java:94)
      at android.widget.TextView.sendAfterTextChanged (TextView.java:8211)
      at android.widget.TextView$ChangeWatcher.afterTextChanged (TextView.java:10394)
      at android.text.SpannableStringBuilder.sendAfterTextChanged (SpannableStringBuilder.java:1218)
      at android.text.SpannableStringBuilder.replace (SpannableStringBuilder.java:579)
      at android.text.SpannableStringBuilder.delete (SpannableStringBuilder.java:230)
      at android.text.SpannableStringBuilder.delete (SpannableStringBuilder.java:229)
      at android.text.method.BaseKeyListener.backspaceOrForwardDelete (BaseKeyListener.java:347)
      at android.text.method.BaseKeyListener.backspace (BaseKeyListener.java:68)
      at android.text.method.BaseKeyListener.onKeyDown (BaseKeyListener.java:456)
      at android.text.method.QwertyKeyListener.onKeyDown (QwertyKeyListener.java:357)
      at android.text.method.TextKeyListener.onKeyDown (TextKeyListener.java:136)
      at android.widget.TextView.doKeyDown (TextView.java:6293)
      at android.widget.TextView.onKeyDown (TextView.java:6079)
      at io.mrarm.irc.view.ChatAutoCompleteEditText.onKeyDown (ChatAutoCompleteEditText.java:319)
      at android.view.KeyEvent.dispatch (KeyEvent.java:2708)
    ...
    


  • ChatMessagesFragment NPE (closed server) (fixed with 8442f1e)

    Crash

    java.lang.RuntimeException: 
      at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2684)
      at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2751)
      at android.app.ActivityThread.-wrap12 (ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1496)
      at android.os.Handler.dispatchMessage (Handler.java:102)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6186)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:889)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:779)
    Caused by: java.lang.NullPointerException: 
      at io.mrarm.irc.chat.ChatMessagesFragment.onCreate (ChatMessagesFragment.java:150)
      at android.support.v4.app.Fragment.performCreate (Fragment.java:2246)
      at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1377)
      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1750)
      at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1819)
      at android.support.v4.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3227)
      at android.support.v4.app.FragmentManagerImpl.dispatchCreate (FragmentManager.java:3176)
      at android.support.v4.app.Fragment.restoreChildFragmentState (Fragment.java:1350)
      at android.support.v4.app.Fragment.onCreate (Fragment.java:1321)
      at android.support.v4.app.Fragment.performCreate (Fragment.java:2246)
      at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1377)
      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1750)
      at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1819)
      at android.support.v4.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3227)
      at android.support.v4.app.FragmentManagerImpl.dispatchCreate (FragmentManager.java:3176)
      at android.support.v4.app.FragmentController.dispatchCreate (FragmentController.java:181)
      at android.support.v4.app.FragmentActivity.onCreate (FragmentActivity.java:331)
      at android.support.v7.app.AppCompatActivity.onCreate (AppCompatActivity.java:84)
      at io.mrarm.irc.ThemedActivity.onCreate (ThemedActivity.java:31)
      at io.mrarm.irc.MainActivity.onCreate (MainActivity.java:68)
      at android.app.Activity.performCreate (Activity.java:6684)
      at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119)
      at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2637)
    


  • ReconnectIntervalSetting dialog random crash (fixed with 6eda8f4)

    Crash

    java.lang.IllegalStateException: 
      at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll (RecyclerView.java:2689)
      at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeRemoved (RecyclerView.java:5108)
      at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyItemRangeRemoved (RecyclerView.java:11600)
      at android.support.v7.widget.RecyclerView$Adapter.notifyItemRemoved (RecyclerView.java:6948)
      at io.mrarm.irc.setting.ReconnectIntervalSetting$RulesAdapter$RuleViewHolder.lambda$new$3$ReconnectIntervalSetting$RulesAdapter$RuleViewHolder (ReconnectIntervalSetting.java:258)
      at io.mrarm.irc.setting.ReconnectIntervalSetting$RulesAdapter$RuleViewHolder$$Lambda$2.afterTextChanged (Unknown Source)
      at io.mrarm.irc.util.SimpleTextWatcher.afterTextChanged (SimpleTextWatcher.java:24)
      at android.widget.TextView.sendAfterTextChanged (TextView.java:9435)
      at android.widget.TextView.setText (TextView.java:5086)
      at android.widget.TextView.setText (TextView.java:4902)
      at android.widget.EditText.setText (EditText.java:128)
      at android.widget.TextView.setText (TextView.java:4877)
      at io.mrarm.irc.setting.ReconnectIntervalSetting$RulesAdapter$RuleViewHolder.bind (ReconnectIntervalSetting.java:314)
      at io.mrarm.irc.setting.ReconnectIntervalSetting$RulesAdapter.onBindViewHolder (ReconnectIntervalSetting.java:170)
      at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder (RecyclerView.java:6508)
      at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder (RecyclerView.java:6541)
    


  • ChatMessagesFragment.copySelectedMessages NPE (fixed with 161375d)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.irc.chat.ChatMessagesFragment.copySelectedMessages (ChatMessagesFragment.java:421)
      at io.mrarm.irc.chat.ChatMessagesFragment$MessagesActionModeCallback.onActionItemClicked (ChatMessagesFragment.java:449)
      at android.support.v7.app.AppCompatDelegateImplV9$ActionModeCallbackWrapperV9.onActionItemClicked (AppCompatDelegateImplV9.java:1791)
      at android.support.v7.view.StandaloneActionMode.onMenuItemSelected (StandaloneActionMode.java:140)
      at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected (MenuBuilder.java:822)
      at android.support.v7.view.menu.MenuItemImpl.invoke (MenuItemImpl.java:171)
      at android.support.v7.view.menu.MenuBuilder.performItemAction (MenuBuilder.java:973)
      at android.support.v7.view.menu.MenuBuilder.performItemAction (MenuBuilder.java:963)
      at android.support.v7.widget.ActionMenuView.invokeItem (ActionMenuView.java:624)
      at android.support.v7.view.menu.ActionMenuItemView.onClick (ActionMenuItemView.java:150)
      at android.view.View.performClick (View.java:5612)
      at android.view.View$PerformClick.run (View.java:22285)
      at android.os.Handler.handleCallback (Handler.java:751)
      at android.os.Handler.dispatchMessage (Handler.java:95)
      at android.os.Looper.loop (Looper.java:154)
      at android.app.ActivityThread.main (ActivityThread.java:6123)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:867)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:757)
    


  • ExceptionInInitializerError in ServerConnectionManager.createConnection (fixed with c8e695f 6443c2e)

    Crash

    java.lang.RuntimeException: 
      at android.os.AsyncTask$3.done (AsyncTask.java:318)
      at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:354)
      at java.util.concurrent.FutureTask.setException (FutureTask.java:223)
      at java.util.concurrent.FutureTask.run (FutureTask.java:242)
      at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:243)
      at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
      at java.lang.Thread.run (Thread.java:761)
    Caused by: java.lang.ExceptionInInitializerError: 
      at io.mrarm.irc.ServerConnectionManager.createConnection (ServerConnectionManager.java:195)
      at io.mrarm.irc.ServerConnectionManager.<init> (ServerConnectionManager.java:84)
      at io.mrarm.irc.ServerConnectionManager.getInstance (ServerConnectionManager.java:51)
      at io.mrarm.irc.StorageSettingsAdapter$RemoveDataTask.doInBackground (StorageSettingsAdapter.java:429)
      at io.mrarm.irc.StorageSettingsAdapter$RemoveDataTask.doInBackground (StorageSettingsAdapter.java:408)
      at android.os.AsyncTask$2.call (AsyncTask.java:304)
      at java.util.concurrent.FutureTask.run (FutureTask.java:237)
    


  • MessagePrefix out-of-bounds (fixed with MCMrARM/chatlib@a7f1a7a)

    Crash

    java.lang.StringIndexOutOfBoundsException: 
      at java.lang.String.substring (String.java:1975)
      at io.mrarm.chatlib.irc.MessagePrefix.<init> (MessagePrefix.java:22)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:42)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (Unknown Source)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source:2)
      at java.lang.Thread.run (Thread.java:764)
    


  • onMessage callback NPE (fixed with 9eb63eb)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.irc.chat.ChatMessagesFragment.lambda$onMessage$5$ChatMessagesFragment (ChatMessagesFragment.java:354)
      at io.mrarm.irc.chat.ChatMessagesFragment$$Lambda$3.run (Unknown Source)
      at android.os.Handler.handleCallback (Handler.java:761)
      at android.os.Handler.dispatchMessage (Handler.java:98)
      at android.os.Looper.loop (Looper.java:156)
      at android.app.ActivityThread.main (ActivityThread.java:6523)
      at java.lang.reflect.Method.invoke (Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:942)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:832)
    


  • ConcurrentModificationException in CommandHandlerList (hopefully fixed with MCMrARM/chatlib@fd14ef5)

    Crash

    java.util.ConcurrentModificationException: 
      at java.util.HashMap$HashIterator.nextEntry (HashMap.java:851)
      at java.util.HashMap$ValueIterator.next (HashMap.java:879)
      at io.mrarm.chatlib.irc.CommandHandlerList.notifyDisconnected (CommandHandlerList.java:81)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:129)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:776)
    


  • addMessage -> createCollapsedMessagesView crash (fixed with fea7963)

    Crash

    java.lang.RuntimeException: 
      at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:243)
      at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:252)
      at io.mrarm.chatlib.irc.handlers.MessageCommandHandler.handle (MessageCommandHandler.java:79)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection 
    (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:761)
    Caused by: java.util.concurrent.ExecutionException: 
      at java.util.concurrent.FutureTask.report (FutureTask.java:94)
      at java.util.concurrent.FutureTask.get (FutureTask.java:164)
      at io.mrarm.chatlib.irc.ChannelData.addMessage (ChannelData.java:241)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 
      at java.util.ArrayList.get (ArrayList.java:413)
      at io.mrarm.irc.ChannelNotificationManager.createCollapsedMessagesView (ChannelNotificationManager.java:182)
      at io.mrarm.irc.ChannelNotificationManager.showNotification (ChannelNotificationManager.java:122)
      at io.mrarm.irc.NotificationManager.processMessage (NotificationManager.java:52)
      at io.mrarm.irc.IRCService.onMessage (IRCService.java:122)
      at io.mrarm.irc.IRCService.lambda$onConnectionAdded$0$IRCService (IRCService.java:129)
      at io.mrarm.irc.IRCService$$Lambda$0.onMessage (Unknown Source)
      at io.mrarm.chatlib.android.storage.SQLiteMessageStorageApi.lambda$addMessage$0$SQLiteMessageStorageApi (SQLiteMessageStorageApi.java:117)
      at io.mrarm.chatlib.android.storage.SQLiteMessageStorageApi$$Lambda$0.call (Unknown Source)
      at io.mrarm.chatlib.util.SimpleRequestExecutor.lambda$queue$1$SimpleRequestExecutor (SimpleRequestExecutor.java:38)
      at io.mrarm.chatlib.util.SimpleRequestExecutor$$Lambda$1.call (Unknown Source)
      at java.util.concurrent.FutureTask.run (FutureTask.java:237)
      at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
    


  • NickCommandHandler sender = null crash (fixed with MCMrARM/chatlib@70df9ee)

    Crash

    java.lang.NullPointerException: 
      at io.mrarm.chatlib.irc.handlers.NickCommandHandler.handle (NickCommandHandler.java:36)
      at io.mrarm.chatlib.irc.MessageHandler.handleLine (MessageHandler.java:50)
      at io.mrarm.chatlib.irc.IRCConnection.handleInput (IRCConnection.java:112)
      at io.mrarm.chatlib.irc.IRCConnection.bridge$lambda$0$IRCConnection (IRCConnection.java)
      at io.mrarm.chatlib.irc.IRCConnection$$Lambda$9.run (Unknown Source)
      at java.lang.Thread.run (Thread.java:761)
    


  • Pattern.quote NPE from NotificationRule.setMatchText (fixed with 1048080)

    Crash

    java.lang.NullPointerException: 
      at java.util.regex.Pattern.quote (Pattern.java:1279)
      at io.mrarm.irc.config.NotificationRule.setMatchText (NotificationRule.java:77)
      at io.mrarm.irc.EditNotificationSettingsActivity.save (EditNotificationSettingsActivity.java:257)
      at io.mrarm.irc.EditNotificationSettingsActivity.save (EditNotificationSettingsActivity.java:293)
      at io.mrarm.irc.EditNotificationSettingsActivity.onOptionsItemSelected (EditNotificationSettingsActivity.java:221)
      at android.app.Activity.onMenuItemSelected (Activity.java:3450)
    


NickServ auth

Add support for using NickServ auth in addition to SASL. This was required in a Google Play beta review.

New message marker

When new messages are shown, a line separating the old messages from new should be shown.

Hardware scroll through sent messages and commands

It'd be great if say the volume buttons could be utilized in place for up and down keyboard buttons to scroll through the history of sent messages commands in the input box. And if that history could be per channel instead of globally like it is now

Topic is black in dark theme

I've set my message colour to white, however, I can't seem to be able to change the colour of channel's topics, they're always black, which is hard to read when using the dark theme.

Incomplete /VERSION output

Earlier today I was missing information on how many channels I can join on this network (CHANLIMIT=#&:50) and I had no idea how to get that information out of Revolution as it only insisted giving me the one line on the bottom.

WeeChat:

-- charybdis-4-rc7(unknown). roubaix-fr.pirateirc.net (eIKMpSZ6 TS6ow 0FR)
-- KNOCK ETRACE SAFELIST ELIST=CTU MONITOR=100 FNC WHOX CHANTYPES=#& EXCEPTS INVEX CHANMODES=eIbq,k,flj,ACFLOPQScgimnprstz CHANLIMIT=#&:50 :are supported by this server
-- PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=PirateIRC STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 NICKLEN=15 MAXNICKLEN=15 CHANNELLEN=50 TOPICLEN=390 DEAF=D :are supported by this server
-- TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,&acjmorsuxz| CLIENTVER=3.0 :are supported by this server

Revolution:

-- charybdis-4-rc7(unknown). roubaix-fr.pirateirc.net (eIKMpSZ6 TS6ow 0FR)

Easier switching between servers

As far as I can tell, when connected to multiple servers, the only way to switch between them or check for activity on the other ones is to open up the side panel. A gesture to switch servers or a button to quickly do so would be really nice (maybe lock open the side panel somehow?). My ideal interface would be something like a 'bar' of selectable servers next to the current server name (maybe even with activity indicators) but that seems like it'd be a lot more complicated.

This is also by far the best IRC client I've used on Android so far. Thank you for all the hard work you've put into it!

Target Android O

I'd really love to target Android O instead of N but the new notification channel system introduced in O has a fundamental flaw that makes it harder for this application to adapt it.
After creating a notification channel you can't change it in an way. To make things even worse, the channel is stored on the device forever and even if you delete and recreate it, it's settings will be restored. The recommended (and in fact, the only) way to change settings is to direct the user to the Settings app and let user manage the channel options there. But, you can't change the LED color or vibration pattern settings in that menu. The new Settings interface is way more annoying for the user, as currently the options are easily accessible under the notification options in the app and this would require adding an ugly link to go to settings to change those.

Solutions I can think of:

  1. Wait for the next Android release, hope that it becomes more advanced (why do I doubt that...) and then make some sort of a broken Android O support workaround while properly supporting the next release.
  2. Create a new unique notification channel every time the settings are changed. Con: we waste a small amount of storage each time.
  3. Use the NotificationListenerService to edit the channels. Con: requires to be enabled manually by the user in settings, and can be suspicious as it gives the app full notification access.

Username autocompletion errors

Usually I use the auto-complete feature a lot but the keyboard auto-correct dont like it. It keeps the typed letters without keeping the whole username.
For example if I type "Fox" and I press the auto-complete it will write "Foxlider" but as soon as I press the spacebar key it will keep "Fox".
I think it's possible to correct it since AndChat's auto-complete works

Post-connection commands

Plenty of IRC clients have an option to execute IRC commands after joining a channel and so I would like to add this feature to my client. However, I'm not quite sure about the use-cases -- NickServ support will be implemented first and I don't really see why would anyone need this.

If you want this feature, please comment on this issue what would you use it for.

AWAY support

I added a command alias for myself but it would be nice to have it available by default.

Adding or editing a server crashes the app when primary colour is not default

When you change the primary or accent colour in the settings, adding or editing a server crashes the app; also occurs when trying to add new command aliases or custom notification rules. Also, there doesn't seem to be a way to change the colours back to "Default".

Using a Samsung Galaxy J3 (SM-J320F) on Android 5.1.1.

Memory leak

It looks like I have a memory leak in the application... Just after starting the application the memory usage is just above 100MB. After leaving the application for a day it starts to consume over 200MB. One time the application crashed because of an out of memory error, with the application trying to consume over 600MB.

Wrong color on ^C

^C in dark theme revert the text colour to black instead of white (my set message colour) but only in notices

Notification bug

Disconnecting from all networks and leaving the app sometimes shows the notification still but with 0 networks connected. I can't reproduce it every time so not sure what is causing it

Don't send notifications on NOTICEs

The IRC RFC says:

4.4.2 Notice

      Command: NOTICE
   Parameters: <nickname> <text>

   The NOTICE message is used similarly to PRIVMSG.  The difference
   between NOTICE and PRIVMSG is that automatic replies must never be
   sent in response to a NOTICE message.  This rule applies to servers
   too - they must not send any error reply back to the client on
   receipt of a notice.  The object of this rule is to avoid loops
   between a client automatically sending something in response to
   something it received.  This is typically used by automatons (clients
   with either an AI or other interactive program controlling their
   actions) which are always seen to be replying lest they end up in a
   loop with another automaton.

   See PRIVMSG for more details on replies and examples.

and I see this generally interpreted that NOTICE is a less important message than PRIVMSG while Revolution IRC appears to send a notification and also vibrates and plays the notification sound.

In spirit of the RFC, my bot is sending all messages as notices except messages it relays from other networks and Matrix has copied this behaviour and their IRC bridge causes all bot messages to appear as NOTICEs at IRC.

I think the easiest way to reproduce this on freenode is possibly to invite either mijris[m] or ivar[m] (Matrix bots) into any channel and saying !ping where they reply by saying pong! <ISO8601 date>. They accept all invites. (They also shouldn't rejoin after kicked.)

Crash when connecting to a ZNC 1.7 bouncer

App don't connect to passworded server (as zncs) and crashes.
If you try to reopen the app, it crashes again (maybe while it's trying to connect?).
Except that, seems very interesting.
Any update soon?

I might be doing something wrong?

I've compiled the apk with Android Studio Preview.
It connects to znc 1.7.x but it stalls when you try to do something else.
Any idea?
Thanks in advance

Note: using android 5.1

Duplicate queries

It is possible to have two queries with a single users due to case mismatch. Easiest way to reproduce:

/msg ChanServ HELP
/msg chanserv HELP

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.