ifp_detector 1.0.7

SDKflutter
Platformandroid

Detect Interactive Flat Panels (IFPs) vs tablets on Android. Analyze screen size, brand, hardware features, and stylus support with confidence scoring for licensing and feature control.

IFP Detector Plugin

A Flutter plugin to detect whether a device is an Interactive Flat Panel (IFP) or a regular tablet. This plugin is useful for applications that need to distinguish between these device types for licensing, feature availability, or UI adaptation purposes.

Features

  • Accurate Detection: Uses multiple hardware and software indicators to determine device type
  • Confidence Scoring: Provides a confidence score (0.0 to 1.0) for the detection result
  • Detailed Analysis: Returns comprehensive information about device characteristics
  • Simple API: Easy-to-use methods for both detailed and simple detection

Detection Logic

The plugin analyzes several device characteristics:

  • Screen Size: Devices with screens ≥20" are typically IFPs
  • Known IFP Brands: Promethean, Newline, ViewSonic, BenQ, CleverTouch, Smart, etc.
  • Hardware Features: HDMI CEC support, Android TV Leanback features
  • Input Capabilities: Stylus/pen support detection
  • Display Properties: Screen size buckets and reliability

Installation

Add this to your package's pubspec.yaml file:

dependencies:
  ifp_detector:
    git:
      url: https://github.com/shukill/ifp_detector.git
      ref: v1.0.7  # Use latest tag or main branch

From Local Path

If you have the plugin locally:

dependencies:
  ifp_detector:
    path: ../ifp_detector  # or your plugin path

Then run:

flutter pub get

Usage

Simple Detection

import 'package:ifp_detector/ifp_detector.dart';

// Simple boolean check
bool isIFP = await IfpDetector.isIfp();
if (isIFP) {
  print('This is an Interactive Flat Panel');
} else {
  print('This is a regular tablet');
}

Detailed Detection

import 'package:ifp_detector/ifp_detector.dart';

// Get detailed detection results
IfpDetectionResult result = await IfpDetector.detectIfp();

print('Device Type: ${result.isIFP ? "IFP" : "Tablet"}');
print('Confidence: ${result.confidenceLevel} (${(result.confidenceScore * 100).toStringAsFixed(1)}%)');
print('Screen Size: ${result.screenInches.toStringAsFixed(2)}" inches');
print('Screen Bucket: ${result.screenBucket}');
print('Known IFP Brand: ${result.matchedKnownIFPBrand}');
print('HDMI CEC: ${result.hasHdmiCec}');
print('Leanback UI: ${result.hasLeanback}');
print('Stylus Support: ${result.hasStylus}');
print('Screen Size Reliable: ${result.screenSizeReliable}');

Error Handling

try {
  final result = await IfpDetector.detectIfp();
  // Use result
} on PlatformException catch (e) {
  print('Detection failed: ${e.message}');
} catch (e) {
  print('Unexpected error: $e');
}

API Reference

IfpDetector

Main class for IFP detection.

Methods

  • static Future<IfpDetectionResult> detectIfp()

    • Returns detailed detection results
    • Throws PlatformException on failure
  • static Future<bool> isIfp()

    • Returns simple boolean result
    • Throws PlatformException on failure

IfpDetectionResult

Contains detailed information about the detection.

Properties

  • bool isIFP - Whether the device is detected as an IFP
  • double screenInches - Screen size in inches (diagonal)
  • String screenBucket - Screen size bucket (small, normal, large, xlarge)
  • bool matchedKnownIFPBrand - Whether device matches known IFP brand patterns
  • bool hasHdmiCec - Whether device supports HDMI CEC
  • bool hasLeanback - Whether device has Android TV Leanback features
  • bool hasStylus - Whether device supports stylus/pen input
  • bool screenSizeReliable - Whether screen size calculation is reliable
  • double confidenceScore - Confidence score (0.0 to 1.0)

Methods

  • String get confidenceLevel - Human-readable confidence level
  • Map<String, dynamic> toMap() - Convert to map
  • factory IfpDetectionResult.fromMap(Map<String, dynamic> map) - Create from map

Platform Support

  • ✅ Android
  • ❌ iOS (not implemented)
  • ❌ Web (not applicable)
  • ❌ Desktop (not implemented)

Example App

The plugin includes an example app that demonstrates both simple and detailed detection. Run it with:

flutter run

Use Cases

  • Software Licensing: Different licensing models for IFPs vs tablets
  • Feature Availability: Enable/disable features based on device type
  • UI Adaptation: Optimize interface for large displays
  • Analytics: Track usage across different device types

Known IFP Brands

The plugin recognizes these IFP manufacturers:

  • Promethean
  • Newline
  • ViewSonic
  • BenQ
  • CleverTouch
  • Smart Technologies
  • Epson
  • Hitachi
  • Panasonic
  • LG
  • Samsung
  • Sharp
  • Ricoh
  • Mimio
  • QOMO
  • Avocor
  • TouchIT
  • Boxlight
  • Triumph Board
  • Interactive Technologies

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.


Developed by Wriety - Enhancing educational technology solutions.