Skip to content

Commit 5721fd7

Browse files
committed
Initial commit on Signal flow optimization
- have a callback mechanism for every signal operations Signed-off-by: Arka Prava Basu <[email protected]>
1 parent eeb61e2 commit 5721fd7

File tree

6 files changed

+135
-65
lines changed

6 files changed

+135
-65
lines changed

src/main/java/org/havenapp/main/ListActivity.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.havenapp.main.model.Event;
4949
import org.havenapp.main.resources.IResourceManager;
5050
import org.havenapp.main.resources.ResourceManager;
51+
import org.havenapp.main.service.LoggingTaskListener;
5152
import org.havenapp.main.service.RemoveDeletedFilesJob;
5253
import org.havenapp.main.service.SignalSender;
5354
import org.havenapp.main.ui.EventActivity;
@@ -136,6 +137,8 @@ public void onReceive(Context context, Intent intent) {
136137

137138
private ProgressDialog progressDialog;
138139

140+
private LoggingTaskListener loggingTaskListener = new LoggingTaskListener();
141+
139142
@Override
140143
protected void onCreate(Bundle savedInstanceState) {
141144
super.onCreate(savedInstanceState);
@@ -376,7 +379,8 @@ private void testNotifications ()
376379
SignalSender sender = SignalSender.getInstance(this, preferences.getSignalUsername().trim());
377380
ArrayList<String> recip = new ArrayList<>();
378381
recip.add(preferences.getRemotePhoneNumber());
379-
sender.sendMessage(recip, resourceManager.getString(R.string.signal_test_message), null);
382+
sender.sendMessage(recip, resourceManager.getString(R.string.signal_test_message),
383+
null, loggingTaskListener);
380384
}
381385
}
382386
}

src/main/java/org/havenapp/main/SettingsFragment.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.google.i18n.phonenumbers.PhoneNumberUtil;
2727
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
2828

29+
import org.havenapp.main.service.SignalExecutorTask;
2930
import org.havenapp.main.service.SignalSender;
3031
import org.havenapp.main.service.WebServer;
3132
import org.havenapp.main.ui.AccelConfigureActivity;
@@ -575,9 +576,30 @@ private void activateSignal(String username, String verifyCode) {
575576
SignalSender sender = SignalSender.getInstance(mActivity, username);
576577

577578
if (TextUtils.isEmpty(verifyCode)) {
578-
sender.register(preferences.getVoiceVerificationEnabled());
579+
sender.register(preferences.getVoiceVerificationEnabled(),
580+
new SignalExecutorTask.TaskResult() {
581+
@Override
582+
public void onSuccess(@NonNull String msg) {
583+
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
584+
}
585+
586+
@Override
587+
public void onFailure(@NonNull String msg) {
588+
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
589+
}
590+
});
579591
} else {
580-
sender.verify(verifyCode);
592+
sender.verify(verifyCode, new SignalExecutorTask.TaskResult() {
593+
@Override
594+
public void onSuccess(@NonNull String msg) {
595+
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
596+
}
597+
598+
@Override
599+
public void onFailure(@NonNull String msg) {
600+
Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
601+
}
602+
});
581603
}
582604
}
583605

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.havenapp.main.service
2+
3+
import android.util.Log
4+
5+
/**
6+
* An implementation of [SignalExecutorTask.TaskResult] which just logs the
7+
* msg on [SignalExecutorTask.TaskResult.onSuccess] and [SignalExecutorTask.TaskResult.onFailure]
8+
* Created by Arka Prava Basu<[email protected]> on 20/03/19
9+
**/
10+
class LoggingTaskListener: SignalExecutorTask.TaskResult {
11+
override fun onSuccess(msg: String) {
12+
Log.i(LoggingTaskListener::class.java.simpleName, msg)
13+
}
14+
15+
override fun onFailure(msg: String) {
16+
Log.i(LoggingTaskListener::class.java.simpleName, msg)
17+
}
18+
}

src/main/java/org/havenapp/main/service/MonitorService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ public void handleMessage(Message msg) {
125125
*/
126126
private HavenApp mApp = null;
127127

128+
private LoggingTaskListener loggingTaskListener = new LoggingTaskListener();
129+
128130
/**
129131
* Called on service creation, sends a notification
130132
*/
@@ -392,7 +394,7 @@ else if (eventTrigger.getType() == EventTrigger.CAMERA_VIDEO) {
392394
attachment = eventTrigger.getPath();
393395
}
394396

395-
sender.sendMessage(recips, alertMessage.toString(), attachment);
397+
sender.sendMessage(recips, alertMessage.toString(), attachment, loggingTaskListener);
396398
}
397399
}
398400

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.havenapp.main.service
2+
3+
import android.os.AsyncTask
4+
import net.sourceforge.argparse4j.inf.Namespace
5+
import org.asamk.signal.Main
6+
7+
/**
8+
* Created by Arka Prava Basu<[email protected]> on 20/03/19
9+
**/
10+
class SignalExecutorTask(private val commandMap: HashMap<String, Any>,
11+
private val mainSignal: Main,
12+
private val listener: TaskResult?)
13+
: AsyncTask<Unit, Unit, Int>() {
14+
15+
override fun doInBackground(vararg params: Unit?): Int {
16+
val namespace = Namespace(commandMap)
17+
return mainSignal.handleCommands(namespace)
18+
}
19+
20+
override fun onPostExecute(result: Int) {
21+
super.onPostExecute(result)
22+
if (result == 0) {
23+
listener?.onSuccess("Success for request map $commandMap")
24+
} else {
25+
listener?.onFailure("Failure for request map $commandMap")
26+
}
27+
}
28+
29+
interface TaskResult {
30+
/**
31+
* Indicates that the command executed successfully
32+
*/
33+
fun onSuccess(msg: String)
34+
35+
/**
36+
* A failure. Should probably return a failure msg
37+
* todo
38+
*/
39+
fun onFailure(msg: String)
40+
}
41+
}

