Skip to content

Commit

Permalink
Merge pull request #678 from pangeachat/merge-analytics
Browse files Browse the repository at this point in the history
Merge analytics
  • Loading branch information
ggurdin authored Sep 13, 2024
2 parents 3972d02 + 39396ab commit ee70ccb
Show file tree
Hide file tree
Showing 224 changed files with 30,251 additions and 32,801 deletions.
File renamed without changes.
27 changes: 0 additions & 27 deletions .github/workflows/issue_pr_management.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ jobs:
- run: cat .github/workflows/versions.env >> $GITHUB_ENV
- uses: subosito/flutter-action@v2
with:
flutter-version: 3.19.6 # Workaround for not working on 3.22
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev -y
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/versions.env
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
FLUTTER_VERSION=3.22.2
FLUTTER_VERSION=3.24.1
JAVA_VERSION=17
111 changes: 111 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,114 @@
## v1.22.0

FluffyChat v1.22.0 brings a new design for spaces, replaces the bottom navigation bar with filter chips and makes it finally possible to play ogg audio messages on iOS. A lot of other fixes and improvements have also been added to this release.

FluffyChat also now uses the new authenticated media endpoints if the server supports Matrix v1.11 or
mentions the msc with the key `org.matrix.msc3916.stable` in the `unstable_features`.

- build: (deps): bump docker/build-push-action from 5 to 6 (dependabot[bot])
- build(deps): bump rexml from 3.2.8 to 3.3.3 in /ios (dependabot[bot])
- build: Remove permissions for screensharing until it is fixed (Krille)
- build: Update android target sdk to 34 (Krille)
- build: Update dependencies after release (krille-chan)
- build: Update to Flutter 3.22.3 (krille-chan)
- build: Update to Matrix SDK 0.32.0 (Krille)
- chore: Bring back add to space feature (Krille)
- chore: Bring back navrail (krille-chan)
- chore: Bring back separate chat types (krille-chan)
- chore: Chat permissions page follow up (krille-chan)
- chore: Do not hide error on file sending (Krille)
- chore: Improved create group and space design (Krille)
- chore: Make VOIP plugin less noisy in logs (krille-chan)
- chore: Move default PR template to correct dir (krille-chan)
- chore: nicer bottom sheets (krille-chan)
- chore: Nicer empty chat list placeholder (krille-chan)
- chore: Polish public room bottom sheet (krille-chan)
- chore: Show short forms of months and week days in UI (krille-chan)
- chore: Sligthly improve chat permissions page design (krille-chan)
- design: Add snackbar with link to changelog on new version (Krille)
- docs: Update privacy policy (krille-chan)
- feat: Support for matrix auth media endpoints
- feat: Convert opus to aac on iOS before playing (Krille)
- feat: New spaces and chat list design (krille-chan)
- feat: Record voice message with opus/ogg if supported (Krille)
- feat: Send voice messages from web (Krille)
- fix: Display only available join rules (Krille)
- fix: Path correct userId to ignore list (krille-chan)
- fix: Scroll to event missing the position (Krille)
- Fix web base url and privacy url configuration processing (dlyrsk)
- refactor: Clean up some widths (krille-chan)
- refactor: Design polishment and better user viewer (Krille)
- refactor: Migrate android gradle plugin (Krille)
- refactor: Only initialize FlutterLocalNotificationsPlugin once (krille-chan)
- refactor: Recording dialog (Krille)
- Refactor: Reduce .of(context) calls theme (Thomas Klein Langenhorst)
- refactor: Use cached network image for mxc image uris (Krille)
- Translated using Weblate (Arabic) (kdh8219)
- Translated using Weblate (Arabic) (Rex_sa)
- Translated using Weblate (Basque) (kdh8219)
- Translated using Weblate (Basque) (xabirequejo)
- Translated using Weblate (Chinese (Simplified)) (kdh8219)
- Translated using Weblate (Chinese (Simplified)) (大王叫我来巡山)
- Translated using Weblate (Chinese (Traditional)) (kdh8219)
- Translated using Weblate (Chinese (Traditional)) (Lukas)
- Translated using Weblate (Chinese (Traditional)) (Ricky From Hong Kong)
- Translated using Weblate (Chinese (Traditional)) (不知火 Shiranui)
- Translated using Weblate (Croatian) (Milo Ivir)
- Translated using Weblate (Czech) (Anonymous)
- Translated using Weblate (Czech) (Michal Bedáň)
- Translated using Weblate (Dutch) (Guacamolie)
- Translated using Weblate (Dutch) (Jelv)
- Translated using Weblate (Dutch) (Thomas Klein Langenhorst)
- Translated using Weblate (Esperanto) (Anonymous)
- Translated using Weblate (Estonian) (kdh8219)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (Finnish) (Anonymous)
- Translated using Weblate (French) (Sovkipyk)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (German) (Christian)
- Translated using Weblate (German) (Pixelcode)
- Translated using Weblate (German) (tct123)
- Translated using Weblate (Hebrew) (Anonymous)
- Translated using Weblate (Indonesian) (Linerly)
- Translated using Weblate (Irish) (Anonymous)
- Translated using Weblate (Japanese) (Anonymous)
- Translated using Weblate (Korean) (kdh8219)
- Translated using Weblate (Lithuanian) (Anonymous)
- Translated using Weblate (Norwegian Bokmål) (Anonymous)
- Translated using Weblate (Persian) (Anonymous)
- Translated using Weblate (Portuguese (Portugal)) (Anonymous)
- Translated using Weblate (Romanian) (Anonymous)
- Translated using Weblate (Russian) (-)
- Translated using Weblate (Serbian) (Anonymous)
- Translated using Weblate (Slovenian) (Anonymous)
- Translated using Weblate (Spanish) (Anonymous)
- Translated using Weblate (Turkish) (kdh8219)
- Translated using Weblate (Turkish) (Oğuz Ersen)
- Translated using Weblate (Ukrainian) (Bezruchenko Simon)
- Translated using Weblate (Ukrainian) (Ihor Hordiichuk)

