package net.cactii.flash2; import android.os.Build; import java.io.FileWriter; import java.io.IOException; public class FlashDevice { private static final String DEVICE = "/sys/devices/platform/flashlight.0/leds/flashlight/brightness"; private static final String DEVICE_SHOLES = "/sys/class/leds/spotlight/brightness"; public static final int STROBE = -1; public static final int OFF = 0; public static final int ON = 1; public static final int DEATH_RAY = 3; public static final int HIGH = 128; private static FlashDevice instance; private static boolean useDeathRay = !Build.DEVICE.equals("supersonic"); private FileWriter mWriter = null; private int mFlashMode = OFF; private FlashDevice() {} public static synchronized FlashDevice instance() { if (instance == null) { instance = new FlashDevice(); } return instance; } public synchronized void setFlashMode(int mode) { try { if (mWriter == null) { if (Build.DEVICE.contains("sholes")) { mWriter = new FileWriter(DEVICE_SHOLES); } else { mWriter = new FileWriter(DEVICE); } } int value = mode; switch (mode) { case STROBE: value = OFF; break; case DEATH_RAY: value = useDeathRay ? DEATH_RAY : HIGH; break; } mWriter.write(String.valueOf(value)); mWriter.flush(); mFlashMode = mode; if (mode == OFF) { mWriter.close(); mWriter = null; } } catch (IOException e) { throw new RuntimeException("Can't open flash device: " + DEVICE, e); } } public synchronized int getFlashMode() { return mFlashMode; } }