diff --git a/app/build.gradle.kts b/app/build.gradle.kts index be54154de0bb1c97420932abedd2480a37097b06..753d81c0cf28945c6a231f0f8d4618a3e5fef3a7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -127,8 +127,6 @@ dependencies { } implementation(project(":malheur")) - debugImplementation("com.squareup.leakcanary", "leakcanary-android", "1.5.1") - testImplementation(appArch("persistence.room", "testing")) testImplementation("junit", "junit", "4.12") diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt index bb0a3058a69977280c095060504810a23634e4c0..16c3177cf8eea0c51e9c9365baed107c3d07c389 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt @@ -14,16 +14,6 @@ import de.kuschku.quasseldroid_ng.util.helper.systemService class QuasseldroidNG : Application() { override fun onCreate() { - /* - // We do not need LeakCanary in RELEASE builds - if (LeakCanary.isInAnalyzerProcess(this)) { - // This process is dedicated to LeakCanary for heap analysis. - // You should not init your app in this process. - return - } - LeakCanary.install(this) - */ - CrashHandler.init( application = this, buildConfig = BuildConfig::class.java diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt index d17a86787a3edba242398e328e592c17f80b27f0..d5429e0452084723a2fb22013ea222c239a24141 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/AccountDatabase.kt @@ -4,7 +4,7 @@ import android.arch.paging.LivePagedListProvider import android.arch.persistence.room.* import android.content.Context -@Database(entities = arrayOf(AccountDatabase.Account::class), version = 1) +@Database(entities = [(AccountDatabase.Account::class)], version = 1) abstract class AccountDatabase : RoomDatabase() { abstract fun accounts(): AccountDao @@ -52,8 +52,10 @@ abstract class AccountDatabase : RoomDatabase() { if (database == null) { synchronized(LOCK) { if (database == null) { - database = Room.databaseBuilder(context.applicationContext, - AccountDatabase::class.java, DATABASE_NAME) + database = Room.databaseBuilder( + context.applicationContext, + AccountDatabase::class.java, DATABASE_NAME + ) .build() } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselBacklogStorage.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselBacklogStorage.kt index b05e47731b35f969a2463874a44be90213b9f7db..dd8b2b764d6b1423b8f822096f9eae334da51b37 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselBacklogStorage.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselBacklogStorage.kt @@ -21,16 +21,18 @@ class QuasselBacklogStorage(private val db: QuasselDatabase) : BacklogStorage { } for (message in messages) { - db.message().save(QuasselDatabase.DatabaseMessage( - messageId = message.messageId, - time = message.time, - type = message.type.value, - flag = message.flag.value, - bufferId = message.bufferInfo.bufferId, - sender = message.sender, - senderPrefixes = message.senderPrefixes, - content = message.content - )) + db.message().save( + QuasselDatabase.DatabaseMessage( + messageId = message.messageId, + time = message.time, + type = message.type.value, + flag = message.flag.value, + bufferId = message.bufferInfo.bufferId, + sender = message.sender, + senderPrefixes = message.senderPrefixes, + content = message.content + ) + ) } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt index 723a937a9080793f2e0d3f12071507d98d206bbb..714246e92570273cb2de020664c0cd3d69a0d951 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt @@ -9,7 +9,7 @@ import de.kuschku.libquassel.protocol.Message_Flag import de.kuschku.libquassel.protocol.Message_Type import org.threeten.bp.Instant -@Database(entities = arrayOf(QuasselDatabase.DatabaseMessage::class), version = 2) +@Database(entities = [(QuasselDatabase.DatabaseMessage::class)], version = 2) @TypeConverters(QuasselDatabase.DatabaseMessage.MessageTypeConverters::class) abstract class QuasselDatabase : RoomDatabase() { abstract fun message(): MessageDao @@ -35,15 +35,19 @@ abstract class QuasselDatabase : RoomDatabase() { override fun toString(): String { return "Message(messageId=$messageId, time=$time, type=${Message_Type.of( - type)}, flag=${Message_Flag.of( - flag)}, bufferId=$bufferId, sender='$sender', senderPrefixes='$senderPrefixes', content='$content')" + type + )}, flag=${Message_Flag.of( + flag + )}, bufferId=$bufferId, sender='$sender', senderPrefixes='$senderPrefixes', content='$content')" } object MessageDiffCallback : DiffCallback<DatabaseMessage>() { - override fun areContentsTheSame(oldItem: QuasselDatabase.DatabaseMessage, newItem: QuasselDatabase.DatabaseMessage) + override fun areContentsTheSame(oldItem: QuasselDatabase.DatabaseMessage, + newItem: QuasselDatabase.DatabaseMessage) = oldItem == newItem - override fun areItemsTheSame(oldItem: QuasselDatabase.DatabaseMessage, newItem: QuasselDatabase.DatabaseMessage) + override fun areItemsTheSame(oldItem: QuasselDatabase.DatabaseMessage, + newItem: QuasselDatabase.DatabaseMessage) = oldItem.messageId == newItem.messageId } } @@ -80,7 +84,9 @@ abstract class QuasselDatabase : RoomDatabase() { @Query("DELETE FROM message WHERE bufferId = :bufferId") fun clearMessages(@IntRange(from = 0) bufferId: Int) - @Query("DELETE FROM message WHERE bufferId = :bufferId AND messageId >= :first AND messageId <= :last") + @Query( + "DELETE FROM message WHERE bufferId = :bufferId AND messageId >= :first AND messageId <= :last" + ) fun clearMessages(@IntRange(from = 0) bufferId: Int, first: Int, last: Int) } @@ -94,8 +100,10 @@ abstract class QuasselDatabase : RoomDatabase() { if (database == null) { synchronized(LOCK) { if (database == null) { - database = Room.databaseBuilder(context.applicationContext, - QuasselDatabase::class.java, DATABASE_NAME) + database = Room.databaseBuilder( + context.applicationContext, + QuasselDatabase::class.java, DATABASE_NAME + ) .build() } } @@ -109,6 +117,7 @@ abstract class QuasselDatabase : RoomDatabase() { } } -fun QuasselDatabase.MessageDao.clearMessages(@IntRange(from = 0) bufferId: Int, idRange: kotlin.ranges.IntRange) { +fun QuasselDatabase.MessageDao.clearMessages(@IntRange(from = 0) + bufferId: Int, idRange: kotlin.ranges.IntRange) { this.clearMessages(bufferId, idRange.first, idRange.last) } \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.kt index 7ef65d2cc17c14c6caf5061b0ed3c4bb1bbe9b50..a3c6e5fcafdc8dc38e0cce5ab37fa43891726e2d 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.kt @@ -1,5 +1,6 @@ package de.kuschku.quasseldroid_ng.service +import android.annotation.SuppressLint import android.arch.lifecycle.LifecycleService import android.arch.lifecycle.Observer import android.content.Intent @@ -24,12 +25,11 @@ class QuasselService : LifecycleService() { private lateinit var clientData: ClientData private val trustManager = object : X509TrustManager { - override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) { - } - - override fun checkServerTrusted(p0: Array<out X509Certificate>?, p1: String?) { - } + @SuppressLint("TrustAllX509TrustManager") + override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) = Unit + @SuppressLint("TrustAllX509TrustManager") + override fun checkServerTrusted(p0: Array<out X509Certificate>?, p1: String?) = Unit override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray() } @@ -45,8 +45,10 @@ class QuasselService : LifecycleService() { override fun connect(address: SocketAddress, user: String, pass: String, reconnect: Boolean) { disconnect() - sessionManager.connect(clientData, trustManager, address, ::AndroidHandlerService, - user to pass, reconnect) + sessionManager.connect( + clientData, trustManager, address, ::AndroidHandlerService, + user to pass, reconnect + ) } override fun reconnect() { @@ -118,9 +120,11 @@ class QuasselService : LifecycleService() { .delay(200, TimeUnit.MILLISECONDS) .throttleFirst(1, TimeUnit.SECONDS) .toLiveData() - .observe(this, Observer { + .observe( + this, Observer { sessionManager.reconnect() - }) + } + ) } override fun onBind(intent: Intent?): QuasselBinder { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt index 4eec892857a0cf4eee7e5518fff8347db824789f..499ff06f51c646af18de7a72d12da226dda17d39 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferListAdapter.kt @@ -25,7 +25,8 @@ class BufferListAdapter( var data = mutableListOf<BufferInfo>() init { - liveData.observe(lifecycleOwner, Observer { list: List<BufferInfo>? -> + liveData.observe( + lifecycleOwner, Observer { list: List<BufferInfo>? -> runInBackground { val old = data val new = list?.sortedBy(BufferInfo::networkId) ?: emptyList() @@ -39,14 +40,18 @@ class BufferListAdapter( override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = old[oldItemPosition] == new[newItemPosition] - }, true) - runOnUiThread(Runnable { - data.clear() - data.addAll(new) - result.dispatchUpdatesTo(this@BufferListAdapter) - }) + }, true + ) + runOnUiThread( + Runnable { + data.clear() + data.addAll(new) + result.dispatchUpdatesTo(this@BufferListAdapter) + } + ) } - }) + } + ) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = BufferViewHolder( @@ -80,7 +85,7 @@ class BufferListAdapter( fun bind(info: BufferInfo) { text.text = when { info.type.hasFlag(BufferInfo.Type.StatusBuffer) -> "Network ${info.networkId}" - else -> "${info.networkId}/${info.bufferName}" + else -> "${info.networkId}/${info.bufferName}" } bufferId = info.bufferId } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt index 007573f626c2546f8f88cbdbc9b46a9ef0688edd..afadc9b6d1c69fbb722b30d073bfc42a579e33be 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigAdapter.kt @@ -24,13 +24,15 @@ class BufferViewConfigAdapter( val data = mutableListOf<BufferViewConfig>() init { - liveData.observe(lifecycleOwner, Observer { list: List<BufferViewConfig>? -> + liveData.observe( + lifecycleOwner, Observer { list: List<BufferViewConfig>? -> data.clear() if (list != null) { data.addAll(list) } notifyDataSetChanged() - }) + } + ) } override fun isEmpty() = data.isEmpty() diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt index 2babd2c93c8c2673e60871bd4734666513cf3739..af325bf39187df89135a330ad36fdb3059ee5f97 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigFragment.kt @@ -50,9 +50,11 @@ class BufferViewConfigFragment : ServiceBoundFragment() { manager.live_bufferViewConfigs.map { ids -> ids.mapNotNull { id -> manager.bufferViewConfig(id) - }.sortedWith(Comparator { a, b -> - (a?.bufferViewName() ?: "").compareTo((b?.bufferViewName() ?: ""), true) - }) + }.sortedWith( + Comparator { a, b -> + (a?.bufferViewName() ?: "").compareTo((b?.bufferViewName() ?: ""), true) + } + ) } }.or(emptyList()) @@ -92,7 +94,13 @@ class BufferViewConfigFragment : ServiceBoundFragment() { chatListSpinner.adapter = adapter chatListSpinner.onItemSelectedListener = itemSelectedListener - chatList.adapter = BufferListAdapter(this, bufferList, handlerThread::post, activity!!::runOnUiThread, clickListener) + chatList.adapter = BufferListAdapter( + this, + bufferList, + handlerThread::post, + activity!!::runOnUiThread, + clickListener + ) chatList.layoutManager = LinearLayoutManager(context) chatList.itemAnimator = DefaultItemAnimator() return view diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt index 589ec88eb9e1f33a155764833e795e978cfa3a51..679b94aa2c5482777d9b65561a3393d496f2316f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt @@ -32,8 +32,8 @@ import de.kuschku.quasseldroid_ng.util.service.ServiceBoundActivity import de.kuschku.quasseldroid_ng.util.ui.MaterialContentLoadingProgressBar class ChatActivity : ServiceBoundActivity() { - var contentMessages: MessageListFragment? = null - var chatListFragment: BufferViewConfigFragment? = null + private var contentMessages: MessageListFragment? = null + private var chatListFragment: BufferViewConfigFragment? = null @BindView(R.id.drawerLayout) lateinit var drawerLayout: DrawerLayout @@ -72,8 +72,12 @@ class ChatActivity : ServiceBoundActivity() { database = QuasselDatabase.Creator.init(application) - contentMessages = supportFragmentManager.findFragmentById(R.id.contentMessages) as? MessageListFragment - chatListFragment = supportFragmentManager.findFragmentById(R.id.chatListFragment) as? BufferViewConfigFragment + contentMessages = supportFragmentManager.findFragmentById( + R.id.contentMessages + ) as? MessageListFragment + chatListFragment = supportFragmentManager.findFragmentById( + R.id.chatListFragment + ) as? BufferViewConfigFragment setSupportActionBar(toolbar) @@ -85,21 +89,29 @@ class ChatActivity : ServiceBoundActivity() { println("Changed buffer to $it") } - currentBuffer.observe(this, Observer { + currentBuffer.observe( + this, Observer { if (it != null) { drawerLayout.closeDrawer(Gravity.START, true) } - }) - - drawerToggle = ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) + } + ) + + drawerToggle = ActionBarDrawerToggle( + this, + drawerLayout, + R.string.drawer_open, + R.string.drawer_close + ) drawerToggle.syncState() - backend.observeSticky(this, Observer { backendValue -> + backend.observeSticky( + this, Observer { backendValue -> if (backendValue != null) { val database = AccountDatabase.Creator.init(this) handler.post { val accountId = getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE) - ?.getLong(Keys.Status.selectedAccount, -1) ?: -1 + ?.getLong(Keys.Status.selectedAccount, -1) ?: -1 if (accountId == -1L) { setResult(Activity.RESULT_OK) finish() @@ -118,7 +130,8 @@ class ChatActivity : ServiceBoundActivity() { } } } - }) + } + ) buttonSend.setOnClickListener { sessionManager { sessionManager -> @@ -131,7 +144,8 @@ class ChatActivity : ServiceBoundActivity() { input.text.clear() } - state.observe(this, Observer { + state.observe( + this, Observer { val status = it ?: ConnectionState.DISCONNECTED if (status == ConnectionState.CONNECTED) { @@ -141,19 +155,28 @@ class ChatActivity : ServiceBoundActivity() { progressBar.isIndeterminate = status != ConnectionState.INIT } - progressBar.toggle(status != ConnectionState.CONNECTED && status != ConnectionState.DISCONNECTED) + progressBar.toggle( + status != ConnectionState.CONNECTED && status != ConnectionState.DISCONNECTED + ) snackbar?.dismiss() - snackbar = Snackbar.make(findViewById(R.id.contentMessages), status.name, Snackbar.LENGTH_SHORT) + snackbar = Snackbar.make( + findViewById(R.id.contentMessages), + status.name, + Snackbar.LENGTH_SHORT + ) snackbar?.show() - }) + } + ) - initStatus.observe(this, Observer { + initStatus.observe( + this, Observer { val (progress, max) = it ?: 0 to 0 progressBar.max = max progressBar.progress = progress - }) + } + ) } override fun onCreateOptionsMenu(menu: Menu?): Boolean { @@ -173,7 +196,7 @@ class ChatActivity : ServiceBoundActivity() { } true } - else -> super.onOptionsItemSelected(item) + else -> super.onOptionsItemSelected(item) } override fun onDestroy() { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/FormattedMessage.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/FormattedMessage.kt new file mode 100644 index 0000000000000000000000000000000000000000..d245270de23e70a285483bd54df5f52e7f1419bc --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/FormattedMessage.kt @@ -0,0 +1,7 @@ +package de.kuschku.quasseldroid_ng.ui.chat + +class FormattedMessage( + val id: Int, + val time: CharSequence, + val content: CharSequence +) \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt index 3cdfd1a86a9c9905f27cb4b68c61870a6a639a7c..28720cc904ed76890846272f347180632bb66b9a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageAdapter.kt @@ -13,7 +13,10 @@ import de.kuschku.libquassel.util.hasFlag import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase import de.kuschku.quasseldroid_ng.util.helper.getOrPut -class MessageAdapter(context: Context) : PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>(QuasselDatabase.DatabaseMessage.MessageDiffCallback) { +class MessageAdapter(context: Context) : + PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>( + QuasselDatabase.DatabaseMessage.MessageDiffCallback + ) { private val messageRenderer: MessageRenderer = QuasselMessageRenderer(context) private val messageCache = LruCache<Int, FormattedMessage>(512) @@ -23,7 +26,14 @@ class MessageAdapter(context: Context) : PagedListAdapter<QuasselDatabase.Databa } override fun onBindViewHolder(holder: QuasselMessageViewHolder, position: Int) { - getItem(position)?.let { messageRenderer.bind(holder, messageCache.getOrPut(it.messageId) { messageRenderer.render(it) }) } + getItem(position)?.let { + messageRenderer.bind( + holder, + messageCache.getOrPut(it.messageId) { + messageRenderer.render(it) + } + ) + } } override fun getItemViewType(position: Int): Int { @@ -52,11 +62,13 @@ class MessageAdapter(context: Context) : PagedListAdapter<QuasselDatabase.Databa override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QuasselMessageViewHolder { val messageType = messageType(viewType) val hasHighlight = hasHiglight(viewType) - val viewHolder = QuasselMessageViewHolder(LayoutInflater.from(parent.context).inflate( - messageRenderer.layout(messageType, hasHighlight), - parent, - false - )) + val viewHolder = QuasselMessageViewHolder( + LayoutInflater.from(parent.context).inflate( + messageRenderer.layout(messageType, hasHighlight), + parent, + false + ) + ) messageRenderer.init(viewHolder, messageType, hasHighlight) return viewHolder } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt index cccda2cf38769f9f3e79b4cb10ece2b0cb481160..1e67bdae3bfd85a309b4cb9c2babfb64ea36cb56 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageListFragment.kt @@ -47,13 +47,16 @@ class MessageListFragment : ServiceBoundFragment() { setHasOptionsMenu(true) } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + override fun onCreateView(inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_messages, container, false) ButterKnife.bind(this, view) database = QuasselDatabase.Creator.init(context!!.applicationContext) val data = buffer.switchMap { - database.message().findByBufferIdPaged(it).create(Int.MAX_VALUE, + database.message().findByBufferIdPaged(it).create( + Int.MAX_VALUE, PagedList.Config.Builder() .setPageSize(50) .setEnablePlaceholders(false) @@ -64,18 +67,22 @@ class MessageListFragment : ServiceBoundFragment() { val adapter = MessageAdapter(context!!) - data.observe(this, Observer { list -> + data.observe( + this, Observer { list -> adapter.setList(list) - }) + } + ) - buffer.observe(this, Observer { + buffer.observe( + this, Observer { handler.post { // Try loading messages when switching to empty buffer if (it != null && database.message().bufferSize(it) == 0) { loadMore() } } - }) + } + ) var recyclerViewMeasuredHeight = 0 val scrollDownListener = object : RecyclerView.OnScrollListener() { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt index c351e227358d56c3b28c5568490acb279692d098..99403809ee44684b48ba2b2e4554c999cdbc8569 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MessageRenderer.kt @@ -10,11 +10,9 @@ interface MessageRenderer { fun bind(holder: QuasselMessageViewHolder, message: FormattedMessage) fun render(message: QuasselDatabase.DatabaseMessage): FormattedMessage - fun init(viewHolder: QuasselMessageViewHolder, messageType: Message_Type?, hasHighlight: Boolean) {} + fun init(viewHolder: QuasselMessageViewHolder, + messageType: Message_Type?, + hasHighlight: Boolean) { + } } -class FormattedMessage( - val id: Int, - val time: CharSequence, - val content: CharSequence -) \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt index fe5ed6e93d85e3181130cee177aec1996c153416..2591661c6413dad11f8f276bd788bbb45f15e24a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt @@ -17,18 +17,22 @@ import org.threeten.bp.format.DateTimeFormatter import java.text.SimpleDateFormat class QuasselMessageRenderer(context: Context) : MessageRenderer { - private val timeFormatter = DateTimeFormatter.ofPattern((DateFormat.getTimeFormat(context) as SimpleDateFormat).toLocalizedPattern()) + private val timeFormatter = DateTimeFormatter.ofPattern( + (DateFormat.getTimeFormat(context) as SimpleDateFormat).toLocalizedPattern() + ) private val senderColors: IntArray private val zoneId = ZoneId.systemDefault() init { - val typedArray = context.obtainStyledAttributes(intArrayOf( - R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3, - R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, - R.attr.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB, - R.attr.senderColorC, R.attr.senderColorD, R.attr.senderColorE, R.attr.senderColorF - )) + val typedArray = context.obtainStyledAttributes( + intArrayOf( + R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3, + R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, + R.attr.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB, + R.attr.senderColorC, R.attr.senderColorD, R.attr.senderColorE, R.attr.senderColorF + ) + ) senderColors = IntArray(16) { typedArray.getColor(it, 0) } @@ -39,13 +43,15 @@ class QuasselMessageRenderer(context: Context) : MessageRenderer { = when (type) { Nick, Notice, Mode, Join, Part, Quit, Kick, Kill, Server, Info, DayChange, Topic, NetsplitJoin, NetsplitQuit, Invite -> R.layout.widget_chatmessage_server - Error -> R.layout.widget_chatmessage_error - Action -> R.layout.widget_chatmessage_action - Plain -> R.layout.widget_chatmessage_plain - else -> R.layout.widget_chatmessage_plain + Error -> R.layout.widget_chatmessage_error + Action -> R.layout.widget_chatmessage_action + Plain -> R.layout.widget_chatmessage_plain + else -> R.layout.widget_chatmessage_plain } - override fun init(viewHolder: QuasselMessageViewHolder, messageType: Message_Type?, hasHighlight: Boolean) { + override fun init(viewHolder: QuasselMessageViewHolder, + messageType: Message_Type?, + hasHighlight: Boolean) { if (hasHighlight) { val attrs = intArrayOf(R.attr.colorBackgroundHighlight) val colors = viewHolder.itemView.context.obtainStyledAttributes(attrs) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt index 9a943d1eb390accff12ecd4d879a870a6e853460..d93c2da7d25e73ed816ea348c47b313430741ea6 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/SetupActivity.kt @@ -86,7 +86,8 @@ abstract class SetupActivity : AppCompatActivity() { else viewPager.setCurrentItem(viewPager.currentItem + 1, true) } - isValid.observeSticky(this, Observer { + isValid.observeSticky( + this, Observer { if (it == true) { button.show() adapter.lastValidItem = viewPager.currentItem @@ -94,7 +95,8 @@ abstract class SetupActivity : AppCompatActivity() { button.hide() adapter.lastValidItem = viewPager.currentItem - 1 } - }) + } + ) viewPager.addOnPageChangeListener(pageChangeListener) pageChanged() updateRecentsHeader() diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt index 8e48236f1e79d00dec7bcc7790205bc4f85223bc..542ce9a8ac32b4f2a88fdbf4f89c5c6134cce702 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt @@ -108,7 +108,8 @@ class AccountAdapter : when (viewType) { TYPE_ADD -> R.layout.widget_core_account_add else -> R.layout.widget_core_account - }, parent, false) + }, parent, false + ) return when (viewType) { TYPE_ADD -> AccountViewHolder.Add(view, addListener) else -> AccountViewHolder.Item(view, actionListener, clickListener) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountEditActivity.kt index 43cfa75c73b155613afa5120f4c7fd5bd1961b58..43880debdd6a3e050eab37709a04903beff6916d 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountEditActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountEditActivity.kt @@ -124,7 +124,7 @@ class AccountEditActivity : AppCompatActivity() { private val isValid get() = nameValidator.isValid && hostValidator.isValid && portValidator.isValid - && userValidator.isValid + && userValidator.isValid override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.setup_edit_account, menu) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt index 86b30513313eeac312f5dece8c2b0ac59ca9fd88..78b14161ace4795196ac12d3a12d95e971471e0e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt @@ -44,12 +44,15 @@ class AccountSelectionSlide : SlideFragment() { val view = inflater.inflate(R.layout.setup_select_account, container, false) ButterKnife.bind(this, view) val accountViewModel = ViewModelProviders.of(this).get( - AccountViewModel::class.java) + AccountViewModel::class.java + ) val firstObserver = object : Observer<PagedList<AccountDatabase.Account>?> { override fun onChanged(t: PagedList<AccountDatabase.Account>?) { if (t?.isEmpty() != false) - startActivityForResult(Intent(context, AccountSetupActivity::class.java), - REQUEST_CREATE_FIRST) + startActivityForResult( + Intent(context, AccountSetupActivity::class.java), + REQUEST_CREATE_FIRST + ) accountViewModel.accounts.removeObserver(this) } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountViewModel.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountViewModel.kt index 8804e9805f46d6d173859f541b05bcefef76122d..cf2aca05e0afc2a0b2024e8ecc8c3b43fd11dc73 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountViewModel.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountViewModel.kt @@ -8,7 +8,8 @@ import de.kuschku.quasseldroid_ng.persistence.AccountDatabase class AccountViewModel(application: Application) : AndroidViewModel(application) { private val database: AccountDatabase = AccountDatabase.Creator.init( - getApplication()) + getApplication() + ) val accounts: LiveData<PagedList<AccountDatabase.Account>> = database.accounts().all().create( 0, PagedList.Config.Builder() diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt index 4471116224ca3fb2ecd863c16df9a86a92687ae2..3af062e489e80db670ce0638a13b6b1db30919ab 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/AndroidHandlerThread.kt @@ -94,11 +94,13 @@ class AndroidHandlerThread(name: String) : HandlerThread(name) { fun sendEmptyMessageDelayed(what: Int, delayMillis: Long): Boolean = handler?.sendEmptyMessageDelayed(what, delayMillis) ?: throw RuntimeException( - "Thread not started") + "Thread not started" + ) fun sendEmptyMessageAtTime(what: Int, uptimeMillis: Long): Boolean = handler?.sendEmptyMessageAtTime(what, uptimeMillis) ?: throw RuntimeException( - "Thread not started") + "Thread not started" + ) fun sendMessageDelayed(msg: Message, delayMillis: Long): Boolean = handler?.sendMessageDelayed(msg, delayMillis) ?: throw RuntimeException("Thread not started") diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidCompatibilityUtils.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidCompatibilityUtils.kt index 15ab06a453c4bfbef0f944314c8318ea6dc97f1d..dcd0ac3f3c0fdc211ec288b42ae87c3bdfee789b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidCompatibilityUtils.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidCompatibilityUtils.kt @@ -23,8 +23,8 @@ object AndroidCompatibilityUtils { private fun isChromeBook(): Boolean { return Build.MANUFACTURER.toLowerCase(Locale.ENGLISH).contains("chromium") || - Build.MANUFACTURER.toLowerCase(Locale.ENGLISH).contains("chrome") || - Build.BRAND.toLowerCase(Locale.ENGLISH).contains("chromium") || - Build.BRAND.toLowerCase(Locale.ENGLISH).contains("chrome") + Build.MANUFACTURER.toLowerCase(Locale.ENGLISH).contains("chrome") || + Build.BRAND.toLowerCase(Locale.ENGLISH).contains("chromium") || + Build.BRAND.toLowerCase(Locale.ENGLISH).contains("chrome") } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidLoggingHandler.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidLoggingHandler.kt index 9208d91ddca67ecbeaa1fb9c4329be3342a18761..7071e9bd2b50c62c22d7863de2ca70114302171f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidLoggingHandler.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/compatibility/AndroidLoggingHandler.kt @@ -10,7 +10,8 @@ object AndroidLoggingHandler : LoggingHandler() { override fun log(logLevel: LogLevel, tag: String, message: String?, throwable: Throwable?) { val priority = priority( - logLevel) + logLevel + ) if (message != null) Log.println(priority, tag, message) if (throwable != null) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ActivityHelper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ActivityHelper.kt index 4662c565371c0c5933fe7a3bce6ea1c980bc08ac..2e1d4dc8886f76d7d0320c31979455b79fbb0742 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ActivityHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ActivityHelper.kt @@ -35,7 +35,8 @@ fun Activity.updateRecentsHeaderIfExisting( * @param colorPrimary The color used as background for the header of the recents card - passed as Android * Color Resource */ -fun Activity.updateRecentsHeaderIfExisting(@StringRes label: Int, @DrawableRes icon: Int, @ColorRes colorPrimary: Int) { +fun Activity.updateRecentsHeaderIfExisting(@StringRes label: Int, @DrawableRes icon: Int, @ColorRes +colorPrimary: Int) { val labelRaw = resources.getString(label) val iconRaw = BitmapFactory.decodeResource(resources, icon) val colorPrimaryRaw = resources.getColorBackport(colorPrimary, theme) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt index ea273739ed50b8f1da6decc00d2f2f1154702489..17c04403f4898ffba463df827343226a05cbbe67 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt @@ -10,7 +10,8 @@ inline fun <X, Y> LiveData<X?>.switchMap( noinline func: (X) -> LiveData<Y>? ): LiveData<Y> { val result = MediatorLiveData<Y>() - result.addSource(this, object : Observer<X?> { + result.addSource( + this, object : Observer<X?> { internal var mSource: LiveData<Y>? = null override fun onChanged(x: X?) { @@ -26,7 +27,8 @@ inline fun <X, Y> LiveData<X?>.switchMap( result.value = null } } - }) + } + ) return result } @@ -36,7 +38,8 @@ inline fun <X, Y> LiveData<X?>.switchMapRx( noinline func: (X) -> Observable<Y>? ): LiveData<Y?> { val result = MediatorLiveData<Y>() - result.addSource(this, object : Observer<X?> { + result.addSource( + this, object : Observer<X?> { internal var mSource: LiveData<Y>? = null override fun onChanged(x: X?) { @@ -52,7 +55,8 @@ inline fun <X, Y> LiveData<X?>.switchMapRx( result.value = null } } - }) + } + ) return result } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/quassel/IrcUserUtils.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/quassel/IrcUserUtils.kt index f9a348d9bff80e07ebd5feaf2be9da92bcc0cc06..738f86ef330dd7c837b7051c9981189ec15c8b98 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/quassel/IrcUserUtils.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/quassel/IrcUserUtils.kt @@ -35,7 +35,9 @@ object IrcUserUtils { ) } - private fun String.firstIndex(char: Char, startIndex: Int? = null, ignoreCase: Boolean = false): Int? { + private fun String.firstIndex(char: Char, + startIndex: Int? = null, + ignoreCase: Boolean = false): Int? { val lastIndex = indexOf(char, startIndex ?: 0, ignoreCase) if (lastIndex < 0) return null @@ -43,7 +45,9 @@ object IrcUserUtils { return lastIndex } - private fun String.lastIndex(char: Char, startIndex: Int? = null, ignoreCase: Boolean = false): Int? { + private fun String.lastIndex(char: Char, + startIndex: Int? = null, + ignoreCase: Boolean = false): Int? { val lastIndex = lastIndexOf(char, startIndex ?: lastIndex, ignoreCase) if (lastIndex < 0) return null diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt index ef9518e587f9c76478494ed742ebefb0943da03d..411cf406d0020f1ee0fd81df6e3862fc633ba78f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt @@ -11,9 +11,9 @@ import de.kuschku.quasseldroid_ng.util.helper.updateRecentsHeaderIfExisting abstract class ServiceBoundActivity : AppCompatActivity() { @DrawableRes - protected val icon: Int = R.mipmap.ic_launcher + protected val icon: Int = R.mipmap.ic_launcher_recents @ColorRes - protected val recentsHeaderColor: Int = R.color.colorPrimaryDark + protected val recentsHeaderColor: Int = R.color.colorPrimary private val connection = BackendServiceConnection() diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/ContextThemeWrapper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/ContextThemeWrapper.kt index 39996a3caaa0b0d9734cc0c0b59ed4935d58dd6c..1d253a110b44198caacaad0c612fddd373183fdb 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/ContextThemeWrapper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/ContextThemeWrapper.kt @@ -7,8 +7,8 @@ import android.content.res.Configuration import android.content.res.Resources import android.os.Build import android.support.annotation.StyleRes -import android.support.v7.appcompat.R import android.view.LayoutInflater +import de.kuschku.quasseldroid_ng.R /** * A ContextWrapper that allows you to modify the theme from what is in the @@ -88,7 +88,8 @@ class ContextThemeWrapper : ContextWrapper { fun applyOverrideConfiguration(overrideConfiguration: Configuration) { if (mResources != null) { throw IllegalStateException( - "getResources() or getAssets() has already been called") + "getResources() or getAssets() has already been called" + ) } if (this.overrideConfiguration != null) { throw IllegalStateException("Override configuration has already been set") diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/DrawerRecyclerView.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/DrawerRecyclerView.kt index 451cb81975253a1d72d8fe59be0cb6f08d9b1900..2d0f6f9483bc2ba55c27caeebbeb5c3d7741f2e9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/DrawerRecyclerView.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/DrawerRecyclerView.kt @@ -20,25 +20,32 @@ class DrawerRecyclerView @JvmOverloads constructor( private val maxWidth: Int init { - val a = context.obtainStyledAttributes(attrs, - R.styleable.ScrimInsetsFrameLayout, defStyleAttr, - R.style.Widget_Design_ScrimInsetsFrameLayout) + val a = context.obtainStyledAttributes( + attrs, + R.styleable.ScrimInsetsFrameLayout, defStyleAttr, + R.style.Widget_Design_ScrimInsetsFrameLayout + ) mInsetForeground = a.getDrawable(R.styleable.ScrimInsetsFrameLayout_insetForeground) a.recycle() setWillNotDraw(true) // No need to draw until the insets are adjusted - ViewCompat.setOnApplyWindowInsetsListener(this + ViewCompat.setOnApplyWindowInsetsListener( + this ) { _, insets -> if (null == mInsets) { mInsets = Rect() } - mInsets!!.set(insets.systemWindowInsetLeft, - insets.systemWindowInsetTop, - insets.systemWindowInsetRight, - insets.systemWindowInsetBottom) - setPadding(insets.systemWindowInsetLeft, - insets.systemWindowInsetTop, - insets.systemWindowInsetRight, - insets.systemWindowInsetBottom) + mInsets!!.set( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom + ) + setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom + ) setWillNotDraw(!insets.hasSystemWindowInsets() || mInsetForeground == null) ViewCompat.postInvalidateOnAnimation(this@DrawerRecyclerView) insets.consumeSystemWindowInsets() diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/MaterialContentLoadingProgressBar.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/MaterialContentLoadingProgressBar.kt index bceebb5e097299896b003183cc2eeb543297d0c7..ed521dc57c1b52b7724785f556de5790888bc49c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/MaterialContentLoadingProgressBar.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/MaterialContentLoadingProgressBar.kt @@ -27,7 +27,9 @@ import me.zhanghai.android.materialprogressbar.MaterialProgressBar * a minimum amount of time to avoid "flashes" in the UI when an event could take * a largely variable time to complete (from none, to a user perceivable amount) */ -class MaterialContentLoadingProgressBar @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : MaterialProgressBar(context, attrs, 0) { +class MaterialContentLoadingProgressBar @JvmOverloads constructor(context: Context, + attrs: AttributeSet? = null) : + MaterialProgressBar(context, attrs, 0) { private var mStartTime: Long = -1 private var mPostedHide = false private var mPostedShow = false diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/NavigationDrawerLayout.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/NavigationDrawerLayout.kt index 1090d6fa2d9f7b2299258c78fa0c8c61ec35a9fe..b42f6d9c7b6b0105146a78e71fd1e8a04c3068c9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/NavigationDrawerLayout.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/NavigationDrawerLayout.kt @@ -35,25 +35,32 @@ class NavigationDrawerLayout @JvmOverloads constructor( private val maxWidth: Int init { - val a = context.obtainStyledAttributes(attrs, - R.styleable.ScrimInsetsFrameLayout, defStyleAttr, - R.style.Widget_Design_ScrimInsetsFrameLayout) + val a = context.obtainStyledAttributes( + attrs, + R.styleable.ScrimInsetsFrameLayout, defStyleAttr, + R.style.Widget_Design_ScrimInsetsFrameLayout + ) mInsetForeground = a.getDrawable(R.styleable.ScrimInsetsFrameLayout_insetForeground) a.recycle() setWillNotDraw(true) // No need to draw until the insets are adjusted - ViewCompat.setOnApplyWindowInsetsListener(this + ViewCompat.setOnApplyWindowInsetsListener( + this ) { _, insets -> if (null == mInsets) { mInsets = Rect() } - mInsets!!.set(insets.systemWindowInsetLeft, - insets.systemWindowInsetTop, - insets.systemWindowInsetRight, - insets.systemWindowInsetBottom) - setPadding(insets.systemWindowInsetLeft, - insets.systemWindowInsetTop, - insets.systemWindowInsetRight, - insets.systemWindowInsetBottom) + mInsets!!.set( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom + ) + setPadding( + insets.systemWindowInsetLeft, + insets.systemWindowInsetTop, + insets.systemWindowInsetRight, + insets.systemWindowInsetBottom + ) setWillNotDraw(!insets.hasSystemWindowInsets() || mInsetForeground == null) ViewCompat.postInvalidateOnAnimation(this@NavigationDrawerLayout) insets.consumeSystemWindowInsets() diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/SpanFormatter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/SpanFormatter.java index 31f342ec75649868892b4b6cc928c25fe3a3e590..fe0e46f91469f793d4991f6d647e81b2b9489882 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/SpanFormatter.java +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/ui/SpanFormatter.java @@ -53,88 +53,88 @@ import java.util.regex.Pattern; * @author George T. Steel */ public class SpanFormatter { - private static final Pattern FORMAT_SEQUENCE = Pattern.compile("%([0-9]+\\$|<?)([^a-zA-z%]*)([[a-zA-Z%]&&[^tT]]|[tT][a-zA-Z])"); + private static final Pattern FORMAT_SEQUENCE = Pattern.compile("%([0-9]+\\$|<?)([^a-zA-z%]*)([[a-zA-Z%]&&[^tT]]|[tT][a-zA-Z])"); + + private SpanFormatter() { + } + + /** + * Version of {@link String#format(String, Object...)} that works on {@link Spanned} strings to preserve rich text formatting. + * Both the {@code format} as well as any {@code %s args} can be Spanned and will have their formatting preserved. + * Due to the way {@link Spannable}s work, any argument's spans will can only be included <b>once</b> in the result. + * Any duplicates will appear as text only. + * + * @param format the format string (see {@link java.util.Formatter#format}) + * @param args the list of arguments passed to the formatter. If there are + * more arguments than required by {@code format}, + * additional arguments are ignored. + * @return the formatted string (with spans). + */ + @NonNull + public static SpannedString format(@NonNull CharSequence format, Object... args) { + return format(Locale.getDefault(), format, args); + } + + /** + * Version of {@link String#format(Locale, String, Object...)} that works on {@link Spanned} strings to preserve rich text formatting. + * Both the {@code format} as well as any {@code %s args} can be Spanned and will have their formatting preserved. + * Due to the way {@link Spannable}s work, any argument's spans will can only be included <b>once</b> in the result. + * Any duplicates will appear as text only. + * + * @param locale the locale to apply; {@code null} value means no localization. + * @param format the format string (see {@link java.util.Formatter#format}) + * @param args the list of arguments passed to the formatter. + * @return the formatted string (with spans). + * @see String#format(Locale, String, Object...) + */ + @NonNull + public static SpannedString format(@NonNull Locale locale, @NonNull CharSequence format, Object... args) { + SpannableStringBuilder out = new SpannableStringBuilder(format); + + int i = 0; + int argAt = -1; + + while (i < out.length()) { + Matcher m = FORMAT_SEQUENCE.matcher(out); + if (!m.find(i)) break; + i = m.start(); + int exprEnd = m.end(); + + String argTerm = m.group(1); + String modTerm = m.group(2); + String typeTerm = m.group(3); + + CharSequence cookedArg; + + if (typeTerm.equals("%")) { + cookedArg = "%"; + } else { + int argIdx; + switch (argTerm) { + case "": + argIdx = ++argAt; + break; + case "<": + argIdx = argAt; + break; + default: + argIdx = Integer.parseInt(argTerm.substring(0, argTerm.length() - 1)) - 1; + break; + } - private SpanFormatter() { - } + Object argItem = args[argIdx]; - /** - * Version of {@link String#format(String, Object...)} that works on {@link Spanned} strings to preserve rich text formatting. - * Both the {@code format} as well as any {@code %s args} can be Spanned and will have their formatting preserved. - * Due to the way {@link Spannable}s work, any argument's spans will can only be included <b>once</b> in the result. - * Any duplicates will appear as text only. - * - * @param format the format string (see {@link java.util.Formatter#format}) - * @param args the list of arguments passed to the formatter. If there are - * more arguments than required by {@code format}, - * additional arguments are ignored. - * @return the formatted string (with spans). - */ - @NonNull - public static SpannedString format(@NonNull CharSequence format, Object... args) { - return format(Locale.getDefault(), format, args); - } - - /** - * Version of {@link String#format(Locale, String, Object...)} that works on {@link Spanned} strings to preserve rich text formatting. - * Both the {@code format} as well as any {@code %s args} can be Spanned and will have their formatting preserved. - * Due to the way {@link Spannable}s work, any argument's spans will can only be included <b>once</b> in the result. - * Any duplicates will appear as text only. - * - * @param locale the locale to apply; {@code null} value means no localization. - * @param format the format string (see {@link java.util.Formatter#format}) - * @param args the list of arguments passed to the formatter. - * @return the formatted string (with spans). - * @see String#format(Locale, String, Object...) - */ - @NonNull - public static SpannedString format(@NonNull Locale locale, @NonNull CharSequence format, Object... args) { - SpannableStringBuilder out = new SpannableStringBuilder(format); - - int i = 0; - int argAt = -1; - - while (i < out.length()) { - Matcher m = FORMAT_SEQUENCE.matcher(out); - if (!m.find(i)) break; - i = m.start(); - int exprEnd = m.end(); - - String argTerm = m.group(1); - String modTerm = m.group(2); - String typeTerm = m.group(3); - - CharSequence cookedArg; - - if (typeTerm.equals("%")) { - cookedArg = "%"; - } else { - int argIdx; - switch (argTerm) { - case "": - argIdx = ++argAt; - break; - case "<": - argIdx = argAt; - break; - default: - argIdx = Integer.parseInt(argTerm.substring(0, argTerm.length() - 1)) - 1; - break; - } - - Object argItem = args[argIdx]; - - if (typeTerm.equals("s") && argItem instanceof Spanned) { - cookedArg = (Spanned) argItem; - } else { - cookedArg = String.format(locale, "%" + modTerm + typeTerm, argItem); - } - } - - out.replace(i, exprEnd, cookedArg); - i += cookedArg.length(); + if (typeTerm.equals("s") && argItem instanceof Spanned) { + cookedArg = (Spanned) argItem; + } else { + cookedArg = String.format(locale, "%" + modTerm + typeTerm, argItem); } + } - return new SpannedString(out); + out.replace(i, exprEnd, cookedArg); + i += cookedArg.length(); } + + return new SpannedString(out); + } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index aece9930fabe1b727e6e867cd4e3905debc0bfc5..1094421ed4a5ab09a71f964399c0b2920a4e9037 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,156 +1,156 @@ <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/drawerLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + + <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/drawerLayout" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true"> + android:fitsSystemWindows="true" + android:orientation="vertical"> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" + <android.support.design.widget.AppBarLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:theme="?attr/actionBarTheme"> + + <FrameLayout android:layout_width="match_parent" - android:layout_height="match_parent" - android:fitsSystemWindows="true" - android:orientation="vertical"> - - <android.support.design.widget.AppBarLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:theme="?attr/actionBarTheme"> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="?attr/actionBarSize"> - - <android.support.v7.widget.Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="match_parent" - app:contentInsetStartWithNavigation="0dp" - app:popupTheme="@style/Widget.PopupOverlay"> - - <LinearLayout - android:id="@+id/toolbar_action_area" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:background="?attr/selectableItemBackgroundBorderless" - android:clickable="true" - android:focusable="true" - android:focusableInTouchMode="false" - android:gravity="center_vertical|start" - android:minHeight="?attr/actionBarSize" - android:orientation="vertical"> - - <LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:layout_marginTop="-2dp" - android:baselineAligned="false" - android:gravity="center_vertical"> - - <TextView - android:id="@+id/key" - style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" - android:layout_width="16dp" - android:layout_height="16dp" - android:layout_marginEnd="2dp" - android:layout_marginRight="2dp" - android:layout_marginTop="2dp" - android:gravity="center" - android:textSize="16sp" - android:visibility="gone" /> - - <TextView - android:id="@+id/toolbar_title" - style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:ellipsize="end" - android:gravity="center_vertical" - android:singleLine="true" - android:text="@string/app_name" /> - - </LinearLayout> - - <TextView - android:id="@+id/toolbar_subtitle" - style="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="-3dp" - android:ellipsize="end" - android:singleLine="true" - android:visibility="gone" /> - </LinearLayout> - - </android.support.v7.widget.Toolbar> - - <de.kuschku.quasseldroid_ng.util.ui.MaterialContentLoadingProgressBar - android:id="@+id/progressBar" - style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom" - app:mpb_progressStyle="horizontal" - app:mpb_setBothDrawables="true" - app:mpb_useIntrinsicPadding="false" - tools:indeterminate="true" /> - </FrameLayout> - - </android.support.design.widget.AppBarLayout> - - <fragment - android:id="@+id/contentMessages" - android:name="de.kuschku.quasseldroid_ng.ui.chat.MessageListFragment" - android:layout_width="match_parent" - android:layout_height="0dip" - android:layout_weight="1" - tools:layout="@layout/fragment_messages" /> - - <android.support.v7.widget.CardView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="?colorBackgroundCard" - app:cardElevation="4dp"> + android:layout_height="?attr/actionBarSize"> + + <android.support.v7.widget.Toolbar + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:contentInsetStartWithNavigation="0dp" + app:popupTheme="@style/Widget.PopupOverlay"> + + <LinearLayout + android:id="@+id/toolbar_action_area" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:background="?attr/selectableItemBackgroundBorderless" + android:clickable="true" + android:focusable="true" + android:focusableInTouchMode="false" + android:gravity="center_vertical|start" + android:minHeight="?attr/actionBarSize" + android:orientation="vertical"> <LinearLayout - android:layout_width="match_parent" - android:layout_height="?actionBarSize"> - - <EditText - android:id="@+id/input" - android:layout_width="0dip" - android:layout_height="match_parent" - android:layout_weight="1" /> - - <Button - android:id="@+id/buttonSend" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:text="Send" /> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginTop="-2dp" + android:baselineAligned="false" + android:gravity="center_vertical"> + + <TextView + android:id="@+id/key" + style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" + android:layout_width="16dp" + android:layout_height="16dp" + android:layout_marginEnd="2dp" + android:layout_marginRight="2dp" + android:layout_marginTop="2dp" + android:gravity="center" + android:textSize="16sp" + android:visibility="gone" /> + + <TextView + android:id="@+id/toolbar_title" + style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ellipsize="end" + android:gravity="center_vertical" + android:singleLine="true" + android:text="@string/app_name" /> + </LinearLayout> - </android.support.v7.widget.CardView> + <TextView + android:id="@+id/toolbar_subtitle" + style="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="-3dp" + android:ellipsize="end" + android:singleLine="true" + android:visibility="gone" /> + </LinearLayout> + + </android.support.v7.widget.Toolbar> + + <de.kuschku.quasseldroid_ng.util.ui.MaterialContentLoadingProgressBar + android:id="@+id/progressBar" + style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + app:mpb_progressStyle="horizontal" + app:mpb_setBothDrawables="true" + app:mpb_useIntrinsicPadding="false" + tools:indeterminate="true" /> + </FrameLayout> + + </android.support.design.widget.AppBarLayout> + + <fragment + android:id="@+id/contentMessages" + android:name="de.kuschku.quasseldroid_ng.ui.chat.MessageListFragment" + android:layout_width="match_parent" + android:layout_height="0dip" + android:layout_weight="1" + tools:layout="@layout/fragment_messages" /> + + <android.support.v7.widget.CardView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?colorBackgroundCard" + app:cardElevation="4dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="?actionBarSize"> - </LinearLayout> + <EditText + android:id="@+id/input" + android:layout_width="0dip" + android:layout_height="match_parent" + android:layout_weight="1" /> - <include layout="@layout/fragment_nick_list" /> + <Button + android:id="@+id/buttonSend" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:text="Send" /> + </LinearLayout> - <de.kuschku.quasseldroid_ng.util.ui.NavigationDrawerLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="start" - android:background="?attr/colorBackground" - android:fitsSystemWindows="true" - app:insetForeground="?attr/colorPrimaryDark"> - - <fragment - android:id="@+id/chatListFragment" - android:name="de.kuschku.quasseldroid_ng.ui.chat.BufferViewConfigFragment" - android:layout_width="match_parent" - android:layout_height="match_parent" - tools:layout="@layout/fragment_chat_list" /> - </de.kuschku.quasseldroid_ng.util.ui.NavigationDrawerLayout> + </android.support.v7.widget.CardView> + + </LinearLayout> + + <include layout="@layout/fragment_nick_list" /> + + <de.kuschku.quasseldroid_ng.util.ui.NavigationDrawerLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="start" + android:background="?attr/colorBackground" + android:fitsSystemWindows="true" + app:insetForeground="?attr/colorPrimaryDark"> + + <fragment + android:id="@+id/chatListFragment" + android:name="de.kuschku.quasseldroid_ng.ui.chat.BufferViewConfigFragment" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:layout="@layout/fragment_chat_list" /> + </de.kuschku.quasseldroid_ng.util.ui.NavigationDrawerLayout> </android.support.v4.widget.DrawerLayout> diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml index 57e8d5acd3e80559333e322fa2a3c106650377ec..ac1b5a37ab6ba460467c0377889fa766d695aef3 100644 --- a/app/src/main/res/layout/fragment_messages.xml +++ b/app/src/main/res/layout/fragment_messages.xml @@ -1,31 +1,31 @@ <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="?attr/colorBackground"> + + <android.support.v7.widget.RecyclerView + android:id="@+id/messages" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?attr/colorBackground"> - - <android.support.v7.widget.RecyclerView - android:id="@+id/messages" - android:layout_width="match_parent" - android:layout_height="match_parent" - app:stackFromEnd="true" - tools:listitem="@layout/widget_chatmessage_plain" /> + app:stackFromEnd="true" + tools:listitem="@layout/widget_chatmessage_plain" /> - <android.support.design.widget.FloatingActionButton - android:id="@+id/scrollDown" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end|bottom" - android:layout_marginBottom="12dp" - android:layout_marginEnd="12dp" - android:layout_marginRight="12dp" - android:tint="@color/colorFillDark" - app:backgroundTint="#8A808080" - app:elevation="0dip" - app:fabSize="mini" - app:pressedTranslationZ="0dip" - app:srcCompat="@drawable/ic_scroll_down" /> + <android.support.design.widget.FloatingActionButton + android:id="@+id/scrollDown" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|bottom" + android:layout_marginBottom="12dp" + android:layout_marginEnd="12dp" + android:layout_marginRight="12dp" + android:tint="@color/colorFillDark" + app:backgroundTint="#8A808080" + app:elevation="0dip" + app:fabSize="mini" + app:pressedTranslationZ="0dip" + app:srcCompat="@drawable/ic_scroll_down" /> </FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml index b4271dd33221a05181e3973922f9022c1a81fab3..754adfd98959ad4f6d8aa43c3aab72cb91bf5bc3 100644 --- a/app/src/main/res/layout/widget_chatmessage_action.xml +++ b/app/src/main/res/layout/widget_chatmessage_action.xml @@ -20,35 +20,35 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:clickable="true" - android:focusable="true" - android:gravity="top" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:clickable="true" + android:focusable="true" + android:gravity="top" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <TextView - android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" /> + <TextView + android:id="@+id/time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" /> - <TextView - android:id="@+id/content" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundAction" - android:textIsSelectable="true" - android:textStyle="italic" /> + <TextView + android:id="@+id/content" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundAction" + android:textIsSelectable="true" + android:textStyle="italic" /> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml index 44e42f1cdb0b6377b64c206663f679b84e05e92c..a19b7e87ff2463a9b6ce8b211887badfe93ca970 100644 --- a/app/src/main/res/layout/widget_chatmessage_error.xml +++ b/app/src/main/res/layout/widget_chatmessage_error.xml @@ -1,35 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="?attr/colorBackgroundSecondary" - android:clickable="true" - android:focusable="true" - android:gravity="top" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/colorBackgroundSecondary" + android:clickable="true" + android:focusable="true" + android:gravity="top" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <TextView - android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" /> + <TextView + android:id="@+id/time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" /> - <TextView - android:id="@+id/content" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundError" - android:textIsSelectable="true" - android:textStyle="italic" /> + <TextView + android:id="@+id/content" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundError" + android:textIsSelectable="true" + android:textStyle="italic" /> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml index 75105c7d9a43893d09f4bba5a6a08fa46e7e8609..7055344824e5c47b51fef655909bae740c9b6ff4 100644 --- a/app/src/main/res/layout/widget_chatmessage_plain.xml +++ b/app/src/main/res/layout/widget_chatmessage_plain.xml @@ -1,36 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:clickable="true" - android:focusable="true" - android:gravity="top" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:clickable="true" + android:focusable="true" + android:gravity="top" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <TextView - android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" - tools:text="[15:55]" /> + <TextView + android:id="@+id/time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" + tools:text="[15:55]" /> - <TextView - android:id="@+id/content" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForeground" - android:textIsSelectable="true" - tools:text="justJanne: hiii" /> + <TextView + android:id="@+id/content" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForeground" + android:textIsSelectable="true" + tools:text="justJanne: hiii" /> </LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml index 40613e00c91fb0cb192e2d0ea4c613ad70c6ed30..a9ac1112f85b8a877125e6bec76e422c385d559f 100644 --- a/app/src/main/res/layout/widget_chatmessage_server.xml +++ b/app/src/main/res/layout/widget_chatmessage_server.xml @@ -1,35 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="?attr/colorBackgroundSecondary" - android:clickable="true" - android:focusable="true" - android:gravity="top" - android:orientation="horizontal" - android:paddingBottom="@dimen/message_vertical" - android:paddingEnd="@dimen/message_horizontal" - android:paddingLeft="@dimen/message_horizontal" - android:paddingRight="@dimen/message_horizontal" - android:paddingStart="@dimen/message_horizontal" - android:paddingTop="@dimen/message_vertical" - android:textAppearance="?android:attr/textAppearanceListItemSmall"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/colorBackgroundSecondary" + android:clickable="true" + android:focusable="true" + android:gravity="top" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall"> - <TextView - android:id="@+id/time" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/message_horizontal" - android:layout_marginRight="@dimen/message_horizontal" - android:textColor="?attr/colorForegroundSecondary" - android:typeface="monospace" /> + <TextView + android:id="@+id/time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:textColor="?attr/colorForegroundSecondary" + android:typeface="monospace" /> - <TextView - android:id="@+id/content" - android:layout_width="0dip" - android:layout_height="wrap_content" - android:layout_weight="1" - android:textColor="?attr/colorForegroundSecondary" - android:textIsSelectable="true" - android:textStyle="italic" /> + <TextView + android:id="@+id/content" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundSecondary" + android:textIsSelectable="true" + android:textStyle="italic" /> </LinearLayout> diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_recents.png b/app/src/main/res/mipmap-hdpi/ic_launcher_recents.png new file mode 100644 index 0000000000000000000000000000000000000000..704b703466300312afef5183f4815c87b853a6a8 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_recents.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_recents.png b/app/src/main/res/mipmap-mdpi/ic_launcher_recents.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6768589fdc17dc9615ccd9d9a72202a63ed2f6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_recents.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_recents.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_recents.png new file mode 100644 index 0000000000000000000000000000000000000000..b602349062aab9c0f7b44b347d9400177b0da5f3 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_recents.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_recents.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_recents.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b4622fcf9b571ce307740c5f9335daed3f99c6 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_recents.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_recents.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_recents.png new file mode 100644 index 0000000000000000000000000000000000000000..aada01932a343ad3cf2e5afe2767c22f21dddbb1 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_recents.png differ diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index dd9f8a6b1b62f1f62373afc32a44a902a4490c33..03012d411fcd296c628d15b39d772f616ddb282a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,6 @@ <resources> - <dimen name="navigation_drawer_max_width">320dp</dimen> + <dimen name="navigation_drawer_max_width">320dp</dimen> - <dimen name="message_horizontal">8dp</dimen> - <dimen name="message_vertical">2dp</dimen> + <dimen name="message_horizontal">8dp</dimen> + <dimen name="message_vertical">2dp</dimen> </resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8e98b5f952d8bd0b2d674847b0d3a17084c8087a..7771d68ff8bcf33b558189658cf98c63c3f88d81 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,6 @@ <string name="connection_service_description">Keeps a connection to your core to allow for notifications, and to transmit messages.</string> <string name="crash_text">QD-NG has crashed</string> - <string name="drawer_open">Open</string> - <string name="drawer_close">Close</string> + <string name="drawer_open">Open</string> + <string name="drawer_close">Close</string> </resources> diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml index 1b8cee6ecd49928b8efa16177620d3b0f0da148b..d9cbff96d621ae3a1b278248396c2435c78f80b7 100644 --- a/app/src/main/res/values/themes_quassel.xml +++ b/app/src/main/res/values/themes_quassel.xml @@ -1,83 +1,83 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <string name="themeQuasselLightName">Quasselâ„¢ (Light)</string> - <string name="themeQuasselLightId">QUASSEL_LIGHT</string> + <string name="themeQuasselLightName">Quasselâ„¢ (Light)</string> + <string name="themeQuasselLightId">QUASSEL_LIGHT</string> - <style name="Theme.ChatTheme.Quassel_Light" parent="Theme.ChatTheme.Light"> - <item name="senderColor0">#cc0000</item> - <item name="senderColor1">#006cad</item> - <item name="senderColor2">#4d9900</item> - <item name="senderColor3">#6600cc</item> - <item name="senderColor4">#a67d00</item> - <item name="senderColor5">#009927</item> - <item name="senderColor6">#0030c0</item> - <item name="senderColor7">#cc009a</item> - <item name="senderColor8">#b94600</item> - <item name="senderColor9">#869900</item> - <item name="senderColorA">#149900</item> - <item name="senderColorB">#009960</item> - <item name="senderColorC">#006cad</item> - <item name="senderColorD">#0099cc</item> - <item name="senderColorE">#b300cc</item> - <item name="senderColorF">#cc004d</item> + <style name="Theme.ChatTheme.Quassel_Light" parent="Theme.ChatTheme.Light"> + <item name="senderColor0">#cc0000</item> + <item name="senderColor1">#006cad</item> + <item name="senderColor2">#4d9900</item> + <item name="senderColor3">#6600cc</item> + <item name="senderColor4">#a67d00</item> + <item name="senderColor5">#009927</item> + <item name="senderColor6">#0030c0</item> + <item name="senderColor7">#cc009a</item> + <item name="senderColor8">#b94600</item> + <item name="senderColor9">#869900</item> + <item name="senderColorA">#149900</item> + <item name="senderColorB">#009960</item> + <item name="senderColorC">#006cad</item> + <item name="senderColorD">#0099cc</item> + <item name="senderColorE">#b300cc</item> + <item name="senderColorF">#cc004d</item> - <item name="colorForeground">#DE000000</item> - <item name="colorForegroundHighlight">#DE000000</item> - <item name="colorForegroundSecondary">#8A000000</item> - <item name="colorForegroundAction">#1a237e</item> - <item name="colorForegroundError">#800000</item> + <item name="colorForeground">#DE000000</item> + <item name="colorForegroundHighlight">#DE000000</item> + <item name="colorForegroundSecondary">#8A000000</item> + <item name="colorForegroundAction">#1a237e</item> + <item name="colorForegroundError">#800000</item> - <item name="colorForegroundMirc">0x1</item> + <item name="colorForegroundMirc">0x1</item> - <item name="colorBackground">#FAFAFA</item> - <item name="colorBackgroundHighlight">#ff8811</item> - <item name="colorBackgroundSecondary">@null</item> - <item name="colorBackgroundCard">#FFFFFF</item> - <item name="colorBackgroundDialog">#FAFAFA</item> + <item name="colorBackground">#FAFAFA</item> + <item name="colorBackgroundHighlight">#ff8811</item> + <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundCard">#FFFFFF</item> + <item name="colorBackgroundDialog">#FAFAFA</item> - <item name="colorTintActivity">#88cc33</item> - <item name="colorTintMessage">#2277dd</item> - <item name="colorTintHighlight">#ff8811</item> - </style> + <item name="colorTintActivity">#88cc33</item> + <item name="colorTintMessage">#2277dd</item> + <item name="colorTintHighlight">#ff8811</item> + </style> - <string name="themeQuasselDarkName">Quasselâ„¢ (Dark)</string> - <string name="themeQuasselDarkId">QUASSEL_DARK</string> + <string name="themeQuasselDarkName">Quasselâ„¢ (Dark)</string> + <string name="themeQuasselDarkId">QUASSEL_DARK</string> - <style name="Theme.ChatTheme.Quassel_Dark" parent="Theme.ChatTheme"> - <item name="senderColor0">#cc0000</item> - <item name="senderColor1">#006cad</item> - <item name="senderColor2">#4d9900</item> - <item name="senderColor3">#6600cc</item> - <item name="senderColor4">#a67d00</item> - <item name="senderColor5">#009927</item> - <item name="senderColor6">#0030c0</item> - <item name="senderColor7">#cc009a</item> - <item name="senderColor8">#b94600</item> - <item name="senderColor9">#869900</item> - <item name="senderColorA">#149900</item> - <item name="senderColorB">#009960</item> - <item name="senderColorC">#006cad</item> - <item name="senderColorD">#0099cc</item> - <item name="senderColorE">#b300cc</item> - <item name="senderColorF">#cc004d</item> + <style name="Theme.ChatTheme.Quassel_Dark" parent="Theme.ChatTheme"> + <item name="senderColor0">#cc0000</item> + <item name="senderColor1">#006cad</item> + <item name="senderColor2">#4d9900</item> + <item name="senderColor3">#6600cc</item> + <item name="senderColor4">#a67d00</item> + <item name="senderColor5">#009927</item> + <item name="senderColor6">#0030c0</item> + <item name="senderColor7">#cc009a</item> + <item name="senderColor8">#b94600</item> + <item name="senderColor9">#869900</item> + <item name="senderColorA">#149900</item> + <item name="senderColorB">#009960</item> + <item name="senderColorC">#006cad</item> + <item name="senderColorD">#0099cc</item> + <item name="senderColorE">#b300cc</item> + <item name="senderColorF">#cc004d</item> - <item name="colorForeground">#FFFFFF</item> - <item name="colorForegroundHighlight">#FFFFFF</item> - <item name="colorForegroundSecondary">#B3FFFFFF</item> - <item name="colorForegroundAction">#7986cb</item> - <item name="colorForegroundError">#800000</item> + <item name="colorForeground">#FFFFFF</item> + <item name="colorForegroundHighlight">#FFFFFF</item> + <item name="colorForegroundSecondary">#B3FFFFFF</item> + <item name="colorForegroundAction">#7986cb</item> + <item name="colorForegroundError">#800000</item> - <item name="colorForegroundMirc">0x0</item> + <item name="colorForegroundMirc">0x0</item> - <item name="colorBackground">#303030</item> - <item name="colorBackgroundHighlight">#ff8811</item> - <item name="colorBackgroundSecondary">@null</item> - <item name="colorBackgroundCard">#424242</item> - <item name="colorBackgroundDialog">#303030</item> + <item name="colorBackground">#303030</item> + <item name="colorBackgroundHighlight">#ff8811</item> + <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundCard">#424242</item> + <item name="colorBackgroundDialog">#303030</item> - <item name="colorTintActivity">#88cc33</item> - <item name="colorTintMessage">#2277dd</item> - <item name="colorTintHighlight">#ff8811</item> - </style> + <item name="colorTintActivity">#88cc33</item> + <item name="colorTintMessage">#2277dd</item> + <item name="colorTintHighlight">#ff8811</item> + </style> </resources> diff --git a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java index e09a0bc39876c857ecefaf3cc560ddf88c4d79f3..4630dc7267465e7a81c6e541e59209b8dec17b96 100644 --- a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java +++ b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java @@ -9,5 +9,5 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.SOURCE) @Target(value = ElementType.METHOD) public @interface Slot { - String value() default ""; + String value() default ""; } diff --git a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java index 77367a2967bf65f6c9f850248822eb65c3ac8a61..163e0c1e50daeb86b4648c8379cc4fcf43ba48f5 100644 --- a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java +++ b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java @@ -9,5 +9,5 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(value = ElementType.TYPE) public @interface Syncable { - String name(); + String name(); } diff --git a/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java b/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java index 133a671437cc533ec06fcc2d80c5d156618706ce..0a3a15456f6f3e0bfe45a2c0717a6bdd22c85cd4 100644 --- a/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java +++ b/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java @@ -38,202 +38,202 @@ import javax.lang.model.type.TypeMirror; @SupportedSourceVersion(SourceVersion.RELEASE_8) public class InvokerProcessor extends AbstractProcessor { - private Filer filer; - - @Override - public synchronized void init(ProcessingEnvironment processingEnv) { - filer = processingEnv.getFiler(); - } - - @Override - public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { - List<SyncableElement> syncableElements = new ArrayList<>(); - for (Element element : roundEnv.getElementsAnnotatedWith(Syncable.class)) { - if (element.getKind() == ElementKind.INTERFACE) { - List<SlotElement> slotElements = new ArrayList<>(); - for (Element element1 : element.getEnclosedElements()) { - if (element1.getKind() == ElementKind.METHOD) { - ExecutableElement it = (ExecutableElement) element1; - ExecutableType methodType = (ExecutableType) it.asType(); - - Slot slotAnnotation = element1.getAnnotation(Slot.class); - if (slotAnnotation != null) { - String slotName = slotAnnotation.value().isEmpty() ? it.getSimpleName().toString() : slotAnnotation.value(); - slotElements.add(new SlotElement(it, methodType, slotName, slotAnnotation)); - } - } - } - - PackageElement packageElement = (PackageElement) element.getEnclosingElement(); - TypeElement typeElement = (TypeElement) element; - Syncable annotation = typeElement.getAnnotation(Syncable.class); - - syncableElements.add(new SyncableElement(packageElement, typeElement, annotation, slotElements)); + private Filer filer; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + filer = processingEnv.getFiler(); + } + + @Override + public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { + List<SyncableElement> syncableElements = new ArrayList<>(); + for (Element element : roundEnv.getElementsAnnotatedWith(Syncable.class)) { + if (element.getKind() == ElementKind.INTERFACE) { + List<SlotElement> slotElements = new ArrayList<>(); + for (Element element1 : element.getEnclosedElements()) { + if (element1.getKind() == ElementKind.METHOD) { + ExecutableElement it = (ExecutableElement) element1; + ExecutableType methodType = (ExecutableType) it.asType(); + + Slot slotAnnotation = element1.getAnnotation(Slot.class); + if (slotAnnotation != null) { + String slotName = slotAnnotation.value().isEmpty() ? it.getSimpleName().toString() : slotAnnotation.value(); + slotElements.add(new SlotElement(it, methodType, slotName, slotAnnotation)); } + } } - try { - for (SyncableElement syncableElement : syncableElements) { - generateInvoker(syncableElement); - } - } catch (IOException e) { - e.printStackTrace(); - } - return true; - } + PackageElement packageElement = (PackageElement) element.getEnclosingElement(); + TypeElement typeElement = (TypeElement) element; + Syncable annotation = typeElement.getAnnotation(Syncable.class); - private void generateInvoker(SyncableElement element) throws IOException { - String packageName = element.packageElement.getQualifiedName().toString() + ".invokers"; - String invokerName = element.annotation.name() + "Invoker"; - - ClassName type = ClassName.get(packageName, invokerName); - ClassName wrongObjectTypeException = ClassName.get("de.kuschku.libquassel.quassel.exceptions", "WrongObjectTypeException"); - ClassName unknownMethodException = ClassName.get("de.kuschku.libquassel.quassel.exceptions", "UnknownMethodException"); - ClassName nonNullAnnotation = ClassName.get("android.support.annotation", "NonNull"); - - MethodSpec methodSpecConstructor = MethodSpec - .constructorBuilder() - .addModifiers(Modifier.PRIVATE) - .build(); - - FieldSpec fieldSpecInstance = FieldSpec - .builder(type, "INSTANCE", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) - .initializer("new $T()", type) - .build(); - - MethodSpec methodSpecClassName = MethodSpec - .methodBuilder("getClassName") - .addModifiers(Modifier.PUBLIC) - .addAnnotation(nonNullAnnotation) - .addAnnotation(Override.class) - .returns(String.class) - .addStatement("return $S", element.annotation.name()) - .build(); - - ParameterSpec parameterSpecOn = ParameterSpec - .builder( - Object.class, - "on" - ) - .addAnnotation(nonNullAnnotation) - .build(); - - ParameterSpec parameterSpecMethod = ParameterSpec - .builder( - String.class, - "method" - ) - .addAnnotation(nonNullAnnotation).build(); - - ParameterSpec parameterSpecParams = ParameterSpec - .builder( - ParameterizedTypeName.get( - ClassName.get(List.class), - ParameterizedTypeName.get( - ClassName.get("de.kuschku.libquassel.protocol", "QVariant"), - TypeName.get(Object.class) - ) - ), - "params" - ) - .addAnnotation(nonNullAnnotation) - .build(); - - MethodSpec.Builder invokeSpec = MethodSpec - .methodBuilder("invoke") - .addModifiers(Modifier.PUBLIC) - .addAnnotation(Override.class) - .addException(wrongObjectTypeException) - .addException(unknownMethodException) - .addParameter(parameterSpecOn) - .addParameter(parameterSpecMethod) - .addParameter(parameterSpecParams) - .beginControlFlow("if (on instanceof $T)", element.typeElement) - .addStatement("$T it = ($T) $N", element.typeElement, element.typeElement, parameterSpecOn) - .beginControlFlow("switch ($N)", parameterSpecMethod); - - for (SlotElement slot : element.slots) { - invokeSpec = invokeSpec.beginControlFlow("case $S:", slot.slotName); - invokeSpec = invokeSpec.addCode("it.$N(\n$>", slot.element.getSimpleName()); - for (int i = 0; i < slot.type.getParameterTypes().size(); i++) { - TypeMirror parameterType = slot.type.getParameterTypes().get(i); - boolean isLast = i + 1 == slot.type.getParameterTypes().size(); - - invokeSpec = invokeSpec.addCode("($T) $N.get($L).getData()", parameterType, parameterSpecParams, i); - if (!isLast) - invokeSpec = invokeSpec.addCode(","); - invokeSpec = invokeSpec.addCode("\n"); - } - invokeSpec = invokeSpec.addCode("$<);\n"); - invokeSpec = invokeSpec.endControlFlow("return"); - } - - invokeSpec = invokeSpec - .beginControlFlow("default:") - .addStatement("throw new $T($N(), $N)", - unknownMethodException, - methodSpecClassName, - parameterSpecMethod - ) - .endControlFlow() - .endControlFlow() - .addCode("$<} else{\n$>") - .addStatement("throw new $T($N, $N())", - wrongObjectTypeException, - parameterSpecOn, - methodSpecClassName - ) - .endControlFlow(); - - TypeSpec typeSpec = TypeSpec - .classBuilder(type) - .addSuperinterface(ParameterizedTypeName.get( - ClassName.get(packageName, "Invoker"), - TypeName.get(element.typeElement.asType()) - )) - .addModifiers(Modifier.PUBLIC) - .addField(fieldSpecInstance) - .addMethod(methodSpecConstructor) - .addMethod(methodSpecClassName) - .addMethod(invokeSpec.build()) - .build(); - - JavaFile javaFile = JavaFile - .builder(packageName, typeSpec) - .build(); - - javaFile.writeTo(filer); + syncableElements.add(new SyncableElement(packageElement, typeElement, annotation, slotElements)); + } } - private class SlotElement { - final ExecutableElement element; - final ExecutableType type; - - final String slotName; - - final Slot slot; + try { + for (SyncableElement syncableElement : syncableElements) { + generateInvoker(syncableElement); + } + } catch (IOException e) { + e.printStackTrace(); + } + return true; + } + + private void generateInvoker(SyncableElement element) throws IOException { + String packageName = element.packageElement.getQualifiedName().toString() + ".invokers"; + String invokerName = element.annotation.name() + "Invoker"; + + ClassName type = ClassName.get(packageName, invokerName); + ClassName wrongObjectTypeException = ClassName.get("de.kuschku.libquassel.quassel.exceptions", "WrongObjectTypeException"); + ClassName unknownMethodException = ClassName.get("de.kuschku.libquassel.quassel.exceptions", "UnknownMethodException"); + ClassName nonNullAnnotation = ClassName.get("android.support.annotation", "NonNull"); + + MethodSpec methodSpecConstructor = MethodSpec + .constructorBuilder() + .addModifiers(Modifier.PRIVATE) + .build(); + + FieldSpec fieldSpecInstance = FieldSpec + .builder(type, "INSTANCE", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) + .initializer("new $T()", type) + .build(); + + MethodSpec methodSpecClassName = MethodSpec + .methodBuilder("getClassName") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(nonNullAnnotation) + .addAnnotation(Override.class) + .returns(String.class) + .addStatement("return $S", element.annotation.name()) + .build(); + + ParameterSpec parameterSpecOn = ParameterSpec + .builder( + Object.class, + "on" + ) + .addAnnotation(nonNullAnnotation) + .build(); + + ParameterSpec parameterSpecMethod = ParameterSpec + .builder( + String.class, + "method" + ) + .addAnnotation(nonNullAnnotation).build(); + + ParameterSpec parameterSpecParams = ParameterSpec + .builder( + ParameterizedTypeName.get( + ClassName.get(List.class), + ParameterizedTypeName.get( + ClassName.get("de.kuschku.libquassel.protocol", "QVariant"), + TypeName.get(Object.class) + ) + ), + "params" + ) + .addAnnotation(nonNullAnnotation) + .build(); + + MethodSpec.Builder invokeSpec = MethodSpec + .methodBuilder("invoke") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .addException(wrongObjectTypeException) + .addException(unknownMethodException) + .addParameter(parameterSpecOn) + .addParameter(parameterSpecMethod) + .addParameter(parameterSpecParams) + .beginControlFlow("if (on instanceof $T)", element.typeElement) + .addStatement("$T it = ($T) $N", element.typeElement, element.typeElement, parameterSpecOn) + .beginControlFlow("switch ($N)", parameterSpecMethod); + + for (SlotElement slot : element.slots) { + invokeSpec = invokeSpec.beginControlFlow("case $S:", slot.slotName); + invokeSpec = invokeSpec.addCode("it.$N(\n$>", slot.element.getSimpleName()); + for (int i = 0; i < slot.type.getParameterTypes().size(); i++) { + TypeMirror parameterType = slot.type.getParameterTypes().get(i); + boolean isLast = i + 1 == slot.type.getParameterTypes().size(); + + invokeSpec = invokeSpec.addCode("($T) $N.get($L).getData()", parameterType, parameterSpecParams, i); + if (!isLast) + invokeSpec = invokeSpec.addCode(","); + invokeSpec = invokeSpec.addCode("\n"); + } + invokeSpec = invokeSpec.addCode("$<);\n"); + invokeSpec = invokeSpec.endControlFlow("return"); + } - public SlotElement(ExecutableElement element, ExecutableType type, String slotName, Slot slot) { - this.element = element; - this.type = type; - this.slotName = slotName; - this.slot = slot; - } + invokeSpec = invokeSpec + .beginControlFlow("default:") + .addStatement("throw new $T($N(), $N)", + unknownMethodException, + methodSpecClassName, + parameterSpecMethod + ) + .endControlFlow() + .endControlFlow() + .addCode("$<} else{\n$>") + .addStatement("throw new $T($N, $N())", + wrongObjectTypeException, + parameterSpecOn, + methodSpecClassName + ) + .endControlFlow(); + + TypeSpec typeSpec = TypeSpec + .classBuilder(type) + .addSuperinterface(ParameterizedTypeName.get( + ClassName.get(packageName, "Invoker"), + TypeName.get(element.typeElement.asType()) + )) + .addModifiers(Modifier.PUBLIC) + .addField(fieldSpecInstance) + .addMethod(methodSpecConstructor) + .addMethod(methodSpecClassName) + .addMethod(invokeSpec.build()) + .build(); + + JavaFile javaFile = JavaFile + .builder(packageName, typeSpec) + .build(); + + javaFile.writeTo(filer); + } + + private class SlotElement { + final ExecutableElement element; + final ExecutableType type; + + final String slotName; + + final Slot slot; + + public SlotElement(ExecutableElement element, ExecutableType type, String slotName, Slot slot) { + this.element = element; + this.type = type; + this.slotName = slotName; + this.slot = slot; } + } - private class SyncableElement { - final PackageElement packageElement; - final TypeElement typeElement; + private class SyncableElement { + final PackageElement packageElement; + final TypeElement typeElement; - final Syncable annotation; + final Syncable annotation; - final List<SlotElement> slots; + final List<SlotElement> slots; - public SyncableElement(PackageElement packageElement, TypeElement typeElement, Syncable annotation, List<SlotElement> slots) { - this.packageElement = packageElement; - this.typeElement = typeElement; - this.annotation = annotation; - this.slots = slots; - } + public SyncableElement(PackageElement packageElement, TypeElement typeElement, Syncable annotation, List<SlotElement> slots) { + this.packageElement = packageElement; + this.typeElement = typeElement; + this.annotation = annotation; + this.slots = slots; } + } } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt index 79cd1d31cd549e0e69461d2d67d4ac81f39dcae4..fee50680bdf28f8f3615163c9eb3115799d80441 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt @@ -53,8 +53,10 @@ data class MetaType<T>(val klass: Class<T>, val type: Type, val serializer: Seri addType(Type.UserType, QType.BufferId, IntSerializer) addType(Type.UserType, QType.BufferInfo, BufferInfoSerializer) addType(Type.UserType, QType.DccConfig_IpDetectionMode, DccConfig_IpDetectionModeSerializer) - addType(Type.UserType, QType.DccConfig_PortSelectionMode, - DccConfig_PortSelectionModeSerializer) + addType( + Type.UserType, QType.DccConfig_PortSelectionMode, + DccConfig_PortSelectionModeSerializer + ) addType(Type.UserType, QType.IrcUser, VariantMapSerializer) addType(Type.UserType, QType.IrcChannel, VariantMapSerializer) addType(Type.UserType, QType.Identity, VariantMapSerializer) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt index 33fbc4cd84ba60be81d7f6424e78e258e57f62a6..47462bb78b543ec80c0847e3eadaaa6996133c99 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt @@ -8,14 +8,16 @@ import de.kuschku.libquassel.protocol.value object CoreSetupDataSerializer : HandshakeMessageSerializer<HandshakeMessage.CoreSetupData> { override fun serialize(data: HandshakeMessage.CoreSetupData) = mapOf( "MsgType" to QVariant_("CoreSetupData", Type.QString), - "SetupData" to QVariant_(mapOf( - "AdminUser" to QVariant_(data.adminUser, Type.QString), - "AdminPasswd" to QVariant_(data.adminPassword, Type.QString), - "Backend" to QVariant_(data.backend, Type.QString), - "ConnectionProperties" to QVariant_(data.setupData, Type.QVariantMap), - "Authenticator" to QVariant_(data.authenticator, Type.QString), - "AuthProperties" to QVariant_(data.authSetupData, Type.QVariantMap) - ), Type.QVariantMap) + "SetupData" to QVariant_( + mapOf( + "AdminUser" to QVariant_(data.adminUser, Type.QString), + "AdminPasswd" to QVariant_(data.adminPassword, Type.QString), + "Backend" to QVariant_(data.backend, Type.QString), + "ConnectionProperties" to QVariant_(data.setupData, Type.QVariantMap), + "Authenticator" to QVariant_(data.authenticator, Type.QString), + "AuthProperties" to QVariant_(data.authSetupData, Type.QVariantMap) + ), Type.QVariantMap + ) ) override fun deserialize(data: QVariantMap): HandshakeMessage.CoreSetupData { diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/RequestType.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/RequestType.kt index 3fcc834c292cbe1b36f941a5beed0bddb430fb3a..957b99ab3603c54704f2556ea5ac7215deead964 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/RequestType.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/RequestType.kt @@ -11,7 +11,8 @@ enum class RequestType(val value: Int) { companion object { private val byId = enumValues<RequestType>().associateBy( - RequestType::value) + RequestType::value + ) fun of(value: Int) = byId[value] ?: Invalid } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt index fd2981f5db642ef13d425fcaa47f80d909ca6f05..fb18d67484020b02d1e29f7874e964d404cdd24d 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt @@ -8,11 +8,13 @@ import de.kuschku.libquassel.protocol.value object SessionInitSerializer : HandshakeMessageSerializer<HandshakeMessage.SessionInit> { override fun serialize(data: HandshakeMessage.SessionInit) = mapOf( "MsgType" to QVariant_("SessionInit", Type.QString), - "SessionState" to QVariant_(mapOf( - "BufferInfos" to QVariant_(data.bufferInfos, Type.QVariantList), - "NetworkIds" to QVariant_(data.networkIds, Type.QVariantList), - "Identities" to QVariant_(data.identities, Type.QVariantList) - ), Type.QVariantMap) + "SessionState" to QVariant_( + mapOf( + "BufferInfos" to QVariant_(data.bufferInfos, Type.QVariantList), + "NetworkIds" to QVariant_(data.networkIds, Type.QVariantList), + "Identities" to QVariant_(data.identities, Type.QVariantList) + ), Type.QVariantMap + ) ) override fun deserialize(data: QVariantMap): HandshakeMessage.SessionInit { diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializer.kt index 582234af744c6f193a3ab84fcb8a25aff7d85162..85785e8dbbda7d2b0d78768fd2500929c5abe808 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/BoolSerializer.kt @@ -6,11 +6,13 @@ import java.nio.ByteBuffer object BoolSerializer : Serializer<Boolean> { override fun serialize(buffer: ChainedByteBuffer, data: Boolean, - features: Quassel_Features) = buffer.put(if (data) { - 0x01 - } else { - 0x00 - }.toByte()) + features: Quassel_Features) = buffer.put( + if (data) { + 0x01 + } else { + 0x00 + }.toByte() + ) override fun deserialize(buffer: ByteBuffer, features: Quassel_Features) = buffer.get() != 0x00.toByte() diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt index 41fd63f5bbb76d5e5bb6e902d914c8489e2b1dc3..1c7c300951572a93efd11f9ddb3508e183917827 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt @@ -48,7 +48,8 @@ object DateTimeSerializer : Serializer<Temporal> { } else -> throw IllegalArgumentException( - "Unsupported Format: ${data::class.java.canonicalName}") + "Unsupported Format: ${data::class.java.canonicalName}" + ) } } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HostAddressSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HostAddressSerializer.kt index d2a8cce1d24d729fd5d06b645e26a452cfe4102d..ab1bc9a1f9262fc8c59304274625fdcd9df659f1 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HostAddressSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HostAddressSerializer.kt @@ -20,8 +20,10 @@ object HostAddressSerializer : Serializer<InetAddress> { buffer.put(data.address) } else -> { - ByteSerializer.serialize(buffer, NetworkLayerProtocol.UnknownNetworkLayerProtocol.value, - features) + ByteSerializer.serialize( + buffer, NetworkLayerProtocol.UnknownNetworkLayerProtocol.value, + features + ) throw IllegalArgumentException("Invalid network protocol ${data.javaClass.canonicalName}") } } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializer.kt index a8fc39d9b96390bba4a6ad4ba1054235ba865e7a..2dd02f8cbf007ad05d3c3914c2e38cc69da30d3c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/MessageSerializer.kt @@ -29,7 +29,8 @@ object MessageSerializer : Serializer<Message> { time = Instant.ofEpochSecond(IntSerializer.deserialize(buffer, features).toLong()), type = Message.MessageType.of(IntSerializer.deserialize(buffer, features)), flag = Message.MessageFlag.of( - ByteSerializer.deserialize(buffer, features).toInt()), + ByteSerializer.deserialize(buffer, features).toInt() + ), bufferInfo = BufferInfoSerializer.deserialize(buffer, features), sender = StringSerializer.UTF8.deserialize(buffer, features) ?: "", senderPrefixes = if (features.hasFlag(QuasselFeature.SenderPrefixes)) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt index 21e9f5b965c436a438888f8565a26ff031c8554d..916448afecee06a1919d0c2b402a01649712bdb3 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt @@ -15,12 +15,14 @@ object VariantMapSerializer : Serializer<QVariantMap> { } override fun deserialize(buffer: ByteBuffer, features: Quassel_Features): QVariantMap { - return mutableMapOf(*(0 until IntSerializer.deserialize(buffer, features)).map { - Pair( - StringSerializer.UTF16.deserialize(buffer, features) ?: "", - VariantSerializer.deserialize(buffer, features) - ) - }.toTypedArray()) + return mutableMapOf( + *(0 until IntSerializer.deserialize(buffer, features)).map { + Pair( + StringSerializer.UTF16.deserialize(buffer, features) ?: "", + VariantSerializer.deserialize(buffer, features) + ) + }.toTypedArray() + ) } } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt index 1ee3e161682f98495d1edf392d6dbadc8e3a02ed..33ac5d95ecd3671a4627864b4c9592a3f50927d4 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt @@ -34,7 +34,8 @@ class AliasManager constructor( if (names.size != expansions.size) throw IllegalArgumentException( - "Sizes do not match: names=${names.size}, expansions=${expansions.size}") + "Sizes do not match: names=${names.size}, expansions=${expansions.size}" + ) _aliases.clear() _aliases.addAll(names.zip(expansions, ::Alias)) @@ -79,7 +80,7 @@ class AliasManager constructor( val secondSlashPos = msg.indexOf('/', 1) val firstSpacePos = msg.indexOf(' ') if (!msg.startsWith('/') || firstSpacePos == 1 || - (secondSlashPos != -1 && (secondSlashPos < firstSpacePos || firstSpacePos == -1))) { + (secondSlashPos != -1 && (secondSlashPos < firstSpacePos || firstSpacePos == -1))) { if (msg.startsWith("//")) msg = msg.substring(1) // "//asdf" is transformed to "/asdf" else if (msg.startsWith("/ ")) @@ -89,9 +90,9 @@ class AliasManager constructor( // check for aliases val split = msg.split(' ', ignoreCase = true, limit = 2) val search: String = split.firstOrNull() - ?: return + ?: return val found = _aliases.firstOrNull { it.name.equals(search, true) } - ?: return + ?: return expand(found.expansion, info, split.getOrNull(1) ?: "", previousCommands) } @@ -104,9 +105,11 @@ class AliasManager constructor( val paramRange = Pattern.compile("""\$(\d+)\.\.(\d*)""") val commands = Arrays.asList( - *expansion.split("; ?").dropLastWhile { it.isEmpty() }.toTypedArray()) + *expansion.split("; ?").dropLastWhile { it.isEmpty() }.toTypedArray() + ) val params = Arrays.asList<String>( - *msg.split(' ').dropLastWhile({ it.isEmpty() }).toTypedArray()) + *msg.split(' ').dropLastWhile({ it.isEmpty() }).toTypedArray() + ) val expandedCommands = LinkedList<String>() for (i in commands.indices) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt index dd915014177d08388eba5bde97940435014a9cae..d24621833df896e373c6ab5dd31f70e33545b628 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BacklogManager.kt @@ -16,16 +16,13 @@ class BacklogManager( private var loading = AtomicInteger(-1) - override fun requestBacklog(bufferId: BufferId, first: MsgId, last: MsgId, limit: Int, additional: Int) { + override fun requestBacklog(bufferId: BufferId, first: MsgId, last: MsgId, limit: Int, + additional: Int) { if (loading.getAndSet(bufferId) != bufferId) { super.requestBacklog(bufferId, first, last, limit, additional) } } - override fun requestBacklogAll(first: MsgId, last: MsgId, limit: Int, additional: Int) { - super.requestBacklogAll(first, last, limit, additional) - } - override fun receiveBacklog(bufferId: BufferId, first: MsgId, last: MsgId, limit: Int, additional: Int, messages: QVariantList) { loading.compareAndSet(bufferId, -1) diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt index 2ed66474cf78211ba3089cb39fb58f4884cb4083..949af19cfdd2de4bf09ccca0e839195a09384f29 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt @@ -72,7 +72,8 @@ class BufferViewConfig constructor( setBufferViewName(properties["bufferViewName"].valueOr(this::bufferViewName)) setNetworkId(properties["networkId"].valueOr(this::networkId)) setAddNewBuffersAutomatically( - properties["addNewBuffersAutomatically"].valueOr(this::addNewBuffersAutomatically)) + properties["addNewBuffersAutomatically"].valueOr(this::addNewBuffersAutomatically) + ) setSortAlphabetically(properties["sortAlphabetically"].valueOr(this::sortAlphabetically)) setHideInactiveBuffers(properties["hideInactiveBuffers"].valueOr(this::hideInactiveBuffers)) setHideInactiveNetworks(properties["hideInactiveNetworks"].valueOr(this::hideInactiveNetworks)) diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt index 0acd3e3351729d6564c55c6003ce669c709d4624..a45e245015312c50eef07ef30dd427d39cbee1bb 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt @@ -51,11 +51,13 @@ class Identity constructor( setAutoAwayTime(properties["autoAwayTime"].valueOr(this::autoAwayTime)) setAutoAwayReason(properties["autoAwayReason"].valueOr(this::autoAwayReason)) setAutoAwayReasonEnabled( - properties["autoAwayReasonEnabled"].valueOr(this::autoAwayReasonEnabled)) + properties["autoAwayReasonEnabled"].valueOr(this::autoAwayReasonEnabled) + ) setDetachAwayEnabled(properties["detachAwayEnabled"].valueOr(this::detachAwayEnabled)) setDetachAwayReason(properties["detachAwayReason"].valueOr(this::detachAwayReason)) setDetachAwayReasonEnabled( - properties["detachAwayReasonEnabled"].valueOr(this::detachAwayReasonEnabled)) + properties["detachAwayReasonEnabled"].valueOr(this::detachAwayReasonEnabled) + ) setIdent(properties["ident"].valueOr(this::ident)) setKickReason(properties["kickReason"].valueOr(this::kickReason)) setPartReason(properties["partReason"].valueOr(this::partReason)) diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt index 6db909a986b4e2449a3c462e3e23a20426a498f0..9d4a65d466c4fb4732b87c0a18228a46168a2de1 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt @@ -29,15 +29,21 @@ class IrcChannel( } override fun initChanModes(): QVariantMap = mapOf( - "A" to QVariant_(_A_channelModes.entries.map { (key, value) -> - key to QVariant_(value.toList(), Type.QStringList) - }, Type.QVariantMap), - "B" to QVariant_(_B_channelModes.entries.map { (key, value) -> - key to QVariant_(value, Type.QString) - }, Type.QVariantMap), - "C" to QVariant_(_C_channelModes.entries.map { (key, value) -> - key to QVariant_(value, Type.QString) - }, Type.QVariantMap), + "A" to QVariant_( + _A_channelModes.entries.map { (key, value) -> + key to QVariant_(value.toList(), Type.QStringList) + }, Type.QVariantMap + ), + "B" to QVariant_( + _B_channelModes.entries.map { (key, value) -> + key to QVariant_(value, Type.QString) + }, Type.QVariantMap + ), + "C" to QVariant_( + _C_channelModes.entries.map { (key, value) -> + key to QVariant_(value, Type.QString) + }, Type.QVariantMap + ), "D" to QVariant_(_D_channelModes.joinToString(), Type.QString) ) @@ -67,9 +73,11 @@ class IrcChannel( } override fun initSetUserModes(usermodes: QVariantMap) { - _userModes.putAll(usermodes.entries.map { (key, value) -> - network().newIrcUser(key) to value.value("") - }.toMap()) + _userModes.putAll( + usermodes.entries.map { (key, value) -> + network().newIrcUser(key) to value.value("") + }.toMap() + ) } override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt index f9a51c952dc6d102e6ecaf2a74f285aae5106617..cc0d9d2c8226c936ae846037cbd18a0259b955d3 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt @@ -240,8 +240,9 @@ class IrcUser( } override fun partChannel(channelname: String) { - val channel = network().ircChannel(channelname) - ?: throw IllegalArgumentException("Received part for unknown channel : $channelname") + val channel = network().ircChannel(channelname) ?: throw IllegalArgumentException( + "Received part for unknown channel : $channelname" + ) partChannel(channel) } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt index ae5584314b762aaaba1f6a636c71059283fda980..146d0760589e75a72e00d61b4c90a36749dbbd37 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt @@ -80,9 +80,9 @@ class Network constructor( if (_channelModes == null) determineChannelModeTypes() return _channelModes?.entries - ?.filter { (_, chars) -> chars.contains(mode) } - ?.map(Map.Entry<ChannelModeType, Set<Char>>::key) - ?.firstOrNull() ?: ChannelModeType.NOT_A_CHANMODE + ?.filter { (_, chars) -> chars.contains(mode) } + ?.map(Map.Entry<ChannelModeType, Set<Char>>::key) + ?.firstOrNull() ?: ChannelModeType.NOT_A_CHANMODE } private fun determineChannelModeTypes() { @@ -675,12 +675,16 @@ class Network constructor( override fun initIrcUsersAndChannels(): QVariantMap { return mapOf( - "Users" to QVariant_(_ircUsers.values.map { it.toVariantMap() }.transpose().map { - QVariant_(it, Type.QVariantList) - }, Type.QVariantMap), - "Channels" to QVariant_(_ircChannels.values.map { it.toVariantMap() }.transpose().map { - QVariant_(it, Type.QVariantList) - }, Type.QVariantMap) + "Users" to QVariant_( + _ircUsers.values.map { it.toVariantMap() }.transpose().map { + QVariant_(it, Type.QVariantList) + }, Type.QVariantMap + ), + "Channels" to QVariant_( + _ircChannels.values.map { it.toVariantMap() }.transpose().map { + QVariant_(it, Type.QVariantList) + }, Type.QVariantMap + ) ) } @@ -689,12 +693,18 @@ class Network constructor( "currentServer" to QVariant_(currentServer(), Type.QString), "myNick" to QVariant_(myNick(), Type.QString), "latency" to QVariant_(latency(), Type.Int), - "codecForServer" to QVariant_(codecForServer().serializeString(StringSerializer.UTF8), - Type.QByteArray), - "codecForEncoding" to QVariant_(codecForEncoding().serializeString(StringSerializer.UTF8), - Type.QByteArray), - "codecForDecoding" to QVariant_(codecForDecoding().serializeString(StringSerializer.UTF8), - Type.QByteArray), + "codecForServer" to QVariant_( + codecForServer().serializeString(StringSerializer.UTF8), + Type.QByteArray + ), + "codecForEncoding" to QVariant_( + codecForEncoding().serializeString(StringSerializer.UTF8), + Type.QByteArray + ), + "codecForDecoding" to QVariant_( + codecForDecoding().serializeString(StringSerializer.UTF8), + Type.QByteArray + ), "identityId" to QVariant_(identity(), QType.IdentityId), "isConnected" to QVariant_(isConnected(), Type.Bool), "connectionState" to QVariant_(connectionState(), Type.Int), @@ -731,7 +741,8 @@ class Network constructor( override fun initSetServerList(serverList: QVariantList) { _serverList = serverList.mapNotNull { it.value<QVariantMap?>() }.map( - Server.Companion::fromVariantMap).toMutableList() + Server.Companion::fromVariantMap + ).toMutableList() } override fun initSetIrcUsersAndChannels(usersAndChannels: QVariantMap) { @@ -770,11 +781,15 @@ class Network constructor( setCodecForServer( properties["codecForServer"].value(codecForServer().serializeString(StringSerializer.UTF8)) ) - setCodecForEncoding(properties["codecForEncoding"].value( - codecForEncoding().serializeString(StringSerializer.UTF8)) + setCodecForEncoding( + properties["codecForEncoding"].value( + codecForEncoding().serializeString(StringSerializer.UTF8) + ) ) - setCodecForDecoding(properties["codecForDecoding"].value( - codecForDecoding().serializeString(StringSerializer.UTF8)) + setCodecForDecoding( + properties["codecForDecoding"].value( + codecForDecoding().serializeString(StringSerializer.UTF8) + ) ) setIdentity(properties["identityId"].valueOr(this::identity)) setConnected(properties["isConnected"].valueOr(this::isConnected)) diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt index 2cf9c21908e101794b7a88224dc1542cbf4bbadc..e7ad6859a9a73c30c801d1d4ab9102c17ba9b3d5 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/RpcHandler.kt @@ -68,8 +68,10 @@ class RpcHandler( } override fun sendInput(bufferInfo: BufferInfo, message: String) { - RPC("2sendInput(BufferInfo,QString)", ARG(bufferInfo, QType.BufferInfo), - ARG(message, Type.QString)) + RPC( + "2sendInput(BufferInfo,QString)", ARG(bufferInfo, QType.BufferInfo), + ARG(message, Type.QString) + ) } inline fun RPC(function: String, vararg arg: QVariant_) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt index f142ef4818bc4b79d8ae3b60bc06fd2ad003926b..86d8c0682abe5f4a2b344f0f3344a491a5671b99 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBacklogManager.kt @@ -10,15 +10,19 @@ interface IBacklogManager : ISyncableObject { @Slot fun requestBacklog(bufferId: BufferId, first: MsgId = -1, last: MsgId = -1, limit: Int = -1, additional: Int = 0) { - REQUEST("requestBacklog", ARG(bufferId, QType.BufferId), ARG(first, QType.MsgId), - ARG(last, QType.MsgId), ARG(limit, Type.Int), ARG(additional, Type.Int)) + REQUEST( + "requestBacklog", ARG(bufferId, QType.BufferId), ARG(first, QType.MsgId), + ARG(last, QType.MsgId), ARG(limit, Type.Int), ARG(additional, Type.Int) + ) } @Slot fun requestBacklogAll(first: MsgId = -1, last: MsgId = -1, limit: Int = -1, additional: Int = 0) { - REQUEST("requestBacklogAll", ARG(first, QType.MsgId), ARG(last, QType.MsgId), - ARG(limit, Type.Int), ARG(additional, Type.Int)) + REQUEST( + "requestBacklogAll", ARG(first, QType.MsgId), ARG(last, QType.MsgId), + ARG(limit, Type.Int), ARG(additional, Type.Int) + ) } @Slot diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBufferSyncer.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBufferSyncer.kt index b0adef439a8780bc5ab5ebc61940bc5f3dd070d7..26d51044506dd9e467c21a38c1e840ee85cd2cec 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBufferSyncer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IBufferSyncer.kt @@ -35,8 +35,10 @@ interface IBufferSyncer : ISyncableObject { @Slot fun requestMergeBuffersPermanently(buffer1: BufferId, buffer2: BufferId) { - REQUEST("requestMergeBuffersPermanently", ARG(buffer1, QType.BufferId), - ARG(buffer2, QType.BufferId)) + REQUEST( + "requestMergeBuffersPermanently", ARG(buffer1, QType.BufferId), + ARG(buffer2, QType.BufferId) + ) } @Slot diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIgnoreListManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIgnoreListManager.kt index f28a4dc26d33b7f2b84415295d105a12432719a0..26dec34a67921945e27b9063dfd7058f5ab44b91 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIgnoreListManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIgnoreListManager.kt @@ -20,10 +20,12 @@ interface IIgnoreListManager : ISyncableObject { @Slot fun requestAddIgnoreListItem(type: Int, ignoreRule: String, isRegEx: Boolean, strictness: Int, scope: Int, scopeRule: String, isActive: Boolean) { - REQUEST("requestAddIgnoreListItem", ARG(type, Type.Int), ARG(ignoreRule, Type.QString), - ARG(isRegEx, Type.Bool), - ARG(strictness, Type.Int), ARG(scope, Type.Int), ARG(scopeRule, Type.QString), - ARG(isActive, Type.Bool)) + REQUEST( + "requestAddIgnoreListItem", ARG(type, Type.Int), ARG(ignoreRule, Type.QString), + ARG(isRegEx, Type.Bool), + ARG(strictness, Type.Int), ARG(scope, Type.Int), ARG(scopeRule, Type.QString), + ARG(isActive, Type.Bool) + ) } @Slot diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcListHelper.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcListHelper.kt index 8b8788e9e068fc189efa84f6ed3922d43ed8e43b..fe2faef1a94dce098c49084c2382e91ae896918c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcListHelper.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcListHelper.kt @@ -9,8 +9,10 @@ import de.kuschku.libquassel.protocol.Type interface IIrcListHelper : ISyncableObject { @Slot fun requestChannelList(netId: NetworkId, channelFilters: QStringList): QVariantList { - REQUEST("requestChannelList", ARG(netId, QType.NetworkId), - ARG(channelFilters, Type.QStringList)) + REQUEST( + "requestChannelList", ARG(netId, QType.NetworkId), + ARG(channelFilters, Type.QStringList) + ) return emptyList() } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt index 6953f88cff2c43f3c91baf44ed0d88b7f324bbb3..02c7d6de8902423d4cadf28a40a516b78b4a1863 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt @@ -45,8 +45,10 @@ interface INetwork : ISyncableObject { @Slot fun addSupport(param: String, value: String = String()) { - SYNC("addSupport(param: String, value: String = String", ARG(param, Type.QString), - ARG(value, Type.QString)) + SYNC( + "addSupport(param: String, value: String = String", ARG(param, Type.QString), + ARG(value, Type.QString) + ) } @Slot @@ -242,7 +244,8 @@ interface INetwork : ISyncableObject { companion object { private val byId = enumValues<ConnectionState>().associateBy( - ConnectionState::value) + ConnectionState::value + ) fun of(value: Int) = byId[value] ?: Disconnected } @@ -336,7 +339,8 @@ interface INetwork : ISyncableObject { companion object { private val byId = enumValues<ProxyType>().associateBy( - ProxyType::value) + ProxyType::value + ) fun of(value: Int) = byId[value] ?: DefaultProxy } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IRpcHandler.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IRpcHandler.kt index 59538665759585f4b4f482c950931223c53d9286..4d2949eefb2fcf8e509af58cdcfe0f4116193026 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IRpcHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IRpcHandler.kt @@ -7,9 +7,7 @@ import de.kuschku.libquassel.protocol.Message import de.kuschku.libquassel.protocol.NetworkId import de.kuschku.libquassel.protocol.QVariantMap import de.kuschku.libquassel.quassel.BufferInfo -import de.kuschku.libquassel.session.ISession import de.kuschku.libquassel.session.Session -import de.kuschku.libquassel.session.SignalProxy import java.nio.ByteBuffer @Syncable(name = "RpcHandler") diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/invokers/Invokers.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/invokers/Invokers.kt index 203884d8e37aa8f6166a048b8ac3c4667ec0fca7..f9aad6605da866be1f42ca374e39a7529d638783 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/invokers/Invokers.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/invokers/Invokers.kt @@ -44,8 +44,10 @@ object Invokers { private fun <T> getInvoker(type: Class<T>): Invoker<T>? { val syncable: Syncable? = type.getAnnotation(Syncable::class.java) if (syncable == null) { - log(WARN, "Invokers", - "Invoker not annotated: ${type.canonicalName}") + log( + WARN, "Invokers", + "Invoker not annotated: ${type.canonicalName}" + ) return null } @@ -54,8 +56,10 @@ object Invokers { val klass = Class.forName("$packageName.$className") val invoker = klass.getDeclaredField("INSTANCE").get(null) if (invoker !is Invoker<*>) { - log(WARN, "Invokers", - "Invoker not of proper type: ${type.canonicalName} != ${invoker.javaClass.canonicalName}") + log( + WARN, "Invokers", + "Invoker not of proper type: ${type.canonicalName} != ${invoker.javaClass.canonicalName}" + ) return null } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt index f5776b8c9e241f6dd517ebe892c14994947340f3..2c17144a380622f2465b893ebcc9b185b0859607 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt @@ -44,7 +44,8 @@ class CoreConnection( private val chainedBuffer = ChainedByteBuffer(direct = true) val state: BehaviorSubject<ConnectionState> = BehaviorSubject.createDefault( - ConnectionState.DISCONNECTED) + ConnectionState.DISCONNECTED + ) private var channel: WrappedChannel? = null @@ -66,9 +67,11 @@ class CoreConnection( private fun sendHandshake() { setState(ConnectionState.HANDSHAKE) - IntSerializer.serialize(chainedBuffer, - 0x42b33f00 or session.clientData.protocolFeatures.toInt(), - session.coreFeatures) + IntSerializer.serialize( + chainedBuffer, + 0x42b33f00 or session.clientData.protocolFeatures.toInt(), + session.coreFeatures + ) for (supportedProtocol in session.clientData.supportedProtocols) { IntSerializer.serialize(chainedBuffer, supportedProtocol.toInt(), session.coreFeatures) } @@ -99,12 +102,14 @@ class CoreConnection( when (protocol.version.toInt()) { 0x02 -> { // Send client clientData to core - dispatch(HandshakeMessage.ClientInit( - clientVersion = session.clientData.identifier, - buildDate = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss") - .format(session.clientData.buildDate.atOffset(ZoneOffset.UTC)), - clientFeatures = Quassel_Features.of(*Quassel_Feature.values()) - )) + dispatch( + HandshakeMessage.ClientInit( + clientVersion = session.clientData.identifier, + buildDate = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss") + .format(session.clientData.buildDate.atOffset(ZoneOffset.UTC)), + clientFeatures = Quassel_Features.of(*Quassel_Feature.values()) + ) + ) } else -> { throw IllegalArgumentException("Invalid Protocol Version: $protocol") @@ -127,8 +132,10 @@ class CoreConnection( try { val data = HandshakeMessage.serialize(message) handlerService.write( - MessageRunnable(data, HandshakeVariantMapSerializer, chainedBuffer, channel, - session.coreFeatures) + MessageRunnable( + data, HandshakeVariantMapSerializer, chainedBuffer, channel, + session.coreFeatures + ) ) } catch (e: Throwable) { log(WARN, TAG, "Error encountered while serializing handshake message", e) diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt b/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt index 0a1bd77151a0fef351f7c735c94db1f392eb45e1..c1ad35b6827792e23063cb0d41107e5e4c3dd469 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt @@ -23,10 +23,13 @@ class ObjectStorage(private val proxy: SignalProxy) { objectTree.put("${obj.className}:$new", obj) objectTree.remove("${obj.className}:$old") proxy.dispatch( - SignalProxyMessage.RpcCall("__objectRenamed__", listOf( + SignalProxyMessage.RpcCall( + "__objectRenamed__", listOf( QVariant_(obj.className, Type.QString), QVariant_(new, Type.QString), - QVariant_(old, Type.QString)) - )) + QVariant_(old, Type.QString) + ) + ) + ) } fun get(className: QType, objectName: String) = get(className.typeName, objectName) diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt b/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt index 07a5916867f0eef3a819a00f9d288dd9da84dd01..89165784d64da725d5f018b2709e8889f2e3abd3 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt @@ -57,7 +57,7 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { override fun handle(f: SignalProxyMessage.InitData): Boolean { log(DEBUG, "ProtocolHandler", "< $f") val obj: ISyncableObject = objectStorage.get(f.className, f.objectName) - ?: throw ObjectNotFoundException(f.className, f.objectName) + ?: throw ObjectNotFoundException(f.className, f.objectName) obj.fromVariantMap(f.initData) obj.initialized = true @@ -103,7 +103,7 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { log(DEBUG, "ProtocolHandler", f.toString()) val invoker = Invokers.get(f.className) - ?: throw IllegalArgumentException("Invalid classname: ${f.className}") + ?: throw IllegalArgumentException("Invalid classname: ${f.className}") currentCallClass = f.className currentCallInstance = f.objectName currentCallSlot = f.slotName diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt index 1faddcd315a5fd675535496e436cfd50d939b546..6039586c855ffbc0d1850057026d96b882ac4035 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt @@ -50,10 +50,12 @@ class Session( override fun handle(f: HandshakeMessage.ClientInitAck): Boolean { coreFeatures = f.coreFeatures ?: Quassel_Feature.NONE - dispatch(HandshakeMessage.ClientLogin( - user = userData.first, - password = userData.second - )) + dispatch( + HandshakeMessage.ClientLogin( + user = userData.first, + password = userData.second + ) + ) return true } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt index 4de216bde6f6406d2530a6b9b584f851700e04fb..98f166bbd6793368ecf98d68e425f3e749556f05 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt @@ -71,7 +71,16 @@ class SessionManager(offlineSession: ISession, val backlogStorage: BacklogStorag lastHandlerService = handlerService lastUserData = userData lastShouldReconnect = shouldReconnect - inProgressSession.onNext(Session(clientData, trustManager, address, handlerService(), backlogStorage, userData)) + inProgressSession.onNext( + Session( + clientData, + trustManager, + address, + handlerService(), + backlogStorage, + userData + ) + ) } private var lastClientData: ClientData? = null diff --git a/lib/src/main/java/de/kuschku/libquassel/util/Flag.kt b/lib/src/main/java/de/kuschku/libquassel/util/Flag.kt index b0863fb295101362c648366011dfbfac30e24c7b..aff3f65f342612701237557f4331021b9718e78c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/Flag.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/Flag.kt @@ -58,7 +58,8 @@ infix fun <T> Flags<T>.hasFlag(which: T): Boolean where T : Enum<T>, T : Flag<T> } infix fun <T> Flags<T>.or(other: Flag<T>): Flags<T> where T : kotlin.Enum<T>, T : Flag<T> = Flags( - value or other.bit) + value or other.bit +) operator infix fun <T> Flags<T>.plus( other: Flags<T>): Flags<T> where T : Enum<T>, T : Flag<T> = Flags(value or other.value) @@ -67,4 +68,5 @@ operator infix fun <T> Flags<T>.plus( other: Flag<T>): Flags<T> where T : Enum<T>, T : Flag<T> = Flags(value or other.bit) infix fun <T> Flags<T>.unset(which: T): Flags<T> where T : Enum<T>, T : Flag<T> = Flags( - value xor which.bit) + value xor which.bit +) diff --git a/lib/src/main/java/de/kuschku/libquassel/util/LongFlag.kt b/lib/src/main/java/de/kuschku/libquassel/util/LongFlag.kt index 48ca720b8bdfd3d23aec556e8dd199057e7e7dde..6617ff22597b743e00c7dafdea553a146e13719b 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/LongFlag.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/LongFlag.kt @@ -59,16 +59,20 @@ infix fun <T> LongFlags<T>.hasFlag(which: T): Boolean where T : Enum<T>, T : Lon infix fun <T> LongFlags<T>.or( other: LongFlag<T>): LongFlags<T> where T : kotlin.Enum<T>, T : LongFlag<T> = LongFlags( - value or other.bit) + value or other.bit +) operator infix fun <T> LongFlags<T>.plus( other: LongFlags<T>): LongFlags<T> where T : Enum<T>, T : LongFlag<T> = LongFlags( - value or other.value) + value or other.value +) operator infix fun <T> LongFlags<T>.plus( other: LongFlag<T>): LongFlags<T> where T : Enum<T>, T : LongFlag<T> = LongFlags( - value or other.bit) + value or other.bit +) infix fun <T> LongFlags<T>.unset( which: T): LongFlags<T> where T : Enum<T>, T : LongFlag<T> = LongFlags( - value xor which.bit) + value xor which.bit +) diff --git a/lib/src/main/java/de/kuschku/libquassel/util/ShortFlag.kt b/lib/src/main/java/de/kuschku/libquassel/util/ShortFlag.kt index 5107f60ea2d1278ddd2d9bc5829f88330d77addd..ec88fd70e9c99eec1bc0417f35091a815378a7e9 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/ShortFlag.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/ShortFlag.kt @@ -63,16 +63,20 @@ infix fun <T> ShortFlags<T>.hasFlag(which: T): Boolean where T : Enum<T>, T : Sh infix fun <T> ShortFlags<T>.or( other: ShortFlag<T>): ShortFlags<T> where T : kotlin.Enum<T>, T : ShortFlag<T> = ShortFlags( - value or other.bit) + value or other.bit +) operator infix fun <T> ShortFlags<T>.plus( other: ShortFlags<T>): ShortFlags<T> where T : Enum<T>, T : ShortFlag<T> = ShortFlags( - value or other.value) + value or other.value +) operator infix fun <T> ShortFlags<T>.plus( other: ShortFlag<T>): ShortFlags<T> where T : Enum<T>, T : ShortFlag<T> = ShortFlags( - value or other.bit) + value or other.bit +) infix fun <T> ShortFlags<T>.unset( which: T): ShortFlags<T> where T : Enum<T>, T : ShortFlag<T> = ShortFlags( - value xor which.bit) + value xor which.bit +) diff --git a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/reference/JavaLoggingHandler.kt b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/reference/JavaLoggingHandler.kt index 668d869593894048be0fbb43c887c8dd268a2655..0a83d806b8166eb2950c929c0c0bac4963cf4ac8 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/reference/JavaLoggingHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/reference/JavaLoggingHandler.kt @@ -7,12 +7,14 @@ import java.util.logging.Logger object JavaLoggingHandler : LoggingHandler() { override fun isLoggable(logLevel: LogLevel, tag: String): Boolean { return Logger.getLogger(tag).isLoggable( - priority(logLevel)) + priority(logLevel) + ) } override fun log(logLevel: LogLevel, tag: String, message: String?, throwable: Throwable?) { val priority = priority( - logLevel) + logLevel + ) val logger = Logger.getLogger(tag) if (message != null) logger.log(priority, message) diff --git a/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt index 0acd30bec89225b35892adfff98b5087161782b6..279bb3f85ae752a35a5b476d8d585a132a9139ef 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt @@ -5,10 +5,11 @@ import de.kuschku.libquassel.util.compatibility.log fun ByteArray.hexDump() { for (i in 0 until this.size step 33) { - log(WARN, "HexDump", - (0 until 33).map { it + i }.filter { it < this.size }.joinToString(" ") { - String.format("%02x", this[it]) - } + log( + WARN, "HexDump", + (0 until 33).map { it + i }.filter { it < this.size }.joinToString(" ") { + String.format("%02x", this[it]) + } ) } } diff --git a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt index 1170202b27c27cb0b2dd7b15878eaba14eb26401..e6465fa893d19ee4224220b1880974ec400fbc04 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt @@ -42,15 +42,18 @@ class WrappedChannel( companion object { fun ofSocket(s: Socket): WrappedChannel { - return WrappedChannel(s, s.getInputStream(), - s.getOutputStream()) + return WrappedChannel( + s, s.getInputStream(), + s.getOutputStream() + ) } } fun withCompression(): WrappedChannel { val deflaterOutputStream = CompatibilityUtils.createDeflaterOutputStream(rawOutStream) - return WrappedChannel(socket, InflaterInputStream(rawInStream), deflaterOutputStream, - deflaterOutputStream::flush + return WrappedChannel( + socket, InflaterInputStream(rawInStream), deflaterOutputStream, + deflaterOutputStream::flush ) } diff --git a/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt index abe501dcca217616d16e43e2eb56ab0bede097d7..1bdc88b9221e2feb614838bfcf4542076a05cd05 100644 --- a/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt @@ -30,13 +30,14 @@ class ConnectionUnitTest { } private fun runTest(host: String, port: Int, user: String, pass: String) { - val session = Session(ClientData( - identifier = "libquassel test", - buildDate = Instant.EPOCH, - clientFeatures = Quassel_Feature.of(*QuasselFeature.validValues), - protocolFeatures = Protocol_Feature.of(ProtocolFeature.TLS, ProtocolFeature.Compression), - supportedProtocols = listOf(Protocol.Datastream) - ), object : X509TrustManager { + val session = Session( + ClientData( + identifier = "libquassel test", + buildDate = Instant.EPOCH, + clientFeatures = Quassel_Feature.of(*QuasselFeature.validValues), + protocolFeatures = Protocol_Feature.of(ProtocolFeature.TLS, ProtocolFeature.Compression), + supportedProtocols = listOf(Protocol.Datastream) + ), object : X509TrustManager { override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) { } @@ -50,7 +51,8 @@ class ConnectionUnitTest { override fun clearMessages(bufferId: BufferId, idRange: IntRange) = Unit override fun clearMessages(bufferId: BufferId) = Unit override fun clearMessages() = Unit - }, user to pass) + }, user to pass + ) session.join() } } diff --git a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt index 40ec0c0478c8b8fff98fb03ba5395860b24a6f71..d097fa660e970959d76c03a1f4a1172beaa74830 100644 --- a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt @@ -48,11 +48,15 @@ class SerializerUnitTest { assertEquals(now, roundTrip(DateTimeSerializer, now)) val value1 = Instant.EPOCH.atOffset(ZoneOffset.ofTotalSeconds(1234)) - assertEquals(value1.atZoneSimilarLocal(ZoneOffset.UTC).toInstant(), - roundTrip(DateTimeSerializer, value1)) + assertEquals( + value1.atZoneSimilarLocal(ZoneOffset.UTC).toInstant(), + roundTrip(DateTimeSerializer, value1) + ) val value2 = Instant.now().atOffset(ZoneOffset.ofTotalSeconds(1234)) - assertEquals(value2.atZoneSimilarLocal(ZoneOffset.UTC).toInstant(), - roundTrip(DateTimeSerializer, value2)) + assertEquals( + value2.atZoneSimilarLocal(ZoneOffset.UTC).toInstant(), + roundTrip(DateTimeSerializer, value2) + ) val value3 = LocalDateTime.of(1970, 1, 1, 0, 0) .atZone(ZoneOffset.systemDefault()).toInstant() @@ -97,7 +101,8 @@ class SerializerUnitTest { fun <T> roundTrip(serializer: Serializer<T>, value: T, features: Quassel_Features = Quassel_Feature.NONE): T { val chainedBuffer = ChainedByteBuffer( - direct = false) + direct = false + ) serializer.serialize(chainedBuffer, value, features) val buffer = chainedBuffer.toBuffer() return serializer.deserialize(buffer, features) diff --git a/malheur/build.gradle.kts b/malheur/build.gradle.kts index 81022a43859114ff9e0881304404944d8fd1a309..95578183e06c7445e57ebdb4ff33c74103e1f3e7 100644 --- a/malheur/build.gradle.kts +++ b/malheur/build.gradle.kts @@ -19,5 +19,5 @@ android { dependencies { implementation(kotlin("stdlib", "1.2.0")) - implementation("com.google.code.gson", "gson", "2.2.4") + implementation("com.google.code.gson", "gson", "2.8.0") } diff --git a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt index a371e6648fc67789f0ee9a1d8cabc4faecd0d699..3e67a36a3f2e5015f62d8aeef73e5e8bf066b9f9 100644 --- a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt +++ b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt @@ -24,16 +24,20 @@ object CrashHandler { val stackTraces = Thread.getAllStackTraces() Thread { try { - val json = gson.toJson(reportCollector.collect(CrashContext( - application = application, - config = config, - crashingThread = activeThread, - throwable = throwable, - startTime = startTime, - crashTime = crashTime, - buildConfig = buildConfig, - stackTraces = stackTraces - ), config)) + val json = gson.toJson( + reportCollector.collect( + CrashContext( + application = application, + config = config, + crashingThread = activeThread, + throwable = throwable, + startTime = startTime, + crashTime = crashTime, + buildConfig = buildConfig, + stackTraces = stackTraces + ), config + ) + ) // FIXME STOPSHIP Implement crash handling } catch (e: Throwable) { e.printStackTrace() diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt index c00c076102a930ba8be2e5798461cdb96cc23945..eda35c684020b91ce9a65653ab7587f7e10da2c6 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt @@ -15,7 +15,8 @@ import java.lang.reflect.Modifier class DisplayCollector(application: Application) : Collector<DisplayInfo, Boolean> { private val windowManager = application.getSystemService( - Context.WINDOW_SERVICE) as WindowManager + Context.WINDOW_SERVICE + ) as WindowManager @Suppress("DEPRECATION") override fun collect(context: CrashContext, config: Boolean): DisplayInfo? { diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt index 5cb6e7d952f1cbcf4ec3526a48664f74893632ea..3adcb27f5167f6c2dc3d8deaf1c53aeca58cdb44 100644 --- a/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt +++ b/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt @@ -16,7 +16,8 @@ class EnvCollector(application: Application) : Collector<EnvInfo, EnvConfig> { override fun collect(context: CrashContext, config: EnvConfig) = EnvInfo( paths = collectIf(config.paths) { reflectionCollectGetters( - Environment::class.java)?.map { (key, value) -> + Environment::class.java + )?.map { (key, value) -> key to if (value is File) { value.canonicalPath } else {