Skip to content

Commit

Permalink
Merge pull request #75 from voxeet/feature/android_fix_invitation
Browse files Browse the repository at this point in the history
Feature/android fix invitation
  • Loading branch information
codlab authored Nov 1, 2022
2 parents 3f3bdb2 + 57098ec commit f9a10e7
Show file tree
Hide file tree
Showing 18 changed files with 413 additions and 937 deletions.
33 changes: 17 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,25 @@ cordova plugin add cordova-plugin-voxeet \

### Installation on Android

Edit the `AndroidManifest.xml` file and put the following xml node in the :
Edit your config.xml to add the following :

```xml
<meta-data
android:name="voxeet_incoming_accepted_class"
android:value="fully.qualified.package.name.to.the.default.cordova.activity" />
<platform name="android">
...

<config-file target="AndroidManifest.xml" parent="/manifest/application">
<meta-data
android:name="voxeet_incoming_accepted_class"
android:value="fully.qualified.package.name.to.the.default.cordova.activity" />
</config-file>

<edit-config
file="app/src/main/AndroidManifest.xml"
target="/manifest/application/activity[@android:name='MainActivity']"
mode="merge">
<activity android:exported="true" android:enabled="true" />
</edit-config>
</platform>
```

To enable the push notifications in your Android application, add the following preference at the end of the `config.xml` file:
Expand All @@ -58,18 +71,6 @@ To enable the push notifications in your Android application, add the following
</widget>
```

Due to new mechanisms preventing standard behaviour, **Android Q** and later, require the following modification done to the `config.xml` file. This was previously optional. However, if not set, a caught-exception will be set in the logs.

```xml
<config-file parent="./application" target="AndroidManifest.xml">
<meta-data
android:name="voxeet_incoming_accepted_class"
android:value="fully.qualified.package.name.to.the.default.cordova.activity" />
</config-file>
```

If this is not set, a caught-exception will be set in the logs.

## Implementation

After installation, the project exports all the elements to integrate them into your application. They are directly injected inside the global variables of your project; you can directly call the `VoxeetSDK` instance and the `UserInfo` constructor whenever needed.
Expand Down
30 changes: 21 additions & 9 deletions plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
-->

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-voxeet"
version="1.5.7">
<name>Voxeet</name>
Expand Down Expand Up @@ -60,6 +61,7 @@

<!-- android -->
<platform name="android">

<config-file target="AndroidManifest.xml" parent="/manifest">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expand All @@ -80,9 +82,16 @@
</config-file>

<config-file target="AndroidManifest.xml" parent="/manifest/application">
<activity android:label="Incoming Call" android:name="com.voxeet.toolkit.notification.CordovaIncomingCallActivity" android:theme="@style/Theme.AppCompat.NoActionBar"></activity>
<activity android:label="Incoming Call" android:name="com.voxeet.toolkit.notification.CordovaIncomingFromNotificationActivity" android:theme="@style/Theme.AppCompat.NoActionBar"></activity>

<activity android:label="Incoming Call"
android:name="com.voxeet.toolkit.notification.CordovaIncomingCallActivity"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:enabled="true"
android:exported="true" />

<service android:name="com.voxeet.toolkit.notification.DefaultIncomingNotificationService"
android:enabled="true"
android:exported="false" />

<meta-data
android:name="voxeet_incoming_class"
android:value="com.voxeet.toolkit.notification.CordovaIncomingCallActivity" />
Expand All @@ -104,18 +113,21 @@
</feature>
</config-file>

<source-file src="src/android/com/voxeet/toolkit/utils/SafeLock.java" target-dir="src/com/voxeet/toolkit/utils" />

<source-file src="src/android/com/voxeet/toolkit/CordovaActivityWrapper.java" target-dir="src/com/voxeet/toolkit" />
<source-file src="src/android/com/voxeet/toolkit/CordovaPermissionHelper.java" target-dir="src/com/voxeet/toolkit" />
<source-file src="src/android/com/voxeet/toolkit/CordovaRootViewProvider.java" target-dir="src/com/voxeet/toolkit" />
<source-file src="src/android/com/voxeet/toolkit/VoxeetApplication.java" target-dir="src/com/voxeet/toolkit" />
<source-file src="src/android/com/voxeet/toolkit/VoxeetCordova.java" target-dir="src/com/voxeet/toolkit" />
<source-file src="src/android/com/voxeet/toolkit/VoxeetMediaCordova.java" target-dir="src/com/voxeet/toolkit" />
<source-file src="src/android/com/voxeet/toolkit/CordovaRootViewProvider.java" target-dir="src/com/voxeet/toolkit" />

<source-file src="src/android/com/voxeet/toolkit/notification/CordovaIncomingFromNotificationActivity.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/CordovaIncomingNotification.java" target-dir="src/com/voxeet/toolkit/notification" />

<source-file src="src/android/com/voxeet/toolkit/notification/CordovaIncomingBundleChecker.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/CallUtils.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/CordovaIncomingCallActivity.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/CordovaIncomingNotification.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/CordovaIncomingNotificationIntentProvider.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/DefaultIncomingNotificationService.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/RNBundleChecker.java" target-dir="src/com/voxeet/toolkit/notification" />
<source-file src="src/android/com/voxeet/toolkit/notification/CallUtils.java" target-dir="src/com/voxeet/toolkit/notification" />

<hook type="after_prepare" src="voxeet_application.js" />
</platform>
Expand Down
37 changes: 27 additions & 10 deletions src/android/build-extras.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,21 @@ buildscript {
}

repositories {
maven { url "https://android-sdk.voxeet.com/release" }
maven { url "https://android-sdk.voxeet.com/beta" }
google()
jcenter()
mavenCentral()
mavenLocal()
maven {
url "https://android-sdk.voxeet.com/release"
content {
includeGroup "com.voxeet.sdk"
}
}
maven {
url "https://android-sdk.voxeet.com/beta"
content {
includeGroup "com.voxeet.sdk"
}
}
}

android {
Expand Down Expand Up @@ -48,20 +58,27 @@ new XmlSlurper().parse(file('../app/src/main/res/xml/config.xml')).preference.ea
}

dependencies {
compile 'com.android.support:multidex:1.0.3'
implementation "androidx.appcompat:appcompat:1.1.0"
implementation "androidx.annotation:annotation:1.1.0"
implementation "androidx.multidex:multidex:2.0.1"

compile ('com.voxeet.sdk:uxkit:3.2.1') {
transitive = true
//add by default the optional firebase dependency
api ("com.voxeet.sdk:uxkit-firebase:3.7.2") {
exclude group: 'androidx.appcompat', module: 'appcompat'
}
api ("com.voxeet.sdk:uxkit-system-service:3.7.2") {
exclude group: 'androidx.appcompat', module: 'appcompat'
}

if (push) {
compile ('com.voxeet.sdk:uxkit-firebase:3.2.1')
//use the latest uxkit
api ('com.voxeet.sdk:uxkit:3.7.2') {
exclude group: 'androidx.appcompat', module: 'appcompat'
}
}

//use the push variable
if (push) {
if (push && false) {
cdvPluginPostBuildExtras.add({
apply plugin: com.google.gms.googleservices.GoogleServicesPlugin
})
}
}
40 changes: 40 additions & 0 deletions src/android/com/voxeet/toolkit/CordovaActivityWrapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.voxeet.toolkit;

import android.content.Intent;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.voxeet.sdk.events.sdk.ConferenceStatusUpdatedEvent;
import com.voxeet.uxkit.common.activity.VoxeetCommonAppCompatActivityWrapper;
import com.voxeet.uxkit.common.activity.bundle.DefaultIncomingBundleChecker;
import com.voxeet.uxkit.common.activity.bundle.IncomingBundleChecker;
import com.voxeet.uxkit.service.VoxeetSystemService;

public class CordovaActivityWrapper extends VoxeetCommonAppCompatActivityWrapper<VoxeetSystemService> {
public CordovaActivityWrapper(@NonNull AppCompatActivity parentActivity) {
super(parentActivity);
}

@Override
protected void onSdkServiceAvailable() {

}

@Override
protected void onConferenceState(@NonNull ConferenceStatusUpdatedEvent conferenceStatusUpdatedEvent) {

}

@Override
protected boolean canBeRegisteredToReceiveCalls() {
return true;
}

@Override
public IncomingBundleChecker createIncomingBundleChecker(@Nullable Intent intent) {
if(null == intent) return new DefaultIncomingBundleChecker(new Intent(), null);
return new DefaultIncomingBundleChecker(intent, null);
}
}
30 changes: 30 additions & 0 deletions src/android/com/voxeet/toolkit/CordovaPermissionHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.voxeet.toolkit;

import android.Manifest;

import com.voxeet.promise.Promise;
import com.voxeet.uxkit.common.permissions.PermissionController;
import com.voxeet.uxkit.common.permissions.PermissionResult;

import java.util.Arrays;
import java.util.List;

public class CordovaPermissionHelper {

private final static List<String> PERMISSIONS = Arrays.asList(Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA);

public static Promise<Boolean> requestDefaultPermission() {
return new Promise<>(solver -> {

PermissionController.requestPermissions(PERMISSIONS).then(permissionResults -> {
for (PermissionResult res : permissionResults) {
if (res.isFor(Manifest.permission.RECORD_AUDIO) && !res.isGranted) {
solver.resolve(false);
return;
}
}
solver.resolve(true);
}).error(solver::reject);
});
}
}
23 changes: 8 additions & 15 deletions src/android/com/voxeet/toolkit/CordovaRootViewProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,39 @@
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.support.annotation.NonNull;

import androidx.annotation.NonNull;

import com.voxeet.VoxeetSDK;
import com.voxeet.sdk.events.sdk.ConferenceStatusUpdatedEvent;
import com.voxeet.sdk.json.ConferenceDestroyedPush;
import com.voxeet.toolkit.notification.CordovaIncomingBundleChecker;
import com.voxeet.toolkit.notification.CordovaIncomingCallActivity;
import com.voxeet.uxkit.common.activity.bundle.DefaultIncomingBundleChecker;
import com.voxeet.uxkit.controllers.VoxeetToolkit;
import com.voxeet.uxkit.providers.rootview.DefaultRootViewProvider;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

@Deprecated
public class CordovaRootViewProvider extends DefaultRootViewProvider {
private final Application mApplication;
private CordovaIncomingBundleChecker mCordovaIncomingBundleChecker;
private DefaultIncomingBundleChecker mCordovaIncomingBundleChecker;

/**
* @param application a valid application which be called to obtain events
* @param toolkit
*/
public CordovaRootViewProvider(@NonNull Application application, @NonNull VoxeetToolkit toolkit) {
super(application, toolkit);

mApplication = application;
}

@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
super.onActivityCreated(activity, bundle);

if (!CordovaIncomingCallActivity.class.equals(activity.getClass())) {
mCordovaIncomingBundleChecker = new CordovaIncomingBundleChecker(mApplication, activity.getIntent(), null);
mCordovaIncomingBundleChecker = new DefaultIncomingBundleChecker(activity.getIntent(), null);
mCordovaIncomingBundleChecker.createActivityAccepted(activity);
}
}
Expand All @@ -60,19 +59,13 @@ public void onActivityResumed(Activity activity) {
EventBus.getDefault().register(this); //registering this activity
}

CordovaIncomingBundleChecker checker = CordovaIncomingCallActivity.CORDOVA_ROOT_BUNDLE;
DefaultIncomingBundleChecker checker = CordovaIncomingCallActivity.CORDOVA_ROOT_BUNDLE;
if (null != checker && checker.isBundleValid()) {
if (VoxeetSDK.session().isSocketOpen()) {
if (VoxeetSDK.session().isOpen()) {
checker.onAccept();
CordovaIncomingCallActivity.CORDOVA_ROOT_BUNDLE = null;
}
}
//TODO next steps, fix this call here
/*mCordovaIncomingBundleChecker = new CordovaIncomingBundleChecker(mApplication, activity.getIntent(), null);
if (mCordovaIncomingBundleChecker.isBundleValid()) {
mCordovaIncomingBundleChecker.onAccept();
}*/
}
}

Expand Down
11 changes: 4 additions & 7 deletions src/android/com/voxeet/toolkit/VoxeetApplication.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.voxeet.toolkit;

import android.support.annotation.Nullable;
import android.support.multidex.MultiDexApplication;
import android.util.Log;

import androidx.annotation.Nullable;
import androidx.multidex.MultiDexApplication;

import com.voxeet.sdk.preferences.VoxeetPreferences;
import com.voxeet.sdk.utils.VoxeetEnvironmentHolder;
import com.voxeet.uxkit.controllers.VoxeetToolkit;
Expand All @@ -28,11 +29,7 @@ public void onCreate() {

VoxeetToolkit.instance().enableOverlay(true);

// force a default voxeet preferences manager
// in sdk mode, no issues
VoxeetPreferences.init(this, new VoxeetEnvironmentHolder(this));

VoxeetCordova.initNotificationCenter();
VoxeetCordova.initNotificationCenter(this);

// change the overlay used by default
VoxeetToolkit.instance().getConferenceToolkit().setDefaultOverlayState(OverlayState.EXPANDED);
Expand Down
Loading

0 comments on commit f9a10e7

Please sign in to comment.