5 |
6 |
8 |
42 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/assets/font/OPTICubaLibreTwo.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/assets/font/OPTICubaLibreTwo.otf
--------------------------------------------------------------------------------
/Kuroba/app/src/main/assets/font/Talleyrand.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/assets/font/Talleyrand.ttf
--------------------------------------------------------------------------------
/Kuroba/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/controller/ControllerTransition.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.controller;
18 |
19 | public abstract class ControllerTransition {
20 | private Callback callback;
21 |
22 | public Controller from;
23 | public Controller to;
24 |
25 | public abstract void perform();
26 |
27 | public void onCompleted() {
28 | if (callback != null) {
29 | callback.onControllerTransitionCompleted(this);
30 | }
31 | }
32 |
33 | public void setCallback(Callback callback) {
34 | this.callback = callback;
35 | }
36 |
37 | public interface Callback {
38 | void onControllerTransitionCompleted(ControllerTransition transition);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/base/BasePresenter.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.base
2 |
3 | import androidx.annotation.CallSuper
4 |
5 | abstract class BasePresenter {
6 | private var view: V? = null
7 |
8 | @CallSuper
9 | open fun onCreate(view: V) {
10 | this.view = view
11 | }
12 |
13 | @CallSuper
14 | open fun onDestroy() {
15 | this.view = null
16 | }
17 |
18 | fun withView(func: (V) -> Unit) {
19 | view?.let { func(it) }
20 | }
21 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/base/MResult.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.base
2 |
3 | sealed class MResult {
4 | data class Value(val value: V) : MResult()
5 | data class Error(val error: Throwable) : MResult()
6 |
7 | companion object {
8 | fun value(value: V): MResult {
9 | return Value(value)
10 | }
11 |
12 | fun error(error: Throwable): MResult {
13 | return Error(error)
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/MediaSourceCallback.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache
2 |
3 | import com.google.android.exoplayer2.source.MediaSource
4 |
5 | interface MediaSourceCallback {
6 | fun onMediaSourceReady(source: MediaSource?)
7 | fun onError(error: Throwable)
8 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/ChunkDownloadEvent.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import com.github.k1rakishou.fsaf.file.RawFile
4 |
5 | internal sealed class ChunkDownloadEvent {
6 | class Success(val output: RawFile, val requestTime: Long) : ChunkDownloadEvent()
7 | class ChunkSuccess(val chunkIndex: Int, val chunkCacheFile: RawFile, val chunk: Chunk) : ChunkDownloadEvent()
8 | class ChunkError(val error: Throwable) : ChunkDownloadEvent()
9 | class Progress(val chunkIndex: Int, val downloaded: Long, val chunkSize: Long) : ChunkDownloadEvent()
10 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/ChunkResponse.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import okhttp3.Response
4 |
5 | internal data class ChunkResponse(
6 | val chunk: Chunk,
7 | val response: Response
8 | )
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/Chunker.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 |
4 | fun chunkLong(value: Long, chunksCount: Int, minChunkSize: Long): List {
5 | require(chunksCount > 0) { "ChunksCount ($chunksCount) must be greater than zero!" }
6 | require(value >= chunksCount) { "Value ($value) must be greater or equal to chunksCount ($chunksCount)" }
7 |
8 | if (value < minChunkSize) {
9 | return listOf(Chunk(0, value))
10 | }
11 |
12 | val chunks = mutableListOf()
13 | val chunkSize = value / chunksCount
14 | var current = 0L
15 |
16 | for (i in 0 until chunksCount) {
17 | chunks += Chunk(current, (current + chunkSize).coerceAtMost(value))
18 | current += chunkSize
19 | }
20 |
21 | if (current < value) {
22 | val lastChunk = chunks.removeAt(chunks.lastIndex)
23 | chunks += Chunk(lastChunk.start, value)
24 | }
25 |
26 | return chunks
27 | }
28 |
29 | /**
30 | * [realEnd] is only being used in tests.
31 | * */
32 | data class Chunk(val start: Long, val realEnd: Long) {
33 | // Must be 1 less than actual _end
34 | val end: Long
35 | get() = realEnd - 1
36 |
37 | fun isWholeFile(): Boolean {
38 | return start == 0L && realEnd == Long.MAX_VALUE
39 | }
40 |
41 | fun chunkSize(): Long = realEnd - start
42 |
43 | override fun toString(): String {
44 | return "Chunk(start=$start, end=$end)"
45 | }
46 |
47 | companion object {
48 | fun wholeFile(): Chunk = Chunk(0, Long.MAX_VALUE)
49 | }
50 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/DownloadState.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | sealed class DownloadState {
4 | object Running : DownloadState()
5 | /**
6 | * Stopped is kinda the same as Canceled, the only difference is that we don't remove the cache
7 | * file right away because we use that cache file ti fill up the WebmStreamingDataSource
8 | * */
9 | object Stopped : DownloadState()
10 |
11 | /**
12 | * Cancels the download and deletes the file
13 | * */
14 | object Canceled : DownloadState()
15 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/DownloaderUtils.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import okhttp3.internal.http2.StreamResetException
4 | import java.io.IOException
5 |
6 | internal object DownloaderUtils {
7 |
8 | fun isCancellationError(error: Throwable): Boolean {
9 | if (error !is IOException) {
10 | return false
11 | }
12 |
13 | if (error is FileCacheException.CancellationException
14 | || error is StreamResetException) {
15 | return true
16 | }
17 |
18 | // Thrown by OkHttp when cancelling a call
19 | if (error.message?.contains("Canceled") == true) {
20 | return true
21 | }
22 |
23 | return false
24 | }
25 |
26 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/FileDownloadRequest.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import com.github.k1rakishou.fsaf.file.RawFile
4 | import java.io.File
5 | import java.util.concurrent.atomic.AtomicInteger
6 | import java.util.concurrent.atomic.AtomicLong
7 |
8 | internal open class FileDownloadRequest(
9 | val url: String,
10 | val output: RawFile,
11 | // A file will be split into [chunksCount] chunks which will be downloaded in parallel.
12 | // Must be 1 or greater than 1.
13 | val chunksCount: AtomicInteger,
14 | // How many bytes were downloaded across all chunks
15 | val downloaded: AtomicLong,
16 | // How many bytes a file we download takes in total
17 | val total: AtomicLong,
18 | // A handle to cancel the current download
19 | val cancelableDownload: CancelableDownload,
20 | val extraInfo: DownloadRequestExtraInfo,
21 | // Chunks to delete from the disk upon download success or error
22 | val chunks: MutableSet = mutableSetOf()
23 | ) {
24 |
25 | init {
26 | check(chunksCount.get() >= 1) {
27 | "chunksCount is zero or less than zero! chunksCount = $chunksCount"
28 | }
29 | }
30 |
31 | override fun toString(): String {
32 | return "[FileDownloadRequest: " +
33 | "url = ${url}, " +
34 | "outputFileName = ${File(output.getFullPath()).name}]"
35 | }
36 | }
37 |
38 | class DownloadRequestExtraInfo(
39 | val fileSize: Long = -1L,
40 | val fileHash: String? = null
41 | )
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/FileDownloadResult.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import com.github.k1rakishou.fsaf.file.RawFile
4 |
5 | internal sealed class FileDownloadResult {
6 | class Start(val chunksCount: Int) : FileDownloadResult()
7 | class Success(val file: RawFile, val requestTime: Long) : FileDownloadResult()
8 | class Progress(val chunkIndex: Int, val downloaded: Long, val chunkSize: Long) : FileDownloadResult()
9 | object Canceled : FileDownloadResult()
10 | object Stopped : FileDownloadResult()
11 | class KnownException(val fileCacheException: FileCacheException) : FileDownloadResult()
12 | class UnknownException(val error: Throwable) : FileDownloadResult()
13 |
14 | fun isErrorOfAnyKind(): Boolean {
15 | return this !is Start && this !is Success && this !is Progress
16 | }
17 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/FileDownloader.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import com.github.adamantcheese.chan.core.cache.CacheHandler
4 | import com.github.adamantcheese.chan.utils.BackgroundUtils
5 | import io.reactivex.Flowable
6 |
7 | internal abstract class FileDownloader(
8 | protected val activeDownloads: ActiveDownloads,
9 | protected val cacheHandler: CacheHandler
10 | ) {
11 | abstract fun download(
12 | partialContentCheckResult: PartialContentCheckResult,
13 | url: String,
14 | chunked: Boolean
15 | ): Flowable
16 |
17 | protected fun isRequestStoppedOrCanceled(url: String): Boolean {
18 | BackgroundUtils.ensureBackgroundThread()
19 |
20 | val request = activeDownloads.get(url)
21 | ?: return true
22 |
23 | return !request.cancelableDownload.isRunning()
24 | }
25 |
26 | companion object {
27 | internal const val BUFFER_SIZE: Long = 8192L
28 | internal const val MAX_RETRIES = 5L
29 | }
30 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/Logging.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | import com.github.adamantcheese.chan.utils.Logger
4 |
5 | internal fun log(tag: String, message: String) {
6 | Logger.d(tag, String.format("[%s]: %s", Thread.currentThread().name, message))
7 | }
8 |
9 | internal fun logError(tag: String, message: String, error: Throwable? = null) {
10 | if (error == null) {
11 | Logger.e(tag, String.format("[%s]: %s", Thread.currentThread().name, message))
12 | } else {
13 | Logger.e(tag, String.format("[%s]: %s", Thread.currentThread().name, message), error)
14 | }
15 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/cache/downloader/PartialContentCheckResult.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.cache.downloader
2 |
3 | internal data class PartialContentCheckResult(
4 | val supportsPartialContentDownload: Boolean,
5 | val notFoundOnServer: Boolean = false,
6 | val length: Long = -1L
7 | ) {
8 |
9 | fun couldDetermineFileSize(): Boolean = length >= 0
10 |
11 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/kt_extensions/Extensions.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.kt_extensions
2 |
3 | /**
4 | * Forces the kotlin compiler to require handling of all branches in the "when" operator
5 | * */
6 | val T.exhaustive: T
7 | get() = this
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/mapper/BoardMapper.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.mapper;
2 |
3 | import com.github.adamantcheese.chan.core.model.orm.Board;
4 | import com.github.adamantcheese.chan.core.model.save.SerializableBoard;
5 |
6 | public class BoardMapper {
7 |
8 | public static SerializableBoard toSerializableBoard(Board board) {
9 | return new SerializableBoard(
10 | board.id,
11 | board.siteId,
12 | SiteMapper.toSerializableSite(board.site),
13 | board.saved,
14 | board.order,
15 | board.name,
16 | board.code
17 | );
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/mapper/SiteMapper.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.mapper;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.SerializableSite;
4 | import com.github.adamantcheese.chan.core.site.Site;
5 |
6 | public class SiteMapper {
7 |
8 | public static SerializableSite toSerializableSite(Site site) {
9 | return new SerializableSite(site.id());
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/mapper/ThreadMapper.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.mapper;
2 |
3 | import androidx.annotation.Nullable;
4 |
5 | import com.github.adamantcheese.chan.core.model.ChanThread;
6 | import com.github.adamantcheese.chan.core.model.Post;
7 | import com.github.adamantcheese.chan.core.model.orm.Loadable;
8 | import com.github.adamantcheese.chan.core.model.save.SerializableThread;
9 | import com.github.adamantcheese.chan.utils.Logger;
10 |
11 | import java.util.List;
12 |
13 | public class ThreadMapper {
14 | private static final String TAG = "ThreadMapper";
15 |
16 | public static SerializableThread toSerializableThread(List posts) {
17 | return new SerializableThread(PostMapper.toSerializablePostList(posts));
18 | }
19 |
20 | @Nullable
21 | public static ChanThread fromSerializedThread(Loadable loadable, SerializableThread serializableThread) {
22 | List posts = PostMapper.fromSerializedPostList(loadable, serializableThread.getPostList());
23 |
24 | if (posts.isEmpty()) {
25 | Logger.w(TAG, "PostMapper.fromSerializedPostList returned empty list");
26 | return null;
27 | }
28 |
29 | ChanThread chanThread = new ChanThread(loadable, posts);
30 |
31 | chanThread.setArchived(true);
32 |
33 | return chanThread;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/PostHttpIcon.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.model;
18 |
19 | import okhttp3.HttpUrl;
20 |
21 | public class PostHttpIcon {
22 | public final HttpUrl url;
23 | public final String name;
24 |
25 | public PostHttpIcon(HttpUrl url, String name) {
26 | this.url = url;
27 | this.name = name;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/json/site/SiteConfig.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.model.json.site;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | public class SiteConfig {
22 | @SerializedName("external")
23 | public boolean external;
24 |
25 | @SerializedName("internal_site_id")
26 | public int classId;
27 | }
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/orm/History.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.model.orm;
18 |
19 | import com.j256.ormlite.field.DatabaseField;
20 | import com.j256.ormlite.table.DatabaseTable;
21 |
22 | @DatabaseTable(tableName = "history")
23 | public class History {
24 | @DatabaseField(generatedId = true)
25 | public int id;
26 |
27 | @DatabaseField(canBeNull = false, foreign = true)
28 | public Loadable loadable;
29 |
30 | @DatabaseField
31 | public String thumbnailUrl;
32 |
33 | @DatabaseField
34 | public long date;
35 | }
36 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/SerializableSite.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save;
2 |
3 | import androidx.annotation.Nullable;
4 |
5 | import com.google.gson.annotations.SerializedName;
6 |
7 | public class SerializableSite {
8 | @SerializedName("site_id")
9 | private int siteId;
10 |
11 | public SerializableSite(int siteId) {
12 | this.siteId = siteId;
13 | }
14 |
15 | @Override
16 | public int hashCode() {
17 | return 31 * siteId;
18 | }
19 |
20 | @Override
21 | public boolean equals(@Nullable Object other) {
22 | if (other == null) {
23 | return false;
24 | }
25 |
26 | if (other == this) {
27 | return true;
28 | }
29 |
30 | if (this.getClass() != other.getClass()) {
31 | return false;
32 | }
33 |
34 | SerializableSite otherSite = (SerializableSite) other;
35 | return this.siteId == otherSite.siteId;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/SerializableAbsoluteSizeSpan.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | public class SerializableAbsoluteSizeSpan {
6 | @SerializedName("size")
7 | private int size;
8 |
9 | public SerializableAbsoluteSizeSpan(int size) {
10 | this.size = size;
11 | }
12 |
13 | public int getSize() {
14 | return size;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/SerializableBackgroundColorSpan.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | public class SerializableBackgroundColorSpan {
6 | @SerializedName("background_color")
7 | private int backgroundColor;
8 |
9 | public SerializableBackgroundColorSpan(int backgroundColor) {
10 | this.backgroundColor = backgroundColor;
11 | }
12 |
13 | public int getBackgroundColor() {
14 | return backgroundColor;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/SerializableForegroundColorSpan.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | public class SerializableForegroundColorSpan {
6 | @SerializedName("foreground_color")
7 | private int foregroundColor;
8 |
9 | public SerializableForegroundColorSpan(int foregroundColor) {
10 | this.foregroundColor = foregroundColor;
11 | }
12 |
13 | public int getForegroundColor() {
14 | return foregroundColor;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/SerializableStyleSpan.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | public class SerializableStyleSpan {
6 | @SerializedName("style")
7 | private int style;
8 |
9 | public SerializableStyleSpan(int style) {
10 | this.style = style;
11 | }
12 |
13 | public int getStyle() {
14 | return style;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/SerializableTypefaceSpan.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | public class SerializableTypefaceSpan {
6 | @SerializedName("family")
7 | private String family;
8 |
9 | public SerializableTypefaceSpan(String family) {
10 | this.family = family;
11 | }
12 |
13 | public String getFamily() {
14 | return family;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkThreadLinkValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan.PostLinkableType;
4 | import com.google.gson.annotations.SerializedName;
5 |
6 | public class PostLinkThreadLinkValue
7 | extends PostLinkableValue {
8 | @SerializedName("board")
9 | private String board;
10 | @SerializedName("thread_id")
11 | private int threadId;
12 | @SerializedName("post_id")
13 | private int postId;
14 |
15 | public PostLinkThreadLinkValue(PostLinkableType type, String board, int threadId, int postId) {
16 | super(type);
17 |
18 | this.board = board;
19 | this.threadId = threadId;
20 | this.postId = postId;
21 | }
22 |
23 | public String getBoard() {
24 | return board;
25 | }
26 |
27 | public int getThreadId() {
28 | return threadId;
29 | }
30 |
31 | public int getPostId() {
32 | return postId;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkableBoardLinkValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan.PostLinkableType;
4 | import com.google.gson.annotations.SerializedName;
5 |
6 | public class PostLinkableBoardLinkValue
7 | extends PostLinkableValue {
8 | @SerializedName("board_link")
9 | private String boardLink;
10 |
11 | public PostLinkableBoardLinkValue(PostLinkableType type, String boardLink) {
12 | super(type);
13 |
14 | this.boardLink = boardLink;
15 | }
16 |
17 | public String getBoardLink() {
18 | return boardLink;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkableLinkValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan.PostLinkableType;
4 | import com.google.gson.annotations.SerializedName;
5 |
6 | public class PostLinkableLinkValue
7 | extends PostLinkableValue {
8 | @SerializedName("link")
9 | private String link;
10 |
11 | public PostLinkableLinkValue(PostLinkableType type, String link) {
12 | super(type);
13 |
14 | this.link = link;
15 | }
16 |
17 | public String getLink() {
18 | return link;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkableQuoteValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan;
4 | import com.google.gson.annotations.SerializedName;
5 |
6 | public class PostLinkableQuoteValue
7 | extends PostLinkableValue {
8 | @SerializedName("post_id")
9 | private int postId;
10 |
11 | public PostLinkableQuoteValue(SerializablePostLinkableSpan.PostLinkableType type, int postId) {
12 | super(type);
13 |
14 | this.postId = postId;
15 | }
16 |
17 | public int getPostId() {
18 | return postId;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkableSearchLinkValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan.PostLinkableType;
4 | import com.google.gson.annotations.SerializedName;
5 |
6 | public class PostLinkableSearchLinkValue
7 | extends PostLinkableValue {
8 | @SerializedName("board")
9 | private String board;
10 | @SerializedName("search")
11 | private String search;
12 |
13 | public PostLinkableSearchLinkValue(PostLinkableType type, String board, String search) {
14 | super(type);
15 |
16 | this.board = board;
17 | this.search = search;
18 | }
19 |
20 | public String getBoard() {
21 | return board;
22 | }
23 |
24 | public String getSearch() {
25 | return search;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkableSpoilerValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan;
4 |
5 | public class PostLinkableSpoilerValue
6 | extends PostLinkableValue {
7 |
8 | public PostLinkableSpoilerValue(SerializablePostLinkableSpan.PostLinkableType type) {
9 | super(type);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/model/save/spans/linkable/PostLinkableValue.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.model.save.spans.linkable;
2 |
3 | import com.github.adamantcheese.chan.core.model.save.spans.SerializablePostLinkableSpan;
4 | import com.google.gson.annotations.SerializedName;
5 |
6 | public abstract class PostLinkableValue {
7 | @SerializedName("post_linkable_value_type")
8 | protected int type;
9 |
10 | public PostLinkableValue(SerializablePostLinkableSpan.PostLinkableType type) {
11 | this.type = type.getTypeValue();
12 | }
13 |
14 | public int getType() {
15 | return type;
16 | }
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/net/BitmapLruImageCache.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.net;
18 |
19 | import android.graphics.Bitmap;
20 | import android.util.LruCache;
21 |
22 | import com.android.volley.toolbox.ImageLoader;
23 |
24 | public class BitmapLruImageCache
25 | extends LruCache
26 | implements ImageLoader.ImageCache {
27 | public BitmapLruImageCache(int maxSize) {
28 | super(maxSize);
29 | }
30 |
31 | @Override
32 | protected int sizeOf(String key, Bitmap value) {
33 | return value.getRowBytes() * value.getHeight() / 1024;
34 | }
35 |
36 | @Override
37 | public Bitmap getBitmap(String url) {
38 | return get(url);
39 | }
40 |
41 | @Override
42 | public void putBitmap(String url, Bitmap bitmap) {
43 | put(url, bitmap);
44 | }
45 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/CounterSetting.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings;
18 |
19 | public class CounterSetting
20 | extends IntegerSetting {
21 | public CounterSetting(SettingProvider settingProvider, String key) {
22 | super(settingProvider, key, 0);
23 | }
24 |
25 | public int increase() {
26 | set(get() + 1);
27 | return get();
28 | }
29 |
30 | public void reset() {
31 | set(getDefault());
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/OptionSettingItem.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings;
18 |
19 | public interface OptionSettingItem {
20 | String getKey();
21 | }
22 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/SettingProvider.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings;
18 |
19 | public interface SettingProvider {
20 | int getInt(String key, int def);
21 |
22 | void putInt(String key, int value);
23 |
24 | long getLong(String key, long def);
25 |
26 | void putLong(String key, long value);
27 |
28 | boolean getBoolean(String key, boolean def);
29 |
30 | void putBoolean(String key, boolean value);
31 |
32 | String getString(String key, String def);
33 |
34 | void putString(String key, String value);
35 |
36 | void putStringSync(String key, String value);
37 |
38 | void removeSync(String key);
39 |
40 | void putIntSync(String key, Integer value);
41 | }
42 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/base_dir/BaseDirectorySetting.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.settings.base_dir
2 |
3 | import android.net.Uri
4 | import com.github.adamantcheese.chan.core.settings.IntegerSetting
5 | import com.github.adamantcheese.chan.core.settings.StringSetting
6 | import com.github.adamantcheese.chan.core.settings.base_dir.BaseDirectorySetting.ActiveBaseDir.Companion.fromIntegerSetting
7 |
8 | abstract class BaseDirectorySetting {
9 | abstract var activeBaseDir: IntegerSetting
10 | abstract val fileApiBaseDir: StringSetting
11 | abstract val safBaseDir: StringSetting
12 |
13 | fun isSafDirActive() = fromIntegerSetting(activeBaseDir) == ActiveBaseDir.SAFBaseDir
14 | fun isFileDirActive() = fromIntegerSetting(activeBaseDir) == ActiveBaseDir.FileBaseDir
15 |
16 | abstract fun setFileBaseDir(dir: String)
17 | abstract fun setSafBaseDir(dir: Uri)
18 | abstract fun resetFileDir()
19 | abstract fun resetActiveDir()
20 |
21 | /**
22 | * DO NOT CHANGE THE ORDER!!!
23 | * It will break the settings!!!
24 | * */
25 | enum class ActiveBaseDir {
26 | FileBaseDir,
27 | SAFBaseDir;
28 |
29 | companion object {
30 | fun fromIntegerSetting(setting: IntegerSetting): ActiveBaseDir {
31 | val ordinalToFind = setting.get()
32 |
33 | return values()
34 | .firstOrNull { value -> value.ordinal == ordinalToFind }
35 | ?: throw IllegalStateException("Couldn't find ActiveBaseDir with ordinal $ordinalToFind")
36 | }
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/json/BooleanJsonSetting.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings.json;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | public class BooleanJsonSetting
22 | extends JsonSetting {
23 | @SerializedName("value")
24 | public boolean value;
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/json/IntegerJsonSetting.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings.json;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | public class IntegerJsonSetting
22 | extends JsonSetting {
23 | @SerializedName("value")
24 | public int value;
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/json/JsonSetting.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings.json;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | public class JsonSetting {
22 | @SerializedName("key")
23 | public String key;
24 | }
25 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/json/JsonSettings.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings.json;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | import java.util.HashMap;
22 | import java.util.Map;
23 |
24 | public class JsonSettings {
25 | @SerializedName("settings")
26 | Map settings = new HashMap<>();
27 | }
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/json/LongJsonSetting.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings.json;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | public class LongJsonSetting
22 | extends JsonSetting {
23 | @SerializedName("value")
24 | public long value;
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/settings/json/StringJsonSetting.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.settings.json;
18 |
19 | import com.google.gson.annotations.SerializedName;
20 |
21 | public class StringJsonSetting
22 | extends JsonSetting {
23 | @SerializedName("value")
24 | public String value;
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/ChunkDownloaderSiteProperties.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.site
2 |
3 | data class ChunkDownloaderSiteProperties(
4 | /**
5 | * Whether the site send file size info in bytes or not. Some sites may send it in KB which
6 | * breaks ChunkedFileDownloader. To figure out whether a site sends us bytes or kilobytes
7 | * (or something else) you will have to look into the thread json of a concrete site.
8 | * If a site uses Vichan or Futaba chan engine then they most likely send file size in bytes.
9 | * */
10 | val siteSendsCorrectFileSizeInBytes: Boolean,
11 |
12 | /**
13 | * Some sites (Wired-7) may send incorrect file md5 to us (sometimes) so we have no other way other
14 | * than file md5 disabling for such sites
15 | * */
16 | val canFileHashBeTrusted: Boolean
17 | )
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteRequestModifier.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site;
18 |
19 | import android.webkit.WebView;
20 |
21 | import com.github.adamantcheese.chan.core.site.http.HttpCall;
22 |
23 | import okhttp3.Request;
24 |
25 | public interface SiteRequestModifier {
26 | void modifyHttpCall(HttpCall httpCall, Request.Builder requestBuilder);
27 |
28 | void modifyWebView(WebView webView);
29 | }
30 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/SiteUrlHandler.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site;
18 |
19 | import androidx.annotation.NonNull;
20 |
21 | import com.github.adamantcheese.chan.core.model.orm.Loadable;
22 |
23 | import okhttp3.HttpUrl;
24 |
25 | public interface SiteUrlHandler {
26 | Class extends Site> getSiteClass();
27 |
28 | boolean matchesName(String value);
29 |
30 | boolean respondsTo(HttpUrl url);
31 |
32 | boolean matchesMediaHost(@NonNull HttpUrl url);
33 |
34 | String desktopUrl(Loadable loadable, int postNo);
35 |
36 | Loadable resolveLoadable(Site site, HttpUrl url);
37 | }
38 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/common/vichan/VichanCommentParser.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.common.vichan;
18 |
19 | import com.github.adamantcheese.chan.core.site.parser.CommentParser;
20 | import com.github.adamantcheese.chan.core.site.parser.StyleRule;
21 |
22 | import java.util.regex.Pattern;
23 |
24 | public class VichanCommentParser
25 | extends CommentParser {
26 | public VichanCommentParser() {
27 | addDefaultRules();
28 | setQuotePattern(Pattern.compile(".*#(\\d+)"));
29 | setFullQuotePattern(Pattern.compile("/(\\w+)/\\w+/(\\d+)\\.html#(\\d+)"));
30 | rule(StyleRule.tagRule("p")
31 | .cssClass("quote")
32 | .foregroundColor(StyleRule.ForegroundColor.INLINE_QUOTE)
33 | .linkify());
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/http/DeleteRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.http;
18 |
19 | import com.github.adamantcheese.chan.core.model.Post;
20 | import com.github.adamantcheese.chan.core.model.orm.SavedReply;
21 |
22 | public class DeleteRequest {
23 | public final Post post;
24 | public final SavedReply savedReply;
25 | public final boolean imageOnly;
26 |
27 | public DeleteRequest(Post post, SavedReply savedReply, boolean imageOnly) {
28 | this.post = post;
29 | this.savedReply = savedReply;
30 | this.imageOnly = imageOnly;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/http/DeleteResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.http;
18 |
19 | public class DeleteResponse {
20 | public boolean deleted;
21 | public String errorMessage;
22 | }
23 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/http/LoginRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.http;
18 |
19 | public class LoginRequest {
20 | public final String user;
21 | public final String pass;
22 |
23 | public LoginRequest(String user, String pass) {
24 | this.user = user;
25 | this.pass = pass;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/http/LoginResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.http;
18 |
19 | public class LoginResponse {
20 | public boolean success;
21 | public String message;
22 |
23 | // TODO(multi-site) make this a cookie abstraction
24 | public String token;
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/loader/ChanLoaderRequest.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.loader;
18 |
19 | import com.android.volley.Request;
20 |
21 | public class ChanLoaderRequest {
22 | private Request volleyRequest;
23 |
24 | public ChanLoaderRequest(Request volleyRequest) {
25 | this.volleyRequest = volleyRequest;
26 | }
27 |
28 | public Request getVolleyRequest() {
29 | return volleyRequest;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/loader/ChanLoaderResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.loader;
18 |
19 | import com.github.adamantcheese.chan.core.model.Post;
20 |
21 | import java.util.List;
22 |
23 | public class ChanLoaderResponse {
24 | // Op Post that is created new each time.
25 | // Used to later copy members like image count to the real op on the main thread.
26 | public final Post.Builder op;
27 | public final List posts;
28 |
29 | public ChanLoaderResponse(Post.Builder op, List posts) {
30 | this.op = op;
31 | this.posts = posts;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/parser/ChanReader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.parser;
18 |
19 | import android.util.JsonReader;
20 |
21 | public interface ChanReader {
22 | PostParser getParser();
23 |
24 | void loadThread(JsonReader reader, ChanReaderProcessingQueue queue)
25 | throws Exception;
26 |
27 | void loadCatalog(JsonReader reader, ChanReaderProcessingQueue queue)
28 | throws Exception;
29 |
30 | void readPostObject(JsonReader reader, ChanReaderProcessingQueue queue)
31 | throws Exception;
32 | }
33 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/parser/PostParser.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.core.site.parser;
18 |
19 | import com.github.adamantcheese.chan.core.model.Post;
20 | import com.github.adamantcheese.chan.ui.theme.Theme;
21 |
22 | public interface PostParser {
23 | Post parse(Theme theme, Post.Builder builder, Callback callback);
24 |
25 | interface Callback {
26 | boolean isSaved(int postNo);
27 |
28 | /**
29 | * Is the post id from this thread.
30 | *
31 | * @param postNo the post id
32 | * @return {@code true} if referring to a post in the thread, {@code false} otherwise.
33 | */
34 | boolean isInternal(int postNo);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/core/site/sites/dvach/DvachCommentParser.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.core.site.sites.dvach;
2 |
3 | import com.github.adamantcheese.chan.core.site.common.vichan.VichanCommentParser;
4 | import com.github.adamantcheese.chan.core.site.parser.StyleRule;
5 |
6 | public class DvachCommentParser
7 | extends VichanCommentParser {
8 | @Override
9 | public void addDefaultRules() {
10 | super.addDefaultRules();
11 | rule(StyleRule.tagRule("span").cssClass("s").strikeThrough());
12 | rule(StyleRule.tagRule("span").cssClass("u").underline());
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/report/ReportActivityView.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.report
2 |
3 | interface ReportActivityView {
4 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/captcha/AuthenticationLayoutCallback.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.captcha;
18 |
19 | public interface AuthenticationLayoutCallback {
20 | void onAuthenticationComplete(
21 | AuthenticationLayoutInterface authenticationLayout, String challenge, String response, boolean autoReply
22 | );
23 |
24 | void onFallbackToV1CaptchaView(boolean autoReply);
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/captcha/AuthenticationLayoutInterface.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.captcha;
18 |
19 | import com.github.adamantcheese.chan.core.site.Site;
20 |
21 | public interface AuthenticationLayoutInterface {
22 | void initialize(Site site, AuthenticationLayoutCallback callback, boolean autoReply);
23 |
24 | void reset();
25 |
26 | void hardReset();
27 | }
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/controller/BaseFloatingController.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.controller;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.view.Window;
6 |
7 | import com.github.adamantcheese.chan.controller.Controller;
8 |
9 | import static com.github.adamantcheese.chan.utils.AndroidUtils.inflate;
10 | import static com.github.adamantcheese.chan.utils.AnimationUtils.animateStatusBar;
11 |
12 | public abstract class BaseFloatingController
13 | extends Controller {
14 | private static final int TRANSITION_DURATION = 200;
15 | private int statusBarColorPrevious;
16 |
17 | public BaseFloatingController(Context context) {
18 | super(context);
19 | }
20 |
21 | @Override
22 | public void onCreate() {
23 | super.onCreate();
24 |
25 | view = inflate(context, getLayoutId());
26 |
27 | statusBarColorPrevious = getWindow().getStatusBarColor();
28 | if (statusBarColorPrevious != 0) {
29 | animateStatusBar(getWindow(), true, statusBarColorPrevious, TRANSITION_DURATION);
30 | }
31 | }
32 |
33 | @Override
34 | public void stopPresenting() {
35 | super.stopPresenting();
36 |
37 | if (statusBarColorPrevious != 0) {
38 | animateStatusBar(getWindow(), false, statusBarColorPrevious, TRANSITION_DURATION);
39 | }
40 | }
41 |
42 | private Window getWindow() {
43 | return ((Activity) context).getWindow();
44 | }
45 |
46 | protected abstract int getLayoutId();
47 | }
48 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/controller/settings/MediaSettingsControllerCallbacks.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.controller.settings;
2 |
3 | import androidx.annotation.Nullable;
4 |
5 | import com.github.k1rakishou.fsaf.file.AbstractFile;
6 |
7 | public interface MediaSettingsControllerCallbacks {
8 | void updateLocalThreadsLocation(String newLocation);
9 |
10 | void askUserIfTheyWantToMoveOldThreadsToTheNewDirectory(
11 | @Nullable AbstractFile oldBaseDirectory, AbstractFile newBaseDirectory
12 | );
13 |
14 | void askUserIfTheyWantToMoveOldSavedFilesToTheNewDirectory(
15 | @Nullable AbstractFile oldBaseDirectory, AbstractFile newBaseDirectory
16 | );
17 |
18 | void updateLoadingViewText(String text);
19 |
20 | void updateSaveLocationViewText(String newLocation);
21 |
22 | void showCopyFilesDialog(int filesCount, AbstractFile oldBaseDirectory, AbstractFile newBaseDirectory);
23 |
24 | void onCopyDirectoryEnded(AbstractFile oldBaseDirectory, AbstractFile newBaseDirectory, boolean result);
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/controller/settings/captcha/JsCaptchaCookiesJar.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.controller.settings.captcha
2 |
3 | import com.google.gson.annotations.SerializedName
4 |
5 | data class JsCaptchaCookiesJar(
6 | @SerializedName("hsid_cookie")
7 | val hsidCookie: String = "",
8 | @SerializedName("ssid_cookie")
9 | val ssidCookie: String = "",
10 | @SerializedName("sid_cookie")
11 | val sidCookie: String = "",
12 | @SerializedName("nid_cookie")
13 | val nidCookie: String = ""
14 | ) {
15 |
16 | fun isValid(): Boolean {
17 | return hsidCookie.isNotEmpty()
18 | && ssidCookie.isNotEmpty()
19 | && sidCookie.isNotEmpty()
20 | && nidCookie.isNotEmpty()
21 | }
22 |
23 | companion object {
24 | @JvmStatic
25 | fun empty(): JsCaptchaCookiesJar {
26 | return JsCaptchaCookiesJar(
27 | hsidCookie = "",
28 | ssidCookie = "",
29 | sidCookie = "",
30 | nidCookie = ""
31 | )
32 | }
33 | }
34 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/helper/PinHelper.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.helper;
18 |
19 | public class PinHelper {
20 | public static String getShortUnreadCount(int value) {
21 | String count;
22 | if (value < 0) {
23 | count = "?";
24 | } else if (value < 1000) {
25 | count = String.valueOf(value);
26 | } else {
27 | int k = value / 1000;
28 | if (k < 10) {
29 | count = k + "k+";
30 | } else if (k < 100) {
31 | count = k + "k";
32 | } else {
33 | count = "XD";
34 | }
35 | }
36 | return count;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/helper/RefreshUIMessage.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.helper;
18 |
19 | public class RefreshUIMessage {
20 | public String reason;
21 |
22 | public RefreshUIMessage(String reason) {
23 | this.reason = reason;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/layout/NewFolderLayout.java:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.layout;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.widget.EditText;
6 | import android.widget.LinearLayout;
7 |
8 | import com.github.adamantcheese.chan.R;
9 |
10 | import static com.github.adamantcheese.chan.utils.AndroidUtils.getApplicationLabel;
11 |
12 | public class NewFolderLayout
13 | extends LinearLayout {
14 | private EditText folderName;
15 |
16 | public NewFolderLayout(Context context) {
17 | this(context, null);
18 | }
19 |
20 | public NewFolderLayout(Context context, AttributeSet attrs) {
21 | this(context, attrs, 0);
22 | }
23 |
24 | public NewFolderLayout(Context context, AttributeSet attrs, int defStyle) {
25 | super(context, attrs, defStyle);
26 | }
27 |
28 | @Override
29 | protected void onFinishInflate() {
30 | super.onFinishInflate();
31 | folderName = findViewById(R.id.new_folder);
32 | folderName.setText(getApplicationLabel());
33 | }
34 |
35 | public String getFolderName() {
36 | return folderName.getText().toString();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/settings/SettingsGroup.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.settings;
18 |
19 | import java.util.ArrayList;
20 | import java.util.List;
21 |
22 | public class SettingsGroup {
23 | public final String name;
24 | public final List settingViews = new ArrayList<>();
25 |
26 | public SettingsGroup(int name) {
27 | this(SettingView.getString(name));
28 | }
29 |
30 | public SettingsGroup(String name) {
31 | this.name = name;
32 | }
33 |
34 | public SettingView add(SettingView settingView) {
35 | settingViews.add(settingView);
36 | return settingView;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/settings/base_directory/LocalThreadsBaseDirectory.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.settings.base_directory
2 |
3 | import android.net.Uri
4 | import com.github.adamantcheese.chan.core.settings.ChanSettings
5 | import com.github.k1rakishou.fsaf.manager.base_directory.BaseDirectory
6 | import java.io.File
7 |
8 | class LocalThreadsBaseDirectory : BaseDirectory() {
9 |
10 | override fun getDirFile(): File? {
11 | val path = ChanSettings.localThreadLocation.fileApiBaseDir.get()
12 | if (path.isEmpty()) {
13 | return null
14 | }
15 |
16 | return File(path)
17 | }
18 |
19 | override fun getDirUri(): Uri? {
20 | val path = ChanSettings.localThreadLocation.safBaseDir.get()
21 | if (path.isEmpty()) {
22 | return null
23 | }
24 |
25 | return Uri.parse(path)
26 | }
27 |
28 | override fun currentActiveBaseDirType(): ActiveBaseDirType {
29 | return when {
30 | ChanSettings.localThreadLocation.isSafDirActive() -> ActiveBaseDirType.SafBaseDir
31 | ChanSettings.localThreadLocation.isFileDirActive() -> ActiveBaseDirType.JavaFileBaseDir
32 | else -> throw IllegalStateException("LocalThreadsBaseDirectory: No active base directory!!!")
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/settings/base_directory/SavedFilesBaseDirectory.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.settings.base_directory
2 |
3 | import android.net.Uri
4 | import com.github.adamantcheese.chan.core.settings.ChanSettings
5 | import com.github.k1rakishou.fsaf.manager.base_directory.BaseDirectory
6 | import java.io.File
7 |
8 | class SavedFilesBaseDirectory : BaseDirectory() {
9 |
10 | override fun getDirFile(): File? {
11 | val path = ChanSettings.saveLocation.fileApiBaseDir.get()
12 | if (path.isEmpty()) {
13 | return null
14 | }
15 |
16 | return File(path)
17 | }
18 |
19 | override fun getDirUri(): Uri? {
20 | val path = ChanSettings.saveLocation.safBaseDir.get()
21 | if (path.isEmpty()) {
22 | return null
23 | }
24 |
25 | return Uri.parse(path)
26 | }
27 |
28 | override fun currentActiveBaseDirType(): ActiveBaseDirType {
29 | return when {
30 | ChanSettings.saveLocation.isSafDirActive() -> ActiveBaseDirType.SafBaseDir
31 | ChanSettings.saveLocation.isFileDirActive() -> ActiveBaseDirType.JavaFileBaseDir
32 | else -> throw IllegalStateException("SavedFilesBaseDirectory: No active base directory!!!")
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/text/FastTextViewMovementMethod.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.text;
18 |
19 | import android.text.Spanned;
20 | import android.view.MotionEvent;
21 |
22 | public interface FastTextViewMovementMethod {
23 | boolean onTouchEvent(FastTextView widget, Spanned buffer, MotionEvent event);
24 | }
25 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/toolbar/ToolbarMiddleMenu.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Kuroba - *chan browser https://github.com/Adamantcheese/Kuroba/
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 | package com.github.adamantcheese.chan.ui.toolbar;
18 |
19 | import android.view.View;
20 |
21 | public interface ToolbarMiddleMenu {
22 | void show(View anchor);
23 | }
24 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/view/ThumbnailImageView.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.view
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import android.widget.ImageView
6 |
7 | class ThumbnailImageView(
8 | context: Context,
9 | attrs: AttributeSet? = null,
10 | defStyleAttrs: Int = 0
11 | ) : ImageView(context, attrs, defStyleAttrs)
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/ui/widget/CancellableToast.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.ui.widget
2 |
3 | import android.widget.Toast
4 | import com.github.adamantcheese.chan.utils.AndroidUtils.getAppContext
5 | import com.github.adamantcheese.chan.utils.AndroidUtils.getString
6 | import com.github.adamantcheese.chan.utils.BackgroundUtils
7 |
8 | class CancellableToast {
9 | private var toast: Toast? = null
10 |
11 | fun showToast(message: String) {
12 | showToast(message, Toast.LENGTH_SHORT)
13 | }
14 |
15 | fun showToast(msgResId: Int) {
16 | showToast(getString(msgResId), Toast.LENGTH_SHORT)
17 | }
18 |
19 | fun showToast(msgResId: Int, duration: Int) {
20 | showToast(getString(msgResId), duration)
21 | }
22 |
23 | fun showToast(message: String, duration: Int) {
24 | BackgroundUtils.ensureMainThread()
25 |
26 | if (toast != null) {
27 | toast!!.cancel()
28 | toast = null
29 | }
30 |
31 | toast = Toast.makeText(getAppContext(), message, duration).apply { show() }
32 | }
33 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/utils/ConversionUtils.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.utils
2 |
3 | import okhttp3.internal.and
4 |
5 |
6 | object ConversionUtils {
7 |
8 | @JvmStatic
9 | fun intToByteArray(value: Int): ByteArray {
10 | return byteArrayOf(
11 | (value ushr 24).toByte(),
12 | (value ushr 16).toByte(),
13 | (value ushr 8).toByte(),
14 | value.toByte()
15 | )
16 | }
17 |
18 | @JvmStatic
19 | fun intToCharArray(value: Int): CharArray {
20 | return charArrayOf(
21 | (value ushr 24).toChar(),
22 | (value ushr 16).toChar(),
23 | (value ushr 8).toChar(),
24 | value.toChar()
25 | )
26 | }
27 |
28 | @JvmStatic
29 | fun byteArrayToInt(bytes: ByteArray): Int {
30 | return (bytes[0] and 0xFF) shl 24 or
31 | ((bytes[1] and 0xFF) shl 16) or
32 | ((bytes[2] and 0xFF) shl 8) or
33 | ((bytes[3] and 0xFF) shl 0)
34 | }
35 |
36 | @JvmStatic
37 | fun charArrayToInt(bytes: CharArray): Int {
38 | return (bytes[0].toByte() and 0xFF) shl 24 or
39 | ((bytes[1].toByte() and 0xFF) shl 16) or
40 | ((bytes[2].toByte() and 0xFF) shl 8) or
41 | ((bytes[3].toByte() and 0xFF) shl 0)
42 | }
43 |
44 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/java/com/github/adamantcheese/chan/utils/HashingUtil.kt:
--------------------------------------------------------------------------------
1 | package com.github.adamantcheese.chan.utils
2 |
3 | import okio.ByteString.Companion.encodeUtf8
4 | import okio.HashingSource
5 | import okio.blackholeSink
6 | import okio.buffer
7 | import okio.source
8 | import java.io.InputStream
9 |
10 | object HashingUtil {
11 |
12 | fun inputStreamHash(inputStream: InputStream): String {
13 | return HashingSource.md5(inputStream.source()).use { hashingSource ->
14 | return@use hashingSource.buffer().use { source ->
15 | source.readAll(blackholeSink())
16 | return@use hashingSource.hash.hex()
17 | }
18 | }
19 | }
20 |
21 | fun stringHash(inputString: String): String {
22 | return inputString.encodeUtf8().md5().hex()
23 | }
24 |
25 | }
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_action_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_action_pause.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_add_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_arrow_forward_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_arrow_forward_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_bookmark_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_bookmark_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_bookmark_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_clear_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_clear_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_create_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_create_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_done_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_done_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_expand_less_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_expand_less_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_expand_more_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_expand_more_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_file_download_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_file_download_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_help_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_help_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_history_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_history_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_image_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_overflow.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_overflow_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_overflow_black.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_play_circle_outline_white_48dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_radio_button_unchecked_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_radio_button_unchecked_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_refresh_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_refresh_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_reorder_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_reorder_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_search_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_select_all_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_select_all_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_settings_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_stat_notify_alert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_stat_notify_alert.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_subdirectory_arrow_left_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_subdirectory_arrow_left_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_task_description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_task_description.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_view_module_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_view_module_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_volume_off_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/ic_volume_up_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-hdpi/partyhat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-hdpi/partyhat.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/archived_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/archived_icon.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/closed_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/closed_icon.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/error_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/error_icon.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_action_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_action_pause.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_add_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_arrow_forward_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_arrow_forward_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_bookmark_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_bookmark_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_bookmark_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_chevron_left_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
25 |
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_clear_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_clear_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_create_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_create_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_done_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_done_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_expand_less_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_expand_less_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_expand_more_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_expand_more_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_file_download_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_file_download_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_help_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_help_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_history_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_history_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_image_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_overflow.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_overflow_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_overflow_black.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_play_circle_outline_white_48dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_radio_button_unchecked_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_radio_button_unchecked_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_refresh_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_refresh_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_reorder_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_reorder_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_search_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_select_all_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_select_all_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_settings_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_stat_notify_alert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_stat_notify_alert.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_subdirectory_arrow_left_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_subdirectory_arrow_left_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_task_description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_task_description.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_view_module_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_view_module_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_volume_off_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/ic_volume_up_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/sticky_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/sticky_icon.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/trash_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/trash_icon.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-mdpi/youtube_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-mdpi/youtube_icon.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_action_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_action_pause.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_add_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_arrow_forward_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_arrow_forward_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_bookmark_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_bookmark_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_bookmark_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_clear_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_clear_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_create_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_done_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_done_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_expand_less_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_expand_less_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_expand_more_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_expand_more_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_file_download_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_file_download_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_help_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_help_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_history_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_history_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_image_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_overflow.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_overflow_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_overflow_black.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_play_circle_outline_white_48dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_radio_button_unchecked_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_radio_button_unchecked_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_refresh_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_refresh_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_reorder_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_reorder_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_search_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_select_all_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_select_all_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_stat_notify_alert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_stat_notify_alert.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_subdirectory_arrow_left_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_subdirectory_arrow_left_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_task_description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_task_description.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_view_module_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_view_module_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_volume_off_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xhdpi/ic_volume_up_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_action_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_action_pause.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_arrow_forward_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_bookmark_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_bookmark_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_bookmark_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_done_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_done_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_expand_less_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_expand_less_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_expand_more_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_expand_more_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_file_download_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_file_download_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_folder_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
25 |
26 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_help_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_help_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_history_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_history_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_overflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_overflow.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_overflow_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_overflow_black.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_play_circle_outline_white_48dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_radio_button_unchecked_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_radio_button_unchecked_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_refresh_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_refresh_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_reorder_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_reorder_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_select_all_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_select_all_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_send_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_send_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_stat_notify_alert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_stat_notify_alert.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_subdirectory_arrow_left_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_subdirectory_arrow_left_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_task_description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_task_description.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_view_module_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_view_module_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_volume_off_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxhdpi/ic_volume_up_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_add_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_arrow_forward_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_arrow_forward_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_bookmark_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_bookmark_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_bookmark_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_create_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_done_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_done_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_expand_less_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_expand_more_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_file_download_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_file_download_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_help_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_help_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_history_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_history_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_play_circle_outline_white_48dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_radio_button_unchecked_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_radio_button_unchecked_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_refresh_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_refresh_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_reorder_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_reorder_black_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_search_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_select_all_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_select_all_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_send_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_send_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_settings_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_stat_notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_stat_notify.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_stat_notify_alert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_stat_notify_alert.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_subdirectory_arrow_left_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_subdirectory_arrow_left_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_task_description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_task_description.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_view_list_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_view_module_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_volume_off_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable-xxxhdpi/ic_volume_up_white_24dp.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/background_accent_rounded.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/background_hint_arrow.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/circle_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/ic_blue_checkmark_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/ic_download_anim0.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/ic_download_anim1.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/ic_splash_screen.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/drawable/ic_splash_screen.9.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/item_background.xml:
--------------------------------------------------------------------------------
1 |
17 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/panel_shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
11 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/setting_description_bottom.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/setting_description_bottom_dark.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/setting_description_top.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/drawable/setting_description_top_dark.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_album_download.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
28 |
29 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_archive.xml:
--------------------------------------------------------------------------------
1 |
17 |
23 |
24 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_browse_board.xml:
--------------------------------------------------------------------------------
1 |
17 |
29 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_browse_input.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_divider.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
25 |
26 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_file.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
28 |
29 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_post_last_seen.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/cell_thread_status.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/controller_album_view.xml:
--------------------------------------------------------------------------------
1 |
17 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/controller_navigation_setup.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
27 |
28 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/controller_navigation_toolbar.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
26 |
27 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/controller_site_setup.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/controller_thread_slide.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
27 |
28 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/dialog_post_delete.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/layout_archives.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/layout_controller_popup.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/layout_post_replies_container.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/layout_reply_captcha.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/layout_split_empty.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/layout_thread_error.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
23 |
30 |
31 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/setting_description.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
27 |
28 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/setting_divider.xml:
--------------------------------------------------------------------------------
1 |
17 |
22 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/setting_link.xml:
--------------------------------------------------------------------------------
1 |
17 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/setting_text.xml:
--------------------------------------------------------------------------------
1 |
17 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/settings_layout.xml:
--------------------------------------------------------------------------------
1 |
17 |
21 |
22 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/layout/toolbar_menu_item.xml:
--------------------------------------------------------------------------------
1 |
17 |
27 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 | true
19 |
20 | 100dp
21 |
22 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #898989
4 | #ff4444
5 | #33B5E5
6 | #22000000
7 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 | false
19 |
20 | 56dp
21 |
22 | 120dp
23 | 2dp
24 | 2dp
25 |
26 | 72dp
27 |
28 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #54B258
4 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Kuroba/app/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Kuroba/app/src/test/resources/test_img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/test/resources/test_img1.jpg
--------------------------------------------------------------------------------
/Kuroba/app/src/test/resources/test_img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/test/resources/test_img2.jpg
--------------------------------------------------------------------------------
/Kuroba/app/src/test/resources/test_img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/test/resources/test_img3.jpg
--------------------------------------------------------------------------------
/Kuroba/app/src/test/resources/test_img4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/app/src/test/resources/test_img4.jpg
--------------------------------------------------------------------------------
/Kuroba/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | ext.kotlin_version = '1.3.61'
4 |
5 | repositories {
6 | google()
7 | jcenter()
8 | maven { url 'https://jitpack.io' }
9 | }
10 | dependencies {
11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
12 | classpath 'com.android.tools.build:gradle:3.5.3'
13 | classpath 'de.undercouch:gradle-download-task:4.0.2'
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | google()
20 | jcenter()
21 | maven { url 'https://jitpack.io' }
22 | maven { url 'https://oss.jfrog.org/oss-snapshot-local'}
23 | }
24 | }
--------------------------------------------------------------------------------
/Kuroba/gradle.properties:
--------------------------------------------------------------------------------
1 | android.enableJetifier=true
2 | android.useAndroidX=true
3 | org.gradle.jvmargs=-Xmx2048M
4 |
--------------------------------------------------------------------------------
/Kuroba/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/Kuroba/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Kuroba/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.1-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/Kuroba/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://travis-ci.org/Adamantcheese/Kuroba)
2 |
3 | # Kuroba - imageboard browser for Android
4 | ## All releases are less dev than actual dev. Do not assume they are stable, but they're more stable than actual dev.
5 |
6 | Releases are built by Adamantcheese whenever enough changes have been made and the application is fairly stable:
7 | ### [Latest Release APK](https://github.com/Adamantcheese/Kuroba/releases/latest/download/Kuroba.apk)
8 | ### [All Release APKs](https://github.com/Adamantcheese/Kuroba/releases)
9 |
10 | DEV releases are provided by K1rakishou on his server (they are built and uploaded after every new commit):
11 | ### [Latest DEV APK](http://94.140.116.243:8080/latest_apk)
12 | ### [All DEV APKs](http://94.140.116.243:8080/)
13 |
14 |
15 | Kuroba is a fast Android app for browsing imageboards, such as 4chan and 8chan. It adds inline replying, thread watching, notifications, themes, pass support, filters and a whole lot more. It is based on Clover by Floens, but has additional features added in because Floens doesn't want to merge PRs. Credits to K1rakishou for a number of features.
16 | #### [A full feature list can be found here.](https://gist.github.com/Adamantcheese/0c15a36ab983e7829f91f1248ab28844)
17 |
18 | ## License
19 | [Kuroba is GPLv3](https://github.com/Adamantcheese/Kuroba/blob/multi-feature/COPYING.txt), [licenses of the used libraries.](https://github.com/Adamantcheese/Kuroba/blob/multi-feature/Kuroba/app/src/main/assets/html/licenses.html)
20 |
21 |
--------------------------------------------------------------------------------
/docs/ic_download_anim.ai:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/ic_download_anim.ai
--------------------------------------------------------------------------------
/docs/ic_download_anim0.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/ic_download_anim0.svg
--------------------------------------------------------------------------------
/docs/ic_download_anim1.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/ic_download_anim1.svg
--------------------------------------------------------------------------------
/docs/icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/icon_512.png
--------------------------------------------------------------------------------
/docs/internal_spoiler.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/internal_spoiler.png
--------------------------------------------------------------------------------
/docs/internal_spoiler.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/internal_spoiler.psd
--------------------------------------------------------------------------------
/docs/new_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/new_icon_512.png
--------------------------------------------------------------------------------
/docs/new_icon_512.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/new_icon_512.psd
--------------------------------------------------------------------------------
/docs/new_new_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/new_new_icon_512.png
--------------------------------------------------------------------------------
/docs/new_new_icon_512.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/K1rakishou/Kuroba/0e5ace5bb57c8f5d17ae2ec2600f03d07750ad5c/docs/new_new_icon_512.psd
--------------------------------------------------------------------------------
/docs/release.txt:
--------------------------------------------------------------------------------
1 | To release:
2 |
3 | Change the version code in the app/build.gradle file; commit and push.
4 | Build signed APK.
5 | In Github Releases, draft a new release with tag v(major).(minor).(patch) to match what you did above.
6 | Write your changelog in the description. Markdown is supported.
7 | Upload APK to github releases.
8 | Release.
9 | Delete the last release's APK, to prevent previous version support as much as posible.
--------------------------------------------------------------------------------