## v1.21.2
Updates the Matrix Dart SDK to fix some minor bugs.

- Added translation using Weblate (Lojban) (Zig-Rust-Odin)
- build: Update matrix dart sdk (Krille)
- chore: Update last event after decryption (Krille)
- fix: Correctly localize time of date (Krille)
- refactor: Omit local types (Krille)
- Translated using Weblate (Arabic) (Rex_sa)
- Translated using Weblate (Basque) (xabirequejo)
- Translated using Weblate (Chinese (Simplified)) (大王叫我来巡山)
- Translated using Weblate (Croatian) (Milo Ivir)
- Translated using Weblate (Estonian) (Priit Jõerüüt)
- Translated using Weblate (Galician) (josé m)
- Translated using Weblate (Hungarian) (H Tamás)
- Translated using Weblate (Korean) (kdh8219)
- Translated using Weblate (Latvian) (Edgars Andersons)
- Translated using Weblate (Polish) (Eryk Michalak)
- Translated using Weblate (Portuguese (Brazil)) (lucasmz-dev)
- Translated using Weblate (Russian) (Nicholas Winterhalter)
- Translated using Weblate (Turkish) (Oğuz Ersen)

## v1.21.1
- build: Update Matrix Dart SDK (Krille)
- build: Update to Flutter 3.22.2 (krille-chan)
Expand Down
30 changes: 4 additions & 26 deletions PRIVACY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,29 @@
FluffyChat is available on Android, iOS and as a web version. Desktop versions for Windows, Linux and macOS may follow.

