From d3989d54e133176ec4336020742a28637f30ceba Mon Sep 17 00:00:00 2001 From: Albert Vaca Date: Tue, 20 Aug 2013 09:58:17 +0200 Subject: [PATCH] Removing connectionReceivers of MainActivity and MprisActivity to prevent leaking the activities memory --- KdeConnect/KdeConnect.iml | 2 +- .../BroadcastTcpLinkProvider.java | 4 +- .../java/org/kde/connect/MainActivity.java | 102 ++++++++++-------- .../java/org/kde/connect/MprisActivity.java | 35 ++++-- 4 files changed, 85 insertions(+), 58 deletions(-) diff --git a/KdeConnect/KdeConnect.iml b/KdeConnect/KdeConnect.iml index fa5ccc82..4ab1b141 100644 --- a/KdeConnect/KdeConnect.iml +++ b/KdeConnect/KdeConnect.iml @@ -1,5 +1,5 @@ - + diff --git a/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java b/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java index 91aaa3ac..40642520 100644 --- a/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java +++ b/KdeConnect/src/main/java/org/kde/connect/LinkProviders/BroadcastTcpLinkProvider.java @@ -162,12 +162,12 @@ public class BroadcastTcpLinkProvider extends BaseLinkProvider { String deviceId = identityPackage.getString("deviceId"); Log.e("BroadcastTcpLinkProvider","addLink to "+deviceId); BaseComputerLink oldLink = visibleComputers.get(deviceId); + visibleComputers.put(deviceId, link); + connectionAccepted(identityPackage, link); if (oldLink != null) { Log.e("BroadcastTcpLinkProvider","Removing old connection to same device"); connectionLost(oldLink); } - visibleComputers.put(deviceId, link); - connectionAccepted(identityPackage, link); } public BroadcastTcpLinkProvider(Context context) { diff --git a/KdeConnect/src/main/java/org/kde/connect/MainActivity.java b/KdeConnect/src/main/java/org/kde/connect/MainActivity.java index 5e02560e..847f8c88 100644 --- a/KdeConnect/src/main/java/org/kde/connect/MainActivity.java +++ b/KdeConnect/src/main/java/org/kde/connect/MainActivity.java @@ -75,6 +75,53 @@ public class MainActivity extends Activity { } }; + void updateComputerList() { + Log.e("MainActivity","updateComputerList"); + + BackgroundService.RunCommand(MainActivity.this, new BackgroundService.InstanceCallback() { + @Override + public void onServiceStart(BackgroundService service) { + + HashMap devices = service.getDevices(); + final String[] ids = devices.keySet().toArray(new String[devices.size()]); + final String[] names = new String[devices.size()]; + for(int i = 0; i < ids.length; i++) { + Device d = devices.get(ids[i]); + names[i] = d.getName() + " " + d.isTrusted() + " " + d.isReachable(); + } + + runOnUiThread(new Runnable() { + @Override + public void run() { + ListView list = (ListView)findViewById(R.id.listView1); + list.setAdapter(new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, names)); + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long id) { + Intent intent = new Intent(MainActivity.this, DeviceActivity.class); + intent.putExtra("deviceId", ids[position]); + startActivity(intent); + } + }); + } + }); + + } + }); + }; + + BaseLinkProvider.ConnectionReceiver connectionReceiver = new BaseLinkProvider.ConnectionReceiver() { + @Override + public void onConnectionReceived(NetworkPackage identityPackage, BaseComputerLink link) { + updateComputerList(); + } + + @Override + public void onConnectionLost(BaseComputerLink link) { + updateComputerList(); + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -89,55 +136,22 @@ public class MainActivity extends Activity { @Override public void onServiceStart(BackgroundService service) { service.onNetworkChange(); + + service.addConnectionListener(connectionReceiver); } }); + updateComputerList(); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); BackgroundService.RunCommand(MainActivity.this, new BackgroundService.InstanceCallback() { @Override - public void onServiceStart(final BackgroundService service) { - - final Runnable updateComputerList = new Runnable() { - @Override - public void run() { - Log.e("MainActivity","updateComputerList"); - - HashMap devices = service.getDevices(); - final String[] ids = devices.keySet().toArray(new String[devices.size()]); - String[] names = new String[devices.size()]; - for(int i = 0; i < ids.length; i++) { - Device d = devices.get(ids[i]); - names[i] = d.getName() + " " + d.isTrusted() + " " + d.isReachable(); - } - - ListView list = (ListView)findViewById(R.id.listView1); - - list.setAdapter(new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, names)); - - list.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long id) { - Intent intent = new Intent(MainActivity.this, DeviceActivity.class); - intent.putExtra("deviceId", ids[position]); - startActivity(intent); - } - }); - } - }; - - service.addConnectionListener(new BaseLinkProvider.ConnectionReceiver() { - @Override - public void onConnectionReceived(NetworkPackage identityPackage, BaseComputerLink link) { - runOnUiThread(updateComputerList); - } - - @Override - public void onConnectionLost(BaseComputerLink link) { - runOnUiThread(updateComputerList); - } - }); - - updateComputerList.run(); - + public void onServiceStart(BackgroundService service) { + service.removeConnectionListener(connectionReceiver); } }); } diff --git a/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java b/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java index efd969ad..0e6c301c 100644 --- a/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java +++ b/KdeConnect/src/main/java/org/kde/connect/MprisActivity.java @@ -122,6 +122,29 @@ public class MprisActivity extends Activity { } + BaseLinkProvider.ConnectionReceiver connectionReceiver = new BaseLinkProvider.ConnectionReceiver() { + @Override + public void onConnectionReceived(NetworkPackage identityPackage, BaseComputerLink link) { + connectToPlugin(); + } + + @Override + public void onConnectionLost(BaseComputerLink link) { + + } + }; + + @Override + protected void onDestroy() { + super.onDestroy(); + BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { + @Override + public void onServiceStart(BackgroundService service) { + service.removeConnectionListener(connectionReceiver); + } + }); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -132,17 +155,7 @@ public class MprisActivity extends Activity { BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { @Override public void onServiceStart(BackgroundService service) { - service.addConnectionListener(new BaseLinkProvider.ConnectionReceiver() { - @Override - public void onConnectionReceived(NetworkPackage identityPackage, BaseComputerLink link) { - connectToPlugin(); - } - - @Override - public void onConnectionLost(BaseComputerLink link) { - - } - }); + service.addConnectionListener(connectionReceiver); } }); connectToPlugin();