介绍:在日历上添加日程,将当日日程生成卡片到桌面
1.新建卡片页面
resources-base-layout下会生成默认卡片布局页面:form_image_with_info_widget_2_2和卡片布局页面:form_image_with_info_widget_2_4。
2.在WidgetImpl.java文件中进行卡片页面初始化
public ProviderFormInfo bindFormData() {
HiLog.info(TAG, "bind form data when create form");
ProviderFormInfo providerFormInfo = new ProviderFormInfo(RESOURCE_ID_MAP.get(dimension), context);
String scheduleData = StorageUtil.initPreferences(context).getSchedule();
if(!"".equals(scheduleData)) {
ZSONArray array = ZSONArray.stringToZSONArray(scheduleData);
if(array.size()>0) {
// ComponentProvider表示Java卡片
ComponentProvider componentProvider = new ComponentProvider();
providerFormInfo.mergeActions(getFormDataCreate(array,context,dimension,componentProvider));
}
}
return providerFormInfo;
}
public static ComponentProvider getFormDataCreate(ZSONArray array,Context context,int dimension,ComponentProvider componentProvider){
componentProvider.setVisibility(ResourceTable.Id_count, Text.VISIBLE);
componentProvider.setText(ResourceTable.Id_count, array.size()+"");
ZSONArray result = StorageUtil.getCurrentCardSchedule(array);
ZSONObject schedule_current = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(0)));
if(schedule_current != null){
componentProvider.setText(ResourceTable.Id_time, schedule_current.getString("startCardShow")+"-"+schedule_current.getString("endCardShow"));
componentProvider.setText(ResourceTable.Id_schedule, schedule_current.getString("title"));
}
if (dimension == DEFAULT_DIMENSION_2X2) {
componentProvider.setIntentAgent(ResourceTable.Id_layout, getStartAbilityIntentAgent(context));
}
if (dimension == DIMENSION_2X4) {
componentProvider.setVisibility(ResourceTable.Id_noschedule, Text.HIDE);
ZSONObject schedule_1 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(1)));
if(schedule_1 != null){
// componentProvider.setText(ResourceTable.Id_time1, schedule_1.getString("startCardShow")+"-"+schedule_1.getString("endCardShow"));
componentProvider.setText(ResourceTable.Id_schedule1, schedule_1.getString("title"));
}
ZSONObject schedule_2 = null;
if(result.get(2) != null){
schedule_2 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(2)));
}
if(schedule_2 != null){
componentProvider.setVisibility(ResourceTable.Id_line, Text.VISIBLE);
// componentProvider.setText(ResourceTable.Id_time2, schedule_2.getString("startCardShow")+"-"+schedule_2.getString("endCardShow"));
componentProvider.setText(ResourceTable.Id_schedule2, schedule_2.getString("title"));
}
}
if (dimension == DIMENSION_2X4) {
componentProvider.setIntentAgent(ResourceTable.Id_more, getStartAbilityIntentAgent(context));
}
return componentProvider;
}
3.更新页面
1)配置定时刷新
public void updateFormData(long formId, Object... vars) {
HiLog.info(TAG, "update form data timing, default 30 minutes");
String scheduleData = StorageUtil.initPreferences(context).getSchedule();
if(!"".equals(scheduleData)) {
ZSONArray array = ZSONArray.stringToZSONArray(scheduleData);
if(array.size()>0) {
ComponentProvider componentProvider =
new ComponentProvider(RESOURCE_ID_MAP.get(dimension), context);
try {
((MainAbility)context).updateForm(formId, getFormDataUpdate(array,context,dimension,componentProvider));
} catch (FormException e) {
HiLog.error(TAG, e.toString());
}
}
}
}
public static ComponentProvider getFormDataUpdate(ZSONArray array,Context context,int dimension,ComponentProvider componentProvider){
componentProvider.setVisibility(ResourceTable.Id_count, Text.VISIBLE);
componentProvider.setText(ResourceTable.Id_count, array.size()+"");
ZSONArray result = StorageUtil.getCurrentCardSchedule(array);
ZSONObject schedule_current = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(0)));
if(schedule_current != null){
componentProvider.setText(ResourceTable.Id_time, schedule_current.getString("startCardShow")+"-"+schedule_current.getString("endCardShow"));
componentProvider.setText(ResourceTable.Id_schedule, schedule_current.getString("title"));
}
if (dimension == DIMENSION_2X4) {
componentProvider.setVisibility(ResourceTable.Id_noschedule, Text.HIDE);
ZSONObject schedule_1 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(1)));
if(schedule_1 != null){
// componentProvider.setText(ResourceTable.Id_time1, schedule_1.getString("startCardShow")+"-"+schedule_1.getString("endCardShow"));
componentProvider.setText(ResourceTable.Id_schedule1, schedule_1.getString("title"));
}
ZSONObject schedule_2 = null;
if(result.get(2) != null){
schedule_2 = ZSONObject.stringToZSON(ZSONObject.toZSONString(result.get(2)));
}
if(schedule_2 != null){
componentProvider.setVisibility(ResourceTable.Id_line, Text.VISIBLE);
// componentProvider.setText(ResourceTable.Id_time2, schedule_2.getString("startCardShow")+"-"+schedule_2.getString("endCardShow"));
componentProvider.setText(ResourceTable.Id_schedule2, schedule_2.getString("title"));
}
}
return componentProvider;
}
2)数据更新
try {
for(long id:formControllerManager.getAllFormIdFromSharePreference(CardConstant.JAVA_CARD_FORMS_NAME)) {
int dimension = formControllerManager.getDimension(id+"");
ComponentProvider componentProvider =
new ComponentProvider(Javacard2x4Impl.RESOURCE_ID_MAP.get(dimension), this);
updateForm(id, Javacard2x4Impl.getFormDataUpdate(array,this,dimension,componentProvider));//上一步中有此方法代码
}
} catch (FormException e) {
e.printStackTrace();
}
4.点击事件添加
private static IntentAgent getStartAbilityIntentAgent(Context context) {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.example.myohoscard")
.withAbilityName("com.example.myohoscard.MainAbility")
.build();
intent.setOperation(operation);
List<Intent> intentList = new ArrayList<>();
intentList.add(intent);
List<IntentAgentConstant.Flags> flags = new ArrayList<>();
flags.add(IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG);
IntentAgentInfo paramsInfo =
new IntentAgentInfo(200, IntentAgentConstant.OperationType.START_ABILITY, flags, intentList, null);
return IntentAgentHelper.getIntentAgent(context, paramsInfo);
}
效果: