Loading packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingPlugin.java 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed 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 com.android.systemui.plugins; import com.android.systemui.plugins.annotations.ProvidesInterface; /** * Used to capture Falsing data (related to unlocking the screen). * * The intent is that the data can later be analyzed to validate the quality of the * {@link com.android.systemui.classifier.FalsingManager}. */ @ProvidesInterface(action = FalsingPlugin.ACTION, version = FalsingPlugin.VERSION) public interface FalsingPlugin extends Plugin { String ACTION = "com.android.systemui.action.FALSING_PLUGIN"; int VERSION = 1; /** * Called when there is data to be recorded. * * @param success Indicates whether the action is considered a success. * @param data The raw data to be recorded for analysis. */ void dataCollected(boolean success, byte[] data); } packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java +39 −16 Original line number Diff line number Diff line Loading @@ -35,6 +35,11 @@ import android.util.Log; import android.view.MotionEvent; import android.widget.Toast; import com.android.systemui.Dependency; import com.android.systemui.plugins.FalsingPlugin; import com.android.systemui.plugins.PluginListener; import com.android.systemui.shared.plugins.PluginManager; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; Loading Loading @@ -75,6 +80,8 @@ public class DataCollector implements SensorEventListener { private static DataCollector sInstance = null; private FalsingPlugin mFalsingPlugin = null; protected final ContentObserver mSettingsObserver = new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { Loading @@ -82,6 +89,16 @@ public class DataCollector implements SensorEventListener { } }; private final PluginListener mPluginListener = new PluginListener<FalsingPlugin>() { public void onPluginConnected(FalsingPlugin plugin, Context context) { mFalsingPlugin = plugin; } public void onPluginDisconnected(FalsingPlugin plugin) { mFalsingPlugin = null; } }; private DataCollector(Context context) { mContext = context; Loading @@ -106,6 +123,8 @@ public class DataCollector implements SensorEventListener { UserHandle.USER_ALL); updateConfiguration(); Dependency.get(PluginManager.class).addPluginListener(mPluginListener, FalsingPlugin.class); } public static DataCollector getInstance(Context context) { Loading Loading @@ -191,6 +210,10 @@ public class DataCollector implements SensorEventListener { @Override public void run() { byte[] b = Session.toByteArray(currentSession.toProto()); if (mFalsingPlugin != null) { mFalsingPlugin.dataCollected(currentSession.getResult() == Session.SUCCESS, b); } else { String dir = mContext.getFilesDir().getAbsolutePath(); if (currentSession.getResult() != Session.SUCCESS) { if (!mDisableUnlocking && !mCollectBadTouches) { Loading @@ -204,13 +227,13 @@ public class DataCollector implements SensorEventListener { File file = new File(dir); file.mkdir(); File touch = new File(file, "trace_" + System.currentTimeMillis()); try { new FileOutputStream(touch).write(b); } catch (IOException e) { throw new RuntimeException(e); } } } }); } Loading Loading
packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingPlugin.java 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed 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 com.android.systemui.plugins; import com.android.systemui.plugins.annotations.ProvidesInterface; /** * Used to capture Falsing data (related to unlocking the screen). * * The intent is that the data can later be analyzed to validate the quality of the * {@link com.android.systemui.classifier.FalsingManager}. */ @ProvidesInterface(action = FalsingPlugin.ACTION, version = FalsingPlugin.VERSION) public interface FalsingPlugin extends Plugin { String ACTION = "com.android.systemui.action.FALSING_PLUGIN"; int VERSION = 1; /** * Called when there is data to be recorded. * * @param success Indicates whether the action is considered a success. * @param data The raw data to be recorded for analysis. */ void dataCollected(boolean success, byte[] data); }
packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java +39 −16 Original line number Diff line number Diff line Loading @@ -35,6 +35,11 @@ import android.util.Log; import android.view.MotionEvent; import android.widget.Toast; import com.android.systemui.Dependency; import com.android.systemui.plugins.FalsingPlugin; import com.android.systemui.plugins.PluginListener; import com.android.systemui.shared.plugins.PluginManager; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; Loading Loading @@ -75,6 +80,8 @@ public class DataCollector implements SensorEventListener { private static DataCollector sInstance = null; private FalsingPlugin mFalsingPlugin = null; protected final ContentObserver mSettingsObserver = new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { Loading @@ -82,6 +89,16 @@ public class DataCollector implements SensorEventListener { } }; private final PluginListener mPluginListener = new PluginListener<FalsingPlugin>() { public void onPluginConnected(FalsingPlugin plugin, Context context) { mFalsingPlugin = plugin; } public void onPluginDisconnected(FalsingPlugin plugin) { mFalsingPlugin = null; } }; private DataCollector(Context context) { mContext = context; Loading @@ -106,6 +123,8 @@ public class DataCollector implements SensorEventListener { UserHandle.USER_ALL); updateConfiguration(); Dependency.get(PluginManager.class).addPluginListener(mPluginListener, FalsingPlugin.class); } public static DataCollector getInstance(Context context) { Loading Loading @@ -191,6 +210,10 @@ public class DataCollector implements SensorEventListener { @Override public void run() { byte[] b = Session.toByteArray(currentSession.toProto()); if (mFalsingPlugin != null) { mFalsingPlugin.dataCollected(currentSession.getResult() == Session.SUCCESS, b); } else { String dir = mContext.getFilesDir().getAbsolutePath(); if (currentSession.getResult() != Session.SUCCESS) { if (!mDisableUnlocking && !mCollectBadTouches) { Loading @@ -204,13 +227,13 @@ public class DataCollector implements SensorEventListener { File file = new File(dir); file.mkdir(); File touch = new File(file, "trace_" + System.currentTimeMillis()); try { new FileOutputStream(touch).write(b); } catch (IOException e) { throw new RuntimeException(e); } } } }); } Loading