src/main/java/org/havenapp/main/service/SignalSender.java

Lines changed: 44 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.havenapp.main.service;
22

33
import android.content.Context;
4+
import android.os.AsyncTask;
45
import android.os.CountDownTimer;
56
import android.telephony.SmsManager;
67
import android.text.TextUtils;
@@ -17,6 +18,9 @@
1718
import java.util.HashMap;
1819
import java.util.StringTokenizer;
1920

21+
import androidx.annotation.NonNull;
22+
import androidx.annotation.Nullable;
23+
2024
/**
2125
* Created by n8fr8 on 11/6/17.
2226
*/
@@ -33,13 +37,15 @@ public class SignalSender {
3337
private String suffix;
3438
private int interval;
3539
private int mAlertCount;
40+
private Main mainSignal;
3641

3742
private SignalSender(Context context, String username)
3843
{
3944
mContext = context;
4045
mUsername = username;
4146
mAlertCount = 0;
4247
preferences = new PreferenceManager(mContext);
48+
mainSignal = new Main(context);
4349
prefix = preferences.getHeartbeatPrefix();
4450
suffix = preferences.getHeartbeatSuffix();
4551
messageString = preferences.getHeartbeatMonitorMessage();
@@ -63,46 +69,29 @@ public void setUsername (String username)
6369

6470
public void reset ()
6571
{
66-
Main mainSignal = new Main(mContext);
6772
mainSignal.resetUser();
6873
mInstance = null;
6974
}
7075

71-
public void register (boolean callEnabled)
72-
{
73-
execute (new Runnable() {
74-
public void run() {
75-
Main mainSignal = new Main(mContext);
76-
HashMap<String, Object> map = new HashMap<>();
77-
78-
map.put("username", mUsername);
79-
map.put("command", "register");
80-
if (!callEnabled)
81-
map.put("voice", false);
82-
else
83-
map.put("voice", true);
84-
85-
Namespace ns = new Namespace(map);
86-
mainSignal.handleCommands(ns);
87-
}
88-
});
89-
}
76+
public void register (boolean callEnabled, @Nullable SignalExecutorTask.TaskResult taskResult) {
77+
HashMap<String, Object> map = new HashMap<>();
78+
map.put("username", mUsername);
79+
map.put("command", "register");
80+
if (!callEnabled)
81+
map.put("voice", false);
82+
else
83+
map.put("voice", true);
9084

91-
public void verify (final String verificationCode)
92-
{
93-
execute (new Runnable() {
94-
public void run() {
95-
Main mainSignal = new Main(mContext);
96-
HashMap<String, Object> map = new HashMap<>();
85+
execute(map, taskResult);
86+
}
9787

98-
map.put("username", mUsername);
99-
map.put("command", "verify");
100-
map.put("verificationCode", verificationCode);
88+
public void verify (final String verificationCode, @Nullable SignalExecutorTask.TaskResult taskResult) {
89+
HashMap<String, Object> map = new HashMap<>();
90+
map.put("username", mUsername);
91+
map.put("command", "verify");
92+
map.put("verificationCode", verificationCode);
10193

102-
Namespace ns = new Namespace(map);
103-
mainSignal.handleCommands(ns);
104-
}
105-
});
94+
execute(map, taskResult);
10695
}
10796

10897
public void stopHeartbeatTimer ()
@@ -157,38 +146,32 @@ private void initHbMessage (String message)
157146
getInstance(mContext, mUsername.trim());
158147
ArrayList<String> recipient = new ArrayList<>();
159148
recipient.add(preferences.getRemotePhoneNumber());
160-
sendMessage(recipient, message,null);
149+
sendMessage(recipient, message,null, null);
161150
}
162151
}
163152

164-
public void sendMessage (final ArrayList<String> recipients, final String message, final String attachment)
165-
{
166-
execute (new Runnable() {
167-
public void run() {
168-
Main mainSignal = new Main(mContext);
169-
HashMap<String, Object> map = new HashMap<>();
170-
171-
map.put("username", mUsername);
172-
map.put("endsession",false);
173-
map.put("recipient", recipients);
174-
map.put("command", "send");
175-
map.put("message", message);
176-
177-
if (attachment != null)
178-
{
179-
ArrayList<String> attachments = new ArrayList<>();
180-
attachments.add(attachment);
181-
map.put("attachment",attachments);
182-
}
183-
184-
Namespace ns = new Namespace(map);
185-
mainSignal.handleCommands(ns);
186-
}
187-
});
153+
public void sendMessage (final ArrayList<String> recipients, final String message,
154+
final String attachment, @Nullable SignalExecutorTask.TaskResult listener) {
155+
156+
HashMap<String, Object> map = new HashMap<>();
157+
map.put("username", mUsername);
158+
map.put("endsession",false);
159+
map.put("recipient", recipients);
160+
map.put("command", "send");
161+
map.put("message", message);
162+
163+
if (attachment != null) {
164+
ArrayList<String> attachments = new ArrayList<>();
165+
attachments.add(attachment);
166+
map.put("attachment",attachments);
167+
}
168+
169+
execute(map, listener);
188170
}
189171

190-
private void execute (Runnable runnable)
191-
{
192-
new Thread (runnable).start();
172+
private void execute (HashMap<String, Object> map,
173+
@Nullable SignalExecutorTask.TaskResult taskResult) {
174+
new SignalExecutorTask(map, mainSignal, taskResult)
175+
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
193176
}
194177
}

0 commit comments

Comments
 (0)