#include "policy.h"
#include <dpm/restriction.h>
+#include <unistd.h>
+
+#define MAX_CNT 600
+
+static void devicePolicyHandleCallback(const char* name, const char* state, void* user_data)
+{
+ ::dlog_print(DLOG_DEBUG, LOG_TAG, "devicePolicyHandleCallback, state %s", state);
+ int* changedState = (int*)user_data;
+ if (::strcmp(state, "allowed") == 0)
+ *changedState = 1;
+ else if (::strcmp(state, "disallowed") == 0)
+ *changedState = 0;
+}
class RestrictionPolicy : public AbstractPolicy {
public:
int setCameraStatus(Workbench *workbench, std::string& desc)
{
- int state, allow = 0;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_camera_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ // Add call back function
+ if (::dpm_add_policy_changed_cb(handle, "camera", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_camera_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_camera_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ //restore policy
+ if (::dpm_restriction_set_camera_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
int getCameraStatus(Workbench *workbench, std::string& desc)
{
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
int setMicrophoneState(Workbench *workbench, std::string& desc)
{
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_microphone_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "microphone", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_microphone_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_microphone_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handley");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_microphone_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getMicrophoneState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setLocationState(Workbench *workbench, std::string& desc) {
- int state;
- int allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_location_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "location", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_location_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_location_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_location_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getLocationState(Workbench *workbench, std::string& desc) {
- int state, ret;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
return POLICY_RESULT_FAIL;
}
- ret = ::dpm_restriction_get_location_state(handle, &state);
- if (ret == 0) {
+ if (::dpm_restriction_get_location_state(handle, &state) == 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
return POLICY_RESULT_SUCCESS;
}
int setClipboardState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_clipboard_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "clipboard", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_clipboard_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_clipboard_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_clipboard_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getClipboardState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setUsbDebuggingState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1) {
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_usb_debugging_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "usb-debugging", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_usb_debugging_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Fail to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_usb_debugging_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Fail to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_usb_debugging_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Fail to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getUsbDebuggingState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setWifiState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_wifi_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "wifi", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_wifi_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_wifi_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_wifi_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getWifiState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setWifiHotspotState(Workbench *workbench, std::string& desc) {
- int state;
- int allow;
+ int state = -1, allow = 0;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
}
if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
}
::dpm_manager_destroy(handle);
}
int getWifiHotspotState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setBluetoothTetheringState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
}
int getBluetoothTetheringState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setUsbTetheringState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_usb_tethering_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "usb-tethering", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_usb_tethering_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_usb_tethering_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_usb_tethering_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to enforce policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getUsbTetheringState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setExternalStorageState(Workbench *workbench, std::string& desc) {
- int index, state;
+ int index = 0, state = -1;
device_policy_manager_h handle = NULL;
const std::string text[] = {
"Disallow External Storage",
if (state != index) {
::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, "Policy was not setted properly");;
+ workbench->showMessagePopup(desc, "Policy was not setted properly");
return POLICY_RESULT_FAIL;
}
}
int getExternalStorageState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setBluetoothModeChangeState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
}
int getBluetoothModeChangeState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setBluetoothDesktopConnectivityState(Workbench *workbench, std::string& desc) {
- int state, allow = 0;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
- if (::dpm_restriction_set_camera_state(handle, allow) != 0) {
+ ::dpm_restriction_get_bluetooth_desktop_connectivity_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "bluetooth-desktop-connectivity", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
+ if (::dpm_restriction_set_bluetooth_desktop_connectivity_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
- if (::dpm_restriction_get_camera_state(handle, &state) != 0) {
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
+ if (::dpm_restriction_get_bluetooth_desktop_connectivity_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_bluetooth_desktop_connectivity_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getBluetoothDesktopConnectivityState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setBluetoothPairingState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_bluetooth_pairing_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "bluetooth-pairing", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_bluetooth_pairing_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_bluetooth_pairing_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_bluetooth_pairing_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getBluetoothPairingState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setPopimapEmailState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_popimap_email_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "popimap-email", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_popimap_email_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_popimap_email_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_popimap_email_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getPopimapEmailState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setMessagingState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1) {
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_messaging_state(handle, "sim1", &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "messaging", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_messaging_state(handle, "sim1", allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_messaging_state(handle, "sim1", &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_messaging_state(handle, "sim1", originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to resotre policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getMessagingState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();
}
int setBrowserState(Workbench *workbench, std::string& desc) {
- int state, allow;
+ int state = -1, allow = 0;
+ int originState = -1, changedState = -1;
+ int cnt = 0, id = 0;
+ bool callbackFlag = false;
device_policy_manager_h handle = NULL;
if (workbench->showRadioPopup(desc, STATE_CHANGE_OPTIONS, allow) == -1)
return POLICY_RESULT_FAIL;
}
+ ::dpm_restriction_get_browser_state(handle, &originState);
+ if (originState != allow)
+ callbackFlag = true;
+
+ if (callbackFlag) {
+ if (::dpm_add_policy_changed_cb(handle, "browser", devicePolicyHandleCallback, &changedState, &id) != DPM_ERROR_NONE) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to add callback");
+ return POLICY_RESULT_FAIL;
+ }
+ }
+
if (::dpm_restriction_set_browser_state(handle, allow) != 0) {
+ if (callbackFlag)
+ ::dpm_remove_policy_changed_cb(handle, id);
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to enforce policy");
return POLICY_RESULT_FAIL;
}
+ if (callbackFlag) {
+ while(1) {
+ if (changedState >= 0 || cnt == MAX_CNT)
+ break;
+ ::sleep(0.1);
+ cnt++;
+ }
+ }
+
+ ::dpm_remove_policy_changed_cb(handle, id);
if (::dpm_restriction_get_browser_state(handle, &state) != 0) {
::dpm_manager_destroy(handle);
workbench->showMessagePopup(desc, "Failed to query handle");
return POLICY_RESULT_FAIL;
}
- if (state == allow) {
- ::dpm_manager_destroy(handle);
- workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
- return POLICY_RESULT_SUCCESS;
+ if (callbackFlag) {
+ if (state == changedState) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
+ if (::dpm_restriction_set_browser_state(handle, originState) != 0) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, "Failed to restore policy");
+ return POLICY_RESULT_FAIL;
+ }
+ } else {
+ if (state == allow) {
+ ::dpm_manager_destroy(handle);
+ workbench->showMessagePopup(desc, STATE_CHANGE_MESSAGE(state));
+ return POLICY_RESULT_SUCCESS;
+ }
}
::dpm_manager_destroy(handle);
}
int getBrowserState(Workbench *workbench, std::string& desc) {
- int state;
+ int state = -1;
device_policy_manager_h handle = NULL;
handle = ::dpm_manager_create();