两套开机动画,开关控制切换
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -177,5 +177,10 @@
android:title="@string/hdmi_settings"
settings:keywords="@string/hdmi_settings"
android:fragment="com.android.settings.display.HdmiSettings" />
+ <SwitchPreference
+ android:key="bootanimation_mode"
+ android:title="@string/dark_theme_main_switch_title"
+
+ settings:controller="com.android.settings.display.BootanimationModePreferenceController" />
</PreferenceCategory>
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -70,6 +70,7 @@ static const char OEM_BOOTANIMATION_FILE[] = "/oem/media/bootanimation.zip";
static const char PRODUCT_BOOTANIMATION_DARK_FILE[] = "/product/media/bootanimation-dark.zip";
static const char PRODUCT_BOOTANIMATION_FILE[] = "/product/media/bootanimation.zip";
static const char SYSTEM_BOOTANIMATION_FILE[] = "/system/media/bootanimation.zip";
+static const char SYSTEM_BOOTANIMATION_FILE_ONE[] = "/system/media/bootanimation_1.zip";
static const char APEX_BOOTANIMATION_FILE[] = "/apex/com.android.bootanimation/etc/bootanimation.zip";
static const char PRODUCT_ENCRYPTED_BOOTANIMATION_FILE[] = "/product/media/bootanimation-encrypted.zip";
static const char SYSTEM_ENCRYPTED_BOOTANIMATION_FILE[] = "/system/media/bootanimation-encrypted.zip";
@@ -675,6 +676,10 @@ void BootAnimation::findBootAnimationFile() {
static const std::vector<std::string> bootFiles = {
APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE,
OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE
+ };
+ static const std::vector<std::string> bootFiles_one = {
+ APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE,
+ OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE_ONE
};
static const std::vector<std::string> shutdownFiles = {
PRODUCT_SHUTDOWNANIMATION_FILE, OEM_SHUTDOWNANIMATION_FILE, SYSTEM_SHUTDOWNANIMATION_FILE, ""
@@ -689,7 +694,15 @@ void BootAnimation::findBootAnimationFile() {
} else if (mShuttingDown) {
findBootAnimationFileInternal(shutdownFiles);
} else {
- findBootAnimationFileInternal(bootFiles);
+
+ if(android::base::GetProperty("persist.sys.bootanimation", "0")=="0"){
+ SLOGE("sqlin bootanimation0");
+ findBootAnimationFileInternal(bootFiles);
+ }else if (android::base::GetProperty("persist.sys.bootanimation", "0")=="1"){
+ SLOGE("sqlin bootanimation1");
+ findBootAnimationFileInternal(bootFiles_one);
+ }
+
}
}
通过加载不同路径,实现动画切换
src/com/android/settings/display/BootanimationModePreferenceController.java
package com.android.settings.display;
import android.content.Context;
import android.provider.Settings;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import android.os.SystemProperties;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.R;
public class BootanimationModePreferenceController extends TogglePreferenceController {
private static final String TAG = "BootanimationModePreferenceController";
static final int ON = 1;
static final int OFF = 0;
private static String BOOT_ANIMATION = "persist.sys.bootanimation";
public BootanimationModePreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
android.util.Log.i(TAG, "BootanimationModePreferenceController: ");
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
}
@Override
public boolean isChecked() {
android.util.Log.i(TAG, "isChecked: ");
return Settings.Secure.getInt(mContext.getContentResolver(),
"otg_system", OFF) == ON;
}
@Override
public boolean setChecked(boolean isChecked) {
android.util.Log.i(TAG, "setChecked: "+isChecked);
android.os.SystemProperties.set(BOOT_ANIMATION,isChecked?"1":"0");
return Settings.Secure.putInt(mContext.getContentResolver(),
"otg_system", isChecked ? ON : OFF);
}
@java.lang.Override
public int getSliceHighlightMenuRes() {
android.util.Log.i(TAG, "getSliceHighlightMenuRes: ");
return R.string.menu_key_system;
}
}