/* * Copyright (C) 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.adafruit.bluefruit.le.connect.app.settings.barcode; import com.google.android.gms.vision.Detector; import com.google.android.gms.vision.Tracker; import com.google.android.gms.vision.barcode.Barcode; /** * Generic tracker which is used for tracking or reading a barcode (and can really be used for * any type of item). This is used to receive newly detected items, add a graphical representation * to an overlay, update the graphics as the item changes, and remove the graphics when the item * goes away. */ public class BarcodeGraphicTracker extends Tracker<Barcode> { public interface BarcodeTrackerListener { void onCodeScanned(String contents); } private GraphicOverlay<BarcodeGraphic> mOverlay; private BarcodeGraphic mGraphic; private BarcodeTrackerListener mListener; BarcodeGraphicTracker(GraphicOverlay<BarcodeGraphic> overlay, BarcodeGraphic graphic, BarcodeGraphicTracker.BarcodeTrackerListener listener) { mOverlay = overlay; mGraphic = graphic; mListener = listener; } /** * Start tracking the detected item instance within the item overlay. */ @Override public void onNewItem(int id, Barcode item) { mGraphic.setId(id); } /** * Update the position/characteristics of the item within the overlay. */ @Override public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode item) { mOverlay.add(mGraphic); mGraphic.updateItem(item); if (mListener != null) { mListener.onCodeScanned(item.rawValue); } } /** * Hide the graphic when the corresponding object was not detected. This can happen for * intermediate frames temporarily, for example if the object was momentarily blocked from * view. */ @Override public void onMissing(Detector.Detections<Barcode> detectionResults) { mOverlay.remove(mGraphic); } /** * Called when the item is assumed to be gone for good. Remove the graphic annotation from * the overlay. */ @Override public void onDone() { mOverlay.remove(mGraphic); } }