Skip to content

Commit 6fb03a4

Browse files
committed
improvements to visual feedback of sensor event
- this is a replacement for the removal of the bitmap overall, which was causing OOMs and ANRs - this is much more functional, useful, though not quite as sexy :(
1 parent e8f3774 commit 6fb03a4

File tree

6 files changed

+75
-39
lines changed

6 files changed

+75
-39
lines changed

src/main/java/org/havenapp/main/sensors/BumpMonitor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public void onTrigger(TriggerEvent event) {
8383
*/
8484
Message message = new Message();
8585
message.what = EventTrigger.BUMP;
86+
message.getData().putString("path","BUMPED!");
8687

8788
try {
8889
if (serviceMessenger != null) {

src/main/java/org/havenapp/main/sensors/MicrophoneMonitor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ public void onSignalReceived(short[] signal) {
134134
if (averageDB > mNoiseThreshold) {
135135

136136
if (!MicrophoneTaskFactory.isRecording()) {
137+
Message message = new Message();
138+
message.what = EventTrigger.MICROPHONE;
139+
try {
140+
if (serviceMessenger != null)
141+
serviceMessenger.send(message);
142+
} catch (RemoteException e) {
143+
// Cannot happen
144+
}
145+
137146
try {
138147
AudioRecorderTask audioRecorderTask = MicrophoneTaskFactory.makeRecorder(context);
139148
audioRecorderTask.setAudioRecorderListener(new AudioRecorderTask.AudioRecorderListener() {

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import android.app.Service;
1616
import android.content.Intent;
1717
import android.graphics.Color;
18+
import android.net.Uri;
1819
import android.os.Build;
1920
import android.os.Handler;
2021
import android.os.IBinder;
@@ -26,6 +27,7 @@
2627

2728
import androidx.annotation.RequiresApi;
2829
import androidx.core.app.NotificationCompat;
30+
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
2931

3032
import org.havenapp.main.HavenApp;
3133
import org.havenapp.main.MonitorActivity;
@@ -292,11 +294,19 @@ private void stopSensors ()
292294
/**
293295
* Sends an alert according to type of connectivity
294296
*/
295-
public synchronized void alert(int alertType, String path) {
297+
public void alert(int alertType, String value) {
296298

297299
Date now = new Date();
298300
boolean doNotification = false;
299301

302+
//for the UI visual
303+
Intent iEvent = new Intent("event");
304+
iEvent.putExtra("type",alertType);
305+
LocalBroadcastManager.getInstance(this).sendBroadcast(iEvent);
306+
307+
if (TextUtils.isEmpty(value))
308+
return;
309+
300310
if (mLastEvent == null) {
301311
mLastEvent = new Event();
302312
long eventId = HavenEventDB.getDatabase(getApplicationContext())
@@ -323,7 +333,7 @@ else if (mPrefs.getNotificationTimeMs() > 0 && mLastNotification != null)
323333

324334
EventTrigger eventTrigger = new EventTrigger();
325335
eventTrigger.setType(alertType);
326-
eventTrigger.setPath(path);
336+
eventTrigger.setPath(value);
327337

328338
mLastEvent.addEventTrigger(eventTrigger);
329339

src/main/java/org/havenapp/main/ui/CameraFragment.java

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
*/
99
package org.havenapp.main.ui;
1010

11+
import android.content.BroadcastReceiver;
12+
import android.content.Context;
13+
import android.content.Intent;
14+
import android.content.IntentFilter;
1115
import android.graphics.Bitmap;
1216
import android.hardware.SensorEvent;
1317
import android.os.Bundle;
@@ -24,16 +28,17 @@
2428

2529
import org.havenapp.main.PreferenceManager;
2630
import org.havenapp.main.R;
31+
import org.havenapp.main.model.EventTrigger;
2732

2833
import androidx.fragment.app.Fragment;
34+
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
2935

3036
public final class CameraFragment extends Fragment {
3137

3238
private CameraViewHolder cameraViewHolder;
3339
private ImageView newImage;
3440
private PreferenceManager prefs;
3541
private TextView txtCameraStatus;
36-
private Bitmap lastBitmap;
3742

3843
/**
3944
* Handler used to update back the UI after motion detection
@@ -47,28 +52,45 @@ public void handleMessage(Message msg) {
4752
if (!isDetached()) {
4853
if (txtCameraStatus != null) {
4954

50-
if (msg.what == 0) {
51-
// newImage.setImageResource(R.drawable.blankimage);
52-
txtCameraStatus.setText("");
53-
54-
} else if (msg.what == 1) {
55-
// newImage.setImageBitmap(lastBitmap);
56-
txtCameraStatus.setText(getString(R.string.motion_detected));
57-
55+
if (msg.what == EventTrigger.CAMERA) {
56+
if (cameraViewHolder.doingVideoProcessing()) {
57+
txtCameraStatus.setText(getString(R.string.motion_detected)
58+
+ "\n" + getString(R.string.status_recording_video));
59+
} else {
60+
txtCameraStatus.setText(getString(R.string.motion_detected));
61+
}
62+
}
63+
else if (msg.what == EventTrigger.POWER) {
64+
txtCameraStatus.setText(getString(R.string.power_detected));
65+
}
66+
else if (msg.what == EventTrigger.MICROPHONE) {
67+
txtCameraStatus.setText(getString(R.string.sound_detected));
68+
}
69+
else if (msg.what == EventTrigger.ACCELEROMETER || msg.what == EventTrigger.BUMP) {
70+
txtCameraStatus.setText(getString(R.string.device_move_detected));
71+
}
72+
else if (msg.what == EventTrigger.LIGHT) {
73+
txtCameraStatus.setText(getString(R.string.status_light));
5874
}
5975

6076

61-
/**
62-
if (cameraViewHolder.doingVideoProcessing()) {
63-
txtCameraStatus.setText("Recording...");
64-
} else {
65-
txtCameraStatus.setText("");
66-
}**/
6777
}
6878
}
6979
}
7080
};
7181

82+
BroadcastReceiver receiver = new BroadcastReceiver() {
83+
@Override
84+
public void onReceive(Context context, Intent intent) {
85+
86+
int eventType = intent.getIntExtra("type",-1);
87+
88+
//String path = intent.getData().getPath();
89+
90+
handler.sendEmptyMessage(eventType);
91+
}
92+
};
93+
7294
@Override
7395
public View onCreateView(LayoutInflater inflater, ViewGroup container,
7496
Bundle savedInstanceState) {
@@ -96,6 +118,7 @@ public void onCreate(Bundle savedInstanceState) {
96118
@Override
97119
public void onPause() {
98120
super.onPause();
121+
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(receiver);
99122
}
100123

101124
@Override
@@ -104,6 +127,10 @@ public void onResume() {
104127
initCamera();
105128

106129
cameraViewHolder.setMotionSensitivity(prefs.getCameraSensitivity());
130+
131+
IntentFilter filter = new IntentFilter();
132+
filter.addAction("event");
133+
LocalBroadcastManager.getInstance(getContext()).registerReceiver(receiver,filter );
107134
}
108135

109136
public void updateCamera ()
@@ -137,9 +164,7 @@ public void initCamera ()
137164

138165
cameraViewHolder.addListener((newBitmap, rawBitmap, motionDetected) -> {
139166

140-
lastBitmap = rawBitmap;
141-
142-
handler.sendEmptyMessage(motionDetected?1:0);
167+
handler.sendEmptyMessage(motionDetected?EventTrigger.CAMERA:-1);
143168

144169

145170
});

src/main/res/layout/camera_fragment.xml

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,6 @@
55
xmlns:app="http://schemas.android.com/apk/res-auto"
66
android:foreground="@color/translucentOverlay25">
77

8-
<!--
9-
<com.google.android.cameraview.CameraView
10-
android:id="@+id/camera_view"
11-
android:layout_width="match_parent"
12-
android:layout_height="match_parent"
13-
android:layout_gravity="center_horizontal"
14-
android:keepScreenOn="true"
15-
android:adjustViewBounds="true"
16-
app:autoFocus="true"
17-
app:cameraAspectRatio="4:3"
18-
app:facing="front"
19-
app:flash="off"
20-
app:maximumWidth="1080"
21-
app:maximumPreviewWidth="1080"
22-
app:useHighResPicture="false"/>-->
23-
248
<!-- Camera -->
259
<com.otaliastudios.cameraview.CameraView
2610
xmlns:app="http://schemas.android.com/apk/res-auto"
@@ -56,10 +40,10 @@
5640
android:layout_height="wrap_content"
5741
android:gravity="center"
5842
android:text=""
59-
android:textColor="@color/Yellow"
43+
android:textColor="?colorPrimary"
6044
android:textSize="28sp"
6145
android:textStyle="bold"
62-
android:layout_gravity="center_horizontal|center_vertical"
63-
46+
android:layout_gravity="center_horizontal|bottom"
47+
android:layout_marginBottom="80dp"
6448
/>
6549
</FrameLayout>

src/main/res/values/strings.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@
165165
<!-- accepted digits for directory name - may vary for locale/platform/etc.
166166
Skipping periods, spaces, and other special characters to keep it simple -->
167167
<string name="path_chars">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_/</string>
168+
168169
<string name="motion_detected">MOTION DETECTED</string>
170+
<string name="sound_detected">SOUND DETECTED</string>
171+
<string name="device_move_detected">DEVICE MOVEMENT DETECTED</string>
172+
<string name="power_detected">POWER CHANGE DETECTED</string>
173+
174+
<string name="status_recording_video">Recording...</string>
175+
<string name="status_light">LIGHT DETECTED</string>
169176

170177
</resources>

0 commit comments

Comments
 (0)