Compare commits

..

6 Commits

Author SHA1 Message Date
139533d2ca 0.7.2 2019-11-01 14:00:13 +00:00
889682f771 Resolves #491 Lovelace badges parse issue 2019-11-01 13:54:35 +00:00
f16c98057f Location fixes 2019-11-01 13:44:51 +00:00
26ec807c25 Resolves #490 Prevent fused coarse location 2019-10-30 16:54:25 +00:00
45af6cbe3c Fix play_media call 2019-10-30 15:04:23 +00:00
5dd9cde12d Entity page fixes 2019-10-30 14:25:30 +00:00
9 changed files with 71 additions and 41 deletions

View File

@ -431,14 +431,10 @@ class _MediaPlayerControlsState extends State<MediaPlayerControls> {
void _duplicateTo(entity) {
HomeAssistant().savedPlayerPosition = entity.getActualPosition().toInt();
if (MediaQuery.of(context).size.width < Sizes.tabletMinWidth) {
Navigator.of(context).popAndPushNamed("/play-media", arguments: {"url": entity.attributes["media_content_id"], "type": entity.attributes["media_content_type"]});
} else {
Navigator.of(context).pushNamed("/play-media", arguments: {
Navigator.of(context).pushNamed("/play-media", arguments: {
"url": entity.attributes["media_content_id"],
"type": entity.attributes["media_content_type"]
});
}
}
void _switchTo(entity) {

View File

@ -180,9 +180,17 @@ class HomeAssistant {
if (rawView['badges'] != null && rawView['badges'] is List) {
rawView['badges'].forEach((entity) {
if (entities.isExist(entity)) {
Entity e = entities.get(entity);
view.badges.add(e);
if (entity is String) {
if (entities.isExist(entity)) {
Entity e = entities.get(entity);
view.badges.add(e);
}
} else {
String eId = '${entity['entity']}';
if (entities.isExist(eId)) {
Entity e = entities.get(eId);
view.badges.add(e);
}
}
});
}

View File

@ -141,8 +141,8 @@ EventBus eventBus = new EventBus();
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
const String appName = "HA Client";
const appVersionNumber = "0.7.1";
const appVersionAdd = "alpha1";
const appVersionNumber = "0.7.2";
const appVersionAdd = "";
const appVersion = "$appVersionNumber-$appVersionAdd";
void main() async {

View File

@ -350,6 +350,7 @@ class ConnectionManager {
Future callService(String domain, String service, String entityId, Map additionalServiceData) {
eventBus.fire(NotifyServiceCallEvent(domain, service, entityId));
Logger.d("Service call: $domain.$service, $entityId, $additionalServiceData");
Completer completer = Completer();
Map serviceData = {};
if (entityId != null) {
@ -367,7 +368,7 @@ class ConnectionManager {
else
sendHTTPPost(
endPoint: "/api/services/$domain/$service"
).then((data) => completer.complete(data)).catchError((e) => completer.completeError(HAError("${e["message"]}")));;
).then((data) => completer.complete(data)).catchError((e) => completer.completeError(HAError("${e["message"]}")));
//return sendSocketMessage(type: "call_service", additionalData: {"domain": domain, "service": service});
return completer.future;
}
@ -408,10 +409,11 @@ class ConnectionManager {
headers: headers,
body: data
).then((response) {
Logger.d("[Received] <== HTTP ${response.statusCode}");
if (response.statusCode >= 200 && response.statusCode < 300 ) {
Logger.d("[Received] <== HTTP ${response.statusCode}");
completer.complete(response.body);
} else {
Logger.d("[Received] <== HTTP ${response.statusCode}: ${response.body}");
completer.completeError({"code": response.statusCode, "message": "${response.body}"});
}
}).catchError((e) {

View File

@ -87,32 +87,57 @@ class LocationManager {
}
updateDeviceLocation() async {
if (ConnectionManager().webhookId != null &&
ConnectionManager().webhookId.isNotEmpty) {
String url = "${ConnectionManager()
.httpWebHost}/api/webhook/${ConnectionManager().webhookId}";
Logger.d("[Test location] Started");
Logger.d("[Test location] Forcing Android location manager...");
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
var battery = Battery();
int batteryLevel = 100;
String webhookId = ConnectionManager().webhookId;
String httpWebHost = ConnectionManager().httpWebHost;
if (webhookId != null && webhookId.isNotEmpty) {
String url = "$httpWebHost/api/webhook/$webhookId";
Map<String, String> headers = {};
Logger.d("[Location] Getting device location...");
Position location = await Geolocator().getCurrentPosition(
desiredAccuracy: LocationAccuracy.medium);
Logger.d("[Location] Got location: ${location.latitude} ${location
.longitude}. Sending home...");
int battery = await Battery().batteryLevel;
var data = {
headers["Content-Type"] = "application/json";
Map data = {
"type": "update_location",
"data": {
"gps": [location.latitude, location.longitude],
"gps_accuracy": location.accuracy,
"battery": battery
"gps": [],
"gps_accuracy": 0,
"battery": batteryLevel
}
};
headers["Content-Type"] = "application/json";
await http.post(
url,
headers: headers,
body: json.encode(data)
);
Logger.d("[Location] ...done.");
Logger.d("[Test location] Getting battery level...");
battery.batteryLevel.then((val) => data["data"]["battery"] = val).whenComplete((){
Logger.d("[Test location] Getting device location...");
geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high, locationPermissionLevel: GeolocationPermission.locationAlways).then((location) {
Logger.d("[Test location] Got location: ${location.latitude} ${location.longitude} with accuracy of ${location.accuracy}");
if (location != null) {
data["data"]["gps"] = [location.latitude, location.longitude];
data["data"]["gps_accuracy"] = location.accuracy;
Logger.d("[Test location] Sending data home...");
http.post(
url,
headers: headers,
body: json.encode(data)
);
}
}).catchError((e) {
Logger.d("[Test location] Error getting current location: ${e.toString()}. Trying last known...");
geolocator.getLastKnownPosition(desiredAccuracy: LocationAccuracy.medium).then((location){
Logger.d("[Test location] Got last known location: ${location.latitude} ${location.longitude} with accuracy of ${location.accuracy}");
if (location != null) {
data["data"]["gps"] = [location.latitude, location.longitude];
data["data"]["gps_accuracy"] = location.accuracy;
Logger.d("[Test location] Sending data home...");
http.post(
url,
headers: headers,
body: json.encode(data)
);
}
});
});
});
}
}
@ -121,6 +146,7 @@ class LocationManager {
void updateDeviceLocationIsolate() {
workManager.Workmanager.executeTask((backgroundTask, data) {
//print("[Background $backgroundTask] Started");
Geolocator geolocator = Geolocator()..forceAndroidLocationManager = true;
var battery = Battery();
int batteryLevel = 100;
String webhookId = data["webhookId"];
@ -141,7 +167,7 @@ void updateDeviceLocationIsolate() {
//print("[Background $backgroundTask] Getting battery level...");
battery.batteryLevel.then((val) => data["data"]["battery"] = val).whenComplete((){
//print("[Background $backgroundTask] Getting device location...");
Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.medium).then((location) {
geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high, locationPermissionLevel: GeolocationPermission.locationAlways).then((location) {
//print("[Background $backgroundTask] Got location: ${location.latitude} ${location.longitude}");
if (location != null) {
data["data"]["gps"] = [location.latitude, location.longitude];
@ -155,7 +181,7 @@ void updateDeviceLocationIsolate() {
}
}).catchError((e) {
//print("[Background $backgroundTask] Error getting current location: ${e.toString()}. Trying last known...");
Geolocator().getLastKnownPosition(desiredAccuracy: LocationAccuracy.medium).then((location){
geolocator.getLastKnownPosition(desiredAccuracy: LocationAccuracy.medium).then((location){
//print("[Background $backgroundTask] Got last known location: ${location.latitude} ${location.longitude}");
if (location != null) {
data["data"]["gps"] = [location.latitude, location.longitude];

View File

@ -889,9 +889,7 @@ class _MainPageState extends ReceiveShareState<MainPage> with WidgetsBindingObse
),
onWillPop: () {
if (_entityToShow != null) {
setState(() {
_entityToShow = null;
});
eventBus.fire(ShowEntityPageEvent());
return Future.value(false);
} else {
return Future.value(true);

View File

@ -90,8 +90,8 @@ class _PlayMediaPageState extends State<PlayMediaPage> {
Navigator.pop(context);
ConnectionManager().callService(
serviceDomain,
entity.entityId,
"play_media",
entity.entityId,
{
"media_content_id": _mediaUrl,
"media_content_type": _contentType

View File

@ -24,7 +24,7 @@ class _WhatsNewPageState extends State<WhatsNewPage> {
error = "";
});
http.Response response;
response = await http.get("http://ha-client.homemade.systems/service/whats_new_$appVersionNumber.md");
response = await http.get("http://ha-client.homemade.systems/service/whats_new_0.7.0.md");
if (response.statusCode == 200) {
setState(() {
data = response.body;

View File

@ -1,7 +1,7 @@
name: hass_client
description: Home Assistant Android Client
version: 0.7.1+712
version: 0.7.2+720
environment: