Skip to content

Commit

Permalink
Initial commit on Signal flow optimization
Browse files Browse the repository at this point in the history
- have a callback mechanism for every signal operations

Signed-off-by: Arka Prava Basu <[email protected]>
  • Loading branch information
archie94 committed Mar 20, 2019
1 parent eeb61e2 commit 5721fd7
Show file tree
Hide file tree
Showing 6 changed files with 135 additions and 65 deletions.
6 changes: 5 additions & 1 deletion src/main/java/org/havenapp/main/ListActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.havenapp.main.model.Event;
import org.havenapp.main.resources.IResourceManager;
import org.havenapp.main.resources.ResourceManager;
import org.havenapp.main.service.LoggingTaskListener;
import org.havenapp.main.service.RemoveDeletedFilesJob;
import org.havenapp.main.service.SignalSender;
import org.havenapp.main.ui.EventActivity;
Expand Down Expand Up @@ -136,6 +137,8 @@ public void onReceive(Context context, Intent intent) {

private ProgressDialog progressDialog;

private LoggingTaskListener loggingTaskListener = new LoggingTaskListener();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -376,7 +379,8 @@ private void testNotifications ()
SignalSender sender = SignalSender.getInstance(this, preferences.getSignalUsername().trim());
ArrayList<String> recip = new ArrayList<>();
recip.add(preferences.getRemotePhoneNumber());
sender.sendMessage(recip, resourceManager.getString(R.string.signal_test_message), null);
sender.sendMessage(recip, resourceManager.getString(R.string.signal_test_message),
null, loggingTaskListener);
}
}
}
26 changes: 24 additions & 2 deletions src/main/java/org/havenapp/main/SettingsFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;

import org.havenapp.main.service.SignalExecutorTask;
import org.havenapp.main.service.SignalSender;
import org.havenapp.main.service.WebServer;
import org.havenapp.main.ui.AccelConfigureActivity;
Expand Down Expand Up @@ -575,9 +576,30 @@ private void activateSignal(String username, String verifyCode) {
SignalSender sender = SignalSender.getInstance(mActivity, username);

if (TextUtils.isEmpty(verifyCode)) {
sender.register(preferences.getVoiceVerificationEnabled());
sender.register(preferences.getVoiceVerificationEnabled(),
new SignalExecutorTask.TaskResult() {
@Override
public void onSuccess(@NonNull String msg) {
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
}

@Override
public void onFailure(@NonNull String msg) {
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
}
});
} else {
sender.verify(verifyCode);
sender.verify(verifyCode, new SignalExecutorTask.TaskResult() {
@Override
public void onSuccess(@NonNull String msg) {
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
}

@Override
public void onFailure(@NonNull String msg) {
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
}
});
}
}

Expand Down
18 changes: 18 additions & 0 deletions src/main/java/org/havenapp/main/service/LoggingTaskListener.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.havenapp.main.service

import android.util.Log

/**
* An implementation of [SignalExecutorTask.TaskResult] which just logs the
* msg on [SignalExecutorTask.TaskResult.onSuccess] and [SignalExecutorTask.TaskResult.onFailure]
* Created by Arka Prava Basu<[email protected]> on 20/03/19
**/
class LoggingTaskListener: SignalExecutorTask.TaskResult {
override fun onSuccess(msg: String) {
Log.i(LoggingTaskListener::class.java.simpleName, msg)
}

override fun onFailure(msg: String) {
Log.i(LoggingTaskListener::class.java.simpleName, msg)
}
}
4 changes: 3 additions & 1 deletion src/main/java/org/havenapp/main/service/MonitorService.java
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ public void handleMessage(Message msg) {
*/
private HavenApp mApp = null;

private LoggingTaskListener loggingTaskListener = new LoggingTaskListener();

/**
* Called on service creation, sends a notification
*/
Expand Down Expand Up @@ -392,7 +394,7 @@ else if (eventTrigger.getType() == EventTrigger.CAMERA_VIDEO) {
attachment = eventTrigger.getPath();
}

sender.sendMessage(recips, alertMessage.toString(), attachment);
sender.sendMessage(recips, alertMessage.toString(), attachment, loggingTaskListener);
}
}

Expand Down
41 changes: 41 additions & 0 deletions src/main/java/org/havenapp/main/service/SignalExecutorTask.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.havenapp.main.service

import android.os.AsyncTask
import net.sourceforge.argparse4j.inf.Namespace
import org.asamk.signal.Main

