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

Commit 1820ee92 authored by Steve Kondik's avatar Steve Kondik Committed by Gerrit Code Review
Browse files

Merge "Cleanup notification bar flashlight widget to use Torch app, and add...

Merge "Cleanup notification bar flashlight widget to use Torch app, and add state storage for flashlight." into froyo
parents 1fbd42e5 4acab88f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2395,6 +2395,12 @@ public final class Settings {
         */
        public static final String LOCKSCREEN_GESTURES_COLOR = "lockscreen_gestures_color";

        /**
         * Torch state (flashlight)
         * @hide
         */
        public static final String TORCH_STATE = "torch_state";

        /**
         * Settings to backup. This is here so that it's in the same place as the settings
         * keys and easy to update.
+4 −0
Original line number Diff line number Diff line
@@ -2330,6 +2330,10 @@ public class StatusBarService extends IStatusBar.Stub
            resolver.registerContentObserver(
                    Settings.System.getUriFor(Settings.System.WIDGET_BUTTONS),
                         false, this);

            resolver.registerContentObserver(
                    Settings.System.getUriFor(Settings.System.TORCH_STATE),
                         false, this);
        }

        @Override
+3 −96
Original line number Diff line number Diff line
@@ -5,46 +5,14 @@ import com.android.server.status.widget.PowerButton;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.util.Log;
import android.os.Build;

import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import java.lang.Thread;
import java.lang.Runnable;
import java.io.File;
import java.io.FileWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FlashlightButton extends PowerButton {

    Context mContext;

    static FlashlightButton ownButton;
    private static final String TAG = "FlashlightButton";
    private static int currentMode;

    private static FileWriter mWriter;

    private static ExecutorService threadExecutor;
    private static boolean runTimer = false;

    private static final int MODE_DEFAULT = 0;
    private static final int MODE_HIGH = 1;
    private static boolean useDeathRay = !Build.DEVICE.equals("supersonic");;

    private static final String FLASHLIGHT_FILE;
    private static final String FLASHLIGHT_FILE_SPOTLIGHT = "/sys/class/leds/spotlight/brightness";
    static {
        File ff = new File(FLASHLIGHT_FILE_SPOTLIGHT);
        if (ff.exists()) {
            FLASHLIGHT_FILE = FLASHLIGHT_FILE_SPOTLIGHT;
        } else {
            FLASHLIGHT_FILE = "/sys/class/leds/flashlight/brightness";
        }
    }

    public void updateState(Context context) {
        mContext = context;
@@ -69,79 +37,18 @@ public class FlashlightButton extends PowerButton {
    }

    public void toggleState(Context context) {
        currentMode = Settings.System.getInt(context.getContentResolver(), Settings.System.EXPANDED_FLASH_MODE,
                    MODE_DEFAULT);
        boolean enabled = getFlashlightEnabled();
        runTimer = !enabled;
        setFlashlightEnabled(!enabled);
        mContext.sendBroadcast(new Intent("net.cactii.flash2.TOGGLE_FLASHLIGHT"));
    }

    public static FlashlightButton getInstance() {
        if (ownButton==null) ownButton = new FlashlightButton();

        return ownButton;
    }


    public boolean getFlashlightEnabled() {
        try {
            FileInputStream fis = new FileInputStream(FLASHLIGHT_FILE);
            int result = fis.read();
            fis.close();
            return (result != '0');
        } catch (Exception e) {
            return false;
        }
    }

    public void setFlashlightEnabled(boolean on) {
        try {
            if (mWriter == null) {
                mWriter = new FileWriter(FLASHLIGHT_FILE);
            }
            int value = 0;
            if (on) {
                switch (currentMode) {
                    case MODE_HIGH:
                        value = useDeathRay ? 3 : 128;
                        break;
                    default:
                        value = 1;
                        break;
        return Settings.System.getInt(mContext.getContentResolver(), Settings.System.TORCH_STATE, 0) == 1;
    }
            }
            mWriter.write(String.valueOf(value));
            mWriter.flush();
            if (!on) {
                mWriter.close();
                mWriter = null;
            }
        } catch (Exception e) {
            Log.e(TAG, "setFlashlightEnabled failed", e);
        }
        startTimer(on);
    }

    private void startTimer(boolean on) {
        if (!on) return;
        if (threadExecutor == null) threadExecutor = Executors.newSingleThreadExecutor();

        flashTimer timerRun = new flashTimer();
        threadExecutor.execute(timerRun);
    }

    public class flashTimer implements Runnable {
        public flashTimer() {
        }
        public void run() {
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
            }
            setFlashlightEnabled(runTimer);
        }
    }


    @Override
    void initButton(int position) {