diff --git a/app/src/main/java/de/rochefort/childmonitor/DiscoverActivity.java b/app/src/main/java/de/rochefort/childmonitor/DiscoverActivity.java index 7471785..6b6f8df 100644 --- a/app/src/main/java/de/rochefort/childmonitor/DiscoverActivity.java +++ b/app/src/main/java/de/rochefort/childmonitor/DiscoverActivity.java @@ -35,8 +35,7 @@ import android.widget.ListView; import android.widget.Toast; -public class DiscoverActivity extends Activity -{ +public class DiscoverActivity extends Activity { private static final String PREF_KEY_CHILD_DEVICE_ADDRESS = "childDeviceAddress"; private static final String PREF_KEY_CHILD_DEVICE_PORT = "childDevicePort"; final String TAG = "ChildMonitor"; @@ -46,8 +45,7 @@ public class DiscoverActivity extends Activity NsdManager.DiscoveryListener _discoveryListener; @Override - protected void onCreate(Bundle savedInstanceState) - { + protected void onCreate(Bundle savedInstanceState) { Log.i(TAG, "ChildMonitor start"); _nsdManager = (NsdManager)this.getSystemService(Context.NSD_SERVICE); @@ -56,34 +54,18 @@ public class DiscoverActivity extends Activity setContentView(R.layout.activity_discover); final Button discoverChildButton = (Button) findViewById(R.id.discoverChildButton); - discoverChildButton.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - loadDiscoveryViaMdns(); - } - }); + discoverChildButton.setOnClickListener(v -> loadDiscoveryViaMdns()); final Button enterChildAddressButton = (Button) findViewById(R.id.enterChildAddressButton); - enterChildAddressButton.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - loadDiscoveryViaAddress(); - } - }); + enterChildAddressButton.setOnClickListener(v -> loadDiscoveryViaAddress()); } - private void loadDiscoveryViaMdns() - { + private void loadDiscoveryViaMdns() { setContentView(R.layout.activity_discover_mdns); startServiceDiscovery("_childmonitor._tcp."); } - private void loadDiscoveryViaAddress() - { + private void loadDiscoveryViaAddress() { setContentView(R.layout.activity_discover_address); final Button connectButton = (Button) findViewById(R.id.connectViaAddressButton); @@ -98,48 +80,41 @@ public class DiscoverActivity extends Activity portField.setText(String.valueOf(preferredPort)); } - connectButton.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) + connectButton.setOnClickListener(v -> { + Log.i(TAG, "Connecting to child device via address"); + final String addressString = addressField.getText().toString(); + final String portString = portField.getText().toString(); + + if(addressString.length() == 0) { - Log.i(TAG, "Connecting to child device via address"); - final String addressString = addressField.getText().toString(); - final String portString = portField.getText().toString(); - - if(addressString.length() == 0) - { - Toast.makeText(DiscoverActivity.this, R.string.invalidAddress, Toast.LENGTH_LONG).show(); - return; - } - - int port = 0; - - try - { - port = Integer.parseInt(portString); - } - catch(NumberFormatException e) - { - Toast.makeText(DiscoverActivity.this, R.string.invalidPort, Toast.LENGTH_LONG).show(); - return; - } - SharedPreferences.Editor preferencesEditor = getPreferences(MODE_PRIVATE).edit(); - preferencesEditor.putString(PREF_KEY_CHILD_DEVICE_ADDRESS, addressString); - preferencesEditor.putInt(PREF_KEY_CHILD_DEVICE_PORT, port); - preferencesEditor.apply(); - connectToChild(addressString, port, addressString); + Toast.makeText(DiscoverActivity.this, R.string.invalidAddress, Toast.LENGTH_LONG).show(); + return; } + + int port = 0; + + try + { + port = Integer.parseInt(portString); + } + catch(NumberFormatException e) + { + Toast.makeText(DiscoverActivity.this, R.string.invalidPort, Toast.LENGTH_LONG).show(); + return; + } + SharedPreferences.Editor preferencesEditor = getPreferences(MODE_PRIVATE).edit(); + preferencesEditor.putString(PREF_KEY_CHILD_DEVICE_ADDRESS, addressString); + preferencesEditor.putInt(PREF_KEY_CHILD_DEVICE_PORT, port); + preferencesEditor.apply(); + connectToChild(addressString, port, addressString); }); } @Override - protected void onDestroy() - { + protected void onDestroy() { Log.i(TAG, "ChildMonitoring stop"); - if(_discoveryListener != null) - { + if(_discoveryListener != null) { Log.i(TAG, "Unregistering monitoring service"); _nsdManager.stopServiceDiscovery(_discoveryListener); @@ -149,8 +124,7 @@ public class DiscoverActivity extends Activity super.onDestroy(); } - public void startServiceDiscovery(final String serviceType) - { + public void startServiceDiscovery(final String serviceType) { final NsdManager nsdManager = (NsdManager)this.getSystemService(Context.NSD_SERVICE); if (nsdManager == null) { Log.e(TAG, "Could not obtain nsdManager"); @@ -163,17 +137,15 @@ public class DiscoverActivity extends Activity final WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock"); multicastLock.setReferenceCounted(true); multicastLock.acquire(); - multicastReleaser = new Runnable() { - @Override - public void run() { + multicastReleaser = () -> { + try { multicastLock.release(); + } catch (Exception ignored) { + //dont really care } }; } else { - multicastReleaser = new Runnable() { - @Override - public void run() { - } + multicastReleaser = () -> { }; } @@ -184,20 +156,13 @@ public class DiscoverActivity extends Activity R.layout.available_children_list); serviceTable.setAdapter(availableServicesAdapter); - serviceTable.setOnItemClickListener(new OnItemClickListener() - { - @Override - public void onItemClick(AdapterView parent, View view, - int position, long id) - { - final ServiceInfoWrapper info = (ServiceInfoWrapper) parent.getItemAtPosition(position); - connectToChild(info.getAddress(), info.getPort(), info.getName()); - } + serviceTable.setOnItemClickListener((parent, view, position, id) -> { + final ServiceInfoWrapper info = (ServiceInfoWrapper) parent.getItemAtPosition(position); + connectToChild(info.getAddress(), info.getPort(), info.getName()); }); // Instantiate a new DiscoveryListener - _discoveryListener = new NsdManager.DiscoveryListener() - { + _discoveryListener = new NsdManager.DiscoveryListener() { // Called as soon as service discovery begins. @Override public void onDiscoveryStarted(String regType) @@ -210,50 +175,34 @@ public class DiscoverActivity extends Activity // A service was found! Do something with it. Log.d(TAG, "Service discovery success: " + service); - if (!service.getServiceType().equals(serviceType)) - { + if (!service.getServiceType().equals(serviceType)) { // Service type is the string containing the protocol and // transport layer for this service. Log.d(TAG, "Unknown Service Type: " + service.getServiceType()); - } - else if (service.getServiceName().contains("ChildMonitor")) - { - NsdManager.ResolveListener resolver = new NsdManager.ResolveListener() - { + } else if (service.getServiceName().contains("ChildMonitor")) { + NsdManager.ResolveListener resolver = new NsdManager.ResolveListener() { @Override - public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) - { + public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) { // Called when the resolve fails. Use the error code to debug. Log.e(TAG, "Resolve failed: error " + errorCode + " for service: " + serviceInfo); } @Override - public void onServiceResolved(final NsdServiceInfo serviceInfo) - { + public void onServiceResolved(final NsdServiceInfo serviceInfo) { Log.i(TAG, "Resolve Succeeded: " + serviceInfo); - DiscoverActivity.this.runOnUiThread(new Runnable() - { - @Override - public void run() - { - availableServicesAdapter.add(new ServiceInfoWrapper(serviceInfo)); - } - }); + DiscoverActivity.this.runOnUiThread(() -> availableServicesAdapter.add(new ServiceInfoWrapper(serviceInfo))); } }; _nsdManager.resolveService(service, resolver); - } - else - { + } else { Log.d(TAG, "Unknown Service name: " + service.getServiceName()); } } @Override - public void onServiceLost(NsdServiceInfo service) - { + public void onServiceLost(NsdServiceInfo service) { // When the network service is no longer available. // Internal bookkeeping code goes here. Log.e(TAG, "Service lost: " + service); @@ -261,23 +210,20 @@ public class DiscoverActivity extends Activity } @Override - public void onDiscoveryStopped(String serviceType) - { + public void onDiscoveryStopped(String serviceType) { Log.i(TAG, "Discovery stopped: " + serviceType); multicastReleaser.run(); } @Override - public void onStartDiscoveryFailed(String serviceType, int errorCode) - { + public void onStartDiscoveryFailed(String serviceType, int errorCode) { Log.e(TAG, "Discovery failed: Error code: " + errorCode); nsdManager.stopServiceDiscovery(this); multicastReleaser.run(); } @Override - public void onStopDiscoveryFailed(String serviceType, int errorCode) - { + public void onStopDiscoveryFailed(String serviceType, int errorCode) { Log.e(TAG, "Discovery failed: Error code: " + errorCode); nsdManager.stopServiceDiscovery(this); multicastReleaser.run(); @@ -285,7 +231,8 @@ public class DiscoverActivity extends Activity }; nsdManager.discoverServices( - serviceType, NsdManager.PROTOCOL_DNS_SD, _discoveryListener); + serviceType, NsdManager.PROTOCOL_DNS_SD, _discoveryListener + ); } /** @@ -295,8 +242,7 @@ public class DiscoverActivity extends Activity * @param port * @param name */ - private void connectToChild(final String address, final int port, final String name) - { + private void connectToChild(final String address, final int port, final String name) { final Intent i = new Intent(getApplicationContext(), ListenActivity.class); final Bundle b = new Bundle(); b.putString("address", address); @@ -307,8 +253,7 @@ public class DiscoverActivity extends Activity } } -class ServiceInfoWrapper -{ +class ServiceInfoWrapper { private NsdServiceInfo _info; public ServiceInfoWrapper(NsdServiceInfo info) { @@ -325,8 +270,7 @@ class ServiceInfoWrapper return _info.getPort(); } - public String getName() - { + public String getName() { // If there is more than one service on the network, it will // have a number at the end, but will appear as the following: // "ChildMonitor\\032(number) diff --git a/app/src/main/java/de/rochefort/childmonitor/ListenActivity.java b/app/src/main/java/de/rochefort/childmonitor/ListenActivity.java index 6b470d8..0736395 100644 --- a/app/src/main/java/de/rochefort/childmonitor/ListenActivity.java +++ b/app/src/main/java/de/rochefort/childmonitor/ListenActivity.java @@ -33,8 +33,7 @@ import java.io.InputStream; import java.net.Socket; import java.net.UnknownHostException; -public class ListenActivity extends Activity -{ +public class ListenActivity extends Activity { final String TAG = "ChildMonitor"; // Sets an ID for the notification final static int mNotificationId = 1; @@ -51,8 +50,7 @@ public class ListenActivity extends Activity private final int bufferSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding); private final int byteBufferSize = bufferSize*2; - private void streamAudio(final Socket socket, AudioListener listener) throws IllegalArgumentException, IllegalStateException, IOException - { + private void streamAudio(final Socket socket, AudioListener listener) throws IllegalArgumentException, IllegalStateException, IOException { Log.i(TAG, "Setting up stream"); final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, @@ -69,38 +67,31 @@ public class ListenActivity extends Activity audioTrack.play(); - try - { + try { final byte [] readBuffer = new byte[byteBufferSize]; final short [] decodedBuffer = new short[byteBufferSize*2]; - while(socket.isConnected() && read != -1 && Thread.currentThread().isInterrupted() == false) - { + while(socket.isConnected() && read != -1 && !Thread.currentThread().isInterrupted()) { read = is.read(readBuffer); int decoded = CODEC.decode(decodedBuffer, readBuffer, read, 0); - if(decoded > 0) - { + if(decoded > 0) { audioTrack.write(decodedBuffer, 0, decoded); short[] decodedBytes = new short[decoded]; System.arraycopy(decodedBuffer, 0, decodedBytes, 0, decoded); listener.onAudio(decodedBytes); } } - } - catch (Exception e) { + } catch (Exception e) { Log.e(TAG, "Connection failed", e); - } - finally - { + } finally { audioTrack.stop(); socket.close(); } } @Override - protected void onCreate(Bundle savedInstanceState) - { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle b = getIntent().getExtras(); @@ -130,66 +121,38 @@ public class ListenActivity extends Activity final VolumeView volumeView = (VolumeView) findViewById(R.id.volume); - final AudioListener listener = new AudioListener() { - @Override - public void onAudio(final short[] audioData) { - runOnUiThread(new Runnable() { - @Override - public void run() { - volumeView.onAudioData(audioData); - } - }); + final AudioListener listener = audioData -> runOnUiThread(() -> volumeView.onAudioData(audioData)); + + + _listenThread = new Thread(() -> { + try { + final Socket socket = new Socket(_address, _port); + streamAudio(socket, listener); + } catch (IOException e) { + Log.e(TAG, "Failed to stream audio", e); } - }; + if(!Thread.currentThread().isInterrupted()) { + // If this thread has not been interrupted, likely something + // bad happened with the connection to the child device. Play + // an alert to notify the user that the connection has been + // interrupted. + playAlert(); - _listenThread = new Thread(new Runnable() - { - @Override - public void run() - { - try - { - final Socket socket = new Socket(_address, _port); - streamAudio(socket, listener); - } - catch (UnknownHostException e) - { - Log.e(TAG, "Failed to stream audio", e); - } - catch (IOException e) - { - Log.e(TAG, "Failed to stream audio", e); - } + ListenActivity.this.runOnUiThread(() -> { + final TextView connectedText1 = (TextView) findViewById(R.id.connectedTo); + connectedText1.setText(""); - if(Thread.currentThread().isInterrupted() == false) - { - // If this thread has not been interrupted, likely something - // bad happened with the connection to the child device. Play - // an alert to notify the user that the connection has been - // interrupted. - playAlert(); - - ListenActivity.this.runOnUiThread(new Runnable() - { - @Override - public void run() - { - final TextView connectedText = (TextView) findViewById(R.id.connectedTo); - connectedText.setText(""); - - final TextView statusText = (TextView) findViewById(R.id.textStatus); - statusText.setText(R.string.disconnected); - NotificationCompat.Builder mBuilder = - new NotificationCompat.Builder(ListenActivity.this) - .setOngoing(false) - .setSmallIcon(R.drawable.listening_notification) - .setContentTitle(getString(R.string.app_name)) - .setContentText(getString(R.string.disconnected)); - _mNotifyMgr.notify(mNotificationId, mBuilder.build()); - } - }); - } + final TextView statusText1 = (TextView) findViewById(R.id.textStatus); + statusText1.setText(R.string.disconnected); + NotificationCompat.Builder mBuilder1 = + new NotificationCompat.Builder(ListenActivity.this) + .setOngoing(false) + .setSmallIcon(R.drawable.listening_notification) + .setContentTitle(getString(R.string.app_name)) + .setContentText(getString(R.string.disconnected)); + _mNotifyMgr.notify(mNotificationId, mBuilder1.build()); + }); } }); @@ -197,32 +160,24 @@ public class ListenActivity extends Activity } @Override - public void onDestroy() - { + protected void onStop() { _listenThread.interrupt(); _listenThread = null; + super.onStop(); + } + @Override + public void onDestroy() { super.onDestroy(); } - private void playAlert() - { + private void playAlert() { final MediaPlayer mp = MediaPlayer.create(this, R.raw.upward_beep_chromatic_fifths); - if(mp != null) - { + if(mp != null) { Log.i(TAG, "Playing alert"); - mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() - { - @Override - public void onCompletion(MediaPlayer mp) - { - mp.release(); - } - }); + mp.setOnCompletionListener(mp1 -> mp1.release()); mp.start(); - } - else - { + } else { Log.e(TAG, "Failed to play alert"); } } diff --git a/app/src/main/java/de/rochefort/childmonitor/StartActivity.java b/app/src/main/java/de/rochefort/childmonitor/StartActivity.java index 846a1da..05cdb83 100644 --- a/app/src/main/java/de/rochefort/childmonitor/StartActivity.java +++ b/app/src/main/java/de/rochefort/childmonitor/StartActivity.java @@ -27,8 +27,7 @@ import android.util.Log; import android.view.View; import android.widget.Button; -public class StartActivity extends Activity -{ +public class StartActivity extends Activity { static final String TAG = "ChildMonitor"; private final static int PERMISSIONS_REQUEST_RECORD_AUDIO = 298349824; private final static int PERMISSIONS_REQUEST_MULTICAST = 298349825; @@ -41,34 +40,24 @@ public class StartActivity extends Activity setContentView(R.layout.activity_start); final Button monitorButton = (Button) findViewById(R.id.useChildDevice); - monitorButton.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - Log.i(TAG, "Starting up monitor"); + monitorButton.setOnClickListener(v -> { + Log.i(TAG, "Starting up monitor"); - if (isAudioRecordingPermissionGranted()) { - startActivity(new Intent(getApplicationContext(), MonitorActivity.class)); - } else { - requestAudioPermission(); - } + if (isAudioRecordingPermissionGranted()) { + startActivity(new Intent(getApplicationContext(), MonitorActivity.class)); + } else { + requestAudioPermission(); } }); final Button connectButton = (Button) findViewById(R.id.useParentDevice); - connectButton.setOnClickListener(new View.OnClickListener() - { - @Override - public void onClick(View v) - { - Log.i(TAG, "Starting connection activity"); - if (isMulticastPermissionGranted()) { - Intent i = new Intent(getApplicationContext(), DiscoverActivity.class); - startActivity(i); - } else { - requestMulticastPermission(); - } + connectButton.setOnClickListener(v -> { + Log.i(TAG, "Starting connection activity"); + if (isMulticastPermissionGranted()) { + Intent i = new Intent(getApplicationContext(), DiscoverActivity.class); + startActivity(i); + } else { + requestMulticastPermission(); } }); }