K560_MTK6761_Q_Go_Settings模块 wiko features(一)

Posted by DoubleWay on April 27, 2020

wiko features

设置里的wiko features主要就是一些wiko的需求功能。

从刚才的top_level_settings.xml资源文件可以看到,和wiko features相关的主要是WiosFeatureDashboardFragment和TopLevelWiosFeaturePreferenceController。

WiosFeatureDashboardFragment:
@Override
protected int getPreferenceScreenResId() {
    return R.xml.wios_feature_fragment;
}

可以看到,wiko features菜单里面记载的布局文件是wios_feature_fragment.xml。

<PreferenceScreen    
     xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
        android:title="@string/wios_feature_settings">

   <PreferenceCategory
       android:key="display_category"
      android:title="@string/wiko_feature_category_display">
      <!-- Single Hand Mode -->
      <Preference
          android:key="single_hand"
         android:title="@string/single_hand_settings_title"
         android:icon="@drawable/ic_one_handed_wios"
         android:fragment="com.tinno.SingleHandSettings"/>
      
                   。。。。。。。。。。。。。。。。。。。。。。。。。
      <!-- Home Screen Management -->
      <Preference
          android:key="homescreen_management"
          android:title="@string/wios_feature_display_home_screen_management_title"  
          android:icon="@drawable/ic_home_settings_wios">
          <intent
             android:action="android.intent.action.MAIN"
            android:targetPackage="com.wiko.launcherq"
            android:targetClass="com.wiko.settings.SettingsActivity" />
      </Preference>
         。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
      <!-- Indicator Lamp -->
      <Preference
          android:key="indicator_lamp"
         android:title="@string/wios_feature_display_indicator_lamp_title"
         android:icon="@drawable/ic_indicator_lamp_wios" >
                  <intent android:targetPackage="com.tinno.hightlights"
                   android:targetClass="com.tinno.hightlights.HintlightsActivity"/>
      </Preference>
             。。。。。。。。。。。。。。。。。。。。。。。。。。。
   </PreferenceCategory>
</PreferenceScreen>

布局显示的就是wiko features的功能列表,如果你想去掉列表里面的某项功能,一种方法就是直接修改资源文件,直接屏蔽功能的preference。当然,这样修改是有风险的,如果是自己项目拉出的分支,不会影响到其他项目可以这样修改。

还有种方法就是可以增加宏控

private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, Lifecycle lifecycle) {
    final List<AbstractPreferenceController> controllers = new ArrayList<>();
    // Display
    controllers.add(new SingleHandController(context));
    //controllers.add(new SingleHandSwitchController(context,lifecycle));
    controllers.add(new AmbientDisplayController(
            context,
            new AmbientDisplayConfiguration(context)));
    // controllers.add(new AppZoomController(context));
    controllers.add(new HomeScreenManagementController(context));
    controllers.add(new HomeScreenManagementGoController(context));
    controllers.add(new GalleryLockScreenController(context));
    controllers.add(new IndicatorLampController(context));
    controllers.add(new NavButtonSettingController(context));

WiosFeatureDashboardFragment里面有一个buildPreferenceControllers方法,作用是获得各个Preference的Controller添加到controllers中,当然直接屏蔽controllers.add方法就想去掉是没有用的(我试过),一般是进入你想去掉的某项功能controller,比如IndicatorLampController:

@Override
public boolean isAvailable() {
    return Utils.DISPLAY_INDICATOR_LAMP_SUPPORT;
}

里面的isAvailable()方法就是控制perference的显示与否,一般修改就在这里加个宏控就行了:

public boolean isAvailable() {
    if(SystemProperties.getBoolean("ro.feature.show_IndicatorLamp", true)) {
        return Utils.DISPLAY_INDICATOR_LAMP_SUPPORT;
    }
}

单手模式(one hand mode ):

部分wiko的项目会要求移植和集成单手模式的功能,因为Q的项目,所以是以express2.0方式来实现的。

以K560_MTK6761_Q_Go项目为例,

在自己的订单仓库下的configs文件李添加了一个功能开关,
# TINNO BEGIN
#FEATURE_SINGLE_HAND hsg 20190904
FEATURE_SINGLE_HAND := yes
# TINNO END

这个开关的功能是是否启用wiko菜单里面的单手模式功能

vendor/tinno/common/external/SingleHand/configs.mk

ifeq ($(strip $(FEATURE_SINGLE_HAND)), yes)
    PRODUCT_PRODUCT_PROPERTIES += ro.feature.singlehand=true 
    PRODUCT_PACKAGES += singlehand
endif

vendor/tinno/common/express20/modules/express20_interface/src/main/java/express20/Features.java

public static final boolean MBA_FTR_SingleHand_REQC1206 = get("ro.feature.singlehand", false);

vendor/tinno/common/external/SingleHand/packages/apps/Settings/common/com/tinno/SingleHandController.java

@Override
public boolean isAvailable() {
    return express20.Features.MBA_FTR_SingleHand_REQC1206;
}
然后对单手模式需要的一些资源文件进行了overlay

vendor/tinno/common/external/CustomReqDll/singlehand/

vendor/tinno/common/external/SingleHand

SingleHandSettings.java:单手模式整体界面状态,生命周期等

SingleHandController.java:控制器,是否显示,Summary变化

FasterAnimationsContainer:动画效果

vendor/tinno/common/external/SingleHand里面进行修改,在MtkSettings单独编译也能编到,因为在当前目录下的configs.mk文件中定义了

TINNO_SINGLEHAND_PATH := vendor/tinno/common/external/SingleHand
BUILD_TINNO_SINGLEHAND := $(TINNO_SINGLEHAND_PATH)/common.mk

在MtkSettings的Android.mk中:

# TINNO BEGIN

# FEATURE_SINGLE_HAND hsg 20190711

LOCAL_STATIC_JAVA_LIBRARIES += singlehand.hideapi
include $(BUILD_TINNO_SINGLEHAND)

# TINNO END
在AndroidManifest.xml中添加定义的SingleHandSettings

MtkSettings里面的任何文件,activity或者fragment等都需要在AndroidManifest定义,还有看需不需要在display_settings里面添加,有些项目(除wiko)是在settings->display里面显示的。

看需求,需不需要将功能加入qs,如果需要的话

http://192.168.10.207/#/c/83693/

vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml

<!-- The default tiles to display in QuickSettings -->
    <string name="quick_settings_tiles_default" translatable="false">
        wifi,singlehand,bt,simdataconnection,dnd,flashlight,rotation,battery,cell,airplane,cast
    </string>

添加你需要添加的快捷开关的字符串,它是根据一个字符串来读取的。

mediatek/proprietary/packages/apps/SystemUI/src/com/ape/systemui/qs/tiles/SinglehandTile.java

添加功能的tile文件。

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java

// TINNO BEGIN
            // FEATURE_SINGLE_HAND hsg 20190711
            case "singlehand":
                return new SinglehandTile(mHost);
            // TINNO END

增加需求功能的判断

具体功能实现提取出来在express2.0中实现

vendor/tinno/common/express20/modules/singlehand/src/main/java/express20/singlehand