diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java index 30d4b7f7c8fb0ca8f6c16d67047885667bad9515..fd360c2b1a0b59b76b4797c229f2cd5fc7265c04 100644 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java @@ -1,9 +1,9 @@ package com.kunzisoft.switchdatetime; +import com.kunzisoft.switchdatetime.date.CalendarManager; import com.kunzisoft.switchdatetime.date.OnYearSelectedListener; import com.kunzisoft.switchdatetime.date.widget.ListPickerYearView; import com.kunzisoft.switchdatetime.event.MessageEvent; -import com.kunzisoft.switchdatetime.provider.CalendarProvider; import com.kunzisoft.switchdatetime.provider.PageProvider; import com.kunzisoft.switchdatetime.time.RadialPickerLayout; import com.kunzisoft.switchdatetime.time.SwitchTimePicker; @@ -92,7 +92,6 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { private String mouthArr[]; - private List mAdapters = new ArrayList<>(); /** * 当前系统语言是否是中文 */ @@ -441,7 +440,7 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { } }); pageSlider = (PageSlider) dateTimeLayout.findComponentById(ResourceTable.Id_pageslider); - pageProvider = new PageProvider(mContext, calendar, initViews(calendar), mAdapters); + pageProvider = new PageProvider(mContext, calendar, initViews(calendar)); pageSlider.setProvider(pageProvider); pageSlider.addPageChangedListener(new PageSlider.PageChangedListener() { @Override @@ -471,25 +470,23 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { private List initViews(Calendar original_calendar) { List views = new ArrayList<>(); - mAdapters.clear(); for (int i = 0; i < 3; i++) { - DirectionalLayout rootLayout = (DirectionalLayout) LayoutScatter.getInstance(mContext) - .parse(ResourceTable.Layout_pagerslide_item, null, false); - Calendar calendar = PageProvider.calculateDate(original_calendar, i); - ListContainer listContainer = (ListContainer) rootLayout.findComponentById(ResourceTable.Id_listcontainer); - TableLayoutManager tableLayoutManager = new TableLayoutManager(); - tableLayoutManager.setColumnCount(7); - tableLayoutManager.setRowCount(7); - tableLayoutManager.setOrientation(Component.HORIZONTAL); - listContainer.setLayoutManager(tableLayoutManager); + DirectionalLayout rootLayout; + if (isOrientation) { + rootLayout = (DirectionalLayout) LayoutScatter.getInstance(mContext) + .parse(ResourceTable.Layout_pagerslide_item, null, false); + } else { + rootLayout = (DirectionalLayout) LayoutScatter.getInstance(mContext) + .parse(ResourceTable.Layout_pagerslide_item_land, null, false); + } - CalendarProvider calendarAdapter = new CalendarProvider(mContext, calendar); - mAdapters.add(calendarAdapter); + Calendar calendar = PageProvider.calculateDate(original_calendar, i); + CalendarManager calendarManager = new CalendarManager(); + calendarManager.setCalendarManager(rootLayout, calendar); - listContainer.setItemProvider(calendarAdapter); + rootLayout.setTag(calendarManager); views.add(rootLayout); } - return views; } @@ -566,8 +563,10 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { // text_month.setText(s); setTextMonthAnimator(s); MessageEvent.month = mon; + MessageEvent.monthInt = month; System.out.println("-->>setMonth.MessageEvent.month= " + MessageEvent.month); MessageEvent.year = String.valueOf(year); + MessageEvent.yearInt = year; } private void setTextMonthAnimator(String s) { @@ -640,13 +639,14 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent messageEvent) { - System.out.println("-->>onMessageEvent = " + MessageEvent.month); if (Integer.valueOf(messageEvent.getDay()) < 10) { monthAndDayHeaderValues.setText(MessageEvent.month + " 0" + messageEvent.getDay()); } else { monthAndDayHeaderValues.setText(MessageEvent.month + " " + messageEvent.getDay()); } + MessageEvent.dayInt = Integer.parseInt(messageEvent.getDay()); + yearHeaderValues.setText(MessageEvent.year); if (isLaChina) { diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/date/CalendarManager.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/date/CalendarManager.java new file mode 100644 index 0000000000000000000000000000000000000000..f372472fcfc17cef9ea7e590bd005a2e678c64a2 --- /dev/null +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/date/CalendarManager.java @@ -0,0 +1,126 @@ +package com.kunzisoft.switchdatetime.date; + +import com.kunzisoft.switchdatetime.ResourceTable; +import com.kunzisoft.switchdatetime.event.MessageEvent; +import ohos.agp.components.Component; +import ohos.agp.components.DirectionalLayout; +import ohos.agp.components.Text; +import ohos.agp.components.element.PixelMapElement; +import ohos.agp.utils.Color; +import ohos.data.DatabaseHelper; +import ohos.data.preferences.Preferences; +import ohos.global.resource.NotExistException; +import ohos.global.resource.Resource; +import org.greenrobot.eventbus.EventBus; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class CalendarManager { + private List mTexts = new ArrayList<>(); + + private int original_year; + private int original_month; + private int original_day; + private int current_month = 0; + private int firstWeekOffset = 0; + private int offset = 0; + private int month; + private boolean isCurrentMonth; + private int year; + private Preferences mSelDatePreference; + private boolean isOrientation; + + public void setCalendarManager(Component component, Calendar calendar) { + // 获取保存的手机横竖屏情况(true - 竖屏;false - 横屏) + DatabaseHelper databaseHelper = new DatabaseHelper(component.getContext()); + Preferences orientation = databaseHelper.getPreferences("ori_pref"); + isOrientation = orientation.getBoolean("orientation", true); + mSelDatePreference = databaseHelper.getPreferences("sel_date"); + + // 初始化布局 + findTexts(component, ResourceTable.Id_include_first); + findTexts(component, ResourceTable.Id_include_second); + findTexts(component, ResourceTable.Id_include_third); + findTexts(component, ResourceTable.Id_include_forth); + findTexts(component, ResourceTable.Id_include_five); + findTexts(component, ResourceTable.Id_include_six); + + // 初始化数据 + initData(calendar); + } + + private void findTexts(Component component, int resId) { + DirectionalLayout include = (DirectionalLayout) component.findComponentById(resId); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_sun)); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_mon)); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_tue)); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_web)); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_thu)); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_fri)); + mTexts.add((Text) include.findComponentById(ResourceTable.Id_day_sat)); + } + + public void initData(Calendar calendar) { + original_year = calendar.get(Calendar.YEAR); + original_month = calendar.get(Calendar.MONTH); + original_day = calendar.get(Calendar.DAY_OF_MONTH); + current_month = calendar.get(Calendar.MONTH); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + firstWeekOffset = Calendar.SATURDAY - dayOfWeek + 1; + offset = firstWeekOffset - 7; + for (int i = 0; i < 42; i++) { + calendar.set(original_year, original_month, original_day); + calendar.add(Calendar.DAY_OF_YEAR, offset); + offset++; + year = calendar.get(Calendar.YEAR); + month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + isCurrentMonth = isCurrentMonth(month); + Text text = mTexts.get(i); + text.setText(day + ""); + + if (year == MessageEvent.yearInt && month == MessageEvent.monthInt && day == MessageEvent.dayInt){ + text.setTextColor(Color.WHITE); + setTxtBg(text); + } else { + if (!isCurrentMonth) { + text.setTextColor(Color.GRAY); + text.setEnabled(false); + } else { + text.setEnabled(true); + text.setTextColor(Color.BLACK); + } + text.setBackground(null); + } + + text.setClickedListener(component -> { + Text contentTxt = (Text) component; + contentTxt.setTextColor(Color.WHITE); + setTxtBg(contentTxt); + + EventBus.getDefault().post(new MessageEvent(contentTxt.getText())); + }); + } + } + + private void setTxtBg(Text text) { + try { + //获取Media文件夹中的图片资源 + Resource bgResource = text.getResourceManager().getResource(ResourceTable.Media_round); + + //根据资源生成PixelMapElement实例 + PixelMapElement pixBg = new PixelMapElement(bgResource); + text.setBackground(pixBg); + } catch (IOException | NotExistException e) { + e.printStackTrace(); + } + + } + + private boolean isCurrentMonth(int month) { + return current_month == month; + } +} diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/event/MessageEvent.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/event/MessageEvent.java index c8e1a4e857956456f037658e6b9e5e696b623f1a..4362002cb941d59efbea1d2672f560b749229fd3 100644 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/event/MessageEvent.java +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/event/MessageEvent.java @@ -20,6 +20,10 @@ public class MessageEvent { public static String month = ""; public static String year = ""; + public static int monthInt = -1; + public static int yearInt = -1; + public static int dayInt = -1; + /** * 构造方法 * diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java deleted file mode 100644 index 89afe524421a32adfaa4e9989871150ec09c44d5..0000000000000000000000000000000000000000 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.kunzisoft.switchdatetime.provider; - - -import com.kunzisoft.switchdatetime.ResourceTable; -import com.kunzisoft.switchdatetime.event.MessageEvent; - -import ohos.agp.components.*; -import ohos.agp.utils.Color; -import ohos.app.Context; - -import ohos.data.DatabaseHelper; -import ohos.data.preferences.Preferences; -import org.greenrobot.eventbus.EventBus; - - -import java.util.Calendar; - - -public class CalendarProvider extends BaseItemProvider { - private Preferences mSelDatePreference; - private Context context; - private Calendar calendar; - private int current_month = 0; - private int original_year; - private int original_month; - private int original_day; - private int year; - private int month; - private int day; - private int dayOfWeek; - private int firstWeekOffset = 0; - private int offset = 0; - private ViewHolder viewHolder = null; - private DependentLayout lastview = null; - private boolean isCk = true; - private boolean isCurrentMonth; - private boolean isOrientation; - - /** - * 构造方法 - * - * @param context context - * @param calendar calendar - */ - public CalendarProvider(Context context, Calendar calendar) { - this.context = context; - - upData(calendar); - - // 获取保存的手机横竖屏情况(true - 竖屏;false - 横屏) - DatabaseHelper databaseHelper = new DatabaseHelper(context); - Preferences orientation = databaseHelper.getPreferences("ori_pref"); - isOrientation = orientation.getBoolean("orientation", true); - - mSelDatePreference = databaseHelper.getPreferences("sel_date"); - } - - public void upData(Calendar calendar){ - this.calendar = calendar; - original_year = calendar.get(Calendar.YEAR); - original_month = calendar.get(Calendar.MONTH); - original_day = calendar.get(Calendar.DAY_OF_MONTH); - current_month = calendar.get(Calendar.MONTH); - int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); - firstWeekOffset = Calendar.SATURDAY - dayOfWeek + 1; - offset = firstWeekOffset - 7; - } - - @Override - public int getCount() { - return 49; - } - - @Override - public Object getItem(int i) { - return null; - } - - @Override - public long getItemId(int i) { - return 0; - } - - @Override - public Component getComponent(int position, Component componentP, ComponentContainer componentContainer) { - Component component = componentP; - if (component == null) { - // 获取当前布局 - int xmlId; - if (isOrientation) { - xmlId = ResourceTable.Layout_calendar_item_layout; - } else { - xmlId = ResourceTable.Layout_calendar_item_layout_land; - } - component = LayoutScatter.getInstance(context) - .parse(xmlId, null, false); - viewHolder = new ViewHolder(); - viewHolder.item_root = (DependentLayout) component.findComponentById(ResourceTable.Id_item_root); - viewHolder.item_text = (Text) component.findComponentById(ResourceTable.Id_item_text); - viewHolder.item_background = (Image) component.findComponentById(ResourceTable.Id_item_background); - component.setTag(viewHolder); - } else { - if (component.getTag() instanceof ViewHolder) { - viewHolder = (ViewHolder) component.getTag(); - } - } - if (viewHolder != null) { - setData(position, viewHolder); - -// int year1 = mSelDatePreference.getInt("year",0); -// int month1 = mSelDatePreference.getInt("month", 0); -// int day1 = mSelDatePreference.getInt("day", 0); -// -// if (position >= 7 && year1 != 0 && month1 != 0 && day1 != 0 && year1 == year && (month1) == (Utils.month+1) -// && day1 == Integer.valueOf(viewHolder.item_text.getText())){ -// viewHolder.item_background.setVisibility(Component.VISIBLE); -// } else { -// viewHolder.item_background.setVisibility(Component.HIDE); -// } - viewHolder.item_root.setClickedListener(new Component.ClickedListener() { - @Override - public void onClick(Component component) { - - if (position < 7) { - return; - } - if (lastview == null) { - lastview = (DependentLayout) component; - } -// clearBackground(lastview); - Image image = (Image) component.findComponentById(ResourceTable.Id_item_background); - image.setVisibility(Component.VISIBLE); - Text item_text = (Text) component.findComponentById(ResourceTable.Id_item_text); - item_text.setTextColor(Color.WHITE); - lastview = (DependentLayout) component; - EventBus.getDefault().post(new MessageEvent(item_text.getText())); - - mSelDatePreference.putInt("year", year); - mSelDatePreference.putInt("month", month); - mSelDatePreference.putInt("day",Integer.valueOf(item_text.getText())); - mSelDatePreference.flushSync(); - } - }); - } - return component; - } - - class ViewHolder { - private DependentLayout item_root; - private Text item_text; - private Image item_background; - } - - private void setData(int position, ViewHolder viewHolder) { - switch (position) { - case 0: - viewHolder.item_text.setText("Sun"); - - break; - case 1: - viewHolder.item_text.setText("Mon"); - break; - case 2: - viewHolder.item_text.setText("Tue"); - break; - case 3: - viewHolder.item_text.setText("Wed"); - break; - case 4: - viewHolder.item_text.setText("Thu"); - break; - case 5: - viewHolder.item_text.setText("Fir"); - break; - case 6: - viewHolder.item_text.setText("Sat"); - break; - default: - break; - } - if (position < 7) { - return; - } - resetCalendar(); - calendar.add(Calendar.DAY_OF_YEAR, offset); - offset++; - year = calendar.get(Calendar.YEAR); - month = calendar.get(Calendar.MONTH); - dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); - day = calendar.get(Calendar.DAY_OF_MONTH); - isCurrentMonth = isCurrentMonth(month); - viewHolder.item_text.setText(String.valueOf(day)); - - - if (!isCurrentMonth) { - viewHolder.item_text.setTextColor(Color.GRAY); - viewHolder.item_root.setEnabled(false); - } else { - viewHolder.item_root.setEnabled(true); - } - } - - private void resetCalendar() { - calendar.set(original_year, original_month, original_day); - } - - private boolean isCurrentMonth(int month) { - return current_month == month; - } - - private void clearBackground(DependentLayout lastview) { - Image image = (Image) lastview.findComponentById(ResourceTable.Id_item_background); - image.setVisibility(Component.HIDE); - Text item_text = (Text) lastview.findComponentById(ResourceTable.Id_item_text); - item_text.setTextColor(Color.BLACK); - } -} \ No newline at end of file diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/PageProvider.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/PageProvider.java index ab50d39db9eacd4b531aba10ce9a002c9ef5b371..35911771ec2af678fa13941f5fff19fc1fd32d37 100644 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/PageProvider.java +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/PageProvider.java @@ -15,10 +15,8 @@ package com.kunzisoft.switchdatetime.provider; -import ohos.agp.components.Component; -import ohos.agp.components.ComponentContainer; -import ohos.agp.components.DirectionalLayout; -import ohos.agp.components.PageSliderProvider; +import com.kunzisoft.switchdatetime.date.CalendarManager; +import ohos.agp.components.*; import ohos.app.Context; import java.util.Calendar; @@ -30,18 +28,19 @@ public class PageProvider extends PageSliderProvider { private List mViews; - private List mAdapters; + private int mOldPosition = -1; /** * constructor * * @param context context + * @param calendar calendar + * @param views 缓存view */ - public PageProvider(Context context, Calendar calendar, List views, List adapters) { + public PageProvider(Context context, Calendar calendar, List views) { mContext = context; original_calendar = calendar; mViews = views; - mAdapters = adapters; } @Override @@ -53,11 +52,12 @@ public class PageProvider extends PageSliderProvider { public Object createPageInContainer(ComponentContainer componentContainer, int i) { int index = i % mViews.size(); DirectionalLayout rootLayout = (DirectionalLayout) mViews.get(index); - if (componentContainer.getChildIndex(rootLayout) != -1) { - componentContainer.removeComponent(rootLayout); + Object obj = rootLayout.getTag(); + if (obj instanceof CalendarManager) { + CalendarManager calendarManager = (CalendarManager) obj; + Calendar calendar = calculateDate(original_calendar, i); + calendarManager.initData(calendar); } - mAdapters.get(index).upData(calculateDate(original_calendar, i)); - mAdapters.get(index).notifyDataChanged(); componentContainer.addComponent(rootLayout); @@ -87,6 +87,7 @@ public class PageProvider extends PageSliderProvider { month = month - 12 * times; } calendar.set(year, month, day); + System.out.println(); return calendar; } } diff --git a/switchdatetime/src/main/resources/base/layout/calendar_item_layout.xml b/switchdatetime/src/main/resources/base/layout/calendar_item_layout.xml index 3462f22a9d8778c1d279ec08218440452760b623..b8d53f62ca817a49a810fccab540fb391a13509e 100644 --- a/switchdatetime/src/main/resources/base/layout/calendar_item_layout.xml +++ b/switchdatetime/src/main/resources/base/layout/calendar_item_layout.xml @@ -21,11 +21,12 @@ diff --git a/switchdatetime/src/main/resources/base/layout/calendar_layout.xml b/switchdatetime/src/main/resources/base/layout/calendar_layout.xml new file mode 100644 index 0000000000000000000000000000000000000000..31cb6e71c9caeeef54c3f240a800778184aea82c --- /dev/null +++ b/switchdatetime/src/main/resources/base/layout/calendar_layout.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/switchdatetime/src/main/resources/base/layout/calendar_layout_land.xml b/switchdatetime/src/main/resources/base/layout/calendar_layout_land.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4b023e333a29cc820e49c9c645b9399fe5a7946 --- /dev/null +++ b/switchdatetime/src/main/resources/base/layout/calendar_layout_land.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/switchdatetime/src/main/resources/base/layout/pagerslide_item.xml b/switchdatetime/src/main/resources/base/layout/pagerslide_item.xml index f04601a20c6b21b0706cc85bd7551ceb69c29e64..61796e0a0f7270c228d4a4b663c86c0503eb1567 100644 --- a/switchdatetime/src/main/resources/base/layout/pagerslide_item.xml +++ b/switchdatetime/src/main/resources/base/layout/pagerslide_item.xml @@ -6,9 +6,105 @@ ohos:alignment="center" ohos:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + + ohos:layout="$layout:calendar_layout" + ohos:width="match_parent"/> \ No newline at end of file diff --git a/switchdatetime/src/main/resources/base/layout/pagerslide_item_land.xml b/switchdatetime/src/main/resources/base/layout/pagerslide_item_land.xml new file mode 100644 index 0000000000000000000000000000000000000000..190e905dae8228095fc929fdcabb893f71300942 --- /dev/null +++ b/switchdatetime/src/main/resources/base/layout/pagerslide_item_land.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file