diff --git a/universal7885-common/apps/CameraLightSensor/Android.bp b/universal7885-common/apps/CameraLightSensor/Android.bp new file mode 100644 index 0000000..fc3d95b --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/Android.bp @@ -0,0 +1,9 @@ +android_app { + name: "CameraLightSensor", + srcs: [ + "src/**/*.java", + ], + platform_apis: true, + privileged: true, + certificate: "platform", +} diff --git a/universal7885-common/apps/CameraLightSensor/AndroidManifest.xml b/universal7885-common/apps/CameraLightSensor/AndroidManifest.xml new file mode 100644 index 0000000..b11f68a --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/BootReceiver.java b/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/BootReceiver.java new file mode 100644 index 0000000..f5eb17c --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/BootReceiver.java @@ -0,0 +1,13 @@ +package com.eurekateam.cameralightsensor; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class BootReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + final Intent i = new Intent(context, CameraLightSensorService.class); + context.startService(i); + } +} diff --git a/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/CameraLightSensorService.java b/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/CameraLightSensorService.java new file mode 100644 index 0000000..13ebacd --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/CameraLightSensorService.java @@ -0,0 +1,69 @@ +package com.eurekateam.cameralightsensor; + +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.IBinder; +import android.provider.Settings; +import android.util.Log; + +public class CameraLightSensorService extends Service { + private static final String TAG = "CameraLightSensor"; + private static final boolean DEBUG = false; + final Intent i = new Intent(getApplicationContext(), CameraListener.class); + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + IntentFilter screenStateFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); + screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF); + registerReceiver(mScreenStateReceiver, screenStateFilter); + } + + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (DEBUG) Log.d(TAG, "Starting service"); + return START_STICKY; + } + @Override + public void onDestroy() { + if (DEBUG) Log.d(TAG, "Destroying service"); + super.onDestroy(); + this.unregisterReceiver(mScreenStateReceiver); + } + private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { + try { + onDisplayOn(); + } catch (Settings.SettingNotFoundException e) { + e.printStackTrace(); + } + } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { + onDisplayOff(); + } + } + }; + private void onDisplayOn() throws Settings.SettingNotFoundException { + if(Settings.System.getInt(getContentResolver(), + Settings.System.SCREEN_BRIGHTNESS_MODE ) == 1){ + Log.d(TAG, "AutoBrightness Mode Enabled. Starting..."); + getApplicationContext().startService(i); + }else{ + Log.d(TAG, "AutoBrightness Mode Disabled, Not Starting Service..."); + } + } + private void onDisplayOff(){ + Log.d(TAG, "Screen is off. Stopping Service..."); + getApplicationContext().stopService(i); + } +} diff --git a/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/CameraListener.java b/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/CameraListener.java new file mode 100644 index 0000000..7af1ac0 --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/java/com/eurekateam/cameralightsensor/CameraListener.java @@ -0,0 +1,105 @@ +package com.eurekateam.cameralightsensor; + +import android.app.Service; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.ImageFormat; +import android.graphics.Rect; +import android.graphics.YuvImage; +import android.hardware.Camera; +import android.os.Handler; +import android.os.IBinder; +import android.os.Looper; +import android.provider.Settings; +import android.util.Log; + +import java.io.ByteArrayOutputStream; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +public class CameraListener extends Service { + + private final String TAG = CameraListener.class.getSimpleName(); + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + return START_STICKY; + } + + @Override + public void onCreate() { + super.onCreate(); + Handler mHandler = new Handler(Looper.getMainLooper()); + AtomicInteger prev = new AtomicInteger(Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 50)); + mHandler.postDelayed(() -> { + int current = calculateBrightnessEstimate(getPreviewBitmap()); + Log.i(TAG, ": Current Brigtness: " + current); + if(prev.get() > current) { + while (prev.get() - current > 0) { + Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, current); + current += 2; + } + }else{ + while (prev.get() - current < 0) { + Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, current); + current -= 2; + } + } + prev.set(current); + },1000); + } + + private int findFrontFacingCamera() { + return 2; + } + + private Bitmap getPreviewBitmap() { + AtomicReference bitmap = null; + Camera mCamera = Camera.open(findFrontFacingCamera()); + mCamera.setPreviewCallback((data, camera) -> { + if (camera != null) { + Camera.Parameters parameters = camera.getParameters(); + int imageFormat = parameters.getPreviewFormat(); + if (imageFormat == ImageFormat.NV21) { + int w = parameters.getPreviewSize().width; + int h = parameters.getPreviewSize().height; + + YuvImage yuvImage = new YuvImage(data, imageFormat, w, h, null); + Rect rect = new Rect(0, 0, w, h); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + yuvImage.compressToJpeg(rect, 100, outputStream); + + bitmap.set(BitmapFactory.decodeByteArray(outputStream.toByteArray(), 0, outputStream.size())); + } else if (imageFormat == ImageFormat.JPEG || imageFormat == ImageFormat.RGB_565) { + bitmap.set(BitmapFactory.decodeByteArray(data, 0, data.length)); + } + } + } + ); + mCamera.stopPreview(); + mCamera.release(); + return bitmap.get(); + } + private int calculateBrightnessEstimate(Bitmap bitmap) { + int R = 0; int G = 0; int B = 0; + int height = bitmap.getHeight(); + int width = bitmap.getWidth(); + int n = 0; + int[] pixels = new int[width * height]; + bitmap.getPixels(pixels, 0, width, 0, 0, width, height); + for (int i = 0; i < pixels.length; i += 5) { + int color = pixels[i]; + R += Color.red(color); + G += Color.green(color); + B += Color.blue(color); + n++; + } + return (R + B + G) / (n * 3); + } +} diff --git a/universal7885-common/apps/CameraLightSensor/res/drawable-v24/ic_launcher_foreground.xml b/universal7885-common/apps/CameraLightSensor/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/res/drawable/ic_launcher_background.xml b/universal7885-common/apps/CameraLightSensor/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-anydpi-v26/ic_launcher.xml b/universal7885-common/apps/CameraLightSensor/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-anydpi-v26/ic_launcher_round.xml b/universal7885-common/apps/CameraLightSensor/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-hdpi/ic_launcher.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-hdpi/ic_launcher_round.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-mdpi/ic_launcher.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-mdpi/ic_launcher_round.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-xhdpi/ic_launcher.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-xhdpi/ic_launcher_round.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-xxhdpi/ic_launcher.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-xxhdpi/ic_launcher_round.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-xxxhdpi/ic_launcher.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/mipmap-xxxhdpi/ic_launcher_round.webp b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/universal7885-common/apps/CameraLightSensor/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/universal7885-common/apps/CameraLightSensor/res/values-night/themes.xml b/universal7885-common/apps/CameraLightSensor/res/values-night/themes.xml new file mode 100644 index 0000000..2fc2bce --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/values-night/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/res/values/colors.xml b/universal7885-common/apps/CameraLightSensor/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/res/values/strings.xml b/universal7885-common/apps/CameraLightSensor/res/values/strings.xml new file mode 100644 index 0000000..a2a4d20 --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/values/strings.xml @@ -0,0 +1,3 @@ + + CameraLightSensor + \ No newline at end of file diff --git a/universal7885-common/apps/CameraLightSensor/res/values/themes.xml b/universal7885-common/apps/CameraLightSensor/res/values/themes.xml new file mode 100644 index 0000000..a27548d --- /dev/null +++ b/universal7885-common/apps/CameraLightSensor/res/values/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file