[tor-commits] [snowflake-mobile/master] Add relay check - only handled success
cohosh at torproject.org
cohosh at torproject.org
Mon Nov 23 16:33:36 UTC 2020
commit fed179a61aefef8c4c125fe602701b6f24adbc52
Author: Hashik Donthineni <HashikDonthineni at Gmail.com>
Date: Wed Nov 11 13:57:22 2020 +0530
Add relay check - only handled success
---
.../org/torproject/snowflake/MainActivity.java | 31 +++++++++++++---
.../snowflake/fragments/MainFragment.java | 11 +++++-
.../snowflake/interfaces/MainFragmentCallback.java | 1 +
.../snowflake/models/MainActivityModel.java | 41 ++++++++++++++++++++--
.../snowflake/mvp/MainActivityMVPContract.java | 12 +++++++
.../presenters/MainActivityPresenter.java | 19 ++++++++++
6 files changed, 108 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/org/torproject/snowflake/MainActivity.java b/app/src/main/java/org/torproject/snowflake/MainActivity.java
index aa1692c..43f3697 100644
--- a/app/src/main/java/org/torproject/snowflake/MainActivity.java
+++ b/app/src/main/java/org/torproject/snowflake/MainActivity.java
@@ -7,16 +7,13 @@ import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
-import android.transition.Slide;
import android.util.Log;
-import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.view.GravityCompat;
import androidx.fragment.app.Fragment;
import org.torproject.snowflake.constants.ForegroundServiceConstants;
@@ -37,7 +34,6 @@ public class MainActivity extends AppCompatActivity implements MainFragmentCallb
//Indicates if model finished checking the date and reset served count if need be.
boolean isCheckDateFinished;
private Button settingsButton;
- boolean transitionToggle = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -183,6 +179,14 @@ public class MainActivity extends AppCompatActivity implements MainFragmentCallb
return 0;
}
+ @Override
+ public void relayCheck() {
+ // Deactivate settings button
+ settingsButton.setEnabled(false);
+ settingsButton.setClickable(false);
+ presenter.relayCheck();
+ }
+
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
@@ -193,4 +197,23 @@ public class MainActivity extends AppCompatActivity implements MainFragmentCallb
return super.onOptionsItemSelected(item);
}
+
+
+ @Override
+ public void relayFailed(String message) {
+ runOnUiThread(() -> {
+ settingsButton.setEnabled(true);
+ settingsButton.setClickable(true);
+ });
+ }
+
+ @Override
+ public void relaySuccess() {
+ runOnUiThread(() -> {
+ settingsButton.setEnabled(true);
+ settingsButton.setClickable(true);
+ Fragment mainFragment = getSupportFragmentManager().findFragmentByTag(Integer.toString(FragmentConstants.MAIN_FRAGMENT));
+ ((MainFragment) mainFragment).startProxy();
+ });
+ }
}
diff --git a/app/src/main/java/org/torproject/snowflake/fragments/MainFragment.java b/app/src/main/java/org/torproject/snowflake/fragments/MainFragment.java
index 25b0ba2..64e0ef4 100644
--- a/app/src/main/java/org/torproject/snowflake/fragments/MainFragment.java
+++ b/app/src/main/java/org/torproject/snowflake/fragments/MainFragment.java
@@ -79,7 +79,7 @@ public class MainFragment extends Fragment {
setSnowflakeStatus(false);
callback.serviceToggle(ForegroundServiceConstants.ACTION_STOP);
} else {
- startProxy();
+ startRelayCheck();
}
});
showServed(callback.getServed());
@@ -88,6 +88,13 @@ public class MainFragment extends Fragment {
return rootView;
}
+ private void startRelayCheck() {
+ startButton.setEnabled(false);
+ startButton.setClickable(false);
+ noteTV.setText("Checking relay reachability");
+ callback.relayCheck();
+ }
+
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
@@ -108,6 +115,8 @@ public class MainFragment extends Fragment {
* Starts the proxy.
*/
public void startProxy() {
+ startButton.setEnabled(true);
+ startButton.setClickable(true);
setSnowflakeStatus(true);
callback.serviceToggle(ForegroundServiceConstants.ACTION_START);
}
diff --git a/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java b/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java
index 40da367..32df1c9 100644
--- a/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java
+++ b/app/src/main/java/org/torproject/snowflake/interfaces/MainFragmentCallback.java
@@ -4,4 +4,5 @@ public interface MainFragmentCallback {
boolean isServiceRunning();
void serviceToggle(String action);
int getServed();
+ void relayCheck();
}
diff --git a/app/src/main/java/org/torproject/snowflake/models/MainActivityModel.java b/app/src/main/java/org/torproject/snowflake/models/MainActivityModel.java
index 66c5f4c..15572a0 100644
--- a/app/src/main/java/org/torproject/snowflake/models/MainActivityModel.java
+++ b/app/src/main/java/org/torproject/snowflake/models/MainActivityModel.java
@@ -3,6 +3,7 @@ package org.torproject.snowflake.models;
import android.content.SharedPreferences;
import android.util.Log;
+import org.jetbrains.annotations.NotNull;
import org.torproject.snowflake.GlobalApplication;
import org.torproject.snowflake.constants.AppPreferenceKeys;
import org.torproject.snowflake.mvp.MainActivityMVPContract;
@@ -15,6 +16,11 @@ import java.util.Date;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.schedulers.Schedulers;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import okhttp3.WebSocket;
+import okhttp3.WebSocketListener;
/**
* Model for MainActivity to handle network calls, Shared preferences.
@@ -22,8 +28,8 @@ import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainActivityModel implements MainActivityMVPContract.Model {
private static final String TAG = "MainActivityModel";
private static MainActivityModel instance = null;
- private SharedPreferences sharedPreferences;
- private MainActivityMVPContract.Presenter presenter;
+ private final SharedPreferences sharedPreferences;
+ private final MainActivityMVPContract.Presenter presenter;
private int servedCount;
private SharedPreferences.OnSharedPreferenceChangeListener listener;
@@ -151,4 +157,35 @@ public class MainActivityModel implements MainActivityMVPContract.Model {
});
}
}
+
+ @Override
+ public void relayCheck() {
+ Request req;
+ try {
+ req = new Request.Builder().url(GlobalApplication.getWebSocketUrl()).build();
+ } catch (IllegalArgumentException e) {
+ presenter.relayFailure("Malformed URL");
+ return;
+ }
+
+ OkHttpClient client = new OkHttpClient();
+ client.newWebSocket(req,
+ new WebSocketListener() {
+ @Override
+ public void onFailure(@NotNull WebSocket webSocket, @NotNull Throwable t, @org.jetbrains.annotations.Nullable Response response) {
+ Log.d(TAG, "WebSocketListener: onFailure: ");
+ webSocket.close(1000, "Normal Closure"); //TODO: Change Failure code.
+ presenter.relayFailure("Web socket connection failed");
+ }
+
+ @Override
+ public void onOpen(@NotNull WebSocket webSocket, @NotNull Response response) {
+ Log.d(TAG, "WebSocketListener: onOpen: ");
+ webSocket.close(1000, "Normal Closure");
+ presenter.relaySuccess();
+ }
+ });
+
+ client.dispatcher().executorService().shutdown();
+ }
}
diff --git a/app/src/main/java/org/torproject/snowflake/mvp/MainActivityMVPContract.java b/app/src/main/java/org/torproject/snowflake/mvp/MainActivityMVPContract.java
index 1bda683..6fb9a35 100644
--- a/app/src/main/java/org/torproject/snowflake/mvp/MainActivityMVPContract.java
+++ b/app/src/main/java/org/torproject/snowflake/mvp/MainActivityMVPContract.java
@@ -6,6 +6,10 @@ package org.torproject.snowflake.mvp;
public interface MainActivityMVPContract {
interface View {
void updateCountInFragment(int i);
+
+ void relayFailed(String message);
+
+ void relaySuccess();
}
interface Model {
@@ -18,6 +22,8 @@ public interface MainActivityMVPContract {
void checkDateAsync();
int getServedCount();
+
+ void relayCheck();
}
interface Presenter {
@@ -34,5 +40,11 @@ public interface MainActivityMVPContract {
void updateServedCount(int count);
void checkDate();
+
+ void relayCheck();
+
+ void relayFailure(String message);
+
+ void relaySuccess();
}
}
diff --git a/app/src/main/java/org/torproject/snowflake/presenters/MainActivityPresenter.java b/app/src/main/java/org/torproject/snowflake/presenters/MainActivityPresenter.java
index fd91839..4046f8b 100644
--- a/app/src/main/java/org/torproject/snowflake/presenters/MainActivityPresenter.java
+++ b/app/src/main/java/org/torproject/snowflake/presenters/MainActivityPresenter.java
@@ -80,4 +80,23 @@ public class MainActivityPresenter implements MainActivityMVPContract.Presenter
public void checkDate() {
model.checkDateAsync();
}
+
+ @Override
+ public void relayCheck() {
+ model.relayCheck();
+ }
+
+ @Override
+ public void relayFailure(String message) {
+ if (view != null) {
+ view.relayFailed(message);
+ }
+ }
+
+ @Override
+ public void relaySuccess() {
+ if (view != null) {
+ view.relaySuccess();
+ }
+ }
}
More information about the tor-commits
mailing list