Sahil-Pattni
11/3/2016 - 7:07 PM

Android App

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);
    }
}