/*
 * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 * 
 * WSO2 Inc. licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.wso2.mdm.agent.api;

import android.util.Log;

import org.wso2.mdm.agent.utils.Constants;

import java.io.File;

/**
 * This class represents all the APIs to check if the device is Rooted or not.
 */
public class Root {
	private static final String[] SU_CHECK_COMMAND = new String[] { "/system/xbin/which", "su" };
	private static final String SU_TAG = "test-keys";
	private static final String SU_APK = "/system/app/Superuser.apk";
    private String TAG = Root.class.getSimpleName();

	/**
	 * Returns true if the device is rooted (if any of the root methods returns
	 * true).
	 * @return - Device rooted status.
	 */
	public boolean isDeviceRooted() {
		if (checkRootBySuAccess()) {
			return true;
		}
		if (checkRootBySuperUserApk()) {
			return true;
		}
		if (checkRootByBuildTags()) {
			return true;
		}
		return false;
	}

	/**
	 * Returns true if the OS build tags contains "test-keys".
	 * @return - Device root status by build tags.
	 */
	public boolean checkRootByBuildTags() {

        String buildTags = android.os.Build.TAGS;
		if (buildTags != null && buildTags.contains(SU_TAG)) {
            if (Constants.DEBUG_MODE_ENABLED){
                Log.d(TAG, "Build tags found");
            }
			return true;
		}
		return false;
	}

	/**
	 * Returns true if the device contains SuperUser.apk which is stored into
	 * the device in the rooting process.
	 * @return - Device root status by SU APK.
	 */
	public boolean checkRootBySuperUserApk() {
		File suApk = new File(SU_APK);
		if (suApk != null && suApk.exists()) {
            if (Constants.DEBUG_MODE_ENABLED){
                Log.d(TAG, "Super apk found");
            }
			return true;
		}
		return false;
	}

	/**
	 * Executes a shell command (superuser access with su binary) and returns
	 * true if the command succeeds.
	 * @return - Device root status by shell access.
	 */
	public boolean checkRootBySuAccess() {
		if (new ShellExecutor().executeCommand(SU_CHECK_COMMAND) != null) {
            if (Constants.DEBUG_MODE_ENABLED){
                Log.d(TAG, "su command enabled");
            }
			return true;
		} else {
			return false;
		}
	}
}

@@ -1115,16 +1115,17 @@
 k%22;%0A    
+%09
 private 
@@ -1165,16 +1165,16 @@
 Name();%0A
-
 %0A%09/**%0A%09 
@@ -1784,32 +1784,34 @@
 ) %7B%0A            
+%09%09
 if (Constants.DE
@@ -1837,32 +1837,34 @@
                 
+%09%09
 Log.d(TAG, %22Buil
@@ -1883,32 +1883,34 @@
 %22);%0A            
+%09%09
 %7D%0A%09%09%09return true
@@ -2225,32 +2225,34 @@
 ) %7B%0A            
+%09%09
 if (Constants.DE
@@ -2278,32 +2278,34 @@
                 
+%09%09
 Log.d(TAG, %22Supe
@@ -2323,32 +2323,34 @@
 %22);%0A            
+%09%09
 %7D%0A%09%09%09return true
@@ -2666,16 +2666,18 @@
         
+%09%09
 if (Cons
@@ -2719,16 +2719,18 @@
         
+%09%09
 Log.d(TA
@@ -2767,16 +2767,18 @@
         
+%09%09
 %7D%0A%09%09%09ret

Update Root.java