Skip to content

Commit c5162e9

Browse files
committed
Add flags to disable map support at build time.
Signed-off-by: Katharine Berry <[email protected]>
1 parent 5495bef commit c5162e9

File tree

9 files changed

+68
-3
lines changed

9 files changed

+68
-3
lines changed

app/src/c/assistant.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ static void prv_init(void) {
4040
consent_migrate();
4141
settings_init();
4242
conversation_manager_init();
43+
#if ENABLE_FEATURE_IMAGE_MANAGER
4344
image_manager_init();
45+
#endif
4446
events_app_message_open();
4547
alarm_manager_init();
4648
}
@@ -49,7 +51,9 @@ static void prv_deinit(void) {
4951
if (s_root_window) {
5052
root_window_destroy(s_root_window);
5153
}
54+
#ifdef ENABLE_FEATURE_IMAGE_MANAGER
5255
image_manager_deinit();
56+
#endif
5357
}
5458

5559
int main(void) {

app/src/c/converse/conversation.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "../image_manager/image_manager.h"
1919
#include "../util/memory/malloc.h"
2020
#include "../util/logging.h"
21+
#include "../features.h"
2122

2223
struct ConversationEntry {
2324
EntryType type;
@@ -131,9 +132,11 @@ void prv_destroy_entry(ConversationEntry *entry) {
131132
free(entry->content.widget->widget.number.unit);
132133
}
133134
break;
135+
#if ENABLE_FEATURE_MAPS
134136
case ConversationWidgetTypeMap:
135137
image_manager_destroy_image(entry->content.widget->widget.map.image_id);
136138
break;
139+
#endif
137140
}
138141
free(entry->content.widget);
139142
break;

app/src/c/converse/conversation.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define CONVERSATION_H
1919

2020
#include <pebble.h>
21+
#include "../features.h"
2122

2223
typedef struct Conversation Conversation;
2324
typedef struct ConversationEntry ConversationEntry;
@@ -37,7 +38,9 @@ typedef enum {
3738
ConversationWidgetTypeWeatherMultiDay,
3839
ConversationWidgetTypeTimer,
3940
ConversationWidgetTypeNumber,
41+
#if ENABLE_FEATURE_MAPS
4042
ConversationWidgetTypeMap,
43+
#endif
4144
} ConversationWidgetType;
4245

4346
typedef struct {

app/src/c/converse/conversation_manager.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ static void prv_handle_app_message_inbox_dropped(AppMessageResult result, void *
4141
static void prv_process_weather_widget(int widget_type, DictionaryIterator *iter, ConversationManager *manager);
4242
static void prv_process_timer_widget(int widget_type, DictionaryIterator *iter, ConversationManager *manager);
4343
static void prv_process_highlight_widget(int widget_type, DictionaryIterator *iter, ConversationManager *manager);
44+
#if ENABLE_FEATURE_MAPS
4445
static void prv_process_map_widget(int widget_type, DictionaryIterator *iter, ConversationManager *manager);
46+
#endif
4547
static bool prv_handle_memory_pressure(void *context);
4648

4749
static ConversationManager* s_conversation_manager;
@@ -212,10 +214,12 @@ static void prv_handle_app_message_inbox_received(DictionaryIterator *iter, void
212214
conversation_complete_response(manager->conversation);
213215
prv_conversation_updated(manager, false);
214216
prv_process_highlight_widget(tuple->value->int32, iter, manager);
217+
#if ENABLE_FEATURE_MAPS
215218
} else if (tuple->key == MESSAGE_KEY_MAP_WIDGET) {
216219
conversation_complete_response(manager->conversation);
217220
prv_conversation_updated(manager, false);
218221
prv_process_map_widget(tuple->value->int32, iter, manager);
222+
#endif
219223
}
220224
}
221225
}
@@ -365,7 +369,7 @@ static void prv_process_highlight_widget(int widget_type, DictionaryIterator *it
365369
prv_conversation_updated(manager, true);
366370
}
367371

368-
372+
#if ENABLE_FEATURE_MAPS
369373
static void prv_process_map_widget(int widget_type, DictionaryIterator *iter, ConversationManager *manager) {
370374
if (widget_type != 1) {
371375
return;
@@ -384,6 +388,7 @@ static void prv_process_map_widget(int widget_type, DictionaryIterator *iter, Co
384388
conversation_add_widget(manager->conversation, &widget);
385389
prv_conversation_updated(manager, true);
386390
}
391+
#endif
387392

388393
static void prv_handle_app_message_inbox_dropped(AppMessageResult reason, void *context) {
389394
BOBBY_LOG(APP_LOG_LEVEL_WARNING, "Received message dropped: %d", reason);

app/src/c/converse/segments/segment_layer.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "widgets/map.h"
2727
#include "../../util/memory/sdk.h"
2828
#include "../../util/logging.h"
29+
#include "../../features.h"
2930

3031
#include <pebble.h>
3132

@@ -43,7 +44,9 @@ typedef enum {
4344
SegmentTypeWeatherMultiDayWidget,
4445
SegmentTypeTimerWidget,
4546
SegmentTypeNumberWidget,
47+
#if ENABLE_FEATURE_MAPS
4648
SegmentTypeMapWidget,
49+
#endif
4750
} SegmentType;
4851

4952
typedef struct {
@@ -62,7 +65,9 @@ typedef struct {
6265
WeatherMultiDayWidget* weather_multi_day_widget;
6366
TimerWidget* timer_widget;
6467
NumberWidget* number_widget;
68+
#if ENABLE_FEATURE_MAPS
6569
MapWidget* map_widget;
70+
#endif
6671
};
6772
} SegmentLayerData;
6873

@@ -106,9 +111,11 @@ SegmentLayer* segment_layer_create(GRect rect, ConversationEntry* entry, bool as
106111
case SegmentTypeNumberWidget:
107112
data->number_widget = number_widget_create(child_frame, entry);
108113
break;
114+
#if ENABLE_FEATURE_MAPS
109115
case SegmentTypeMapWidget:
110116
data->map_widget = map_widget_create(child_frame, entry);
111117
break;
118+
#endif
112119
}
113120
layer_add_child(layer, data->layer);
114121
GSize child_size = layer_get_frame(data->layer).size;
@@ -147,9 +154,11 @@ void segment_layer_destroy(SegmentLayer* layer) {
147154
case SegmentTypeNumberWidget:
148155
number_widget_destroy(data->number_widget);
149156
break;
157+
#if ENABLE_FEATURE_MAPS
150158
case SegmentTypeMapWidget:
151159
map_widget_destroy(data->map_widget);
152160
break;
161+
#endif
153162
}
154163
if (data->assistant_label_layer) {
155164
text_layer_destroy(data->assistant_label_layer);
@@ -188,9 +197,11 @@ void segment_layer_update(SegmentLayer* layer) {
188197
case SegmentTypeNumberWidget:
189198
number_widget_update(data->number_widget);
190199
break;
200+
#if ENABLE_FEATURE_MAPS
191201
case SegmentTypeMapWidget:
192202
map_widget_update(data->map_widget);
193203
break;
204+
#endif
194205
}
195206
GSize child_size = layer_get_frame(data->layer).size;
196207
GPoint origin = layer_get_frame(layer).origin;
@@ -224,8 +235,10 @@ static SegmentType prv_get_segment_type(ConversationEntry* entry) {
224235
return SegmentTypeTimerWidget;
225236
case ConversationWidgetTypeNumber:
226237
return SegmentTypeNumberWidget;
238+
#if ENABLE_FEATURE_MAPS
227239
case ConversationWidgetTypeMap:
228240
return SegmentTypeMapWidget;
241+
#endif
229242
}
230243
break;
231244
}

app/src/c/features.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,14 @@
1818

1919
// If true, instead of using dictation input, the app will just use a fixed prompt.
2020
#define ENABLE_FEATURE_FIXED_PROMPT 0
21+
22+
// IFTTT: if you change this, you need to update the corresponding feature in src/pkjs/features.js.
23+
// If true, maps will be available.
24+
#define ENABLE_FEATURE_MAPS 1
25+
26+
// If true, the image manager will be available (required for maps to function)
27+
#define ENABLE_FEATURE_IMAGE_MANAGER 1
28+
29+
#if ENABLE_FEATURE_MAPS && !ENABLE_FEATURE_IMAGE_MANAGER
30+
#error "ENABLE_FEATURE_MAPS requires ENABLE_FEATURE_IMAGE_MANAGER to be enabled."
31+
#endif

app/src/pkjs/features.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Copyright 2025 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
// IFTTT: if you change this, you need to update the corresponding feature in src/c/features.h.
18+
exports.FEATURE_MAP_WIDGET = true;

app/src/pkjs/session.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var config = require('./config');
2121
var actions = require('./actions');
2222
var widgets = require('./widgets');
2323
var messageQueue = require('./lib/message_queue').Queue;
24+
var features = require('./features');
2425

2526
var API_URL = require('./urls').QUERY_URL;
2627
var package_json = require('package.json');
@@ -54,7 +55,10 @@ Session.prototype.run = function() {
5455
// negate this because JavaScript does it backwards for some reason.
5556
url += '&tzOffset=' + (-(new Date()).getTimezoneOffset());
5657
url += '&actions=' + actions.getSupportedActions().join(',');
57-
url += '&widgets=weather,timer,number,map';
58+
url += '&widgets=weather,timer,number';
59+
if (features.FEATURE_MAP_WIDGET) {
60+
url += ',map';
61+
}
5862
var settings = getSettings();
5963
url += '&units=' + settings['UNIT_PREFERENCE'] || '';
6064
url += '&lang=' + settings['LANGUAGE_CODE'] || '';

app/src/pkjs/widgets/index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,20 @@ var map = require('./map');
1818
var weather = require('./weather');
1919
var timer = require('./timer');
2020
var highlights = require('./highlights');
21+
var features = require('../features');
2122

2223
var widgetMap = {
23-
'map': map.map,
2424
'timer': timer.timer,
2525
'number': highlights.number,
2626
'weather-single-day': weather.singleDay,
2727
'weather-current': weather.current,
2828
'weather-multi-day': weather.multiDay
2929
}
3030

31+
if (features.FEATURE_MAP_WIDGET) {
32+
widgetMap['map'] = map.map;
33+
}
34+
3135
exports.handleWidget = function(session, widgetString) {
3236
var params = JSON.parse(widgetString);
3337
var name = params['type'];

0 commit comments

Comments
 (0)