Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7b36c79 authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge "New "FalsingPlugin" to allow for easier data collection."

parents 3492b7c4 21beba8b
Loading
Loading
Loading
Loading
+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);
}
+39 −16
Original line number Diff line number Diff line
@@ -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;
@@ -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) {
@@ -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;

@@ -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) {
@@ -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) {
@@ -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);
                    }
                }
            }
        });
    }