Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
ProcessLogsFragment.java
package com.afwsamples.testdpc.policy; import android.annotation.TargetApi; import android.app.ListFragment; import android.app.admin.DevicePolicyManager; import android.app.admin.SecurityLog; import android.app.admin.SecurityLog.SecurityEvent; import android.content.ComponentName; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import com.afwsamples.testdpc.DeviceAdminReceiver; import com.afwsamples.testdpc.R; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @TargetApi(Build.VERSION_CODES.N) public class ProcessLogsFragment extends ListFragment { private static final String TAG = "ProcessLogsFragment"; private ArrayList
mLogs = new ArrayList
(); private ArrayAdapter
mAdapter; private DevicePolicyManager mDevicePolicyManager; private ComponentName mAdminName; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdminName = DeviceAdminReceiver.getComponentName(getActivity()); mDevicePolicyManager = (DevicePolicyManager) getActivity().getSystemService( Context.DEVICE_POLICY_SERVICE); mAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, android.R.id.text1, mLogs); setListAdapter(mAdapter); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mAdapter.add(getString(R.string.process_logs_retrieved_message, new Date().toString())); try { processEvents(mDevicePolicyManager.retrieveSecurityLogs(mAdminName)); } catch (SecurityException e) { Log.e(TAG, "Exception thrown when trying to retrieve security logs", e); mAdapter.add(getString(R.string.exception_retrieving_process_logs)); } } @Override public void onDestroy() { super.onDestroy(); mAdapter = null; } private void processEvents(List
logs) { if (logs == null) { Log.w(TAG, "logs == null, are you polling too early?"); mAdapter.add(getString(R.string.failed_to_retrieve_process_logs)); } else { Log.d(TAG, "Incoming logs size: " + logs.size()); for (SecurityEvent event : logs) { StringBuilder sb = new StringBuilder(); sb.append(getStringEventTagFromId(event.getTag())); sb.append(" (").append(new Date(TimeUnit.NANOSECONDS.toMillis( event.getTimeNanos()))).append("): "); printData(sb, event.getData()); mAdapter.add(sb.toString()); } ListView listView = ProcessLogsFragment.this.getListView(); listView.setSelection(listView.getCount() - 1); } } private String getStringEventTagFromId(int eventId) { String eventTag; switch (eventId) { case SecurityLog.TAG_ADB_SHELL_INTERACTIVE: eventTag = "ADB_SHELL_INTERACTIVE"; break; case SecurityLog.TAG_ADB_SHELL_CMD: eventTag = "ADB_SHELL_CMD"; break; case SecurityLog.TAG_SYNC_RECV_FILE: eventTag = "SYNC_RECV_FILE"; break; case SecurityLog.TAG_SYNC_SEND_FILE: eventTag = "SYNC_SEND_FILE"; break; case SecurityLog.TAG_APP_PROCESS_START: eventTag = "APP_PROCESS_START"; break; case SecurityLog.TAG_KEYGUARD_DISMISSED: eventTag = "KEYGUARD_DISMISSED"; break; case SecurityLog.TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT: eventTag = "KEYGUARD_DISMISS_AUTH_ATTEMPT"; break; case SecurityLog.TAG_KEYGUARD_SECURED: eventTag = "KEYGUARD_SECURED"; break; default: eventTag = "UNKNOWN"; } return eventTag; } private void printData(StringBuilder sb, Object data) { if (data instanceof Integer || data instanceof Long || data instanceof Float || data instanceof String) { sb.append(data.toString()).append(" "); } else if (data instanceof Object[]) { for (Object item : (Object[]) data) { printData(sb, item); } } } }