MultiTouch.java

/*
 * Copyright © 2012 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.paint.touch;

public abstract class MultiTouch {

    private static MultiTouch multiTouch = getImplementation();
    protected static MultiTouchListener touchListener;

    protected abstract int getPointers();

    /**
     * Set multi-touch listener
     * @param listener
     */
    public static void setTouchListener(MultiTouchListener listener) {
        touchListener = listener;
    }

    /**
     * Get the amount of possible touch points
     * @return Amount of touch points. 1 if multi-touch is not available
     */
    public static int getMaxPointers() {
        return multiTouch != null ? multiTouch.getPointers() : 1;
    }

    /**
     * Loads up the isolated implementation class
     * @return MultiTouch Returns multi-touch implementation or null, if multi-touch is not supported
     */
    private static MultiTouch getImplementation() {
        MultiTouch implementation = null;
        try {
            Class.forName("com.nokia.mid.ui.multipointtouch.MultipointTouchListener");

            Class c = Class.forName("com.nokia.example.paint.touch.MultiTouchImpl");
            implementation = (MultiTouch) (c.newInstance());
        }
        catch (Exception e) {
            // Multi-touch not available - using single-touch
        }
        return implementation;
    }
}