From f63609cfc0fcc6a488ba7d024a1b1e3853637b09 Mon Sep 17 00:00:00 2001 From: jhenrique09 Date: Sun, 29 Mar 2020 17:38:39 -0300 Subject: [PATCH] fwb: Start device specific popup camera service conditionally Change-Id: I07f97fe58495ef666fa317d14fa1334389015e11 --- .../custom/popupcamera/PopUpCameraUtils.java | 20 +++++++++++++++++++ core/res/res/values/lineage_config.xml | 3 +++ core/res/res/values/lineage_symbols.xml | 3 +++ .../server/camera/CameraServiceProxy.java | 20 +++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java diff --git a/core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java b/core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java new file mode 100644 index 00000000000..f7988608141 --- /dev/null +++ b/core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java @@ -0,0 +1,20 @@ +/* +* Copyright (C) 2019 The Pixel Experience Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package com.android.internal.util.custom.popupcamera; + +public class PopUpCameraUtils { + public static String MANAGE_POPUP_CAMERA_SERVICE_PERMISSION = "org.pixelexperience.device.MANAGE_POPUP_CAMERA_SERVICE"; +} diff --git a/core/res/res/values/lineage_config.xml b/core/res/res/values/lineage_config.xml index 4b090379f5a..3315de74147 100644 --- a/core/res/res/values/lineage_config.xml +++ b/core/res/res/values/lineage_config.xml @@ -34,4 +34,7 @@ + + + diff --git a/core/res/res/values/lineage_symbols.xml b/core/res/res/values/lineage_symbols.xml index 155da4479fb..c7e58b3943f 100644 --- a/core/res/res/values/lineage_symbols.xml +++ b/core/res/res/values/lineage_symbols.xml @@ -25,4 +25,7 @@ + + + diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java index 5f7a72c8512..9e72fa09993 100644 --- a/services/core/java/com/android/server/camera/CameraServiceProxy.java +++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java @@ -16,6 +16,7 @@ package com.android.server.camera; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -32,6 +33,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.UserHandle; import android.os.UserManager; import android.util.ArrayMap; import android.util.ArraySet; @@ -53,6 +55,8 @@ import java.util.Set; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import com.android.internal.util.custom.popupcamera.PopUpCameraUtils; + /** * CameraServiceProxy is the system_server analog to the camera service running in cameraserver. * @@ -106,6 +110,8 @@ public class CameraServiceProxy extends SystemService private final boolean mNotifyNfc; private final boolean mAllowMediaUid; + private final String mPopUpCameraServiceComponentName; + private ScheduledThreadPoolExecutor mLogWriterService = new ScheduledThreadPoolExecutor( /*corePoolSize*/ 1); @@ -218,6 +224,8 @@ public class CameraServiceProxy extends SystemService // Don't keep any extra logging threads if not needed mLogWriterService.setKeepAliveTime(1, TimeUnit.SECONDS); mLogWriterService.allowCoreThreadTimeOut(true); + mPopUpCameraServiceComponentName = mContext.getResources().getString( + com.android.internal.R.string.config_popUpCameraServiceComponentName); } @Override @@ -338,6 +346,18 @@ public class CameraServiceProxy extends SystemService } } + @Override + public void onBootPhase(int phase) { + if (phase == PHASE_BOOT_COMPLETED && + !mPopUpCameraServiceComponentName.equals("")) { + String perm = PopUpCameraUtils.MANAGE_POPUP_CAMERA_SERVICE_PERMISSION; + mContext.enforceCallingOrSelfPermission(perm, "Missing or invalid popup camera service permission: " + perm); + Intent i = new Intent(); + i.setComponent(ComponentName.unflattenFromString(mPopUpCameraServiceComponentName)); + mContext.startServiceAsUser(i, UserHandle.SYSTEM); + } + } + /** * Dump camera usage events to log. * Package-private -- 2.25.1