diff --git a/packages/addon/src/db/ALL.json b/packages/addon/src/db/ALL.json index bec1c1cc02..9d15f619bb 100644 --- a/packages/addon/src/db/ALL.json +++ b/packages/addon/src/db/ALL.json @@ -16456,6 +16456,7 @@ "n": "AU10TIX", "fb": "Au10tix", "android_dev_id": "com.au10tix", + "android_curated_app_ids": ["com.au10tix"], "gh": "au10tixmobile", "ig": "life_at_au10tix", "li": "au10tix-limited", @@ -20055,9 +20056,7 @@ "isHint": true, "hintText": "Hey, The BBC is biased. Use Newscord for more balanced news.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["bbc.mobile.news.ww"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_BBC_0", @@ -25619,6 +25618,7 @@ "n": "Bluesky", "fb": "blueskysocialweb", "android_dev_id": "xyz.blueskyweb", + "android_curated_app_ids": ["xyz.blueskyweb.app"], "gh": "bluesky-social", "li": "bluesky-pbllc", "tw": "bluesky", @@ -40945,7 +40945,6 @@ "r": ["h"], "n": "CoolAutomation", "fb": "coolautomation", - "android_dev_id": "CoolAutomation", "li": "1456190", "tw": "cool_automation", "ytp": "coolautomation", @@ -54567,7 +54566,6 @@ "r": ["h"], "n": "Earnix", "fb": "earnix", - "android_dev_id": "mobile.app1hh7BC4Jb6", "gh": "Earnix", "ig": "earnix_inc", "li": "earnix", @@ -85677,7 +85675,6 @@ "r": ["h"], "n": "IFeel Labs", "fb": "ifeel.labs", - "android_dev_id": "iFeel+Labs", "li": "ifeel-labs", "ws": "ifeellabs.com" }, @@ -95394,7 +95391,6 @@ "r": ["h"], "n": "Joyvoo", "fb": "joyvoo", - "android_dev_id": "Joyvoo+LTD", "li": "joyvoo", "ws": "joyvoo.com" }, @@ -114021,8 +114017,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_1", @@ -114032,8 +114027,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_2", @@ -114043,8 +114037,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_3", @@ -114054,8 +114047,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_0", @@ -114065,8 +114057,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_1", @@ -114076,8 +114067,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_2", @@ -114087,8 +114077,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_3", @@ -114098,8 +114087,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_4", @@ -114109,8 +114097,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_5", @@ -114120,8 +114107,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_6", @@ -114131,8 +114117,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_7", @@ -114142,8 +114127,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_8", @@ -114153,8 +114137,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_9", @@ -114164,8 +114147,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_10", @@ -114175,8 +114157,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_11", @@ -114186,8 +114167,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_12", @@ -114197,8 +114177,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_13", @@ -114208,8 +114187,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_14", @@ -114219,8 +114197,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_0", @@ -114230,8 +114207,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_1", @@ -114241,8 +114217,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_2", @@ -114252,8 +114227,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_3", @@ -114263,8 +114237,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_4", @@ -114274,8 +114247,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_5", @@ -114285,8 +114257,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_6", @@ -114296,8 +114267,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_7", @@ -114307,8 +114277,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_8", @@ -114318,8 +114287,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_9", @@ -114329,8 +114297,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_10", @@ -114340,8 +114307,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_11", @@ -114351,8 +114317,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_12", @@ -114362,8 +114327,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_13", @@ -114373,8 +114337,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_14", @@ -114384,8 +114347,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_0", @@ -114395,8 +114357,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_1", @@ -114406,8 +114367,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_2", @@ -114417,8 +114377,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_3", @@ -114428,8 +114387,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_4", @@ -114439,8 +114397,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_5", @@ -114450,8 +114407,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_6", @@ -114461,8 +114417,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_7", @@ -114472,8 +114427,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_8", @@ -114483,8 +114437,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_9", @@ -114494,8 +114447,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_10", @@ -114505,8 +114457,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_11", @@ -114516,8 +114467,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_12", @@ -114527,8 +114477,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_13", @@ -114538,8 +114487,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_14", @@ -114549,8 +114497,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_15", @@ -114560,8 +114507,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_16", @@ -114571,8 +114517,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_17", @@ -114582,8 +114527,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_18", @@ -114593,8 +114537,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_19", @@ -114604,8 +114547,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_20", @@ -114615,8 +114557,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_21", @@ -114626,8 +114567,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_22", @@ -114637,8 +114577,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_23", @@ -114648,8 +114587,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_24", @@ -114659,8 +114597,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_25", @@ -114670,8 +114607,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_26", @@ -114681,8 +114617,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_27", @@ -114692,8 +114627,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_28", @@ -114703,8 +114637,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_7", @@ -114714,8 +114647,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_5", @@ -114725,8 +114657,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_3", @@ -114736,8 +114667,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_0", @@ -114748,7 +114678,31 @@ "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "android_dev_id": "com.microsoft", + "android_curated_app_ids": [ + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + "com.microsoft.skydrive", + "com.microsoft.todos", + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ] }, { "id": "hint_ws_Microsoft_6", @@ -114758,8 +114712,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_1", @@ -114769,8 +114722,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_9", @@ -114780,8 +114732,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_2", @@ -114791,8 +114742,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_10", @@ -114802,8 +114752,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_12", @@ -114813,8 +114762,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_8", @@ -114824,8 +114772,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_11", @@ -114835,8 +114782,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_4", @@ -114846,8 +114792,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "microsoft-israel-r-d", @@ -118251,6 +118196,7 @@ "n": "MoonPay", "fb": "officialmoonpay", "android_dev_id": "com.moonpay", + "android_curated_app_ids": ["com.moonpay.android"], "ig": "moonpay", "li": "moonpay", "th": "@moonpay", @@ -123134,7 +123080,6 @@ "r": ["f"], "n": "Neuro Hero", "fb": "neuroheroofficial", - "android_dev_id": "Neuro Hero Ltd", "li": "5326993", "tw": "neurohero", "ytp": "neuroheroofficial", @@ -128063,6 +128008,7 @@ "fb": "omadahealth", "s": "OMDA", "android_dev_id": "com.healthcoda", + "android_curated_app_ids": ["com.healthcoda.app"], "ig": "omadahealth", "li": "omada-health", "tw": "omadahealth", @@ -158529,6 +158475,7 @@ "fb": "SentinelOne", "s": "S", "android_dev_id": "com.sentinelone", + "android_curated_app_ids": ["com.sentinelone.mobile.android"], "gh": "Sentinel-One", "li": "sentinelone-dach", "tw": "SentinelOne", @@ -162134,6 +162081,7 @@ "n": "Silverfort", "fb": "silverfort", "android_dev_id": "com.silverfort", + "android_curated_app_ids": ["com.silverfort.mobile"], "gh": "silverfort-open-source", "ig": "life_at_silverfort", "li": "silverfort", @@ -163434,9 +163382,7 @@ "isHint": true, "hintText": "Hey, Sky News is biased. Use Newscord to get the full picture.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["com.bskyb.skynews.android"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_Sky News_0", @@ -171496,7 +171442,6 @@ "r": ["h"], "n": "Strix Drones", "fb": "strixdrones", - "android_dev_id": "Strix+Drones", "ig": "strixdrones", "li": "strix-drones", "tw": "strixdrones", @@ -188785,16 +188730,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_0", @@ -188823,16 +188759,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_1", @@ -188842,16 +188769,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "upsellon-trade-tech-ml-ltd", @@ -198008,6 +197926,7 @@ "fb": "wix", "s": "WIX", "android_dev_id": "com.wix", + "android_curated_app_ids": ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"], "gh": "wix", "ig": "wix", "li": "wix-com", diff --git a/packages/android/README.md b/packages/android/README.md index 435328d83c..27e4ba85fb 100644 --- a/packages/android/README.md +++ b/packages/android/README.md @@ -37,6 +37,19 @@ pnpm lint pnpm clean ``` +## Debugging on Device + +ADB helpers live in `scripts/`: + +- [`scripts/adb.sh`](scripts/adb.sh) — install / uninstall / clear-data / generic logcat (`bash scripts/adb.sh install`). +- [`scripts/trigger-worker.sh`](scripts/trigger-worker.sh) — exercise the background `ScanWorker` end-to-end. Triggers one-shot scans, force-runs the periodic JobScheduler job, simulates `PACKAGE_ADDED` broadcasts, and tails the relevant log tags. See [`scripts/trigger-worker.md`](scripts/trigger-worker.md) for the full command reference. + +```bash +bash scripts/trigger-worker.sh scan # one-shot scan +bash scripts/trigger-worker.sh force-now # re-run periodic job, ignore constraints +bash scripts/trigger-worker.sh logs # tail ScanWorker / receivers / WorkManager +``` + ## Release ### First-Time Setup @@ -235,7 +248,10 @@ scripts/ ├── build.sh # Build with JAVA_HOME setup ├── release.sh # Full release workflow ├── bump-version.sh # Version incrementing -└── validate-metadata.sh # Metadata validation +├── validate-metadata.sh # Metadata validation +├── adb.sh # ADB helpers (install/uninstall/logcat) +├── trigger-worker.sh # ScanWorker testing harness (see trigger-worker.md) +└── trigger-worker.md # Worker-trigger command reference fastlane/ └── metadata/android/ # Play Store metadata diff --git a/packages/android/app/build.gradle.kts b/packages/android/app/build.gradle.kts index 8526fa6a6d..2c8e3b406d 100644 --- a/packages/android/app/build.gradle.kts +++ b/packages/android/app/build.gradle.kts @@ -1,3 +1,15 @@ +import com.android.build.api.variant.AndroidComponentsExtension +import groovy.json.JsonSlurper +import org.gradle.api.DefaultTask +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.SetProperty +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction import org.jetbrains.kotlin.gradle.dsl.JvmTarget import java.util.Properties @@ -158,3 +170,145 @@ dependencies { debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) } + +// ============================================================================ +// Package visibility — generates a manifest from ALL.json so we can +// drop the QUERY_ALL_PACKAGES permission (Play Store policy compliance). +// +// Output: app/build/generated/queries//AndroidManifest.xml +// Wired into manifest merge via androidComponents.onVariants below. +// +// Source-of-truth is the schema field `android_curated_app_ids` on each +// blocklist entry in ALL.json (defined in @theWallProject/common). Any entry +// that has `android_dev_id` but neither `android_app_ids` nor +// `android_curated_app_ids` will fail the build — Android only +// matches exact package names, never prefixes, so an orphaned dev-id silently +// makes that company's apps invisible to the on-device scanner. +// +// LIMITATION — curation completeness is NOT verified. +// The orphan check below only catches entries that declare a dev_id with +// zero concrete app IDs (a 100% blind entry). It cannot detect *incomplete* +// curation: e.g. android_dev_id="com.wix" with curated=["com.wix.admin"] is +// accepted, but if a real user has "com.wix.somenewapp" installed, the OS +// will not surface it because has no prefix syntax. Pre- +// the runtime prefix matcher (AppScanner.matchesPackage / ScanWorker) +// would have caught it under QUERY_ALL_PACKAGES; under it cannot. +// +// Mitigation: periodically audit curated_app_ids against the Play Store +// listing for each developer namespace and update @theWallProject/scrapper +// manual_resolve/manualOverrides.ts. There is no automated guard for this. +// ============================================================================ + +@CacheableTask +abstract class GenerateQueriesManifestTask : DefaultTask() { + + @get:InputFile + @get:PathSensitive(PathSensitivity.RELATIVE) + abstract val allJsonFile: RegularFileProperty + + @get:OutputFile + abstract val outputManifest: RegularFileProperty + + @TaskAction + fun generate() { + val json = JsonSlurper().parse(allJsonFile.get().asFile) as List<*> + + val packages = sortedSetOf() + val orphanedDevIds = mutableListOf() + + for (entry in json) { + val item = entry as? Map<*, *> ?: continue + + val explicitAppIds = (item["android_app_ids"] as? List<*>) + ?.mapNotNull { (it as? String)?.takeIf { s -> s.isValidPackage() } } + ?: emptyList() + packages.addAll(explicitAppIds) + + val curatedAppIds = (item["android_curated_app_ids"] as? List<*>) + ?.mapNotNull { (it as? String)?.takeIf { s -> s.isValidPackage() } } + ?: emptyList() + packages.addAll(curatedAppIds) + + (item["hint_android_id"] as? String)?.takeIf { it.isValidPackage() }?.let(packages::add) + + val devId = item["android_dev_id"] as? String + if (devId != null) { + // The dev-id itself only matches if there's a literal package + // with that exact name (rare, but harmless to declare). + if (devId.isValidPackage()) { + packages.add(devId) + } + // Hard fail rule: if a company declares android_dev_id as the + // only Android signal, the scanner can't see any of their apps + // unless we enumerate them. This blocks silent regressions. + if (explicitAppIds.isEmpty() && curatedAppIds.isEmpty()) { + val name = item["n"] as? String ?: item["id"] as? String ?: "" + orphanedDevIds.add("$name (dev_id=$devId)") + } + } + } + + if (orphanedDevIds.isNotEmpty()) { + val message = buildString { + append("Orphaned android_dev_id entries detected in ALL.json — these companies ") + append("declare a developer prefix but no concrete app IDs, so the scanner ") + append("cannot detect their apps under :\n\n") + orphanedDevIds.sorted().forEach { append(" • ").append(it).append('\n') } + append("\nFix: add `android_curated_app_ids: [...]` (or `android_app_ids: [...]`) ") + append("to each entry in @theWallProject/scrapper, then run the scrapper to ") + append("regenerate ALL.json. See packages/common/src/index.ts for schema.") + } + throw GradleException(message) + } + + val xml = buildString { + append("\n") + append("\n") + append("\n") + append(" \n") + for (pkg in packages) { + append(" \n") + } + append(" \n") + append("\n") + } + + val outFile = outputManifest.get().asFile + outFile.parentFile.mkdirs() + outFile.writeText(xml) + logger.lifecycle("Generated manifest with ${packages.size} packages → $outFile") + } + + private fun String.isValidPackage(): Boolean { + // Android package names: at least one dot, lowercase letters/digits/underscores + // per segment, segments must start with a letter. + if (!contains('.')) return false + return split('.').all { seg -> + seg.isNotEmpty() && seg[0].isLetter() && seg.all { c -> c.isLetterOrDigit() || c == '_' } + } + } +} + +androidComponents { + onVariants { variant -> + val variantName = variant.name + val capitalizedName = variantName.replaceFirstChar { it.uppercase() } + val taskProvider = tasks.register( + "generate${capitalizedName}QueriesManifest" + ) { + allJsonFile.set(layout.projectDirectory.file("src/main/assets/ALL.json")) + outputManifest.set( + layout.buildDirectory.file("generated/queries/$variantName/AndroidManifest.xml") + ) + } + + variant.sources.manifests.addGeneratedManifestFile( + taskProvider = taskProvider, + wiredWith = GenerateQueriesManifestTask::outputManifest + ) + } +} diff --git a/packages/android/app/src/debug/AndroidManifest.xml b/packages/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000000..e152530067 --- /dev/null +++ b/packages/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + diff --git a/packages/android/app/src/debug/java/com/thewallboycott/android/background/ScanTriggerReceiver.kt b/packages/android/app/src/debug/java/com/thewallboycott/android/background/ScanTriggerReceiver.kt new file mode 100644 index 0000000000..13d10a6645 --- /dev/null +++ b/packages/android/app/src/debug/java/com/thewallboycott/android/background/ScanTriggerReceiver.kt @@ -0,0 +1,59 @@ +package com.thewallboycott.android.background + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.util.Log +import androidx.work.Data +import androidx.work.ExistingWorkPolicy +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager + +/** + * Debug-only entry point that lets ADB enqueue a one-shot ScanWorker without + * launching MainActivity. Registered via app/src/debug/AndroidManifest.xml so + * it is stripped entirely from release builds. + * + * Trigger: + * adb shell am broadcast \ + * -a com.thewallboycott.android.action.TRIGGER_SCAN \ + * -p com.thewallboycott.android \ + * --ez force_notify true + * + * The `force_notify=true` extra bypasses the dedup/recently-notified guard in + * ScanWorker so the notification fires every time, which is what manual + * testing wants. + */ +class ScanTriggerReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + if (intent.action != ACTION_TRIGGER_SCAN) { + Log.d(TAG, "Ignoring non-trigger action: ${intent.action}") + return + } + + val forceNotify = intent.getBooleanExtra(EXTRA_FORCE_NOTIFY, true) + Log.d(TAG, "Trigger received. forceNotify=$forceNotify — enqueuing ScanWorker") + + val scanRequest = OneTimeWorkRequestBuilder() + .setInputData( + Data.Builder() + .putBoolean(ScanWorker.INPUT_FORCE_NOTIFY, forceNotify) + .build() + ) + .build() + + WorkManager.getInstance(context).enqueueUniqueWork( + UNIQUE_WORK_NAME, + ExistingWorkPolicy.REPLACE, + scanRequest + ) + } + + companion object { + private const val TAG = "ScanTriggerReceiver" + const val ACTION_TRIGGER_SCAN = "com.thewallboycott.android.action.TRIGGER_SCAN" + const val EXTRA_FORCE_NOTIFY = "force_notify" + private const val UNIQUE_WORK_NAME = "adb_trigger_scan" + } +} diff --git a/packages/android/app/src/main/AndroidManifest.xml b/packages/android/app/src/main/AndroidManifest.xml index ceb916d1af..9c8421941d 100644 --- a/packages/android/app/src/main/AndroidManifest.xml +++ b/packages/android/app/src/main/AndroidManifest.xml @@ -2,10 +2,12 @@ - - + diff --git a/packages/android/app/src/main/assets/ALL.json b/packages/android/app/src/main/assets/ALL.json index bec1c1cc02..9d15f619bb 100644 --- a/packages/android/app/src/main/assets/ALL.json +++ b/packages/android/app/src/main/assets/ALL.json @@ -16456,6 +16456,7 @@ "n": "AU10TIX", "fb": "Au10tix", "android_dev_id": "com.au10tix", + "android_curated_app_ids": ["com.au10tix"], "gh": "au10tixmobile", "ig": "life_at_au10tix", "li": "au10tix-limited", @@ -20055,9 +20056,7 @@ "isHint": true, "hintText": "Hey, The BBC is biased. Use Newscord for more balanced news.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["bbc.mobile.news.ww"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_BBC_0", @@ -25619,6 +25618,7 @@ "n": "Bluesky", "fb": "blueskysocialweb", "android_dev_id": "xyz.blueskyweb", + "android_curated_app_ids": ["xyz.blueskyweb.app"], "gh": "bluesky-social", "li": "bluesky-pbllc", "tw": "bluesky", @@ -40945,7 +40945,6 @@ "r": ["h"], "n": "CoolAutomation", "fb": "coolautomation", - "android_dev_id": "CoolAutomation", "li": "1456190", "tw": "cool_automation", "ytp": "coolautomation", @@ -54567,7 +54566,6 @@ "r": ["h"], "n": "Earnix", "fb": "earnix", - "android_dev_id": "mobile.app1hh7BC4Jb6", "gh": "Earnix", "ig": "earnix_inc", "li": "earnix", @@ -85677,7 +85675,6 @@ "r": ["h"], "n": "IFeel Labs", "fb": "ifeel.labs", - "android_dev_id": "iFeel+Labs", "li": "ifeel-labs", "ws": "ifeellabs.com" }, @@ -95394,7 +95391,6 @@ "r": ["h"], "n": "Joyvoo", "fb": "joyvoo", - "android_dev_id": "Joyvoo+LTD", "li": "joyvoo", "ws": "joyvoo.com" }, @@ -114021,8 +114017,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_1", @@ -114032,8 +114027,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_2", @@ -114043,8 +114037,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_3", @@ -114054,8 +114047,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_0", @@ -114065,8 +114057,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_1", @@ -114076,8 +114067,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_2", @@ -114087,8 +114077,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_3", @@ -114098,8 +114087,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_4", @@ -114109,8 +114097,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_5", @@ -114120,8 +114107,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_6", @@ -114131,8 +114117,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_7", @@ -114142,8 +114127,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_8", @@ -114153,8 +114137,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_9", @@ -114164,8 +114147,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_10", @@ -114175,8 +114157,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_11", @@ -114186,8 +114167,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_12", @@ -114197,8 +114177,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_13", @@ -114208,8 +114187,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_14", @@ -114219,8 +114197,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_0", @@ -114230,8 +114207,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_1", @@ -114241,8 +114217,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_2", @@ -114252,8 +114227,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_3", @@ -114263,8 +114237,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_4", @@ -114274,8 +114247,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_5", @@ -114285,8 +114257,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_6", @@ -114296,8 +114267,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_7", @@ -114307,8 +114277,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_8", @@ -114318,8 +114287,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_9", @@ -114329,8 +114297,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_10", @@ -114340,8 +114307,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_11", @@ -114351,8 +114317,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_12", @@ -114362,8 +114327,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_13", @@ -114373,8 +114337,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_14", @@ -114384,8 +114347,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_0", @@ -114395,8 +114357,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_1", @@ -114406,8 +114367,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_2", @@ -114417,8 +114377,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_3", @@ -114428,8 +114387,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_4", @@ -114439,8 +114397,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_5", @@ -114450,8 +114407,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_6", @@ -114461,8 +114417,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_7", @@ -114472,8 +114427,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_8", @@ -114483,8 +114437,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_9", @@ -114494,8 +114447,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_10", @@ -114505,8 +114457,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_11", @@ -114516,8 +114467,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_12", @@ -114527,8 +114477,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_13", @@ -114538,8 +114487,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_14", @@ -114549,8 +114497,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_15", @@ -114560,8 +114507,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_16", @@ -114571,8 +114517,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_17", @@ -114582,8 +114527,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_18", @@ -114593,8 +114537,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_19", @@ -114604,8 +114547,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_20", @@ -114615,8 +114557,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_21", @@ -114626,8 +114567,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_22", @@ -114637,8 +114577,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_23", @@ -114648,8 +114587,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_24", @@ -114659,8 +114597,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_25", @@ -114670,8 +114607,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_26", @@ -114681,8 +114617,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_27", @@ -114692,8 +114627,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_28", @@ -114703,8 +114637,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_7", @@ -114714,8 +114647,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_5", @@ -114725,8 +114657,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_3", @@ -114736,8 +114667,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_0", @@ -114748,7 +114678,31 @@ "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "android_dev_id": "com.microsoft", + "android_curated_app_ids": [ + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + "com.microsoft.skydrive", + "com.microsoft.todos", + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ] }, { "id": "hint_ws_Microsoft_6", @@ -114758,8 +114712,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_1", @@ -114769,8 +114722,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_9", @@ -114780,8 +114732,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_2", @@ -114791,8 +114742,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_10", @@ -114802,8 +114752,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_12", @@ -114813,8 +114762,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_8", @@ -114824,8 +114772,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_11", @@ -114835,8 +114782,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_4", @@ -114846,8 +114792,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "microsoft-israel-r-d", @@ -118251,6 +118196,7 @@ "n": "MoonPay", "fb": "officialmoonpay", "android_dev_id": "com.moonpay", + "android_curated_app_ids": ["com.moonpay.android"], "ig": "moonpay", "li": "moonpay", "th": "@moonpay", @@ -123134,7 +123080,6 @@ "r": ["f"], "n": "Neuro Hero", "fb": "neuroheroofficial", - "android_dev_id": "Neuro Hero Ltd", "li": "5326993", "tw": "neurohero", "ytp": "neuroheroofficial", @@ -128063,6 +128008,7 @@ "fb": "omadahealth", "s": "OMDA", "android_dev_id": "com.healthcoda", + "android_curated_app_ids": ["com.healthcoda.app"], "ig": "omadahealth", "li": "omada-health", "tw": "omadahealth", @@ -158529,6 +158475,7 @@ "fb": "SentinelOne", "s": "S", "android_dev_id": "com.sentinelone", + "android_curated_app_ids": ["com.sentinelone.mobile.android"], "gh": "Sentinel-One", "li": "sentinelone-dach", "tw": "SentinelOne", @@ -162134,6 +162081,7 @@ "n": "Silverfort", "fb": "silverfort", "android_dev_id": "com.silverfort", + "android_curated_app_ids": ["com.silverfort.mobile"], "gh": "silverfort-open-source", "ig": "life_at_silverfort", "li": "silverfort", @@ -163434,9 +163382,7 @@ "isHint": true, "hintText": "Hey, Sky News is biased. Use Newscord to get the full picture.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["com.bskyb.skynews.android"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_Sky News_0", @@ -171496,7 +171442,6 @@ "r": ["h"], "n": "Strix Drones", "fb": "strixdrones", - "android_dev_id": "Strix+Drones", "ig": "strixdrones", "li": "strix-drones", "tw": "strixdrones", @@ -188785,16 +188730,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_0", @@ -188823,16 +188759,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_1", @@ -188842,16 +188769,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "upsellon-trade-tech-ml-ltd", @@ -198008,6 +197926,7 @@ "fb": "wix", "s": "WIX", "android_dev_id": "com.wix", + "android_curated_app_ids": ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"], "gh": "wix", "ig": "wix", "li": "wix-com", diff --git a/packages/android/app/src/main/assets/all.generated.schema.json b/packages/android/app/src/main/assets/all.generated.schema.json index 8f4df8c80e..1d0ce1ee4b 100644 --- a/packages/android/app/src/main/assets/all.generated.schema.json +++ b/packages/android/app/src/main/assets/all.generated.schema.json @@ -195,6 +195,12 @@ "items": { "type": "string" } + }, + "android_curated_app_ids": { + "type": "array", + "items": { + "type": "string" + } } }, "required": ["id", "r", "n"], diff --git a/packages/android/app/src/main/java/com/thewallboycott/android/MainActivity.kt b/packages/android/app/src/main/java/com/thewallboycott/android/MainActivity.kt index e105b12356..3bf4bff4f6 100644 --- a/packages/android/app/src/main/java/com/thewallboycott/android/MainActivity.kt +++ b/packages/android/app/src/main/java/com/thewallboycott/android/MainActivity.kt @@ -1,17 +1,13 @@ package com.thewallboycott.android import android.content.Intent -import android.content.pm.PackageManager -import android.os.Build import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf @@ -20,10 +16,6 @@ import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext -import androidx.core.net.toUri -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleEventObserver -import androidx.lifecycle.compose.LocalLifecycleOwner import com.thewallboycott.android.ui.AppScaffold import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.OneTimeWorkRequestBuilder @@ -38,7 +30,6 @@ import com.thewallboycott.android.share.ShareManager import com.thewallboycott.android.ui.components.ShareDialog import com.thewallboycott.android.ui.onboarding.OnboardingScreen import com.thewallboycott.android.ui.screens.AppListScreen -import com.thewallboycott.android.ui.screens.PermissionRequestScreen import com.thewallboycott.android.ui.screens.StartScreen import com.thewallboycott.android.ui.screens.SettingsScreen import com.thewallboycott.android.ui.screens.SupportScreen @@ -49,10 +40,6 @@ import java.util.concurrent.TimeUnit @OptIn(ExperimentalMaterial3Api::class) class MainActivity : AppCompatActivity() { - private val permissionLauncher = registerForActivityResult( - ActivityResultContracts.StartActivityForResult() - ) {} - private var sharedUrl by mutableStateOf(null) private var navigateToScreen by mutableStateOf(null) @@ -136,23 +123,6 @@ class MainActivity : AppCompatActivity() { ) } - private fun hasQueryAllPackagesPermission(): Boolean { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - checkSelfPermission(android.Manifest.permission.QUERY_ALL_PACKAGES) == PackageManager.PERMISSION_GRANTED - } else { - true - } - } - - private fun requestQueryAllPackagesPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - val intent = Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION).apply { - data = "package:$packageName".toUri() - } - permissionLauncher.launch(intent) - } - } - @Composable private fun MainScreen( initialUrl: String?, @@ -171,7 +141,6 @@ class MainActivity : AppCompatActivity() { var scanState by rememberSaveable { mutableStateOf(ScanState.Scanning) // Auto-start scanning } - var permissionGranted by rememberSaveable { mutableStateOf(hasQueryAllPackagesPermission()) } var refreshTrigger by rememberSaveable { mutableIntStateOf(0) } val context = LocalContext.current val shareManager = remember { ShareManager(context) } @@ -183,29 +152,10 @@ class MainActivity : AppCompatActivity() { scanState = ScanState.Scanning onNavigationHandled() } - if (initialUrl != null) { + if (initialUrl != null) { currentScreen = Screen.UrlLookup } - - // Effect to check for permission changes on resume - val lifecycleOwner = LocalLifecycleOwner.current - DisposableEffect(lifecycleOwner) { - val observer = LifecycleEventObserver { _, event -> - if (event == Lifecycle.Event.ON_RESUME) { - val hasPermission = hasQueryAllPackagesPermission() - if (hasPermission && !permissionGranted) { - scanState = ScanState.Scanning // Auto-scan after permission is granted - } - permissionGranted = hasPermission - } - } - lifecycleOwner.lifecycle.addObserver(observer) - onDispose { - lifecycleOwner.lifecycle.removeObserver(observer) - } - } - AppScaffold( currentScreen = currentScreen, scanState = scanState, @@ -227,13 +177,7 @@ class MainActivity : AppCompatActivity() { WorkManager.getInstance(context).enqueue(scanRequest) } ) - ScanState.Scanning -> { - if (permissionGranted) { - AppListScreen(externalRefreshTrigger = refreshTrigger) - } else { - PermissionRequestScreen(onRequestPermission = ::requestQueryAllPackagesPermission) - } - } + ScanState.Scanning -> AppListScreen(externalRefreshTrigger = refreshTrigger) } } is Screen.UrlLookup -> UrlLookupScreen( diff --git a/packages/android/app/src/main/java/com/thewallboycott/android/background/ScanWorker.kt b/packages/android/app/src/main/java/com/thewallboycott/android/background/ScanWorker.kt index a2e7af4d8f..bdb7ab0f1d 100644 --- a/packages/android/app/src/main/java/com/thewallboycott/android/background/ScanWorker.kt +++ b/packages/android/app/src/main/java/com/thewallboycott/android/background/ScanWorker.kt @@ -139,9 +139,15 @@ class ScanWorker @JvmOverloads constructor( // Separate hints from regular blacklist items val (hints, blacklist) = allItems.partition { it.isHint == true } - // Filter to only items with Android identifiers - val blacklistWithAndroid = blacklist.filter { it.androidDevId != null || it.androidAppIds != null } - val hintsWithAndroid = hints.filter { it.androidAppIds != null } + // Filter to only items with Android identifiers. Curated app IDs count + // as a real signal — a hint or blocklist entry that only declares + // android_curated_app_ids must still be scanned at runtime. + val blacklistWithAndroid = blacklist.filter { + it.androidDevId != null || it.androidAppIds != null || it.androidCuratedAppIds != null + } + val hintsWithAndroid = hints.filter { + it.androidAppIds != null || it.androidCuratedAppIds != null + } // PackageScanner already filters out system apps val installedApps = packageScanner.getInstalledPackages() @@ -158,11 +164,22 @@ class ScanWorker @JvmOverloads constructor( return@forEach } - // Check against blacklist first (takes priority) + // Check against blacklist first (takes priority). + // + // Matching strategies, in order: + // 1. android_app_ids — exact package match curated by the scrapper. + // 2. android_curated_app_ids — exact match against the schema-driven + // expansion of a developer prefix into concrete package IDs. + // 3. android_dev_id — prefix match. Largely redundant under + // (the OS only returns packages we already enumerated) but kept as + // a defensive catch when a curated package shares the dev_id + // namespace (e.g. dev_id="com.wix" attributes "com.wix.admin" + // back to Wix without an extra mapping). val matchingBlacklistItem = blacklistWithAndroid.find { item -> val appIdsMatch = item.androidAppIds?.contains(app.packageName) == true + val curatedMatch = item.androidCuratedAppIds?.contains(app.packageName) == true val devIdMatch = item.androidDevId?.let { app.packageName.startsWith("$it.") || app.packageName == it } == true - appIdsMatch || devIdMatch + appIdsMatch || curatedMatch || devIdMatch } if (matchingBlacklistItem != null) { @@ -175,9 +192,12 @@ class ScanWorker @JvmOverloads constructor( return@forEach } - // Check against hints + // Check against hints. Hints only ever match by exact package name — + // we never resolve a hint via android_dev_id prefix because hint + // attribution should be unambiguous. val matchingHintItem = hintsWithAndroid.find { item -> - item.androidAppIds?.contains(app.packageName) == true + item.androidAppIds?.contains(app.packageName) == true || + item.androidCuratedAppIds?.contains(app.packageName) == true } if (matchingHintItem != null) { diff --git a/packages/android/app/src/main/java/com/thewallboycott/android/data/AppScanner.kt b/packages/android/app/src/main/java/com/thewallboycott/android/data/AppScanner.kt index 4078692375..ea5c78ca52 100644 --- a/packages/android/app/src/main/java/com/thewallboycott/android/data/AppScanner.kt +++ b/packages/android/app/src/main/java/com/thewallboycott/android/data/AppScanner.kt @@ -89,15 +89,27 @@ class AppScanner( /** * Checks if a database item matches a given package name. - * Matches by exact app ID or developer ID prefix. * - * Developer ID matching requires a dot separator to prevent false positives: - * - devId="com.wix" matches "com.wix.android" (dot after prefix) - * - devId="com.wix" matches "com.wix" (exact match) - * - devId="com.wix" does NOT match "com.wixsite.builder" (no dot separator) + * Three matching strategies, all of which only ever see packages enumerated + * in the build-time-generated manifest (we no longer hold + * QUERY_ALL_PACKAGES, so the OS will not surface anything else): + * 1. Exact match against `android_app_ids` (curated by the scrapper). + * 2. Exact match against `android_curated_app_ids` (the schema field that + * expands a developer prefix into concrete package IDs at build time). + * 3. Prefix match against `android_dev_id`. Under this branch is + * largely redundant — the OS only returns packages we already + * enumerated — but it remains as a defensive catch in case a curated + * entry happens to share a dev_id namespace (e.g. dev_id="com.wix", + * curated app "com.wix.admin" is correctly attributed to Wix without + * us listing the dev_id mapping in two places). + * + * Developer ID prefix matching requires a dot separator to prevent false + * positives: devId="com.wix" matches "com.wix.android" and "com.wix" but + * NOT "com.wixsite.builder". */ private fun matchesPackage(item: AllItem, packageName: String): Boolean { return (item.androidAppIds?.contains(packageName) == true) || + (item.androidCuratedAppIds?.contains(packageName) == true) || (item.androidDevId?.let { packageName.startsWith("$it.") || packageName == it } == true) } } diff --git a/packages/android/app/src/main/java/com/thewallboycott/android/data/models/AllItem.kt b/packages/android/app/src/main/java/com/thewallboycott/android/data/models/AllItem.kt index 09755a3e6c..654dd2d3c1 100644 --- a/packages/android/app/src/main/java/com/thewallboycott/android/data/models/AllItem.kt +++ b/packages/android/app/src/main/java/com/thewallboycott/android/data/models/AllItem.kt @@ -55,6 +55,14 @@ data class AllItem( /** Array of full Android app package IDs for exact matching */ @SerialName("android_app_ids") val androidAppIds: List? = null, + /** + * Curated expansions for `android_dev_id` prefixes. The build-time queries + * manifest generator reads this from ALL.json; runtime scanning uses + * androidAppIds for matching, so this field is only deserialized to keep + * Json {ignoreUnknownKeys} off and surface schema drift early. + */ + @SerialName("android_curated_app_ids") + val androidCuratedAppIds: List? = null, /** Hint for an alternative Android app */ @SerialName("hint_android_id") val hintAndroidId: String? = null diff --git a/packages/android/app/src/main/java/com/thewallboycott/android/ui/screens/PermissionRequestScreen.kt b/packages/android/app/src/main/java/com/thewallboycott/android/ui/screens/PermissionRequestScreen.kt deleted file mode 100644 index 6d43015914..0000000000 --- a/packages/android/app/src/main/java/com/thewallboycott/android/ui/screens/PermissionRequestScreen.kt +++ /dev/null @@ -1,56 +0,0 @@ -package com.thewallboycott.android.ui.screens - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.res.stringResource -import com.thewallboycott.android.R -import com.thewallboycott.android.ui.theme.WallPrimaryDark -import com.thewallboycott.android.ui.theme.WallTextOnPrimary - -@Composable -fun PermissionRequestScreen(onRequestPermission: () -> Unit) { - Column( - modifier = Modifier - .fillMaxSize() - .padding(16.dp), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - stringResource(R.string.permission_headline), - style = MaterialTheme.typography.headlineMedium, - fontWeight = FontWeight.Bold - ) - Spacer(modifier = Modifier.height(16.dp)) - Text( - stringResource(R.string.permission_body), - textAlign = TextAlign.Center - ) - Spacer(modifier = Modifier.height(24.dp)) - Button( - onClick = onRequestPermission, - colors = ButtonDefaults.buttonColors( - containerColor = WallPrimaryDark, - contentColor = WallTextOnPrimary - ), - shape = RoundedCornerShape(12.dp) - ) { - Text(stringResource(R.string.btn_grant_access)) - } - } -} \ No newline at end of file diff --git a/packages/android/app/src/main/res/values-ar/strings.xml b/packages/android/app/src/main/res/values-ar/strings.xml index 4279c0df77..0f72bad457 100644 --- a/packages/android/app/src/main/res/values-ar/strings.xml +++ b/packages/android/app/src/main/res/values-ar/strings.xml @@ -49,7 +49,6 @@ جرّب هذه البدائل: أبلغ عن تطبيق أبلغ عن خطأ - منح الصلاحية تحدَّ صديقك يفحص هاتفه @@ -245,10 +244,6 @@ خصوصية تامة مجاني - - لنبدأ الإعداد - لفحص تطبيقاتك مقابل قاعدة بيانات المقاطعة المحلية، نحتاج إذنًا لرؤية ما هو مُثبّت. بياناتك تبقى على جهازك — دائمًا. - تطبيق صهيوني مكتشف \u2022 %s تجاهل diff --git a/packages/android/app/src/main/res/values/strings.xml b/packages/android/app/src/main/res/values/strings.xml index ca1656eb13..6af21c827c 100644 --- a/packages/android/app/src/main/res/values/strings.xml +++ b/packages/android/app/src/main/res/values/strings.xml @@ -45,7 +45,6 @@ Try These Instead: Report App Report mistake - Grant Access Dare a Friend to Scan Theirs @@ -231,10 +230,6 @@ Private Free - - Let\'s Get You Set Up - To scan your apps against our local boycott database, we need permission to see what\'s installed. Your data stays on your device--always. - Israeli app detected \u2022 %s Ignore diff --git a/packages/android/app/src/test/java/com/thewallboycott/android/EndToEndDetectionTest.kt b/packages/android/app/src/test/java/com/thewallboycott/android/EndToEndDetectionTest.kt new file mode 100644 index 0000000000..eda35bc95d --- /dev/null +++ b/packages/android/app/src/test/java/com/thewallboycott/android/EndToEndDetectionTest.kt @@ -0,0 +1,207 @@ +package com.thewallboycott.android + +import android.Manifest +import android.app.Application +import android.content.Context +import android.content.Intent +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.net.Uri +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.work.ListenableWorker +import androidx.work.WorkInfo +import androidx.work.WorkManager +import androidx.work.testing.TestListenableWorkerBuilder +import androidx.work.testing.WorkManagerTestInitHelper +import com.thewallboycott.android.background.PackageInstallReceiver +import com.thewallboycott.android.background.ScanWorker +import com.thewallboycott.android.data.AssetDatabaseProvider +import com.thewallboycott.android.data.NotificationPreferences +import com.thewallboycott.android.data.SystemPackageScanner +import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.Shadows + +/** + * End-to-end test for the install-and-detect flow. + * + * Walks the full reactive scan pipeline using real production wiring: + * - Real `AssetDatabaseProvider` reading the bundled `ALL.json` + * - Real `SystemPackageScanner` reading from Robolectric's shadow PackageManager + * - Real `PackageInstallReceiver` enqueuing real WorkManager work + * - Real `ScanWorker.doWork()` writing to real `NotificationPreferences` + * + * Scenario: target boycotted app (Wix) is NOT installed at startup; the test then + * registers it with the shadow PackageManager, dispatches a `PACKAGE_ADDED` broadcast + * to the receiver, and verifies that the resulting scan attributes the new package + * to the Wix entry from the production database. + * + * Why this complements the existing unit tests: + * - `PackageInstallReceiverTest` only covers receiver → enqueue plumbing. + * - `ScanWorkerTest` only covers worker logic with fake DB and fake scanner. + * - `AppScannerTest` covers AppScanner with real DB but fake PM. + * + * Nothing else exercises the full chain against the real DB AND the real + * SystemPackageScanner reading from a shadow PackageManager — which is the + * surface that actually broke when `QUERY_ALL_PACKAGES` was removed. + */ +@RunWith(AndroidJUnit4::class) +class EndToEndDetectionTest { + + private lateinit var context: Context + private lateinit var prefs: NotificationPreferences + private lateinit var receiver: PackageInstallReceiver + + @Before + fun setup() { + context = ApplicationProvider.getApplicationContext() + + // Real WorkManager test harness — receiver will enqueue against this. + WorkManagerTestInitHelper.initializeTestWorkManager(context) + + // Reset detection ledger so this test is order-independent. + prefs = NotificationPreferences(context) + prefs.clear() + + // Allow ScanWorker.sendNotifications() to post (we don't assert on + // notifications, but the foreground promotion path touches permissions). + Shadows.shadowOf(context as Application).grantPermissions(Manifest.permission.POST_NOTIFICATIONS) + + receiver = PackageInstallReceiver() + } + + /** + * Mirrors a real installed user app: non-system, has the target package name + * and a usable ApplicationInfo so `loadLabel()` works inside the worker. + */ + private fun installViaShadowPm(packageName: String, label: String) { + val info = PackageInfo().apply { + this.packageName = packageName + applicationInfo = ApplicationInfo().apply { + this.packageName = packageName + this.nonLocalizedLabel = label + this.flags = 0 // non-system, non-updated-system + } + } + Shadows.shadowOf(context.packageManager).installPackage(info) + } + + /** + * Builds a worker that uses the SAME production wiring as the runtime path: + * real DB, real SystemPackageScanner, real prefs (the shared one we cleared above). + */ + private fun buildWorkerWithRealDeps(): ScanWorker { + return TestListenableWorkerBuilder(context) + .setWorkerFactory(object : androidx.work.WorkerFactory() { + override fun createWorker( + appContext: Context, + workerClassName: String, + workerParameters: androidx.work.WorkerParameters + ): ListenableWorker { + return ScanWorker( + appContext = appContext, + workerParams = workerParameters, + databaseProvider = AssetDatabaseProvider(appContext), + packageScanner = SystemPackageScanner(appContext), + prefs = prefs + ) + } + }) + .build() as ScanWorker + } + + @Test + fun installThenScan_detectsBoycottedApp_endToEnd() = runTest { + val targetPackage = "com.wix.android" + val targetLabel = "Wix" + + // ============================================================ + // Stage 1 — Baseline: target not installed, scan finds nothing. + // ============================================================ + val baselinePackages = context.packageManager.getInstalledPackages(0).map { it.packageName } + assertFalse( + "Pre-condition: target package must NOT be installed before stage 2", + targetPackage in baselinePackages + ) + + val baselineWorker = buildWorkerWithRealDeps() + val baselineResult = baselineWorker.doWork() + assertEquals( + "Baseline scan should succeed", + ListenableWorker.Result.success(), + baselineResult + ) + assertTrue( + "Baseline: nothing boycotted is installed, so known apps must remain empty", + prefs.getKnownApps().isEmpty() + ) + + // ============================================================ + // Stage 2 — Install: register the target via shadow PM. + // ============================================================ + installViaShadowPm(targetPackage, targetLabel) + + val afterInstallPackages = context.packageManager.getInstalledPackages(0).map { it.packageName } + assertTrue( + "Shadow PM must surface the newly installed package", + targetPackage in afterInstallPackages + ) + + // ============================================================ + // Stage 3 — Trigger: dispatch PACKAGE_ADDED to the real receiver. + // ============================================================ + val intent = Intent(Intent.ACTION_PACKAGE_ADDED).apply { + data = Uri.parse("package:$targetPackage") + } + receiver.onReceive(context, intent) + + // ============================================================ + // Stage 4 — Receiver assertion: WorkManager has queued the scan. + // ============================================================ + val enqueued = WorkManager.getInstance(context) + .getWorkInfosForUniqueWork(PackageInstallReceiver.REACTIVE_SCAN_WORK_NAME) + .get() + .filter { it.state == WorkInfo.State.ENQUEUED } + assertEquals( + "Receiver should enqueue exactly one reactive scan", + 1, + enqueued.size + ) + + // ============================================================ + // Stage 5 — Run the worker directly. We bypass WorkManager's 3s + // initial delay and scheduling because the receiver→enqueue path is + // already covered by PackageInstallReceiverTest. The point of this + // E2E is to prove that a scan executed AFTER install actually sees + // the new package via the real SystemPackageScanner and resolves it + // against the real ALL.json. + // ============================================================ + val scanWorker = buildWorkerWithRealDeps() + val scanResult = scanWorker.doWork() + assertEquals( + "Reactive scan should succeed", + ListenableWorker.Result.success(), + scanResult + ) + + // ============================================================ + // Stage 6 — Verify detection: prefs ledger contains the new app, + // proving that ScanWorker resolved com.wix.android against the + // Wix entry in the real ALL.json (which uses androidDevId="com.wix"). + // On a "first run" the worker seeds known apps without notifying; + // that seeding IS the detection signal we assert on. + // ============================================================ + val knownAfterScan = prefs.getKnownApps() + assertTrue( + "Detection failed: $targetPackage was not recorded in known apps. " + + "Known apps after scan: $knownAfterScan", + targetPackage in knownAfterScan + ) + } +} diff --git a/packages/android/app/src/test/java/com/thewallboycott/android/background/ScanWorkerTest.kt b/packages/android/app/src/test/java/com/thewallboycott/android/background/ScanWorkerTest.kt index d8ac37e6d6..2b50d75a03 100644 --- a/packages/android/app/src/test/java/com/thewallboycott/android/background/ScanWorkerTest.kt +++ b/packages/android/app/src/test/java/com/thewallboycott/android/background/ScanWorkerTest.kt @@ -644,6 +644,107 @@ class ScanWorkerTest { ) } + // ==================== Curated App IDs ==================== + + @Test + fun doWork_curatedAppIdMatch_detected() = runTest { + // Blacklist entry whose only Android signal beyond android_dev_id is + // curated_app_ids. The runtime matcher must consult curated_app_ids + // directly, not rely on the (now-redundant) prefix branch. + val curatedEntry = AllItem( + id = "curated_corp", + r = listOf("h"), + n = "Curated Corp", + androidDevId = "com.curatedcorp", + androidCuratedAppIds = listOf("com.curatedcorp.flagship") + ) + val worker = buildWorker( + dbItems = listOf(curatedEntry), + packages = listOf(fakePackage("com.curatedcorp.flagship")) + ) + worker.doWork() + + val knownApps = prefs.getKnownApps() + assertTrue( + "Curated app ID match should be tracked as known", + knownApps.contains("com.curatedcorp.flagship") + ) + } + + @Test + fun doWork_curatedOnly_noDevIdOrAppIds_stillScanned() = runTest { + // Regression guard: the `blacklistWithAndroid` filter must include + // entries whose only Android signal is curated_app_ids. Previously the + // filter required dev_id or app_ids, so curated-only entries were silently dropped. + val curatedOnly = AllItem( + id = "curated_solo", + r = listOf("f"), + n = "Solo Curated", + androidCuratedAppIds = listOf("com.solo.curated.app") + ) + val worker = buildWorker( + dbItems = listOf(curatedOnly), + packages = listOf(fakePackage("com.solo.curated.app")) + ) + worker.doWork() + + val knownApps = prefs.getKnownApps() + assertTrue( + "Curated-only entry should still be scanned and tracked", + knownApps.contains("com.solo.curated.app") + ) + } + + @Test + fun doWork_hintCuratedAppIdMatch_notInKnownApps() = runTest { + // Regression guard: hints with curated_app_ids must match at runtime + // (previously the hint matcher only checked androidAppIds), but hints + // are still excluded from the known-apps notification ledger. + val hintEntry = AllItem( + id = "hint_curated", + r = emptyList(), + n = "Hint Curated", + isHint = true, + hintText = "Try the alternative", + androidCuratedAppIds = listOf("com.hint.curated.app") + ) + val worker = buildWorker( + dbItems = listOf(hintEntry), + packages = listOf(fakePackage("com.hint.curated.app")) + ) + worker.doWork() + + val knownApps = prefs.getKnownApps() + assertFalse( + "Hint apps (even matched via curated) should not be in known apps", + knownApps.contains("com.hint.curated.app") + ) + } + + @Test + fun doWork_curatedAppId_unrelatedPackage_notMatched() = runTest { + // A package that does not appear in curated_app_ids, android_app_ids, + // or the dev_id namespace must not be flagged. + val curatedEntry = AllItem( + id = "curated_other", + r = listOf("h"), + n = "Curated Other", + androidCuratedAppIds = listOf("com.other.alpha") + ) + val worker = buildWorker( + dbItems = listOf(curatedEntry), + packages = listOf(fakePackage("com.unrelated.app")) + ) + worker.doWork() + + val knownApps = prefs.getKnownApps() + assertFalse( + "Unrelated package must not match curated entry", + knownApps.contains("com.unrelated.app") + ) + assertTrue("No known apps expected", knownApps.isEmpty()) + } + // ==================== Custom Reason ("c") in Database ==================== @Test diff --git a/packages/android/app/src/test/java/com/thewallboycott/android/data/AppScannerTest.kt b/packages/android/app/src/test/java/com/thewallboycott/android/data/AppScannerTest.kt index 3c93ac6ff8..8a23287cec 100644 --- a/packages/android/app/src/test/java/com/thewallboycott/android/data/AppScannerTest.kt +++ b/packages/android/app/src/test/java/com/thewallboycott/android/data/AppScannerTest.kt @@ -330,6 +330,122 @@ class AppScannerTest { ) } + // ==================== Curated App IDs ==================== + + @Test + fun scan_matchesByAndroidCuratedAppId() = runTest { + // An entry whose curated list contains the installed package should flag it, + // even when androidAppIds is null. This is the post- path: the + // build-time generator emits curated_app_ids into , and the + // runtime matcher must recognise them. + val curatedEntry = AllItem( + id = "curated_only", + r = listOf("h"), + n = "Curated Co", + androidDevId = "com.curated", + androidCuratedAppIds = listOf("com.curated.alpha", "com.curated.beta") + ) + val packages = listOf(fakePackage("com.curated.beta")) + val scanner = AppScanner( + FakeDatabaseProvider(listOf(curatedEntry)), + FakePackageScanner(packages) + ) + val results = scanner.scan() + assertEquals("Curated app ID should flag the package", 1, results.blacklisted.size) + assertEquals("Curated Co", results.blacklisted[0].second.n) + } + + @Test + fun scan_curatedOnly_withoutDevIdOrAppIds_stillMatches() = runTest { + // Entries that declare only curated_app_ids (no dev_id, no app_ids) must + // still match — schema allows curated as the sole Android signal. + val curatedOnly = AllItem( + id = "curated_solo", + r = listOf("f"), + n = "Solo Co", + androidCuratedAppIds = listOf("com.solo.app") + ) + val packages = listOf(fakePackage("com.solo.app")) + val scanner = AppScanner( + FakeDatabaseProvider(listOf(curatedOnly)), + FakePackageScanner(packages) + ) + val results = scanner.scan() + assertEquals("Curated-only entry should still flag", 1, results.blacklisted.size) + assertEquals("Solo Co", results.blacklisted[0].second.n) + } + + @Test + fun scan_curatedAppId_unrelatedPackage_doesNotMatch() = runTest { + // A package not present in curated, app_ids, or dev_id namespace must not match. + val curatedEntry = AllItem( + id = "curated_other", + r = listOf("h"), + n = "Curated Other", + androidCuratedAppIds = listOf("com.curated.alpha") + ) + val packages = listOf(fakePackage("com.unrelated.app")) + val scanner = AppScanner( + FakeDatabaseProvider(listOf(curatedEntry)), + FakePackageScanner(packages) + ) + val results = scanner.scan() + assertTrue("Unrelated package must not match curated entry", results.blacklisted.isEmpty()) + assertEquals("Should be in other", 1, results.other.size) + } + + @Test + fun scan_hint_matchesByCuratedAppId() = runTest { + // Regression guard: previously the hint matcher only consulted androidAppIds + // and silently ignored curated_app_ids. After the fix, hints with curated + // expansions must match at runtime. + val hintEntry = AllItem( + id = "hint_curated", + r = emptyList(), + n = "Hint Curated", + isHint = true, + hintText = "Try the alternative", + androidCuratedAppIds = listOf("com.hint.curated.app") + ) + val packages = listOf(fakePackage("com.hint.curated.app")) + val scanner = AppScanner( + FakeDatabaseProvider(listOf(hintEntry)), + FakePackageScanner(packages) + ) + val results = scanner.scan() + assertTrue("blacklisted should be empty", results.blacklisted.isEmpty()) + assertEquals("hinted should have 1 (matched via curated)", 1, results.hinted.size) + assertEquals("Hint Curated", results.hinted[0].second.n) + } + + @Test + fun scan_curatedMatch_blacklistTakesPriorityOverHint() = runTest { + // When the same package matches a blacklist entry via curated AND a hint + // entry via curated, the blacklist must still win. + val blacklistEntry = AllItem( + id = "dual_curated_black", + r = listOf("h"), + n = "Dual Curated Co", + androidCuratedAppIds = listOf("com.dual.curated.app") + ) + val hintEntry = AllItem( + id = "dual_curated_hint", + r = emptyList(), + n = "Dual Curated Hint", + isHint = true, + hintText = "Alternative", + androidCuratedAppIds = listOf("com.dual.curated.app") + ) + val packages = listOf(fakePackage("com.dual.curated.app")) + val scanner = AppScanner( + FakeDatabaseProvider(listOf(blacklistEntry, hintEntry)), + FakePackageScanner(packages) + ) + val results = scanner.scan() + assertEquals("blacklisted should win", 1, results.blacklisted.size) + assertTrue("hinted should be empty", results.hinted.isEmpty()) + } + // ==================== Real Database Integration ==================== @Test diff --git a/packages/android/app/src/test/snapshots/AppListScreen_clean_phone.png b/packages/android/app/src/test/snapshots/AppListScreen_clean_phone.png index 255ec30b1d..938c46da50 100644 Binary files a/packages/android/app/src/test/snapshots/AppListScreen_clean_phone.png and b/packages/android/app/src/test/snapshots/AppListScreen_clean_phone.png differ diff --git a/packages/android/app/src/test/snapshots/AppListScreen_clean_tablet.png b/packages/android/app/src/test/snapshots/AppListScreen_clean_tablet.png index 988d0f8f9a..a28f136ef5 100644 Binary files a/packages/android/app/src/test/snapshots/AppListScreen_clean_tablet.png and b/packages/android/app/src/test/snapshots/AppListScreen_clean_tablet.png differ diff --git a/packages/android/app/src/test/snapshots/AppListScreen_flagged_alternatives_phone.png b/packages/android/app/src/test/snapshots/AppListScreen_flagged_alternatives_phone.png index f7c1b3e696..6b4de21f91 100644 Binary files a/packages/android/app/src/test/snapshots/AppListScreen_flagged_alternatives_phone.png and b/packages/android/app/src/test/snapshots/AppListScreen_flagged_alternatives_phone.png differ diff --git a/packages/android/app/src/test/snapshots/AppListScreen_flagged_phone.png b/packages/android/app/src/test/snapshots/AppListScreen_flagged_phone.png index 5a6787c47c..5acf208de3 100644 Binary files a/packages/android/app/src/test/snapshots/AppListScreen_flagged_phone.png and b/packages/android/app/src/test/snapshots/AppListScreen_flagged_phone.png differ diff --git a/packages/android/app/src/test/snapshots/AppListScreen_mixed_phone.png b/packages/android/app/src/test/snapshots/AppListScreen_mixed_phone.png index 5a6787c47c..5acf208de3 100644 Binary files a/packages/android/app/src/test/snapshots/AppListScreen_mixed_phone.png and b/packages/android/app/src/test/snapshots/AppListScreen_mixed_phone.png differ diff --git a/packages/android/app/src/test/snapshots/AppListScreen_replacement_phone.png b/packages/android/app/src/test/snapshots/AppListScreen_replacement_phone.png index 621c7a327d..5b1a87e11d 100644 Binary files a/packages/android/app/src/test/snapshots/AppListScreen_replacement_phone.png and b/packages/android/app/src/test/snapshots/AppListScreen_replacement_phone.png differ diff --git a/packages/android/app/src/test/snapshots/SupportScreen_phone.png b/packages/android/app/src/test/snapshots/SupportScreen_phone.png index fba5adb59d..b370bd1d7b 100644 Binary files a/packages/android/app/src/test/snapshots/SupportScreen_phone.png and b/packages/android/app/src/test/snapshots/SupportScreen_phone.png differ diff --git a/packages/android/app/src/test/snapshots/SupportScreen_tablet.png b/packages/android/app/src/test/snapshots/SupportScreen_tablet.png index fc3072f4d4..49dcfb5c80 100644 Binary files a/packages/android/app/src/test/snapshots/SupportScreen_tablet.png and b/packages/android/app/src/test/snapshots/SupportScreen_tablet.png differ diff --git a/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/2.png b/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/2.png index 88e4d21239..bb7c8807cb 100644 Binary files a/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/2.png and b/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/2.png differ diff --git a/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/4.png b/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/4.png index 024f76af99..611813a967 100644 Binary files a/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/4.png and b/packages/android/fastlane/metadata/android/ar/images/phoneScreenshots/4.png differ diff --git a/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/2.png b/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/2.png index 75020da135..9f4c0f9c33 100644 Binary files a/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/2.png and b/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/2.png differ diff --git a/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/4.png b/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/4.png index 5034c0cd53..c442a0b3f3 100644 Binary files a/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/4.png and b/packages/android/fastlane/metadata/android/ar/images/tabletScreenshots/4.png differ diff --git a/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png b/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png index 5a6787c47c..5acf208de3 100644 Binary files a/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png and b/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png differ diff --git a/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png b/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png index 255ec30b1d..938c46da50 100644 Binary files a/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png and b/packages/android/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png differ diff --git a/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/2.png b/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/2.png index 30ea9d813b..1a97a8649d 100644 Binary files a/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/2.png and b/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/2.png differ diff --git a/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/4.png b/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/4.png index 988d0f8f9a..a28f136ef5 100644 Binary files a/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/4.png and b/packages/android/fastlane/metadata/android/en-US/images/tabletScreenshots/4.png differ diff --git a/packages/android/scripts/trigger-worker.md b/packages/android/scripts/trigger-worker.md new file mode 100644 index 0000000000..eba5ad169c --- /dev/null +++ b/packages/android/scripts/trigger-worker.md @@ -0,0 +1,76 @@ +# `trigger-worker.sh` — ScanWorker testing helper + +ADB-driven harness for exercising the background scan flow end-to-end on a real device. Useful when verifying notification behaviour, the periodic `PERIODIC_APP_SCAN` job, or the `PackageInstallReceiver` reactive scan after a manifest change (e.g. the `` migration). + +## Quick start + +```bash +# 1. Make sure the app is installed (any debug or signed build is fine) +bash scripts/adb.sh install + +# 2. Launch the app once so WorkManager registers the periodic job +adb shell am start -n com.thewallboycott.android/.MainActivity + +# 3. Trigger a scan + tail logs +bash scripts/trigger-worker.sh all +``` + +## Commands + +| Command | What it does | Underlying ADB call | +| --- | --- | --- | +| `scan` | Enqueues a one-shot `ScanWorker` via `MainActivity`'s `TRIGGER_SCAN` intent extra. Goes through normal WorkManager queueing. | `am start -n /.MainActivity --ez TRIGGER_SCAN true` | +| `force-now` | Inspects `dumpsys jobscheduler`, finds every job owned by the app, and force-runs each one — bypassing the 6-hour interval, charging/idle constraints, etc. | `cmd jobscheduler run -f ` | +| `sim-install [pkg]` | Broadcasts a fake `PACKAGE_ADDED` to `PackageInstallReceiver`, which enqueues a reactive `ScanWorker`. Defaults to `com.fake.boycott.test`. | `am broadcast -a android.intent.action.PACKAGE_ADDED -d package: -p ` | +| `jobs` | Pretty-prints the scheduled JobScheduler jobs for the app (job id + tag). Empty until the app has been launched at least once. | `dumpsys jobscheduler` (filtered) | +| `logs` | Clears logcat and tails the relevant tags. Ctrl+C to stop. | `logcat -c && logcat -v time ScanWorker:V PackageInstallReceiver:V NotificationAction:V WM-WorkerWrapper:I WM-Processor:I '*:S'` | +| `all` | `scan` → `jobs` → `logs`. One-shot smoke test. | — | +| `help` | Print usage. Works without a device connected. | — | + +## Examples + +```bash +# Force a one-shot scan, ignore everything else +bash scripts/trigger-worker.sh scan + +# Re-run the periodic job right now (skips the 6-hour wait) +bash scripts/trigger-worker.sh force-now + +# Pretend a flagged app got installed (must be a real package id from ALL.json +# for the scan to actually flag anything — fake ids just exercise the receiver) +bash scripts/trigger-worker.sh sim-install com.example.flagged + +# Just inspect what's scheduled +bash scripts/trigger-worker.sh jobs + +# Watch the worker run live in another terminal +bash scripts/trigger-worker.sh logs +``` + +## Multiple devices + +Both wired and `adb connect`-ed devices count. If more than one is online, the script asks you to disambiguate: + +```bash +ANDROID_SERIAL=192.168.1.100:41635 bash scripts/trigger-worker.sh scan +``` + +## Caveats + +- **`sim-install` does not bypass package visibility** — the receiver is registered programmatically in `TheWallApp`, so the app process must be running (or recently woken). Launch the app at least once before broadcasting. +- **`force-now` requires the periodic job to exist** — that's registered the first time `MainActivity` is created (`schedulePeriodicScan()`). Open the app once, then `force-now` will work for the rest of the session. +- **`scan` opens the activity** — it goes through `MainActivity.handleIntent()`, so the app surfaces briefly. Use `force-now` if you want a purely background trigger. +- **Wireless ADB is fragile** — if commands hang, run `adb kill-server && adb start-server`, or re-pair the device. + +## Implementation notes + +- ADB path resolution mirrors `scripts/adb.sh` — `$PATH`, then `$ANDROID_HOME/platform-tools`, then macOS/Windows defaults. +- Device resolution is lazy: `help` runs without any device attached, every other subcommand resolves on first use and bails with a clear error if nothing is online. +- Job parsing reads `dumpsys jobscheduler` and matches `Service:` lines containing the package name, then extracts the job id from the surrounding `JOB #u0aXXX/:` header. This is fragile across major Android versions; if it breaks, run `adb shell dumpsys jobscheduler | less` and adjust the awk filter. + +## Related + +- [`scripts/adb.sh`](adb.sh) — install / uninstall / clear-data / generic logcat +- `MainActivity.kt` — `handleIntent()` reads the `TRIGGER_SCAN` extra +- `background/ScanWorker.kt` — the worker itself (TAG = `ScanWorker`) +- `background/PackageInstallReceiver.kt` — reactive trigger on `PACKAGE_ADDED` diff --git a/packages/android/scripts/trigger-worker.sh b/packages/android/scripts/trigger-worker.sh new file mode 100755 index 0000000000..e0ed939390 --- /dev/null +++ b/packages/android/scripts/trigger-worker.sh @@ -0,0 +1,235 @@ +#!/usr/bin/env bash +# Trigger and inspect the ScanWorker via ADB. +# +# Usage: +# bash scripts/trigger-worker.sh [args] +# +# Commands: +# scan Enqueue a one-shot ScanWorker (via MainActivity TRIGGER_SCAN intent) +# force-now Force-run the periodic JobScheduler job, ignoring constraints/interval +# sim-install Simulate PACKAGE_ADDED for a fake package -> PackageInstallReceiver +# jobs Show JobScheduler state for the app (job ids, status, constraints) +# logs Tail logs filtered to ScanWorker / receivers / WorkManager +# all scan + jobs + logs (kicks a scan and tails) +# help This help + +set -eo pipefail +# Note: `set -u` (nounset) is intentionally NOT enabled — macOS ships bash 3.2, +# where "${array[@]}" on an empty array is treated as unset and aborts the shell. + +PACKAGE="com.thewallboycott.android" + +# ---- ADB resolution (same logic as scripts/adb.sh) ------------------------- +if command -v adb &>/dev/null; then + ADB="adb" +elif [ -n "${ANDROID_HOME:-}" ] && [ -x "$ANDROID_HOME/platform-tools/adb" ]; then + ADB="$ANDROID_HOME/platform-tools/adb" +elif [ -x "$HOME/Library/Android/sdk/platform-tools/adb" ]; then + ADB="$HOME/Library/Android/sdk/platform-tools/adb" +elif [ -x "$HOME/AppData/Local/Android/Sdk/platform-tools/adb.exe" ]; then + ADB="$HOME/AppData/Local/Android/Sdk/platform-tools/adb.exe" +else + echo "Error: adb not found. Install platform-tools or set ANDROID_HOME." >&2 + exit 1 +fi + +# ---- Device selection (lazy — only resolved when a command needs it) ------- +SERIAL_ARGS=() +SERIAL_RESOLVED=0 + +resolve_device() { + if [ "$SERIAL_RESOLVED" = 1 ]; then + return 0 + fi + if [ -n "${ANDROID_SERIAL:-}" ]; then + SERIAL_ARGS=(-s "$ANDROID_SERIAL") + SERIAL_RESOLVED=1 + return 0 + fi + + # Collect transports that are in 'device' state. + local transports + transports=$("$ADB" devices | awk 'NR>1 && $2=="device" {print $1}') + if [ -z "$transports" ]; then + echo "Error: no devices in 'device' state. Plug in a phone or run 'adb devices'." >&2 + exit 1 + fi + + # Dedupe transports that point at the same physical phone (e.g. an IP entry + # and an mDNS entry both backed by one device). Group by hardware serialno + # and keep the first transport per serial. Compatible with bash 3.2. + local picked="" t serial first_serial="" mismatch=0 + while IFS= read -r t; do + [ -z "$t" ] && continue + # `getprop ro.serialno` returns the real hardware serial; `get-serialno` + # returns the transport string for TLS/wireless connections, which is + # useless for deduping mDNS-vs-IP entries that point to the same phone. + serial=$("$ADB" -s "$t" shell getprop ro.serialno 2>/dev/null | tr -d '\r' || true) + if [ -z "$serial" ] || [ "$serial" = "unknown" ]; then + serial="$t" + fi + if [ -z "$first_serial" ]; then + first_serial="$serial" + picked="$t" + elif [ "$serial" != "$first_serial" ]; then + mismatch=1 + fi + done <<< "$transports" + + if [ "$mismatch" = 1 ]; then + echo "Multiple distinct devices attached. Pick one with ANDROID_SERIAL=:" >&2 + printf ' %s\n' $transports >&2 + exit 1 + fi + + SERIAL_ARGS=(-s "$picked") + SERIAL_RESOLVED=1 +} + +run_adb() { resolve_device; "$ADB" "${SERIAL_ARGS[@]}" "$@"; } + +# ---- Helpers --------------------------------------------------------------- +require_installed() { + if ! run_adb shell pm path "$PACKAGE" >/dev/null 2>&1; then + echo "Error: $PACKAGE is not installed on the device." >&2 + echo "Hint: bash scripts/adb.sh install" >&2 + exit 1 + fi +} + +# Parses 'dumpsys jobscheduler' for jobs owned by $PACKAGE and prints +# 'jobId tag' lines, one per job. +list_jobs() { + run_adb shell dumpsys jobscheduler | awk -v pkg="$PACKAGE" ' + /^ JOB #/ { + header = $0 + in_block = 1 + jid = "" + tag = "" + next + } + in_block && /tag=/ { + match($0, /tag=[^ ]+/) + tag = substr($0, RSTART+4, RLENGTH-4) + } + in_block && /Service:/ && index($0, pkg) { + # Header looks like: JOB #u0a123/12345: ... -> jobId is the 12345 + if (match(header, /\/[0-9]+:/)) { + jid = substr(header, RSTART+1, RLENGTH-2) + } + if (jid != "") print jid, tag + in_block = 0 + } + /^ ===/ { in_block = 0 } + ' | sort -u +} + +# ---- Commands -------------------------------------------------------------- +case "${1:-help}" in +scan) + require_installed + # forceNotify defaults to true so the notification always fires for manual + # testing. Pass `false` as the second arg to honour the recently-notified + # dedup guard instead. + force_notify="${2:-true}" + echo "[scan] Broadcasting TRIGGER_SCAN (forceNotify=$force_notify) — silent, no UI …" + # FLAG_INCLUDE_STOPPED_PACKAGES (0x00000020) lets the broadcast reach the + # receiver even if the app is in the FLAG_STOPPED state (e.g. fresh install + # before the launcher icon has been tapped). + run_adb shell am broadcast \ + -a com.thewallboycott.android.action.TRIGGER_SCAN \ + -p "$PACKAGE" \ + -f 0x00000020 \ + --ez force_notify "$force_notify" >/dev/null + echo "[scan] Enqueued. Tail logs with: $0 logs" + ;; + +force-now) + require_installed + echo "[force-now] Inspecting JobScheduler for $PACKAGE …" + jobs_output=$(list_jobs) + if [ -z "$jobs_output" ]; then + echo "[force-now] No jobs registered. Launch the app once so the periodic worker is scheduled, then retry." >&2 + exit 1 + fi + echo "[force-now] Jobs found:" + printf '%s\n' "$jobs_output" | sed 's/^/ /' + while IFS= read -r line; do + [ -z "$line" ] && continue + jid="${line%% *}" + echo "[force-now] cmd jobscheduler run -f $PACKAGE $jid" + run_adb shell cmd jobscheduler run -f "$PACKAGE" "$jid" /dev/null + echo "[sim-install] Sent. Note: receiver is registered at runtime in TheWallApp," + echo " so the app must be running (or recently woken) to handle it." + ;; + +jobs) + require_installed + echo "[jobs] JobScheduler entries for $PACKAGE:" + out=$(list_jobs) + if [ -z "$out" ]; then + echo " (none — launch the app to register PERIODIC_APP_SCAN)" + else + printf '%s\n' "$out" + fi + ;; + +logs) + echo "[logs] Tailing ScanWorker / receivers / WorkManager. Ctrl+C to stop." + run_adb logcat -c + run_adb logcat -v time \ + ScanWorker:V \ + PackageInstallReceiver:V \ + NotificationAction:V \ + WM-WorkerWrapper:I \ + WM-Processor:I \ + '*:S' + ;; + +all) + require_installed + "$0" scan + sleep 1 + "$0" jobs || true + "$0" logs + ;; + +help | --help | -h | "") + cat <<'EOF' +Trigger and inspect the ScanWorker via ADB. + +Usage: + bash scripts/trigger-worker.sh [args] + +Commands: + scan Enqueue a one-shot ScanWorker (via MainActivity TRIGGER_SCAN intent) + force-now Force-run the periodic JobScheduler job, ignoring constraints/interval + sim-install Simulate PACKAGE_ADDED for a fake package -> PackageInstallReceiver + jobs Show JobScheduler state for the app (job ids, status, constraints) + logs Tail logs filtered to ScanWorker / receivers / WorkManager + all scan + jobs + logs (kicks a scan and tails) + help This help + +Env: + ANDROID_SERIAL Pick a specific device when multiple are attached. +EOF + ;; + +*) + echo "Unknown command: $1" >&2 + echo "Run: bash scripts/trigger-worker.sh help" >&2 + exit 1 + ;; +esac diff --git a/packages/android/version.properties b/packages/android/version.properties index fff734d15a..9e0212b721 100644 --- a/packages/android/version.properties +++ b/packages/android/version.properties @@ -2,5 +2,5 @@ # This file is read by build.gradle.kts to set versionCode and versionName # Use pnpm release:patch/minor/major to automatically bump versions -VERSION_CODE=21 -VERSION_NAME=1.5.0 +VERSION_CODE=23 +VERSION_NAME=1.6.1 diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 4cb1a8b335..61a4710459 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -194,7 +194,17 @@ export const FinalDBFileSchema = z /** Android developer ID like "com.wix" (not full app package IDs) */ android_dev_id: z.string().optional(), /** Array of full Android app package IDs for exact matching */ - android_app_ids: z.array(z.string()).optional() + android_app_ids: z.array(z.string()).optional(), + /** + * Curated expansions for `android_dev_id` prefixes. Android's + * element only matches exact package names, never prefixes, so any entry + * that uses `android_dev_id` (and whose actual installed apps don't share + * the dev-id literally) MUST enumerate the concrete packages here for the + * Android scanner to detect them post Play-Store policy migration off + * QUERY_ALL_PACKAGES. Optional when `android_app_ids` already covers + * everything reachable for that dev-id. + */ + android_curated_app_ids: z.array(z.string()).optional() }) .strict() .refine( diff --git a/packages/common/src/schemas/all.generated.schema.json b/packages/common/src/schemas/all.generated.schema.json index 8f4df8c80e..1d0ce1ee4b 100644 --- a/packages/common/src/schemas/all.generated.schema.json +++ b/packages/common/src/schemas/all.generated.schema.json @@ -195,6 +195,12 @@ "items": { "type": "string" } + }, + "android_curated_app_ids": { + "type": "array", + "items": { + "type": "string" + } } }, "required": ["id", "r", "n"], diff --git a/packages/scrapper/results/1_batches/static/MANUAL.json b/packages/scrapper/results/1_batches/static/MANUAL.json index f3f7693c1f..d7db123058 100644 --- a/packages/scrapper/results/1_batches/static/MANUAL.json +++ b/packages/scrapper/results/1_batches/static/MANUAL.json @@ -30,9 +30,7 @@ "isHint": true, "hintText": "Hey, The BBC is biased. Use Newscord for more balanced news.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["bbc.mobile.news.ww"] + "hintCompanyId": "newscord_media_bias" }, { "name": "ChatGPT", @@ -115,7 +113,31 @@ "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "android_dev_id": "com.microsoft", + "android_curated_app_ids": [ + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + "com.microsoft.skydrive", + "com.microsoft.todos", + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ] }, { "name": "Microsoft", @@ -125,8 +147,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -136,8 +157,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -147,8 +167,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -158,8 +177,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -169,8 +187,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -180,8 +197,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -191,8 +207,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -202,8 +217,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -213,8 +227,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -224,8 +237,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -235,8 +247,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -246,8 +257,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -257,8 +267,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -268,8 +277,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -279,8 +287,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -290,8 +297,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -301,8 +307,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -312,8 +317,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -323,8 +327,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -334,8 +337,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -345,8 +347,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -356,8 +357,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -367,8 +367,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -378,8 +377,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -389,8 +387,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -400,8 +397,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -411,8 +407,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -422,8 +417,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -433,8 +427,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -444,8 +437,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -455,8 +447,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -466,8 +457,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -477,8 +467,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -488,8 +477,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -499,8 +487,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -510,8 +497,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -521,8 +507,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -532,8 +517,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -543,8 +527,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -554,8 +537,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -565,8 +547,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -576,8 +557,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -587,8 +567,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -598,8 +577,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -609,8 +587,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -620,8 +597,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -631,8 +607,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -642,8 +617,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -653,8 +627,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -664,8 +637,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -675,8 +647,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -686,8 +657,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -697,8 +667,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -708,8 +677,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -719,8 +687,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -730,8 +697,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -741,8 +707,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -752,8 +717,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -763,8 +727,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -774,8 +737,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -785,8 +747,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -796,8 +757,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -807,8 +767,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -818,8 +777,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -829,8 +787,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -840,8 +797,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -851,8 +807,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -862,8 +817,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -873,8 +827,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -884,8 +837,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -895,8 +847,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -906,8 +857,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -917,8 +867,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -928,8 +877,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -939,8 +887,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -950,8 +897,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "New York Times", @@ -985,9 +931,7 @@ "isHint": true, "hintText": "Hey, Sky News is biased. Use Newscord to get the full picture.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["com.bskyb.skynews.android"] + "hintCompanyId": "newscord_media_bias" }, { "name": "Tagesschau", @@ -1040,16 +984,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "name": "Upscrolled", @@ -1059,16 +994,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "name": "Upscrolled", @@ -1078,16 +1004,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "name": "Wall Street Journal", diff --git a/packages/scrapper/results/2_merged/2_MERGED_ALL.json b/packages/scrapper/results/2_merged/2_MERGED_ALL.json index bf865013ae..9bf9cb8b8a 100644 --- a/packages/scrapper/results/2_merged/2_MERGED_ALL.json +++ b/packages/scrapper/results/2_merged/2_MERGED_ALL.json @@ -54384,7 +54384,8 @@ ], "ig": "www.instagram.com/life_at_au10tix", "gh": "github.com/au10tixmobile", - "android_dev_id": "com.au10tix" + "android_dev_id": "com.au10tix", + "android_curated_app_ids": ["com.au10tix"] }, { "name": "AudaScience", @@ -66116,9 +66117,7 @@ "isHint": true, "hintText": "Hey, The BBC is biased. Use Newscord for more balanced news.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["bbc.mobile.news.ww"] + "hintCompanyId": "newscord_media_bias" }, { "name": "BBR", @@ -85464,7 +85463,8 @@ "Software" ], "gh": "github.com/bluesky-social", - "android_dev_id": "xyz.blueskyweb" + "android_dev_id": "xyz.blueskyweb", + "android_curated_app_ids": ["xyz.blueskyweb.app"] }, { "id": "bluesky-514d_manual_ws_bsky_app", @@ -136298,8 +136298,7 @@ "estRevenue": "$1M to $10M", "industries": ["Electronics", "Heating, Ventilation, and Air Conditioning (HVAC)", "Manufacturing"], "industryGroups": ["Consumer Electronics", "Hardware", "Manufacturing", "Real Estate"], - "ytp": "www.youtube.com/@coolautomation", - "android_dev_id": "CoolAutomation" + "ytp": "www.youtube.com/@coolautomation" }, { "id": "coool-air-design-cool-automation_manual_ws_support_coolautomation_com", @@ -179677,8 +179676,7 @@ "industryGroups": ["Artificial Intelligence (AI)", "Data and Analytics", "Financial Services", "Software"], "ig": "www.instagram.com/earnix_inc", "gh": "github.com/Earnix", - "ytp": "www.youtube.com/@Earnix_Inc", - "android_dev_id": "mobile.app1hh7BC4Jb6" + "ytp": "www.youtube.com/@Earnix_Inc" }, { "name": "Earth Force Technologies", @@ -282562,8 +282560,7 @@ "cbRank": "1271910", "estRevenue": "$1M to $10M", "industries": ["Apps", "Gaming", "iOS", "Mobile Apps", "Software", "Video Games"], - "industryGroups": ["Apps", "Gaming", "Mobile", "Platforms", "Software"], - "android_dev_id": "iFeel+Labs" + "industryGroups": ["Apps", "Gaming", "Mobile", "Platforms", "Software"] }, { "name": "IFN", @@ -314423,8 +314420,7 @@ "cbRank": "2123440", "estRevenue": "$1M to $10M", "industries": ["Gaming", "Mobile Apps", "Online Games"], - "industryGroups": ["Apps", "Gaming", "Mobile", "Software"], - "android_dev_id": "Joyvoo+LTD" + "industryGroups": ["Apps", "Gaming", "Mobile", "Software"] }, { "name": "JPEGmini", @@ -376393,7 +376389,31 @@ "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "android_dev_id": "com.microsoft", + "android_curated_app_ids": [ + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + "com.microsoft.skydrive", + "com.microsoft.todos", + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ] }, { "name": "Microsoft", @@ -376403,8 +376423,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376414,8 +376433,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376425,8 +376443,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376436,8 +376453,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376447,8 +376463,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376458,8 +376473,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376469,8 +376483,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376480,8 +376493,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376491,8 +376503,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376502,8 +376513,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376513,8 +376523,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376524,8 +376533,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376535,8 +376543,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376546,8 +376553,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376557,8 +376563,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376568,8 +376573,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376579,8 +376583,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376590,8 +376593,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376601,8 +376603,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376612,8 +376613,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376623,8 +376623,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376634,8 +376633,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376645,8 +376643,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376656,8 +376653,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376667,8 +376663,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376678,8 +376673,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376689,8 +376683,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376700,8 +376693,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376711,8 +376703,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376722,8 +376713,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376733,8 +376723,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376744,8 +376733,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376755,8 +376743,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376766,8 +376753,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376777,8 +376763,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376788,8 +376773,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376799,8 +376783,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376810,8 +376793,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376821,8 +376803,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376832,8 +376813,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376843,8 +376823,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376854,8 +376833,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376865,8 +376843,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376876,8 +376853,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376887,8 +376863,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376898,8 +376873,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376909,8 +376883,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376920,8 +376893,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376931,8 +376903,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376942,8 +376913,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376953,8 +376923,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376964,8 +376933,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376975,8 +376943,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376986,8 +376953,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -376997,8 +376963,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377008,8 +376973,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377019,8 +376983,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377030,8 +376993,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377041,8 +377003,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377052,8 +377013,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377063,8 +377023,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377074,8 +377033,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377085,8 +377043,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377096,8 +377053,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377107,8 +377063,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377118,8 +377073,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377129,8 +377083,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377140,8 +377093,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377151,8 +377103,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377162,8 +377113,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377173,8 +377123,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377184,8 +377133,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377195,8 +377143,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377206,8 +377153,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377217,8 +377163,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft", @@ -377228,8 +377173,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "name": "Microsoft Israel R&D", @@ -388534,7 +388478,8 @@ "ytp": "www.youtube.com/@moonpayhq", "ytc": "www.youtube.com/channel/UC9hQtWpGGNaZ8yiwFsBkRBg", "th": "www.threads.com/@moonpay", - "android_dev_id": "com.moonpay" + "android_dev_id": "com.moonpay", + "android_curated_app_ids": ["com.moonpay.android"] }, { "name": "MoonRun", @@ -405572,8 +405517,7 @@ "estRevenue": "$1M to $10M", "industries": ["Apps"], "industryGroups": ["Apps", "Software"], - "ytp": "www.youtube.com/@neuroheroofficial", - "android_dev_id": "Neuro Hero Ltd" + "ytp": "www.youtube.com/@neuroheroofficial" }, { "id": "neuro-hero_manual_li_neuro-hero", @@ -423301,7 +423245,8 @@ "industryGroups": ["Health Care"], "ig": "www.instagram.com/omadahealth", "ytp": "www.youtube.com/@Omadahealth", - "android_dev_id": "com.healthcoda" + "android_dev_id": "com.healthcoda", + "android_curated_app_ids": ["com.healthcoda.app"] }, { "name": "Omaiko", @@ -529016,7 +528961,8 @@ "gh": "github.com/Sentinel-One", "ytp": "www.youtube.com/@Sentinelone-inc", "ytc": "www.youtube.com/channel/UCm-vzfQy1lNglsXRBY6Vu5w", - "android_dev_id": "com.sentinelone" + "android_dev_id": "com.sentinelone", + "android_curated_app_ids": ["com.sentinelone.mobile.android"] }, { "id": "sentinel_manual_li_sentinelone-france", @@ -541376,7 +541322,8 @@ "ig": "www.instagram.com/life_at_silverfort", "gh": "github.com/silverfort-open-source", "ytp": "www.youtube.com/@silverfort", - "android_dev_id": "com.silverfort" + "android_dev_id": "com.silverfort", + "android_curated_app_ids": ["com.silverfort.mobile"] }, { "name": "Silverfort", @@ -541386,7 +541333,8 @@ "ig": "www.instagram.com/life_at_silverfort", "gh": "github.com/silverfort-open-source", "ytp": "www.youtube.com/@silverfort", - "android_dev_id": "com.silverfort" + "android_dev_id": "com.silverfort", + "android_curated_app_ids": ["com.silverfort.mobile"] }, { "name": "Silvergate Technologies Ltd.", @@ -545888,9 +545836,7 @@ "isHint": true, "hintText": "Hey, Sky News is biased. Use Newscord to get the full picture.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["com.bskyb.skynews.android"] + "hintCompanyId": "newscord_media_bias" }, { "name": "Skycatch", @@ -573180,8 +573126,7 @@ "Science and Engineering" ], "ig": "www.instagram.com/strixdrones", - "ytp": "www.youtube.com/@strixdrones489", - "android_dev_id": "Strix+Drones" + "ytp": "www.youtube.com/@strixdrones489" }, { "id": "strix-drones_manual_li_strixdrones", @@ -630388,16 +630333,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "name": "Upscrolled", @@ -630407,16 +630343,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "name": "Upscrolled", @@ -630426,16 +630353,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "name": "Upsellon", @@ -664099,7 +664017,8 @@ "ytp": "www.youtube.com/@Wix", "tt": "www.tiktok.com/@wix", "th": "www.threads.com/@wix", - "android_dev_id": "com.wix" + "android_dev_id": "com.wix", + "android_curated_app_ids": ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"] }, { "name": "Wix", @@ -664114,7 +664033,8 @@ "ytp": "www.youtube.com/@Wix", "tt": "www.tiktok.com/@wix", "th": "www.threads.com/@wix", - "android_dev_id": "com.wix" + "android_dev_id": "com.wix", + "android_curated_app_ids": ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"] }, { "id": "wix_manual_ws_stylable_io", diff --git a/packages/scrapper/results/4_final/ALL.json b/packages/scrapper/results/4_final/ALL.json index bec1c1cc02..9d15f619bb 100644 --- a/packages/scrapper/results/4_final/ALL.json +++ b/packages/scrapper/results/4_final/ALL.json @@ -16456,6 +16456,7 @@ "n": "AU10TIX", "fb": "Au10tix", "android_dev_id": "com.au10tix", + "android_curated_app_ids": ["com.au10tix"], "gh": "au10tixmobile", "ig": "life_at_au10tix", "li": "au10tix-limited", @@ -20055,9 +20056,7 @@ "isHint": true, "hintText": "Hey, The BBC is biased. Use Newscord for more balanced news.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["bbc.mobile.news.ww"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_BBC_0", @@ -25619,6 +25618,7 @@ "n": "Bluesky", "fb": "blueskysocialweb", "android_dev_id": "xyz.blueskyweb", + "android_curated_app_ids": ["xyz.blueskyweb.app"], "gh": "bluesky-social", "li": "bluesky-pbllc", "tw": "bluesky", @@ -40945,7 +40945,6 @@ "r": ["h"], "n": "CoolAutomation", "fb": "coolautomation", - "android_dev_id": "CoolAutomation", "li": "1456190", "tw": "cool_automation", "ytp": "coolautomation", @@ -54567,7 +54566,6 @@ "r": ["h"], "n": "Earnix", "fb": "earnix", - "android_dev_id": "mobile.app1hh7BC4Jb6", "gh": "Earnix", "ig": "earnix_inc", "li": "earnix", @@ -85677,7 +85675,6 @@ "r": ["h"], "n": "IFeel Labs", "fb": "ifeel.labs", - "android_dev_id": "iFeel+Labs", "li": "ifeel-labs", "ws": "ifeellabs.com" }, @@ -95394,7 +95391,6 @@ "r": ["h"], "n": "Joyvoo", "fb": "joyvoo", - "android_dev_id": "Joyvoo+LTD", "li": "joyvoo", "ws": "joyvoo.com" }, @@ -114021,8 +114017,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_1", @@ -114032,8 +114027,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_2", @@ -114043,8 +114037,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_3", @@ -114054,8 +114047,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_0", @@ -114065,8 +114057,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_1", @@ -114076,8 +114067,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_2", @@ -114087,8 +114077,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_3", @@ -114098,8 +114087,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_4", @@ -114109,8 +114097,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_5", @@ -114120,8 +114107,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_6", @@ -114131,8 +114117,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_7", @@ -114142,8 +114127,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_8", @@ -114153,8 +114137,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_9", @@ -114164,8 +114147,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_10", @@ -114175,8 +114157,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_11", @@ -114186,8 +114167,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_12", @@ -114197,8 +114177,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_13", @@ -114208,8 +114187,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_14", @@ -114219,8 +114197,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_0", @@ -114230,8 +114207,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_1", @@ -114241,8 +114217,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_2", @@ -114252,8 +114227,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_3", @@ -114263,8 +114237,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_4", @@ -114274,8 +114247,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_5", @@ -114285,8 +114257,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_6", @@ -114296,8 +114267,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_7", @@ -114307,8 +114277,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_8", @@ -114318,8 +114287,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_9", @@ -114329,8 +114297,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_10", @@ -114340,8 +114307,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_11", @@ -114351,8 +114317,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_12", @@ -114362,8 +114327,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_13", @@ -114373,8 +114337,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_14", @@ -114384,8 +114347,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_0", @@ -114395,8 +114357,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_1", @@ -114406,8 +114367,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_2", @@ -114417,8 +114377,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_3", @@ -114428,8 +114387,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_4", @@ -114439,8 +114397,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_5", @@ -114450,8 +114407,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_6", @@ -114461,8 +114417,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_7", @@ -114472,8 +114427,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_8", @@ -114483,8 +114437,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_9", @@ -114494,8 +114447,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_10", @@ -114505,8 +114457,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_11", @@ -114516,8 +114467,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_12", @@ -114527,8 +114477,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_13", @@ -114538,8 +114487,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_14", @@ -114549,8 +114497,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_15", @@ -114560,8 +114507,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_16", @@ -114571,8 +114517,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_17", @@ -114582,8 +114527,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_18", @@ -114593,8 +114537,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_19", @@ -114604,8 +114547,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_20", @@ -114615,8 +114557,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_21", @@ -114626,8 +114567,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_22", @@ -114637,8 +114577,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_23", @@ -114648,8 +114587,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_24", @@ -114659,8 +114597,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_25", @@ -114670,8 +114607,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_26", @@ -114681,8 +114617,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_27", @@ -114692,8 +114627,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_28", @@ -114703,8 +114637,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_7", @@ -114714,8 +114647,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_5", @@ -114725,8 +114657,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_3", @@ -114736,8 +114667,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_0", @@ -114748,7 +114678,31 @@ "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "android_dev_id": "com.microsoft", + "android_curated_app_ids": [ + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + "com.microsoft.skydrive", + "com.microsoft.todos", + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ] }, { "id": "hint_ws_Microsoft_6", @@ -114758,8 +114712,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_1", @@ -114769,8 +114722,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_9", @@ -114780,8 +114732,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_2", @@ -114791,8 +114742,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_10", @@ -114802,8 +114752,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_12", @@ -114813,8 +114762,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_8", @@ -114824,8 +114772,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_11", @@ -114835,8 +114782,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_4", @@ -114846,8 +114792,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "microsoft-israel-r-d", @@ -118251,6 +118196,7 @@ "n": "MoonPay", "fb": "officialmoonpay", "android_dev_id": "com.moonpay", + "android_curated_app_ids": ["com.moonpay.android"], "ig": "moonpay", "li": "moonpay", "th": "@moonpay", @@ -123134,7 +123080,6 @@ "r": ["f"], "n": "Neuro Hero", "fb": "neuroheroofficial", - "android_dev_id": "Neuro Hero Ltd", "li": "5326993", "tw": "neurohero", "ytp": "neuroheroofficial", @@ -128063,6 +128008,7 @@ "fb": "omadahealth", "s": "OMDA", "android_dev_id": "com.healthcoda", + "android_curated_app_ids": ["com.healthcoda.app"], "ig": "omadahealth", "li": "omada-health", "tw": "omadahealth", @@ -158529,6 +158475,7 @@ "fb": "SentinelOne", "s": "S", "android_dev_id": "com.sentinelone", + "android_curated_app_ids": ["com.sentinelone.mobile.android"], "gh": "Sentinel-One", "li": "sentinelone-dach", "tw": "SentinelOne", @@ -162134,6 +162081,7 @@ "n": "Silverfort", "fb": "silverfort", "android_dev_id": "com.silverfort", + "android_curated_app_ids": ["com.silverfort.mobile"], "gh": "silverfort-open-source", "ig": "life_at_silverfort", "li": "silverfort", @@ -163434,9 +163382,7 @@ "isHint": true, "hintText": "Hey, Sky News is biased. Use Newscord to get the full picture.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["com.bskyb.skynews.android"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_Sky News_0", @@ -171496,7 +171442,6 @@ "r": ["h"], "n": "Strix Drones", "fb": "strixdrones", - "android_dev_id": "Strix+Drones", "ig": "strixdrones", "li": "strix-drones", "tw": "strixdrones", @@ -188785,16 +188730,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_0", @@ -188823,16 +188759,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_1", @@ -188842,16 +188769,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "upsellon-trade-tech-ml-ltd", @@ -198008,6 +197926,7 @@ "fb": "wix", "s": "WIX", "android_dev_id": "com.wix", + "android_curated_app_ids": ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"], "gh": "wix", "ig": "wix", "li": "wix-com", diff --git a/packages/scrapper/src/static_data/hints/microsoft_bds.ts b/packages/scrapper/src/static_data/hints/microsoft_bds.ts index 5121056117..c7d7b36a3b 100644 --- a/packages/scrapper/src/static_data/hints/microsoft_bds.ts +++ b/packages/scrapper/src/static_data/hints/microsoft_bds.ts @@ -102,6 +102,40 @@ export const microsoftBdsHints: CompressedManualItemType[] = [ "https://www.tiktok.com/search/user?q=Microsoft" ], android_dev_id: "com.microsoft", + // only matches exact package names; enumerate the well-known + // Microsoft apps so the Android scanner can detect them post-migration + // off QUERY_ALL_PACKAGES. + android_curated_app_ids: [ + // Communication + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + // Office suite + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + // OneDrive / cloud + "com.microsoft.skydrive", + "com.microsoft.todos", + // Browser / search / AI + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + // Authenticator / security + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + // Gaming / phone + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + // Other + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ], isHint: true, hintText: "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", hintUrl: "https://bdsmovement.net/microsoft", diff --git a/packages/scrapper/src/tasks/final.ts b/packages/scrapper/src/tasks/final.ts index f7c2298f68..8b1564b7f8 100644 --- a/packages/scrapper/src/tasks/final.ts +++ b/packages/scrapper/src/tasks/final.ts @@ -60,6 +60,9 @@ const loadJsonFiles = async (folderPath: string) => { ...(mergedItem?.hint_android_id ? { hint_android_id: mergedItem.hint_android_id } : {}), ...(mergedItem?.android_dev_id ? { android_dev_id: mergedItem.android_dev_id } : {}), ...(mergedItem?.android_app_ids ? { android_app_ids: mergedItem.android_app_ids } : {}), + ...(mergedItem?.android_curated_app_ids + ? { android_curated_app_ids: mergedItem.android_curated_app_ids } + : {}), ...(mergedItem?.proof_text ? { proof_text: mergedItem.proof_text } : {}), ...(mergedItem?.proof_link ? { proof_link: mergedItem.proof_link } : {}) } diff --git a/packages/scrapper/src/tasks/gen_static.ts b/packages/scrapper/src/tasks/gen_static.ts index 5f39c6803f..756e37cc17 100644 --- a/packages/scrapper/src/tasks/gen_static.ts +++ b/packages/scrapper/src/tasks/gen_static.ts @@ -7,11 +7,12 @@ import { CompressedManualItemSchema, ManualEntriesType } from "../types" const outputFilePath = path.join(__dirname, "../../results/1_batches/static/MANUAL.json") +const SOCIAL_LINK_FIELDS = ["li", "fb", "tw", "ig", "gh", "ytp", "ytc", "tt", "th"] as const + const injectStaticRows = async () => { const merged: ManualEntriesType = [] log("Starting injectStaticRows - processing Hints") - // Process Hints items log(`Processing ${Hints.length} hint items`) for (const item of Hints) { const safeItem = CompressedManualItemSchema.parse(item) @@ -20,245 +21,75 @@ const injectStaticRows = async () => { name, reasons, ws, - li, - fb, - tw, - ig, - gh, - ytp, - ytc, - tt, - th, isHint, hintText, hintUrl, hintCompanyId, hint_android_id, android_dev_id, - android_app_ids + android_app_ids, + android_curated_app_ids } = safeItem - // Only process items with isHint flag - if (isHint) { - // Process websites - for (const [index, website] of ws.entries()) { - const _website = cleanWebsite(website) - if (!_website) { - console.error(`Website is empty: ${website}`) - throw new Error("Website is empty") - } - - merged.push({ - name, - reasons: reasons ?? [], - ws: _website, - id: `hint_ws_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - - // Process LinkedIn - if (li) { - for (const [index, linkedin] of li.entries()) { - const cleanLi = cleanWebsite(linkedin) - if (cleanLi) { - merged.push({ - name, - reasons: reasons ?? [], - li: cleanLi, - id: `hint_li_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } - } - - // Process Facebook - if (fb) { - for (const [index, facebook] of fb.entries()) { - const cleanFb = cleanWebsite(facebook) - if (cleanFb) { - merged.push({ - name, - reasons: reasons ?? [], - fb: cleanFb, - id: `hint_fb_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } - } - - // Process Twitter - if (tw) { - for (const [index, twitter] of tw.entries()) { - const cleanTw = cleanWebsite(twitter) - if (cleanTw) { - merged.push({ - name, - reasons: reasons ?? [], - tw: cleanTw, - id: `hint_tw_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } - } - - // Process Instagram - if (ig) { - for (const [index, instagram] of ig.entries()) { - const cleanIg = cleanWebsite(instagram) - if (cleanIg) { - merged.push({ - name, - reasons: reasons ?? [], - ig: cleanIg, - id: `hint_ig_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } + if (!isHint) continue + + // Android-targeting fields are emitted on the first/canonical entry per company only. + // Subsequent split entries (one per social-media URL) match by URL and don't need to + // re-carry the package-id metadata — the runtime resolves apps via .find() against + // ALL.json, so a single matching entry per dev is sufficient. + let androidFieldsEmitted = false + const consumeAndroidFields = () => { + if (androidFieldsEmitted) return {} + androidFieldsEmitted = true + return { + ...(hint_android_id ? { hint_android_id } : {}), + ...(android_dev_id ? { android_dev_id } : {}), + ...(android_app_ids ? { android_app_ids } : {}), + ...(android_curated_app_ids ? { android_curated_app_ids } : {}) } + } - // Process GitHub - if (gh) { - for (const [index, github] of gh.entries()) { - const cleanGh = cleanWebsite(github) - if (cleanGh) { - merged.push({ - name, - reasons: reasons ?? [], - gh: cleanGh, - id: `hint_gh_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } + // Process websites + for (const [index, website] of ws.entries()) { + const _website = cleanWebsite(website) + if (!_website) { + console.error(`Website is empty: ${website}`) + throw new Error("Website is empty") } - // Process YouTube Profile - if (ytp) { - for (const [index, youtubeProfile] of ytp.entries()) { - const cleanYtp = cleanWebsite(youtubeProfile) - if (cleanYtp) { - merged.push({ - name, - reasons: reasons ?? [], - ytp: cleanYtp, - id: `hint_ytp_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } - } + merged.push({ + name, + reasons: reasons ?? [], + ws: _website, + id: `hint_ws_${name}_${index}`, + isHint: true, + hintText, + hintUrl, + ...(hintCompanyId ? { hintCompanyId } : {}), + ...consumeAndroidFields() + }) + } - // Process YouTube Channel - if (ytc) { - for (const [index, youtubeChannel] of ytc.entries()) { - const cleanYtc = cleanWebsite(youtubeChannel) - if (cleanYtc) { - merged.push({ - name, - reasons: reasons ?? [], - ytc: cleanYtc, - id: `hint_ytc_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } - } + // Process every social-media link field uniformly. + for (const field of SOCIAL_LINK_FIELDS) { + const urls = safeItem[field] + if (!urls) continue - // Process TikTok - if (tt) { - for (const [index, tiktok] of tt.entries()) { - const cleanTt = cleanWebsite(tiktok) - if (cleanTt) { - merged.push({ - name, - reasons: reasons ?? [], - tt: cleanTt, - id: `hint_tt_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } - } + for (const [index, url] of urls.entries()) { + const cleaned = cleanWebsite(url) + if (!cleaned) continue - // Process Threads - if (th) { - for (const [index, threads] of th.entries()) { - const cleanTh = cleanWebsite(threads) - if (cleanTh) { - merged.push({ - name, - reasons: reasons ?? [], - th: cleanTh, - id: `hint_th_${name}_${index}`, - isHint: true, - hintText: hintText, - hintUrl: hintUrl, - ...(hintCompanyId ? { hintCompanyId } : {}), - ...(hint_android_id ? { hint_android_id } : {}), - ...(android_dev_id ? { android_dev_id } : {}), - ...(android_app_ids ? { android_app_ids } : {}) - }) - } - } + merged.push({ + name, + reasons: reasons ?? [], + [field]: cleaned, + id: `hint_${field}_${name}_${index}`, + isHint: true, + hintText, + hintUrl, + ...(hintCompanyId ? { hintCompanyId } : {}), + ...consumeAndroidFields() + }) } } } diff --git a/packages/scrapper/src/tasks/manual_resolve/manualOverrides.ts b/packages/scrapper/src/tasks/manual_resolve/manualOverrides.ts index e49317b1ba..bab62c9bd7 100644 --- a/packages/scrapper/src/tasks/manual_resolve/manualOverrides.ts +++ b/packages/scrapper/src/tasks/manual_resolve/manualOverrides.ts @@ -1026,6 +1026,7 @@ export const manualOverrides: Record< gh: ["https://github.com/au10tixmobile"], urls: ["https://play.google.com/store/apps/developer?id=Au10tix"], android_dev_id: "com.au10tix", + android_curated_app_ids: ["com.au10tix"], _meta: { isVerified: true, isBrowserVerified: true } }, "AV Design Studio": { @@ -8408,6 +8409,7 @@ export const manualOverrides: Record< "https://play.google.com/store/apps/developer?id=Bluesky+PBLLC" ], android_dev_id: "xyz.blueskyweb", + android_curated_app_ids: ["xyz.blueskyweb.app"], _meta: { isVerified: true, isBrowserVerified: true } }, Bluespine: { @@ -12734,7 +12736,6 @@ export const manualOverrides: Record< "https://coolautomation.my.salesforce-sites.com/OrderForm/resource/15000/OrderForm/index.html", "https://professional.coolremote.net" ], - android_dev_id: "CoolAutomation", _meta: { isHomepage: true, isVerified: true } }, CoolVOC: { @@ -16893,7 +16894,6 @@ export const manualOverrides: Record< gh: ["https://github.com/Earnix"], ytp: ["https://www.youtube.com/@Earnix_Inc"], urls: ["https://play.google.com/store/apps/developer?id=Earnix+Ltd"], - android_dev_id: "mobile.app1hh7BC4Jb6", _meta: { isVerified: true, isBrowserVerified: true } }, "Earth Force Technologies": { @@ -26183,7 +26183,6 @@ export const manualOverrides: Record< }, "IFeel Labs": { ws: ["https://ifeellabs.com"], - android_dev_id: "iFeel+Labs", _meta: { isHomepage: true, isVerified: true } }, "IGOS-MN RF Shielding": { @@ -29061,7 +29060,6 @@ export const manualOverrides: Record< ws: ["https://joyvoo.com"], li: ["https://www.linkedin.com/company/joyvoo"], urls: ["https://apps.apple.com/us/developer/joyvoo-ltd/id441053285"], - android_dev_id: "Joyvoo+LTD", _meta: { isHomepage: true, isVerified: true } }, Jubaan: { @@ -36140,6 +36138,7 @@ export const manualOverrides: Record< "https://play.google.com/store/apps/developer?id=MoonPay" ], android_dev_id: "com.moonpay", + android_curated_app_ids: ["com.moonpay.android"], _meta: { isVerified: true, isBrowserVerified: true } }, "Moonshot AI": { @@ -37956,7 +37955,6 @@ export const manualOverrides: Record< "https://apps.apple.com/us/developer/neuro-hero-limited/id739746387", "https://www.pinterest.ie/NeuroHero" ], - android_dev_id: "Neuro Hero Ltd", _meta: { isHomepage: true, isVerified: true } }, NeuroBlade: { @@ -39427,6 +39425,7 @@ export const manualOverrides: Record< "https://job-boards.greenhouse.io/omadahealth" ], android_dev_id: "com.healthcoda", + android_curated_app_ids: ["com.healthcoda.app"], _meta: { isVerified: true, isBrowserVerified: true } }, "OmegaPH Business Consulting": { @@ -49406,6 +49405,7 @@ export const manualOverrides: Record< ytc: ["https://www.youtube.com/channel/UCm-vzfQy1lNglsXRBY6Vu5w"], urls: ["https://play.google.com/store/apps/developer?id=Zimperium+INC."], android_dev_id: "com.sentinelone", + android_curated_app_ids: ["com.sentinelone.mobile.android"], _meta: { isVerified: true, isBrowserVerified: true } }, Sentra: { @@ -50499,6 +50499,7 @@ export const manualOverrides: Record< "https://play.google.com/store/apps/developer?id=Silverfort+Inc." ], android_dev_id: "com.silverfort", + android_curated_app_ids: ["com.silverfort.mobile"], alt: [ { n: "Keycloak", ws: "https://www.keycloak.org" }, { n: "BeyondTrust", ws: "https://www.beyondtrust.com" }, @@ -53095,7 +53096,6 @@ export const manualOverrides: Record< ig: ["https://www.instagram.com/strixdrones"], ytp: ["https://www.youtube.com/@strixdrones489"], urls: ["https://apps.apple.com/us/developer/strix-drones/id1234567890", "https://medium.com/@strixdrones"], - android_dev_id: "Strix+Drones", _meta: { isHomepage: true, isVerified: true } }, StrongDM: { @@ -62150,6 +62150,7 @@ export const manualOverrides: Record< { n: "Tilda", ws: "https://tilda.cc" } ], android_dev_id: "com.wix", + android_curated_app_ids: ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"], _meta: { isVerified: true, isBrowserVerified: true } }, "Wix Japan": { diff --git a/packages/scrapper/src/tasks/merge_static.ts b/packages/scrapper/src/tasks/merge_static.ts index a17cf09b0d..493cd91cd2 100644 --- a/packages/scrapper/src/tasks/merge_static.ts +++ b/packages/scrapper/src/tasks/merge_static.ts @@ -455,8 +455,8 @@ const loadJsonFiles = async (folderPath: string) => { } // Hard fail if key doesn't exist in the row object (invalid property) - // Allow android_dev_id and android_app_ids even if not in current row (they're optional schema fields) - const validOptionalFields = ["android_dev_id", "android_app_ids"] + // Allow android_* fields even if not in current row (they're optional schema fields) + const validOptionalFields = ["android_dev_id", "android_app_ids", "android_curated_app_ids"] if (!(key in updatedRow) && !validOptionalFields.includes(key)) { const validKeys = Object.keys(updatedRow).join(", ") error(`Unexpected override key "${key}" for ${row.name}. Valid keys: ${validKeys}`) @@ -524,6 +524,8 @@ const loadJsonFiles = async (folderPath: string) => { // Note: alt field is handled separately in final.ts, not here const android_dev_id = "android_dev_id" in addition ? addition.android_dev_id : undefined const android_app_ids = "android_app_ids" in addition ? addition.android_app_ids : undefined + const android_curated_app_ids = + "android_curated_app_ids" in addition ? addition.android_curated_app_ids : undefined const proof_text = "proof_text" in addition ? addition.proof_text : undefined const proof_link = "proof_link" in addition ? addition.proof_link : undefined @@ -578,6 +580,9 @@ const loadJsonFiles = async (folderPath: string) => { if (android_app_ids) { updatedItem.android_app_ids = android_app_ids } + if (android_curated_app_ids) { + updatedItem.android_curated_app_ids = android_curated_app_ids + } // Carry proof fields to the base entry if (proof_text) { updatedItem.proof_text = proof_text @@ -654,6 +659,7 @@ const loadJsonFiles = async (folderPath: string) => { reasons, ...(android_dev_id ? { android_dev_id } : {}), ...(android_app_ids ? { android_app_ids } : {}), + ...(android_curated_app_ids ? { android_curated_app_ids } : {}), ...(proof_text ? { proof_text } : {}), ...(proof_link ? { proof_link } : {}) } diff --git a/packages/scrapper/src/types.ts b/packages/scrapper/src/types.ts index 940c48e7bf..2593a1dd47 100644 --- a/packages/scrapper/src/types.ts +++ b/packages/scrapper/src/types.ts @@ -126,6 +126,13 @@ const MergedDataItemSchema = CrunchbaseScrappedItemSchema.extend({ android_dev_id: z.string().optional(), /** Array of full Android app package IDs for exact matching */ android_app_ids: z.array(z.string()).optional(), + /** + * Curated expansions for `android_dev_id` prefixes. Android's + * element only matches exact package names, never prefixes — so any entry + * with `android_dev_id` whose installed apps don't share the dev-id literally + * MUST enumerate them here for the Android scanner to detect them. + */ + android_curated_app_ids: z.array(z.string()).optional(), /** Custom evidence text - required when reason 'c' (Custom) is used */ proof_text: z.string().optional(), /** URL to source/evidence - required when reason 'c' (Custom) is used */ @@ -159,6 +166,13 @@ export const CompressedManualItemSchema = z android_dev_id: z.string().optional(), /** Array of full Android app package IDs for exact matching */ android_app_ids: z.array(z.string()).optional(), + /** + * Curated expansions for `android_dev_id` prefixes. Android's + * element only matches exact package names, never prefixes — so any entry + * with `android_dev_id` whose installed apps don't share the dev-id literally + * MUST enumerate them here for the Android scanner to detect them. + */ + android_curated_app_ids: z.array(z.string()).optional(), /** Custom evidence text - required when reason 'c' (Custom) is used */ proof_text: z.string().optional(), /** URL to source/evidence - required when reason 'c' (Custom) is used */ @@ -225,6 +239,13 @@ export const ManualEntrySchema = z android_dev_id: z.string().optional(), /** Array of full Android app package IDs for exact matching */ android_app_ids: z.array(z.string()).optional(), + /** + * Curated expansions for `android_dev_id` prefixes. Android's + * element only matches exact package names, never prefixes — so any entry + * with `android_dev_id` whose installed apps don't share the dev-id literally + * MUST enumerate them here for the Android scanner to detect them. + */ + android_curated_app_ids: z.array(z.string()).optional(), /** Custom evidence text - required when reason 'c' (Custom) is used */ proof_text: z.string().optional(), /** URL to source/evidence - required when reason 'c' (Custom) is used */ @@ -286,6 +307,12 @@ export type ManualOverrideFields = { * Use this when you want to block specific apps rather than all apps from a developer. */ android_app_ids?: string[] + /** + * Curated expansions for an `android_dev_id` prefix. Required when an entry + * has `android_dev_id` but the installed apps do not share the dev-id + * literally (e.g. dev-id "com.wix" but actual app "com.wix.admin"). + */ + android_curated_app_ids?: string[] /** * Unsupported/uncategorized URLs collected during extraction. * These are URLs that couldn't be mapped to a specific link field. diff --git a/packages/telegram-bot/db/ALL.json b/packages/telegram-bot/db/ALL.json index bec1c1cc02..9d15f619bb 100644 --- a/packages/telegram-bot/db/ALL.json +++ b/packages/telegram-bot/db/ALL.json @@ -16456,6 +16456,7 @@ "n": "AU10TIX", "fb": "Au10tix", "android_dev_id": "com.au10tix", + "android_curated_app_ids": ["com.au10tix"], "gh": "au10tixmobile", "ig": "life_at_au10tix", "li": "au10tix-limited", @@ -20055,9 +20056,7 @@ "isHint": true, "hintText": "Hey, The BBC is biased. Use Newscord for more balanced news.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["bbc.mobile.news.ww"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_BBC_0", @@ -25619,6 +25618,7 @@ "n": "Bluesky", "fb": "blueskysocialweb", "android_dev_id": "xyz.blueskyweb", + "android_curated_app_ids": ["xyz.blueskyweb.app"], "gh": "bluesky-social", "li": "bluesky-pbllc", "tw": "bluesky", @@ -40945,7 +40945,6 @@ "r": ["h"], "n": "CoolAutomation", "fb": "coolautomation", - "android_dev_id": "CoolAutomation", "li": "1456190", "tw": "cool_automation", "ytp": "coolautomation", @@ -54567,7 +54566,6 @@ "r": ["h"], "n": "Earnix", "fb": "earnix", - "android_dev_id": "mobile.app1hh7BC4Jb6", "gh": "Earnix", "ig": "earnix_inc", "li": "earnix", @@ -85677,7 +85675,6 @@ "r": ["h"], "n": "IFeel Labs", "fb": "ifeel.labs", - "android_dev_id": "iFeel+Labs", "li": "ifeel-labs", "ws": "ifeellabs.com" }, @@ -95394,7 +95391,6 @@ "r": ["h"], "n": "Joyvoo", "fb": "joyvoo", - "android_dev_id": "Joyvoo+LTD", "li": "joyvoo", "ws": "joyvoo.com" }, @@ -114021,8 +114017,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_1", @@ -114032,8 +114027,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_2", @@ -114043,8 +114037,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_fb_Microsoft_3", @@ -114054,8 +114047,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_0", @@ -114065,8 +114057,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_1", @@ -114076,8 +114067,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_2", @@ -114087,8 +114077,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_3", @@ -114098,8 +114087,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_4", @@ -114109,8 +114097,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_5", @@ -114120,8 +114107,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_6", @@ -114131,8 +114117,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_7", @@ -114142,8 +114127,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_8", @@ -114153,8 +114137,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_9", @@ -114164,8 +114147,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_10", @@ -114175,8 +114157,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_11", @@ -114186,8 +114167,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_12", @@ -114197,8 +114177,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_13", @@ -114208,8 +114187,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_gh_Microsoft_14", @@ -114219,8 +114197,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_0", @@ -114230,8 +114207,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_1", @@ -114241,8 +114217,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_2", @@ -114252,8 +114227,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_3", @@ -114263,8 +114237,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_4", @@ -114274,8 +114247,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_5", @@ -114285,8 +114257,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_6", @@ -114296,8 +114267,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_7", @@ -114307,8 +114277,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_8", @@ -114318,8 +114287,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_9", @@ -114329,8 +114297,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_10", @@ -114340,8 +114307,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_11", @@ -114351,8 +114317,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_12", @@ -114362,8 +114327,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_13", @@ -114373,8 +114337,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_tt_Microsoft_14", @@ -114384,8 +114347,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_0", @@ -114395,8 +114357,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_1", @@ -114406,8 +114367,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_2", @@ -114417,8 +114377,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_3", @@ -114428,8 +114387,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_4", @@ -114439,8 +114397,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_5", @@ -114450,8 +114407,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_6", @@ -114461,8 +114417,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_7", @@ -114472,8 +114427,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_8", @@ -114483,8 +114437,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_9", @@ -114494,8 +114447,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_10", @@ -114505,8 +114457,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_11", @@ -114516,8 +114467,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_12", @@ -114527,8 +114477,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_13", @@ -114538,8 +114487,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_14", @@ -114549,8 +114497,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_15", @@ -114560,8 +114507,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_16", @@ -114571,8 +114517,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_17", @@ -114582,8 +114527,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_18", @@ -114593,8 +114537,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_19", @@ -114604,8 +114547,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_20", @@ -114615,8 +114557,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_21", @@ -114626,8 +114567,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_22", @@ -114637,8 +114577,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_23", @@ -114648,8 +114587,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_24", @@ -114659,8 +114597,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_25", @@ -114670,8 +114607,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_26", @@ -114681,8 +114617,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_27", @@ -114692,8 +114627,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ytp_Microsoft_28", @@ -114703,8 +114637,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_7", @@ -114714,8 +114647,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_5", @@ -114725,8 +114657,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_3", @@ -114736,8 +114667,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_0", @@ -114748,7 +114678,31 @@ "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "android_dev_id": "com.microsoft", + "android_curated_app_ids": [ + "com.microsoft.office.outlook", + "com.microsoft.teams", + "com.microsoft.teams2", + "com.microsoft.office.officehubrow", + "com.microsoft.office.word", + "com.microsoft.office.excel", + "com.microsoft.office.powerpoint", + "com.microsoft.office.onenote", + "com.microsoft.office.lens", + "com.microsoft.skydrive", + "com.microsoft.todos", + "com.microsoft.emmx", + "com.microsoft.bing", + "com.microsoft.copilot", + "com.microsoft.bingaichat", + "com.microsoft.azure.authenticator", + "com.microsoft.windowsintune.companyportal", + "com.microsoft.xboxone.smartglass", + "com.microsoft.appmanager", + "com.microsoft.launcher", + "com.microsoft.notes", + "com.microsoft.swiftkey" + ] }, { "id": "hint_ws_Microsoft_6", @@ -114758,8 +114712,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_1", @@ -114769,8 +114722,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_9", @@ -114780,8 +114732,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_2", @@ -114791,8 +114742,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_10", @@ -114802,8 +114752,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_12", @@ -114813,8 +114762,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_8", @@ -114824,8 +114772,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_11", @@ -114835,8 +114782,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "hint_ws_Microsoft_4", @@ -114846,8 +114792,7 @@ "isHint": true, "hintText": "Microsoft is a BDS consumer boycott priority - directly complicit in Israeli apartheid.", "hintUrl": "https://bdsmovement.net/microsoft", - "hintCompanyId": "microsoft_bds_prio", - "android_dev_id": "com.microsoft" + "hintCompanyId": "microsoft_bds_prio" }, { "id": "microsoft-israel-r-d", @@ -118251,6 +118196,7 @@ "n": "MoonPay", "fb": "officialmoonpay", "android_dev_id": "com.moonpay", + "android_curated_app_ids": ["com.moonpay.android"], "ig": "moonpay", "li": "moonpay", "th": "@moonpay", @@ -123134,7 +123080,6 @@ "r": ["f"], "n": "Neuro Hero", "fb": "neuroheroofficial", - "android_dev_id": "Neuro Hero Ltd", "li": "5326993", "tw": "neurohero", "ytp": "neuroheroofficial", @@ -128063,6 +128008,7 @@ "fb": "omadahealth", "s": "OMDA", "android_dev_id": "com.healthcoda", + "android_curated_app_ids": ["com.healthcoda.app"], "ig": "omadahealth", "li": "omada-health", "tw": "omadahealth", @@ -158529,6 +158475,7 @@ "fb": "SentinelOne", "s": "S", "android_dev_id": "com.sentinelone", + "android_curated_app_ids": ["com.sentinelone.mobile.android"], "gh": "Sentinel-One", "li": "sentinelone-dach", "tw": "SentinelOne", @@ -162134,6 +162081,7 @@ "n": "Silverfort", "fb": "silverfort", "android_dev_id": "com.silverfort", + "android_curated_app_ids": ["com.silverfort.mobile"], "gh": "silverfort-open-source", "ig": "life_at_silverfort", "li": "silverfort", @@ -163434,9 +163382,7 @@ "isHint": true, "hintText": "Hey, Sky News is biased. Use Newscord to get the full picture.", "hintUrl": "https://newscord.org/?referral=the-wall&url={{url}}", - "hintCompanyId": "newscord_media_bias", - "hint_android_id": "com.newscord.newscord", - "android_app_ids": ["com.bskyb.skynews.android"] + "hintCompanyId": "newscord_media_bias" }, { "id": "hint_ws_Sky News_0", @@ -171496,7 +171442,6 @@ "r": ["h"], "n": "Strix Drones", "fb": "strixdrones", - "android_dev_id": "Strix+Drones", "ig": "strixdrones", "li": "strix-drones", "tw": "strixdrones", @@ -188785,16 +188730,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_0", @@ -188823,16 +188759,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "hint_ws_Upscrolled_1", @@ -188842,16 +188769,7 @@ "isHint": true, "hintText": "Tired of shadowbanning? Upscrolled is Palestinian-founded, with chronological feeds and transparent algorithms.", "hintUrl": "https://upscrolled.com/?ref=thewall", - "hintCompanyId": "upscrolled_social", - "hint_android_id": "com.upscrolled.app", - "android_app_ids": [ - "com.facebook.katana", - "com.facebook.lite", - "com.instagram.android", - "com.instagram.barcelona", - "com.zhiliaoapp.musically", - "com.ss.android.ugc.tiktok.pro" - ] + "hintCompanyId": "upscrolled_social" }, { "id": "upsellon-trade-tech-ml-ltd", @@ -198008,6 +197926,7 @@ "fb": "wix", "s": "WIX", "android_dev_id": "com.wix", + "android_curated_app_ids": ["com.wix.admin", "com.wix.android", "com.wix.restaurants", "com.wix.spaces"], "gh": "wix", "ig": "wix", "li": "wix-com",