We can't ask them for it directly. The library I am using here will first check if the permission is already granted. If so onPermissionGranted will fire and we will start the call. If not, the Connection will be created in a dialling state and a notification will appear saying that the app needs additional permissions. Once the user taps the notification they will then be asked to allow microphone access. If they say yes, the call will proceed. If they deny, the call will terminate.
326 lines
10 KiB
Groovy
326 lines
10 KiB
Groovy
// Top-level build file where you can add configuration options common to all
|
|
// sub-projects/modules.
|
|
buildscript {
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
}
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:7.1.1'
|
|
}
|
|
}
|
|
|
|
apply plugin: 'com.android.application'
|
|
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
jcenter()
|
|
}
|
|
|
|
// https://stackoverflow.com/a/38105112/8611
|
|
def urlFile = { url, name ->
|
|
File file = new File("$buildDir/download/${name}")
|
|
file.parentFile.mkdirs()
|
|
if (!file.exists()) {
|
|
new URL(url).withInputStream { downloadStream ->
|
|
file.withOutputStream { fileOut ->
|
|
fileOut << downloadStream
|
|
}
|
|
}
|
|
}
|
|
files(file.absolutePath)
|
|
}
|
|
|
|
configurations {
|
|
playstoreImplementation
|
|
compatImplementation
|
|
conversationsFreeCompatImplementation
|
|
conversationsPlaystoreCompatImplementation
|
|
conversationsPlaystoreSystemImplementation
|
|
quicksyPlaystoreCompatImplementation
|
|
quicksyPlaystoreSystemImplementation
|
|
quicksyFreeCompatImplementation
|
|
quicksyImplementation
|
|
}
|
|
|
|
dependencies {
|
|
implementation 'androidx.viewpager:viewpager:1.0.0'
|
|
|
|
playstoreImplementation('com.google.firebase:firebase-messaging:23.0.0') {
|
|
exclude group: 'com.google.firebase', module: 'firebase-core'
|
|
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
|
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
|
}
|
|
conversationsPlaystoreCompatImplementation("com.android.installreferrer:installreferrer:2.2")
|
|
conversationsPlaystoreSystemImplementation("com.android.installreferrer:installreferrer:2.2")
|
|
quicksyPlaystoreCompatImplementation 'com.google.android.gms:play-services-auth-api-phone:18.0.1'
|
|
quicksyPlaystoreSystemImplementation 'com.google.android.gms:play-services-auth-api-phone:18.0.1'
|
|
implementation 'org.sufficientlysecure:openpgp-api:10.0'
|
|
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
|
|
implementation 'androidx.appcompat:appcompat:1.3.1'
|
|
implementation 'androidx.exifinterface:exifinterface:1.3.3'
|
|
implementation 'androidx.cardview:cardview:1.0.0'
|
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
|
implementation 'androidx.emoji:emoji:1.1.0'
|
|
implementation 'com.google.android.material:material:1.4.0'
|
|
compatImplementation 'androidx.emoji:emoji-appcompat:1.1.0'
|
|
conversationsFreeCompatImplementation 'androidx.emoji:emoji-bundled:1.1.0'
|
|
quicksyFreeCompatImplementation 'androidx.emoji:emoji-bundled:1.1.0'
|
|
implementation 'org.bouncycastle:bcmail-jdk15on:1.64'
|
|
//zxing stopped supporting Java 7 so we have to stick with 3.3.3
|
|
//https://github.com/zxing/zxing/issues/1170
|
|
implementation 'com.google.zxing:core:3.3.3'
|
|
implementation 'de.measite.minidns:minidns-hla:0.2.4'
|
|
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
|
|
implementation 'org.whispersystems:signal-protocol-java:2.6.2'
|
|
implementation 'com.makeramen:roundedimageview:2.3.0'
|
|
implementation "com.wefika:flowlayout:0.4.1"
|
|
implementation 'com.otaliastudios:transcoder:0.10.4'
|
|
|
|
implementation 'org.jxmpp:jxmpp-jid:1.0.2'
|
|
implementation 'org.osmdroid:osmdroid-android:6.1.10'
|
|
implementation 'org.hsluv:hsluv:0.2'
|
|
implementation 'org.conscrypt:conscrypt-android:2.5.2'
|
|
implementation 'me.drakeet.support:toastcompat:1.1.0'
|
|
implementation "com.leinardi.android:speed-dial:3.2.0"
|
|
|
|
implementation "com.squareup.retrofit2:retrofit:2.9.0"
|
|
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
|
|
implementation "com.squareup.okhttp3:okhttp:4.9.3"
|
|
|
|
implementation 'com.google.guava:guava:30.1.1-android'
|
|
implementation 'io.michaelrocks:libphonenumber-android:8.12.36'
|
|
implementation 'io.github.nishkarsh:android-permissions:2.0.54'
|
|
implementation urlFile('https://cloudflare-ipfs.com/ipfs/QmeqMiLxHi8AAjXobxr3QTfa1bSSLyAu86YviAqQnjxCjM/libwebrtc.aar', 'libwebrtc.aar')
|
|
// INSERT
|
|
}
|
|
|
|
ext {
|
|
travisBuild = System.getenv("TRAVIS") == "true"
|
|
preDexEnabled = System.getProperty("pre-dex", "true")
|
|
abiCodes = ['armeabi-v7a': 1, 'x86': 2, 'x86_64': 3, 'arm64-v8a': 4]
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion 29
|
|
|
|
defaultConfig {
|
|
minSdkVersion 24
|
|
targetSdkVersion 29
|
|
versionCode 42024
|
|
versionName "2.10.3-beta"
|
|
archivesBaseName += "-$versionName"
|
|
applicationId "eu.siacs.conversations"
|
|
resValue "string", "applicationId", applicationId
|
|
def appName = "Conversations"
|
|
resValue "string", "app_name", appName
|
|
buildConfigField "String", "APP_NAME", "\"$appName\"";
|
|
}
|
|
|
|
|
|
configurations {
|
|
implementation.exclude group: 'org.jetbrains' , module:'annotations'
|
|
}
|
|
|
|
dataBinding {
|
|
enabled true
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
flavorDimensions("mode", "distribution", "emoji")
|
|
|
|
productFlavors {
|
|
|
|
quicksy {
|
|
dimension "mode"
|
|
applicationId = "im.quicksy.client"
|
|
resValue "string", "applicationId", applicationId
|
|
|
|
def appName = "Quicksy"
|
|
resValue "string", "app_name", appName
|
|
buildConfigField "String", "APP_NAME", "\"$appName\"";
|
|
}
|
|
|
|
conversations {
|
|
dimension "mode"
|
|
}
|
|
|
|
cheogram {
|
|
dimension "mode"
|
|
|
|
applicationId = "com.cheogram.android"
|
|
resValue "string", "applicationId", applicationId
|
|
|
|
def appName = "Cheogram"
|
|
resValue "string", "app_name", appName
|
|
buildConfigField "String", "APP_NAME", "\"$appName\"";
|
|
}
|
|
|
|
playstore {
|
|
dimension "distribution"
|
|
versionNameSuffix "+p"
|
|
}
|
|
free {
|
|
dimension "distribution"
|
|
versionNameSuffix "+f"
|
|
}
|
|
system {
|
|
dimension "emoji"
|
|
versionNameSuffix "s"
|
|
}
|
|
compat {
|
|
dimension "emoji"
|
|
versionNameSuffix "c"
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
quicksyFreeSystem {
|
|
java {
|
|
srcDir 'src/quicksyFree/java'
|
|
}
|
|
}
|
|
quicksyFreeCompat {
|
|
java {
|
|
srcDir 'src/freeCompat/java'
|
|
srcDir 'src/quicksyFree/java'
|
|
}
|
|
}
|
|
quicksyPlaystoreCompat {
|
|
java {
|
|
srcDir 'src/playstoreCompat/java'
|
|
srcDir 'src/quicksyPlaystore/java'
|
|
}
|
|
res {
|
|
srcDir 'src/playstoreCompat/res'
|
|
srcDir 'src/quicksyPlaystore/res'
|
|
}
|
|
}
|
|
quicksyPlaystoreSystem {
|
|
java {
|
|
srcDir 'src/quicksyPlaystore/java'
|
|
}
|
|
res {
|
|
srcDir 'src/quicksyPlaystore/res'
|
|
}
|
|
}
|
|
conversationsFreeCompat {
|
|
java {
|
|
srcDir 'src/freeCompat/java'
|
|
srcDir 'src/conversationsFree/java'
|
|
}
|
|
}
|
|
conversationsFreeSystem {
|
|
java {
|
|
srcDir 'src/conversationsFree/java'
|
|
}
|
|
}
|
|
cheogramFreeCompat {
|
|
java {
|
|
srcDir 'src/freeCompat/java'
|
|
srcDir 'src/conversationsFree/java'
|
|
}
|
|
}
|
|
cheogramFreeSystem {
|
|
java {
|
|
srcDir 'src/conversationsFree/java'
|
|
}
|
|
}
|
|
conversationsPlaystoreCompat {
|
|
java {
|
|
srcDir 'src/playstoreCompat/java'
|
|
srcDir 'src/conversationsPlaystore/java'
|
|
}
|
|
res {
|
|
srcDir 'src/playstoreCompat/res'
|
|
srcDir 'src/conversationsPlaystore/res'
|
|
}
|
|
}
|
|
conversationsPlaystoreSystem {
|
|
java {
|
|
srcDir 'src/conversationsPlaystore/java'
|
|
}
|
|
res {
|
|
srcDir 'src/conversationsPlaystore/res'
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
shrinkResources true
|
|
minifyEnabled true
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
versionNameSuffix "r"
|
|
}
|
|
debug {
|
|
shrinkResources true
|
|
minifyEnabled true
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
versionNameSuffix "d"
|
|
}
|
|
}
|
|
|
|
|
|
if (new File("signing.properties").exists()) {
|
|
Properties props = new Properties()
|
|
props.load(new FileInputStream(file("signing.properties")))
|
|
|
|
signingConfigs {
|
|
release {
|
|
storeFile file(props['keystore'])
|
|
storePassword props['keystore.password']
|
|
keyAlias props['keystore.alias']
|
|
keyPassword props['keystore.password']
|
|
}
|
|
}
|
|
buildTypes.release.signingConfig = signingConfigs.release
|
|
}
|
|
|
|
lintOptions {
|
|
disable 'MissingTranslation', 'InvalidPackage','AppCompatResource'
|
|
abortOnError false
|
|
}
|
|
|
|
subprojects {
|
|
|
|
afterEvaluate {
|
|
if (getPlugins().hasPlugin('android') ||
|
|
getPlugins().hasPlugin('android-library')) {
|
|
|
|
configure(android.lintOptions) {
|
|
disable 'AndroidGradlePluginVersion', 'MissingTranslation'
|
|
abortOnError false
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
packagingOptions {
|
|
resources {
|
|
excludes += ['META-INF/BCKEY.DSA', 'META-INF/BCKEY.SF']
|
|
}
|
|
}
|
|
lint {
|
|
disable 'MissingTranslation', 'InvalidPackage', 'AppCompatResource'
|
|
}
|
|
|
|
|
|
android.applicationVariants.all { variant ->
|
|
variant.outputs.each { output ->
|
|
def baseAbiVersionCode = project.ext.abiCodes.get(output.getFilter(com.android.build.OutputFile.ABI))
|
|
if (baseAbiVersionCode != null) {
|
|
output.versionCodeOverride = (100 * project.android.defaultConfig.versionCode) + baseAbiVersionCode
|
|
} else {
|
|
output.versionCodeOverride = 100 * project.android.defaultConfig.versionCode
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|