diff --git a/app/build.gradle b/app/build.gradle index ff5104e268..87a067ec2f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -67,7 +67,6 @@ dependencies { testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.21.0' androidTestImplementation 'org.mockito:mockito-android:2.21.0' - // MQTT libraries implementation('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') { exclude module: 'support-v4' @@ -79,24 +78,20 @@ dependencies { implementation 'com.madgag.spongycastle:pkix:1.54.0.0' implementation 'com.google.code.gson:gson:2.8.1' implementation 'com.google.zxing:core:3.3.0' - // Google libraries implementation 'com.android.support:multidex:1.0.3' implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:support-v4:27.1.1' - implementation "android.arch.persistence.room:runtime:1.1.1" - annotationProcessor "android.arch.persistence.room:compiler:1.1.1" - + implementation 'android.arch.persistence.room:runtime:1.1.1' + annotationProcessor 'android.arch.persistence.room:compiler:1.1.1' // Logger implementation 'com.orhanobut:logger:2.1.1' - // Android Inventory Library implementation 'org.flyve:inventory:0.10.0@aar' - // Bug snag implementation 'com.bugsnag:bugsnag-android:4.1.3' - + implementation project(':policies') } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a28b65b4b..672d60e5fa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/assets/about.properties b/app/src/main/assets/about.properties index 11c12778a7..96c273c6d0 100644 --- a/app/src/main/assets/about.properties +++ b/app/src/main/assets/about.properties @@ -1,6 +1,6 @@ -about.version=2.0.0-rc.4 -about.build=2556 -about.date=Wed Sep 26 19:33:47 2018 +about.version=2.0.0-rc.5 +about.build=2986 +about.date=Thu Nov 29 10:54:09 2018 about.commit= about.commitFull= about.github=https://github.com/flyve-mdm/flyve-mdm-android-agent diff --git a/app/src/main/java/org/flyve/mdm/agent/adapter/ApplicationsAdapter.java b/app/src/main/java/org/flyve/mdm/agent/adapter/ApplicationsAdapter.java index 7fff881ceb..671bb961dc 100644 --- a/app/src/main/java/org/flyve/mdm/agent/adapter/ApplicationsAdapter.java +++ b/app/src/main/java/org/flyve/mdm/agent/adapter/ApplicationsAdapter.java @@ -96,7 +96,7 @@ public View getView(int position, View convertView, ViewGroup parent) { try { app = data[position]; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView",ex.getMessage()); return vi; } @@ -114,7 +114,7 @@ public View getView(int position, View convertView, ViewGroup parent) { status = parent.getResources().getString(R.string.app_installed); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView", ex.getMessage()); } } else { status = parent.getResources().getString(R.string.app_not_installed); diff --git a/app/src/main/java/org/flyve/mdm/agent/adapter/ConnectivityAdapter.java b/app/src/main/java/org/flyve/mdm/agent/adapter/ConnectivityAdapter.java index 839c77abc4..86f444cd7c 100644 --- a/app/src/main/java/org/flyve/mdm/agent/adapter/ConnectivityAdapter.java +++ b/app/src/main/java/org/flyve/mdm/agent/adapter/ConnectivityAdapter.java @@ -93,7 +93,7 @@ public View getView(int position, View convertView, ViewGroup parent) { try { hashdata = data.get(position); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView", ex.getMessage()); return vi; } diff --git a/app/src/main/java/org/flyve/mdm/agent/adapter/DrawerAdapter.java b/app/src/main/java/org/flyve/mdm/agent/adapter/DrawerAdapter.java index 7a6eefb6a2..0d467a8d78 100644 --- a/app/src/main/java/org/flyve/mdm/agent/adapter/DrawerAdapter.java +++ b/app/src/main/java/org/flyve/mdm/agent/adapter/DrawerAdapter.java @@ -93,7 +93,7 @@ public View getView(int position, View convertView, ViewGroup parent) { try { hashdata = data.get(position); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView", ex.getMessage()); return vi; } diff --git a/app/src/main/java/org/flyve/mdm/agent/adapter/FilesAdapter.java b/app/src/main/java/org/flyve/mdm/agent/adapter/FilesAdapter.java index feb16a3f23..5fbc2f498c 100644 --- a/app/src/main/java/org/flyve/mdm/agent/adapter/FilesAdapter.java +++ b/app/src/main/java/org/flyve/mdm/agent/adapter/FilesAdapter.java @@ -92,7 +92,7 @@ public View getView(int position, View convertView, ViewGroup parent) { try { file = data[position]; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView", ex.getMessage()); return vi; } diff --git a/app/src/main/java/org/flyve/mdm/agent/adapter/LogAdapter.java b/app/src/main/java/org/flyve/mdm/agent/adapter/LogAdapter.java index 7c1d49dd9f..497667ca14 100644 --- a/app/src/main/java/org/flyve/mdm/agent/adapter/LogAdapter.java +++ b/app/src/main/java/org/flyve/mdm/agent/adapter/LogAdapter.java @@ -45,7 +45,7 @@ public LogAdapter(Activity activity, List> data) { try { inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", LogAdapter", ex.getMessage()); } } @@ -94,7 +94,7 @@ public View getView(int position, View convertView, ViewGroup parent) { try { hashdata = data.get(position); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView", ex.getMessage()); return vi; } diff --git a/app/src/main/java/org/flyve/mdm/agent/adapter/PoliciesAdapter.java b/app/src/main/java/org/flyve/mdm/agent/adapter/PoliciesAdapter.java index 2271dcee16..fe17d19ff0 100644 --- a/app/src/main/java/org/flyve/mdm/agent/adapter/PoliciesAdapter.java +++ b/app/src/main/java/org/flyve/mdm/agent/adapter/PoliciesAdapter.java @@ -92,7 +92,7 @@ public View getView(int position, View convertView, ViewGroup parent) { try { hashdata = data.get(position); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getView", ex.getMessage()); return vi; } diff --git a/app/src/main/java/org/flyve/mdm/agent/core/Routes.java b/app/src/main/java/org/flyve/mdm/agent/core/Routes.java index 26dd17e39d..23a3430add 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/Routes.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/Routes.java @@ -92,8 +92,8 @@ public String pluginFlyvemdmAgent(String agentId) { * @param fileId String file id * @return String url */ - public String pluginFlyvemdmFile(String fileId, String sessionToken) { - return url + "/PluginFlyvemdmFile/" + fileId + "?session_token=" + sessionToken; + public String pluginFlyvemdmFile(String fileId) { + return url + "/PluginFlyvemdmFile/" + fileId; } /** @@ -101,7 +101,7 @@ public String pluginFlyvemdmFile(String fileId, String sessionToken) { * @param fileId String file id * @return String url */ - public String pluginFlyvemdmPackage(String fileId, String sessionToken) { - return url + "/PluginFlyvemdmPackage/" + fileId + "?session_token=" + sessionToken; + public String pluginFlyvemdmPackage(String fileId) { + return url + "/PluginFlyvemdmPackage/" + fileId; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/core/deeplink/DeeplinkModel.java b/app/src/main/java/org/flyve/mdm/agent/core/deeplink/DeeplinkModel.java index bf890190bf..c58da7750a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/deeplink/DeeplinkModel.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/deeplink/DeeplinkModel.java @@ -53,7 +53,7 @@ public void lint(Context context, String deeplink) { deepLinkData = Helpers.base64decode(deeplink); } catch(Exception ex) { presenter.showSnackError( CommonErrorType.DEEPLINK_BASE64DECODE, deepLinkErrorMessage); - FlyveLog.e(deepLinkErrorMessage + " - " + ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", lint", deepLinkErrorMessage + " - " + ex.getMessage()); return; } @@ -127,7 +127,7 @@ public void lint(Context context, String deeplink) { presenter.lintSuccess(deeplinkSchema); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", lint", ex.getMessage()); presenter.showSnackError( CommonErrorType.DEEPLINK_GENERAL_EXCEPTION, deepLinkErrorMessage ); } } @@ -152,11 +152,9 @@ public void saveSupervisor(Context context, String name, String phone, String we @Override public void saveMQTTConfig(Context context, String url, String userToken, String invitationToken) { MqttData cache = new MqttData(context); - if(cache.getUrl().isEmpty()) { - cache.setUrl(url); - cache.setUserToken(userToken); - cache.setInvitationToken(invitationToken); - } + cache.setUrl(url); + cache.setUserToken(userToken); + cache.setInvitationToken(invitationToken); } @Override diff --git a/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentHelper.java b/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentHelper.java index 704276cb72..f19a462ab2 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentHelper.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentHelper.java @@ -88,7 +88,7 @@ private String manageError(String error) { String errorMessage = ""; if(error.contains("EXCEPTION_HTTP") || error.contains("ERROR")) { - FlyveLog.e(error); + FlyveLog.e(this.getClass().getName() + ", manageError", error); errorMessage = error; @@ -107,7 +107,7 @@ private String manageError(String error) { errorMessage = errorArray[0]; } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", manageError", ex.getMessage()); } return errorMessage; @@ -128,10 +128,11 @@ public void run() String profileId = ""; JSONObject jsonSession; HashMap header = new HashMap(); + header.put("user_token", cache.getUserToken()); try { // STEP 1 get session token - data = getSyncWebData(routes.initSession(cache.getUserToken()), "GET", null); + data = getSyncWebData(routes.initSession(cache.getUserToken()), "GET", header); final String errorMessage = manageError(data); if(!errorMessage.equals("")) { @@ -148,7 +149,7 @@ public void run() { cache.setSessionToken(sessionToken); } catch (final Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getActiveSessionToken", ex.getMessage()); EnrollmentHelper.runOnUI(new Runnable() { public void run() { callback.onError(CommonErrorType.ENROLLMENT_HELPER_INITSESSION, context.getString(R.string.wrong_json_format, data, ex.getMessage())); @@ -182,7 +183,7 @@ public void run() { cache.setProfileId(profileId); } catch (final Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getActiveSessionToken", ex.getMessage()); EnrollmentHelper.runOnUI(new Runnable() { public void run() { callback.onError(CommonErrorType.ENROLLMENT_HELPER_FULLSESSION, context.getString(R.string.wrong_json_format, data, ex.getMessage())); @@ -209,7 +210,7 @@ public void run() { }); } } catch (final Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getActiveSessionToken", ex.getMessage()); EnrollmentHelper.runOnUI(new Runnable() { public void run() { callback.onError(CommonErrorType.ENROLLMENT_HELPER_CHANGEACTIVEPROFILE, context.getString(R.string.wrong_json_format, data, ex.getMessage())); @@ -257,7 +258,7 @@ public void run() { if(data.contains("ERROR")){ final String msgError = manageError(data); - FlyveLog.e(msgError + " - Device serial: " + Helpers.getDeviceSerial()); + FlyveLog.e(this.getClass().getName() + ", enrollment", msgError + " - Device serial: " + Helpers.getDeviceSerial()); EnrollmentHelper.runOnUI(new Runnable() { public void run() { @@ -357,7 +358,7 @@ public void run() { } }); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", createX509cert", ex.getMessage()); EnrollmentHelper.runOnUI(new Runnable() { public void run() { callback.onError(CommonErrorType.ENROLLMENT_HELPER_X509CERTIFICATION, "false"); diff --git a/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentModel.java b/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentModel.java index 425bb3f1b2..7b33c8f214 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentModel.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/enrollment/EnrollmentModel.java @@ -168,6 +168,10 @@ public void enroll(final Activity activity, final List arrE payload.put("type", "android"); payload.put("has_system_permission", Helpers.isSystemApp(activity)); payload.put("inventory", mInventory); + // could be mqtt or fcm + payload.put("notification_type", "mqtt"); + // this is the token get from fcm register + payload.put("notification_token", ""); FlyveLog.d(mInventory); @@ -192,7 +196,6 @@ public void onSuccess(String data) { // ------------------------------- MqttData cache = new MqttData(activity); cache.setInvitationToken(""); - cache.setUserToken(""); presenter.enrollSuccess(); } diff --git a/app/src/main/java/org/flyve/mdm/agent/core/mqtt/MqttModel.java b/app/src/main/java/org/flyve/mdm/agent/core/mqtt/MqttModel.java index 5276785425..d02510bfbf 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/mqtt/MqttModel.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/mqtt/MqttModel.java @@ -84,11 +84,18 @@ import org.flyve.mdm.agent.utils.Helpers; import org.json.JSONArray; import org.json.JSONObject; + +import java.security.KeyStore; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; import java.util.Date; +import java.util.Enumeration; import java.util.Timer; import java.util.TimerTask; +import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; public class MqttModel implements mqtt.Model { @@ -105,7 +112,8 @@ public class MqttModel implements mqtt.Model { private long timeLastReconnection = 0; private Boolean executeConnection = true; private int tryEverySeconds = 30; - ; + + private PoliciesController policiesController = null; public MqttModel(mqtt.Presenter presenter) { this.presenter = presenter; @@ -134,6 +142,7 @@ public void sendInventory(Context context) { public void connect(final Context context, final MqttCallback callback) { // if the device is connected exit if(getMqttClient()!=null && getMqttClient().isConnected()) { + setStatus(context, callback, true); return; } @@ -154,7 +163,7 @@ public void connect(final Context context, final MqttCallback callback) { connectionInformation.append("TLS: " + mTLS + "\n"); Log.d("MQTT", connectionInformation.toString()); - Helpers.storeLog(Helpers.broadCastMessage("MQTT", "Connection Information", connectionInformation.toString())); + Helpers.storeLog("MQTT", "Connection Information", connectionInformation.toString()); String protocol = "tcp"; // TLS is active change protocol @@ -163,36 +172,68 @@ public void connect(final Context context, final MqttCallback callback) { } String clientId; - try { - clientId = MqttClient.generateClientId(); - client = new MqttAndroidClient(context, protocol + "://" + mBroker + ":" + mPort, clientId); - } catch (ExceptionInInitializerError ex) { - showDetailError(context, CommonErrorType.MQTT_IN_INITIALIZER_ERROR, ex.getMessage()); - reconnect(context, callback); - return; - } + MqttConnectOptions options; - client.setCallback( callback ); + if(client==null) { + try { + clientId = MqttClient.generateClientId(); + client = new MqttAndroidClient(context, protocol + "://" + mBroker + ":" + mPort, clientId); + } catch (ExceptionInInitializerError ex) { + showDetailError(context, CommonErrorType.MQTT_IN_INITIALIZER_ERROR, ex.getMessage()); + reconnect(context, callback); + return; + } + + client.setCallback(callback); + } - MqttConnectOptions options; try { options = new MqttConnectOptions(); options.setPassword(mPassword.toCharArray()); options.setUserName(mUser); options.setCleanSession(true); options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1); - options.setConnectionTimeout(0); + options.setConnectionTimeout(MqttConnectOptions.CONNECTION_TIMEOUT_DEFAULT); + options.setKeepAliveInterval(MqttConnectOptions.KEEP_ALIVE_INTERVAL_DEFAULT); options.setAutomaticReconnect(true); // Create a testament to send when MQTT connection is down - String will = "{ online: false }"; - options.setWill("/Status/Online", will.getBytes(), 0, false); + String will = "{ \"online\": false }"; + options.setWill(mTopic + "/Status/Online", will.getBytes(), 0, true); // If TLS is active needs ssl connection option if (mTLS.equals("1")) { + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + + KeyStore caKeyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + caKeyStore.load(null, null); + + CertificateFactory certificationFactory = CertificateFactory.getInstance("X.509"); + X509Certificate ca = (X509Certificate) certificationFactory.generateCertificate(context.getResources().openRawResource(R.raw.flyve_org)); + String alias = ca.getSubjectX500Principal().getName(); + + // Set propper alias name + caKeyStore.setCertificateEntry(alias, ca); + trustManagerFactory.init(caKeyStore); + + FlyveLog.v("Certificate Owner: %s", ca.getSubjectDN().toString()); + FlyveLog.v("Certificate Issuer: %s", ca.getIssuerDN().toString()); + FlyveLog.v("Certificate Serial Number: %s", ca.getSerialNumber().toString()); + FlyveLog.v("Certificate Algorithm: %s", ca.getSigAlgName()); + FlyveLog.v("Certificate Version: %s", ca.getVersion()); + FlyveLog.v("Certificate OID: %s", ca.getSigAlgOID()); + Enumeration aliasesCA = caKeyStore.aliases(); + for (; aliasesCA.hasMoreElements(); ) { + String o = aliasesCA.nextElement(); + FlyveLog.v("Alias: %s isKeyEntry:%s isCertificateEntry:%s", o, caKeyStore.isKeyEntry(o), caKeyStore.isCertificateEntry(o)); + } + + KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509"); + keyManagerFactory.init(null,null); + // SSL - SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); - sslContext.init(null, null, null); + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); options.setSocketFactory(sslContext.getSocketFactory()); } } catch (Exception ex) { @@ -200,42 +241,47 @@ public void connect(final Context context, final MqttCallback callback) { return; } + try { IMqttToken token = client.connect(options); + token.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { - // We are connected - setStatus(context, callback, true); + Helpers.storeLog("MQTT", "Connection Success", ""); // Everything ready waiting for message - PoliciesController policiesController = new PoliciesController(context, client); + policiesController = new PoliciesController(context, client); + + // We are connected + setStatus(context, callback, true); - // send status online true to MQTT - policiesController.sendOnlineStatus(true); + // set the reconnection counter to 0 + reconnectionCounter = 0; // main topic String topic = mTopic + "/#"; policiesController.subscribe(topic); // subscribe to manifest - policiesController.subscribe("/FlyvemdmManifest/Status/Version"); + policiesController.subscribe("FlyvemdmManifest/Status/Version"); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable ex) { + setStatus(context, callback, false); String messageError; if(ex.getCause() != null) { messageError = ex.getCause().toString(); } else { messageError = ex.getMessage(); } - showDetailError(context, CommonErrorType.MQTT_ACTION_CALLBACK, messageError); } }); } catch (Exception ex) { + setStatus(context, callback, false); showDetailError(context, CommonErrorType.MQTT_CONNECTION, ex.getMessage()); } } @@ -259,6 +305,7 @@ public void run() { executeConnection = true; } else { executeConnection = false; + return; } } else { timeLastReconnection = new Date().getTime(); @@ -268,23 +315,19 @@ public void run() { if(!isConnected()) { if(executeConnection) { reconnectionCounter++; - - if((reconnectionCounter % 10)==0) { - tryEverySeconds *= 2; - } - String message = "Reconnecting " + reconnectionCounter + " times"; - + Helpers.storeLog("MQTT", "Reconnection", message); if(new AppData(context).getEnableNotificationConnection()) { Helpers.sendToNotificationBar(context, 101, context.getString(R.string.app_name), message, false, MainActivity.class, "service_disconnect"); } FlyveLog.d(message); - connect(context, callback); } } else { FlyveLog.d("Reconnection finish"); + Helpers.storeLog("MQTT", "Reconnection Success", ""); + reconnectionCounter = 0; reconnectionTimer.cancel(); reconnectionTimer = null; } @@ -293,15 +336,13 @@ public void run() { } public void messageArrived(Context context, String topic, MqttMessage message) { - FlyveLog.d("- Topic: " + topic + "\n\n- Message: " + new String(message.getPayload())); - FlyveLog.d("- Topic: " + topic + "\n\n- Message: " + new String(message.getPayload())); int priority = topic.contains("fleet") ? 0 : 1; String messageBody = new String(message.getPayload()); PoliciesController policiesController = new PoliciesController(context, getMqttClient()); - Helpers.storeLog(Helpers.broadCastMessage("MQTT Message", "Body", messageBody)); + Helpers.storeLog("MQTT Message", "Body", messageBody); if(topic.isEmpty()) { // exit if the topic if empty @@ -641,7 +682,7 @@ public void messageArrived(Context context, String topic, MqttMessage message) { @Override public void showDetailError(Context context, int type, String message) { - FlyveLog.e(context.getResources().getString(R.string.error_message_with_number, String.valueOf(type), message)); + FlyveLog.e(this.getClass().getName() + ", showDetailError", context.getResources().getString(R.string.error_message_with_number, String.valueOf(type), message)); } @Override @@ -658,7 +699,7 @@ public void onDestroy(Context context) { public void deliveryComplete(Context context, IMqttDeliveryToken token) { try { FlyveLog.d("deliveryComplete Token: " + token.isComplete() + " : " + token.getMessage().toString()); - Helpers.storeLog(Helpers.broadCastMessage(context.getString(R.string.mqtt_delivery), context.getString(R.string.response_id), String.valueOf(token.getMessageId()))); + Helpers.storeLog(context.getString(R.string.mqtt_delivery), context.getString(R.string.response_id), String.valueOf(token.getMessageId())); } catch (Exception ex) { showDetailError(context, CommonErrorType.MQTT_DELIVERY_COMPLETE, ex.getMessage()); } @@ -702,7 +743,7 @@ public void callPolicy(Context context, Class classPolic @Override public void connectionLost(Context context, MqttCallback callback, String message) { - showDetailError(context, CommonErrorType.MQTT_CONNECTION_LOST, message); + showDetailError(context, CommonErrorType.MQTT_CONNECTION_LOST, "Method: connectionLost " + message); setStatus(context, callback, false); } @@ -713,6 +754,11 @@ private void setStatus(Context context, MqttCallback callback, Boolean isConnect // reconnect if(!isConnected) { reconnect(context, callback); + } else { + // send to mqtt the status connected + if(policiesController != null) { + policiesController.sendOnlineStatus(isConnected); + } } AppData cache = new AppData(context); diff --git a/app/src/main/java/org/flyve/mdm/agent/core/permission/PermissionModel.java b/app/src/main/java/org/flyve/mdm/agent/core/permission/PermissionModel.java index adacf2686a..38b4980170 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/permission/PermissionModel.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/permission/PermissionModel.java @@ -101,7 +101,7 @@ public void onTaskSuccess(String s) { @Override public void onTaskError(Throwable throwable) { - FlyveLog.e(throwable.getMessage()); + FlyveLog.e(this.getClass().getName() + ", generateInventory", throwable.getMessage()); } }); diff --git a/app/src/main/java/org/flyve/mdm/agent/core/user/UserModel.java b/app/src/main/java/org/flyve/mdm/agent/core/user/UserModel.java index b578008bd0..5310eb1a13 100644 --- a/app/src/main/java/org/flyve/mdm/agent/core/user/UserModel.java +++ b/app/src/main/java/org/flyve/mdm/agent/core/user/UserModel.java @@ -136,7 +136,7 @@ public void save(Activity activity, UserSchema schema) { presenter.saveSuccess(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", save", ex.getMessage()); presenter.showDetailError(CommonErrorType.USER_SAVE_EXCEPTION, ex.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/data/database/MDMLogData.java b/app/src/main/java/org/flyve/mdm/agent/data/database/MDMLogData.java new file mode 100644 index 0000000000..f98c68e8ee --- /dev/null +++ b/app/src/main/java/org/flyve/mdm/agent/data/database/MDMLogData.java @@ -0,0 +1,62 @@ +/* + * Copyright Teclib. All rights reserved. + * + * This file is part of flyve-mdm-android + * + * flyve-mdm-android is a subproject of Flyve MDM. Flyve MDM is a mobile + * device management software. + * + * Flyve MDM is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * Flyve MDM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ------------------------------------------------------------------------------ + * @author @rafaelje + * @copyright Copyright Teclib. All rights reserved. + * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html + * @link https://github.com/flyve-mdm/flyve-mdm-android + * @link https://flyve-mdm.com + * ------------------------------------------------------------------------------ + */ + +package org.flyve.mdm.agent.data.database; + +import android.content.Context; + +import org.flyve.mdm.agent.data.database.entity.MDMLog; +import org.flyve.mdm.agent.data.database.setup.AppDataBase; + +public class MDMLogData { + + private AppDataBase dataBase; + + public MDMLogData(Context context) { + dataBase = AppDataBase.getAppDatabase(context); + } + + public MDMLog[] getAllLogs() { + return dataBase.MDMLogDao().loadAll(); + } + + public void deleteAll() { + dataBase.MDMLogDao().deleteAll(); + } + + private void keepClear() { + dataBase.MDMLogDao().keepClear(); + } + + public void addLog(String message) { + keepClear(); + + MDMLog log = new MDMLog(); + log.description = message; + log.date = (int) (System.currentTimeMillis() % Integer.MAX_VALUE); + dataBase.MDMLogDao().insert(log); + } +} diff --git a/app/src/main/java/org/flyve/mdm/agent/data/database/dao/MDMLogDao.java b/app/src/main/java/org/flyve/mdm/agent/data/database/dao/MDMLogDao.java new file mode 100644 index 0000000000..b178709372 --- /dev/null +++ b/app/src/main/java/org/flyve/mdm/agent/data/database/dao/MDMLogDao.java @@ -0,0 +1,50 @@ +/* + * Copyright Teclib. All rights reserved. + * + * Flyve MDM is a mobile device management software. + * + * Flyve MDM is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * Flyve MDM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ------------------------------------------------------------------------------ + * @author Rafael Hernandez + * @copyright Copyright Teclib. All rights reserved. + * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html + * @link https://github.com/flyve-mdm/android-mdm-agent + * @link https://flyve-mdm.com + * ------------------------------------------------------------------------------ + */ + +package org.flyve.mdm.agent.data.database.dao; + +import android.arch.persistence.room.Dao; +import android.arch.persistence.room.Insert; +import android.arch.persistence.room.Query; +import android.arch.persistence.room.Update; + +import org.flyve.mdm.agent.data.database.entity.MDMLog; + +@Dao +public interface MDMLogDao { + + @Insert + void insert(MDMLog... log); + + @Update + void update(MDMLog... log); + + @Query("SELECT * FROM log order by id desc") + MDMLog[] loadAll(); + + @Query("DELETE FROM log") + void deleteAll(); + + @Query("DELETE FROM log WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM log ORDER BY id DESC LIMIT 200 ) logs );") + void keepClear(); +} diff --git a/app/src/main/java/org/flyve/mdm/agent/data/database/entity/MDMLog.java b/app/src/main/java/org/flyve/mdm/agent/data/database/entity/MDMLog.java new file mode 100644 index 0000000000..906d07bac2 --- /dev/null +++ b/app/src/main/java/org/flyve/mdm/agent/data/database/entity/MDMLog.java @@ -0,0 +1,46 @@ +/* + * Copyright Teclib. All rights reserved. + * + * Flyve MDM is a mobile device management software. + * + * Flyve MDM is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * Flyve MDM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ------------------------------------------------------------------------------ + * @author Rafael Hernandez + * @copyright Copyright Teclib. All rights reserved. + * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html + * @link https://github.com/flyve-mdm/android-mdm-agent + * @link https://flyve-mdm.com + * ------------------------------------------------------------------------------ + */ + +package org.flyve.mdm.agent.data.database.entity; + +import android.arch.persistence.room.ColumnInfo; +import android.arch.persistence.room.Entity; +import android.arch.persistence.room.PrimaryKey; + +@Entity (tableName = "log") +public class MDMLog { + + @PrimaryKey (autoGenerate = true) + @ColumnInfo (name = "id") + public int id; + + @ColumnInfo (name = "description") + public String description; + + @ColumnInfo (name = "type") + public String type; + + @ColumnInfo (name = "date") + public int date; + +} \ No newline at end of file diff --git a/app/src/main/java/org/flyve/mdm/agent/data/database/setup/AppDataBase.java b/app/src/main/java/org/flyve/mdm/agent/data/database/setup/AppDataBase.java index cf6343e477..bb13f04d23 100644 --- a/app/src/main/java/org/flyve/mdm/agent/data/database/setup/AppDataBase.java +++ b/app/src/main/java/org/flyve/mdm/agent/data/database/setup/AppDataBase.java @@ -28,17 +28,19 @@ import android.arch.persistence.room.RoomDatabase; import android.content.Context; -import org.flyve.mdm.agent.data.database.entity.File; import org.flyve.mdm.agent.data.database.dao.ApplicationDao; import org.flyve.mdm.agent.data.database.dao.FileDao; +import org.flyve.mdm.agent.data.database.dao.MDMLogDao; import org.flyve.mdm.agent.data.database.dao.MQTTDao; import org.flyve.mdm.agent.data.database.dao.PoliciesDao; import org.flyve.mdm.agent.data.database.entity.Application; +import org.flyve.mdm.agent.data.database.entity.File; +import org.flyve.mdm.agent.data.database.entity.MDMLog; import org.flyve.mdm.agent.data.database.entity.MQTT; import org.flyve.mdm.agent.data.database.entity.Policies; -@Database(entities = {Application.class, MQTT.class, Policies.class, File.class}, version = 8, exportSchema = false) +@Database(entities = {Application.class, MQTT.class, Policies.class, File.class, MDMLog.class}, version = 10, exportSchema = false) public abstract class AppDataBase extends RoomDatabase { private static AppDataBase instance; @@ -47,6 +49,7 @@ public abstract class AppDataBase extends RoomDatabase { public abstract MQTTDao MQTTDao(); public abstract PoliciesDao PoliciesDao(); public abstract FileDao FileDao(); + public abstract MDMLogDao MDMLogDao(); public static AppDataBase getAppDatabase(Context context) { if (instance == null) { diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/AirplaneModePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/AirplaneModePolicy.java index 368d51f839..3ff71e54a8 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/AirplaneModePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/AirplaneModePolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public AirplaneModePolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableRoaming(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableAirplaneMode(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/BasePolicies.java b/app/src/main/java/org/flyve/mdm/agent/policies/BasePolicies.java index c54edf407d..d1ba4a41b5 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/BasePolicies.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/BasePolicies.java @@ -35,7 +35,6 @@ import org.flyve.mdm.agent.data.database.PoliciesData; import org.flyve.mdm.agent.data.database.entity.Policies; import org.flyve.mdm.agent.utils.FlyveLog; -import org.flyve.mdm.agent.utils.Helpers; public abstract class BasePolicies { @@ -120,12 +119,12 @@ private void mqttSendTaskStatus(String mqttTopic, String taskId, String status) MqttMessage message = new MqttMessage(encodedPayload); IMqttDeliveryToken token = this.mqttClient.publish(topic, message); - Log(Helpers.broadCastMessage(MQTT_SEND, "Send Status", "ID: " + token.getMessageId())); + Log(MQTT_SEND, "Policy Status", "TaskID: " + taskId + " Status: " + status); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", mqttSendTaskStatus", ex.getMessage()); // send broadcast - Log(Helpers.broadCastMessage(ERROR, "Error sending status", ex.getMessage())); + Log(ERROR, "Error sending status", ex.getMessage()); } } @@ -135,10 +134,10 @@ private void mqttResponse(String status) { } } - protected void Log(String message){ + protected void Log(String type, String title, String message){ // write log file if(enableLog) { - FlyveLog.f(message, FlyveLog.FILE_NAME_LOG); + FlyveLog.f(type, title, message); } } @@ -166,7 +165,7 @@ private void validate() throws PoliciesException { public void execute() throws PoliciesException { validate(); - Log("Start the policy: " + this.policyName + " value: " + this.policyValue + " priority: " + this.policyPriority); + Log("Execute Policy", "Policy " + this.policyName, "Start the policy: " + this.policyName + "\nvalue: " + this.policyValue + "\npriority:" + this.policyPriority); boolean status = process(); if(status) { policyDone(); @@ -182,7 +181,7 @@ protected void policyDone() { } protected void policyFail() { - Log("Policy Fail: " + this.policyName + " value: " + this.policyValue + " priority: " + this.policyPriority); + Log("Policy ERROR", "Policy " + this.policyName,"Policy Fail: " + this.policyName + "\nvalue: " + this.policyValue + "\npriority: " + this.policyPriority); if(mqttEnable) { mqttResponse(MQTT_FEEDBACK_FAILED); } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/BluetoothPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/BluetoothPolicy.java index e48a028fd1..58f80f4e3a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/BluetoothPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/BluetoothPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public BluetoothPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableBluetooth(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableBluetooth(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/CameraPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/CameraPolicy.java index a99624582b..a47cc94c0f 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/CameraPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/CameraPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -43,11 +44,14 @@ public CameraPolicy(Context context) { @Override protected boolean process() { try { - PoliciesDeviceManager mdm = new PoliciesDeviceManager(this.context); - mdm.disableCamera(Boolean.valueOf(this.policyValue.toString())); + boolean disable = Boolean.valueOf(this.policyValue.toString()); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.disableCamera(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/GPSPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/GPSPolicy.java index a4eae0c939..be3264ebfb 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/GPSPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/GPSPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public GPSPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableGps(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableGps(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/HostpotTetheringPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/HostpotTetheringPolicy.java index 0394817eb7..921607fbbd 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/HostpotTetheringPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/HostpotTetheringPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public HostpotTetheringPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableHostpotTethering(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableHostpotTethering(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/MaximumFailedPasswordForWipePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/MaximumFailedPasswordForWipePolicy.java index 4ef5680fa8..115a17f0b6 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/MaximumFailedPasswordForWipePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/MaximumFailedPasswordForWipePolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public MaximumFailedPasswordForWipePolicy(Context context) { protected boolean process() { try { int maximum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setMaximumFailedPasswordsForWipe(maximum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setMaximumFailedPasswordsForWipe(maximum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/MaximumTimeToLockPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/MaximumTimeToLockPolicy.java index 1baf0b7ce1..c9de34ee4a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/MaximumTimeToLockPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/MaximumTimeToLockPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public MaximumTimeToLockPolicy(Context context) { protected boolean process() { try { int maximum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setMaximumTimeToLock(maximum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setMaximumTimeToLock(maximum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/MobileLinePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/MobileLinePolicy.java index 35efe8aee3..4b8602512c 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/MobileLinePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/MobileLinePolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -45,10 +45,13 @@ public MobileLinePolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableMobileLine(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableMobileLine(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/NFCPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/NFCPolicy.java index 8605d6c9ef..fa76f54e08 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/NFCPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/NFCPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public NFCPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableNFC(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableNFC(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordEnablePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordEnablePolicy.java index d61b52b371..9b5810f45a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordEnablePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordEnablePolicy.java @@ -2,8 +2,10 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; +import org.flyve.mdm.agent.ui.MainActivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +46,13 @@ public PasswordEnablePolicy(Context context) { protected boolean process() { try { String type = this.policyValue.toString(); - new PoliciesDeviceManager(context).enablePassword(true, type); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.enablePassword(true, type, MainActivity.class); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLengthPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLengthPolicy.java index f5f436496a..7e7621100b 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLengthPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLengthPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinLengthPolicy(Context context) { protected boolean process() { try { int length = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordLength(length); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordLength(length); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLetterPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLetterPolicy.java index ab2d8ce53e..0b67dd6fe5 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLetterPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLetterPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinLetterPolicy(Context context) { protected boolean process() { try { int minimum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordMinimumLetters(minimum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordMinimumLetters(minimum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLowerCasePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLowerCasePolicy.java index 042ef4c0b3..c04d522114 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLowerCasePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinLowerCasePolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinLowerCasePolicy(Context context) { protected boolean process() { try { int minimum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordMinimumLowerCase(minimum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordMinimumLowerCase(minimum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNonLetterPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNonLetterPolicy.java index c0265e9651..792527ed7b 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNonLetterPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNonLetterPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinNonLetterPolicy(Context context) { protected boolean process() { try { int minimum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordMinimumNonLetter(minimum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordMinimumNonLetter(minimum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNumericPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNumericPolicy.java index 6bc6106a6f..46f54d0364 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNumericPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinNumericPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinNumericPolicy(Context context) { protected boolean process() { try { int minimum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordMinimumNumeric(minimum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordMinimumNumeric(minimum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinSymbolsPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinSymbolsPolicy.java index 182f04cdbe..ccb8f0ef6f 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinSymbolsPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinSymbolsPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinSymbolsPolicy(Context context) { protected boolean process() { try { int minimum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordMinimumSymbols(minimum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordMinimumSymbols(minimum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinUpperCasePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinUpperCasePolicy.java index 1c77b92402..c73687c781 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinUpperCasePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordMinUpperCasePolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordMinUpperCasePolicy(Context context) { protected boolean process() { try { int minimum = Integer.parseInt(this.policyValue.toString()); - new PoliciesDeviceManager(context).setPasswordMinimumUpperCase(minimum); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordMinimumUpperCase(minimum); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordQualityPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordQualityPolicy.java index 469d514605..f860e3a58a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/PasswordQualityPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/PasswordQualityPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public PasswordQualityPolicy(Context context) { protected boolean process() { try { String quality = this.policyValue.toString(); - new PoliciesDeviceManager(context).setPasswordQuality(quality); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.setPasswordQuality(quality); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/RoamingPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/RoamingPolicy.java index a51da15f02..20786bb018 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/RoamingPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/RoamingPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public RoamingPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableRoaming(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableRoaming(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/ScreenCapturePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/ScreenCapturePolicy.java index 72de0c1e66..b2c0ecb063 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/ScreenCapturePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/ScreenCapturePolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public ScreenCapturePolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - new PoliciesDeviceManager(context).disableCaptureScreen(disable); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.disableCaptureScreen(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/SpeakerphonePolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/SpeakerphonePolicy.java index 491f1bc767..87e460221b 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/SpeakerphonePolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/SpeakerphonePolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public SpeakerphonePolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSpeakerphone(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSpeakerphone(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StatusBarPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StatusBarPolicy.java index c04fec198f..a06ff78ec2 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StatusBarPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StatusBarPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public StatusBarPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - new PoliciesDeviceManager(context).disableStatusBar(disable); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.disableStatusBar(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StorageEncryptionPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StorageEncryptionPolicy.java index e35ad7686e..dcf874d7f3 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StorageEncryptionPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StorageEncryptionPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public StorageEncryptionPolicy(Context context) { protected boolean process() { try { boolean enable = Boolean.parseBoolean(this.policyValue.toString()); - new PoliciesDeviceManager(this.context).storageEncryptionDevice(enable); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.disableStatusBar(enable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamAccessibilityPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamAccessibilityPolicy.java index 5bcab9bdc5..d1d9b0e5e8 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamAccessibilityPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamAccessibilityPolicy.java @@ -4,8 +4,8 @@ import android.media.AudioManager; import android.os.Build; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -50,10 +50,13 @@ protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSounds(AudioManager.STREAM_ACCESSIBILITY, disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSounds(AudioManager.STREAM_ACCESSIBILITY, disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamAlarmPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamAlarmPolicy.java index a8b2b414aa..fca6e41e38 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamAlarmPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamAlarmPolicy.java @@ -1,13 +1,9 @@ package org.flyve.mdm.agent.policies; import android.content.Context; -import android.media.AudioManager; -import android.os.Build; -import org.flyve.mdm.agent.ui.MDMAgent; import org.flyve.mdm.agent.utils.FlyveLog; - -import static android.content.Context.AUDIO_SERVICE; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -49,25 +45,12 @@ protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - AudioManager aManager = (AudioManager) MDMAgent.getInstance().getApplicationContext().getSystemService(AUDIO_SERVICE); - try { - if (Build.VERSION.SDK_INT >= 23) { - if(disable) { - aManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); - } else { - aManager.setStreamVolume(AudioManager.STREAM_ALARM, 100, 0); - } - } else { - //media - aManager.setStreamMute(AudioManager.STREAM_ALARM, disable); - } - } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - } + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableAlarm(disable); return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamDTMFPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamDTMFPolicy.java index 20217e3b2f..143824f446 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamDTMFPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamDTMFPolicy.java @@ -3,8 +3,8 @@ import android.content.Context; import android.media.AudioManager; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -45,10 +45,13 @@ public StreamDTMFPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSounds(AudioManager.STREAM_DTMF, disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSounds(AudioManager.STREAM_DTMF, disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamMusicPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamMusicPolicy.java index 9fccf86399..9225f81822 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamMusicPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamMusicPolicy.java @@ -3,8 +3,8 @@ import android.content.Context; import android.media.AudioManager; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -45,10 +45,13 @@ public StreamMusicPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSounds(AudioManager.STREAM_MUSIC, disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSounds(AudioManager.STREAM_MUSIC, disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamNotificationPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamNotificationPolicy.java index 577827273b..0a4db6ca3a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamNotificationPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamNotificationPolicy.java @@ -3,8 +3,8 @@ import android.content.Context; import android.media.AudioManager; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -45,10 +45,13 @@ public StreamNotificationPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSounds(AudioManager.STREAM_NOTIFICATION, disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSounds(AudioManager.STREAM_NOTIFICATION, disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamRingPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamRingPolicy.java index 5704ee232c..1a31e3da7c 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamRingPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamRingPolicy.java @@ -3,8 +3,8 @@ import android.content.Context; import android.media.AudioManager; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -45,10 +45,13 @@ public StreamRingPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSounds(AudioManager.STREAM_RING, disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSounds(AudioManager.STREAM_RING, disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/StreamVoiceCallPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/StreamVoiceCallPolicy.java index 9aef23b2e5..9c4ec84be8 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/StreamVoiceCallPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/StreamVoiceCallPolicy.java @@ -3,8 +3,8 @@ import android.content.Context; import android.media.AudioManager; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -45,10 +45,13 @@ public StreamVoiceCallPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableSounds(AudioManager.STREAM_VOICE_CALL, disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSounds(AudioManager.STREAM_VOICE_CALL, disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/UsbAdbPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/UsbAdbPolicy.java index a2eb2f4f92..24e75962d3 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/UsbAdbPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/UsbAdbPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public UsbAdbPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableADBUsbFileTransferProtocols(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableADBUsbFileTransferProtocols(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/UsbMtpPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/UsbMtpPolicy.java index a4184fbd05..d208462705 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/UsbMtpPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/UsbMtpPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public UsbMtpPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableMTPUsbFileTransferProtocols(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableMTPUsbFileTransferProtocols(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/UsbPtpPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/UsbPtpPolicy.java index ad4a7f7fac..338d69c30a 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/UsbPtpPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/UsbPtpPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public UsbPtpPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disablePTPUsbFileTransferProtocols(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disablePTPUsbFileTransferProtocols(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/VPNPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/VPNPolicy.java index 20a81574d6..efb90748a4 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/VPNPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/VPNPolicy.java @@ -2,8 +2,9 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +45,13 @@ public VPNPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - new PoliciesDeviceManager(this.context).disableVPN(disable); + + AndroidPolicies androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); + androidPolicies.disableVPN(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/policies/WifiPolicy.java b/app/src/main/java/org/flyve/mdm/agent/policies/WifiPolicy.java index 168ac16a4e..0c4a5dd72c 100644 --- a/app/src/main/java/org/flyve/mdm/agent/policies/WifiPolicy.java +++ b/app/src/main/java/org/flyve/mdm/agent/policies/WifiPolicy.java @@ -2,8 +2,8 @@ import android.content.Context; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; /* * Copyright 2018 Teclib. All rights reserved. @@ -44,10 +44,13 @@ public WifiPolicy(Context context) { protected boolean process() { try { boolean disable = Boolean.parseBoolean(this.policyValue.toString()); - PoliciesConnectivity.disableWifi(disable); + + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableWifi(disable); + return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); return false; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/receivers/AppsReceiver.java b/app/src/main/java/org/flyve/mdm/agent/receivers/AppsReceiver.java index 8a055c08ef..e174050d96 100644 --- a/app/src/main/java/org/flyve/mdm/agent/receivers/AppsReceiver.java +++ b/app/src/main/java/org/flyve/mdm/agent/receivers/AppsReceiver.java @@ -63,7 +63,7 @@ public void onReceive(Context context, Intent intent) { Intent mIntent = new Intent(context, MQTTService.class); context.bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onReceive", ex.getMessage()); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/receivers/CustomPhoneStateListener.java b/app/src/main/java/org/flyve/mdm/agent/receivers/CustomPhoneStateListener.java index b300ca6e00..f86e343507 100644 --- a/app/src/main/java/org/flyve/mdm/agent/receivers/CustomPhoneStateListener.java +++ b/app/src/main/java/org/flyve/mdm/agent/receivers/CustomPhoneStateListener.java @@ -28,9 +28,9 @@ import org.flyve.mdm.agent.data.database.PoliciesData; import org.flyve.mdm.agent.policies.SpeakerphonePolicy; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.ui.MDMAgent; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.CustomPolicies; public class CustomPhoneStateListener extends PhoneStateListener { @@ -45,7 +45,8 @@ public void onCallStateChanged(int state, String incomingNumber) { if (state == 2) { // Disable Speaker Phone - PoliciesConnectivity.disableSpeakerphone(disable); + CustomPolicies customPolicies = new CustomPolicies(context); + customPolicies.disableSpeakerphone(disable); } } } \ No newline at end of file diff --git a/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTConnectivityReceiver.java b/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTConnectivityReceiver.java index 3e44704ac4..3589278636 100644 --- a/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTConnectivityReceiver.java +++ b/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTConnectivityReceiver.java @@ -38,9 +38,9 @@ import org.flyve.mdm.agent.policies.NFCPolicy; import org.flyve.mdm.agent.policies.RoamingPolicy; import org.flyve.mdm.agent.policies.WifiPolicy; -import org.flyve.mdm.agent.services.PoliciesConnectivity; import org.flyve.mdm.agent.utils.FlyveLog; import org.flyve.mdm.agent.utils.Helpers; +import org.flyve.policies.manager.CustomPolicies; /** * Receive broadcast from android.net.wifi.STATE_CHANGE and android.bluetooth.adapter.action.STATE_CHANGED @@ -59,6 +59,7 @@ public void onReceive(Context context, Intent intent) { FlyveLog.d("Connectivity receiver: " + action); PoliciesData cache = new PoliciesData(context); + CustomPolicies customPolicies = new CustomPolicies(context); if(action==null) { return; @@ -75,12 +76,12 @@ public void onReceive(Context context, Intent intent) { // Register listener for LISTEN_CALL_STATE tmgr.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onReceive", ex.getMessage()); } if(action.contains("USB")) { FlyveLog.d("USB Device Attached"); - PoliciesConnectivity.disableAllUsbFileTransferProtocols( true ); + customPolicies.disableAllUsbFileTransferProtocols( true ); } if("android.net.conn.CONNECTIVITY_CHANGE".equalsIgnoreCase(action)) { @@ -89,13 +90,13 @@ public void onReceive(Context context, Intent intent) { // Disable / Enable Roaming Boolean policy = Helpers.boolFromString(cache.getValue(RoamingPolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableRoaming(policy); + customPolicies.disableRoaming(policy); } // Disable / Enable Mobile line policy = Helpers.boolFromString(cache.getValue(MobileLinePolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableMobileLine(policy); + customPolicies.disableMobileLine(policy); } } @@ -103,7 +104,7 @@ public void onReceive(Context context, Intent intent) { // Disable / Enable Airplane Mode Boolean policy = Helpers.boolFromString(cache.getValue(AirplaneModePolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableAirplaneMode(policy); + customPolicies.disableAirplaneMode(policy); } } @@ -114,13 +115,13 @@ public void onReceive(Context context, Intent intent) { // Disable / Enable Hostpot Boolean policy = Helpers.boolFromString(cache.getValue(HostpotTetheringPolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableWifi(policy); + customPolicies.disableWifi(policy); } // Disable / Enable Wifi policy = Helpers.boolFromString(cache.getValue(WifiPolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableHostpotTethering(policy); + customPolicies.disableHostpotTethering(policy); } } @@ -128,7 +129,7 @@ public void onReceive(Context context, Intent intent) { if ("android.bluetooth.adapter.action.STATE_CHANGED".equalsIgnoreCase(action)) { Boolean policy = Helpers.boolFromString(cache.getValue(BluetoothPolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableBluetooth(policy); + customPolicies.disableBluetooth(policy); } } @@ -136,7 +137,7 @@ public void onReceive(Context context, Intent intent) { if("android.nfc.extra.ADAPTER_STATE".equalsIgnoreCase(action)) { Boolean policy = Helpers.boolFromString(cache.getValue(NFCPolicy.POLICY_NAME).value); if(policy) { - PoliciesConnectivity.disableNFC(policy); + customPolicies.disableNFC(policy); } } @@ -170,7 +171,7 @@ public void onReceive(Context context, Intent intent) { */ boolean disable = Helpers.boolFromString(cache.getValue(GPSPolicy.POLICY_NAME).value); - PoliciesConnectivity.disableGps(disable); + customPolicies.disableGps(disable); FlyveLog.i("Location providers change: " + disable); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTRestarterBroadcastReceiver.java b/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTRestarterBroadcastReceiver.java index a3e64d9ad0..29ac8add60 100644 --- a/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTRestarterBroadcastReceiver.java +++ b/app/src/main/java/org/flyve/mdm/agent/receivers/MQTTRestarterBroadcastReceiver.java @@ -44,5 +44,6 @@ public class MQTTRestarterBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { FlyveLog.d(MQTTRestarterBroadcastReceiver.class.getSimpleName(), "Service Stops!"); context.startService(new Intent(context, MQTTService.class)); + } } diff --git a/app/src/main/java/org/flyve/mdm/agent/security/AndroidCryptoProvider.java b/app/src/main/java/org/flyve/mdm/agent/security/AndroidCryptoProvider.java index 91811c13cd..87303cd9da 100644 --- a/app/src/main/java/org/flyve/mdm/agent/security/AndroidCryptoProvider.java +++ b/app/src/main/java/org/flyve/mdm/agent/security/AndroidCryptoProvider.java @@ -93,7 +93,7 @@ private byte[] loadFileToBytes(File f) { } return fileData; } catch (IOException e) { - FlyveLog.e("loadFileToBytes IOException",e); + FlyveLog.e(this.getClass().getName() + ", loadFileToBytes","loadFileToBytes IOException",e); return new byte[0]; } finally { try { @@ -101,7 +101,7 @@ private byte[] loadFileToBytes(File f) { fin.close(); } } catch (Exception e) { - FlyveLog.e("close FileInputStream, IO exception", e); + FlyveLog.e(this.getClass().getName() + ", loadFileToBytes", "close FileInputStream, IO exception", e); } } } @@ -168,7 +168,7 @@ public void generateRequest(GenerateCallback callback) { return; } } catch (Exception ex) { - FlyveLog.e("generateRequest",ex); + FlyveLog.e(this.getClass().getName() + ", generateRequest", "generateRequest",ex); callback.onGenerate(false); return; } @@ -276,14 +276,14 @@ public void saveCertKey(String certString) { certWriter.close(); } catch (Exception e) { - FlyveLog.e("saveCertKey",e); + FlyveLog.e(this.getClass().getName() + ", saveCertKey", "saveCertKey",e); } finally { try { if(certOut!=null) { certOut.close(); } } catch (Exception e){ - FlyveLog.e("saveCertKey, IOException", e); + FlyveLog.e(this.getClass().getName() + ", saveCertKey", "saveCertKey, IOException", e); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesController.java b/app/src/main/java/org/flyve/mdm/agent/services/PoliciesController.java index 018f26c361..06d4a40ebd 100644 --- a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesController.java +++ b/app/src/main/java/org/flyve/mdm/agent/services/PoliciesController.java @@ -39,11 +39,14 @@ import org.flyve.mdm.agent.data.database.FileData; import org.flyve.mdm.agent.data.database.MqttData; import org.flyve.mdm.agent.data.database.PoliciesData; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; +import org.flyve.mdm.agent.ui.LockActivity; import org.flyve.mdm.agent.ui.MDMAgent; import org.flyve.mdm.agent.utils.FastLocationProvider; import org.flyve.mdm.agent.utils.FlyveLog; import org.flyve.mdm.agent.utils.Helpers; import org.flyve.mdm.agent.utils.Inventory; +import org.flyve.policies.manager.AndroidPolicies; import org.json.JSONObject; import java.util.ArrayList; @@ -67,12 +70,13 @@ public class PoliciesController { private Context context; private MqttData mqttData; private String mTopic; + private AndroidPolicies androidPolicies; public PoliciesController(Context context, MqttAndroidClient client) { this.client = client; this.context = context; mqttData = new MqttData(context); - + androidPolicies = new AndroidPolicies(context, FlyveAdminReceiver.class); mTopic = mqttData.getTopic(); arrTopics = new ArrayList<>(); @@ -102,7 +106,7 @@ public void addManifest(JSONObject json) { String version = json.getString("version"); mqttData.setManifestVersion(version); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", addManifest", ex.getMessage()); } } @@ -125,7 +129,7 @@ public void subscribe(final String channel) { qos[k] = 0; } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", subscribe", ex.getMessage()); } try { @@ -135,7 +139,7 @@ public void subscribe(final String channel) { public void onSuccess(IMqttToken asyncActionToken) { // The message was published FlyveLog.i("Subscribed topics: " + Arrays.toString(topics)); - broadcastReceivedLog(Helpers.broadCastMessage("TOPIC", "Subscribed", channel)); + broadcastReceivedLog("TOPIC", "Subscribed", channel); } @Override @@ -147,12 +151,12 @@ public void onFailure(IMqttToken asyncActionToken, if(exception != null) { errorMessage = exception.getMessage(); } - FlyveLog.e("ERROR on subscribe: " + errorMessage); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on subscribe", errorMessage)); + FlyveLog.e(this.getClass().getName() + ", subscribe", "ERROR on subscribe: " + errorMessage); + broadcastReceivedLog(ERROR, "Error on subscribe", errorMessage); } }); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", subscribe", ex.getMessage()); } } @@ -167,14 +171,14 @@ public void createInventory() { public void onTaskSuccess(String s) { // send inventory to MQTT sendInventory(s); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Inventory", "Inventory Send")); + broadcastReceivedLog(MQTT_SEND, "Inventory", "Inventory Send"); } @Override public void onTaskError(Throwable throwable) { - FlyveLog.e(throwable.getMessage()); + FlyveLog.e(this.getClass().getName() + ", createInventory", throwable.getMessage()); //send broadcast - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on createInventory", throwable.getMessage())); + broadcastReceivedLog(ERROR, "Error on createInventory", throwable.getMessage()); } }); } @@ -210,7 +214,7 @@ public void useTLS(String taskId, Boolean enable) { sendTaskStatus(taskId, FEEDBACK_DONE); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", useTLS", ex.getMessage()); // return the status of the task sendTaskStatus(taskId, FEEDBACK_FAILED); @@ -228,31 +232,31 @@ public void lockDevice(Boolean lock) { } try { - PoliciesDeviceManager mdm = new PoliciesDeviceManager(this.context); + if(lock) { - mdm.lockScreen(); - mdm.lockDevice(); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Lock", "Device Lock")); + androidPolicies.lockScreen(LockActivity.class); + androidPolicies.lockDevice(); + broadcastReceivedLog(MQTT_SEND, "Lock", "Device Lock"); } else { Helpers.sendBroadcast("unlock", "org.flyvemdm.finishlock", context); } } catch (Exception ex) { - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on lockDevice", ex.getMessage())); - FlyveLog.e(ex.getCause().getMessage()); + broadcastReceivedLog(ERROR, "Error on lockDevice", ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", lockDevice", ex.getCause().getMessage()); } } public void resetPassword(String newPassword) { try { if(!newPassword.isEmpty()) { - new PoliciesDeviceManager(context).resetPassword(newPassword); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Reset Password", "Reset Password : ****")); + androidPolicies.resetPassword(newPassword); + broadcastReceivedLog(MQTT_SEND, "Reset Password", "Reset Password : ****"); } else { - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on Reset Password", "the new password is empty")); + broadcastReceivedLog(ERROR, "Error on Reset Password", "the new password is empty"); } } catch (Exception ex) { - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on Reset Password", ex.getMessage())); + broadcastReceivedLog(ERROR, "Error on Reset Password", ex.getMessage()); } } @@ -264,7 +268,7 @@ public void removePackage(String taskId, String packageName) { // return the status of the task sendTaskStatus(taskId, FEEDBACK_DONE); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", removePackage", ex.getMessage()); // return the status of the task sendTaskStatus(taskId, FEEDBACK_FAILED); @@ -286,13 +290,13 @@ public void onSuccess(String sessionToken) { PoliciesFiles policiesFiles = new PoliciesFiles(PoliciesController.this.context); policiesFiles.execute("package", deployApp, id, sessionToken); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Install package", "name: " + deployApp + " id: " + id)); + broadcastReceivedLog(MQTT_SEND, "Install package", "name: " + deployApp + " id: " + id); // return the status of the task sendTaskStatus(taskId, FEEDBACK_RECEIVED); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on getActiveSessionToken", ex.getMessage())); + FlyveLog.e(this.getClass().getName() + ", installPackage", ex.getMessage()); + broadcastReceivedLog(ERROR, "Error on getActiveSessionToken", ex.getMessage()); // return the status of the task sendTaskStatus(taskId, FEEDBACK_FAILED); @@ -301,9 +305,8 @@ public void onSuccess(String sessionToken) { @Override public void onError(int type, String error) { - FlyveLog.e(error); - broadcastReceivedLog(Helpers.broadCastMessage(String.valueOf(type), ERROR, error)); - broadcastReceivedLog("Application fail: " + error); + FlyveLog.e(this.getClass().getName() + ", installPackage", error); + broadcastReceivedLog(String.valueOf(type), ERROR, error); // return the status of the task sendTaskStatus(taskId, FEEDBACK_FAILED); @@ -327,7 +330,7 @@ public void onSuccess(String sessionToken) { if("true".equals(policiesFiles.execute("file", deployFile, id, sessionToken))) { FlyveLog.d("File was stored on: " + deployFile); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "File was stored on", deployFile)); + broadcastReceivedLog(MQTT_SEND, "File was stored on", deployFile); // return the status of the task sendTaskStatus(taskId, FEEDBACK_DONE); @@ -336,8 +339,8 @@ public void onSuccess(String sessionToken) { @Override public void onError(int type, String error) { - FlyveLog.e(error); - broadcastReceivedLog(Helpers.broadCastMessage(String.valueOf(type), "Error on applicationOnDevices", error)); + FlyveLog.e(this.getClass().getName() + ", downloadFile", error); + broadcastReceivedLog(String.valueOf(type), "Error on applicationOnDevices", error); // return the status of the task sendTaskStatus(taskId, FEEDBACK_FAILED); @@ -351,12 +354,12 @@ public void removeFile(String taskId, String removeFile) { policiesFiles.removeFile(removeFile); FlyveLog.d("Remove file: " + removeFile); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Remove file", removeFile)); + broadcastReceivedLog(MQTT_SEND, "Remove file", removeFile); // return the status of the task sendTaskStatus(taskId, FEEDBACK_DONE); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", removeFile", ex.getMessage()); // return the status of the task sendTaskStatus(taskId, FEEDBACK_FAILED); @@ -372,12 +375,11 @@ public void wipe() { } try { - PoliciesDeviceManager mdm = new PoliciesDeviceManager(this.context); - mdm.wipe(); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Wipe", "Wipe success")); + androidPolicies.wipe(); + broadcastReceivedLog(MQTT_SEND, "Wipe", "Wipe success"); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on wipe", ex.getMessage())); + FlyveLog.e(this.getClass().getName() + ", wipe", ex.getMessage()); + broadcastReceivedLog(ERROR, "Error on wipe", ex.getMessage()); } } @@ -397,7 +399,7 @@ public boolean unenroll() { encodedPayload = payload.getBytes(UTF_8); MqttMessage message = new MqttMessage(encodedPayload); client.publish(topic, message); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Unenroll", "Unenroll success")); + broadcastReceivedLog(MQTT_SEND, "Unenroll", "Unenroll success"); // clear cache mqttData.deleteAll(); @@ -416,8 +418,8 @@ public boolean unenroll() { return true; } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on unenroll", ex.getMessage())); + FlyveLog.e(this.getClass().getName() + ", unenroll", ex.getMessage()); + broadcastReceivedLog(ERROR, "Error on unenroll", ex.getMessage()); return false; } } @@ -434,10 +436,10 @@ public void sendKeepAlive() { encodedPayload = payload.getBytes(UTF_8); MqttMessage message = new MqttMessage(encodedPayload); IMqttDeliveryToken token = client.publish(topic, message); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "PING", "ID: " + token.getMessageId())); + broadcastReceivedLog(MQTT_SEND, "PING", "ID: " + token.getMessageId()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on sendKeepAlive", ex.getMessage())); + FlyveLog.e(this.getClass().getName() + ", sendKeepAlive", ex.getMessage()); + broadcastReceivedLog(ERROR, "Error on sendKeepAlive", ex.getMessage()); } } @@ -454,12 +456,12 @@ public void sendInventory(String payload) { IMqttDeliveryToken token = client.publish(topic, message); // send broadcast - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Send Inventory", "ID: " + token.getMessageId())); + broadcastReceivedLog(MQTT_SEND, "Send Inventory", "ID: " + token.getMessageId()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", sendInventory", ex.getMessage()); // send broadcast - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on sendKeepAlive", ex.getMessage())); + broadcastReceivedLog(ERROR, "Error on sendKeepAlive", ex.getMessage()); } } @@ -474,12 +476,12 @@ public void sendTaskStatus(String taskId, String status) { IMqttDeliveryToken token = client.publish(topic, message); // send broadcast - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Send Inventory", "ID: " + token.getMessageId())); + broadcastReceivedLog(MQTT_SEND, "Send Inventory", "ID: " + token.getMessageId()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", sendTaskStatus", ex.getMessage()); // send broadcast - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on sendKeepAlive", ex.getMessage())); + broadcastReceivedLog(ERROR, "Error on sendKeepAlive", ex.getMessage()); } } @@ -495,28 +497,28 @@ public void sendStatusVersion() { encodedPayload = payload.getBytes(UTF_8); MqttMessage message = new MqttMessage(encodedPayload); IMqttDeliveryToken token = client.publish(topic, message); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Send Status Version", "ID: " + token.getMessageId())); + broadcastReceivedLog(MQTT_SEND, "Send Status Version", "ID: " + token.getMessageId()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on sendStatusVersion", ex.getMessage())); + FlyveLog.e(this.getClass().getName() + ", sendStatusVersion",ex.getMessage()); + broadcastReceivedLog(ERROR, "Error on sendStatusVersion", ex.getMessage()); } } /** * Send the Status version of the agent - * payload: {"online": "true"} + * payload: {"online": true} */ public void sendOnlineStatus(Boolean status) { String topic = mTopic + "/Status/Online"; - String payload = "{\"online\": \"" + Boolean.toString( status ) + "\"}"; + String payload = "{\"online\": " + Boolean.toString( status ) + "}"; byte[] encodedPayload = new byte[0]; try { encodedPayload = payload.getBytes(UTF_8); MqttMessage message = new MqttMessage(encodedPayload); IMqttDeliveryToken token = client.publish(topic, message); - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Send Online Status", "ID: " + token.getMessageId())); + broadcastReceivedLog(MQTT_SEND, "Send Online Status", "ID: " + token.getMessageId()); } catch (Exception ex) { - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on sendStatusVersion", ex.getMessage())); + broadcastReceivedLog(ERROR, "Error on sendStatusVersion", ex.getMessage()); } } @@ -526,11 +528,25 @@ public void sendOnlineStatus(Boolean status) { */ public void sendGPS() { - new FastLocationProvider().getLocation(context, new FastLocationProvider.LocationResult() { + FastLocationProvider fastLocationProvider = new FastLocationProvider(); + Boolean isAvailable = fastLocationProvider.getLocation(context, new FastLocationProvider.LocationResult() { @Override public void gotLocation(Location location) { + String topic = mTopic + "/Status/Geolocation"; + if(location == null) { - FlyveLog.d("without location yet..."); + // if the GPS not response then send this character ? + FlyveLog.e(this.getClass().getName() + ", sendGPS", "without location yet..."); + try { + byte[] encodedPayload; + String payload = "{\"datetime\":" + Helpers.getUnixTime() + ",\"gps\":\"off\"}"; + encodedPayload = payload.getBytes(UTF_8); + MqttMessage message = new MqttMessage(encodedPayload); + client.publish(topic, message); + } catch (Exception ex) { + FlyveLog.e(this.getClass().getName() + ", sendGPS", "Fail sending the ? payload"); + } + } else { FlyveLog.d("lat: " + location.getLatitude() + " lon: " + location.getLongitude()); @@ -544,7 +560,6 @@ public void gotLocation(Location location) { jsonGPS.put("longitude", longitude); jsonGPS.put("datetime", Helpers.getUnixTime()); - String topic = mTopic + "/Status/Geolocation"; String payload = jsonGPS.toString(); byte[] encodedPayload; @@ -553,23 +568,37 @@ public void gotLocation(Location location) { IMqttDeliveryToken token = client.publish(topic, message); // send broadcast - broadcastReceivedLog(Helpers.broadCastMessage(MQTT_SEND, "Send Geolocation", "ID: " + token.getMessageId())); + broadcastReceivedLog(MQTT_SEND, "Sended Geolocation", "ID: " + token.getMessageId()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); - broadcastReceivedLog(Helpers.broadCastMessage(ERROR, "Error on GPS location", ex.getMessage())); + FlyveLog.e(this.getClass().getName() + ", sendGPS", ex.getMessage()); + broadcastReceivedLog(ERROR, "Error on GPS location", ex.getMessage()); } } } }); + + if(!isAvailable) { + String topic = mTopic + "/Status/Geolocation"; + try { + byte[] encodedPayload; + String payload = "{\"datetime\":" + Helpers.getUnixTime() + ",\"gps\":\"off\"}"; + encodedPayload = payload.getBytes(UTF_8); + MqttMessage message = new MqttMessage(encodedPayload); + client.publish(topic, message); + } catch (Exception ex) { + FlyveLog.e(this.getClass().getName() + ", sendGPS", "Fail sending the ? payload"); + } + + } } /** * Broadcast the received log * @param message */ - private void broadcastReceivedLog(String message){ + private void broadcastReceivedLog(String type, String title, String message){ // write log file - FlyveLog.f(message, FlyveLog.FILE_NAME_LOG); + FlyveLog.f(type, title, message); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesFiles.java b/app/src/main/java/org/flyve/mdm/agent/services/PoliciesFiles.java index 1b69adabe8..42467d3827 100644 --- a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesFiles.java +++ b/app/src/main/java/org/flyve/mdm/agent/services/PoliciesFiles.java @@ -32,6 +32,7 @@ import org.flyve.mdm.agent.R; import org.flyve.mdm.agent.core.Routes; +import org.flyve.mdm.agent.data.database.MqttData; import org.flyve.mdm.agent.data.database.setup.AppDataBase; import org.flyve.mdm.agent.ui.MDMAgent; import org.flyve.mdm.agent.utils.AppThreadManager; @@ -42,6 +43,7 @@ import org.json.JSONObject; import java.io.File; +import java.util.HashMap; import static org.flyve.mdm.agent.ui.MDMAgent.getMqttClient; @@ -49,6 +51,7 @@ public class PoliciesFiles extends AsyncTask { private Context context; private Routes routes; + private MqttData cache; /** * This constructor loads the context of the current class @@ -57,6 +60,7 @@ public class PoliciesFiles extends AsyncTask { public PoliciesFiles(Context context) { this.context = context; routes = new Routes(context); + cache = new MqttData(context); } /** @@ -116,11 +120,11 @@ public Boolean downloadFile(String path, String id, String sessionToken) { try { filePath = new StorageFolder(context).convertPath(path); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", downloadFile", ex.getMessage()); } - final String url = routes.pluginFlyvemdmFile(id, sessionToken); - String completeFilePath = download(url, filePath); + final String url = routes.pluginFlyvemdmFile(id); + String completeFilePath = download(url, filePath, sessionToken); return(completeFilePath.equalsIgnoreCase("")); } @@ -146,11 +150,11 @@ public Boolean downloadApk(String appName, String id, String sessionToken) { } catch (Exception ex) { AppThreadManager manager = MDMAgent.getAppThreadManager(); manager.finishProcess(context); - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", downloadApk", ex.getMessage()); } - final String url = routes.pluginFlyvemdmPackage(id, sessionToken); - String completeFilePath = download(url, filePath); + final String url = routes.pluginFlyvemdmPackage(id); + String completeFilePath = download(url, filePath, sessionToken); if(completeFilePath.equalsIgnoreCase("")) { AppThreadManager manager = MDMAgent.getAppThreadManager(); manager.finishProcess(context); @@ -179,28 +183,30 @@ public Boolean downloadApk(String appName, String id, String sessionToken) { * @param path String path to save * @return String complete path with name of the file */ - private String download(final String url, final String path) { + private String download(final String url, final String path, String sessionToken) { + HashMap header = new HashMap(); + header.put("Session-Token", sessionToken); - String data = ConnectionHTTP.getSyncWebData(url, "GET",null); + String data = ConnectionHTTP.getSyncWebData(url, "GET",header); if(data.contains("ERROR")) { Helpers.sendToNotificationBar(context, context.getResources().getString(R.string.download_file_fail)); AppThreadManager manager = MDMAgent.getAppThreadManager(); manager.finishProcess(context); - FlyveLog.e(data + "\n" + url); + FlyveLog.e(this.getClass().getName() + ", download", data + "\n" + url); } else { try { JSONObject jsonObjDownload = new JSONObject(data); - return getFile(jsonObjDownload, path, url, data); + return getFile(jsonObjDownload, path, url, data, sessionToken); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", download", ex.getMessage() + "\n" + url); return ""; } } // endif Exception return ""; } - private String getFile(JSONObject jsonObjDownload, String path, String url, String data) { + private String getFile(JSONObject jsonObjDownload, String path, String url, String data, String sessionToken) { String fileName = ""; @@ -227,7 +233,7 @@ private String getFile(JSONObject jsonObjDownload, String path, String url, Stri return file.getAbsolutePath(); } - Boolean isSave = ConnectionHTTP.getSyncFile(url, filePath, new ConnectionHTTP.ProgressCallback() { + Boolean isSave = ConnectionHTTP.getSyncFile(url, filePath , sessionToken, new ConnectionHTTP.ProgressCallback() { @Override public void progress(int value) { publishProgress(value); @@ -243,13 +249,13 @@ public void progress(int value) { return file.getAbsolutePath(); } else { publishProgress(100); - FlyveLog.e("Download fail: " + data); + FlyveLog.e(this.getClass().getName() + ", getFile", "Download fail: " + data + "\n" + url); return ""; } } catch(Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getFile", ex.getMessage()+ "\n" + url); return ""; } } @@ -275,7 +281,7 @@ public boolean removeFile(String filePath) { File file = new File(realPath); return file.delete(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", removeFile", ex.getMessage() + "\n" + filePath); return false; } } @@ -292,7 +298,7 @@ public int removeApk(String mPackage){ try { context.startActivity(intent); } catch (ActivityNotFoundException e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(this.getClass().getName() + ", removeApk", e.getMessage() + "\n" + mPackage); return 0; } return 1; diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/EditUserActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/EditUserActivity.java index 980269c816..d19e6869d1 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/EditUserActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/EditUserActivity.java @@ -89,7 +89,7 @@ protected void onCreate(Bundle savedInstanceState) { try { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } toolbar.setNavigationOnClickListener(new View.OnClickListener() { @@ -235,7 +235,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { strPicture = Helpers.bitmapToString(bitmap); imgPhoto.setImageBitmap(bitmap); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onActivityResult", ex.getMessage()); } } } @@ -253,7 +253,7 @@ private void onSelectFromGalleryResult(Intent data) { strPicture = Helpers.bitmapToString(bm); imgPhoto.setImageBitmap(bm); } catch (IOException e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onSelectFromGalleryResult", e.getMessage()); } } } @@ -266,7 +266,7 @@ public void loadSuccess(UserSchema userSchema) { try { imgPhoto.setImageBitmap(Helpers.stringToBitmap(userSchema.getPicture())); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadSuccess", ex.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/EnrollmentActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/EnrollmentActivity.java index 1a0e4ffed4..d289a0e770 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/EnrollmentActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/EnrollmentActivity.java @@ -98,7 +98,7 @@ protected void onCreate(Bundle savedInstanceState) { try { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } toolbar.setNavigationOnClickListener(new View.OnClickListener() { @@ -199,7 +199,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { try { filePhoto = new File(presenter.getPhoto().getPath()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onActivityResult", ex.getMessage()); return; } @@ -213,7 +213,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { try { bitmap = Helpers.modifyOrientation(bitmap, filePhoto.getAbsolutePath()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onActivityResult", ex.getMessage()); } strPicture = Helpers.bitmapToString(bitmap); @@ -233,7 +233,7 @@ private void onSelectFromGalleryResult(Intent data) { try { bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData()); } catch (IOException e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onSelectFromGalleryResult", e.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/ErrorActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/ErrorActivity.java index 7056325829..21ac28e836 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/ErrorActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/ErrorActivity.java @@ -48,7 +48,7 @@ protected void onCreate(Bundle savedInstanceState) { TextView txtMessage = findViewById(R.id.txtMessage); txtMessage.setText(message); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } Button btnClose = findViewById(R.id.btnClose); diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentFeedback.java b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentFeedback.java index 29d70eaf82..28f8e98f03 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentFeedback.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentFeedback.java @@ -168,7 +168,7 @@ private JSONObject createFeedbackJSON(Switch[] sw){ jsonPolicy.put("message", editMessage.getText().toString()); jsonFeedback.put("feedback", jsonPolicy); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", createFeedbackJSON", ex.getMessage()); } return jsonFeedback; diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentInformation.java b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentInformation.java index 8d9fd875e9..50219b5a99 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentInformation.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentInformation.java @@ -186,7 +186,7 @@ private void loadSupervisor() { txtDescriptionSupervisor.setText(supervisor.getEmail()); } } catch(Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadSupervisor", ex.getMessage()); } } @@ -212,12 +212,12 @@ private void loadClientInfo() { try { imgUser.setImageBitmap(Helpers.stringToBitmap(user.getPicture())); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadClientInfo", ex.getMessage()); imgUser.setImageResource(R.drawable.ic_user_round); } } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadClientInfo", ex.getMessage()); } } @@ -251,7 +251,7 @@ public void onReceive(Context context, Intent intent) { statusMQTT(Boolean.parseBoolean(msg)); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", broadcastServiceStatus", ex.getMessage()); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentLog.java b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentLog.java index 61766488df..1994e4effb 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentLog.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentLog.java @@ -36,11 +36,12 @@ import org.flyve.mdm.agent.R; import org.flyve.mdm.agent.adapter.LogAdapter; +import org.flyve.mdm.agent.data.database.MDMLogData; +import org.flyve.mdm.agent.data.database.entity.MDMLog; import org.flyve.mdm.agent.utils.FlyveLog; -import org.flyve.mdm.agent.utils.LogFileReader; +import org.json.JSONObject; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -50,6 +51,7 @@ public class FragmentLog extends Fragment { private List> arrData; private ListView lst; private ProgressBar pb; + private MDMLogData logsData; /** * Called to have the fragments instantiate its user interface View @@ -66,11 +68,13 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, txtMessage = v.findViewById(R.id.txtMessage); pb = v.findViewById(R.id.progressBar); + logsData = new MDMLogData(FragmentLog.this.getContext()); + FloatingActionButton btnDelete = v.findViewById(R.id.btnDelete); btnDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - FlyveLog.clearLog( FlyveLog.FILE_NAME_LOG ); + logsData.deleteAll(); arrData.clear(); loadLogFile(); } @@ -100,29 +104,42 @@ public void onRefresh() { private void loadLogFile() { pb.setVisibility(View.VISIBLE); - LogFileReader.loadLog(FlyveLog.FILE_NAME_LOG, new LogFileReader.LogFileCallback() { - @Override - public void onSuccess(List> data) { - pb.setVisibility(View.GONE); - - // order data last first - Collections.reverse(data); - arrData = data; - if(arrData.isEmpty()) { - txtMessage.setText(getResources().getString(R.string.without_data_to_show)); - } else { - txtMessage.setText(""); - } - - LogAdapter mAdapter = new LogAdapter(FragmentLog.this.getActivity(), arrData); - lst.setAdapter(mAdapter); + MDMLog[] logs = logsData.getAllLogs(); + for(MDMLog log : logs) { + HashMap data = addLine(log.description); + if(data!=null) { + arrData.add(data); } + } - @Override - public void onError(String error) { - pb.setVisibility(View.GONE); - txtMessage.setText(getResources().getString(R.string.we_can_not_show_the_log)); - } - }); + if(arrData.isEmpty()) { + txtMessage.setText(getResources().getString(R.string.without_data_to_show)); + } else { + txtMessage.setText(""); + } + + LogAdapter mAdapter = new LogAdapter(FragmentLog.this.getActivity(), arrData); + lst.setAdapter(mAdapter); + pb.setVisibility(View.GONE); } + + private HashMap addLine(String line) { + try { + HashMap map = new HashMap<>(); + + JSONObject json = new JSONObject(line); + + map.put("type", json.getString("type")); + map.put("title", json.getString("title")); + map.put("body", json.getString("body")); + map.put("date", json.getString("date")); + + return map; + } catch (Exception ex) { + FlyveLog.e(this.getClass().getName() + ", addLine", "ERROR: " + line + " - " + ex.getMessage()); + } + + return null; + } + } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentSlideWalkthrough.java b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentSlideWalkthrough.java index 220351b745..ecad4a9521 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentSlideWalkthrough.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentSlideWalkthrough.java @@ -77,7 +77,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mMessage = walkthroughData.getMessage(); mImage = walkthroughData.getImage(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreateView", ex.getMessage()); } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentTestPolicies.java b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentTestPolicies.java index abe47860e0..14671b0271 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/FragmentTestPolicies.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/FragmentTestPolicies.java @@ -45,17 +45,19 @@ import org.flyve.mdm.agent.policies.NFCPolicy; import org.flyve.mdm.agent.policies.StorageEncryptionPolicy; import org.flyve.mdm.agent.policies.WifiPolicy; -import org.flyve.mdm.agent.services.PoliciesConnectivity; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.utils.ConnectionHTTP; import org.flyve.mdm.agent.utils.FlyveLog; import org.flyve.mdm.agent.utils.Helpers; import org.flyve.mdm.agent.utils.StorageFolder; +import org.flyve.policies.manager.AndroidPolicies; +import org.flyve.policies.manager.CustomPolicies; public class FragmentTestPolicies extends Fragment { private PoliciesData cache; - private PoliciesDeviceManager mdm; + private AndroidPolicies mdm; + private CustomPolicies customPolicies; private static final int PRIORITY = 0; @Override @@ -66,8 +68,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, View v = inflater.inflate(R.layout.fragment_test_policies, container, false); cache = new PoliciesData(FragmentTestPolicies.this.getContext()); - mdm = new PoliciesDeviceManager(FragmentTestPolicies.this.getContext()); - + mdm = new AndroidPolicies(FragmentTestPolicies.this.getContext(),FlyveAdminReceiver.class); + customPolicies = new CustomPolicies(FragmentTestPolicies.this.getContext()); Switch swGPS = v.findViewById(R.id.swGPS); swGPS.setChecked(Boolean.parseBoolean(cache.getValue(GPSPolicy.POLICY_NAME).value)); @@ -75,7 +77,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { - PoliciesConnectivity.disableGps(isChecked); + customPolicies.disableGps(isChecked); } } }); @@ -85,7 +87,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { swAirplane.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - PoliciesConnectivity.disableAirplaneMode(isChecked); + customPolicies.disableAirplaneMode(isChecked); } }); @@ -95,7 +97,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { - PoliciesConnectivity.disableBluetooth(isChecked); + customPolicies.disableBluetooth(isChecked); } } }); @@ -106,7 +108,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { - PoliciesConnectivity.disableWifi(isChecked); + customPolicies.disableWifi(isChecked); } } }); @@ -117,7 +119,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { - PoliciesConnectivity.disableNFC(isChecked); + customPolicies.disableNFC(isChecked); } } }); @@ -128,7 +130,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { - PoliciesConnectivity.disableHostpotTethering(isChecked); + customPolicies.disableHostpotTethering(isChecked); } } }); @@ -139,7 +141,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { - PoliciesConnectivity.disableMobileLine(isChecked); + customPolicies.disableMobileLine(isChecked); } } }); @@ -148,7 +150,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { btnLock.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mdm.lockScreen(); + mdm.lockScreen(LockActivity.class); } }); @@ -185,7 +187,7 @@ public void onClick(View v) { try { Helpers.deleteMQTTCache(FragmentTestPolicies.this.getContext()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreateView", ex.getMessage()); } } }); @@ -230,7 +232,7 @@ public void onClick(View v) { btnPasswordEnable.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mdm.enablePassword(true, ""); + mdm.enablePassword(true, "", MainActivity.class); } }); @@ -243,7 +245,7 @@ public void run() { // String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath() + "/CHANGELOG.md"; FlyveLog.d(path); - ConnectionHTTP.getSyncFile("https://raw.githubusercontent.com/flyve-mdm/android-mdm-agent/develop/CHANGELOG.md", path, new ConnectionHTTP.ProgressCallback() { + ConnectionHTTP.getSyncFile("https://raw.githubusercontent.com/flyve-mdm/android-mdm-agent/develop/CHANGELOG.md", path, "", new ConnectionHTTP.ProgressCallback() { @Override public void progress(int value) { @@ -262,7 +264,7 @@ public void progress(int value) { public void onClick(View v) { String path = new StorageFolder(getContext()).getDocumentsDir() + "/flyve-apk.apk"; FlyveLog.d(path); - ConnectionHTTP.getSyncFile("https://f-droid.org/repo/org.flyve.inventory.agent_37960.apk", path, new ConnectionHTTP.ProgressCallback() { + ConnectionHTTP.getSyncFile("https://f-droid.org/repo/org.flyve.inventory.agent_37960.apk", path, "", new ConnectionHTTP.ProgressCallback() { @Override public void progress(int value) { diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/InstallAppActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/InstallAppActivity.java index dcdef30fa5..9451e8916b 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/InstallAppActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/InstallAppActivity.java @@ -78,14 +78,14 @@ protected void onCreate(Bundle savedInstanceState) { finish(); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); finish(); } } else { try { installApk(appPath); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } } } else { @@ -150,7 +150,7 @@ public void installApk(String file) { try { startActivityForResult(intent, APP_INSTALL_REQUEST); } catch (ActivityNotFoundException e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(this.getClass().getName() + ", installApk", e.getMessage()); } } @@ -163,7 +163,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { FlyveLog.d("Package Installation Success"); status = "2"; // installed } else { - FlyveLog.e("Installation failed or is installed"); + FlyveLog.e(this.getClass().getName() + ", onActivityResult", "Installation failed or is installed"); } } @@ -187,7 +187,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onActivityResult", ex.getMessage()); } finish(); diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/LockActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/LockActivity.java index 3280191801..a9b56a6c40 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/LockActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/LockActivity.java @@ -121,7 +121,7 @@ private void loadSupervisor() { txtDescriptionSupervisor.setText(supervisor.getEmail()); } } catch(Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadSupervisor", ex.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/MainActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/MainActivity.java index 33e901391b..80c4f19cb2 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/MainActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/MainActivity.java @@ -40,10 +40,11 @@ import org.flyve.mdm.agent.R; import org.flyve.mdm.agent.adapter.DrawerAdapter; import org.flyve.mdm.agent.data.localstorage.AppData; -import org.flyve.mdm.agent.services.DeviceLockedController; +import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; import org.flyve.mdm.agent.services.MQTTService; -import org.flyve.mdm.agent.services.PoliciesDeviceManager; import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.manager.AndroidPolicies; +import org.flyve.policies.manager.DeviceLockedController; import java.util.ArrayList; import java.util.HashMap; @@ -59,21 +60,6 @@ public class MainActivity extends AppCompatActivity { private Intent mServiceIntent; private AppData cache; - /** - * Perform the final clenup before the activity is destroyed - */ - @Override - public void onDestroy() { - // stop the service - if(mServiceIntent!=null) { - stopService(mServiceIntent); - } - - FlyveLog.i("onDestroy!"); - - super.onDestroy(); - } - /** * Called when the activity is starting * @param savedInstanceState if the activity is being re-initialized, it contains the data it most recently supplied @@ -124,7 +110,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) extra = "DeployApp"; break; case "PasswordPolicy": - new PoliciesDeviceManager(MainActivity.this).enablePassword(true, ""); + AndroidPolicies androidPolicies = new AndroidPolicies(MainActivity.this, FlyveAdminReceiver.class); + androidPolicies.enablePassword(true, "", MainActivity.class); } } @@ -139,7 +126,7 @@ private void checkNotifications() { NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(1009); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", checkNotifications", ex.getMessage()); } } } @@ -299,7 +286,7 @@ public void loadListDrawer(int menuItemSelected, String extra) { selectedItem = arrDrawer.get(menuItemSelected); loadFragment(selectedItem, extra); } catch(Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadListDrawer", ex.getMessage()); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/PreviewSupervisorActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/PreviewSupervisorActivity.java index acf79291a4..4f4a3c2734 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/PreviewSupervisorActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/PreviewSupervisorActivity.java @@ -52,7 +52,7 @@ protected void onCreate(Bundle savedInstanceState) { try { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } toolbar.setNavigationOnClickListener(new View.OnClickListener() { @@ -91,7 +91,7 @@ public void onClick(View v) { txtWebsite.setText(supervisor.getWebsite()); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/PreviewUserActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/PreviewUserActivity.java index fb0ad1802e..1998baaf54 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/PreviewUserActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/PreviewUserActivity.java @@ -56,7 +56,7 @@ protected void onCreate(Bundle savedInstanceState) { try { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onCreate", ex.getMessage()); } toolbar.setNavigationOnClickListener(new View.OnClickListener() { @@ -147,7 +147,7 @@ private void loadData() { TextView txtAdministrativeNumber = findViewById(R.id.txtAdministrativeNumber); txtAdministrativeNumber.setText(user.getAdministrativeNumber()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", loadData", ex.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/ui/StartEnrollmentActivity.java b/app/src/main/java/org/flyve/mdm/agent/ui/StartEnrollmentActivity.java index 397ee6c8c5..91d520dcb8 100644 --- a/app/src/main/java/org/flyve/mdm/agent/ui/StartEnrollmentActivity.java +++ b/app/src/main/java/org/flyve/mdm/agent/ui/StartEnrollmentActivity.java @@ -160,6 +160,15 @@ public void onClick(View v) { public void lintSuccess(DeeplinkSchema deeplinkSchema) { presenter.saveMQTTConfig(StartEnrollmentActivity.this, deeplinkSchema.getUrl(), deeplinkSchema.getUserToken(), deeplinkSchema.getInvitationToken()); presenter.saveSupervisor(StartEnrollmentActivity.this, deeplinkSchema.getName(), deeplinkSchema.getPhone(), deeplinkSchema.getWebsite(), deeplinkSchema.getEmail()); + + TextView txtURL = findViewById(R.id.txtURL); + txtURL.setText(getResources().getString(R.string.deeplink_url, deeplinkSchema.getUrl().substring(0,15))); + + TextView txtInvitationToken = findViewById(R.id.txtInvitationToken); + txtInvitationToken.setText(getResources().getString(R.string.deeplink_invitation_token, deeplinkSchema.getInvitationToken().substring(0,15))); + + TextView txtUserToken = findViewById(R.id.txtUserToken); + txtUserToken.setText(getResources().getString(R.string.deeplink_user_token, deeplinkSchema.getUserToken().substring(0,15))); } @Override diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/AppThreadManager.java b/app/src/main/java/org/flyve/mdm/agent/utils/AppThreadManager.java index 27112e4ce2..49fae9cfcd 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/AppThreadManager.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/AppThreadManager.java @@ -41,9 +41,7 @@ public class AppThreadManager { private static AppThreadManager singleton; - private int index; private MqttAndroidClient client; - private Boolean lock; private List item; @@ -56,9 +54,7 @@ public static AppThreadManager getAppThreadManager(MqttAndroidClient client) { private AppThreadManager(MqttAndroidClient client) { this.item = new ArrayList<>(); - this.index = 0; this.client = client; - this.lock = false; } public void add(Context context, JSONObject jsonObj) { @@ -78,7 +74,6 @@ public void finishProcess(Context context) { if(!item.isEmpty()) { item.remove(0); } - this.lock = false; FlyveLog.i("Finish Processing"); process(context); @@ -86,8 +81,7 @@ public void finishProcess(Context context) { } public void process(Context context) { - if(!item.isEmpty() && !lock) { - this.lock = true; + if(!item.isEmpty()) { FlyveLog.i("Processing item 0 from item size -> " + item.size()); JSONObject jsonObj = item.get(0); @@ -115,7 +109,7 @@ public void process(Context context) { finishProcess(context); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/ConnectionHTTP.java b/app/src/main/java/org/flyve/mdm/agent/utils/ConnectionHTTP.java index 56b2d869c8..1d6bf8cac9 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/ConnectionHTTP.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/ConnectionHTTP.java @@ -25,7 +25,6 @@ import android.os.Handler; import android.os.Looper; -import android.util.Log; import org.json.JSONObject; @@ -96,7 +95,7 @@ public static String getSyncWebData(String url, String method, Map header = new HashMap(); header.put("Accept","application/octet-stream"); header.put("Content-Type","application/json"); + header.put("Session-Token", sessionToken); StringBuilder logHeader = new StringBuilder(); for (Map.Entry entry : header.entrySet()) { @@ -207,7 +207,7 @@ public static Boolean getSyncFile(final String url, final String pathFile, final return true; } catch (final Exception ex) { - FlyveLog.e(ex.getClass() +" : " + ex.getMessage()); + FlyveLog.e(ConnectionHTTP.class.getClass().getName() + ", getSyncFile", ex.getClass() +" : " + ex.getMessage()); return false; } finally { @@ -215,7 +215,7 @@ public static Boolean getSyncFile(final String url, final String pathFile, final try { output.close(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(ConnectionHTTP.class.getClass().getName() + ", getSyncFile", ex.getMessage()); } } } @@ -295,7 +295,7 @@ public void run() { public void run() { callback.callback(EXCEPTION_HTTP + ex.getMessage()); - FlyveLog.e(ex.getClass() + " : " + ex.getMessage()); + FlyveLog.e(ConnectionHTTP.class.getClass().getName() + ", getWebData",ex.getClass() + " : " + ex.getMessage()); } }); } @@ -323,7 +323,7 @@ private static String inputStreamToString(final InputStream stream) throws IOExc private static void Log(String message){ // write log file - Log.d("HTTP", message); + FlyveLog.e(ConnectionHTTP.class.getClass().getName() + ", Log", message); } diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoAbout.java b/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoAbout.java index 92e0311bbb..363313cbed 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoAbout.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoAbout.java @@ -40,7 +40,7 @@ public EnvInfoAbout(Context context) { InputStream inputStream = assetManager.open("about.properties"); properties.load(inputStream); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", EnvInfoAbout", ex.getMessage()); isLoaded = false; } isLoaded = true; diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoSetup.java b/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoSetup.java index a2e807a3d0..ef0e302a5b 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoSetup.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/EnvInfoSetup.java @@ -40,7 +40,7 @@ public EnvInfoSetup(Context context) { InputStream inputStream = assetManager.open("setup.properties"); properties.load(inputStream); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", EnvInfoSetup", ex.getMessage()); isLoaded = false; } isLoaded = true; diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/FastLocationProvider.java b/app/src/main/java/org/flyve/mdm/agent/utils/FastLocationProvider.java index d3c949afaa..9e7e171eef 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/FastLocationProvider.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/FastLocationProvider.java @@ -54,13 +54,13 @@ public boolean getLocation(Context context, LocationResult result) { try { gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);} catch(Exception ex){ - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getLocation",ex.getMessage()); } try { networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); } catch(Exception ex){ - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getLocation",ex.getMessage()); } //don't start listeners if no provider is enabled @@ -77,11 +77,11 @@ public boolean getLocation(Context context, LocationResult result) { locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork); } } catch (SecurityException ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", getLocation", ex.getMessage()); } timer = new Timer(); - timer.schedule(new GetLastLocation(), 10000); + timer.schedule(new GetLastLocation(), 3000); return true; } @@ -143,7 +143,8 @@ public void run() { netLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } } catch (SecurityException ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", GetLastLocation", ex.getMessage()); + locationResult.gotLocation(null); } //if there are both values use the latest one diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/FlyveLog.java b/app/src/main/java/org/flyve/mdm/agent/utils/FlyveLog.java index 979828d000..079084ba9f 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/FlyveLog.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/FlyveLog.java @@ -24,18 +24,12 @@ package org.flyve.mdm.agent.utils; import android.os.Environment; -import android.util.Log; import com.orhanobut.logger.Logger; +import org.flyve.mdm.agent.data.database.MDMLogData; import org.flyve.mdm.agent.ui.MDMAgent; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; - /** * This is a Log wrapper */ @@ -101,10 +95,10 @@ public static void i(String message, Object... args) { * @param message String message * @param args Objects */ - public static void e(Throwable throwable, String message, Object... args) { + public static void e(String where, Throwable throwable, String message, Object... args) { if(MDMAgent.getIsDebuggable() && message != null) { Logger.e(throwable, message, args); - f(message, FILE_NAME_FEEDBACK); + f("ERROR", where, message); } } @@ -113,10 +107,10 @@ public static void e(Throwable throwable, String message, Object... args) { * @param message String message * @param args Objects */ - public static void e(String message, Object... args) { + public static void e(String where, String message, Object... args) { if(MDMAgent.getIsDebuggable() && message != null) { Logger.e(message, args); - f(message, FILE_NAME_FEEDBACK); + f("Error", where, message); } } @@ -154,101 +148,16 @@ public static void xml(String xml) { /** * Logs the message in a directory * @param message - * @param filename */ - public static void f(String message, String filename) { - String state = Environment.getExternalStorageState(); - File logFile; - - if (Environment.MEDIA_MOUNTED.equals(state)) { - File dir = new File(FLYVE_PATH); - if (!dir.exists()) { - FlyveLog.d("Create directory"); - dir.mkdirs(); - } - - logFile = new File(FLYVE_PATH + filename); - } else { - logFile = new File(MDMAgent.getInstance().getCacheDir(), filename); - } - - if (!logFile.exists()) { - try { - Boolean log = logFile.createNewFile(); - FlyveLog.d("Create File on f %s", log); - } catch (IOException ex) { - FlyveLog.i(ex.getMessage()); - } - } - - FileWriter fw = null; - - try { - //BufferedWriter for performance, true to set append to file flag - fw = new FileWriter(logFile, true); - BufferedWriter buf = new BufferedWriter(fw); - - buf.write(message); - buf.newLine(); - buf.flush(); - buf.close(); - fw.close(); - } - catch (IOException ex) { - Log.e("", ex.getMessage()); - } - finally { - if(fw!=null) { - try { - fw.close(); - } catch(Exception ex) { - Log.i("", ex.getMessage()); - } - } - } - + public static void f(String type, String title, String message) { + type = (type == null) ? "" : type; + title = (title == null) ? "" : title; + message = (message == null) ? "" : message; + + String msg = Helpers.broadCastMessage(type, title, message); + MDMLogData log = new MDMLogData(MDMAgent.getInstance()); + log.addLog(msg); } - /** - * Clear the log - * @param filename - */ - public static void clearLog(String filename) { - String state = Environment.getExternalStorageState(); - File logFile; - - if (Environment.MEDIA_MOUNTED.equals(state)) { - File dir = new File(FLYVE_PATH); - if (!dir.exists()) { - FlyveLog.d("Created Directory"); - dir.mkdirs(); - } - - logFile = new File(FLYVE_PATH + filename); - } else { - logFile = new File(MDMAgent.getInstance().getCacheDir(), filename); - } - - FileWriter fw = null; - try { - //BufferedWriter for performance, true to set append to file flag - fw = new FileWriter(logFile, false); - PrintWriter pwOb = new PrintWriter(fw, false); - pwOb.flush(); - pwOb.close(); - } - catch (IOException ex) { - e(ex.getMessage()); - } - finally { - if(fw!=null) { - try { - fw.close(); - } catch(Exception ex) { - FlyveLog.e(ex.getMessage()); - } - } - } - } } diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/Helpers.java b/app/src/main/java/org/flyve/mdm/agent/utils/Helpers.java index 98ab10d07d..cd58a849ee 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/Helpers.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/Helpers.java @@ -116,7 +116,7 @@ public static void installApk(Context context, String id, String appPath) { appVersionCode = String.valueOf(packageInfo.versionCode); appVersionName = String.valueOf(packageInfo.versionName); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", installApk", ex.getMessage()); } if(appsArray.length <=0) { @@ -162,9 +162,9 @@ public static void openErrorActivity(Context context, String message) { context.startActivity(intent); } - public static void storeLog(String message) { + public static void storeLog(String type, String title, String message) { // write log file - FlyveLog.f(message, FlyveLog.FILE_NAME_LOG); + FlyveLog.f(type, title, message); } @@ -188,7 +188,7 @@ public static void installApkSilently(String filename) { Process proc = Runtime.getRuntime().exec(new String[]{"su", "-c", command}); proc.waitFor(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", installApkSilently", ex.getMessage()); } } else { FlyveLog.d("File " + file.getAbsolutePath() + " does not exists"); @@ -200,7 +200,7 @@ public static Drawable getApplicationImage(Context context, String packageApp) { return context.getPackageManager().getApplicationIcon(packageApp); } catch (PackageManager.NameNotFoundException ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", getApplicationImage", ex.getMessage()); return null; } } @@ -212,7 +212,7 @@ public static void hideKeyboard(Activity activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } catch (NullPointerException ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", hideKeyboard", ex.getMessage()); } } } @@ -259,7 +259,7 @@ public static void deleteMQTTCache(Context context) { FlyveLog.d(path.getAbsolutePath()); deleteFolder(path.getAbsolutePath()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", deleteMQTTCache", ex.getMessage()); } } @@ -273,7 +273,7 @@ public static void deleteFolder(String path) { try { runtime.exec(deleteCmd); } catch (IOException ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", deleteFolder", ex.getMessage()); } } } @@ -320,7 +320,7 @@ public static void sendToNotificationBar(Context context, int id, String title, notificationManager.createNotificationChannel(notificationChannel); builder.setChannelId(notificationChannelId); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", sendToNotificationBar", ex.getMessage()); } } @@ -337,7 +337,7 @@ public static void sendToNotificationBar(Context context, int id, String title, try { notificationManager.notify(id, builder.build()); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", deleteFolder", ex.getMessage()); } } @@ -363,7 +363,7 @@ public static String isSystemApp(Context context) { return "1"; } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", isSystemApp", ex.getMessage()); return "0"; } } @@ -409,7 +409,7 @@ public static String base64decode(String text) { byte[] bdata = Base64.decode(text, Base64.DEFAULT); rtext = new String(bdata, "UTF-8"); } catch (UnsupportedEncodingException e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", base64decode", e.getMessage()); } return rtext.trim(); } @@ -428,7 +428,7 @@ public static String base64encode(String text) { rtext = rtext.replaceAll("-", "+"); rtext = rtext.replaceAll(" ", "+"); } catch (UnsupportedEncodingException e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", base64decode", e.getMessage()); } return rtext; @@ -540,7 +540,7 @@ public static void deleteAllSMS(Context context) { FlyveLog.d("Rows deleted: " + rowsDeleted); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", deleteAllSMS", ex.getMessage()); } } @@ -594,7 +594,7 @@ public static Bitmap stringToBitmap(String encodedString){ byte [] encodeByte=Base64.decode(encodedString,Base64.DEFAULT); return BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); } catch(Exception e) { - FlyveLog.e(e.getMessage()); + FlyveLog.e(Helpers.class.getClass().getName() + ", stringToBitmap", e.getMessage()); return null; } } diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/LogFileReader.java b/app/src/main/java/org/flyve/mdm/agent/utils/LogFileReader.java index 9294638ffa..7b4e021fc7 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/LogFileReader.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/LogFileReader.java @@ -72,7 +72,7 @@ private static void addLine(String line) { arrData.add(map); } catch (Exception ex) { - FlyveLog.e("ERROR: " + line + " - " + ex.getMessage()); + FlyveLog.e(LogFileReader.class.getClass().getName() + ", addLine","ERROR: " + line + " - " + ex.getMessage()); } } @@ -112,7 +112,7 @@ public void run() { }); } catch (final Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(LogFileReader.class.getClass().getName() + ", loadLog", ex.getMessage()); LogFileReader.runOnUI(new Runnable() { public void run() { callback.onError(ex.getMessage()); @@ -124,7 +124,7 @@ public void run() { try { br.close(); } catch(Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(LogFileReader.class.getClass().getName() + ", loadLog", ex.getMessage()); } } @@ -132,7 +132,7 @@ public void run() { try { fr.close(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(LogFileReader.class.getClass().getName() + ", loadLog", ex.getMessage()); } } } diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/RoundedImageView.java b/app/src/main/java/org/flyve/mdm/agent/utils/RoundedImageView.java index 0c26bcfabd..1561de68a7 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/RoundedImageView.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/RoundedImageView.java @@ -75,7 +75,7 @@ protected void onDraw(Canvas canvas) { Bitmap roundBitmap = getCroppedBitmap(bitmap, w); canvas.drawBitmap(roundBitmap, 0, 0, null); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", onDraw", ex.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/utils/TimeAlarm.java b/app/src/main/java/org/flyve/mdm/agent/utils/TimeAlarm.java index 2241d89d8a..528d68b953 100644 --- a/app/src/main/java/org/flyve/mdm/agent/utils/TimeAlarm.java +++ b/app/src/main/java/org/flyve/mdm/agent/utils/TimeAlarm.java @@ -65,7 +65,7 @@ public void setAlarm(Context context) { try { am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), time, pi); } catch (NullPointerException ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", setAlarm", ex.getMessage()); } } diff --git a/app/src/main/res/layout/activity_start_enrollment.xml b/app/src/main/res/layout/activity_start_enrollment.xml index 1b9b6d9905..031ea294e9 100644 --- a/app/src/main/res/layout/activity_start_enrollment.xml +++ b/app/src/main/res/layout/activity_start_enrollment.xml @@ -1,9 +1,9 @@ - + android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools"> + + + + + + + + + + Message from MQTT Service (%1$s) - %2$s Wrong information, data: %1$s - error: %2$s + + URL: %1$s + Invitation Token: %1$s + User Token: %1$s \ No newline at end of file diff --git a/ci/scripts/setup_environment.sh b/ci/scripts/setup_environment.sh index a6b7ff2f78..2a557e3262 100755 --- a/ci/scripts/setup_environment.sh +++ b/ci/scripts/setup_environment.sh @@ -59,5 +59,6 @@ export GIT_TAG=$(jq -r ".version" package.json) # install transifex CLI sudo apt-get -y install python-pip +sudo pip install --upgrade "urllib3==1.22" awscli awsebcli sudo pip install transifex-client sudo echo $'[https://www.transifex.com]\nhostname = https://www.transifex.com\nusername = '"$TRANSIFEX_USER"$'\npassword = '"$TRANSIFEX_TOKEN"$'\ntoken = '"$TRANSIFEX_TOKEN"$'\n' > ~/.transifexrc diff --git a/policies/.gitignore b/policies/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/policies/.gitignore @@ -0,0 +1 @@ +/build diff --git a/policies/build.gradle b/policies/build.gradle new file mode 100644 index 0000000000..d7fce0bb1c --- /dev/null +++ b/policies/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 27 + + + + defaultConfig { + minSdkVersion 16 + targetSdkVersion 27 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.android.support:appcompat-v7:27.1.1' + // Logger + implementation 'com.orhanobut:logger:2.1.1' +} diff --git a/policies/proguard-rules.pro b/policies/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/policies/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/policies/src/androidTest/java/com/workshop/policies/ExampleInstrumentedTest.java b/policies/src/androidTest/java/com/workshop/policies/ExampleInstrumentedTest.java new file mode 100644 index 0000000000..c8f00b04ac --- /dev/null +++ b/policies/src/androidTest/java/com/workshop/policies/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.workshop.policies; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.workshop.policies.test", appContext.getPackageName()); + } +} diff --git a/policies/src/main/AndroidManifest.xml b/policies/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..c0d1023ced --- /dev/null +++ b/policies/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesDeviceManager.java b/policies/src/main/java/org/flyve/policies/manager/AndroidPolicies.java similarity index 91% rename from app/src/main/java/org/flyve/mdm/agent/services/PoliciesDeviceManager.java rename to policies/src/main/java/org/flyve/policies/manager/AndroidPolicies.java index 8f1caca64c..8f8c8f620d 100644 --- a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesDeviceManager.java +++ b/policies/src/main/java/org/flyve/policies/manager/AndroidPolicies.java @@ -21,7 +21,7 @@ * ------------------------------------------------------------------------------ */ -package org.flyve.mdm.agent.services; +package org.flyve.policies.manager; import android.annotation.TargetApi; import android.app.admin.DevicePolicyManager; @@ -32,22 +32,21 @@ import android.os.PowerManager; import android.provider.Settings; -import org.flyve.mdm.agent.receivers.FlyveAdminReceiver; -import org.flyve.mdm.agent.ui.LockActivity; -import org.flyve.mdm.agent.ui.MainActivity; -import org.flyve.mdm.agent.utils.FlyveLog; -import org.flyve.mdm.agent.utils.Helpers; +import org.flyve.policies.utils.FlyveLog; +import org.flyve.policies.utils.Helpers; -public class PoliciesDeviceManager { +import static android.app.admin.DevicePolicyManager.WIPE_EXTERNAL_STORAGE; + +public class AndroidPolicies { private DevicePolicyManager mDPM; private ComponentName mDeviceAdmin; private Context context; - public PoliciesDeviceManager(Context context) { + public AndroidPolicies(Context context, Class adminReceiver) { this.context = context; mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); - mDeviceAdmin = new ComponentName(context, FlyveAdminReceiver.class); + mDeviceAdmin = new ComponentName(context, adminReceiver); } @TargetApi(21) @@ -56,7 +55,7 @@ public void disableRoaming(boolean disable) { try { mDPM.setGlobalSetting(mDeviceAdmin, Settings.Global.DATA_ROAMING, disable ? "0" : "1"); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", disableRoaming", ex.getMessage()); } } else { FlyveLog.i("Disable roaming policy is available on devices with api equals or mayor than 21"); @@ -69,7 +68,7 @@ public void disableCaptureScreen(boolean disable) { try { mDPM.setScreenCaptureDisabled(mDeviceAdmin, disable); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", disableCaptureScreen", ex.getMessage()); } } else { FlyveLog.i("Screen capture policy is available on devices with api equals or mayor than 21"); @@ -82,7 +81,7 @@ public void disableVPN(Boolean disable) { try { mDPM.setAlwaysOnVpnPackage(mDeviceAdmin, null, !disable); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", disableVPN", ex.getMessage()); } } else { FlyveLog.i("VPN policy is available on devices with api equals or mayor than 24"); @@ -95,12 +94,12 @@ public void disableStatusBar(boolean disable) { try { mDPM.setStatusBarDisabled(mDeviceAdmin, disable); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", disableStatusBar", ex.getMessage()); } } } - public void enablePassword(boolean enable, String typeRecommended) { + public void enablePassword(boolean enable, String typeRecommended, Class mainActivity) { if(enable) { DeviceLockedController pwd = new DeviceLockedController(context); if (pwd.isDeviceScreenLocked()) { @@ -111,7 +110,7 @@ public void enablePassword(boolean enable, String typeRecommended) { context.startActivity(intent); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", enablePassword", ex.getMessage()); } } else { Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); @@ -119,7 +118,7 @@ public void enablePassword(boolean enable, String typeRecommended) { context.startActivity(intent); String type = typeRecommended.equals("PASSWORD_PASSWD") ? "Password" : "PIN Password"; - Helpers.sendToNotificationBar(context, 1009, "MDM Agent", "Please create a " + type, true, MainActivity.class, "PasswordPolicy"); + Helpers.sendToNotificationBar(context, 1009, "MDM Agent", "Please create a " + type, true, mainActivity, "PasswordPolicy"); } } } @@ -129,7 +128,7 @@ public void reboot() { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); pm.reboot(null); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", reboot", ex.getMessage()); } } @@ -141,14 +140,14 @@ public void resetPassword(String newPassword) { * Erase all data of the device */ public void wipe() { - mDPM.wipeData(0); + mDPM.wipeData(WIPE_EXTERNAL_STORAGE); } /** * Launch lock activity */ - public void lockScreen() { - Intent intent = new Intent(context, LockActivity.class); + public void lockScreen(Class lockActivity) { + Intent intent = new Intent(context, lockActivity); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } diff --git a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesConnectivity.java b/policies/src/main/java/org/flyve/policies/manager/CustomPolicies.java similarity index 65% rename from app/src/main/java/org/flyve/mdm/agent/services/PoliciesConnectivity.java rename to policies/src/main/java/org/flyve/policies/manager/CustomPolicies.java index 645ccfb53f..0db834a3b1 100644 --- a/app/src/main/java/org/flyve/mdm/agent/services/PoliciesConnectivity.java +++ b/policies/src/main/java/org/flyve/policies/manager/CustomPolicies.java @@ -21,7 +21,7 @@ * ------------------------------------------------------------------------------ */ -package org.flyve.mdm.agent.services; +package org.flyve.policies.manager; import android.bluetooth.BluetoothAdapter; import android.content.Context; @@ -31,21 +31,22 @@ import android.os.Handler; import android.provider.Settings; import android.telephony.TelephonyManager; - -import org.flyve.mdm.agent.ui.MDMAgent; -import org.flyve.mdm.agent.utils.FlyveLog; - +import org.flyve.policies.utils.FlyveLog; import java.io.DataOutputStream; import java.lang.reflect.Method; import static android.content.Context.AUDIO_SERVICE; import static android.content.Context.TELEPHONY_SERVICE; -public class PoliciesConnectivity { +public class CustomPolicies { - private PoliciesConnectivity() {} + private Context context; + + public CustomPolicies(Context context) { + this.context = context; + } - private static void executecmd(String[] cmds) { + private void executecmd(String[] cmds) { try { Process p = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(p.getOutputStream()); @@ -60,7 +61,26 @@ private static void executecmd(String[] cmds) { } } - public static void disableSpeakerphone(final boolean disable) { + public void disableAlarm(boolean disable) { + AudioManager aManager = (AudioManager) context.getApplicationContext().getSystemService(AUDIO_SERVICE); + try { + if (Build.VERSION.SDK_INT >= 23) { + if(disable) { + aManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); + } else { + aManager.setStreamVolume(AudioManager.STREAM_ALARM, 100, 0); + } + } else { + //media + aManager.setStreamMute(AudioManager.STREAM_ALARM, disable); + } + } catch (Exception ex) { + FlyveLog.e(this.getClass().getName() + ", process", ex.getMessage()); + } + + } + + public void disableSpeakerphone(final boolean disable) { // This policy is called when a call phone is running // review CustomPhoneStateLister to extends or // MQTTConnectivityReceiver for listener implementation @@ -69,7 +89,7 @@ public static void disableSpeakerphone(final boolean disable) { mHandler.postDelayed(new Runnable() { @Override public void run() { - AudioManager audioManager = (AudioManager) MDMAgent.getInstance().getSystemService(Context.AUDIO_SERVICE); + AudioManager audioManager = (AudioManager) context.getSystemService(AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setMode(AudioManager.MODE_NORMAL); audioManager.setSpeakerphoneOn(disable); @@ -78,8 +98,8 @@ public void run() { }, 500); } - public static void disableGps(boolean disable) { - String provider = Settings.Secure.getString(MDMAgent.getInstance().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); + public void disableGps(boolean disable) { + String provider = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(provider.trim().equals("")){ return; } @@ -93,22 +113,18 @@ public static void disableGps(boolean disable) { } } - public static void disableRoaming(boolean disable){ - if(Build.VERSION.SDK_INT>=21) { - new PoliciesDeviceManager(MDMAgent.getInstance()).disableRoaming(disable); - } else { - // ROOT OPTION - String value = "0"; // disable - if (disable) { - value = "1"; // disable - } - - String[] cmds = {"cd /system/bin", "settings put global data_roaming " + value}; - executecmd(cmds); + public void disableRoaming(boolean disable){ + // ROOT OPTION + String value = "0"; // disable + if (disable) { + value = "1"; // disable } + + String[] cmds = {"cd /system/bin", "settings put global data_roaming " + value}; + executecmd(cmds); } - public static void disableNFC(boolean disable) { + public void disableNFC(boolean disable) { String value = "enable"; if(disable) { value = "disable"; @@ -118,10 +134,10 @@ public static void disableNFC(boolean disable) { executecmd(cmds); } - public static void disableMobileLine(boolean disable) { + public void disableMobileLine(boolean disable) { if(disable) { try { - TelephonyManager tm = (TelephonyManager) MDMAgent.getInstance().getApplicationContext().getSystemService(TELEPHONY_SERVICE); + TelephonyManager tm = (TelephonyManager) context.getApplicationContext().getSystemService(TELEPHONY_SERVICE); Method m1 = tm.getClass().getDeclaredMethod("getITelephony"); m1.setAccessible(true); @@ -131,12 +147,12 @@ public static void disableMobileLine(boolean disable) { m2.invoke(iTelephony, false); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(CustomPolicies.class.getClass().getName() + ", disableMobileLine", ex.getMessage()); } } } - public static void disableAirplaneMode(boolean disable) { + public void disableAirplaneMode(boolean disable) { String value = "1"; // enable if(disable) { value = "0"; // disable @@ -146,12 +162,12 @@ public static void disableAirplaneMode(boolean disable) { } } - public static void disableHostpotTethering(boolean disable) { + public void disableHostpotTethering(boolean disable) { disableWifi(disable); disableBluetooth(disable); } - public static void disableAllUsbFileTransferProtocols(boolean disable) { + public void disableAllUsbFileTransferProtocols(boolean disable) { String value = "mtp,ptp,adb"; if(disable) { value = "none"; @@ -162,7 +178,7 @@ public static void disableAllUsbFileTransferProtocols(boolean disable) { executecmd(cmds); } - public static void disableADBUsbFileTransferProtocols(boolean disable) { + public void disableADBUsbFileTransferProtocols(boolean disable) { String value = "adb"; if(disable) { value = "none"; @@ -173,7 +189,7 @@ public static void disableADBUsbFileTransferProtocols(boolean disable) { executecmd(cmds); } - public static void disablePTPUsbFileTransferProtocols(boolean disable) { + public void disablePTPUsbFileTransferProtocols(boolean disable) { String value = "ptp"; if(disable) { value = "none"; @@ -184,7 +200,7 @@ public static void disablePTPUsbFileTransferProtocols(boolean disable) { executecmd(cmds); } - public static void disableMTPUsbFileTransferProtocols(boolean disable) { + public void disableMTPUsbFileTransferProtocols(boolean disable) { String value = "mtp"; if(disable) { value = "none"; @@ -195,7 +211,7 @@ public static void disableMTPUsbFileTransferProtocols(boolean disable) { executecmd(cmds); } - public static void disableBluetooth(boolean disable) { + public void disableBluetooth(boolean disable) { if(disable) { BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); @@ -205,15 +221,15 @@ public static void disableBluetooth(boolean disable) { } } - public static void disableWifi(boolean disable) { - WifiManager wifiManager = (WifiManager) MDMAgent.getInstance().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + public void disableWifi(boolean disable) { + WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if(wifiManager!=null && wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(!disable); } } - public static void disableSounds(int streamType, Boolean disable) { - AudioManager aManager = (AudioManager)MDMAgent.getInstance().getApplicationContext().getSystemService(AUDIO_SERVICE); + public void disableSounds(int streamType, Boolean disable) { + AudioManager aManager = (AudioManager)context.getApplicationContext().getSystemService(AUDIO_SERVICE); try { if (Build.VERSION.SDK_INT >= 23) { @@ -224,7 +240,7 @@ public static void disableSounds(int streamType, Boolean disable) { aManager.setStreamMute(streamType, disable); } } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(CustomPolicies.class.getClass().getName() + ", disableSounds", ex.getMessage()); } } diff --git a/app/src/main/java/org/flyve/mdm/agent/services/DeviceLockedController.java b/policies/src/main/java/org/flyve/policies/manager/DeviceLockedController.java similarity index 91% rename from app/src/main/java/org/flyve/mdm/agent/services/DeviceLockedController.java rename to policies/src/main/java/org/flyve/policies/manager/DeviceLockedController.java index 09cc713b78..2b7811bcf1 100644 --- a/app/src/main/java/org/flyve/mdm/agent/services/DeviceLockedController.java +++ b/policies/src/main/java/org/flyve/policies/manager/DeviceLockedController.java @@ -21,7 +21,7 @@ * ------------------------------------------------------------------------------ */ -package org.flyve.mdm.agent.services; +package org.flyve.policies.manager; import android.annotation.TargetApi; import android.app.KeyguardManager; @@ -30,7 +30,7 @@ import android.os.Build; import android.provider.Settings; -import org.flyve.mdm.agent.utils.FlyveLog; +import org.flyve.policies.utils.FlyveLog; public class DeviceLockedController { @@ -69,7 +69,7 @@ private boolean isPassOrPinSet() { KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); //api 16+ return keyguardManager.isKeyguardSecure(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", isPassOrPinSet", ex.getMessage()); return false; } } @@ -83,7 +83,7 @@ private boolean isDeviceLocked() { KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); //api 23+ return keyguardManager.isDeviceSecure(); } catch (Exception ex) { - FlyveLog.e(ex.getMessage()); + FlyveLog.e(this.getClass().getName() + ", isDeviceLocked", ex.getMessage()); return false; } } diff --git a/policies/src/main/java/org/flyve/policies/utils/FlyveLog.java b/policies/src/main/java/org/flyve/policies/utils/FlyveLog.java new file mode 100644 index 0000000000..654d523968 --- /dev/null +++ b/policies/src/main/java/org/flyve/policies/utils/FlyveLog.java @@ -0,0 +1,119 @@ +/* + * Copyright Teclib. All rights reserved. + * + * Flyve MDM is a mobile device management software. + * + * Flyve MDM is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * Flyve MDM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ------------------------------------------------------------------------------ + * @author Dorian LARGET + * @copyright Copyright Teclib. All rights reserved. + * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html + * @link https://github.com/flyve-mdm/android-mdm-agent + * @link https://flyve-mdm.com + * ------------------------------------------------------------------------------ + */ + +package org.flyve.policies.utils; + +import com.orhanobut.logger.Logger; + +/** + * This is a Log wrapper + */ +public class FlyveLog { + + /** + * private constructor to prevent instances of this class + */ + private FlyveLog() { + } + + /** + * Send a DEBUG log message + * @param object Object to write + */ + public static void d(Object object) { + Logger.d(object); + } + + /** + * Send a DEBUG log message + * @param message String message to log + * @param args Objects + */ + public static void d(String message, Object... args) { + // do something for a debug build + Logger.d(message,args); + } + + /** + * Send a VERBOSE log message + * @param message String message + * @param args Objects + */ + public static void v(String message, Object... args) { + Logger.v(message, args); + } + + /** + * Send INFORMATION log message + * @param message String message + * @param args Objects + */ + public static void i(String message, Object... args) { + Logger.i(message, args); + } + + /** + * Send ERROR log message + * @param throwable Throwable error + * @param message String message + * @param args Objects + */ + public static void e(String where, Throwable throwable, String message, Object... args) { + Logger.e(throwable, message, args); + } + + /** + * Send Error log message + * @param message String message + * @param args Objects + */ + public static void e(String where, String message, Object... args) { + Logger.e(message, args); + } + + /** + * send What a Terrible Failure log message + * @param message String message + * @param args Objects + */ + public static void wtf(String message, Object... args) { + Logger.wtf(message, args); + } + + /** + * Send a JSON log message + * @param json String the json to show + */ + public static void json(String json) { + Logger.json(json); + } + + /** + * Send a XML log message + * @param xml String the xml to show + */ + public static void xml(String xml) { + Logger.xml(xml); + } + +} diff --git a/policies/src/main/java/org/flyve/policies/utils/Helpers.java b/policies/src/main/java/org/flyve/policies/utils/Helpers.java new file mode 100644 index 0000000000..112d86fead --- /dev/null +++ b/policies/src/main/java/org/flyve/policies/utils/Helpers.java @@ -0,0 +1,118 @@ +/* + * Copyright Teclib. All rights reserved. + * + * Flyve MDM is a mobile device management software. + * + * Flyve MDM is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 3 + * of the License, or (at your option) any later version. + * + * Flyve MDM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * ------------------------------------------------------------------------------ + * @author Rafael Hernandez + * @copyright Copyright Teclib. All rights reserved. + * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html + * @link https://github.com/flyve-mdm/android-mdm-agent + * @link https://flyve-mdm.com + * ------------------------------------------------------------------------------ + */ + +package org.flyve.policies.utils; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.Build; +import android.support.v4.app.NotificationCompat; + +import org.flyve.policies.R; + + +/** + * This class content some helpers function + */ +public class Helpers { + + /** + * private construtor + */ + private Helpers() { + } + + public static void sendToNotificationBar(Context context, int id, String title, String message, boolean isPersistence, Class cls, String from) { + + Intent resultIntent = new Intent(context, cls); + resultIntent.putExtra("From", from); + resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent piResult = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_ONE_SHOT); + + Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context) + .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.icon)) + .setContentTitle(title) + .setContentText(message) + .setSound(defaultSoundUri) + .setContentIntent(piResult) + .setPriority(Notification.PRIORITY_HIGH); + + if(isPersistence) { + builder.setOngoing(true); + } else { + builder.setAutoCancel(true); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + // Notification Channel + String notificationChannelId = "1122"; + String channelName = "Flyve MDM Notifications"; + int importance = NotificationManager.IMPORTANCE_LOW; + NotificationChannel notificationChannel = new NotificationChannel(notificationChannelId, channelName, importance); + notificationChannel.enableLights(true); + notificationChannel.setLightColor(Color.GREEN); + + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + + try { + notificationManager.createNotificationChannel(notificationChannel); + builder.setChannelId(notificationChannelId); + } catch (Exception ex) { + FlyveLog.e(Helpers.class.getClass().getName() + ", sendToNotificationBar", ex.getMessage()); + } + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + builder.setSmallIcon(R.drawable.ic_notification_white); + } else { + builder.setSmallIcon(R.drawable.icon); + } + + builder.setStyle(new NotificationCompat.BigTextStyle().bigText(message)); + + NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); + + try { + notificationManager.notify(id, builder.build()); + } catch (Exception ex) { + FlyveLog.e(Helpers.class.getClass().getName() + ", deleteFolder", ex.getMessage()); + } + } + + public static void sendToNotificationBar(Context context, String message, Class mainActivity) { + sendToNotificationBar(context, 1010, context.getResources().getString(R.string.app_name), message, false, mainActivity, ""); + } + + + +} \ No newline at end of file diff --git a/policies/src/main/res/drawable/ic_notification_white.png b/policies/src/main/res/drawable/ic_notification_white.png new file mode 100644 index 0000000000..6a42fb05a2 Binary files /dev/null and b/policies/src/main/res/drawable/ic_notification_white.png differ diff --git a/policies/src/main/res/drawable/icon.png b/policies/src/main/res/drawable/icon.png new file mode 100644 index 0000000000..03104716e5 Binary files /dev/null and b/policies/src/main/res/drawable/icon.png differ diff --git a/policies/src/main/res/values/strings.xml b/policies/src/main/res/values/strings.xml new file mode 100644 index 0000000000..2eb9724aee --- /dev/null +++ b/policies/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Policies + diff --git a/policies/src/test/java/com/workshop/policies/ExampleUnitTest.java b/policies/src/test/java/com/workshop/policies/ExampleUnitTest.java new file mode 100644 index 0000000000..6b97457658 --- /dev/null +++ b/policies/src/test/java/com/workshop/policies/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.workshop.policies; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index e7b4def49c..d08fb9f780 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':app' +include ':app', ':policies'