/**
* Created by Arka Prava Basu<[email protected]> on 20/03/19
**/
class SignalExecutorTask(private val commandMap: HashMap<String, Any>,
private val mainSignal: Main,
private val listener: TaskResult?)
: AsyncTask<Unit, Unit, Int>() {

override fun doInBackground(vararg params: Unit?): Int {
val namespace = Namespace(commandMap)
return mainSignal.handleCommands(namespace)
}

override fun onPostExecute(result: Int) {
super.onPostExecute(result)
if (result == 0) {
listener?.onSuccess("Success for request map $commandMap")
} else {
listener?.onFailure("Failure for request map $commandMap")
}
}

interface TaskResult {
/**
* Indicates that the command executed successfully
*/
fun onSuccess(msg: String)

/**
* A failure. Should probably return a failure msg
* todo
*/
fun onFailure(msg: String)
}
}
105 changes: 44 additions & 61 deletions src/main/java/org/havenapp/main/service/SignalSender.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.havenapp.main.service;

import android.content.Context;
import android.os.AsyncTask;
import android.os.CountDownTimer;
import android.telephony.SmsManager;
import android.text.TextUtils;
Expand All @@ -17,6 +18,9 @@
import java.util.HashMap;
import java.util.StringTokenizer;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
* Created by n8fr8 on 11/6/17.
*/
Expand All @@ -33,13 +37,15 @@ public class SignalSender {
private String suffix;
private int interval;
private int mAlertCount;
private Main mainSignal;

private SignalSender(Context context, String username)
{
mContext = context;
mUsername = username;
mAlertCount = 0;
preferences = new PreferenceManager(mContext);
mainSignal = new Main(context);
prefix = preferences.getHeartbeatPrefix();
suffix = preferences.getHeartbeatSuffix();
messageString = preferences.getHeartbeatMonitorMessage();
Expand All @@ -63,46 +69,29 @@ public void setUsername (String username)

public void reset ()
{
Main mainSignal = new Main(mContext);
mainSignal.resetUser();
mInstance = null;
}

public void register (boolean callEnabled)
{
execute (new Runnable() {
public void run() {
Main mainSignal = new Main(mContext);
HashMap<String, Object> map = new HashMap<>();

map.put("username", mUsername);
map.put("command", "register");
if (!callEnabled)
map.put("voice", false);
else
map.put("voice", true);

Namespace ns = new Namespace(map);
mainSignal.handleCommands(ns);
}
});
}
public void register (boolean callEnabled, @Nullable SignalExecutorTask.TaskResult taskResult) {
HashMap<String, Object> map = new HashMap<>();
map.put("username", mUsername);
map.put("command", "register");
if (!callEnabled)
map.put("voice", false);
else
map.put("voice", true);

public void verify (final String verificationCode)
{
execute (new Runnable() {
public void run() {
Main mainSignal = new Main(mContext);
HashMap<String, Object> map = new HashMap<>();
execute(map, taskResult);
}

map.put("username", mUsername);
map.put("command", "verify");
map.put("verificationCode", verificationCode);
public void verify (final String verificationCode, @Nullable SignalExecutorTask.TaskResult taskResult) {
HashMap<String, Object> map = new HashMap<>();
map.put("username", mUsername);
map.put("command", "verify");
map.put("verificationCode", verificationCode);

Namespace ns = new Namespace(map);
mainSignal.handleCommands(ns);
}
});
execute(map, taskResult);
}

public void stopHeartbeatTimer ()
Expand Down Expand Up @@ -157,38 +146,32 @@ private void initHbMessage (String message)
getInstance(mContext, mUsername.trim());
ArrayList<String> recipient = new ArrayList<>();
recipient.add(preferences.getRemotePhoneNumber());
sendMessage(recipient, message,null);
sendMessage(recipient, message,null, null);
}
}

public void sendMessage (final ArrayList<String> recipients, final String message, final String attachment)
{
execute (new Runnable() {
public void run() {
Main mainSignal = new Main(mContext);
HashMap<String, Object> map = new HashMap<>();

map.put("username", mUsername);
map.put("endsession",false);
map.put("recipient", recipients);
map.put("command", "send");
map.put("message", message);

if (attachment != null)
{
ArrayList<String> attachments = new ArrayList<>();
attachments.add(attachment);
map.put("attachment",attachments);
}

Namespace ns = new Namespace(map);
mainSignal.handleCommands(ns);
}
});
public void sendMessage (final ArrayList<String> recipients, final String message,
final String attachment, @Nullable SignalExecutorTask.TaskResult listener) {

HashMap<String, Object> map = new HashMap<>();
map.put("username", mUsername);
map.put("endsession",false);
map.put("recipient", recipients);
map.put("command", "send");
map.put("message", message);

if (attachment != null) {
ArrayList<String> attachments = new ArrayList<>();
attachments.add(attachment);
map.put("attachment",attachments);
}

execute(map, listener);
}

private void execute (Runnable runnable)
{
new Thread (runnable).start();
private void execute (HashMap<String, Object> map,
@Nullable SignalExecutorTask.TaskResult taskResult) {
new SignalExecutorTask(map, mainSignal, taskResult)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}

0 comments on commit 5721fd7

Please sign in to comment.