60 Commits
1.1 ... master

Author SHA1 Message Date
7ed50df7df Remove all fdroid v2
All checks were successful
Android Release / release (push) Successful in 29s
2026-01-19 01:59:34 +03:00
38c6b79bc2 Remove all fdroid
Some checks failed
Android Release / release (push) Failing after 3m32s
2026-01-19 01:50:27 +03:00
3dc72e991d change metadata
Some checks failed
Android Release / release (push) Failing after 5m16s
2026-01-19 01:43:47 +03:00
f65a12a113 change metadata
Some checks failed
Android Release / release (push) Failing after 5m20s
2026-01-19 01:37:52 +03:00
3be25d8161 change metadata
Some checks failed
Android Release / release (push) Failing after 5m20s
2026-01-19 01:30:38 +03:00
62a92a65f1 change config.yml
Some checks failed
Android Release / release (push) Failing after 6m22s
2026-01-19 01:16:30 +03:00
6d1c6541b3 change config.yml 2026-01-19 01:12:13 +03:00
9c32bf7d7d change docker to package
Some checks failed
Android Release / release (push) Failing after 5m53s
2026-01-19 00:49:59 +03:00
9aaced3d7a change docker to package
Some checks failed
Android Release / release (push) Failing after 6m7s
2026-01-19 00:41:50 +03:00
e1a4f36543 change docker dir
Some checks failed
Android Release / release (push) Failing after 3m42s
2026-01-19 00:35:05 +03:00
6ebf5b02dd remove --clean
Some checks failed
Android Release / release (push) Failing after 5m16s
2026-01-19 00:28:21 +03:00
553f591918 Move Release
Some checks failed
Android Release / release (push) Failing after 3m46s
2026-01-19 00:23:21 +03:00
c422294d7c Debug add and fixes
Some checks failed
Android Release / release (push) Has been cancelled
2026-01-19 00:20:44 +03:00
45938f7cec Debug add
Some checks failed
Android Release / release (push) Failing after 4m27s
2026-01-19 00:12:49 +03:00
0c08aae266 Fix directory location
Some checks failed
Android Release / release (push) Failing after 3m40s
2026-01-19 00:05:10 +03:00
1b3712eeca Fix Sign
Some checks failed
Android Release / release (push) Failing after 4m1s
2026-01-18 23:58:51 +03:00
82468c7e10 Fix Repo
Some checks failed
Android Release / release (push) Failing after 4m25s
2026-01-18 23:45:53 +03:00
e29de59384 Fix Repo
Some checks are pending
Android Release / release (push) Has started running
2026-01-18 23:45:31 +03:00
2658560210 Fix Repo
All checks were successful
Android Release / release (push) Successful in 31s
2026-01-18 23:43:05 +03:00
68ce7346b1 Fix Repo
Some checks failed
Android Release / release (push) Failing after 3m46s
2026-01-18 23:20:23 +03:00
aa01fcabfb Fix version Check
Some checks failed
Android Release / release (push) Failing after 4m11s
2026-01-18 23:09:45 +03:00
a83b432db6 Fix version Check
Some checks are pending
Android Release / release (push) Has started running
2026-01-18 23:08:59 +03:00
4a328d33e0 APK Rename
Some checks failed
Android Release / release (push) Failing after 4m2s
2026-01-18 22:57:57 +03:00
febd4f138c Some fixes
Some checks failed
Android Release / release (push) Has been cancelled
2026-01-18 22:54:38 +03:00
23771a9b59 Add F-Droid sign + fix run container
Some checks failed
Android Release / release (push) Failing after 4m18s
2026-01-18 22:42:40 +03:00
97de9776a1 Fix Container url
Some checks failed
Android Release / release (push) Failing after 6m15s
2026-01-18 22:25:50 +03:00
7c8e2d58f5 Fix EOL Stop
Some checks failed
Android Release / release (push) Failing after 3m38s
2026-01-18 22:20:17 +03:00
3c77188985 Fix Stop if version already released
Some checks failed
Android Release / release (push) Failing after 3m29s
2026-01-18 22:13:12 +03:00
422ff51b9e Fix setup-android
Some checks failed
Android Release / release (push) Failing after 1m8s
2026-01-18 22:10:27 +03:00
50090c8ed7 Bump to check CI/CD
Some checks failed
Android Release / release (push) Failing after 5s
2026-01-18 22:09:19 +03:00
6f5168bc27 Bump to check CI/CD
Some checks failed
Android Release / release (push) Failing after 5m16s
2026-01-18 19:28:22 +03:00
5684eb62b2 Fix Build Release APK (Maybe)
All checks were successful
Android Release / release (push) Successful in 3m11s
2026-01-18 01:35:00 +03:00
21ec78154d Fix Build Release APK (Maybe)
Some checks failed
Android Release / release (push) Failing after 49s
2026-01-18 01:32:43 +03:00
7f6fcc6c79 Fix Build Release APK (Maybe)
Some checks failed
Android Release / release (push) Failing after 2m48s
2026-01-18 01:27:39 +03:00
e8a1df940c Fix Build Release APK (Maybe)
Some checks failed
Android Release / release (push) Failing after 1m51s
2026-01-18 01:24:13 +03:00
5dc5dbbe57 Fix Build Release APK (Maybe)
Some checks failed
Android Release / release (push) Failing after 2m37s
2026-01-18 01:20:06 +03:00
53247d46e1 Fix Build Release APK (Maybe)
Some checks failed
Android Release / release (push) Failing after 1m23s
2026-01-18 01:18:36 +03:00
b5ade63bf9 Fix Build Release APK (Maybe)
Some checks failed
Android Release / release (push) Failing after 3m26s
2026-01-18 01:10:42 +03:00
683cc5759c Bump version to check CI
Some checks are pending
Android Release / release (push) Has started running
2026-01-18 01:09:22 +03:00
7b9aed8842 Fix tag check
Some checks are pending
Android Release / release (push) Has started running
2026-01-18 01:08:55 +03:00
5137be71c7 Fix tag check
All checks were successful
Android Release / release (push) Successful in 30s
2026-01-18 01:06:24 +03:00
1c7441c76b Fix tag check
Some checks failed
Android Release / release (push) Failing after 23s
2026-01-18 01:05:17 +03:00
c785569077 Fix tag check
Some checks are pending
Android Release / release (push) Has started running
2026-01-18 01:03:02 +03:00
5b1a0849f2 Fix tag check
Some checks failed
Android Release / release (push) Has been cancelled
2026-01-18 01:01:21 +03:00
a4183e6900 Fix tag check
Some checks failed
Android Release / release (push) Failing after 2m7s
2026-01-18 00:59:08 +03:00
cf39fec1ad Fix app/app/keystore
Some checks failed
Android Release / release (push) Failing after 2m33s
2026-01-18 00:55:50 +03:00
4e312a9685 Ready Fixes
Some checks failed
Android Release / release (push) Failing after 3m18s
2026-01-18 00:51:21 +03:00
b05f23c107 Ready Fixes
Some checks failed
Android Release / release (push) Failing after 1m44s
2026-01-18 00:43:35 +03:00
7b0f078fa3 Ready Fixes
Some checks failed
Android Release / release (push) Failing after 2m42s
2026-01-18 00:39:43 +03:00
84b83c1607 Ready Fixes
Some checks failed
Android Release / release (push) Failing after 14s
2026-01-18 00:38:30 +03:00
2bb469496b Ready Fixes
Some checks failed
Android Release / release (push) Failing after 21s
2026-01-18 00:37:20 +03:00
ba142431b6 Fixes Keystore Location
Some checks are pending
Android Release / release (push) Has started running
2026-01-18 00:35:54 +03:00
f9bbd337dc Fixes Android SDK
Some checks failed
Android Release / release (push) Failing after 2m37s
2026-01-18 00:30:43 +03:00
efb867b979 Fixes
Some checks failed
Android Release / release (push) Failing after 21s
2026-01-18 00:28:33 +03:00
08bd35bf8f Fixes
Some checks failed
Android Release / release (push) Failing after 1m13s
2026-01-18 00:08:20 +03:00
83e2c2f908 use out inctance
Some checks failed
Android Release / release (push) Failing after 17s
2026-01-18 00:01:53 +03:00
b07b79388f use gitea repos
Some checks failed
Android Release / release (push) Failing after 8s
2026-01-17 23:59:54 +03:00
dcde55fd1a Исправление actions
Some checks failed
Android Release / release (push) Failing after 8s
2026-01-17 23:46:17 +03:00
19f6ba4d65 Добавлены Actions для автоматической сборки проекта
Some checks failed
Android Release / release (push) Failing after 1m3s
2026-01-17 23:37:17 +03:00
098828d8d5 feat: Повышение стабильности приложения, обновление зависимостей и доработка интерфейса
Этот коммит включает ряд улучшений по всему приложению:

