Skip to content

Commit e19cf29

Browse files
committed
Single Responsibility for EventTriggerAdapter
Signed-off-by: Arka Prava Basu <[email protected]>
1 parent 762f06c commit e19cf29

File tree

7 files changed

+144
-111
lines changed

7 files changed

+144
-111
lines changed

src/main/java/org/havenapp/main/model/Event.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,12 @@ class Event {
4141

4242
return mEventTriggers
4343
}
44+
45+
fun getEventTriggerCount(): Int {
46+
if (mEventTriggers.size == 0) {
47+
return getEventTriggers().size
48+
}
49+
50+
return mEventTriggers.size
51+
}
4452
}

src/main/java/org/havenapp/main/model/EventTrigger.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package org.havenapp.main.model
33
import android.arch.persistence.room.ColumnInfo
44
import android.arch.persistence.room.Entity
55
import android.arch.persistence.room.PrimaryKey
6-
import android.content.Context
76
import org.havenapp.main.R
7+
import org.havenapp.main.resources.IResourceManager
88
import java.util.*
99

1010
/**
@@ -77,19 +77,19 @@ class EventTrigger {
7777
@ColumnInfo(name = "M_PATH")
7878
var mPath: String? = null
7979

80-
fun getStringType(context: Context): String {
80+
fun getStringType(resourceManager: IResourceManager): String {
8181
var sType = ""
8282

8383
sType = when (mType) {
84-
ACCELEROMETER -> context.getString(R.string.sensor_accel)
85-
LIGHT -> context.getString(R.string.sensor_light)
86-
CAMERA -> context.getString(R.string.sensor_camera)
87-
MICROPHONE -> context.getString(R.string.sensor_sound)
88-
POWER -> context.getString(R.string.sensor_power)
89-
BUMP -> context.getString(R.string.sensor_bump)
90-
CAMERA_VIDEO -> context.getString(R.string.sensor_camera_video)
91-
HEART -> context.getString(R.string.sensor_heartbeat)
92-
else -> context.getString(R.string.sensor_unknown)
84+
ACCELEROMETER -> resourceManager.getString(R.string.sensor_accel)
85+
LIGHT -> resourceManager.getString(R.string.sensor_light)
86+
CAMERA -> resourceManager.getString(R.string.sensor_camera)
87+
MICROPHONE -> resourceManager.getString(R.string.sensor_sound)
88+
POWER -> resourceManager.getString(R.string.sensor_power)
89+
BUMP -> resourceManager.getString(R.string.sensor_bump)
90+
CAMERA_VIDEO -> resourceManager.getString(R.string.sensor_camera_video)
91+
HEART -> resourceManager.getString(R.string.sensor_heartbeat)
92+
else -> resourceManager.getString(R.string.sensor_unknown)
9393
}
9494

9595
return sType

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.havenapp.main.database.HavenEventDB;
3535
import org.havenapp.main.model.Event;
3636
import org.havenapp.main.model.EventTrigger;
37+
import org.havenapp.main.resources.ResourceManager;
3738
import org.havenapp.main.sensors.AccelerometerMonitor;
3839
import org.havenapp.main.sensors.AmbientLightMonitor;
3940
import org.havenapp.main.sensors.BarometerMonitor;
@@ -335,7 +336,8 @@ else if (mPrefs.getNotificationTimeMs() > 0 && mLastNotification != null)
335336
* number
336337
*/
337338
StringBuilder alertMessage = new StringBuilder();
338-
alertMessage.append(getString(R.string.intrusion_detected, eventTrigger.getStringType(this)));
339+
alertMessage.append(getString(R.string.intrusion_detected,
340+
eventTrigger.getStringType(new ResourceManager(this))));
339341

