From b00c845c5cd75d2f9a3d1c1e353b4559797eba1c Mon Sep 17 00:00:00 2001 From: toni Date: Wed, 20 Dec 2017 17:23:23 +0100 Subject: [PATCH] =?UTF-8?q?-=20close=20#6=20-=20verbindung=20klappt=20und?= =?UTF-8?q?=20macht=20was=20sie=20soll.=20sonderf=C3=A4lle=20fehlen=20halt?= =?UTF-8?q?=20noch=20wie=20verbindung=20kackt=20ab=20etc.=20-=20ref=20#8?= =?UTF-8?q?=20mal=20einen=20filewriter=20geschrieben,=20welcher=20die=20se?= =?UTF-8?q?nsordaten=20rausschreiben=20soll.=20-=20viele=20kleine=20sachen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/ConductorsPhone/app/build.gradle | 6 +- .../app/src/main/AndroidManifest.xml | 4 +- .../DataLayerListenerService.java | 2 +- .../conductorswatch/MainActivity.java | 47 +++++++++--- .../tonifetzer/conductorswatch/Metronome.java | 41 +++++++++++ .../app/src/main/res/layout/activity_main.xml | 3 +- .../app/src/main/res/raw/metronom4.ogg | Bin 0 -> 6364 bytes .../tonifetzer/conductorswatch/Estimator.java | 2 + .../conductorswatch/MainActivity.java | 61 +++++++++++----- .../conductorswatch/WorkerFragment.java | 2 - .../conductorswatch/utilities/FileWriter.java | 68 ++++++++++++++++++ .../utilities/MovingFilter.java | 1 + 12 files changed, 201 insertions(+), 36 deletions(-) create mode 100644 android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/Metronome.java create mode 100644 android/ConductorsPhone/app/src/main/res/raw/metronom4.ogg create mode 100644 android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/FileWriter.java diff --git a/android/ConductorsPhone/app/build.gradle b/android/ConductorsPhone/app/build.gradle index 4c055d4..d208ac1 100644 --- a/android/ConductorsPhone/app/build.gradle +++ b/android/ConductorsPhone/app/build.gradle @@ -1,6 +1,10 @@ apply plugin: 'com.android.application' android { + signingConfigs { + config { + } + } compileSdkVersion 26 defaultConfig { applicationId "de.tonifetzer.conductorswatch" @@ -19,7 +23,7 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' diff --git a/android/ConductorsPhone/app/src/main/AndroidManifest.xml b/android/ConductorsPhone/app/src/main/AndroidManifest.xml index dbae258..4bf6a67 100644 --- a/android/ConductorsPhone/app/src/main/AndroidManifest.xml +++ b/android/ConductorsPhone/app/src/main/AndroidManifest.xml @@ -22,8 +22,8 @@ - > + android:label="@string/app_name" + android:configChanges="orientation|screenSize"> diff --git a/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/DataLayerListenerService.java b/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/DataLayerListenerService.java index f60c1ee..821daa3 100644 --- a/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/DataLayerListenerService.java +++ b/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/DataLayerListenerService.java @@ -28,7 +28,7 @@ public class DataLayerListenerService extends WearableListenerService { @Override public void onMessageReceived(MessageEvent messageEvent) { - LOGD(TAG, "onMessageReceived: " + messageEvent); + //LOGD(TAG, "onMessageReceived: " + messageEvent); // Check to see if the message is to start an activity if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) { diff --git a/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java b/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java index e14e508..735697b 100644 --- a/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java +++ b/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java @@ -1,25 +1,30 @@ package de.tonifetzer.conductorswatch; -import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import android.graphics.Color; +import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; +import android.view.SoundEffectConstants; import android.widget.TextView; - -import com.google.android.gms.tasks.Task; import com.google.android.gms.wearable.MessageEvent; import com.google.android.gms.wearable.MessageClient; import com.google.android.gms.wearable.Wearable; +import java.util.Timer; + public class MainActivity extends AppCompatActivity implements MessageClient.OnMessageReceivedListener{ private TextView mTextView; - private String mCurBPM; + Timer mTimer; private static final String TAG = "DataLayerService"; private static final String START_ACTIVITY_PATH = "/start-activity"; + private static final String START_RECORD_PATH = "/start-record"; + private static final String STOP_RECORD_PATH = "/stop-record"; + private static final String UPDATE_PATH = "/update"; + + private boolean mIsRecording = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -44,14 +49,36 @@ public class MainActivity extends AppCompatActivity implements MessageClient.OnM @Override public void onMessageReceived(MessageEvent messageEvent) { + + String[] parts = messageEvent.getPath().split(":"); + // Check to see if the message is to start an activity if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) { Log.d(TAG, "onStartReceived: " + messageEvent); + //this happens if the app is already running + //TODO: handle this in wear app } - else{ - //update bpm - Log.d(TAG, "onBPMReceived: " + messageEvent); - //mTextView.setText(messageEvent.getPath()); + else if (messageEvent.getPath().contains(START_RECORD_PATH)){ + + if(mIsRecording){ + mTextView.setText(parts[2]); + } + else { + mTimer = new Timer(); + mTimer.scheduleAtFixedRate(new Metronome(this) , 0, 60000 / Integer.parseInt(parts[1])); + mTextView.setTextColor(Color.parseColor("#EE693F")); + mIsRecording = true; + } + + } + else if (messageEvent.getPath().contains(STOP_RECORD_PATH)){ + + mTimer.cancel(); + mTextView.setTextColor(Color.parseColor("#158b69")); + mIsRecording = false; + } + else if (messageEvent.getPath().contains(UPDATE_PATH)){ + mTextView.setText(parts[2]); } } } diff --git a/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/Metronome.java b/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/Metronome.java new file mode 100644 index 0000000..c94f74e --- /dev/null +++ b/android/ConductorsPhone/app/src/main/java/de/tonifetzer/conductorswatch/Metronome.java @@ -0,0 +1,41 @@ +package de.tonifetzer.conductorswatch; + +import android.content.Context; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.SoundPool; + +import java.util.TimerTask; + +/** + * Created by toni on 20/12/17. + */ + +public class Metronome extends TimerTask { + + //private MediaPlayer mMediaPlayer; + private SoundPool soundPool; + boolean loaded = false; + private int soundID; + + public Metronome(Context context){ + soundPool = new SoundPool.Builder().setMaxStreams(10).build(); + soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { + @Override + public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { + loaded = true; + } + }); + soundID = soundPool.load(context, R.raw.metronom4, 1); + } + + //TODO: better solution. create sound with the exact length and then loop forever with loop: -1 + public void run() { + if (loaded) { + soundPool.stop(soundID); + soundPool.play(soundID, 1, 1, 1, 0, 1f); + } + } + + +} \ No newline at end of file diff --git a/android/ConductorsPhone/app/src/main/res/layout/activity_main.xml b/android/ConductorsPhone/app/src/main/res/layout/activity_main.xml index 08c7d49..3c2d36b 100644 --- a/android/ConductorsPhone/app/src/main/res/layout/activity_main.xml +++ b/android/ConductorsPhone/app/src/main/res/layout/activity_main.xml @@ -8,13 +8,14 @@ diff --git a/android/ConductorsPhone/app/src/main/res/raw/metronom4.ogg b/android/ConductorsPhone/app/src/main/res/raw/metronom4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fd02871ed264012f0e730cbe3b2a9babf72f2dcd GIT binary patch literal 6364 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 literal 0 HcmV?d00001 diff --git a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/Estimator.java b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/Estimator.java index b672320..e65ae2f 100644 --- a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/Estimator.java +++ b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/Estimator.java @@ -86,6 +86,8 @@ public class Estimator implements SensorEventListener { mAccelerometerWindowBuffer.add(new AccelerometerData(System.currentTimeMillis(), se.values[0], se.values[1], se.values[2])); } + //TODO: get also gyro and write stuff into file + // mSensorUpdateFlag = false; //} } diff --git a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java index 6bf9bce..58fc630 100644 --- a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java +++ b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/MainActivity.java @@ -41,6 +41,10 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF // connection to phone stuff private static final String START_ACTIVITY_PATH = "/start-activity"; + private static final String START_RECORD_PATH = "/start-record"; + private static final String STOP_RECORD_PATH = "/stop-record"; + private static final String UPDATE_PATH = "/update"; + public static final String TAG = "DataLayerListenerService"; private GoogleApiClient mGoogleApiClient; private Node mNode; @@ -85,6 +89,10 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF args.putInt("bpm", mCroller.getProgress()); worker.setArguments(args); + //send data to phone, that we start to record + String curProgress = Integer.toString(mCroller.getProgress()); + sendMessage(START_RECORD_PATH + ":" + curProgress + ":" + curProgress); + //setter worker.setCrollerWorker(mCroller); worker.setTextViewWorker(mTextView); @@ -103,6 +111,9 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF mCroller.setBackCircleColor(Color.parseColor("#158b69")); mTextView.setTextColor(Color.parseColor("#158b69")); mCroller.setProgress(mMetronomBpm); + + //send data to phone, that we stopped to record + sendMessage(STOP_RECORD_PATH); } } }; @@ -163,6 +174,10 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF mCroller.interruptMainCircleColorAnimated(); mCroller.interruptBackCircleAnimated(); } + else { + mCroller.setBackCircleColor(Color.parseColor("#cccccc")); + mCroller.setMainCircleColor(Color.parseColor("#ffffff")); + } return false; } @@ -252,8 +267,18 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF @Override public void onProgressChanged(int progress) { // use the progress - mTextView.setText(String.valueOf(progress)); - sendMessage(Integer.toString(progress)); + String curProgress = Integer.toString(progress); + String metronomBpm = Integer.toString(mMetronomBpm);; + mTextView.setText(curProgress); + + //TODO: too many messages? or just because of thread? + if(mModeRecord){ + sendMessage(START_RECORD_PATH + ":" + metronomBpm + ":" + curProgress); + } + else { + sendMessage(UPDATE_PATH + ":" + metronomBpm + ":" + curProgress); + } + } }); @@ -274,8 +299,10 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF private void sendMessage(String Key) { + //TODO: sammel key's und schicke nur die hälfte + if (mNode != null && mGoogleApiClient!= null && mGoogleApiClient.isConnected()) { - Log.d(TAG, "-- " + mGoogleApiClient.isConnected()); + //Log.d(TAG, "-- " + mGoogleApiClient.isConnected()); Wearable.MessageApi.sendMessage( mGoogleApiClient, mNode.getId(), Key, new byte[0]).setResultCallback( @@ -283,7 +310,7 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF @Override public void onResult(MessageApi.SendMessageResult sendMessageResult) { - Log.d(TAG, "--- " + sendMessageResult.getStatus().getStatusCode()); + //Log.d(TAG, "-- " + sendMessageResult.getStatus().getStatusCode()); if (!sendMessageResult.getStatus().isSuccess()) { Log.e(TAG, "Failed to send message with status code: " + sendMessageResult.getStatus().getStatusCode()); @@ -316,7 +343,6 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF } - @Override public void onFragmentStopped(Vector bpmList) { @@ -332,19 +358,12 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF super.onStart(); if (!mResolvingError) { mGoogleApiClient.connect(); + + //TODO. mGoogleApiClient.disconnect(); implementieren in onPause() } - - - //start app on phone - //TODO: bissle cleverer machen. starten und auf antwort warten. falls er sagt "bin schon an" nicht mehr senden - // ansonsten nochmal versuchen.bzw. auch von anderen stellen (bei click etc) aufrufen. - - - - - //TODO: disconnect or own class for this stuff } + //TODO: rename this! onTapBPMNewEstimation or something like that @Override public void onNewEstimation(int bpm) { mTapBpmEstimation = bpm; @@ -363,6 +382,7 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF } } + //TODO: rename this! onTapBPMFinished or something like that @Override public void onFinished() { @@ -387,13 +407,16 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF public void onConnected(@Nullable Bundle bundle) { resolveNode(); - new Thread(new Runnable() { @Override public void run() { while(mNode == null){ - + try { + Thread.sleep(1000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } } sendMessage(START_ACTIVITY_PATH); } @@ -403,12 +426,12 @@ public class MainActivity extends WearableActivity implements WorkerFragment.OnF @Override public void onConnectionSuspended(int i) { - + //TODO: implement this } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { - + //TODO: implement this } private void resolveNode() { diff --git a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/WorkerFragment.java b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/WorkerFragment.java index 5a13fee..2ee1082 100644 --- a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/WorkerFragment.java +++ b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/WorkerFragment.java @@ -61,7 +61,6 @@ public class WorkerFragment extends Fragment implements Metronome.OnMetronomeLis //mBpmThread = new Thread(mEstimator, "estThread"); mBpmList = new Vector(); - // init metronome and listener mMetronome = new Metronome(getArguments().getInt("bpm")); mMetronome.add(this); @@ -69,7 +68,6 @@ public class WorkerFragment extends Fragment implements Metronome.OnMetronomeLis mVibrator = (Vibrator) this.getActivity().getSystemService(Context.VIBRATOR_SERVICE); - //keep screen always on this.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } diff --git a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/FileWriter.java b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/FileWriter.java new file mode 100644 index 0000000..d6d7c6f --- /dev/null +++ b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/FileWriter.java @@ -0,0 +1,68 @@ +package de.tonifetzer.conductorswatch.utilities; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +/** + * Created by toni on 20/12/17. + */ + +public class FileWriter { + + private String mFilename; + + private ByteArrayOutputStream mByteStream; + private DataOutputStream mDataStream; + + FileWriter(String filename){ + mFilename = filename; + mByteStream = new ByteArrayOutputStream(); + mDataStream = new DataOutputStream(mByteStream); + } + + public void writeDouble(double data){ + try { + mDataStream.writeDouble(data); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void writeString(String data){ + try { + mDataStream.writeChars(data); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void writeInt(int data){ + try { + mDataStream.writeInt(data); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public byte[] getByteArray(){ + return mByteStream.toByteArray(); + } + + public String getFilename(){ + return mFilename; + } + + public void reset(){ + mByteStream.reset(); + } + + public void close(){ + try { + mByteStream.close(); + mDataStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/MovingFilter.java b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/MovingFilter.java index 7a49cf7..813f168 100644 --- a/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/MovingFilter.java +++ b/android/ConductorsWatch/app/src/main/java/de/tonifetzer/conductorswatch/utilities/MovingFilter.java @@ -33,5 +33,6 @@ public class MovingFilter { public void clear(){ mSamples.clear(); + mTotal = 0d; } }