Android App
package edu.purdue.spattni.lab10;
import android.widget.TextView;
/**
* Created by spattni on 11/3/16.
*/
public class ShakeView {
TextView message;
public ShakeView(TextView message) {
// TO-DO: initialize instance variables
this.message = message;
}
public void changeMessage(String message) {
// TO-DO: change the message of the TextView
// example: someTextView.setText("someMessage")
this.message.setText(message);
}
}
package edu.purdue.spattni.lab10;
import java.util.Random;
/**
* Created by spattni on 11/3/16.
*/
public class ShakeModel {
String[] messages = new String[8];
ShakeView view;
public ShakeModel(ShakeView view) {
//TO-DO: initialize instance variables
this.view = view;
//create different response messages in all positions of the messages array
messages[0] = "Yes";
messages[1] = "No";
messages[2] = "Maybe";
messages[4] = "It seems so";
messages[5] = "In due time";
messages[6] = "Apparently";
messages[7] = "It appears not";
}
public void displayMessage() {
//TO-DO: choose a random message of the array
//make a call to view.changeMessages using the random message chosen
Random generator = new Random();
this.view.changeMessage(this.messages[generator.nextInt(8)]);
}
}
package edu.purdue.spattni.lab10;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class ShakeActivity extends Activity {
// needed for the logic
ShakeModel model;
ShakeView view;
// needed for the sensor
Sensor accelerometer;
private SensorManager sensorManager;
private final SensorEventListener sensorListener = new SensorEventListener() {
@Override
public final void onSensorChanged(SensorEvent se) {
double x = (double) se.values[0];
double y = (double) se.values[1];
double z = (double) se.values[2];
double shakeForce = Math.sqrt(x * x + y * y + z * z);
String xyz = "X: %.2f\nY: %.2f\nZ: %.2f";
if (shakeForce > 15) {
// make a call to display message in the model
model.displayMessage();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Leave empty
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shake);
// Initializing the sensor manager and accelerometer
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(sensorListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
//Error:Execution failed for task ':app:clean'.
// TO-DO: initialize variables for widgets
TextView message = (TextView)findViewById(R.id.textView2);
// take a look at the names in shake_activity.xml and make sure they match
// TO-DO: initialize the view and model (instance variables)
// view receives the message above as a parameter
// model receives the view as a parameter
this.view = new ShakeView(message);
this.model = new ShakeModel(this.view);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(sensorListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
sensorManager.unregisterListener(sensorListener);
super.onPause();
}
}
package edu.purdue.spattni.lab10;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//TO-DO: insert these two lines into your method
Intent intent = new Intent(this, ShakeActivity.class);
startActivity(intent);
}
}