Стабильность:
- Реализована null-безопасность для getArguments() в ChatListFragment, чтобы предотвратить NullPointerException.
- Устранено предупреждение о непроверенном приведении типов в ChatListFragment с использованием @SuppressWarnings("unchecked").
- Обеспечено корректное управление ресурсами: объект Response в VkApiClient обёрнут в try-with-resources для предотвращения утечек ресурсов.

Управление зависимостями:
- Проект обновлён до Java 17 для повышения производительности и использования современных возможностей языка.
- Все прямые объявления зависимостей перенесены в Gradle Version Catalog (libs.versions.toml) для лучшей организации и упрощённого управления внешними библиотеками.

Пользовательский интерфейс:
- Улучшено визуальное отображение ViewPager2 в activity_main.xml путём добавления горизонтальных отступов для более сбалансированного макета.
- В MultiLinkDialog заменён LayoutInflater.from(requireContext()) на getLayoutInflater() для лучшего соответствия жизненному циклу Fragment.
2026-01-17 22:51:58 +03:00
10 changed files with 159 additions and 50 deletions

View File

@@ -0,0 +1,98 @@
name: Android Release
on:
push:
branches:
- master
jobs:
release:
runs-on: ubuntu-latest
steps:
# ------------------- Checkout -------------------
- name: Checkout
uses: https://git.daemonlord.ru/actions/checkout@v4
with:
fetch-depth: 0
tags: true
# ------------------- Setup JDK -------------------
- name: Set up JDK 17
uses: https://git.daemonlord.ru/actions/setup-java@v4
with:
distribution: temurin
java-version: 17
# ------------------- Install Node.js -------------------
- name: Install Node.js
run: |
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs
# ------------------- Extract version -------------------
- name: Extract versionName
id: extract_version
run: |
VERSION=$(grep -oP 'versionName\s+"[^"]+"' app/build.gradle | head -n1 | cut -d'"' -f2 | tr -d '\r\n')
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Detected version: $VERSION"
# ------------------- Stop if already released -------------------
- name: Stop if version already released
id: stop
run: |
VERSION=${{ steps.extract_version.outputs.version }}
if git show-ref --tags --quiet --verify "refs/tags/$VERSION"; then
echo "Version $VERSION already released, stopping job."
echo "CONTINUE=false" >> $GITHUB_ENV
else
echo "Version $VERSION not released yet, continuing workflow..."
echo "CONTINUE=true" >> $GITHUB_ENV
fi
# ------------------- Decode keystore -------------------
- name: Decode keystore
if: env.CONTINUE == 'true'
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > app/release.keystore
- name: Make Gradlew executable
if: env.CONTINUE == 'true'
run: chmod +x ./gradlew
# ------------------- Set up Android SDK -------------------
- name: Set up Android SDK
if: env.CONTINUE == 'true'
uses: https://git.daemonlord.ru/actions/setup-android@v3
# ------------------- Build Release APK -------------------
- name: Build Release APK
if: env.CONTINUE == 'true'
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: ./gradlew --no-daemon assembleRelease
# ------------------- Git tag -------------------
- name: Create git tag
if: env.CONTINUE == 'true'
run: |
git tag $VERSION
git push origin $VERSION
# ------------------- Gitea release -------------------
- name: Create Gitea Release
if: env.CONTINUE == 'true'
uses: https://git.daemonlord.ru/actions/gitea-release-action@v1
with:
server_url: https://git.daemonlord.ru
repository: ${{ gitea.repository }}
token: ${{ secrets.API_TOKEN }}
tag_name: ${{ steps.extract_version.outputs.version }}
name: Release ${{ steps.extract_version.outputs.version }}
body: |
Android release ${{ steps.extract_version.outputs.version }}
files: |
app/build/outputs/apk/release/*.apk

View File

@@ -4,38 +4,50 @@ plugins {
android {
namespace 'com.anabasis.vkchatmanager'
compileSdk {
version = release(36)
}
compileSdk 36
defaultConfig {
applicationId "com.anabasis.vkchatmanager"
minSdk 26
targetSdk 36
versionCode 2
versionName "1.1"
versionCode 10103
versionName "1.1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
// --- Настройка signingConfigs ---
signingConfigs {
release {
// Путь к keystore — от корня проекта
storeFile file("release.keystore")
storePassword System.getenv("KEYSTORE_PASSWORD") ?: "change_me"
keyAlias System.getenv("KEY_ALIAS") ?: "change_me"
keyPassword System.getenv("KEY_PASSWORD") ?: "change_me"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// Используем signingConfig release
signingConfig signingConfigs.release
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.viewpager2:viewpager2:1.1.0'
implementation "com.google.android.material:material:1.12.0"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'org.json:json:20240303'
implementation libs.recyclerview
implementation libs.viewpager2
implementation libs.material
implementation libs.swiperefreshlayout
implementation libs.okhttp
implementation libs.json
}

View File

@@ -42,10 +42,13 @@ public class ChatListFragment extends Fragment {
@Override
@SuppressWarnings("unchecked")
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
chats = (ArrayList<VkChat>)
getArguments().getSerializable(ARG_CHATS);
Bundle arguments = getArguments();
if (arguments != null) {
chats = (ArrayList<VkChat>) arguments.getSerializable(ARG_CHATS);
}
if (chats == null) chats = new ArrayList<>();
}
@@ -90,11 +93,4 @@ public class ChatListFragment extends Fragment {
if (c.selected) res.add(c);
return res;
}
public void updateChats() {
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
}

View File

@@ -2,7 +2,6 @@ package com.anabasis.vkchatmanager.dialogs;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
@@ -33,7 +32,7 @@ public class MultiLinkDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_multilink, null);
View view = getLayoutInflater().inflate(R.layout.dialog_multilink, null);
EditText input = view.findViewById(R.id.linksInput);
return new MaterialAlertDialogBuilder(requireContext())

View File

@@ -23,7 +23,7 @@ public class VkApiClient {
"&v=5.131";
Request r = new Request.Builder().url(url).build();
Response res = client.newCall(r).execute();
try (Response res = client.newCall(r).execute()) {
String body = res.body().string();
JSONObject json = new JSONObject(body);
@@ -38,6 +38,7 @@ public class VkApiClient {
return json;
}
}
public JSONArray getChats() throws Exception {
return call("messages.getConversations", "count=200&filter=all")

View File

@@ -121,7 +121,9 @@
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingEnd="16dp" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
</RelativeLayout>

BIN
assets/app_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
assets/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -1,20 +1,20 @@
[versions]
agp = "9.0.0"
coreKtx = "1.17.0"
junit = "4.13.2"
junitVersion = "1.3.0"
espressoCore = "3.7.0"
appcompat = "1.7.1"
material = "1.13.0"
recyclerview = "1.4.0"
viewpager2 = "1.1.0"
swiperefreshlayout = "1.2.0"
okhttp = "5.3.2"
json = "20251224"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" }
viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version.ref = "viewpager2" }
swiperefreshlayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swiperefreshlayout" }
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
json = { group = "org.json", name = "json", version.ref = "json" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }

View File

@@ -11,6 +11,7 @@ pluginManagement {
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {