Skip to content

Commit 4169897

Browse files
author
davidgraeff
committed
Version 1.5
* Fix: Abstürze im "Alle Steckdosen"-Fenster behoben, das Speichern von versteckten Steckdosen * Fix: Das Erstellen von Szenen ist wieder möglich. * Feature: Widgets werden jetzt über einen Hintergrundservice aktuell gehalten. Dies kann in den Einstellungen abgeschaltet werden. * Deutsche Übersetzung vervollständigt. * Feature: NFC / Android Beam kann nun auch Szenen übertragen. * Feature: Im "Alle Steckdosen"-Fenster können die Gerätenamen nun vor den Steckdosennamen angezeigt werden. * Feature: Steckdosen können alphabetisch sortiert werden im "Alle Steckdosen"-Fenster.
1 parent a8bd6a0 commit 4169897

File tree

82 files changed

+2648
-1207
lines changed

Some content is hidden

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

82 files changed

+2648
-1207
lines changed

.idea/dictionaries/david.xml

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

+504-339
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/AndroidManifest.xml

+17-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="oly.netpowerctrl"
4-
android:versionCode="5"
5-
android:versionName="1.3a">
4+
android:versionCode="8"
5+
android:versionName="1.5">
66

77
<!-- Api level 16: Android 4.1 27. Juni 2012 -->
88
<uses-sdk
@@ -11,6 +11,7 @@
1111

1212
<uses-permission android:name="android.permission.INTERNET" />
1313
<uses-permission android:name="android.permission.NFC" />
14+
<uses-permission android:name="android.launcher.permission.INSTALL_SHORTCUT" />
1415

1516
<application
1617
android:name="oly.netpowerctrl.main.NetpowerctrlApplication"
@@ -27,6 +28,11 @@
2728
<action android:name="android.intent.action.MAIN" />
2829
<category android:name="android.intent.category.LAUNCHER" />
2930
</intent-filter>
31+
<intent-filter>
32+
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
33+
<category android:name="android.intent.category.DEFAULT" />
34+
<data android:mimeType="application/oly.netpowerctrl" />
35+
</intent-filter>
3036
</activity>
3137

3238
<activity
@@ -51,19 +57,19 @@
5157

5258
<activity
5359
android:icon="@drawable/netpowerctrl"
54-
android:label="@string/app_name"
55-
android:launchMode="standard"
60+
android:label="@string/app_name_shortcut"
61+
android:description="@string/app_name_shortcut_desc"
5662
android:theme="@style/Theme.CustomLightTheme"
57-
android:name=".shortcut.ShortcutCreatorActivity">
63+
android:name="oly.netpowerctrl.shortcut.ShortcutCreatorActivity">
5864
<intent-filter>
5965
<action android:name="android.intent.action.CREATE_SHORTCUT" />
6066
<category android:name="android.intent.category.DEFAULT" />
6167
</intent-filter>
6268
</activity>
6369

6470
<receiver
65-
android:icon="@drawable/netpowerctrl"
66-
android:label="@string/app_name"
71+
android:icon="@drawable/widget"
72+
android:label="@string/app_name_widget"
6773
android:name="oly.netpowerctrl.widget.DeviceWidgetProvider">
6874
<intent-filter>
6975
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -78,6 +84,10 @@
7884
android:name="oly.netpowerctrl.anelservice.NetpowerctrlService"
7985
android:permission="android.permission.INTERNET" />
8086

87+
<service
88+
android:name="oly.netpowerctrl.test.TestService"
89+
android:permission="android.permission.INTERNET" />
90+
8191
<service android:name="oly.netpowerctrl.widget.WidgetUpdateService" />
8292
</application>
8393

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616