340342
if (mPrefs.getSignalUsername() != null) {
341343
//since this is a secure channel, we can add the Onion address

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.havenapp.main.database.HavenEventDB;
1010
import org.havenapp.main.model.Event;
1111
import org.havenapp.main.model.EventTrigger;
12+
import org.havenapp.main.resources.ResourceManager;
1213

1314
import java.io.File;
1415
import java.io.FileInputStream;
@@ -174,7 +175,7 @@ private void showEvent (Event event, StringBuffer page) {
174175

175176
for (EventTrigger eventTrigger: triggers)
176177
{
177-
String title = eventTrigger.getStringType(mContext);
178+
String title = eventTrigger.getStringType(new ResourceManager(mContext));
178179
String desc = eventTrigger.getMTime().toString();
179180

180181
page.append("<b>");

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

Lines changed: 85 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,41 @@
77
import android.os.StrictMode;
88
import android.support.design.widget.FloatingActionButton;
99
import android.support.design.widget.Snackbar;
10+
import android.support.v4.content.FileProvider;
1011
import android.support.v7.app.AppCompatActivity;
1112
import android.support.v7.widget.LinearLayoutManager;
1213
import android.support.v7.widget.RecyclerView;
1314
import android.support.v7.widget.Toolbar;
1415
import android.support.v7.widget.helper.ItemTouchHelper;
16+
import android.text.TextUtils;
1517
import android.view.MenuItem;
1618
import android.view.View;
1719

20+
import com.stfalcon.frescoimageviewer.ImageViewer;
21+
1822
import org.havenapp.main.R;
1923
import org.havenapp.main.database.HavenEventDB;
2024
import org.havenapp.main.model.Event;
2125
import org.havenapp.main.model.EventTrigger;
26+
import org.havenapp.main.resources.IResourceManager;
27+
import org.havenapp.main.resources.ResourceManager;
2228

2329
import java.io.File;
2430
import java.util.ArrayList;
31+
import java.util.List;
2532

26-
public class EventActivity extends AppCompatActivity {
27-
33+
public class EventActivity extends AppCompatActivity implements EventTriggerAdapter.EventTriggerClickListener {
2834

35+
private IResourceManager resourceManager;
2936
private RecyclerView mRecyclerView;
3037
private Event mEvent;
38+
private List<EventTrigger> eventTriggerList = new ArrayList<>();
3139
private Handler mHandler = new Handler();
3240
private EventTriggerAdapter mAdapter;
3341

42+
private ArrayList<Uri> eventTriggerImagePaths;
43+
private final static String AUTHORITY = "org.havenapp.main.fileprovider";
44+
3445
@Override
3546
protected void onCreate(Bundle savedInstanceState) {
3647

@@ -42,16 +53,22 @@ protected void onCreate(Bundle savedInstanceState) {
4253

4354
StrictMode.setVmPolicy(StrictMode.VmPolicy.LAX);
4455

56+
resourceManager = new ResourceManager(this);
57+
4558
long eventId = getIntent().getLongExtra("eventid",-1);
4659

4760
if (eventId != -1) {
4861

4962
mEvent = HavenEventDB.getDatabase(this).getEventDAO().findById(eventId);
63+
eventTriggerList = mEvent.getEventTriggers();
5064
mRecyclerView = findViewById(R.id.event_trigger_list);
5165

5266
setTitle(mEvent.getMStartTime().toLocaleString());
5367

54-
mAdapter = new EventTriggerAdapter(this, mEvent.getEventTriggers());
68+
mAdapter = new EventTriggerAdapter(this, eventTriggerList,
69+
resourceManager, this);
70+
71+
setEventTriggerImagePaths(eventTriggerList);
5572

5673
LinearLayoutManager llm = new LinearLayoutManager(this);
5774
mRecyclerView.setLayoutManager(llm);
@@ -79,7 +96,7 @@ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
7996
//Remove swiped item from list and notify the RecyclerView
8097

8198
final int position = viewHolder.getAdapterPosition();
82-
final EventTrigger eventTrigger = mEvent.getEventTriggers()
99+
final EventTrigger eventTrigger = eventTriggerList
83100
.get(viewHolder.getAdapterPosition());
84101

85102
deleteEventTrigger (eventTrigger, position);
@@ -128,7 +145,7 @@ public void run ()
128145

129146
mHandler.postDelayed(runnableDelete,3000);
130147

131-
mEvent.getEventTriggers().remove(position);
148+
eventTriggerList.remove(position);
132149
mAdapter.notifyItemRemoved(position);
133150

134151
HavenEventDB.getDatabase(EventActivity.this)
@@ -142,7 +159,7 @@ public void onClick(View v) {
142159
long eventTriggerId = HavenEventDB.getDatabase(EventActivity.this)
143160
.getEventTriggerDAO().insert(eventTrigger);
144161
eventTrigger.setId(eventTriggerId);
145-
mEvent.getEventTriggers().add(position, eventTrigger);
162+
eventTriggerList.add(position, eventTrigger);
146163
mAdapter.notifyItemInserted(position);
147164
}
148165
})
@@ -162,7 +179,7 @@ private void shareEvent ()
162179
//has to be an ArrayList
163180
ArrayList<Uri> uris = new ArrayList<>();
164181
//convert from paths to Android friendly Parcelable Uri's
165-
for (EventTrigger trigger : mEvent.getEventTriggers())
182+
for (EventTrigger trigger : eventTriggerList)
166183
{
167184
// ignore triggers for which we do not have valid file/file-paths
168185
if (trigger.getMimeType() == null || trigger.getMPath() == null)
@@ -182,11 +199,11 @@ private String generateLog () {
182199

183200
setTitle("Event @ " + mEvent.getMStartTime().toLocaleString());
184201

185-
for (EventTrigger eventTrigger : mEvent.getEventTriggers()) {
202+
for (EventTrigger eventTrigger : eventTriggerList) {
186203

187204
mEventLog.append("Event Triggered @ ").append(eventTrigger.getMTime().toString()).append("\n");
188205

189-
String sType = eventTrigger.getStringType(this);
206+
String sType = eventTrigger.getStringType(resourceManager);
190207

191208
mEventLog.append("Event Type: ").append(sType);
192209
mEventLog.append("\n==========================\n");
@@ -195,4 +212,63 @@ private String generateLog () {
195212
return mEventLog.toString();
196213
}
197214

215+
@Override
216+
public void onVideoClick(EventTrigger eventTrigger) {
217+
Intent intent = new Intent(this, VideoPlayerActivity.class);
218+
intent.setData(Uri.parse("file://" + eventTrigger.getMPath()));
219+
startActivity(intent);
220+
}
221+
222+
@Override
223+
public void onVideoLongClick(EventTrigger eventTrigger) {
224+
shareMedia(eventTrigger);
225+
}
226+
227+
@Override
228+
public void onImageClick(EventTrigger eventTrigger) {
229+
int startPosition = 0;
230+
231+
/**
232+
for (int i = 0; i < eventTriggerImagePaths.size(); i++) {
233+
if (eventTriggerImagePaths.get(i).contains(eventTrigger.getPath())) {
234+
startPosition = i;
235+
break;
236+
}
237+
}**/
238+
239+
ShareOverlayView overlayView = new ShareOverlayView(this);
240+
ImageViewer viewer = new ImageViewer.Builder<>(this, eventTriggerImagePaths)
241+
.setStartPosition(startPosition)
242+
.setOverlayView(overlayView)
243+
.show();
244+
overlayView.setImageViewer(viewer);
245+
}
246+
247+
@Override
248+
public void onImageLongClick(EventTrigger eventTrigger) {
249+
shareMedia(eventTrigger);
250+
}
251+
252+
private void shareMedia (EventTrigger eventTrigger) {
253+
Intent shareIntent = new Intent();
254+
shareIntent.setAction(Intent.ACTION_SEND);
255+
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(eventTrigger.getMPath())));
256+
shareIntent.setType(eventTrigger.getMimeType());
257+
startActivity(shareIntent);
258+
}
259+
260+
private void setEventTriggerImagePaths(List<EventTrigger> eventTriggerList) {
261+
this.eventTriggerImagePaths = new ArrayList<>();
262+
for (EventTrigger trigger : eventTriggerList)
263+
{
264+
if (trigger.getMType() == EventTrigger.CAMERA
265+
&& (!TextUtils.isEmpty(trigger.getMPath())))
266+
{
267+
Uri fileUri = FileProvider.getUriForFile(this, AUTHORITY,
268+
new File(trigger.getMPath()));
269+
270+
eventTriggerImagePaths.add(fileUri);
271+
}
272+
}
273+
}
198274
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void onBindViewHolder(@NonNull EventVH holder, int position) {
4242
Event event = events.get(position);
4343

4444
String title = event.getMStartTime().toLocaleString();
45-
String desc = event.getEventTriggers().size() + " " +
45+
String desc = event.getEventTriggerCount() + " " +
4646
resourceManager.getString(R.string.detection_events);
4747

4848
holder.title.setText(title);

0 commit comments

Comments
 (0)