Skip to content

Commit

Permalink
initial work in new monitor display UI
Browse files Browse the repository at this point in the history
  • Loading branch information
n8fr8 committed Feb 11, 2019
1 parent 501125f commit 0b50d8b
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 116 deletions.
157 changes: 113 additions & 44 deletions src/main/java/org/havenapp/main/MonitorActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,34 @@
package org.havenapp.main;

import android.Manifest;
import android.animation.ValueAnimator;
import android.app.PictureInPictureParams;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;

import org.havenapp.main.model.EventTrigger;
import org.havenapp.main.service.MonitorService;
import org.havenapp.main.ui.AccelConfigureActivity;
import org.havenapp.main.ui.CameraConfigureActivity;
Expand All @@ -46,6 +58,7 @@
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import static org.havenapp.main.Utils.getTimerText;

Expand All @@ -66,6 +79,67 @@ public class MonitorActivity extends AppCompatActivity implements TimePickerDial

private CameraFragment mFragmentCamera;

private View mBtnCamera, mBtnMic, mBtnAccel;
private Animation mAnimShake;
private TextView txtStatus;

private int lastEventType = -1;

/**
* Handler used to update back the UI after motion detection
*/
private final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);

if (mIsMonitoring) {

String message = null;

if (msg.what == EventTrigger.CAMERA) {
mBtnCamera.startAnimation(mAnimShake);
message = getString(R.string.motion_detected);

} else if (msg.what == EventTrigger.POWER) {
message = getString(R.string.power_detected);

} else if (msg.what == EventTrigger.MICROPHONE) {
mBtnMic.startAnimation(mAnimShake);
message = getString(R.string.sound_detected);


} else if (msg.what == EventTrigger.ACCELEROMETER || msg.what == EventTrigger.BUMP) {
mBtnAccel.startAnimation(mAnimShake);
message = getString(R.string.device_move_detected);

} else if (msg.what == EventTrigger.LIGHT) {
message = getString(R.string.status_light);

}

if (lastEventType != msg.what) {
if (!TextUtils.isEmpty(message))
txtStatus.setText(message);
}

lastEventType = msg.what;
}
}
};

BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {

int eventType = intent.getIntExtra("type",-1);
boolean detected = intent.getBooleanExtra("detected",true);
if (detected)
handler.sendEmptyMessage(eventType);
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -107,70 +181,52 @@ private void initSetupLayout() {
int timeM = preferences.getTimerDelay() * 1000;

txtTimer.setText(getTimerText(timeM));
txtTimer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cTimer == null)
showTimeDelayDialog();
txtTimer.setOnClickListener(v -> {
if (cTimer == null)
showTimeDelayDialog();

}
});
findViewById(R.id.timer_text_title).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cTimer == null)
showTimeDelayDialog();
findViewById(R.id.timer_text_title).setOnClickListener(v -> {
if (cTimer == null)
showTimeDelayDialog();

}
});

findViewById(R.id.btnStartLater).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doCancel();
}
});
findViewById(R.id.btnStartLater).setOnClickListener(v -> doCancel());

findViewById(R.id.btnStartNow).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((Button) findViewById(R.id.btnStartLater)).setText(R.string.action_cancel);
findViewById(R.id.btnStartNow).setVisibility(View.INVISIBLE);
findViewById(R.id.timer_text_title).setVisibility(View.INVISIBLE);
initTimer();
}
findViewById(R.id.btnStartNow).setOnClickListener(v -> {
((Button) findViewById(R.id.btnStartLater)).setText(R.string.action_cancel);
findViewById(R.id.btnStartNow).setVisibility(View.INVISIBLE);
findViewById(R.id.timer_text_title).setVisibility(View.INVISIBLE);
initTimer();
});

findViewById(R.id.btnAccelSettings).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mBtnAccel = findViewById(R.id.btnAccelSettings);
mBtnAccel.setOnClickListener(v -> {
if (!mIsMonitoring)
startActivity(new Intent(MonitorActivity.this, AccelConfigureActivity.class));
}
});

findViewById(R.id.btnMicSettings).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mBtnMic = findViewById(R.id.btnMicSettings);
mBtnMic.setOnClickListener(v -> {
if (!mIsMonitoring)
startActivity(new Intent(MonitorActivity.this, MicrophoneConfigureActivity.class));
}
});

findViewById(R.id.btnCameraSwitch).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mBtnCamera = findViewById(R.id.btnCameraSwitch);
mBtnCamera.setOnClickListener(v -> {
if (!mIsMonitoring)
configCamera();
}
});

