├── cats ├── .gitignore ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── res │ │ │ ├── values │ │ │ │ └── strings.xml │ │ │ └── raw │ │ │ │ └── cats.txt │ │ └── java │ │ │ └── com │ │ │ └── ubergeek42 │ │ │ └── cats │ │ │ ├── Printer.java │ │ │ ├── Root.java │ │ │ ├── Cat.java │ │ │ ├── CatD.java │ │ │ ├── KidKitty.java │ │ │ └── RootKitty.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── ubergeek42 │ │ └── cats │ │ └── ExampleInstrumentedTest.java ├── NOTICE.txt ├── proguard-rules.pro └── build.gradle.kts ├── metadata └── en-US │ ├── title.txt │ ├── changelogs │ ├── 10401.txt │ ├── 10301.txt │ ├── 10701.txt │ ├── 11001.txt │ ├── 10402.txt │ ├── 10400.txt │ ├── 1200.txt │ ├── 10501.txt │ ├── 10700.txt │ ├── 1000.txt │ ├── 10801.txt │ ├── 10500.txt │ ├── 11000.txt │ ├── 1100.txt │ ├── 436.txt │ ├── 1300.txt │ ├── 435.txt │ ├── 431.txt │ ├── 10900.txt │ ├── 10800.txt │ ├── 10600.txt │ └── 613.txt │ ├── short_description.txt │ ├── images │ ├── icon.png │ └── phoneScreenshots │ │ ├── screenshot-1.png │ │ ├── screenshot-2.png │ │ ├── screenshot-3.png │ │ ├── screenshot-4.png │ │ ├── screenshot-5.png │ │ └── screenshot-6.png │ └── full_description.txt ├── settings.gradle.kts ├── releases ├── android.jks ├── qr-beta.png ├── qr-main.png ├── google-play-key.p12.enc └── travis_build.sh ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── app ├── src │ ├── main │ │ ├── ic_launcher_kitty-web.png │ │ ├── ic_launcher_weechat-web.png │ │ ├── color_scheme_generator │ │ │ ├── palettes.xcf │ │ │ └── generate_test.py │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher_kitty.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher_kitty.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher_kitty.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher_kitty.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher_kitty.png │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_notification_hot.png │ │ │ │ └── ic_notification_main.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_notification_hot.png │ │ │ │ └── ic_notification_main.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_notification_hot.png │ │ │ │ └── ic_notification_main.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_notification_hot.png │ │ │ │ └── ic_notification_main.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── ic_notification_hot.png │ │ │ │ └── ic_notification_main.png │ │ │ ├── values-fr-v29 │ │ │ │ └── strings.xml │ │ │ ├── values-land │ │ │ │ └── values.xml │ │ │ ├── values-v29 │ │ │ │ └── strings.xml │ │ │ ├── values-de-v29 │ │ │ │ └── strings.xml │ │ │ ├── values-ru-v29 │ │ │ │ └── strings.xml │ │ │ ├── values-large-land │ │ │ │ └── values.xml │ │ │ ├── layout │ │ │ │ ├── squiggle.xml │ │ │ │ ├── pref_password_edit_text.xml │ │ │ │ ├── read_marker.xml │ │ │ │ ├── dialog_list.xml │ │ │ │ ├── dialog_paste_list.xml │ │ │ │ ├── preferences.xml │ │ │ │ ├── more_button.xml │ │ │ │ ├── main_screen.xml │ │ │ │ ├── certificate_dialog.xml │ │ │ │ ├── certificate_dialog_certificate.xml │ │ │ │ ├── dialog_copy_line.xml │ │ │ │ ├── dialog_copy.xml │ │ │ │ ├── preferences_full_screen_edit_text.xml │ │ │ │ ├── toolbar_bell.xml │ │ │ │ ├── about.xml │ │ │ │ └── weasel.xml │ │ │ ├── color │ │ │ │ ├── button_text_color.xml │ │ │ │ └── toolbar_icon.xml │ │ │ ├── drawable │ │ │ │ ├── bg_certificate.xml │ │ │ │ ├── bg_popup_menu.xml │ │ │ │ ├── progress_circle.xml │ │ │ │ ├── bg_rounded_square.xml │ │ │ │ ├── ic_toolbar_search_up.xml │ │ │ │ ├── bg_paste_dialog_clipboard.xml │ │ │ │ ├── ic_toolbar_search_down.xml │ │ │ │ ├── etc_squiggle.xml │ │ │ │ ├── ic_cancel.xml │ │ │ │ ├── ic_toolbar_send.xml │ │ │ │ ├── ic_fab_go_to_bottom.xml │ │ │ │ ├── bg_bufferlist_item_hot.xml │ │ │ │ ├── progress_rotating_dot.xml │ │ │ │ ├── bg_bufferlist_item_warm.xml │ │ │ │ ├── ic_toolbar_tab.xml │ │ │ │ ├── ic_toolbar_bell.xml │ │ │ │ ├── ic_toolbar_upload.xml │ │ │ │ ├── ic_toolbar_bell_cracked.xml │ │ │ │ ├── ic_toolbar_paperclip.xml │ │ │ │ ├── ic_bufferlist_arrow_down.xml │ │ │ │ ├── ic_bufferlist_arrow_up.xml │ │ │ │ ├── ic_close_activity.xml │ │ │ │ ├── ic_toolbar_magnifying_glass.xml │ │ │ │ ├── ic_toolbar_upload_cancel.xml │ │ │ │ ├── ic_big_disconnected.xml │ │ │ │ ├── ic_toolbar_users.xml │ │ │ │ ├── ic_big_connecting.xml │ │ │ │ ├── ic_big_connected.xml │ │ │ │ └── ic_copy_toolbar_select_text.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ └── ic_launcher_kitty.xml │ │ │ ├── values-v24 │ │ │ │ └── values.xml │ │ │ ├── values-night-v27 │ │ │ │ └── style.xml │ │ │ ├── raw │ │ │ │ └── cats.txt │ │ │ ├── values-v27 │ │ │ │ └── style.xml │ │ │ ├── values-night │ │ │ │ ├── style.xml │ │ │ │ └── colors.xml │ │ │ ├── menu │ │ │ │ ├── fullscreen_edit_text.xml │ │ │ │ ├── copy_dialog_fullscreen.xml │ │ │ │ └── menu_search.xml │ │ │ ├── values-v23 │ │ │ │ └── style.xml │ │ │ ├── xml │ │ │ │ ├── filepaths.xml │ │ │ │ └── shortcuts.xml │ │ │ ├── values │ │ │ │ ├── attrs.xml │ │ │ │ └── colors.xml │ │ │ ├── anim │ │ │ │ ├── fast_out_extra_slow_in.xml │ │ │ │ ├── activity_like_open_enter.xml │ │ │ │ └── activity_like_close_exit.xml │ │ │ ├── layout-large-land │ │ │ │ └── main_screen.xml │ │ │ └── drawable-night │ │ │ │ ├── ic_toolbar_bell.xml │ │ │ │ ├── ic_toolbar_bell_cracked.xml │ │ │ │ └── ic_toolbar_users.xml │ │ ├── java │ │ │ ├── com │ │ │ │ └── ubergeek42 │ │ │ │ │ └── WeechatAndroid │ │ │ │ │ ├── adapters │ │ │ │ │ └── BufferListClickListener.java │ │ │ │ │ ├── utils │ │ │ │ │ ├── ApplicationContext.kt │ │ │ │ │ ├── WeaselMeasuringViewPager.kt │ │ │ │ │ ├── ViewPagerFix.kt │ │ │ │ │ ├── DefaultHashMap.java │ │ │ │ │ ├── Debug.kt │ │ │ │ │ ├── ActionEditText.java │ │ │ │ │ ├── TinyMap.java │ │ │ │ │ └── Toasts.kt │ │ │ │ │ ├── relay │ │ │ │ │ ├── BufferListEye.kt │ │ │ │ │ ├── BufferNicklistEye.kt │ │ │ │ │ ├── Nick.kt │ │ │ │ │ └── BufferEye.kt │ │ │ │ │ ├── media │ │ │ │ │ ├── StrategyNull.java │ │ │ │ │ ├── LineFilter.java │ │ │ │ │ ├── OkHttpNullifyingInterceptor.java │ │ │ │ │ ├── OkHttpSecuringInterceptor.java │ │ │ │ │ ├── LimitedLengthInputStream.java │ │ │ │ │ ├── HostUtils.java │ │ │ │ │ └── RequestType.java │ │ │ │ │ ├── service │ │ │ │ │ ├── BootUpReceiver.java │ │ │ │ │ ├── Events.kt │ │ │ │ │ └── SyncAlarmReceiver.java │ │ │ │ │ ├── views │ │ │ │ │ ├── CircleView.kt │ │ │ │ │ ├── SuppressedLinearLayoutManager.kt │ │ │ │ │ ├── BackGestureAwareEditText.kt │ │ │ │ │ └── FullScreenDrawerLinearLayoutManager.kt │ │ │ │ │ ├── dialogs │ │ │ │ │ └── FancyAlertDialogBuilder.java │ │ │ │ │ ├── upload │ │ │ │ │ └── HttpUriGetter.kt │ │ │ │ │ ├── notifications │ │ │ │ │ ├── MapSortedByValue.kt │ │ │ │ │ └── Persons.kt │ │ │ │ │ ├── tabcomplete │ │ │ │ │ └── LocalTabCompleter.kt │ │ │ │ │ ├── WeechatAboutActivity.kt │ │ │ │ │ └── copypaste │ │ │ │ │ └── CopyAdapter.java │ │ │ └── androidx │ │ │ │ └── preference │ │ │ │ ├── DialogFragmentGetter.java │ │ │ │ ├── ThemePreferenceHelp.kt │ │ │ │ ├── FontPreferenceHelp.kt │ │ │ │ ├── ClearKnownHostsPreference.kt │ │ │ │ ├── HelpPreference.java │ │ │ │ ├── ClearPreference.kt │ │ │ │ ├── ClearCertPreference.kt │ │ │ │ ├── CertPickerPreference.java │ │ │ │ └── MultiSelectListPreferenceWithSummary.java │ │ ├── inkscape │ │ │ └── optimized │ │ │ │ ├── ic_toolbar_search_up.svg │ │ │ │ ├── ic_toolbar_search_down.svg │ │ │ │ ├── ic_toolbar_send.svg │ │ │ │ ├── etc_squiggle.svg │ │ │ │ ├── ic_fab_go_to_bottom.svg │ │ │ │ ├── ic_bufferlist_arrow_down.svg │ │ │ │ ├── ic_bufferlist_arrow_up.svg │ │ │ │ ├── ic_toolbar_bell.svg │ │ │ │ ├── ic_toolbar_bell_dark.svg │ │ │ │ ├── ic_toolbar_bell_light.svg │ │ │ │ ├── ic_toolbar_bell_cracked_dark.svg │ │ │ │ ├── ic_toolbar_bell_cracked_light.svg │ │ │ │ ├── ic_big_disconnected.svg │ │ │ │ ├── ic_toolbar_users_dark.svg │ │ │ │ ├── ic_toolbar_users_light.svg │ │ │ │ ├── ic_big_connecting.svg │ │ │ │ ├── ic_big_connected.svg │ │ │ │ ├── ic_toolbar_magnifying_glass.svg │ │ │ │ └── ic_copy_toolbar_select_text.svg │ │ ├── resources │ │ │ └── android-logger.properties │ │ └── assets │ │ │ └── basic-terminal-theme.properties │ ├── testDebug │ │ └── java │ │ │ └── com │ │ │ └── ubergeek42 │ │ │ └── WeechatAndroid │ │ │ └── utils │ │ │ └── ApplicationContext.kt │ ├── dev │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ └── debug │ │ └── res │ │ └── values │ │ ├── strings.xml │ │ └── values.xml └── schemas │ ├── com.ubergeek42.WeechatAndroid.media.CachePersist.AttemptDatabase │ └── 1.json │ ├── com.ubergeek42.WeechatAndroid.upload.UploadDatabase.UploadRecordsDatabase │ └── 1.json │ └── com.ubergeek42.WeechatAndroid.notifications.ShortcutStatisticsDatabase.RecordsDatabase │ └── 1.json ├── relay ├── Readme.md ├── src │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── ubergeek42 │ │ │ └── weechat │ │ │ ├── relay │ │ │ ├── connection │ │ │ │ ├── IObserver.java │ │ │ │ ├── IConnection.java │ │ │ │ ├── SimpleConnection.kt │ │ │ │ └── Events.java │ │ │ ├── messagehandler │ │ │ │ ├── UpgradeObserver.java │ │ │ │ ├── HotlistManagerObserver.java │ │ │ │ ├── BuffersChangedObserver.java │ │ │ │ └── UpgradeHandler.java │ │ │ ├── RelayMessageHandler.java │ │ │ └── protocol │ │ │ │ ├── Info.java │ │ │ │ ├── Hashtable.java │ │ │ │ └── Array.java │ │ │ ├── SslUtils.kt │ │ │ ├── HexUtils.kt │ │ │ ├── BufferObserver.java │ │ │ └── Helper.java │ └── test │ │ └── java │ │ └── com │ │ └── ubergeek42 │ │ └── weechat │ │ └── HexUtilsTest.kt └── build.gradle.kts ├── crowdin.yml ├── .gitignore ├── weechat-relay-example ├── README ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── ubergeek42 │ └── relayexample │ ├── InfoMessageHandler.java │ ├── InfolistMessageHandler.java │ └── TestMessageHandler.java └── gradle.properties /cats/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /metadata/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Weechat-Android 2 | -------------------------------------------------------------------------------- /cats/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10401.txt: -------------------------------------------------------------------------------- 1 | * Fixed a few bugs -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10301.txt: -------------------------------------------------------------------------------- 1 | * Fixed F-Droid builds -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10701.txt: -------------------------------------------------------------------------------- 1 | * Fixed an issue of disappearing bubbles -------------------------------------------------------------------------------- /metadata/en-US/changelogs/11001.txt: -------------------------------------------------------------------------------- 1 | * Fixed a rare crash when a line gets unhidden -------------------------------------------------------------------------------- /metadata/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Relay client for the WeeChat IRC client. 2 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | include(":cats") 2 | include(":relay") 3 | include(":app") 4 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10402.txt: -------------------------------------------------------------------------------- 1 | * Fixed freeform window mode 2 | * Fixed a few rare crashes -------------------------------------------------------------------------------- /releases/android.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/releases/android.jks -------------------------------------------------------------------------------- /releases/qr-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/releases/qr-beta.png -------------------------------------------------------------------------------- /releases/qr-main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/releases/qr-main.png -------------------------------------------------------------------------------- /cats/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Cats 3 | 4 | -------------------------------------------------------------------------------- /metadata/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/icon.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10400.txt: -------------------------------------------------------------------------------- 1 | * Implemented command and channel name completion 2 | * Updated icons to have wireframe look -------------------------------------------------------------------------------- /releases/google-play-key.p12.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/releases/google-play-key.p12.enc -------------------------------------------------------------------------------- /app/src/main/ic_launcher_kitty-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/ic_launcher_kitty-web.png -------------------------------------------------------------------------------- /metadata/en-US/changelogs/1200.txt: -------------------------------------------------------------------------------- 1 | * Let users interactively accept or reject SSH host keys 2 | * Accept private SSH keys in PKCS #8 format -------------------------------------------------------------------------------- /app/src/main/ic_launcher_weechat-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/ic_launcher_weechat-web.png -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10501.txt: -------------------------------------------------------------------------------- 1 | * Fixed a crash when the password has never been set 2 | * Fixed a crash when using Modern handshake on Android 7- -------------------------------------------------------------------------------- /app/src/main/color_scheme_generator/palettes.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/color_scheme_generator/palettes.xcf -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_kitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_kitty.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_kitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_kitty.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_kitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_kitty.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_kitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_kitty.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_kitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_kitty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notification_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-hdpi/ic_notification_hot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notification_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-hdpi/ic_notification_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notification_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-mdpi/ic_notification_hot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notification_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-mdpi/ic_notification_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notification_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-xhdpi/ic_notification_hot.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/phoneScreenshots/screenshot-1.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/phoneScreenshots/screenshot-2.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/phoneScreenshots/screenshot-3.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/screenshot-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/phoneScreenshots/screenshot-4.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/screenshot-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/phoneScreenshots/screenshot-5.png -------------------------------------------------------------------------------- /metadata/en-US/images/phoneScreenshots/screenshot-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/metadata/en-US/images/phoneScreenshots/screenshot-6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notification_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-xhdpi/ic_notification_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notification_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-xxhdpi/ic_notification_hot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notification_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-xxhdpi/ic_notification_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notification_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-xxxhdpi/ic_notification_hot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notification_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubergeek42/weechat-android/HEAD/app/src/main/res/drawable-xxxhdpi/ic_notification_main.png -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10700.txt: -------------------------------------------------------------------------------- 1 | * Removed storage access permission on Android 9+ 2 | * Added launcher and direct share shortcuts 3 | * Added support for Bubbles on Android 11 -------------------------------------------------------------------------------- /relay/Readme.md: -------------------------------------------------------------------------------- 1 | #Build Instructions 2 | This project is designed to be compiled with ant. It will produce a weechat-relay.jar file which you can include in your projects. 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-fr-v29/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Système 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-land/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 26dp 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-v29/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | System default 4 | -------------------------------------------------------------------------------- /cats/NOTICE.txt: -------------------------------------------------------------------------------- 1 | This product includes code from the project Hugo, licensed under the Apache License, Version 2.0 2 | Copyright 2013 Jake Wharton (https://github.com/JakeWharton/hugo) 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-de-v29/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Systemstandardeinstellung 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-ru-v29/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Устанавливается системой 4 | -------------------------------------------------------------------------------- /cats/src/main/res/raw/cats.txt: -------------------------------------------------------------------------------- 1 | # disabled tags in format tag, tag/*, tag/subtag, */subtag 2 | # subtags ?, ??, ??? provide increasingly more verbose information 3 | 4 | */? 5 | */?? 6 | */??? 7 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/1000.txt: -------------------------------------------------------------------------------- 1 | * Added media preview 2 | * Raised minimum Android version to Lollipop (5.0, API level 21) 3 | * Added German translation 4 | * Improved support for notify levels 5 | -------------------------------------------------------------------------------- /app/src/testDebug/java/com/ubergeek42/WeechatAndroid/utils/ApplicationContext.kt: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.utils 2 | 3 | import android.content.Context 4 | 5 | lateinit var applicationContext: Context -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10801.txt: -------------------------------------------------------------------------------- 1 | * Fixed an issue with ED25519 keys during upgrade 2 | * Update Android Gradle Plugin to fix build on F-Droid 3 | * Rework ping logic to comply with Google Play requirements 4 | -------------------------------------------------------------------------------- /app/src/dev/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.ubergeek42.WeechatAndroid.dev 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-large-land/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2dp 4 | false 5 | 6 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /app/src/main/res/values/strings.xml 3 | translation: /app/src/main/res/values-%two_letters_code%/strings.xml 4 | translate_attributes: 0 5 | content_segmentation: 0 6 | -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.ubergeek42.WeechatAndroid.debug 4 | 5 | -------------------------------------------------------------------------------- /app/src/debug/res/values/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | #588ab8 6 | 7 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10500.txt: -------------------------------------------------------------------------------- 1 | * Added support for the handshake relay command 2 | * Improved the way URLs are recognized 3 | * Black background is no longer shown when switching buffers 4 | * Fixed a couple of rare crashes -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/adapters/BufferListClickListener.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.adapters; 2 | 3 | 4 | public interface BufferListClickListener { 5 | void onBufferClick(long pointer); 6 | } 7 | -------------------------------------------------------------------------------- /cats/src/main/java/com/ubergeek42/cats/Printer.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.cats; 2 | 3 | import android.util.Log; 4 | 5 | class Printer { 6 | void println(int priority, String tag, String msg) { 7 | Log.println(priority, tag, msg); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/11000.txt: -------------------------------------------------------------------------------- 1 | * Added an option to not move hot buffers to the top of the buffer list 2 | * Handle relay events `_buffer_cleared` and `_buffer_line_data_changed` 3 | * Updated the default media preview strategies 4 | * A few minor bug fixes and improvements -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/utils/ApplicationContext.kt: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.utils 2 | 3 | import android.content.Context 4 | import com.ubergeek42.WeechatAndroid.Weechat 5 | 6 | @JvmField val applicationContext: Context = Weechat.applicationContext -------------------------------------------------------------------------------- /app/src/main/java/androidx/preference/DialogFragmentGetter.java: -------------------------------------------------------------------------------- 1 | package androidx.preference; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.fragment.app.DialogFragment; 5 | 6 | public interface DialogFragmentGetter { 7 | @NonNull DialogFragment getDialogFragment(); 8 | } 9 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Jul 12 20:01:32 BST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/squiggle.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /metadata/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | This is a WeeChat relay client for Android. 2 | 3 | This application is not a standalone an IRC client. It connects to WeeChat that has to be running on a remote machine. If you are looking for a standalone IRC client for Android, you will need to look elsewhere. 4 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_search_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/resources/android-logger.properties: -------------------------------------------------------------------------------- 1 | # suppress inspection "UnusedProperty" for whole file 2 | 3 | # a simple logger suitable for release 4 | # root=INFO:%logger: 5 | 6 | # logger that prints all messages and in addition prints the name of the thread 7 | root=VERBOSE:\ud83d\udc36:%-4.4(%t) : %logger 8 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/1100.txt: -------------------------------------------------------------------------------- 1 | * Added a new certificate dialog that displays the full certificate chain 2 | * Implemented SSL certificate pinning 3 | * Support for client SSL certificates 4 | * Added support for Ed25519 keys thanks to sshlib 5 | * When possible, RSA, EC, DSA keys are stored inside secure hardware -------------------------------------------------------------------------------- /metadata/en-US/changelogs/436.txt: -------------------------------------------------------------------------------- 1 | * Service to run only while connecting/connected; quit button removed 2 | * “Fetch more” button 3 | * SSH library update; require known hosts; store known hosts and key inside app 4 | * Significant refactoring of connectivity; stunnel removed 5 | * Better logging and error handling 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/relay/BufferListEye.kt: -------------------------------------------------------------------------------- 1 | // Licensed under the Apache License, Version 2.0 (the "License"); 2 | // you may not use this file except in compliance with the License. 3 | package com.ubergeek42.WeechatAndroid.relay 4 | 5 | interface BufferListEye { 6 | fun onBuffersChanged() 7 | } -------------------------------------------------------------------------------- /app/src/main/res/color/button_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_certificate.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_search_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/1300.txt: -------------------------------------------------------------------------------- 1 | * Allow uploading files via user-supplied HTTP POST services 2 | * Added file picker/take photo button 3 | * App can be a share target for files as well as text 4 | * App can receive media through keyboard 5 | * Parts of the app are using Kotlin now! 6 | * Toast background is colored to signify success or failure -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Android 2 | local.properties 3 | *.apk 4 | 5 | # Android Studio/InteliJ IDEA 6 | .idea 7 | *.iml 8 | 9 | # Gradle stuff 10 | .gradle 11 | build 12 | /captures 13 | /app/dev 14 | /app/release 15 | 16 | # eclipse project stuff 17 | .settings 18 | .project 19 | .classpath 20 | .metadata 21 | 22 | # vim 23 | *.swp 24 | *.swo 25 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_kitty.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/435.txt: -------------------------------------------------------------------------------- 1 | * Material design 2 | * Ping mechanism 3 | * Color schemes 4 | * Read marker line 5 | * Ability to resend lines 6 | * Font preference 7 | * More notification options 8 | * Weechat → relay synchronization every 5 minutes 9 | * Validation of settings 10 | * Better url detection 11 | * A bunch of stability fixes 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_popup_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/431.txt: -------------------------------------------------------------------------------- 1 | * Bundled notifications with instant reply on Android 7+ 2 | * A menu switch that instantly turns filtering on or off 3 | * Use RecyclerView that comes with some animations 4 | * Buffer title is now at the top of buffer lines 5 | * Ask user for permission to read external storage 6 | * Library updates and stability fixes 7 | -------------------------------------------------------------------------------- /weechat-relay-example/README: -------------------------------------------------------------------------------- 1 | This is a simple demo program showing how to connect to a Weechat Relay server, send it messages, and hook responses from it. 2 | 3 | This will gain more documentation and possibly testcases in the future. 4 | 5 | Compile the sample weechat-relay-example.jar using ant. You must have previously built the library in ../weechat-relay 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_rounded_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/pref_password_edit_text.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /relay/src/main/java/com/ubergeek42/weechat/relay/connection/IObserver.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.weechat.relay.connection; 2 | 3 | import com.ubergeek42.weechat.relay.RelayMessage; 4 | 5 | public interface IObserver { 6 | void onStateChanged(RelayConnection.STATE state); 7 | void onException(Exception e); 8 | void onMessage(RelayMessage message); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_send.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /cats/src/main/java/com/ubergeek42/cats/Root.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.cats; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.FIELD; 8 | 9 | @Retention(RetentionPolicy.CLASS) 10 | @Target(FIELD) 11 | public @interface Root {} 12 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/etc_squiggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/color/toolbar_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/relay/BufferNicklistEye.kt: -------------------------------------------------------------------------------- 1 | // Licensed under the Apache License, Version 2.0 (the "License"); 2 | // you may not use this file except in compliance with the License. 3 | package com.ubergeek42.WeechatAndroid.relay 4 | 5 | import androidx.annotation.AnyThread 6 | 7 | interface BufferNicklistEye { 8 | @AnyThread fun onNicklistChanged() 9 | } -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10900.txt: -------------------------------------------------------------------------------- 1 | * Drag and drop files on buffers to share 2 | * Volume keys can now navigate input history 3 | * Fixed strange behavior resulting from handling WeeChat pointers as signed numbers 4 | * Fixed importing of PKCS #8 Ed25519 keys 5 | * Target Android API 34, ask for notification & exact alarm permissions where applicable 6 | * A few minor bug fixes and improvements -------------------------------------------------------------------------------- /app/src/main/res/values-v24/values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | chat 5 | paste 6 | notifications 7 | 8 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10800.txt: -------------------------------------------------------------------------------- 1 | * Render the latest emoji on older systems 2 | * Certificate dialog now shows trusted chain if available 3 | * Fixed not being able to connect to servers that require SNI 4 | * Fixed cleartext web traffic not going through 5 | * Fixed wrong message shown in case of TLS error 6 | * Fixed a crash if an URL with the ellipsis character is encountered 7 | * Fixed a very rare inconsistent Bubble behavior -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_fab_go_to_bottom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v27/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/media/StrategyNull.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.media; 2 | 3 | import java.util.List; 4 | 5 | class StrategyNull extends Strategy { 6 | StrategyNull(String name, List hosts) { 7 | super(name, hosts); 8 | } 9 | 10 | @Override Url make(String url, Size size) throws CancelFurtherAttempts { 11 | throw new Strategy.CancelFurtherAttempts(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/res/raw/cats.txt: -------------------------------------------------------------------------------- 1 | # disabled tags in format tag, tag/*, tag/subtag, */subtag 2 | # subtags ?, ??, ??? provide increasingly more verbose information 3 | 4 | # ui 5 | WA/* 6 | ChatLinesAdapter/Scrolling 7 | BLF 8 | #Notificator 9 | 10 | # service 11 | RelayService 12 | RelayConnection 13 | BufferList/* 14 | Buffer/* 15 | Lines 16 | Line 17 | 18 | # general-purpose 19 | */? 20 | */?? 21 | */??? 22 | -------------------------------------------------------------------------------- /weechat-relay-example/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | apply plugin: 'application' 3 | 4 | dependencies { 5 | compile project(':weechat-relay') 6 | compile 'org.slf4j:slf4j-api:1.7.12' 7 | 8 | runtime 'org.slf4j:slf4j-simple:1.7.12' 9 | } 10 | 11 | mainClassName="com.ubergeek42.relayexample.RelayExample" 12 | 13 | compileJava { 14 | sourceCompatibility = JavaVersion.VERSION_1_7 15 | targetCompatibility = JavaVersion.VERSION_1_7 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/relay/Nick.kt: -------------------------------------------------------------------------------- 1 | //Licensed under the Apache License, Version 2.0 (the "License"); 2 | //you may not use this file except in compliance with the License. 3 | package com.ubergeek42.WeechatAndroid.relay 4 | 5 | class Nick( 6 | @JvmField val pointer: Long, 7 | @JvmField val prefix: String, 8 | @JvmField val name: String, 9 | @JvmField val away: Boolean, 10 | ) { 11 | fun asString() = prefix + name 12 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_toolbar_search_up.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_paste_dialog_clipboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_toolbar_search_down.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/layout/read_marker.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-v27/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/etc_squiggle.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/color_scheme_generator/generate_test.py: -------------------------------------------------------------------------------- 1 | def gen(fg=True): 2 | out = "" 3 | for y in range(32): 4 | out += "/eval /print " 5 | for x in range(8): 6 | out += "${color:" 7 | if not fg: 8 | out += str(y * 8 + x) 9 | out += "," 10 | index = y * 8 + x 11 | out += str(index) 12 | out += "}" 13 | out += f"{index:03}" 14 | out += "\n" 15 | return out 16 | 17 | 18 | print(gen(True) + gen(False)) 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cancel.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_toolbar_send.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/assets/basic-terminal-theme.properties: -------------------------------------------------------------------------------- 1 | # suppress inspection "UnusedProperty" for whole file 2 | name = Basic Terminal 3 | 4 | default = 0xC0C0C0 5 | default_bg = 0x000000 6 | 7 | color0 = 0x000000 8 | color1 = 0x800000 9 | color2 = 0x008000 10 | color3 = 0x808000 11 | color4 = 0x000080 12 | color5 = 0x800080 13 | color6 = 0x008080 14 | color7 = 0xC0C0C0 15 | color8 = 0x808080 16 | color9 = 0xFF0000 17 | color10 = 0x00FF00 18 | color11 = 0xFFFF00 19 | color12 = 0x0000FF 20 | color13 = 0xFF00FF 21 | color14 = 0x00FFFF 22 | color15 = 0xFFFFFF 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 13 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_bufferlist_arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/menu/fullscreen_edit_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_list.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fab_go_to_bottom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /metadata/en-US/changelogs/10600.txt: -------------------------------------------------------------------------------- 1 | * Added search functionality 2 | * Added a floating “go to bottom” button 3 | * Added a connectivity indicator 4 | * Copy dialog can now select text and copy several messages at once 5 | * Interface is no longer locked up while disconnected 6 | * Chat lines are no longer thrown away when not synchronizing 7 | * Chat scroll position is now remembered on rotation 8 | * App is now drawn behind system bars on supported devices 9 | * Added new chat line change animations 10 | * Local tab completer is no longer used when completing command-like text 11 | * A lot of internal changes and bug fixes -------------------------------------------------------------------------------- /cats/src/main/java/com/ubergeek42/cats/Cat.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.cats; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.CONSTRUCTOR; 8 | import static java.lang.annotation.ElementType.METHOD; 9 | import static java.lang.annotation.ElementType.TYPE; 10 | 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Target({TYPE, METHOD, CONSTRUCTOR}) 13 | public @interface Cat { 14 | String value() default ""; 15 | boolean linger() default false; 16 | boolean exit() default false; 17 | } 18 | -------------------------------------------------------------------------------- /cats/src/main/java/com/ubergeek42/cats/CatD.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.cats; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.CONSTRUCTOR; 8 | import static java.lang.annotation.ElementType.METHOD; 9 | import static java.lang.annotation.ElementType.TYPE; 10 | 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Target({TYPE, METHOD, CONSTRUCTOR}) 13 | public @interface CatD { 14 | String value() default ""; 15 | boolean linger() default false; 16 | boolean exit() default false; 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_paste_list.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_bufferlist_arrow_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_bell.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_bufferlist_item_hot.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_rotating_dot.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /relay/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `java-library` 3 | kotlin("jvm") 4 | kotlin("plugin.serialization") 5 | } 6 | 7 | dependencies { 8 | implementation(libs.slf4j.api) 9 | 10 | // "api" because we are calling `SSHConnection.getKnownHosts` from the app 11 | // and it returns something from inside sshlib 12 | api(libs.sshlib) 13 | 14 | implementation(libs.nvwebsocketclient) 15 | 16 | implementation(libs.kotlinx.serialization.json) 17 | 18 | testImplementation(libs.junit.jupiter) 19 | } 20 | 21 | tasks.withType { 22 | options.encoding = "UTF-8" 23 | } 24 | 25 | java.toolchain.languageVersion = JavaLanguageVersion.of(21) -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_bell_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_bufferlist_item_warm.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_bell_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/menu/copy_dialog_fullscreen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_bell_cracked_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/inkscape/optimized/ic_toolbar_bell_cracked_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/java/androidx/preference/ThemePreferenceHelp.kt: -------------------------------------------------------------------------------- 1 | package androidx.preference 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.core.text.HtmlCompat 6 | import com.ubergeek42.WeechatAndroid.R 7 | 8 | 9 | class ThemePreferenceHelp(context: Context?, attrs: AttributeSet?) : HelpPreference(context, attrs) { 10 | override fun getSummary(): CharSequence { 11 | val indent = "
    " 12 | val directories = ThemeManager.getThemeSearchDirectories(context) 13 | val message = context.getString(R.string.pref__ThemePreferenceHelp__summary, 14 | indent + directories.joinToString(indent)) 15 | 16 | return HtmlCompat.fromHtml(message, HtmlCompat.FROM_HTML_MODE_LEGACY) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/res/xml/filepaths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /weechat-relay-example/src/main/java/com/ubergeek42/relayexample/InfoMessageHandler.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.relayexample; 2 | import com.ubergeek42.weechat.relay.RelayMessageHandler; 3 | import com.ubergeek42.weechat.relay.protocol.Info; 4 | import com.ubergeek42.weechat.relay.protocol.RelayObject; 5 | 6 | 7 | public class InfoMessageHandler implements RelayMessageHandler { 8 | 9 | @Override 10 | public void handleMessage(RelayObject obj, String id) { 11 | if (id.equals("info-test")) { 12 | if (!(obj instanceof Info)) { 13 | System.err.println("Error: unexpected object type"); 14 | } 15 | Info info = (Info) obj; 16 | System.out.printf("[Info] %s = %s\n", info.getName(), info.getValue()); 17 | } else { 18 | System.err.println("Unexpected message ID"); 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/media/LineFilter.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.media; 2 | 3 | import androidx.annotation.Nullable; 4 | 5 | import com.ubergeek42.WeechatAndroid.relay.Line; 6 | 7 | import java.util.List; 8 | import java.util.regex.Pattern; 9 | 10 | class LineFilter { 11 | final private @Nullable List nicks; 12 | final private @Nullable Pattern pattern; 13 | 14 | LineFilter(@Nullable List nicks, @Nullable String regex) { 15 | this.nicks = nicks; 16 | this.pattern = regex == null ? null : Pattern.compile(regex); 17 | } 18 | 19 | boolean filters(Line line) { 20 | return (nicks == null || nicks.contains(line.nick)) && 21 | (pattern == null || pattern.matcher(line.getMessageString()).find()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/utils/WeaselMeasuringViewPager.kt: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.utils 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import com.ubergeek42.WeechatAndroid.service.P 6 | import com.ubergeek42.WeechatAndroid.views.windowInsets 7 | 8 | class WeaselMeasuringViewPager : ViewPagerFix { 9 | constructor(context: Context) : super(context) 10 | constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) 11 | 12 | override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { 13 | super.onMeasure(widthMeasureSpec, heightMeasureSpec) 14 | measuredWidth.let { 15 | if (it > 0) weaselWidth = it - windowInsets.left - windowInsets.right 16 | } 17 | } 18 | 19 | var weaselWidth = 0 20 | } -------------------------------------------------------------------------------- /releases/travis_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$DEVSTOREFILE" ]; then 4 | DEVSTOREFILE="releases/android.jks" 5 | fi 6 | 7 | if [ -z "$DEVKEYALIAS" ]; then 8 | DEVKEYALIAS="weechat" 9 | fi 10 | 11 | DEV="1" 12 | if [ -z "$DEVSTOREPASSWORD" ]; then 13 | echo "\$DEVSTOREPASSWORD must be set to build a release" 14 | DEV="0" 15 | fi 16 | 17 | if [ -z "$DEVKEYPASSWORD" ]; then 18 | echo "\$DEVKEYPASSWORD must be set to build a release" 19 | DEV="0" 20 | fi 21 | 22 | if [ "$DEV" == "1" ]; then 23 | ./gradlew --no-daemon clean :app:assembleDev \ 24 | -PdevStorefile="$DEVSTOREFILE" \ 25 | -PdevStorePassword="$DEVSTOREPASSWORD" \ 26 | -PdevKeyAlias="$DEVKEYALIAS" \ 27 | -PdevKeyPassword="$DEVKEYPASSWORD" 28 | else 29 | ./gradlew clean :app:assembleDebug 30 | fi 31 | 32 | exit $? 33 | -------------------------------------------------------------------------------- /app/src/main/java/androidx/preference/FontPreferenceHelp.kt: -------------------------------------------------------------------------------- 1 | package androidx.preference 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.core.text.HtmlCompat 6 | import androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY 7 | import com.ubergeek42.WeechatAndroid.R 8 | 9 | 10 | class FontPreferenceHelp(context: Context?, attrs: AttributeSet?) : HelpPreference(context, attrs) { 11 | override fun getSummary(): CharSequence { 12 | val indent = "
    " 13 | val directories = FontManager.getFontSearchDirectories(context) 14 | val message = context.getString(R.string.pref__FontPreferenceHelp__summary, 15 | indent + directories.joinToString(indent)) 16 | 17 | return HtmlCompat.fromHtml(message, FROM_HTML_MODE_LEGACY) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/utils/ViewPagerFix.kt: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.utils 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.MotionEvent 6 | import androidx.viewpager.widget.ViewPager 7 | 8 | // this is a workaround for a very rare crash 9 | // https://stackoverflow.com/questions/16459196 10 | 11 | open class ViewPagerFix : ViewPager { 12 | constructor(context: Context) : super(context) 13 | constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) 14 | 15 | override fun onInterceptTouchEvent(ev: MotionEvent?) = 16 | try { 17 | super.onInterceptTouchEvent(ev) 18 | } catch (e: IllegalArgumentException) { 19 | e.printStackTrace() 20 | false 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/relay/BufferEye.kt: -------------------------------------------------------------------------------- 1 | // Licensed under the Apache License, Version 2.0 (the "License"); 2 | // you may not use this file except in compliance with the License. 3 | package com.ubergeek42.WeechatAndroid.relay 4 | 5 | import androidx.annotation.MainThread 6 | import androidx.annotation.WorkerThread 7 | 8 | interface BufferEye { 9 | // server sent us all lines 10 | @WorkerThread fun onLinesListed() 11 | 12 | // 1 line added on bottom 13 | @WorkerThread fun onLineAdded() 14 | 15 | // indicates changed title 16 | @WorkerThread fun onTitleChanged() 17 | 18 | // buffer was closed in weechat 19 | @WorkerThread fun onBufferClosed() 20 | 21 | // all lines should be re-rendered due to font size change and such 22 | @MainThread fun onGlobalPreferencesChanged(numberChanged: Boolean) 23 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_toolbar_tab.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/ubergeek42/WeechatAndroid/media/OkHttpNullifyingInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.ubergeek42.WeechatAndroid.media; 2 | 3 | import com.ubergeek42.cats.Kitty; 4 | import com.ubergeek42.cats.Root; 5 | 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | import java.io.IOException; 9 | 10 | import okhttp3.Interceptor; 11 | import okhttp3.Request; 12 | import okhttp3.Response; 13 | 14 | class OkHttpNullifyingInterceptor implements Interceptor { 15 | final private static @Root Kitty kitty = Kitty.make(); 16 | 17 | @NotNull @Override public Response intercept(@NotNull Chain chain) throws IOException { 18 | Request request = chain.request(); 19 | 20 | if (Engine.hasNullStrategyFor(request.url())) 21 | throw new Exceptions.RedirectToNullStrategyException(request.url().toString()); 22 | 23 | return chain.proceed(request); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/more_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 |