* [Matrix](#matrix)
* Sentry
* [Database](#database)
* [Encryption](#encryption)
* [App Permissions](#app-permissions)
* [Push Notifications](#push-notifications)
* [Stories](#stories)

## Matrix<a id="matrix"/>
FluffyChat uses the Matrix protocol. This means that FluffyChat is just a client that can be connected to any compatible matrix server. The respective data protection agreement of the server selected by the user then applies.

For convenience, one or more servers are set as default that the FluffyChat developers consider trustworthy. The developers of FluffyChat do not guarantee their trustworthiness. Before the first communication, users are informed which server they are connecting to.

FluffyChat only communicates with the selected server, with sentry.io if enabled and with [OpenStreetMap](https://openstreetmap.org) to display maps.
FluffyChat only communicates with the selected server and with [OpenStreetMap](https://openstreetmap.org) to display maps.

More information is available at: [https://matrix.org](https://matrix.org)

## Database<a id="database"/>
FluffyChat caches some data received from the server in a local database on the device of the user.
FluffyChat caches some data received from the server in a local sqflite database on the device of the user. On web indexedDB is used. FluffyChat always tries to encrypt the database by using SQLCipher and stores the encryption key in the [Secure Storage](https://pub.dev/packages/flutter_secure_storage) of the device.

More information is available at: [https://pub.dev/packages/hive](https://pub.dev/packages/hive)
More information is available at: [https://pub.dev/packages/sqflite](https://pub.dev/packages/sqflite) and [https://pub.dev/packages/sqlcipher_flutter_libs](https://pub.dev/packages/sqlcipher_flutter_libs)

## Encryption<a id="encryption"/>
All communication of substantive content between Fluffychat and any server is done in secure way, using transport encryption to protect it.

FluffyChat is able to use End-To-End-Encryption as a tech preview.
FluffyChat also uses End-To-End-Encryption by using [libolm](https://gitlab.matrix.org/matrix-org/olm) and enables it by default for private chats.

## App Permissions<a id="app-permissions"/>

Expand Down Expand Up @@ -94,23 +92,3 @@ A typical push notification could look like this:
```

FluffyChat sets the `event_id_only` flag at the Matrix Server. This server is then responsible to send the correct data.

## Stories<a id="stories"/>

FluffyChat supports stories which is a feature similar to WhatsApp status or Instagram stories. However it is just a different GUI for the same room-related communication. More information about the feature can be found here:

https://github.com/krillefear/matrix-doc/blob/main/proposals/3588-stories-as-rooms.md

Stories are basically:

- End to end encrypted rooms
- Read-only rooms with only one admin who can post stuff (while there is no technical limitation to have multiple admins)

By default:

- The user has to invite all contacts manually to a story room
- The user can only invite contacts (matrix users the user shares a DM room with) to the story room
- The story room is created when the first story is posted
- User can mute and leave story rooms

The user is informed in the app that in theory all contacts can see each other in the story room. The user must give consent here. However the user is at any time able to create a group chat and invite all of their contacts to this chat in any matrix client which has the same result.
28 changes: 12 additions & 16 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
//id "com.google.gms.google-services"
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
Expand All @@ -6,11 +13,6 @@ if (localPropertiesFile.exists()) {
}
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
Expand All @@ -21,11 +23,6 @@ if (flutterVersionName == null) {
flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
Expand All @@ -44,7 +41,10 @@ android {
}

defaultConfig {
// #Pangea
// applicationId "chat.fluffy.fluffychat"
applicationId "com.talktolearn.chat"
// Pangea#
minSdkVersion 21
targetSdkVersion 34
versionCode flutterVersionCode.toInteger()
Expand All @@ -66,8 +66,7 @@ android {
buildTypes {
debug {
signingConfig signingConfigs.debug
applicationIdSuffix ""
versionNameSuffix ""
versionNameSuffix "-debug"
}
release {
signingConfig signingConfigs.release
Expand All @@ -87,9 +86,6 @@ flutter {
}

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
//implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
implementation 'androidx.multidex:multidex:2.0.1'
}

//apply plugin: 'com.google.gms.google-services'
}
2 changes: 0 additions & 2 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,12 @@
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

<uses-permission android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- #Pangea -->
<uses-permission android:name="com.android.vending.BILLING" />
Expand Down
16 changes: 1 addition & 15 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,3 @@
buildscript {
ext.kotlin_version = '1.8.0'
repositories {
google()
mavenCentral()
}

dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.13'
}
}

allprojects {
repositories {
google()
Expand All @@ -29,4 +15,4 @@ subprojects {

tasks.register("clean", Delete) {
delete rootProject.buildDir
}
}
31 changes: 23 additions & 8 deletions android/settings.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
include ':app'
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}()

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.1.2" apply false
id "org.jetbrains.kotlin.android" version "1.8.0" apply false
// id "com.google.gms.google-services" version "4.3.8" apply false
}

include ":app"
Loading

0 comments on commit ee70ccb

Please sign in to comment.