findViewById(R.id.btnSettings).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSettings();
}
});
findViewById(R.id.btnSettings).setOnClickListener(v -> showSettings());

mFragmentCamera = ((CameraFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_camera));

txtStatus = findViewById(R.id.txtStatus);

mAnimShake = AnimationUtils.loadAnimation(this, R.anim.shake);

mIsInitializedLayout = true;
}

Expand Down Expand Up @@ -361,6 +417,18 @@ public void onResume() {
int totalMilliseconds = preferences.getTimerDelay() * 1000;
txtTimer.setText(getTimerText(totalMilliseconds));
}

IntentFilter filter = new IntentFilter();
filter.addAction("event");
LocalBroadcastManager.getInstance(this).registerReceiver(receiver,filter );

}

@Override
protected void onPause() {
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);

}

@Override
Expand Down Expand Up @@ -404,4 +472,5 @@ public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int seco
int delaySeconds = second + minute * 60 + hourOfDay * 60 * 60;
updateTimerValue(delaySeconds);
}

}
32 changes: 32 additions & 0 deletions src/main/java/org/havenapp/main/ui/CameraConfigureActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@
package org.havenapp.main.ui;

import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import org.havenapp.main.PreferenceManager;
import org.havenapp.main.R;
Expand All @@ -29,10 +34,12 @@
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import me.angrybyte.numberpicker.listener.OnValueChangeListener;
import me.angrybyte.numberpicker.view.ActualNumberPicker;



public class CameraConfigureActivity extends AppCompatActivity {

private PreferenceManager mPrefManager = null;
Expand Down Expand Up @@ -125,6 +132,10 @@ public void onBackPressed() {
@Override
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("event");
LocalBroadcastManager.getInstance(this).registerReceiver(receiver,filter );

}

@Override
Expand Down Expand Up @@ -163,4 +174,25 @@ private boolean askForPermission(String permission, Integer requestCode) {
}
}


@Override
protected void onPause() {
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);

}

BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {

int eventType = intent.getIntExtra("type",-1);
boolean detected = intent.getBooleanExtra("detected",true);

if (detected)
Toast.makeText(CameraConfigureActivity.this,R.string.motion_detected,Toast.LENGTH_SHORT).show();

}
};

}
78 changes: 6 additions & 72 deletions src/main/java/org/havenapp/main/ui/CameraFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,75 +40,6 @@ public final class CameraFragment extends Fragment {
private PreferenceManager prefs;
private TextView txtCameraStatus;

private boolean isAttached = false;

/**
* Handler used to update back the UI after motion detection
*/
private final Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);

if (isAttached) {
if (txtCameraStatus != null) {

if (msg.what == EventTrigger.CAMERA) {
if (cameraViewHolder.doingVideoProcessing()) {
txtCameraStatus.setText(getString(R.string.motion_detected)
+ "\n" + getString(R.string.status_recording_video));
} else {
txtCameraStatus.setText(getString(R.string.motion_detected));
}
}
else if (msg.what == EventTrigger.POWER) {
txtCameraStatus.setText(getString(R.string.power_detected));
}
else if (msg.what == EventTrigger.MICROPHONE) {
txtCameraStatus.setText(getString(R.string.sound_detected));
}
else if (msg.what == EventTrigger.ACCELEROMETER || msg.what == EventTrigger.BUMP) {
txtCameraStatus.setText(getString(R.string.device_move_detected));
}
else if (msg.what == EventTrigger.LIGHT) {
txtCameraStatus.setText(getString(R.string.status_light));
}


}
}
}
};

BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {

int eventType = intent.getIntExtra("type",-1);

//String path = intent.getData().getPath();

handler.sendEmptyMessage(eventType);
}
};

@Override
public void onDetach() {
super.onDetach();
isAttached = false;
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(receiver);
}

@Override
public void onAttach(Context context) {
super.onAttach(context);
isAttached = true;
IntentFilter filter = new IntentFilter();
filter.addAction("event");
LocalBroadcastManager.getInstance(getContext()).registerReceiver(receiver,filter );
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Expand Down Expand Up @@ -179,15 +110,18 @@ public void initCamera ()

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

handler.sendEmptyMessage(motionDetected?EventTrigger.CAMERA:-1);

if (!isDetached()) {
Intent iEvent = new Intent("event");
iEvent.putExtra("type", EventTrigger.CAMERA);
iEvent.putExtra("detected",motionDetected);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(iEvent);
}

});
}

}


cameraViewHolder.startCamera();

}
Expand Down
Loading

0 comments on commit 0b50d8b

Please sign in to comment.