Commit dbd96380 authored by Jeevan Shikaram's avatar Jeevan Shikaram Committed by Commit Bot

[App Management] Add contacts and storage permissions for ARC Apps.

This CL introduces support for contacts and storage permissions to be
managed in App Management

Bug: 976168
Change-Id: I384f8fe952f182edd78a52fc651da772166d090a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1673407Reviewed-by: default avatarcalamity <calamity@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Jeevan Shikaram <jshikaram@chromium.org>
Cr-Commit-Position: refs/heads/master@{#673238}
parent 881a822c
...@@ -79,4 +79,10 @@ ...@@ -79,4 +79,10 @@
<message name="IDS_APP_MANAGEMENT_PIN_ENFORCED_BY_POLICY" desc="Short text for the pin/unpin context menu to tell user the setting is enforced by policy of an app."> <message name="IDS_APP_MANAGEMENT_PIN_ENFORCED_BY_POLICY" desc="Short text for the pin/unpin context menu to tell user the setting is enforced by policy of an app.">
Pinned by administrator Pinned by administrator
</message> </message>
<message name="IDS_APP_MANAGEMENT_CONTACTS" desc="Label for the Android contacts (address book) permission toggle.">
Contacts
</message>
<message name="IDS_APP_MANAGEMENT_STORAGE" desc="Label for the Android storage permission toggle.">
Storage
</message>
</grit-part> </grit-part>
...@@ -216,11 +216,12 @@ ...@@ -216,11 +216,12 @@
<include name="IDR_APP_MANAGEMENT_CHROME_APP_PERMISSION_VIEW_JS" file="resources\app_management\chrome_app_permission_view.js" type="BINDATA"/> <include name="IDR_APP_MANAGEMENT_CHROME_APP_PERMISSION_VIEW_JS" file="resources\app_management\chrome_app_permission_view.js" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_CONSTANTS_HTML" file="resources\app_management\constants.html" type="BINDATA"/> <include name="IDR_APP_MANAGEMENT_CONSTANTS_HTML" file="resources\app_management\constants.html" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_CONSTANTS_JS" file="resources\app_management\constants.js" type="BINDATA"/> <include name="IDR_APP_MANAGEMENT_CONSTANTS_JS" file="resources\app_management\constants.js" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_HTML" file="resources\app_management\expandable_app_list.html" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_JS" file="resources\app_management\expandable_app_list.js" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_DOM_SWITCH_HTML" file="resources\app_management\dom_switch.html" type="BINDATA"/> <include name="IDR_APP_MANAGEMENT_DOM_SWITCH_HTML" file="resources\app_management\dom_switch.html" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_DOM_SWITCH_JS" file="resources\app_management\dom_switch.js" type="BINDATA"/> <include name="IDR_APP_MANAGEMENT_DOM_SWITCH_JS" file="resources\app_management\dom_switch.js" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_HTML" file="resources\app_management\expandable_app_list.html" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_JS" file="resources\app_management\expandable_app_list.js" type="BINDATA"/>
<include name="IDR_APP_MANAGEMENT_FAKE_PAGE_HANDLER_JS" file="resources\app_management\fake_page_handler.js" type="BINDATA" /> <include name="IDR_APP_MANAGEMENT_FAKE_PAGE_HANDLER_JS" file="resources\app_management\fake_page_handler.js" type="BINDATA" />
<include name="IDR_APP_MANAGEMENT_ICONS_HTML" file="resources\app_management\icons.html" type="BINDATA" />
<include name="IDR_APP_MANAGEMENT_INDEX_HTML" file="resources\app_management\index.html" type="BINDATA" /> <include name="IDR_APP_MANAGEMENT_INDEX_HTML" file="resources\app_management\index.html" type="BINDATA" />
<include name="IDR_APP_MANAGEMENT_MAIN_VIEW_HTML" file="resources\app_management\main_view.html" type="BINDATA" /> <include name="IDR_APP_MANAGEMENT_MAIN_VIEW_HTML" file="resources\app_management\main_view.html" type="BINDATA" />
<include name="IDR_APP_MANAGEMENT_MAIN_VIEW_JS" file="resources\app_management\main_view.js" type="BINDATA" /> <include name="IDR_APP_MANAGEMENT_MAIN_VIEW_JS" file="resources\app_management\main_view.js" type="BINDATA" />
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="browser_proxy.html"> <link rel="import" href="browser_proxy.html">
<link rel="import" href="icons.html">
<link rel="import" href="metadata_view.html"> <link rel="import" href="metadata_view.html">
<link rel="import" href="permission_item.html"> <link rel="import" href="permission_item.html">
<link rel="import" href="permission_view_header.html"> <link rel="import" href="permission_view_header.html">
...@@ -40,6 +41,14 @@ ...@@ -40,6 +41,14 @@
icon="cr:mic" permission-label="$i18n{microphone}" icon="cr:mic" permission-label="$i18n{microphone}"
permission-type="MICROPHONE"> permission-type="MICROPHONE">
</app-management-permission-item> </app-management-permission-item>
<app-management-permission-item class="subpermission-row"
icon="app-management:contacts"
permission-label="$i18n{contacts}" permission-type="CONTACTS">
</app-management-permission-item>
<app-management-permission-item class="subpermission-row"
icon="app-management:storage"
permission-label="$i18n{storage}" permission-type="STORAGE">
</app-management-permission-item>
<div class="subpermission-row separated-row clickable" <div class="subpermission-row separated-row clickable"
on-click="onClickNativeSettingsButton_"> on-click="onClickNativeSettingsButton_">
<div class="header-text">$i18n{morePermissions}</div> <div class="header-text">$i18n{morePermissions}</div>
......
...@@ -48,6 +48,8 @@ cr.define('app_management', function() { ...@@ -48,6 +48,8 @@ cr.define('app_management', function() {
ArcPermissionType.LOCATION, ArcPermissionType.LOCATION,
ArcPermissionType.MICROPHONE, ArcPermissionType.MICROPHONE,
ArcPermissionType.NOTIFICATIONS, ArcPermissionType.NOTIFICATIONS,
ArcPermissionType.CONTACTS,
ArcPermissionType.STORAGE,
]; ];
const permissions = {}; const permissions = {};
......
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-iconset-svg/iron-iconset-svg.html">
<iron-iconset-svg name="app-management" size="24">
<svg>
<!--
These icons are copied from material.io and kept in sorted order.
See http://goo.gl/Y1OdAq for instructions on adding additional icons.
-->
<defs>
<!-- From https://material.io/tools/icons/?icon=account_box&style=baseline -->
<g id="contacts"><path d="M19 3H5c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V5a2 2 0 0 0-2-2zm-7 3c1.65 0 3 1.35 3 3 0 1.66-1.35 3-3 3s-3-1.34-3-3c0-1.65 1.35-3 3-3zm6 12H6v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1z"></path><path fill="none" d="M0 0h24v24H0z"></path></g>
<!-- From https://material.io/tools/icons/?icon=storage&style=baseline -->
<g id="storage"><path d="M2 20h20v-4H2v4zm2-3h2v2H4v-2zM2 4v4h20V4H2zm4 3H4V5h2v2zm-4 7h20v-4H2v4zm2-3h2v2H4v-2z"></path></g>
</defs>
</svg>
</iron-iconset-svg>
...@@ -68,6 +68,8 @@ enum ArcPermissionType { ...@@ -68,6 +68,8 @@ enum ArcPermissionType {
LOCATION = 1, LOCATION = 1,
MICROPHONE = 2, MICROPHONE = 2,
NOTIFICATIONS = 3, NOTIFICATIONS = 3,
CONTACTS = 4,
STORAGE = 5,
}; };
// This enum takes the important permission values from the // This enum takes the important permission values from the
......
...@@ -34,6 +34,7 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { ...@@ -34,6 +34,7 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) {
{"appNoPermission", IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT}, {"appNoPermission", IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT},
{"back", IDS_APP_MANAGEMENT_BACK}, {"back", IDS_APP_MANAGEMENT_BACK},
{"camera", IDS_APP_MANAGEMENT_CAMERA}, {"camera", IDS_APP_MANAGEMENT_CAMERA},
{"contacts", IDS_APP_MANAGEMENT_CONTACTS},
{"controlledByPolicy", IDS_CONTROLLED_SETTING_POLICY}, {"controlledByPolicy", IDS_CONTROLLED_SETTING_POLICY},
{"lessApps", IDS_APP_MANAGEMENT_LESS_APPS}, {"lessApps", IDS_APP_MANAGEMENT_LESS_APPS},
{"location", IDS_APP_MANAGEMENT_LOCATION}, {"location", IDS_APP_MANAGEMENT_LOCATION},
...@@ -51,6 +52,7 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { ...@@ -51,6 +52,7 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) {
{"pinToShelf", IDS_APP_MANAGEMENT_PIN_TO_SHELF}, {"pinToShelf", IDS_APP_MANAGEMENT_PIN_TO_SHELF},
{"searchPrompt", IDS_APP_MANAGEMENT_SEARCH_PROMPT}, {"searchPrompt", IDS_APP_MANAGEMENT_SEARCH_PROMPT},
{"size", IDS_APP_MANAGEMENT_SIZE}, {"size", IDS_APP_MANAGEMENT_SIZE},
{"storage", IDS_APP_MANAGEMENT_STORAGE},
{"thisAppCan", IDS_APP_MANAGEMENT_THIS_APP_CAN}, {"thisAppCan", IDS_APP_MANAGEMENT_THIS_APP_CAN},
{"title", IDS_APP_MANAGEMENT_TITLE}, {"title", IDS_APP_MANAGEMENT_TITLE},
{"uninstall", IDS_APP_MANAGEMENT_UNINSTALL}, {"uninstall", IDS_APP_MANAGEMENT_UNINSTALL},
...@@ -58,31 +60,24 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { ...@@ -58,31 +60,24 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) {
}; };
AddLocalizedStringsBulk(source, kStrings, base::size(kStrings)); AddLocalizedStringsBulk(source, kStrings, base::size(kStrings));
source->AddResourcePath("app_management.mojom-lite.js",
IDR_APP_MANAGEMENT_MOJO_LITE_JS);
source->AddResourcePath("types.mojom-lite.js",
IDR_APP_MANAGEMENT_TYPES_MOJO_LITE_JS);
source->AddResourcePath("bitmap.mojom-lite.js",
IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS);
source->AddResourcePath("image.mojom-lite.js",
IDR_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS);
source->AddResourcePath("image_info.mojom-lite.js",
IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS);
source->AddResourcePath("actions.html", IDR_APP_MANAGEMENT_ACTIONS_HTML); source->AddResourcePath("actions.html", IDR_APP_MANAGEMENT_ACTIONS_HTML);
source->AddResourcePath("actions.js", IDR_APP_MANAGEMENT_ACTIONS_JS); source->AddResourcePath("actions.js", IDR_APP_MANAGEMENT_ACTIONS_JS);
source->AddResourcePath("api_listener.html", source->AddResourcePath("api_listener.html",
IDR_APP_MANAGEMENT_API_LISTENER_HTML); IDR_APP_MANAGEMENT_API_LISTENER_HTML);
source->AddResourcePath("api_listener.js", source->AddResourcePath("api_listener.js",
IDR_APP_MANAGEMENT_API_LISTENER_JS); IDR_APP_MANAGEMENT_API_LISTENER_JS);
source->AddResourcePath("app.html", IDR_APP_MANAGEMENT_APP_HTML);
source->AddResourcePath("app.js", IDR_APP_MANAGEMENT_APP_JS);
source->AddResourcePath("app_item.html", IDR_APP_MANAGEMENT_APP_ITEM_HTML); source->AddResourcePath("app_item.html", IDR_APP_MANAGEMENT_APP_ITEM_HTML);
source->AddResourcePath("app_item.js", IDR_APP_MANAGEMENT_APP_ITEM_JS); source->AddResourcePath("app_item.js", IDR_APP_MANAGEMENT_APP_ITEM_JS);
source->AddResourcePath("app_management.mojom-lite.js",
IDR_APP_MANAGEMENT_MOJO_LITE_JS);
source->AddResourcePath("app.html", IDR_APP_MANAGEMENT_APP_HTML);
source->AddResourcePath("app.js", IDR_APP_MANAGEMENT_APP_JS);
source->AddResourcePath("arc_permission_view.html", source->AddResourcePath("arc_permission_view.html",
IDR_APP_MANAGEMENT_ARC_PERMISSION_VIEW_HTML); IDR_APP_MANAGEMENT_ARC_PERMISSION_VIEW_HTML);
source->AddResourcePath("arc_permission_view.js", source->AddResourcePath("arc_permission_view.js",
IDR_APP_MANAGEMENT_ARC_PERMISSION_VIEW_JS); IDR_APP_MANAGEMENT_ARC_PERMISSION_VIEW_JS);
source->AddResourcePath("bitmap.mojom-lite.js",
IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS);
source->AddResourcePath("browser_proxy.html", source->AddResourcePath("browser_proxy.html",
IDR_APP_MANAGEMENT_BROWSER_PROXY_HTML); IDR_APP_MANAGEMENT_BROWSER_PROXY_HTML);
source->AddResourcePath("browser_proxy.js", source->AddResourcePath("browser_proxy.js",
...@@ -93,29 +88,30 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { ...@@ -93,29 +88,30 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) {
IDR_APP_MANAGEMENT_CHROME_APP_PERMISSION_VIEW_JS); IDR_APP_MANAGEMENT_CHROME_APP_PERMISSION_VIEW_JS);
source->AddResourcePath("constants.html", IDR_APP_MANAGEMENT_CONSTANTS_HTML); source->AddResourcePath("constants.html", IDR_APP_MANAGEMENT_CONSTANTS_HTML);
source->AddResourcePath("constants.js", IDR_APP_MANAGEMENT_CONSTANTS_JS); source->AddResourcePath("constants.js", IDR_APP_MANAGEMENT_CONSTANTS_JS);
source->AddResourcePath("dom_switch.html",
IDR_APP_MANAGEMENT_DOM_SWITCH_HTML);
source->AddResourcePath("dom_switch.js", IDR_APP_MANAGEMENT_DOM_SWITCH_JS);
source->AddResourcePath("expandable_app_list.html", source->AddResourcePath("expandable_app_list.html",
IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_HTML); IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_HTML);
source->AddResourcePath("expandable_app_list.js", source->AddResourcePath("expandable_app_list.js",
IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_JS); IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_JS);
source->AddResourcePath("dom_switch.html",
IDR_APP_MANAGEMENT_DOM_SWITCH_HTML);
source->AddResourcePath("dom_switch.js", IDR_APP_MANAGEMENT_DOM_SWITCH_JS);
source->AddResourcePath("fake_page_handler.js", source->AddResourcePath("fake_page_handler.js",
IDR_APP_MANAGEMENT_FAKE_PAGE_HANDLER_JS); IDR_APP_MANAGEMENT_FAKE_PAGE_HANDLER_JS);
source->AddResourcePath("icons.html", IDR_APP_MANAGEMENT_ICONS_HTML);
source->AddResourcePath("image_info.mojom-lite.js",
IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS);
source->AddResourcePath("image.mojom-lite.js",
IDR_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS);
source->AddResourcePath("main_view.html", IDR_APP_MANAGEMENT_MAIN_VIEW_HTML); source->AddResourcePath("main_view.html", IDR_APP_MANAGEMENT_MAIN_VIEW_HTML);
source->AddResourcePath("main_view.js", IDR_APP_MANAGEMENT_MAIN_VIEW_JS); source->AddResourcePath("main_view.js", IDR_APP_MANAGEMENT_MAIN_VIEW_JS);
source->AddResourcePath("notifications_view.html",
IDR_APP_MANAGEMENT_NOTIFICATIONS_VIEW_HTML);
source->AddResourcePath("notifications_view.js",
IDR_APP_MANAGEMENT_NOTIFICATIONS_VIEW_JS);
source->AddResourcePath("permission_view_header.html",
IDR_APP_MANAGEMENT_PERMISSION_VIEW_HEADER_HTML);
source->AddResourcePath("permission_view_header.js",
IDR_APP_MANAGEMENT_PERMISSION_VIEW_HEADER_JS);
source->AddResourcePath("metadata_view.html", source->AddResourcePath("metadata_view.html",
IDR_APP_MANAGEMENT_METADATA_VIEW_HTML); IDR_APP_MANAGEMENT_METADATA_VIEW_HTML);
source->AddResourcePath("metadata_view.js", source->AddResourcePath("metadata_view.js",
IDR_APP_MANAGEMENT_METADATA_VIEW_JS); IDR_APP_MANAGEMENT_METADATA_VIEW_JS);
source->AddResourcePath("notifications_view.html",
IDR_APP_MANAGEMENT_NOTIFICATIONS_VIEW_HTML);
source->AddResourcePath("notifications_view.js",
IDR_APP_MANAGEMENT_NOTIFICATIONS_VIEW_JS);
source->AddResourcePath("permission_item.html", source->AddResourcePath("permission_item.html",
IDR_APP_MANAGEMENT_PERMISSION_ITEM_HTML); IDR_APP_MANAGEMENT_PERMISSION_ITEM_HTML);
source->AddResourcePath("permission_item.js", source->AddResourcePath("permission_item.js",
...@@ -124,6 +120,10 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { ...@@ -124,6 +120,10 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) {
IDR_APP_MANAGEMENT_PERMISSION_TOGGLE_HTML); IDR_APP_MANAGEMENT_PERMISSION_TOGGLE_HTML);
source->AddResourcePath("permission_toggle.js", source->AddResourcePath("permission_toggle.js",
IDR_APP_MANAGEMENT_PERMISSION_TOGGLE_JS); IDR_APP_MANAGEMENT_PERMISSION_TOGGLE_JS);
source->AddResourcePath("permission_view_header.html",
IDR_APP_MANAGEMENT_PERMISSION_VIEW_HEADER_HTML);
source->AddResourcePath("permission_view_header.js",
IDR_APP_MANAGEMENT_PERMISSION_VIEW_HEADER_JS);
source->AddResourcePath("pwa_permission_view.html", source->AddResourcePath("pwa_permission_view.html",
IDR_APP_MANAGEMENT_PWA_PERMISSION_VIEW_HTML); IDR_APP_MANAGEMENT_PWA_PERMISSION_VIEW_HTML);
source->AddResourcePath("pwa_permission_view.js", source->AddResourcePath("pwa_permission_view.js",
...@@ -139,13 +139,15 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { ...@@ -139,13 +139,15 @@ content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) {
IDR_APP_MANAGEMENT_SHARED_STYLE_HTML); IDR_APP_MANAGEMENT_SHARED_STYLE_HTML);
source->AddResourcePath("shared_vars.html", source->AddResourcePath("shared_vars.html",
IDR_APP_MANAGEMENT_SHARED_VARS_HTML); IDR_APP_MANAGEMENT_SHARED_VARS_HTML);
source->AddResourcePath("store.html", IDR_APP_MANAGEMENT_STORE_HTML);
source->AddResourcePath("store.js", IDR_APP_MANAGEMENT_STORE_JS);
source->AddResourcePath("store_client.html", source->AddResourcePath("store_client.html",
IDR_APP_MANAGEMENT_STORE_CLIENT_HTML); IDR_APP_MANAGEMENT_STORE_CLIENT_HTML);
source->AddResourcePath("store_client.js", source->AddResourcePath("store_client.js",
IDR_APP_MANAGEMENT_STORE_CLIENT_JS); IDR_APP_MANAGEMENT_STORE_CLIENT_JS);
source->AddResourcePath("store.html", IDR_APP_MANAGEMENT_STORE_HTML);
source->AddResourcePath("store.js", IDR_APP_MANAGEMENT_STORE_JS);
source->AddResourcePath("types.js", IDR_APP_MANAGEMENT_TYPES_JS); source->AddResourcePath("types.js", IDR_APP_MANAGEMENT_TYPES_JS);
source->AddResourcePath("types.mojom-lite.js",
IDR_APP_MANAGEMENT_TYPES_MOJO_LITE_JS);
source->AddResourcePath("util.html", IDR_APP_MANAGEMENT_UTIL_HTML); source->AddResourcePath("util.html", IDR_APP_MANAGEMENT_UTIL_HTML);
source->AddResourcePath("util.js", IDR_APP_MANAGEMENT_UTIL_JS); source->AddResourcePath("util.js", IDR_APP_MANAGEMENT_UTIL_JS);
......
...@@ -38,6 +38,8 @@ suite('<app-management-arc-permission-view>', () => { ...@@ -38,6 +38,8 @@ suite('<app-management-arc-permission-view>', () => {
ArcPermissionType.CAMERA, ArcPermissionType.CAMERA,
ArcPermissionType.LOCATION, ArcPermissionType.LOCATION,
ArcPermissionType.NOTIFICATIONS, ArcPermissionType.NOTIFICATIONS,
ArcPermissionType.CONTACTS,
ArcPermissionType.STORAGE,
]) ])
}; };
...@@ -115,5 +117,7 @@ suite('<app-management-arc-permission-view>', () => { ...@@ -115,5 +117,7 @@ suite('<app-management-arc-permission-view>', () => {
await checkPermissionItemOnClick('LOCATION'); await checkPermissionItemOnClick('LOCATION');
await checkPermissionItemOnClick('CAMERA'); await checkPermissionItemOnClick('CAMERA');
await checkPermissionItemOnClick('NOTIFICATIONS'); await checkPermissionItemOnClick('NOTIFICATIONS');
await checkPermissionItemOnClick('CONTACTS');
await checkPermissionItemOnClick('STORAGE');
}); });
}); });
...@@ -11,9 +11,11 @@ module arc.mojom; ...@@ -11,9 +11,11 @@ module arc.mojom;
[Extensible] [Extensible]
enum AppPermission { enum AppPermission {
CAMERA = 0, // android.manifest.CAMERA CAMERA = 0, // android.manifest.CAMERA
LOCATION = 1, // android.manifest.ACCESS_FINE_LOCATION LOCATION = 1, // android.manifest.ACCESS_FINE_LOCATION or android.manifest.ACCESS_COARSE_LOCATION
MICROPHONE = 2, // android.manifest.RECORD_AUDIO MICROPHONE = 2, // android.manifest.RECORD_AUDIO
NOTIFICATIONS = 3, // Not a manifest permission NOTIFICATIONS = 3, // Not a manifest permission
CONTACTS = 4, // android.manifest.READ_CONTACTS and android.manifest.WRITE_CONTACTS
STORAGE = 5, // android.manifest.WRITE_EXTERNAL_STORAGE and android.manifest.READ_EXTERNAL_STORAGE
}; };
struct PermissionState { struct PermissionState {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment