Last Updated on : 2024-03-14 01:51:54download
This topic describes generic configurations to integrate a UI BizBundle of Tuya Smart Life App SDK with your Android project. For more information, see ui-bizbundle-sample on GitHub.
Tuya has deprecated the classpath
field in com.tuya.android.module:tymodule-config:latestVersion
. To achieve optimal compatibility, we recommend that you remove this field.
For the UI BizBundle, the value of android:minSdkVersion
is 19
and the value of android:targetSdkVersion
is 29
. Your app can only be built with AndroidX.
This section describes the configuration files and Android dependencies that are required by the UI BizBundle.
After the UI BizBundle is updated, you must download the configuration files again. For more information about the updates, see Changelog.
Item | Description | Required |
---|---|---|
assets | module_app.json, x_platform_config.json, thing_pbt_group_config.json, and thing_plugin_config.json are service configuration files. Copy and paste them to the assets folder in the app directory to make the configurations effective. |
Yes |
res |
|
res/values/compat-colors.xml and res/values are required. |
Configurations of theme colors:
Parameters of colors.xml
Parameter | Description | Default value |
---|---|---|
thing_theme_color_m1 | Theme color resources in normal state | #FFFF5A28 |
thing_theme_color_m1_1 | Theme color resources in disabled state | #33FF5A28 |
thing_theme_color_m1_2 | Theme color resources in pressed state | #FFFF6B3E |
thing_theme_color_m1_alpha_5 | Theme color resources with transparency set to 5% | #0DFF5A28 |
thing_theme_color_m1_alpha_10 | Theme color resources with transparency set to 10% | #1AFF5A28 |
thing_theme_color_m1_alpha_15 | Theme color resources with transparency set to 15% | #26FF5A28 |
thing_theme_color_m1_alpha_20 | Theme color resources with transparency set to 20% | #33FF5A28 |
thing_theme_color_m1_alpha_25 | Theme color resources with transparency set to 25% | #40FF5A28 |
thing_theme_color_m1_alpha_30 | Theme color resources with transparency set to 30% | #4DFF5A28 |
thing_theme_color_m1_alpha_35 | Theme color resources with transparency set to 35% | #59FF5A28 |
thing_theme_color_m1_alpha_40 | Theme color resources with transparency set to 40% | #66FF5A28 |
thing_theme_color_m1_alpha_45 | Theme color resources with transparency set to 45% | #73FF5A28 |
thing_theme_color_m1_alpha_50 | Theme color resources with transparency set to 50% | #80FF5A28 |
thing_theme_color_m1_alpha_55 | Theme color resources with transparency set to 55% | #8CFF5A28 |
thing_theme_color_m1_alpha_60 | Theme color resources with transparency set to 60% | #99FF5A28 |
thing_theme_color_m1_alpha_65 | Theme color resources with transparency set to 65% | #A6FF5A28 |
thing_theme_color_m1_alpha_70 | Theme color resources with transparency set to 70% | #B3FF5A28 |
thing_theme_color_m1_alpha_75 | Theme color resources with transparency set to 75% | #BFFF5A28 |
thing_theme_color_m1_alpha_80 | Theme color resources with transparency set to 80% | #CCFF5A28 |
thing_theme_color_m1_alpha_85 | Theme color resources with transparency set to 85% | #D9FF5A28 |
thing_theme_color_m1_alpha_90 | Theme color resources with transparency set to 90% | #E6FF5A28 |
thing_theme_color_m1_alpha_95 | Theme color resources with transparency set to 95% | #F2FF5A28 |
Configurations of ui_theme_config.json
{
"color_alpha":{
"N1":0.9,
"N2":0.7,
"N3":0.5,
"N4":0.3,
"N5":0.7,
"N6":0.2,
"N7":0.1,
"N8":0.4
},
"colors":{
"B1":"#F8F8F8",
"B2":"#FFFFFF",
"B3":"#FFFFFF",
"B4":"#FFFFFF",
"B5":"#FFFFFF",
"M1":"#FF5A28", // M1 means the theme color setting. Default value: #FF5A28. Only M1 can be modified. Other fields cannot be modified.
"M2":"#FF4444",
"M3":"#00CC99",
"M4":"#1989FA",
"M5":"#FF5A28"
},
"corner":{
"alert_corner_type":"angle",
"button_corner_type":"angle",
"card_corner_type":"angle"
},
"font":{
"app_bold_font":"",
"app_font":""
}
}
bg_text_bts.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/mg_2" />
<solid android:color="@color/primary_button_select_color" />
</shape>
</item>
<item android:state_selected="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/mg_2" />
<solid android:color="@color/primary_button_select_color" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/mg_2" />
<solid android:color="@color/primary_button_select_color" />
</shape>
</item>
<item android:state_enabled="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/mg_2" />
<solid android:color="@color/primary_button_bg_color" />
</shape>
</item>
<item android:state_enabled="false">
<shape>
<corners android:radius="@dimen/mg_2" />
<solid android:color="@color/gray_99" />
</shape>
</item>
</selector>
<!-- Required configurations -->
<!-- Base application theme. -->
<style name="Base_BizBundle_Theme" parent="AppTheme">
<item name="status_font_color">@color/status_font_color</item>
<item name="status_bg_color">@color/status_bg_color</item>
<item name="navbar_font_color">@color/navbar_font_color</item>
<item name="navbar_bg_color">@color/navbar_bg_color</item>
<item name="app_bg_color">@color/app_bg_color</item>
<item name="fragment_bg_color">@color/app_bg_color</item>
<item name="list_primary_color">@color/list_primary_color</item>
<item name="list_sub_color">@color/list_sub_color</item>
<item name="list_secondary_color">@color/list_secondary_color</item>
<item name="list_line_color">@color/list_line_color</item>
<item name="list_bg_color">@color/list_bg_color</item>
<item name="primary_button_font_color">@color/primary_button_font_color</item>
<item name="primary_button_bg_color">@color/primary_button_bg_color</item>
<item name="secondary_button_font_color">@color/secondary_button_font_color</item>
<item name="secondary_button_bg_color">@color/secondary_button_bg_color</item>
<item name="notice_font_color">@color/notice_font_color</item>
<item name="notice_bg_color">@color/notice_bg_color</item>
<item name="bg_normal_text_bt">@drawable/bg_text_bts</item>
<item name="app_name">@string/app_name</item>
<item name="is_splash_used">false</item>
<item name="ap_default_ssid">@string/ap_mode_ssid</item>
<item name="ap_connect_description">@string/thing_ap_connect_description</item>
<item name="is_scan_support">@bool/is_scan_support</item>
<item name="is_need_blemesh_support">@bool/is_need_blemesh_support</item>
<item name="status_bg_color_75">@color/status_bg_color_75</item>
<item name="status_bg_color_90">@color/status_bg_color_90</item>
</style>
<!-- Required configurations -->
<application
android:supportsRtl="false"
android:theme="@style/Base_BizBundle_Theme"
tools:replace="android:theme"/>
Configurations of build.gradle
in the root directory:
allprojects {
repositories {
maven { url "https://maven-other.tuya.com/repository/maven-commercial-releases/" }
google()
mavenCentral()
}
}
Configurations of build.gradle
for the app:
The Native Development Kit (NDK) configuration only supports CPU versions of Arm architectures.
android {
packagingOptions {
pickFirst 'lib/*/liblog.so'
pickFirst 'lib/*/libc++_shared.so'
pickFirst 'lib/*/libyuv.so'
pickFirst 'lib/*/libopenh264.so'
pickFirst 'lib/*/libv8wrapper.so'
pickFirst 'lib/*/libv8android.so'
}
lintOptions {
abortOnError false
}
defaultConfig {
ndk { abiFilters "armeabi-v7a", "arm64-v8a" }
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
configurations.all {
exclude group:"com.thingclips.smart",module:"thingplugin-annotation"
exclude group:"com.thingclips.android.module",module:"thingmodule-annotation"
exclude group: "com.thingclips.smart" ,module: 'thingsmart-modularCampAnno'
}
Generic configurations to initialize the UI BizBundle through the main thread:
// Do not modify the initialization sequence.
Fresco.initialize(this);
// Initializes the SDK.
ThingHomeSdk.init(this);
// Initializes the BizBundle.
ThingWrapper.init(this, new RouteEventListener() {
@Override
public void onFaild(int errorCode, UrlBuilder urlBuilder) {
// The callback of an unimplemented route.
// An unresponsive touch indicates an unimplemented route. To implement the route, set urlBuilder.target to the required route and set routing parameters in urlBuilder.params.
Log.e("router not implement", urlBuilder.target + urlBuilder.params.toString());
}
}, new ServiceEventListener() {
@Override
public void onFaild(String serviceName) {
// The callback of an unimplemented service.
Log.e("service not implement", serviceName);
}
});
ThingThemeInitializer.INSTANCE.init(context);
ThingOptimusSdk.init(this);
// Registers the home service. This service is not required for the Mall UI BizBundle.
ThingWrapper.registerService(AbsBizBundleFamilyService.class, new BizBundleFamilyServiceImpl());
// Intercepts an existing route and navigates to a custom page based on specific parameters.
RedirectService service = MicroContext.getServiceManager().findServiceByInterface(RedirectService.class.getName());
service.registerUrlInterceptor(new RedirectService.UrlInterceptor() {
@Override
public void forUrlBuilder(UrlBuilder urlBuilder, RedirectService.InterceptorCallback interceptorCallback) {
//Such as:
// Intercept the event of tapping the top-right corner of the panel to navigate to a custom page specified by the parameters of urlBuilder.
if (urlBuilder.target.equals("panelAction") && urlBuilder.params.getString("action").equals("gotoPanelMore")) {
interceptorCallback.interceptor("interceptor");
Log.e("interceptor", urlBuilder.params.toString());
} else {
interceptorCallback.onContinue(urlBuilder);
}
}
});
After the UI BizBundle is integrated, to enable login or logout with an account, call the following API methods:
// Enables login.
ThingWrapper.onLogin();
// Enables logout.
ThingWrapper.onLogout(Context context);
You can inherit the abstract class AbsBizBundleFamilyService
to set the values of homeId
and homeName
for the current home. Example:
public class BizBundleFamilyServiceImpl extends AbsBizBundleFamilyService {
private long mHomeId;
private String mHomeName;
@Override
public long getCurrentHomeId() {
return mHomeId;
}
@Override
public void shiftCurrentFamily(long familyId, String curName) {
super.shiftCurrentFamily(familyId, curName);
mHomeId = familyId;
mHomeName = curName;
}
}
After a list of homes is returned, you can call the home service to set homeId
and homeName
for a home. Example:
AbsBizBundleFamilyService service = MicroServiceManager.getInstance().findServiceByInterface(AbsBizBundleFamilyService.class.getName());
// Sets homeId and homeName for the current home.
service.shiftCurrentFamily(homeBean.getHomeId(), homeBean.getName());
Is this page helpful?
YesFeedbackIs this page helpful?
YesFeedback