1717
/**
1818
* Use the static sendQuery and sendBroadcastQuery methods to issue a query to one
19-
* or all devices. If you want to issue a query and get notified on the result or get a
19+
* or all scenes. If you want to issue a query and get notified on the result or get a
2020
* timeout if no reaction can be received within 1.2s, create a DeviceQuery object with
21-
* all devices to query.
21+
* all scenes to query.
2222
*/
2323
public class DeviceQuery {
2424
private Collection<DeviceInfo> devices_to_observe;

app/src/main/java/oly/netpowerctrl/anelservice/DiscoveryThread.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public void interrupt() {
5858
}
5959

6060
void parsePacket(final String message, int receive_port) {
61-
6261
String msg[] = message.split(":");
6362
if (msg.length < 3) {
6463
return;
@@ -93,7 +92,7 @@ void parsePacket(final String message, int receive_port) {
9392
continue;
9493
OutletInfo oi = new OutletInfo(di);
9594
oi.OutletNumber = i + 1; // 1-based
96-
oi.Description = outlet[0];
95+
oi.setDescriptionByDevice(outlet[0]);
9796
if (outlet.length > 1)
9897
oi.State = outlet[1].equals("1");
9998
oi.Disabled = (disabledOutlets & (1 << i)) != 0;

app/src/main/java/oly/netpowerctrl/anelservice/NetpowerctrlService.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,25 @@ public class NetpowerctrlService extends Service {
2020
private ArrayList<DeviceError> errorObserver = new ArrayList<DeviceError>();
2121

2222
public void registerDeviceUpdateObserver(DeviceUpdate o) {
23-
observer.add(o);
23+
if (!observer.contains(o))
24+
observer.add(o);
2425
}
2526

2627
public void unregisterDeviceUpdateObserver(DeviceUpdate o) {
2728
observer.remove(o);
2829
}
2930

3031
public void registerDeviceErrorObserver(DeviceError o) {
31-
errorObserver.add(o);
32+
if (!errorObserver.contains(o))
33+
errorObserver.add(o);
3234
}
3335

3436
public void unregisterDeviceErrorObserver(DeviceError o) {
3537
errorObserver.remove(o);
3638
}
3739

3840
public void notifyObservers(final DeviceInfo di) {
41+
//Log.w("LISTEN_SERVICE", "UPDATE "+di.HostName);
3942
assert di != null;
4043
if (observer.isEmpty())
4144
return;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package oly.netpowerctrl.anelservice;
2+
3+
/**
4+
* Get a notification when the service is ready
5+
*/
6+
public interface ServiceReady {
7+
void onServiceReady(NetpowerctrlService mDiscoverService);
8+
}

app/src/main/java/oly/netpowerctrl/datastructure/DeviceCollection.java

+10-50
Original file line numberDiff line numberDiff line change
@@ -3,80 +3,40 @@
33
import android.util.JsonReader;
44
import android.util.JsonWriter;
55

6-
import java.io.ByteArrayInputStream;
7-
import java.io.ByteArrayOutputStream;
86
import java.io.IOException;
9-
import java.io.InputStreamReader;
10-
import java.io.OutputStreamWriter;
11-
import java.io.UnsupportedEncodingException;
127
import java.util.ArrayList;
8+
import java.util.List;
139

1410
/**
1511
* Contains DeviceInfos. Used for NFC and backup transfers
1612
*/
1713
public class DeviceCollection {
18-
public static final int PROTOCOLVERSION = 1;
19-
public ArrayList<DeviceInfo> devices;
14+
public List<DeviceInfo> devices;
2015

21-
public static DeviceCollection fromDevices(ArrayList<DeviceInfo> devices) {
16+
public static DeviceCollection fromDevices(List<DeviceInfo> devices) {
2217
DeviceCollection dc = new DeviceCollection();
2318
dc.devices = devices;
2419
return dc;
2520
}
2621

27-
public static DeviceCollection fromJSON(String devices_as_string) throws IOException {
22+
public static DeviceCollection fromJSON(JsonReader reader) throws IOException, IllegalStateException {
2823
DeviceCollection dc = new DeviceCollection();
29-
30-
// Get JsonReader from String
31-
byte[] bytes;
32-
try {
33-
bytes = devices_as_string.getBytes("UTF-8");
34-
} catch (UnsupportedEncodingException ignored) {
35-
return null;
36-
}
37-
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
38-
JsonReader reader = new JsonReader(new InputStreamReader(bais));
39-
4024
dc.devices = new ArrayList<DeviceInfo>();
4125

42-
reader.beginObject();
26+
27+
reader.beginArray();
4328
while (reader.hasNext()) {
44-
String name = reader.nextName();
45-
if (name.equals("devices")) {
46-
reader.beginArray();
47-
while (reader.hasNext()) {
48-
dc.devices.add(DeviceInfo.fromJSON(reader));
49-
}
50-
reader.endArray();
51-
} else {
52-
reader.skipValue();
53-
}
29+
dc.devices.add(DeviceInfo.fromJSON(reader));
5430
}
55-
reader.endObject();
31+
reader.endArray();
5632
return dc;
5733
}
5834

59-
public String toJSON() throws IOException {
60-
ByteArrayOutputStream baos = new ByteArrayOutputStream();
61-
JsonWriter writer;
62-
try {
63-
writer = new JsonWriter(new OutputStreamWriter(baos, "UTF-8"));
64-
} catch (UnsupportedEncodingException e) {
65-
return null;
66-
}
67-
68-
writer.beginObject();
69-
writer.name("version").value(PROTOCOLVERSION);
70-
writer.name("source_device").value(android.os.Build.MODEL);
71-
writer.name("devices").beginArray();
35+
public void toJSON(JsonWriter writer) throws IOException {
36+
writer.beginArray();
7237
for (DeviceInfo di : devices) {
7338
di.toJSON(writer);
7439
}
7540
writer.endArray();
76-
writer.endObject();
77-
78-
writer.close();
79-
80-
return baos.toString();
8141
}
8242
}

app/src/main/java/oly/netpowerctrl/datastructure/DeviceCommand.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ public byte getSwitchByte() {
6666
return data;
6767
}
6868

69-
static public Collection<DeviceCommand> fromOutletCommandGroup(OutletCommandGroup og) {
69+
static public Collection<DeviceCommand> fromOutletCommandGroup(Scene og) {
7070
TreeMap<String, DeviceCommand> deviceCommands = new TreeMap<String, DeviceCommand>();
71-
for (OutletCommand c : og.commands) {
71+
for (SceneOutlet c : og.commands) {
7272
if (!deviceCommands.containsKey(c.device_mac)) {
7373
deviceCommands.put(c.device_mac, new DeviceCommand(c.outletinfo.device));
7474
}

app/src/main/java/oly/netpowerctrl/datastructure/DeviceInfo.java

+17
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,23 @@ public DeviceInfo(DeviceInfo other) {
8484
Outlets.add(new OutletInfo(oi));
8585
}
8686

87+
/**
88+
* Return true if both DeviceInfo objects refer to the same device.
89+
*
90+
* @param other Compare to other DeviceInfo
91+
* @return
92+
*/
93+
@SuppressWarnings("unused")
94+
public boolean equalsFuntional(DeviceInfo other) {
95+
return HostName.equals(other.HostName) && ReceivePort == other.ReceivePort;
96+
}
97+
98+
/**
99+
* Return true if this and the other DeviceInfo are the same configured DeviceInfo.
100+
*
101+
* @param other Compare to other DeviceInfo
102+
* @return
103+
*/
87104
@SuppressWarnings("unused")
88105
public boolean equals(DeviceInfo other) {
89106
return uuid.equals(other.uuid);

app/src/main/java/oly/netpowerctrl/datastructure/OutletCommand.java

-65
This file was deleted.

0 commit comments

Comments
 (0)