zenfone9: Dynamicaly set vendor.camera.apk.usingname
based on
https://github.com/omnirom/android_device_oneplus_oneplus7pro/commit/f8c54c6a6f586bd14d4fc4ebd21f1dfb86e5c393
https://github.com/omnirom/android_device_oneplus_oneplus7pro/commit/197ae1884ff6ebf4c2c4dcbe7800ab88d9c3363e
Change-Id: Ia8aba937f07c859a5c29cd96a710be17bad94f5a
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 8fb2a32..1a5c9f6 100755
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -89,6 +89,9 @@
BUILD_BROKEN_DUP_RULES := true
BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true
+# Camera
+TARGET_CAMERA_NEEDS_CLIENT_INFO := true
+
# charger
BOARD_CHARGER_DISABLE_INIT_BLANK := true
@@ -234,6 +237,7 @@
include vendor/omni/sepolicy/sepolicy.mk
include device/qcom/sepolicy_vendor/SEPolicy.mk
BOARD_VENDOR_SEPOLICY_DIRS += $(DEVICE_PATH)/sepolicy/vendor
+SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS += $(DEVICE_PATH)/sepolicy/private
# VNDK
NEED_AIDL_NDK_PLATFORM_BACKEND := true
diff --git a/DeviceParts/src/org/omnirom/device/KeyHandler.java b/DeviceParts/src/org/omnirom/device/KeyHandler.java
index 74e72aa..676e597 100644
--- a/DeviceParts/src/org/omnirom/device/KeyHandler.java
+++ b/DeviceParts/src/org/omnirom/device/KeyHandler.java
@@ -104,6 +104,11 @@
private static final String DT2W_CONTROL_PATH = "/proc/driver/dclick";
+ private static final String CLIENT_PACKAGE_NAME = "com.asus.camera";
+ private static final String CLIENT_PACKAGE_PATH = "/data/misc/omni/client_package_name";
+ private static final String VENDOR_PROPERTY_ACTIVITY = "vendor.camera.set.apk.activity";
+ private static final String VENDOR_PROPERTY_USINGNAME = "vendor.camera.set.apk.usingname";
+
private static final int[] sSupportedGestures = new int[]{
KEY_DOUBLE_TAP,
KEY_GESTURE_E,
@@ -152,9 +157,10 @@
private boolean mFPcheck;
private boolean mDispOn;
private boolean isFpgesture;
- private boolean isOPCameraAvail;
+ private boolean isASUSCameraAvail;
private boolean mRestoreUser;
private boolean mDoubleTapToWake;
+ private ClientPackageNameObserver mClientObserver;
private SensorEventListener mProximitySensor = new SensorEventListener() {
@Override
@@ -279,6 +285,12 @@
systemStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
systemStateFilter.addAction(Intent.ACTION_USER_SWITCHED);
mContext.registerReceiver(mSystemStateReceiver, systemStateFilter);
+
+ isASUSCameraAvail = PackageUtils.isAvailableApp(CLIENT_PACKAGE_NAME , context);
+ if (isASUSCameraAvail) {
+ mClientObserver = new ClientPackageNameObserver(CLIENT_PACKAGE_PATH);
+ mClientObserver.startWatching();
+ }
}
private class EventHandler extends Handler {
@@ -420,6 +432,10 @@
if (mUseTiltCheck) {
mSensorManager.unregisterListener(mTiltSensorListener, mTiltSensor);
}
+ if ((mClientObserver == null) && (isASUSCameraAvail)) {
+ mClientObserver = new ClientPackageNameObserver(CLIENT_PACKAGE_PATH);
+ mClientObserver.startWatching();
+ }
}
private void updateDoubleTapToWake() {
@@ -441,6 +457,10 @@
mSensorManager.registerListener(mTiltSensorListener, mTiltSensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
+ if (mClientObserver != null) {
+ mClientObserver.stopWatching();
+ mClientObserver = null;
+ }
}
private Intent createIntent(String value) {
@@ -600,4 +620,21 @@
IStatusBarService getStatusBarService() {
return IStatusBarService.Stub.asInterface(ServiceManager.getService("statusbar"));
}
+
+ private class ClientPackageNameObserver extends FileObserver {
+
+ public ClientPackageNameObserver(String file) {
+ super(CLIENT_PACKAGE_PATH, MODIFY);
+ }
+
+ @Override
+ public void onEvent(int event, String file) {
+ String pkgName = Utils.getFileValue(CLIENT_PACKAGE_PATH, "0");
+ if (event == FileObserver.MODIFY) {
+ Log.d(TAG, "client_package" + file + " and " + pkgName);
+ SystemProperties.set(VENDOR_PROPERTY_ACTIVITY, pkgName);
+ SystemProperties.set(VENDOR_PROPERTY_USINGNAME, pkgName);
+ }
+ }
+ }
}
diff --git a/prebuilt/system/etc/init/init.qcom.rc b/prebuilt/system/etc/init/init.qcom.rc
new file mode 100644
index 0000000..30e3482
--- /dev/null
+++ b/prebuilt/system/etc/init/init.qcom.rc
@@ -0,0 +1,5 @@
+on boot
+ mkdir /data/misc/omni 0770 cameraserver audio
+ write /data/misc/omni/client_package_name 0
+ chown cameraserver audio /data/misc/omni/client_package_name
+ chmod 0644 /data/misc/omni/client_package_name
diff --git a/sepolicy/private/cameraserver.te b/sepolicy/private/cameraserver.te
new file mode 100644
index 0000000..6c6b7ba
--- /dev/null
+++ b/sepolicy/private/cameraserver.te
@@ -0,0 +1,2 @@
+allow cameraserver omni_data_file:file rw_file_perms;
+allow cameraserver omni_data_file:dir write;
diff --git a/sepolicy/private/file.te b/sepolicy/private/file.te
new file mode 100644
index 0000000..1ba3a38
--- /dev/null
+++ b/sepolicy/private/file.te
@@ -0,0 +1,2 @@
+# Camera file
+type omni_data_file, file_type, data_file_type, core_data_file_type;
diff --git a/sepolicy/private/file_contexts b/sepolicy/private/file_contexts
new file mode 100644
index 0000000..3586139
--- /dev/null
+++ b/sepolicy/private/file_contexts
@@ -0,0 +1,2 @@
+# Camera
+/data/misc/omni/client_package_name u:object_r:omni_data_file:s0
diff --git a/sepolicy/private/hal_audio.te b/sepolicy/private/hal_audio.te
new file mode 100644
index 0000000..fb7de27
--- /dev/null
+++ b/sepolicy/private/hal_audio.te
@@ -0,0 +1 @@
+allow hal_audio system_suspend_hwservice:hwservice_manager find;
diff --git a/sepolicy/private/system_server.te b/sepolicy/private/system_server.te
new file mode 100644
index 0000000..e5938fe
--- /dev/null
+++ b/sepolicy/private/system_server.te
@@ -0,0 +1,2 @@
+# Camera
+allow system_server omni_data_file:file r_file_perms;
diff --git a/sepolicy/vendor/cameraserver.te b/sepolicy/vendor/cameraserver.te
new file mode 100644
index 0000000..6ba24bc
--- /dev/null
+++ b/sepolicy/vendor/cameraserver.te
@@ -0,0 +1,2 @@
+get_prop(cameraserver, vendor_set_camera_prop)
+set_prop(cameraserver, vendor_set_camera_prop)
diff --git a/sepolicy/vendor/platform_app.te b/sepolicy/vendor/platform_app.te
index 3e66ede..a820bb4 100644
--- a/sepolicy/vendor/platform_app.te
+++ b/sepolicy/vendor/platform_app.te
@@ -3,3 +3,6 @@
get_prop(platform_app, vendor_camera_prop)
allow platform_app ois_device:chr_file rw_file_perms;
+
+get_prop(platform_app, vendor_set_camera_prop)
+set_prop(platform_app, vendor_set_camera_prop)
diff --git a/sepolicy/vendor/priv_app.te b/sepolicy/vendor/priv_app.te
index 1071dac..037c071 100644
--- a/sepolicy/vendor/priv_app.te
+++ b/sepolicy/vendor/priv_app.te
@@ -1,3 +1,5 @@
get_prop(priv_app, vendor_asus_prop)
allow priv_app ois_device:chr_file rw_file_perms;
+
+get_prop(priv_app, vendor_set_camera_prop)
diff --git a/sepolicy/vendor/system_app.te b/sepolicy/vendor/system_app.te
index d3aa005..a826f1c 100644
--- a/sepolicy/vendor/system_app.te
+++ b/sepolicy/vendor/system_app.te
@@ -8,3 +8,6 @@
get_prop(system_app, vendor_asus_usb_prop)
allow system_app vendor_asus_usb_prop:property_service set;
+
+get_prop(system_app, vendor_set_camera_prop)
+set_prop(system_app, vendor_set_camera_prop)
diff --git a/sepolicy/vendor/system_server.te b/sepolicy/vendor/system_server.te
index 7d0f8b8..5aaf110 100644
--- a/sepolicy/vendor/system_server.te
+++ b/sepolicy/vendor/system_server.te
@@ -4,3 +4,6 @@
get_prop(system_server, vendor_asus_prop)
get_prop(system_server, vendor_alsp_prop)
+
+get_prop(system_server, vendor_set_camera_prop)
+set_prop(system_server, vendor_set_camera_prop)
diff --git a/sepolicy/vendor/vendor_init.te b/sepolicy/vendor/vendor_init.te
index 64f9511..e17a2bd 100644
--- a/sepolicy/vendor/vendor_init.te
+++ b/sepolicy/vendor/vendor_init.te
@@ -18,3 +18,5 @@
get_prop(vendor_init, vendor_asus_storage_prop_2)
set_prop(vendor_init, vendor_asus_storage_prop_2)
+
+get_prop(vendor_init, vendor_set_camera_prop)