kopia lustrzana https://github.com/ryukoposting/Signal-Android
Remove SLE from EditProxyViewModel.
rodzic
c5b4f44ab8
commit
5f0d37739a
|
@ -21,6 +21,7 @@ import org.thoughtcrime.securesms.R;
|
|||
import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||
import org.thoughtcrime.securesms.util.LifecycleDisposable;
|
||||
import org.thoughtcrime.securesms.util.SignalProxyUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
@ -40,6 +41,7 @@ public class EditProxyFragment extends Fragment {
|
|||
private View shareButton;
|
||||
private CircularProgressMaterialButton saveButton;
|
||||
private EditProxyViewModel viewModel;
|
||||
private LifecycleDisposable lifecycleDisposable;
|
||||
|
||||
public static EditProxyFragment newInstance() {
|
||||
return new EditProxyFragment();
|
||||
|
@ -59,6 +61,9 @@ public class EditProxyFragment extends Fragment {
|
|||
this.saveButton = view.findViewById(R.id.edit_proxy_save);
|
||||
this.shareButton = view.findViewById(R.id.edit_proxy_share);
|
||||
|
||||
lifecycleDisposable = new LifecycleDisposable();
|
||||
lifecycleDisposable.bindTo(getViewLifecycleOwner());
|
||||
|
||||
proxyText.addTextChangedListener(new SimpleTextWatcher() {
|
||||
@Override
|
||||
public void onTextChanged(String text) {
|
||||
|
@ -92,10 +97,12 @@ public class EditProxyFragment extends Fragment {
|
|||
private void initViewModel() {
|
||||
viewModel = new ViewModelProvider(this).get(EditProxyViewModel.class);
|
||||
|
||||
viewModel.getUiState().observe(getViewLifecycleOwner(), this::presentUiState);
|
||||
viewModel.getProxyState().observe(getViewLifecycleOwner(), this::presentProxyState);
|
||||
viewModel.getEvents().observe(getViewLifecycleOwner(), this::presentEvent);
|
||||
viewModel.getSaveState().observe(getViewLifecycleOwner(), this::presentSaveState);
|
||||
lifecycleDisposable.addAll(
|
||||
viewModel.getUiState().subscribe(this::presentUiState),
|
||||
viewModel.getProxyState().subscribe(this::presentProxyState),
|
||||
viewModel.getEvents().subscribe(this::presentEvent),
|
||||
viewModel.getSaveState().subscribe(this::presentSaveState)
|
||||
);
|
||||
}
|
||||
|
||||
private void presentUiState(@NonNull EditProxyViewModel.UiState uiState) {
|
||||
|
|
|
@ -1,45 +1,45 @@
|
|||
package org.thoughtcrime.securesms.preferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.util.SignalProxyUtil;
|
||||
import org.thoughtcrime.securesms.util.SingleLiveEvent;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState;
|
||||
import org.whispersystems.signalservice.internal.configuration.SignalProxy;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy;
|
||||
|
||||
import static androidx.lifecycle.LiveDataReactiveStreams.fromPublisher;
|
||||
import io.reactivex.rxjava3.core.Flowable;
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject;
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject;
|
||||
|
||||
public class EditProxyViewModel extends ViewModel {
|
||||
|
||||
private final SingleLiveEvent<Event> events;
|
||||
private final MutableLiveData<UiState> uiState;
|
||||
private final MutableLiveData<SaveState> saveState;
|
||||
private final LiveData<WebSocketConnectionState> pipeState;
|
||||
private final PublishSubject<Event> events;
|
||||
private final BehaviorSubject<UiState> uiState;
|
||||
private final BehaviorSubject<SaveState> saveState;
|
||||
private final Flowable<WebSocketConnectionState> pipeState;
|
||||
|
||||
public EditProxyViewModel() {
|
||||
this.events = new SingleLiveEvent<>();
|
||||
this.uiState = new MutableLiveData<>();
|
||||
this.saveState = new MutableLiveData<>(SaveState.IDLE);
|
||||
this.pipeState = SignalStore.account().getE164() == null ? new MutableLiveData<>()
|
||||
: fromPublisher(ApplicationDependencies.getSignalWebSocket()
|
||||
.getWebSocketState()
|
||||
.toFlowable(BackpressureStrategy.LATEST));
|
||||
this.events = PublishSubject.create();
|
||||
this.uiState = BehaviorSubject.create();
|
||||
this.saveState = BehaviorSubject.createDefault(SaveState.IDLE);
|
||||
this.pipeState = SignalStore.account().getE164() == null ? Flowable.empty()
|
||||
: ApplicationDependencies.getSignalWebSocket()
|
||||
.getWebSocketState()
|
||||
.toFlowable(BackpressureStrategy.LATEST);
|
||||
|
||||
if (SignalStore.proxy().isProxyEnabled()) {
|
||||
uiState.setValue(UiState.ALL_ENABLED);
|
||||
uiState.onNext(UiState.ALL_ENABLED);
|
||||
} else {
|
||||
uiState.setValue(UiState.ALL_DISABLED);
|
||||
uiState.onNext(UiState.ALL_DISABLED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,20 +50,20 @@ public class EditProxyViewModel extends ViewModel {
|
|||
if (currentProxy != null && !Util.isEmpty(currentProxy.getHost())) {
|
||||
SignalProxyUtil.enableProxy(currentProxy);
|
||||
}
|
||||
uiState.postValue(UiState.ALL_ENABLED);
|
||||
uiState.onNext(UiState.ALL_ENABLED);
|
||||
} else if (Util.isEmpty(text)) {
|
||||
SignalProxyUtil.disableAndClearProxy();
|
||||
uiState.postValue(UiState.ALL_DISABLED);
|
||||
uiState.onNext(UiState.ALL_DISABLED);
|
||||
} else {
|
||||
SignalProxyUtil.disableProxy();
|
||||
uiState.postValue(UiState.ALL_DISABLED);
|
||||
uiState.onNext(UiState.ALL_DISABLED);
|
||||
}
|
||||
}
|
||||
|
||||
public void onSaveClicked(@NonNull String host) {
|
||||
String trueHost = SignalProxyUtil.convertUserEnteredAddressToHost(host);
|
||||
|
||||
saveState.postValue(SaveState.IN_PROGRESS);
|
||||
saveState.onNext(SaveState.IN_PROGRESS);
|
||||
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
SignalProxyUtil.enableProxy(new SignalProxy(trueHost, 443));
|
||||
|
@ -71,30 +71,30 @@ public class EditProxyViewModel extends ViewModel {
|
|||
boolean success = SignalProxyUtil.testWebsocketConnection(TimeUnit.SECONDS.toMillis(10));
|
||||
|
||||
if (success) {
|
||||
events.postValue(Event.PROXY_SUCCESS);
|
||||
events.onNext(Event.PROXY_SUCCESS);
|
||||
} else {
|
||||
SignalProxyUtil.disableProxy();
|
||||
events.postValue(Event.PROXY_FAILURE);
|
||||
events.onNext(Event.PROXY_FAILURE);
|
||||
}
|
||||
|
||||
saveState.postValue(SaveState.IDLE);
|
||||
saveState.onNext(SaveState.IDLE);
|
||||
});
|
||||
}
|
||||
|
||||
@NonNull LiveData<UiState> getUiState() {
|
||||
return uiState;
|
||||
@NonNull Observable<UiState> getUiState() {
|
||||
return uiState.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public @NonNull LiveData<Event> getEvents() {
|
||||
return events;
|
||||
public @NonNull Observable<Event> getEvents() {
|
||||
return events.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
@NonNull LiveData<WebSocketConnectionState> getProxyState() {
|
||||
return pipeState;
|
||||
@NonNull Flowable<WebSocketConnectionState> getProxyState() {
|
||||
return pipeState.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public @NonNull LiveData<SaveState> getSaveState() {
|
||||
return saveState;
|
||||
public @NonNull Observable<SaveState> getSaveState() {
|
||||
return saveState.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
enum UiState {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package org.thoughtcrime.securesms.proxy;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
@ -21,6 +20,7 @@ import org.signal.core.util.logging.Log;
|
|||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.preferences.EditProxyViewModel;
|
||||
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
||||
import org.thoughtcrime.securesms.util.LifecycleDisposable;
|
||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;
|
||||
|
||||
|
@ -37,6 +37,7 @@ public final class ProxyBottomSheetFragment extends BottomSheetDialogFragment {
|
|||
private View cancelButton;
|
||||
private CircularProgressMaterialButton useProxyButton;
|
||||
private EditProxyViewModel viewModel;
|
||||
private LifecycleDisposable lifecycleDisposable;
|
||||
|
||||
public static void showForProxy(@NonNull FragmentManager manager, @NonNull String proxyLink) {
|
||||
ProxyBottomSheetFragment fragment = new ProxyBottomSheetFragment();
|
||||
|
@ -68,6 +69,9 @@ public final class ProxyBottomSheetFragment extends BottomSheetDialogFragment {
|
|||
this.useProxyButton = view.findViewById(R.id.proxy_sheet_use_proxy);
|
||||
this.cancelButton = view.findViewById(R.id.proxy_sheet_cancel);
|
||||
|
||||
lifecycleDisposable = new LifecycleDisposable();
|
||||
lifecycleDisposable.bindTo(getViewLifecycleOwner());
|
||||
|
||||
String host = getArguments().getString(ARG_PROXY_LINK);
|
||||
proxyText.setText(host);
|
||||
|
||||
|
@ -80,8 +84,10 @@ public final class ProxyBottomSheetFragment extends BottomSheetDialogFragment {
|
|||
private void initViewModel() {
|
||||
this.viewModel = new ViewModelProvider(this).get(EditProxyViewModel.class);
|
||||
|
||||
viewModel.getSaveState().observe(getViewLifecycleOwner(), this::presentSaveState);
|
||||
viewModel.getEvents().observe(getViewLifecycleOwner(), this::presentEvents);
|
||||
lifecycleDisposable.addAll(
|
||||
viewModel.getSaveState().subscribe(this::presentSaveState),
|
||||
viewModel.getEvents().subscribe(this::presentEvents)
|
||||
);
|
||||
}
|
||||
|
||||
private void presentSaveState(@NonNull EditProxyViewModel.SaveState state) {
|
||||
|
|
|
@ -26,6 +26,11 @@ class LifecycleDisposable : DefaultLifecycleObserver {
|
|||
return this
|
||||
}
|
||||
|
||||
fun addAll(vararg disposable: Disposable): LifecycleDisposable {
|
||||
disposables.addAll(*disposable)
|
||||
return this
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
disposables.clear()
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue