Hopefully fix a few crashing issues

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2018-03-12 18:15:27 +01:00
parent 64adf81e13
commit e0f2a8cb58
4 changed files with 128 additions and 55 deletions

View File

@ -71,6 +71,7 @@ import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.animations.PulseAnimation; import com.nextcloud.talk.utils.animations.PulseAnimation;
import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.webrtc.MagicAudioManager; import com.nextcloud.talk.webrtc.MagicAudioManager;
import com.nextcloud.talk.webrtc.MagicPeerConnectionWrapper; import com.nextcloud.talk.webrtc.MagicPeerConnectionWrapper;
import com.nextcloud.talk.webrtc.MagicWebRTCUtils; import com.nextcloud.talk.webrtc.MagicWebRTCUtils;
@ -168,6 +169,8 @@ public class CallActivity extends AppCompatActivity {
UserUtils userUtils; UserUtils userUtils;
@Inject @Inject
CookieManager cookieManager; CookieManager cookieManager;
@Inject
AppPreferences appPreferences;
PeerConnectionFactory peerConnectionFactory; PeerConnectionFactory peerConnectionFactory;
MediaConstraints audioConstraints; MediaConstraints audioConstraints;
@ -223,7 +226,7 @@ public class CallActivity extends AppCompatActivity {
requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().getDecorView().setSystemUiVisibility(getSystemUiVisibility()); getWindow().getDecorView().setSystemUiVisibility(getSystemUiVisibility());
@ -396,6 +399,7 @@ public class CallActivity extends AppCompatActivity {
public void onMicrophoneClick() { public void onMicrophoneClick() {
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) { if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_MICROPHONE)) {
if (!appPreferences.getPushToTalkIntroShown()) {
spotlightView = new SpotlightView.Builder(this) spotlightView = new SpotlightView.Builder(this)
.introAnimationDuration(300) .introAnimationDuration(300)
.enableRevealAnimation(true) .enableRevealAnimation(true)
@ -416,6 +420,8 @@ public class CallActivity extends AppCompatActivity {
.usageId("pushToTalk") .usageId("pushToTalk")
.show(); .show();
appPreferences.setPushToTalkIntroShown(true);
}
if (!isPTTActive) { if (!isPTTActive) {
audioOn = !audioOn; audioOn = !audioOn;
@ -1457,7 +1463,7 @@ public class CallActivity extends AppCompatActivity {
if (callControls != null) { if (callControls != null) {
if (!show) { if (!show) {
callControls.setVisibility(View.GONE); callControls.setVisibility(View.GONE);
if (spotlightView.getVisibility() != View.GONE) { if (spotlightView != null && spotlightView.getVisibility() != View.GONE) {
spotlightView.setVisibility(View.GONE); spotlightView.setVisibility(View.GONE);
} }
} else { } else {

View File

@ -320,7 +320,6 @@ public class OperationsMenuController extends BaseController {
roomType, null, conversationName); roomType, null, conversationName);
} }
String finalCredentials1 = credentials;
final boolean isGroupCallWorkaroundFinal = isGroupCallWorkaround; final boolean isGroupCallWorkaroundFinal = isGroupCallWorkaround;
ncApi.createRoom(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) ncApi.createRoom(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
.subscribeOn(Schedulers.newThread()) .subscribeOn(Schedulers.newThread())
@ -336,33 +335,7 @@ public class OperationsMenuController extends BaseController {
public void onNext(RoomOverall roomOverall) { public void onNext(RoomOverall roomOverall) {
room = roomOverall.getOcs().getData(); room = roomOverall.getOcs().getData();
if (conversationType.equals(Room.RoomType.ROOM_PUBLIC_CALL) && isGroupCallWorkaroundFinal) { if (conversationType.equals(Room.RoomType.ROOM_PUBLIC_CALL) && isGroupCallWorkaroundFinal) {
ncApi.makeRoomPrivate(finalCredentials1, ApiUtils.getUrlForRoomVisibility performGroupCallWorkaround(credentials);
(userEntity.getBaseUrl(), room.getToken()))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.retry(1)
.subscribe(new Observer<GenericOverall>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(GenericOverall genericOverall) {
inviteUsersToAConversation();
}
@Override
public void onError(Throwable e) {
showResultImage(false, false);
dispose();
}
@Override
public void onComplete() {
dispose();
}
});
} else { } else {
inviteUsersToAConversation(); inviteUsersToAConversation();
} }
@ -395,6 +368,36 @@ public class OperationsMenuController extends BaseController {
} }
} }
private void performGroupCallWorkaround(String credentials) {
ncApi.makeRoomPrivate(credentials, ApiUtils.getUrlForRoomVisibility(userEntity.getBaseUrl(), room.getToken()))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.retry(1)
.subscribe(new Observer<GenericOverall>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(GenericOverall genericOverall) {
inviteUsersToAConversation();
}
@Override
public void onError(Throwable e) {
showResultImage(false, false);
dispose();
}
@Override
public void onComplete() {
dispose();
}
});
}
private void showResultImage(boolean everythingOK, boolean isGuestSupportError) { private void showResultImage(boolean everythingOK, boolean isGuestSupportError) {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);

View File

@ -21,22 +21,27 @@
package com.nextcloud.talk.jobs; package com.nextcloud.talk.jobs;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.util.Log;
import com.bluelinelabs.logansquare.LoganSquare; import com.bluelinelabs.logansquare.LoganSquare;
import com.evernote.android.job.Job; import com.evernote.android.job.Job;
import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.database.UserEntity;
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.database.user.UserUtils;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import autodagger.AutoInjector; import autodagger.AutoInjector;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import okhttp3.JavaNetCookieJar; import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
@ -82,14 +87,63 @@ public class CapabilitiesJob extends Job {
ncApi.getCapabilities(ApiUtils.getCredentials(internalUserEntity.getUsername(), ncApi.getCapabilities(ApiUtils.getCredentials(internalUserEntity.getUsername(),
internalUserEntity.getToken()), ApiUtils.getUrlForCapabilities(internalUserEntity.getBaseUrl())) internalUserEntity.getToken()), ApiUtils.getUrlForCapabilities(internalUserEntity.getBaseUrl()))
.subscribeOn(Schedulers.newThread()) .subscribeOn(Schedulers.newThread())
.subscribe(capabilitiesOverall -> userUtils.createOrUpdateUser(null, null, .subscribe(new Observer<CapabilitiesOverall>() {
null, null, @Override
null, null, null, internalUserEntity.getId(), public void onSubscribe(Disposable d) {
LoganSquare.serialize(capabilitiesOverall.getOcs().getData().getCapabilities()))
.subscribeOn(Schedulers.newThread()) }
.subscribe());
@Override
public void onNext(CapabilitiesOverall capabilitiesOverall) {
updateUser(capabilitiesOverall, internalUserEntity);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
} }
return Result.SUCCESS; return Result.SUCCESS;
} }
private void updateUser(CapabilitiesOverall capabilitiesOverall, UserEntity internalUserEntity) {
try {
userUtils.createOrUpdateUser(null, null,
null, null,
null, null, null, internalUserEntity.getId(),
LoganSquare.serialize(capabilitiesOverall.getOcs().getData().getCapabilities()))
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<UserEntity>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(UserEntity userEntity) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
} catch (IOException e) {
Log.e(TAG, "Failed to create or update user");
}
}
} }

View File

@ -117,6 +117,16 @@ public interface AppPreferences {
@KeyByString("push_token") @KeyByString("push_token")
void removePushToken(); void removePushToken();
@KeyByString("pushToTalk_intro_shown")
boolean getPushToTalkIntroShown();
@KeyByString("pushToTalk_intro_shown")
void setPushToTalkIntroShown(boolean shown);
@KeyByString("pushToTalk_intro_shown")
void removePushToTalkIntroShown();
@ClearMethod @ClearMethod
void clear(); void clear();
} }