Skip to content

Commit 1ea9b3e

Browse files
author
David Graeff
committed
fixed all deprecated warnings. fixed device detection. improved scene element adding. fixed scene element change propagation
1 parent edacae9 commit 1ea9b3e

File tree

61 files changed

+1114
-723
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1114
-723
lines changed

app/src/main/java/oly/netpowerctrl/anel/NetworkChangedBroadcastReceiver.java

Lines changed: 0 additions & 52 deletions
This file was deleted.

app/src/main/java/oly/netpowerctrl/data/AbstractBasePlugin.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,23 @@
44
import android.support.annotation.NonNull;
55
import android.support.annotation.Nullable;
66

7+
import java.util.ArrayList;
8+
import java.util.List;
9+
710
import oly.netpowerctrl.devices.Credentials;
811
import oly.netpowerctrl.executables.Executable;
12+
import oly.netpowerctrl.executables.ExecutableAndCommand;
913
import oly.netpowerctrl.executables.onNameChangeResult;
1014
import oly.netpowerctrl.ioconnection.IOConnection;
1115
import oly.netpowerctrl.ioconnection.onNewIOConnection;
12-
import oly.netpowerctrl.network.ReachabilityStates;
1316
import oly.netpowerctrl.network.onExecutionFinished;
1417

1518
/**
1619
* This interface defines a plugin
1720
*/
1821
public abstract class AbstractBasePlugin {
1922
protected final DataService dataService;
23+
protected final List<ExecutableAndCommand> command_list = new ArrayList<>();
2024
protected AbstractBasePlugin(DataService dataService) {
2125
this.dataService = dataService;
2226
}
@@ -32,16 +36,25 @@ public DataService getDataService() {
3236

3337
abstract public boolean isStarted();
3438

35-
////////////// Request data and executeToggle //////////////
39+
////////////// Request data and execute //////////////
3640
abstract public void requestData();
3741

3842
abstract public void requestData(@NonNull IOConnection ioConnection);
3943

4044
abstract public boolean execute(@NonNull Executable executable, final int command, @Nullable onExecutionFinished callback);
4145

42-
abstract public void addToTransaction(@NonNull Executable executable, final int command);
46+
public void addToTransaction(@NonNull Executable port, int command) {
47+
command_list.add(new ExecutableAndCommand(port, command));
48+
}
4349

44-
abstract public void executeTransaction(@Nullable onExecutionFinished callback);
50+
public void executeTransaction(@Nullable onExecutionFinished callback) {
51+
if (callback != null)
52+
callback.addExpected(command_list.size());
53+
for (ExecutableAndCommand executableAndCommand : command_list) {
54+
execute(executableAndCommand.executable, executableAndCommand.command, callback);
55+
}
56+
command_list.clear();
57+
}
4558

4659
abstract public void setTitle(@NonNull Executable executable, @NonNull final String new_name, @Nullable onNameChangeResult callback);
4760

@@ -55,7 +68,8 @@ public DataService getDataService() {
5568
*
5669
* @param credentials The device, identified by the credentials.
5770
*/
58-
abstract public void openConfigurationPage(Credentials credentials);
71+
public void openConfigurationPage(Credentials credentials) {
72+
}
5973

6074
/**
6175
* Start editing an existing device by existing credentials (where configured==true) or edit
@@ -64,9 +78,13 @@ public DataService getDataService() {
6478
@Nullable
6579
abstract public Credentials createNewDefaultCredentials();
6680

67-
abstract public boolean hasEditableCredentials();
81+
public boolean hasEditableCredentials() {
82+
return false;
83+
}
6884

69-
abstract public boolean isNewIOConnectionAllowed(Credentials credentials);
85+
public boolean isNewIOConnectionAllowed(Credentials credentials) {
86+
return false;
87+
}
7088

7189
/**
7290
* Provide credentials and then the plugin will call you back asynchronously with a new connection.
@@ -78,7 +96,6 @@ public DataService getDataService() {
7896
* @param credentials Credentials that identify a device.
7997
* @param callback The callback method with the new IOConnection.
8098
*/
81-
abstract public void addNewIOConnection(@NonNull Credentials credentials, @NonNull onNewIOConnection callback);
82-
83-
public abstract ReachabilityStates getReachableState(Executable executable);
99+
public void addNewIOConnection(@NonNull Credentials credentials, @NonNull onNewIOConnection callback) {
100+
}
84101
}

app/src/main/java/oly/netpowerctrl/data/DataService.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import java.util.Map;
1616
import java.util.WeakHashMap;
1717

18-
import oly.netpowerctrl.anel.AnelPlugin;
1918
import oly.netpowerctrl.data.query.DataQueryCompletedObserver;
2019
import oly.netpowerctrl.data.query.DataQueryRefreshObserver;
2120
import oly.netpowerctrl.data.query.onDataQueryCompleted;
@@ -31,6 +30,9 @@
3130
import oly.netpowerctrl.main.App;
3231
import oly.netpowerctrl.main.GuiThreadHandler;
3332
import oly.netpowerctrl.main.MainActivity;
33+
import oly.netpowerctrl.network.NetworkChangedBroadcastReceiver;
34+
import oly.netpowerctrl.plugin_anel.AnelPlugin;
35+
import oly.netpowerctrl.plugin_simpleudp.SimpleUDPPlugin;
3436
import oly.netpowerctrl.preferences.SharedPrefs;
3537
import oly.netpowerctrl.status_bar.FavCollection;
3638
import oly.netpowerctrl.timer.TimerCollection;
@@ -47,6 +49,7 @@ public class DataService extends Service implements onDataLoaded, onDataQueryCom
4749
private static final String TAG = "DataService";
4850
private static final String PLUGIN_QUERY_ACTION = "oly.netpowerctrl.plugins.INetPwrCtrlPlugin";
4951
private static final String PAYLOAD_SERVICE_NAME = "SERVICE_NAME";
52+
private static final NetworkChangedBroadcastReceiver networkChangedListener = new NetworkChangedBroadcastReceiver();
5053
public static String service_shutdown_reason = "";
5154
///////////////// Service start/stop /////////////////
5255
static private WeakHashMap<Object, Boolean> weakHashMap = new WeakHashMap<>();
@@ -185,6 +188,7 @@ public int onStartCommand(@Nullable final Intent intent, final int flags, final
185188

186189
discoverExtensions();
187190
plugins.add(new AnelPlugin(this));
191+
plugins.add(new SimpleUDPPlugin(this));
188192

189193
// Load all Devices, Scenes etc from disk.
190194
/**
@@ -193,6 +197,8 @@ public int onStartCommand(@Nullable final Intent intent, final int flags, final
193197
*/
194198
loadStoreCollections.loadData(this);
195199

200+
networkChangedListener.registerReceiver(this);
201+
196202
return START_STICKY;
197203
}
198204

@@ -220,6 +226,7 @@ public void discoverExtensions() {
220226

221227
@Override
222228
public void onDestroy() {
229+
networkChangedListener.unregister(this);
223230

224231
observersServiceReady.onServiceFinished(this);
225232

@@ -264,7 +271,6 @@ private void interconnect_collection_objects() {
264271
credentials.setPlugin(newlyAddedPlugin);
265272
}
266273
}
267-
newlyAddedPlugin.onStart(this);
268274
}
269275
// Check all credentials for a plugin and set up IOConnections
270276
Iterator<Map.Entry<String, Credentials>> deviceIterator = credentials.getItems().entrySet().iterator();
@@ -284,6 +290,9 @@ private void interconnect_collection_objects() {
284290
}
285291
connections.removeOrphaned();
286292
executables.removeOrphaned();
293+
294+
for (AbstractBasePlugin newlyAddedPlugin : plugins)
295+
newlyAddedPlugin.onStart(this);
287296
}
288297

289298
@Override
@@ -364,6 +373,7 @@ public void refreshExistingDevice(Credentials credentials, DevicesObserver.onDev
364373
* Refreshes all configured devices.
365374
*/
366375
public void refreshExistingDevices() {
376+
if (observersStartStopRefresh.isRefreshing()) return;
367377
observersStartStopRefresh.onRefreshStateChanged(true);
368378
deviceQuery.addDeviceObserver(new DevicesObserver(credentials.getItems().values(), new DevicesObserver.onDevicesObserverFinished() {
369379
@Override
@@ -379,6 +389,7 @@ public void onObserverJobFinished(DevicesObserver devicesObserver) {
379389
* Refreshes all configured devices (detect unreachable devices) and detect new un-configured devices.
380390
*/
381391
public void detectDevices() {
392+
if (observersStartStopRefresh.isRefreshing()) return;
382393
observersStartStopRefresh.onRefreshStateChanged(true);
383394
deviceQuery.addDeviceObserver(new DevicesObserver(new DevicesObserver.onDevicesObserverFinished() {
384395
@Override

app/src/main/java/oly/netpowerctrl/data/query/DataQueryRefreshObserver.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@
66
* Created by david on 19.08.14.
77
*/
88
public class DataQueryRefreshObserver extends Observer<onDataQueryRefreshQuery> implements onDataQueryRefreshQuery {
9+
private boolean mIsRefreshing = false;
910
@Override
1011
public void onRefreshStateChanged(boolean isRefreshing) {
12+
mIsRefreshing = isRefreshing;
1113
for (onDataQueryRefreshQuery listener : listeners.keySet()) {
1214
listener.onRefreshStateChanged(isRefreshing);
1315
}
1416
}
17+
18+
public boolean isRefreshing() {
19+
return mIsRefreshing;
20+
}
1521
}

app/src/main/java/oly/netpowerctrl/devices/DeviceQuery.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ public void finish() {
6262
Looper.myLooper().quit();
6363
}
6464

65-
protected void doAction(Credentials credentials) {
66-
Log.w(TAG, "Query " + credentials.getDeviceName());
67-
65+
protected void doAction(Credentials credentials, int attempt) {
6866
AbstractBasePlugin abstractBasePlugin = credentials.getPlugin();
6967
// First try to find the not assigned plugin
7068
if (abstractBasePlugin == null) {
@@ -118,11 +116,14 @@ protected void doAction(Credentials credentials) {
118116
dataService.connections.put(l);
119117
}
120118

121-
for (Iterator<IOConnection> iterator = l.iterator(); iterator.hasNext(); ) {
122-
IOConnection connection = iterator.next();
123-
abstractBasePlugin.requestData(connection);
124-
if (connection.reachableState() == ReachabilityStates.Reachable) break;
125-
}
119+
IOConnection connection = l.getConnectionByPositionModulo(attempt);
120+
abstractBasePlugin.requestData(connection);
121+
122+
// for (Iterator<IOConnection> iterator = l.iterator(); iterator.hasNext(); ) {
123+
// IOConnection connection = iterator.next();
124+
// abstractBasePlugin.requestData(connection);
125+
// //if (connection.reachableState() == ReachabilityStates.Reachable) break;
126+
// }
126127
}
127128

128129
/**
@@ -131,6 +132,7 @@ protected void doAction(Credentials credentials) {
131132
*/
132133
private void deviceSuccess(Credentials credentials) {
133134
if (Thread.currentThread() != thread) throw new RuntimeException();
135+
Log.w(TAG, "Response " + credentials.deviceName);
134136
handler.removeMessages(MSG_REQUEST, credentials);
135137
for (DevicesObserver devicesObserver : devicesObserverList) {
136138
if (!devicesObserver.credentialsList.containsKey(credentials.deviceUID)) continue;
@@ -166,6 +168,7 @@ private void checkObserverFinished(DevicesObserver devicesObserver) {
166168
}
167169

168170
private void deviceFailed(Credentials credentials) {
171+
Log.w(TAG, "Query failed " + credentials.getDeviceName());
169172
if (Thread.currentThread() != thread) throw new RuntimeException();
170173
handler.removeMessages(MSG_REQUEST, credentials);
171174
for (DevicesObserver devicesObserver : devicesObserverList) {
@@ -266,14 +269,15 @@ public void handleMessage(Message msg) {
266269
// Add devices
267270
for (Credentials credentials : devicesObserver.credentialsList.values()) {
268271
removeMessages(MSG_REQUEST, credentials);
269-
sendMessageDelayed(obtainMessage(MSG_REQUEST, credentials), 10);
270-
sendMessageDelayed(obtainMessage(MSG_REQUEST, credentials), 200);
271-
sendMessageDelayed(obtainMessage(MSG_REQUEST, credentials), 400);
272+
sendMessageDelayed(obtainMessage(MSG_REQUEST, 0, 0, credentials), 10);
273+
sendMessageDelayed(obtainMessage(MSG_REQUEST, 1, 0, credentials), 100);
274+
sendMessageDelayed(obtainMessage(MSG_REQUEST, 2, 0, credentials), 200);
275+
sendMessageDelayed(obtainMessage(MSG_REQUEST, 3, 0, credentials), 300);
272276
}
273277
break;
274278
}
275279
case MSG_REQUEST: {
276-
doAction((Credentials) msg.obj);
280+
doAction((Credentials) msg.obj, msg.arg1);
277281
break;
278282
}
279283
case MSG_TIMEOUT: {

0 commit comments

Comments
 (0)