From 18ffa10ac598069cb021ff5ed1c90a9b1d19c44c Mon Sep 17 00:00:00 2001 From: wangkai <849087763@qq.com> Date: Thu, 21 Nov 2024 16:13:50 +0800 Subject: [PATCH] 添加语音播报跳转 --- app/build.gradle | 5 +++++ base_comment/src/main/res/mipmap-xxhdpi/icon_pause_button.png | Bin 0 -> 19402 bytes lib_base/src/main/java/com/wd/common/utils/CalendarUtil.java | 332 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib_base/src/main/java/com/wd/common/utils/LunarCalender.java | 372 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib_base/src/main/java/com/wd/common/utils/ProcessUtils.java | 2 +- module_musicplayer/src/main/java/com/wd/musicplayer/ui/activity/AudioChannelActivity.java | 341 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------ module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/DrawerFragment.java | 94 ---------------------------------------------------------------------------------------------- module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/adapter/PlaylistRecommendationAdapter.java | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------ module_musicplayer/src/main/res/layout/adapter_play_recommendation.xml | 100 +++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------- module_musicplayer/src/main/res/layout/fragment_drawer.xml | 109 ------------------------------------------------------------------------------------------------------------- module_musicplayer/src/main/res/values/strings.xml | 2 ++ 11 files changed, 1008 insertions(+), 471 deletions(-) create mode 100644 base_comment/src/main/res/mipmap-xxhdpi/icon_pause_button.png create mode 100644 lib_base/src/main/java/com/wd/common/utils/CalendarUtil.java create mode 100644 lib_base/src/main/java/com/wd/common/utils/LunarCalender.java delete mode 100644 module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/DrawerFragment.java delete mode 100644 module_musicplayer/src/main/res/layout/fragment_drawer.xml diff --git a/app/build.gradle b/app/build.gradle index c49314c..e410b4c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,11 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + buildFeatures { + dataBinding true + viewBinding true + } } repositories { diff --git a/base_comment/src/main/res/mipmap-xxhdpi/icon_pause_button.png b/base_comment/src/main/res/mipmap-xxhdpi/icon_pause_button.png new file mode 100644 index 0000000..a186303 Binary files /dev/null and b/base_comment/src/main/res/mipmap-xxhdpi/icon_pause_button.png differ diff --git a/lib_base/src/main/java/com/wd/common/utils/CalendarUtil.java b/lib_base/src/main/java/com/wd/common/utils/CalendarUtil.java new file mode 100644 index 0000000..a5b02f3 --- /dev/null +++ b/lib_base/src/main/java/com/wd/common/utils/CalendarUtil.java @@ -0,0 +1,332 @@ +package com.wd.common.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * 描述: 日历转换工具类:阴历和阳历日期互换(阴历日期范围19000101~20491229)
+ * @author liu 2015-1-5 + */ +public class CalendarUtil { + // private static final Logger logger = LoggerFactory.getLogger(CalendarUtil.class); + // 计算阴历日期参照1900年到2049年 + private final static int[] LUNAR_INFO = { + 0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2, + 0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977, + 0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970, + 0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950, + 0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557, + 0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0, + 0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0, + 0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6, + 0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570, + 0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0, + 0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5, + 0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930, + 0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530, + 0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45, + 0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0 + }; + + // 允许输入的最小年份 + private final static int MIN_YEAR = 1900; + // 允许输入的最大年份 + private final static int MAX_YEAR = 2049; + // 当年是否有闰月 + private static boolean isLeapYear; + // 阳历日期计算起点 + private final static String START_DATE = "19000130"; + + + /** + * 计算阴历 {@code year}年闰哪个月 1-12 , 没闰传回 0 + * @param year 阴历年 + * @return (int)月份 + * @author liu 2015-1-5 + */ + private static int getLeapMonth(int year) { + return (int) (LUNAR_INFO[year - 1900] & 0xf); + } + + /** + * 计算阴历{@code year}年闰月多少天 + * @param year 阴历年 + * @return (int)天数 + * @author liu 2015-1-5 + */ + private static int getLeapMonthDays(int year) { + if(getLeapMonth(year)!=0){ + if((LUNAR_INFO[year - 1900] & 0xf0000)==0){ + return 29; + }else { + return 30; + } + }else{ + return 0; + } + } + + /** + * 计算阴历{@code lunarYeay}年{@code month}月的天数 + * @param lunarYeay 阴历年 + * @param month 阴历月 + * @return (int)该月天数 + * @throws Exception + * @author liu 2015-1-5 + */ + private static int getMonthDays(int lunarYeay, int month) throws Exception { + if ((month > 31) || (month < 0)) { + throw(new Exception("月份有错!")); + } + // 0X0FFFF[0000 {1111 1111 1111} 1111]中间12位代表12个月,1为大月,0为小月 + int bit = 1 << (16-month); + if(((LUNAR_INFO[lunarYeay - 1900] & 0x0FFFF)&bit)==0){ + return 29; + }else { + return 30; + } + } + + /** + * 计算阴历{@code year}年的总天数 + * @param year 阴历年 + * @return (int)总天数 + * @author liu 2015-1-5 + */ + private static int getYearDays(int year) { + int sum = 29*12; + for(int i=0x8000;i>=0x8;i>>=1){ + if((LUNAR_INFO[year-1900]&0xfff0&i)!=0){ + sum++; + } + } + return sum+getLeapMonthDays(year); + } + + /** + * 计算两个阳历日期相差的天数。计算不准确,已经废弃 + * @param startDate 开始时间 + * @param endDate 截至时间 + * @return (int)天数 + * @author liu 2015-1-5 + */ + @Deprecated + private static int daysBetween2(Date startDate, Date endDate) { + long between_days=(endDate.getTime()-startDate.getTime())/(1000*3600*24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + /** + * 计算两个阳历日期相差的天数。 + * @param startDate 开始时间 + * @param endDate 截至时间 + * @return (int)天数 + * @author liu 2017-3-2 + */ + private static int daysBetween(Date startDate, Date endDate) { + int days = 0; + //将转换的两个时间对象转换成Calendar对象 + Calendar can1 = Calendar.getInstance(); + can1.setTime(startDate); + Calendar can2 = Calendar.getInstance(); + can2.setTime(endDate); + //拿出两个年份 + int year1 = can1.get(Calendar.YEAR); + int year2 = can2.get(Calendar.YEAR); + //天数 + + Calendar can = null; + //如果can1 < can2 + //减去小的时间在这一年已经过了的天数 + //加上大的时间已过的天数 + if(can1.before(can2)){ + days -= can1.get(Calendar.DAY_OF_YEAR); + days += can2.get(Calendar.DAY_OF_YEAR); + can = can1; + }else{ + days -= can2.get(Calendar.DAY_OF_YEAR); + days += can1.get(Calendar.DAY_OF_YEAR); + can = can2; + } + for (int i = 0; i < Math.abs(year2-year1); i++) { + //获取小的时间当前年的总天数 + days += can.getActualMaximum(Calendar.DAY_OF_YEAR); + //再计算下一年。 + can.add(Calendar.YEAR, 1); + } + return days; + } + + /** + * 检查阴历日期是否合法 + * @param lunarYear 阴历年 + * @param lunarMonth 阴历月 + * @param lunarDay 阴历日 + * @param leapMonthFlag 闰月标志 + * @throws Exception + */ + private static void checkLunarDate(int lunarYear, int lunarMonth, int lunarDay, boolean leapMonthFlag) throws Exception { + if ((lunarYear < MIN_YEAR) || (lunarYear > MAX_YEAR)) { + throw(new Exception("非法农历年份!")); + } + if ((lunarMonth < 1) || (lunarMonth > 12)) { + throw(new Exception("非法农历月份!")); + } + if ((lunarDay < 1) || (lunarDay > 30)) { // 中国的月最多30天 + throw(new Exception("非法农历天数!")); + } + + int leap = getLeapMonth(lunarYear);// 计算该年应该闰哪个月 + if ((leapMonthFlag == true) && (lunarMonth != leap)) { + throw(new Exception("非法闰月!")); + } + } + + /** + * 阴历转换为阳历 + * @param lunarDate 阴历日期,格式YYYYMMDD + * @param leapMonthFlag 是否为闰月 + * @return 阳历日期,格式:YYYYMMDD + * @throws Exception + * @author liu 2015-1-5 + */ + public static String lunarToSolar(String lunarDate, boolean leapMonthFlag) throws Exception{ + int lunarYear = Integer.parseInt(lunarDate.substring(0, 4)); + int lunarMonth = Integer.parseInt(lunarDate.substring(4, 6)); + int lunarDay = Integer.parseInt(lunarDate.substring(6, 8)); + + checkLunarDate(lunarYear, lunarMonth, lunarDay, leapMonthFlag); + + int offset = 0; + + for (int i = MIN_YEAR; i < lunarYear; i++) { + int yearDaysCount = getYearDays(i); // 求阴历某年天数 + offset += yearDaysCount; + } + //计算该年闰几月 + int leapMonth = getLeapMonth(lunarYear); + + if(leapMonthFlag & leapMonth != lunarMonth){ + throw(new Exception("您输入的闰月标志有误!")); + } + + //当年没有闰月或月份早于闰月或和闰月同名的月份 + if(leapMonth==0|| (lunarMonth < leapMonth) || (lunarMonth==leapMonth && !leapMonthFlag)){ + for (int i = 1; i < lunarMonth; i++) { + int tempMonthDaysCount = getMonthDays(lunarYear, i); + offset += tempMonthDaysCount; + } + + // 检查日期是否大于最大天 + if (lunarDay > getMonthDays(lunarYear, lunarMonth)) { + throw(new Exception("不合法的农历日期!")); + } + offset += lunarDay; // 加上当月的天数 + }else{//当年有闰月,且月份晚于或等于闰月 + for (int i = 1; i < lunarMonth; i++) { + int tempMonthDaysCount = getMonthDays(lunarYear, i); + offset += tempMonthDaysCount; + } + if (lunarMonth>leapMonth) { + int temp = getLeapMonthDays(lunarYear); // 计算闰月天数 + offset += temp; // 加上闰月天数 + + if (lunarDay > getMonthDays(lunarYear, lunarMonth)) { + throw(new Exception("不合法的农历日期!")); + } + offset += lunarDay; + }else { // 如果需要计算的是闰月,则应首先加上与闰月对应的普通月的天数 + // 计算月为闰月 + int temp = getMonthDays(lunarYear, lunarMonth); // 计算非闰月天数 + offset += temp; + + if (lunarDay > getLeapMonthDays(lunarYear)) { + throw(new Exception("不合法的农历日期!")); + } + offset += lunarDay; + } + } + + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); + Date myDate = null; + myDate = formatter.parse(START_DATE); + Calendar c = Calendar.getInstance(); + c.setTime(myDate); + c.add(Calendar.DATE, offset); + myDate = c.getTime(); + + return formatter.format(myDate); + } + + /** + * 阳历日期转换为阴历日期 + * @param solarDate 阳历日期,格式YYYYMMDD + * @return 阴历日期 + * @throws Exception + * @author liu 2015-1-5 + */ + public static int[] solarToLunar(String solarDate) throws Exception{ + int i; + int temp = 0; + int lunarYear; + int lunarMonth; //农历月份 + int lunarDay; //农历当月第几天 + boolean leapMonthFlag =false; + + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); + Date myDate = null; + Date startDate = null; + try { + myDate = formatter.parse(solarDate); + startDate = formatter.parse(START_DATE); + } catch (ParseException e) { + e.printStackTrace(); + } + + int offset = daysBetween(startDate,myDate); + + for (i = MIN_YEAR; i <= MAX_YEAR; i++){ + temp = getYearDays(i); //求当年农历年天数 + if (offset - temp < 1){ + break; + }else{ + offset -= temp; + } + } + lunarYear = i; + + int leapMonth = getLeapMonth(lunarYear);//计算该年闰哪个月 + //设定当年是否有闰月 + if (leapMonth > 0){ + isLeapYear = true; + }else{ + isLeapYear = false; + } + + for (i = 1; i<=12; i++) { + if(i==leapMonth+1 && isLeapYear){ + temp = getLeapMonthDays(lunarYear); + isLeapYear = false; + leapMonthFlag = true; + i--; + }else{ + temp = getMonthDays(lunarYear, i); + } + offset -= temp; + if(offset<=0){ + break; + } + } + + offset += temp; + lunarMonth = i; + lunarDay = offset; + + int[] date = new int[]{lunarYear,lunarMonth,lunarDay}; + return date; + } + +} \ No newline at end of file diff --git a/lib_base/src/main/java/com/wd/common/utils/LunarCalender.java b/lib_base/src/main/java/com/wd/common/utils/LunarCalender.java new file mode 100644 index 0000000..d6fd918 --- /dev/null +++ b/lib_base/src/main/java/com/wd/common/utils/LunarCalender.java @@ -0,0 +1,372 @@ +package com.wd.common.utils; + + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * 中国农历工具类 + * + * @author qts + * @data 2023/7/27. + */ +public class LunarCalender { + private int year; // 农历的年份 + private int month; + private int day; + private String lunarMonth; // 农历的月份 + private boolean leap; + public int leapMonth = 0; // 闰的是哪个月 + + final static String chineseNumber[] = {"正", "二", "三", "四", "五", "六", "七", + "八", "九", "十", "冬", "腊"}; + static SimpleDateFormat chineseDateFormat = new SimpleDateFormat( + "yyyy年MM月dd日"); + final static long[] lunarInfo = new long[]{ + 0x4bd8, 0x4ae0, 0xa570, 0x54d5, 0xd260, 0xd950, 0x5554, 0x56af, 0x9ad0, 0x55d2, + 0x4ae0, 0xa5b6, 0xa4d0, 0xd250, 0xd255, 0xb54f, 0xd6a0, 0xada2, 0x95b0, 0x4977, + 0x497f, 0xa4b0, 0xb4b5, 0x6a50, 0x6d40, 0xab54, 0x2b6f, 0x9570, 0x52f2, 0x4970, + 0x6566, 0xd4a0, 0xea50, 0x6a95, 0x5adf, 0x2b60, 0x86e3, 0x92ef, 0xc8d7, 0xc95f, + 0xd4a0, 0xd8a6, 0xb55f, 0x56a0, 0xa5b4, 0x25df, 0x92d0, 0xd2b2, 0xa950, 0xb557, + 0x6ca0, 0xb550, 0x5355, 0x4daf, 0xa5b0, 0x4573, 0x52bf, 0xa9a8, 0xe950, 0x6aa0, + 0xaea6, 0xab50, 0x4b60, 0xaae4, 0xa570, 0x5260, 0xf263, 0xd950, 0x5b57, 0x56a0, + 0x96d0, 0x4dd5, 0x4ad0, 0xa4d0, 0xd4d4, 0xd250, 0xd558, 0xb540, 0xb6a0, 0x95a6, + 0x95bf, 0x49b0, 0xa974, 0xa4b0, 0xb27a, 0x6a50, 0x6d40, 0xaf46, 0xab60, 0x9570, + 0x4af5, 0x4970, 0x64b0, 0x74a3, 0xea50, 0x6b58, 0x5ac0, 0xab60, 0x96d5, 0x92e0, + 0xc960, 0xd954, 0xd4a0, 0xda50, 0x7552, 0x56a0, 0xabb7, 0x25d0, 0x92d0, 0xcab5, + 0xa950, 0xb4a0, 0xbaa4, 0xad50, 0x55d9, 0x4ba0, 0xa5b0, 0x5176, 0x52bf, 0xa930, + 0x7954, 0x6aa0, 0xad50, 0x5b52, 0x4b60, 0xa6e6, 0xa4e0, 0xd260, 0xea65, 0xd530, + 0x5aa0, 0x76a3, 0x96d0, 0x4afb, 0x4ad0, 0xa4d0, 0xd0b6, 0xd25f, 0xd520, 0xdd45, + 0xb5a0, 0x56d0, 0x55b2, 0x49b0, 0xa577, 0xa4b0, 0xaa50, 0xb255, 0x6d2f, 0xada0, + 0x4b63, 0x937f, 0x49f8, 0x4970, 0x64b0, 0x68a6, 0xea5f, 0x6b20, 0xa6c4, 0xaaef, + 0x92e0, 0xd2e3, 0xc960, 0xd557, 0xd4a0, 0xda50, 0x5d55, 0x56a0, 0xa6d0, 0x55d4, + 0x52d0, 0xa9b8, 0xa950, 0xb4a0, 0xb6a6, 0xad50, 0x55a0, 0xaba4, 0xa5b0, 0x52b0, + 0xb273, 0x6930, 0x7337, 0x6aa0, 0xad50, 0x4b55, 0x4b6f, 0xa570, 0x54e4, 0xd260, + 0xe968, 0xd520, 0xdaa0, 0x6aa6, 0x56df, 0x4ae0, 0xa9d4, 0xa4d0, 0xd150, 0xf252, + 0xd520}; + + + final static String[] Gan = new String[]{"甲", "乙", "丙", "丁", "戊", "己", "庚", + "辛", "壬", "癸"}; + final static String[] Zhi = new String[]{"子", "丑", "寅", "卯", "辰", "巳", "午", + "未", "申", "酉", "戌", "亥"}; + + // ====== 传回农历 y年的总天数 1900--2100 + public int yearDays(int y) { + int i, sum = 348; + for (i = 0x8000; i > 0x8; i >>= 1) { + if ((lunarInfo[y - 1900] & i) != 0) { + sum += 1; + } + } + return (sum + leapDays(y)); + } + + // ====== 传回农历 y年闰月的天数 + public int leapDays(int y) { + if (leapMonth(y) != 0) { + if ((lunarInfo[y - 1899] & 0xf) != 0) { + return 30; + } else { + return 29; + } + } else { + return 0; + } + } + + // ====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0 + public int leapMonth(int y) { + long var = lunarInfo[y - 1900] & 0xf; + return (int) (var == 0xf ? 0 : var); + } + + // ====== 传回农历 y年m月的总天数 + public int monthDays(int y, int m) { + if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) { + return 29; + } else { + return 30; + } + } + + // ====== 传回农历 y年的生肖 + public String animalsYear(int year) { + final String[] Animals = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", + "马", "羊", "猴", "鸡", "狗", "猪"}; + return Animals[(year - 4) % 12] + "年"; + } + + // ====== 传入 月日的offset 传回干支, 0=甲子 + final private static String cyclicalm(int num) { + return (Gan[num % 10] + Zhi[num % 12]); + } + + // ====== 传入 offset 传回干支, 0=甲子 + final public String cyclical(int year, int month, int day) { + int num = year - 1900 + 36; + //立春日期 + int term2 = sTerm(year, 2); + if (month > 2 || (month == 2 && day >= term2)) { + num = num + 0; + } else { + num = num - 1; + } + return (cyclicalm(num)); + } + + public static String getChinaDayString(int day) {//将农历day日格式化成农历表示的字符串 + String chineseTen[] = {"初", "十", "廿", "三"}; + String chineseDay[] = {"一", "二", "三", "四", "五", "六", "七", + "八", "九", "十"}; + String var = ""; + if (day != 20 && day != 30) { + var = chineseTen[(int) ((day - 1) / 10)] + chineseDay[(int) ((day - 1) % 10)]; + } else if (day != 20) { + var = chineseTen[(int) (day / 10)] + "十"; + } else { + var = "二十"; + } + return var; + } + + /* + * 计算公历nY年nM月nD日和bY年bM月bD日渐相差多少天 + * */ + public int getDaysOfTwoDate(int bY, int bM, int bD, int nY, int nM, int nD) { + Date baseDate = null; + Date nowaday = null; + try { + baseDate = chineseDateFormat.parse(bY + "年" + bM + "月" + bD + "日"); + nowaday = chineseDateFormat.parse(nY + "年" + nM + "月" + nD + "日"); + } catch (ParseException e) { + e.printStackTrace(); + } + int offset = 0; + if(nowaday != null && baseDate !=null) { + // 求出相差的天数 + offset = (int) ((nowaday.getTime() - baseDate.getTime()) / 86400000L); + } + return offset; + } + + /*农历lunYear年lunMonth月lunDay日 + * isLeap 当前年月是否是闰月 + * 从农历日期转换成公历日期 + * */ + public Calendar getSunDate(int lunYear, int lunMonth, int lunDay, boolean isLeap) { + //公历1900年1月31日为1900年正月初一 + int years = lunYear - 1900; + int days = 0; + for (int i = 0; i < years; i++) { + days += yearDays(1900 + i);//农历某年总天数 + } + for (int i = 1; i < lunMonth; i++) { + days += monthDays(lunYear, i); + } + if (leapMonth(lunYear) != 0 && lunMonth > leapMonth(lunYear)) { + days += leapDays(lunYear);//lunYear年闰月天数 + } + if (isLeap) { + days += monthDays(lunYear, lunMonth);//lunYear年lunMonth月 闰月 + } + days += lunDay; + days = days - 1; + Calendar cal = Calendar.getInstance(); + cal.set(Calendar.YEAR, 1900); + cal.set(Calendar.MONTH, 0); + cal.set(Calendar.DAY_OF_MONTH, 31); + cal.add(Calendar.DATE, days); + /* + Date date=cal.getTime(); + int year_c = cal.get(Calendar.YEAR); + int month_c = cal.get(Calendar.MONTH)+1; + int day_c = cal.get(Calendar.DAY_OF_MONTH); + */ + return cal; + } + + public String getLunarString(int year, int month, int day) { + + int var = getLunarDateINT(year, month, day); + int lYear = (int) var / 10000; + int lMonth = (int) (var % 10000) / 100; + int lDay = var - lYear * 10000 - lMonth * 100; + String lunY = cyclical(year, month, day) + "年"; + + String lunM = ""; + int testMonth = getSunDate(lYear, lMonth, lDay, false).get(Calendar.MONTH) + 1; + if (testMonth != month) { + lunM = "闰"; + } + lunM += chineseNumber[(lMonth - 1) % 12] + "月"; + //int leap = leapMonth(lYear); + String lunD = getChinaDayString(lDay); + int animalsYear = 0; + int term2 = sTerm(year, 2);//立春 + if (month > 2 || (month == 2 && day >= term2)) { + animalsYear = year; + } else { + animalsYear = year - 1; + } + return lunY + lunM + lunD; + } + + /* + * 将公历year年month月day日转换成农历 + * 返回格式为20140506(int) + * */ + public int getLunarDateINT(int year, int month, int day) { + int iYear, LYear, LMonth, LDay, daysOfYear = 0; + // 求出和1900年1月31日相差的天数 + //year =1908; + //month = 3; + //day =3; + int offset = getDaysOfTwoDate(1900, 1, 31, year, month, day); + //Log.i("--ss--","公历:"+year+"-"+month+"-"+day+":"+offset); + // 用offset减去每农历年的天数 + // 计算当天是农历第几天 + // i最终结果是农历的年份 + // offset是当年的第几天 + for (iYear = 1900; iYear < 2100 && offset > 0; iYear++) { + daysOfYear = yearDays(iYear); + offset -= daysOfYear; + //Log.i("--ss--","农历:"+iYear+":"+daysOfYear+"/"+offset); + } + + if (offset < 0) { + offset += daysOfYear; + iYear--; + //Log.i("--ss--","农历:"+iYear+":"+daysOfYear+"/"+offset); + } + // 农历年份 + LYear = iYear; + + leapMonth = leapMonth(iYear); // 闰哪个月,1-12 + leap = false; + + // 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天 + int iMonth = 1, daysOfMonth = 0; + for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) { + // 闰月 + if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) { + --iMonth; + leap = true; + daysOfMonth = leapDays(iYear); + } else { + daysOfMonth = monthDays(iYear, iMonth); + } + // 解除闰月 + if (leap && iMonth == (leapMonth + 1)) { + leap = false; + } + + offset -= daysOfMonth; + //Log.i("--ss--","农历:"+iYear+"-"+iMonth+":"+daysOfMonth+"/"+offset); + } + // offset为0时,并且刚才计算的月份是闰月,要校正 + if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { + if (leap) { + leap = false; + } else { + leap = true; + --iMonth; + } + } + // offset小于0时,也要校正 + if (offset < 0) { + offset += daysOfMonth; + --iMonth; + //Log.i("--ss--","农历:"+iYear+"-"+iMonth+":"+daysOfMonth+"/"+offset); + } + LMonth = iMonth; + LDay = offset + 1; + //Log.i("--ss--","农历:"+LYear+"-"+LMonth+"-"+LDay); + return LYear * 10000 + LMonth * 100 + LDay; + } + public String toString() { + if (chineseNumber[(month - 1) % 12] == "正" && getChinaDayString(day) == "初一") { + return "农历" + year + "年"; + } else if (getChinaDayString(day) == "初一") { + return chineseNumber[(month - 1) % 12] + "月"; + } else { + return getChinaDayString(day); + } + // return year + "年" + (leap ? "闰" : "") + chineseNumber[month - 1] + + // "月" + getChinaDayString(day); + } + + /* + * public static void main(String[] args) { System.out.println(new + * LunarCalendar().getLunarDate(2012, 1, 23)); } + */ + + public int getLeapMonth() { + return leapMonth; + } + + public void setLeapMonth(int leapMonth) { + this.leapMonth = leapMonth; + } + + /** + * 得到当前日期对应的阴历月份 + * + * @return + */ + public String getLunarMonth() { + return lunarMonth; + } + + public void setLunarMonth(String lunarMonth) { + this.lunarMonth = lunarMonth; + } + + /** + * 得到当前年对应的农历年份 + * + * @return + */ + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + + private int sTerm(int y, int n) { + int[] sTermInfo = new int[]{0, 21208, 42467, 63836, 85337, 107014, + 128867, 150921, 173149, 195551, 218072, 240693, + 263343, 285989, 308563, 331033, 353350, 375494, + 397447, 419210, 440795, 462224, 483532, 504758}; + Calendar cal = Calendar.getInstance(); + cal.set(1900, 0, 6, 2, 5, 0); + long temp = cal.getTime().getTime(); + cal.setTime(new Date((long) ((31556925974.7 * (y - 1900) + sTermInfo[n] * 60000L) + temp))); + int a = cal.get(Calendar.DAY_OF_MONTH); + return a; + } + + public static String convertToLunarTianGan(int year) { + String[] tianGan = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"}; + int index = (year - 4) % 10; + return tianGan[index]; + } + public static String convertToLunarDiZhi(int year) { + String[] diZhi = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"}; + int index = (year - 4) % 12; + return diZhi[index]; + } + + public static String convertToChineseMonth(int month) { + String[] chineseMonths = {"正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "冬月", "腊月"}; + return chineseMonths[month - 1]; + } + + + +} \ No newline at end of file diff --git a/lib_base/src/main/java/com/wd/common/utils/ProcessUtils.java b/lib_base/src/main/java/com/wd/common/utils/ProcessUtils.java index 4de8b80..4c4a8e2 100644 --- a/lib_base/src/main/java/com/wd/common/utils/ProcessUtils.java +++ b/lib_base/src/main/java/com/wd/common/utils/ProcessUtils.java @@ -1290,7 +1290,7 @@ public class ProcessUtils implements IntentConstants { } else if (CHANNEL_ID_VOICE.equals(channelId)) { jump = true; // 音频频道 -// goTestAudio(tabBean.getPageId(), channelId); + goTestAudio(tabBean.getPageId(), channelId); } return jump; diff --git a/module_musicplayer/src/main/java/com/wd/musicplayer/ui/activity/AudioChannelActivity.java b/module_musicplayer/src/main/java/com/wd/musicplayer/ui/activity/AudioChannelActivity.java index 1421f3f..bf07cea 100644 --- a/module_musicplayer/src/main/java/com/wd/musicplayer/ui/activity/AudioChannelActivity.java +++ b/module_musicplayer/src/main/java/com/wd/musicplayer/ui/activity/AudioChannelActivity.java @@ -10,10 +10,12 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; + import androidx.annotation.Nullable; import androidx.core.widget.NestedScrollView; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.RecyclerView; + import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.fastjson.JSONObject; import com.wd.base.log.Logger; @@ -22,22 +24,16 @@ import com.wd.basemusic.utils.BarUtils; import com.wd.capability.network.BaseObserver; import com.wd.capability.network.bean.MetaBean; import com.wd.capability.network.cachedata.CacheData; -import com.wd.foundation.wdkit.adv.CornerAdvLogic; -import com.wd.foundation.wdkit.constant.EventConstants; import com.wd.capability.router.data.ActionBean; import com.wd.common.base.BaseActivity; import com.wd.common.constant.RegionNameConstants; import com.wd.common.constant.RouterConstants; -import com.wd.foundation.wdkit.dialog.EasterEggsDialog; -import com.wd.foundation.wdkit.dialog.PopUpsUtils; import com.wd.common.floatingview.FloatWindow; import com.wd.common.interfaces.AudioChannelBack; +import com.wd.common.utils.CalendarUtil; import com.wd.common.utils.CommonNetUtils; +import com.wd.common.utils.LunarCalender; import com.wd.common.utils.ProcessUtils; -import com.wd.common.utils.ToolsUtil; -import com.wd.foundation.wdkit.utils.StatusBarUtil; -import com.wd.foundation.wdkit.viewclick.BaseClickListener; -import com.wd.foundation.wdkit.view.DefaultView; import com.wd.foundation.bean.analytics.ActionConstants; import com.wd.foundation.bean.analytics.TraceBean; import com.wd.foundation.bean.analytics.TrackContentBean; @@ -51,27 +47,35 @@ import com.wd.foundation.bean.music.bean.VoicePlayerBean; import com.wd.foundation.bean.pop.PopUpsBean; import com.wd.foundation.bean.response.AudioPlaybackQuantityBean; import com.wd.foundation.bean.response.NewsDetailBean; -import com.wd.musicplayer.R; -import com.wd.musicplayer.data.bean.MusicAlbum; -import com.wd.musicplayer.player.PlayerManager; -import com.wd.musicplayer.ui.dialog.PlayListDialog; -import com.wd.musicplayer.ui.page.adapter.PlaylistRecommendationAdapter; -import com.wd.musicplayer.ui.page.adapter.SelectedColumnsAdapter; import com.wd.foundation.bean.utils.TimeUtil; +import com.wd.foundation.wdkit.adv.CornerAdvLogic; import com.wd.foundation.wdkit.constant.Constants; import com.wd.foundation.wdkit.constant.DefaultViewConstant; +import com.wd.foundation.wdkit.constant.EventConstants; import com.wd.foundation.wdkit.constant.IntentConstants; +import com.wd.foundation.wdkit.dialog.EasterEggsDialog; +import com.wd.foundation.wdkit.dialog.PopUpsUtils; import com.wd.foundation.wdkit.json.GsonUtils; import com.wd.foundation.wdkit.statusbar.StatusBarStyleEnum; import com.wd.foundation.wdkit.utils.CommonUtil; import com.wd.foundation.wdkit.utils.ScreenUtils; import com.wd.foundation.wdkit.utils.SpUtils; +import com.wd.foundation.wdkit.utils.StatusBarUtil; import com.wd.foundation.wdkit.utils.ToastNightUtil; +import com.wd.foundation.wdkit.view.DefaultView; +import com.wd.foundation.wdkit.viewclick.BaseClickListener; import com.wd.foundation.wdkitcore.livedata.LiveDataBus; import com.wd.foundation.wdkitcore.tools.HostUtil; import com.wd.foundation.wdkitcore.tools.JsonUtils; import com.wd.foundation.wdkitcore.tools.ResUtils; import com.wd.foundation.wdkitcore.tools.StringUtils; +import com.wd.musicplayer.R; +import com.wd.musicplayer.data.bean.MusicAlbum; +import com.wd.musicplayer.player.PlayerManager; +import com.wd.musicplayer.ui.dialog.PlayListDialog; +import com.wd.musicplayer.ui.page.adapter.PlaylistRecommendationAdapter; +import com.wd.musicplayer.ui.page.adapter.SelectedColumnsAdapter; + import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -139,13 +143,13 @@ public class AudioChannelActivity extends BaseActivity { private View vline; /** * 骨架图 - * */ + */ private FrameLayout skeletondiagram; private NestedScrollView nsv; - private TextView jrtjtitle,showmore,chinesecalendar,calendar1,jxtitle,calendar,tvtopname; - private ImageView iv_bg,playModeIcon,iv_closeinner,iv_close; - private RecyclerView layout_fra_sound_seminar,layout_selected_columns; - private RelativeLayout rltopinner,rltop; + private TextView jrtjtitle, showmore, chinesecalendar, calendar1, jxtitle, calendar, tvtopname; + private ImageView iv_bg, playModeIcon, iv_closeinner, iv_close; + private RecyclerView layout_fra_sound_seminar, layout_selected_columns; + private RelativeLayout rltopinner, rltop; private int mDistance = 0; private float alpha; @@ -165,11 +169,11 @@ public class AudioChannelActivity extends BaseActivity { @Override protected void onNoDoubleClick(View v) { int id = v.getId(); - if(id == R.id.iv_closeinner || id == R.id.iv_close){ + if (id == R.id.iv_closeinner || id == R.id.iv_close) { close(); - }else if(id == R.id.iv_play_buttone){ + } else if (id == R.id.iv_play_buttone) { togglePlay(); - }else if(id == R.id.tv_special_column_more){ + } else if (id == R.id.tv_special_column_more) { more(); } } @@ -189,7 +193,7 @@ public class AudioChannelActivity extends BaseActivity { nsv = findViewById(R.id.nsv); iv_bg = findViewById(R.id.iv_bg); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) iv_bg.getLayoutParams(); - params.height = ScreenUtils.getRealWidth()*440/375; + params.height = ScreenUtils.getRealWidth() * 440 / 375; iv_bg.setLayoutParams(params); playModeIcon = findViewById(R.id.iv_play_buttone); jrtjtitle = findViewById(R.id.tv_tltle); @@ -217,34 +221,34 @@ public class AudioChannelActivity extends BaseActivity { // 夜间模式下,顶部图片的前景色 RelativeLayout.LayoutParams nightBgParams = (RelativeLayout.LayoutParams) iv_night_bg.getLayoutParams(); - nightBgParams.height = ScreenUtils.getRealWidth()*440/375; - iv_night_bg.setVisibility(SpUtils.isNightMode()?View.VISIBLE:View.GONE); + nightBgParams.height = ScreenUtils.getRealWidth() * 440 / 375; + iv_night_bg.setVisibility(SpUtils.isNightMode() ? View.VISIBLE : View.GONE); //今日推荐列表 - playlistRecommendationAdapter = new PlaylistRecommendationAdapter(this); + playlistRecommendationAdapter = new PlaylistRecommendationAdapter(R.layout.adapter_play_recommendation); playlistRecommendationAdapter.setOnItemClickListener((viewId, item, position) -> { VoicePlayerBean voicePlayerBean = mMusicAlbum.getMusics().get(position); if (voicePlayerBean.getAudioDetailBean() == null || CommonUtil.isEmpty(voicePlayerBean.getAudioDetailBean().getAudioList()) - || TextUtils.isEmpty(voicePlayerBean.getAudioDetailBean().getNewsType()) || TextUtils.isEmpty(voicePlayerBean.getAudioDetailBean().getNewsId())){ - ToastNightUtil.showTopShort("无音频数据", ScreenUtils.getRealHeight()/2); + || TextUtils.isEmpty(voicePlayerBean.getAudioDetailBean().getNewsType()) || TextUtils.isEmpty(voicePlayerBean.getAudioDetailBean().getNewsId())) { + ToastNightUtil.showTopShort("无音频数据", ScreenUtils.getRealHeight() / 2); return; } //更新播放器内容 - if (PlayerManager.getInstance().getAlbum() == null|| TextUtils.isEmpty(PlayerManager.getInstance().getAlbum().getAlbumId()) || + if (PlayerManager.getInstance().getAlbum() == null || TextUtils.isEmpty(PlayerManager.getInstance().getAlbum().getAlbumId()) || !PlayerManager.getInstance().getAlbum().getAlbumId().equals(mMusicAlbum.getAlbumId())) { //如果是同一个,则继续播放 - if(PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().isSameObject(voicePlayerBean)){ + if (PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().isSameObject(voicePlayerBean)) { PlayerManager.getInstance().playAudio(); - }else { + } else { PlayerManager.getInstance().singleListChange(); //加载数据 PlayerManager.getInstance().loadAlbum(mMusicAlbum, position); } - }else{ + } else { //如果是同一个,则继续播放 - if(PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().isSameObject(voicePlayerBean)){ + if (PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().isSameObject(voicePlayerBean)) { PlayerManager.getInstance().playAudio(); - }else{ + } else { PlayerManager.getInstance().singleListChange(); PlayerManager.getInstance().playAudio(position); } @@ -264,14 +268,14 @@ public class AudioChannelActivity extends BaseActivity { nsv.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { - mDistance += (scrollY - oldScrollY); - float percent = Math.abs(mDistance * 1f / 200); - if(percent > 1){ - percent = 1; - } - setAlpha(percent*255); + mDistance += (scrollY - oldScrollY); + float percent = Math.abs(mDistance * 1f / 200); + if (percent > 1) { + percent = 1; } - }); + setAlpha(percent * 255); + } + }); // 缺省页重试按钮 defaultView.setRetryBtnClickListener(new DefaultView.RetryClickListener() { @@ -290,7 +294,7 @@ public class AudioChannelActivity extends BaseActivity { } private void setAlpha(float alpha) { - if (alpha == this.alpha){ + if (alpha == this.alpha) { return; } this.alpha = alpha; @@ -306,11 +310,12 @@ public class AudioChannelActivity extends BaseActivity { super.onResume(); updateTodaysRecommendation(); - StatusBarUtil.setStatusBarStyle(SpUtils.isNightMode()? StatusBarStyleEnum.FULLSCREEN_LIGHT_ENUM:StatusBarStyleEnum.FULLSCREEN_DARK_ENUM,this); + StatusBarUtil.setStatusBarStyle(SpUtils.isNightMode() ? StatusBarStyleEnum.FULLSCREEN_LIGHT_ENUM : + StatusBarStyleEnum.FULLSCREEN_DARK_ENUM, this); VoicePlayerBean currentMusic = PlayerManager.getInstance().getCurrentPlayingMusic(); boolean hasMusic = false; - if(currentMusic!= null && !TextUtils.isEmpty(currentMusic.getUrl()) - && voicePlayerBeansTodaysRecommendation!= null && voicePlayerBeansTodaysRecommendation.size()>0){ + if (currentMusic != null && !TextUtils.isEmpty(currentMusic.getUrl()) + && voicePlayerBeansTodaysRecommendation != null && voicePlayerBeansTodaysRecommendation.size() > 0) { //设置必须的audioList for (VoicePlayerBean voicePlayerBean : voicePlayerBeansTodaysRecommendation) { if (currentMusic.isSameObject(voicePlayerBean)) { @@ -320,14 +325,14 @@ public class AudioChannelActivity extends BaseActivity { } } - if (hasMusic &&PlayerManager.getInstance().isPlaying()) { + if (hasMusic && PlayerManager.getInstance().isPlaying()) { //设置顶部播放按钮为已播放样式 -// playModeIcon.setImageResource(R.mipmap.icon_pause_button); -// playModeIcon.setTag(R.id.res_clicktag,R.mipmap.icon_pause_button); + playModeIcon.setImageResource(R.mipmap.icon_pause_button); + playModeIcon.setTag(R.id.res_clicktag, R.mipmap.icon_pause_button); } else { //设置顶部播放按钮为已暂停样式 -// playModeIcon.setImageResource(R.mipmap.icon_player_button); -// playModeIcon.setTag(R.id.res_clicktag,R.mipmap.icon_player_button); + playModeIcon.setImageResource(R.mipmap.icon_player_button); + playModeIcon.setTag(R.id.res_clicktag, R.mipmap.icon_player_button); } } @@ -338,11 +343,11 @@ public class AudioChannelActivity extends BaseActivity { if (voicePlayerBeansTodaysRecommendation != null && voicePlayerBeansTodaysRecommendation.size() > 0) { // VoicePlayerBean currentVoicePlayerBean = PlayerManager.getInstance().getCurrentPlayingMusic(); // if (currentVoicePlayerBean != null && currentVoicePlayerBean.getUrl() != null) { - playlistRecommendationAdapter.notifyDataSetChanged(); - //推荐列表弹窗如果展示了,也更新推荐列表弹窗 - if (playListDialog != null && playListDialog.isShowing()) { - playListDialog.attachData(); - } + playlistRecommendationAdapter.notifyDataSetChanged(); + //推荐列表弹窗如果展示了,也更新推荐列表弹窗 + if (playListDialog != null && playListDialog.isShowing()) { + playListDialog.attachData(); + } // } } } @@ -356,15 +361,15 @@ public class AudioChannelActivity extends BaseActivity { PlayerManager.getInstance().getDispatcher().output(this, playerEvent -> { if (playerEvent.eventId == PlayerEvent.EVENT_CHANGE_MUSIC) { playlistRecommendationAdapter.setTopause(playerEvent.toPause); - if(playListDialog != null){ + if (playListDialog != null) { playListDialog.setTopause(playerEvent.toPause); } updateTodaysRecommendation(); } else if (playerEvent.eventId == PlayerEvent.EVENT_PLAY_STATUS) { -// playModeIcon.setImageResource(playerEvent.toPause ? R.mipmap.icon_player_button : R.mipmap.icon_pause_button); -// playModeIcon.setTag(R.id.res_clicktag,playerEvent.toPause ? R.mipmap.icon_player_button : R.mipmap.icon_pause_button); + playModeIcon.setImageResource(playerEvent.toPause ? R.mipmap.icon_player_button : R.mipmap.icon_pause_button); + playModeIcon.setTag(R.id.res_clicktag, playerEvent.toPause ? R.mipmap.icon_player_button : R.mipmap.icon_pause_button); playlistRecommendationAdapter.setTopause(playerEvent.toPause); - if(playListDialog != null){ + if (playListDialog != null) { playListDialog.setTopause(playerEvent.toPause); } updateTodaysRecommendation(); @@ -378,9 +383,9 @@ public class AudioChannelActivity extends BaseActivity { String date = dateFormat.format(new Date()); int[] dateList; try { -// dateList = CalendarUtil.solarToLunar(date); -// chinesecalendar.setText(LunarCalender.convertToChineseMonth(dateList[1]) + -// LunarCalender.getChinaDayString(dateList[2])); + dateList = CalendarUtil.solarToLunar(date); + chinesecalendar.setText(LunarCalender.convertToChineseMonth(dateList[1]) + + LunarCalender.getChinaDayString(dateList[2])); } catch (Exception e) { e.printStackTrace(); @@ -391,17 +396,17 @@ public class AudioChannelActivity extends BaseActivity { //时间转换后:yyyy-MM-dd-HHmmssSSS String serverTime = ""; - if(HostUtil.serverTime == 0) { - serverTime = TimeUtil.getDateTimeFromMillisecond(System.currentTimeMillis()); - }else{ + if (HostUtil.serverTime == 0) { + serverTime = TimeUtil.getDateTimeFromMillisecond(System.currentTimeMillis()); + } else { try { - serverTime = TimeUtil.getDateTimeFromMillisecond(HostUtil.serverTime); + serverTime = TimeUtil.getDateTimeFromMillisecond(HostUtil.serverTime); } catch (Exception e) { - e.printStackTrace(); + e.printStackTrace(); } } String[] split = serverTime.split("-"); - if(split != null && split.length >1) { + if (split != null && split.length > 1) { calendar.setText(split[1]); calendar1.setText(split[2]); } @@ -412,8 +417,8 @@ public class AudioChannelActivity extends BaseActivity { public void onChanged(Boolean aBoolean) { forLiveDataBus = 1; VoicePlayerBean currentMusic = PlayerManager.getInstance().getCurrentPlayingMusic(); - if(currentMusic!= null && !TextUtils.isEmpty(currentMusic.getUrl()) - && voicePlayerBeansTodaysRecommendation!= null && voicePlayerBeansTodaysRecommendation.size()>0){ + if (currentMusic != null && !TextUtils.isEmpty(currentMusic.getUrl()) + && voicePlayerBeansTodaysRecommendation != null && voicePlayerBeansTodaysRecommendation.size() > 0) { //设置必须的audioList for (VoicePlayerBean voicePlayerBean : voicePlayerBeansTodaysRecommendation) { if (currentMusic.isSameObject(voicePlayerBean)) { @@ -460,19 +465,19 @@ public class AudioChannelActivity extends BaseActivity { channelId = jsonObject.getString(IntentConstants.PARAM_CHANNEL_ID); //设置缓存数据 CacheData localCacheDataPage = CacheData.getLocalCacheData(CacheData.audioChannelCacheKey); - if(localCacheDataPage != null && !TextUtils.isEmpty(localCacheDataPage.getNetWorkData())){ + if (localCacheDataPage != null && !TextUtils.isEmpty(localCacheDataPage.getNetWorkData())) { dealPageInfo(GsonUtils.fromJson(localCacheDataPage.getNetWorkData(), PageBean.class)); hasUseCache = true; - }else{ + } else { skeletondiagram.setVisibility(View.VISIBLE); } - CacheData localCacheTodaysRecommendation = CacheData.getLocalCacheData(CacheData.audioChannelCacheKey+0); - if(localCacheTodaysRecommendation != null && !TextUtils.isEmpty(localCacheTodaysRecommendation.getNetWorkData())){ + CacheData localCacheTodaysRecommendation = CacheData.getLocalCacheData(CacheData.audioChannelCacheKey + 0); + if (localCacheTodaysRecommendation != null && !TextUtils.isEmpty(localCacheTodaysRecommendation.getNetWorkData())) { dealTodaysRecommendation(GsonUtils.fromJson(localCacheTodaysRecommendation.getNetWorkData(), GroupBean.class)); hasUseCache = true; } - CacheData localCacheSelectedColumns = CacheData.getLocalCacheData(CacheData.audioChannelCacheKey+1); - if(localCacheSelectedColumns != null && !TextUtils.isEmpty(localCacheSelectedColumns.getNetWorkData())){ + CacheData localCacheSelectedColumns = CacheData.getLocalCacheData(CacheData.audioChannelCacheKey + 1); + if (localCacheSelectedColumns != null && !TextUtils.isEmpty(localCacheSelectedColumns.getNetWorkData())) { dealSelectedColumns(GsonUtils.fromJson(localCacheSelectedColumns.getNetWorkData(), GroupBean.class)); hasUseCache = true; } @@ -481,12 +486,12 @@ public class AudioChannelActivity extends BaseActivity { CommonNetUtils.getInstance().loadAudioChannelData(channelId, pageId, new AudioChannelBack() { @Override public void loadAudioChannelSuccess(PageBean pageBean, MetaBean metaBean, String msg, int code) { - if (null == pageBean){ + if (null == pageBean) { return; } skeletondiagram.setVisibility(View.GONE); // 新旧数据md5值对比,本地无md5说明没有缓存数据 - if(localCacheDataPage == null || localCacheDataPage.md5 == null || !localCacheDataPage.md5.equals(metaBean.getMd5())){ + if (localCacheDataPage == null || localCacheDataPage.md5 == null || !localCacheDataPage.md5.equals(metaBean.getMd5())) { // 更新缓存数据 CacheData.saveDataToPreference(CacheData.audioChannelCacheKey, pageBean, metaBean.getMd5()); dealPageInfo(pageBean); @@ -495,13 +500,13 @@ public class AudioChannelActivity extends BaseActivity { @Override public void loadTodaysRecommendationSuccess(GroupBean groupBean, MetaBean metaBean, String msg, int code) { - if (null == groupBean){ + if (null == groupBean) { return; } // 新旧数据md5值对比 - if(localCacheTodaysRecommendation == null || localCacheTodaysRecommendation.md5 == null || !localCacheTodaysRecommendation.md5.equals(metaBean.getMd5())){ + if (localCacheTodaysRecommendation == null || localCacheTodaysRecommendation.md5 == null || !localCacheTodaysRecommendation.md5.equals(metaBean.getMd5())) { // 更新缓存数据 - CacheData.saveDataToPreference(CacheData.audioChannelCacheKey+0, groupBean, metaBean.getMd5()); + CacheData.saveDataToPreference(CacheData.audioChannelCacheKey + 0, groupBean, metaBean.getMd5()); //今日推荐 dealTodaysRecommendation(groupBean); } @@ -510,35 +515,35 @@ public class AudioChannelActivity extends BaseActivity { @Override public void loadSelectedColumnsSuccess(GroupBean groupBean, MetaBean metaBean, String msg, int code) { - if (null == groupBean){ + if (null == groupBean) { return; } // 新旧数据md5值对比 - if(localCacheSelectedColumns == null || localCacheSelectedColumns.md5 == null || !localCacheSelectedColumns.md5.equals(metaBean.getMd5())){ + if (localCacheSelectedColumns == null || localCacheSelectedColumns.md5 == null || !localCacheSelectedColumns.md5.equals(metaBean.getMd5())) { // 更新缓存数据 - CacheData.saveDataToPreference(CacheData.audioChannelCacheKey+1, groupBean, metaBean.getMd5()); + CacheData.saveDataToPreference(CacheData.audioChannelCacheKey + 1, groupBean, metaBean.getMd5()); dealSelectedColumns(groupBean); } } @Override public void loadFail() { - if (finalHasUseCache){ + if (finalHasUseCache) { return; } skeletondiagram.setVisibility(View.GONE); // 展示缺省页 - defaultView.show(DefaultViewConstant.TYPE_GET_CONTENT_FAILED_VIDEO,true,false); + defaultView.show(DefaultViewConstant.TYPE_GET_CONTENT_FAILED_VIDEO, true, false); defaultView.setBackground(ResUtils.getDrawable(R.color.white)); } @Override public void noNetwork() { - if (finalHasUseCache){ + if (finalHasUseCache) { return; } // 展示缺省页 - defaultView.show(DefaultViewConstant.TYPE_NO_NETWORK,true,false); + defaultView.show(DefaultViewConstant.TYPE_NO_NETWORK, true, false); defaultView.setBackground(ResUtils.getDrawable(R.color.white)); } }); @@ -564,7 +569,7 @@ public class AudioChannelActivity extends BaseActivity { } //添加挂角 - advLogic(pageBean,false); + advLogic(pageBean, false); //添加彩蛋 handlerPopUps(pageBean); @@ -581,7 +586,7 @@ public class AudioChannelActivity extends BaseActivity { simpleAudioThemeBean.contentBean = mSelectedColumnsGroupBean.getComps().get(i).getOperDataList().get(0); simpleAudioThemeBeanList.add(simpleAudioThemeBean); } - ProcessUtils.JumpToAudioTopic(simpleAudioThemeBeanList,selectPosition); + ProcessUtils.JumpToAudioTopic(simpleAudioThemeBeanList, selectPosition); } /** @@ -611,11 +616,11 @@ public class AudioChannelActivity extends BaseActivity { @Override protected void onSuccess(List audioPlaybackQuantityBeans) { - if(audioPlaybackQuantityBeans != null && audioPlaybackQuantityBeans.size() > 0){ - for(AudioPlaybackQuantityBean audioPlaybackQuantityBean:audioPlaybackQuantityBeans){ - if(audioPlaybackQuantityBean != null && !TextUtils.isEmpty(audioPlaybackQuantityBean.getTopicId())){ - for(int i = 0; i < groupBean.getComps().size(); i++){ - if(audioPlaybackQuantityBean.getTopicId().equals(groupBean.getComps().get(i).getOperDataList().get(0).getObjectId())){ + if (audioPlaybackQuantityBeans != null && audioPlaybackQuantityBeans.size() > 0) { + for (AudioPlaybackQuantityBean audioPlaybackQuantityBean : audioPlaybackQuantityBeans) { + if (audioPlaybackQuantityBean != null && !TextUtils.isEmpty(audioPlaybackQuantityBean.getTopicId())) { + for (int i = 0; i < groupBean.getComps().size(); i++) { + if (audioPlaybackQuantityBean.getTopicId().equals(groupBean.getComps().get(i).getOperDataList().get(0).getObjectId())) { groupBean.getComps().get(i).getOperDataList().get(0).localFieldCommon = audioPlaybackQuantityBean.getWeightViews(); } } @@ -626,7 +631,7 @@ public class AudioChannelActivity extends BaseActivity { } } }); - if(mPageBean != null){ + if (mPageBean != null) { playlistSelectedTopicsAdapter.setPageId(mPageBean.getId()); playlistSelectedTopicsAdapter.setPageName(mPageBean.getName()); } @@ -635,11 +640,11 @@ public class AudioChannelActivity extends BaseActivity { } } - private void contentExposureBuriedPoints(ContentBean contentBean) { + private void contentExposureBuriedPoints(ContentBean contentBean) { // 内容曝光 TrackContentBean trackContentBean = new TrackContentBean(); - trackContentBean.contentBeantoBean(contentBean,null); - if(mPageBean != null){ + trackContentBean.contentBeantoBean(contentBean, null); + if (mPageBean != null) { trackContentBean.setPage_name(mPageBean.getName()); trackContentBean.setPage_id(mPageBean.getId()); } @@ -649,9 +654,9 @@ public class AudioChannelActivity extends BaseActivity { //所属区域regionName,播报为5 trackContentBean.setRegion_name(RegionNameConstants.AUDIO); //埋点增频道id - trackContentBean.setChannelSourceId(StringUtils.isEmpty(channelId)? + trackContentBean.setChannelSourceId(StringUtils.isEmpty(channelId) ? ProcessUtils.CHANNEL_ID_VOICE : channelId); - trackContentBean.setContentShowChannelId(StringUtils.isEmpty(channelId)? + trackContentBean.setContentShowChannelId(StringUtils.isEmpty(channelId) ? ProcessUtils.CHANNEL_ID_VOICE : channelId); //内容曝光 // CommonTrack.getInstance().contentShowTrack(trackContentBean); @@ -672,8 +677,8 @@ public class AudioChannelActivity extends BaseActivity { for (CompBean compBean : groupBean.getComps()) { if (compBean.getOperDataList() != null && compBean.getOperDataList().size() > 0) { ContentBean contentBean = compBean.getOperDataList().get(0); - index = index+1; - if(index < 4){ + index = index + 1; + if (index < 4) { contentExposureBuriedPoints(contentBean); } voicePlayerBeansTodaysRecommendation.add(contentBeanToVoicePlayerBean(contentBean)); @@ -690,24 +695,24 @@ public class AudioChannelActivity extends BaseActivity { //设置必须的audioList for (VoicePlayerBean voicePlayerBean : voicePlayerBeansTodaysRecommendation) { - if(voicePlayerBean.getAudioDetailBean() == null){ + if (voicePlayerBean.getAudioDetailBean() == null) { voicePlayerBean.setAudioDetailBean(new NewsDetailBean()); } voicePlayerBean.getAudioDetailBean().setAudioList(audioList); - if (PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().isSameObject(voicePlayerBean)) { + if (PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().isSameObject(voicePlayerBean)) { if (PlayerManager.getInstance().isPlaying()) { //设置顶部播放按钮为已播放样式 -// playModeIcon.setImageResource(R.mipmap.icon_pause_button); -// playModeIcon.setTag(R.id.res_clicktag,R.mipmap.icon_pause_button); + playModeIcon.setImageResource(R.mipmap.icon_pause_button); + playModeIcon.setTag(R.id.res_clicktag, R.mipmap.icon_pause_button); } else { //设置顶部播放按钮为已暂停样式 -// playModeIcon.setImageResource(R.mipmap.icon_player_button); -// playModeIcon.setTag(R.id.res_clicktag,R.mipmap.icon_player_button); + playModeIcon.setImageResource(R.mipmap.icon_player_button); + playModeIcon.setTag(R.id.res_clicktag, R.mipmap.icon_player_button); } } } //更新数据 - playlistRecommendationAdapter.submitList(voicePlayerBeansTodaysRecommendationTree); + playlistRecommendationAdapter.replaceData(voicePlayerBeansTodaysRecommendationTree); if (voicePlayerBeansTodaysRecommendation.size() > 3) { showmore.setVisibility(View.VISIBLE); vline.setVisibility(View.VISIBLE); @@ -716,85 +721,85 @@ public class AudioChannelActivity extends BaseActivity { vline.setVisibility(View.GONE); } //创建播放器相关数据 - mMusicAlbum = new MusicAlbum(groupBean, voicePlayerBeansTodaysRecommendation,4); + mMusicAlbum = new MusicAlbum(groupBean, voicePlayerBeansTodaysRecommendation, 4); mMusicAlbum.setAlbumId(groupBean.getId()); } } - public void previous() { - PlayerManager.getInstance().playPrevious(); - } + public void previous() { + PlayerManager.getInstance().playPrevious(); + } - public void togglePlay() { - if (mMusicAlbum==null){ -// ToastNightUtil.showShort(ResUtils.getString(R.string.audio_no_content)); - return; - } - boolean hasMusic = false; - //更新播放器内容 - if (PlayerManager.getInstance().getAlbum() == null || TextUtils.isEmpty(PlayerManager.getInstance().getAlbum().getAlbumId()) || - !PlayerManager.getInstance().getAlbum().getAlbumId().equals(mMusicAlbum.getAlbumId())) { - VoicePlayerBean voicePlayerBean = PlayerManager.getInstance().getCurrentPlayingMusic(); - if(voicePlayerBean != null && mMusicAlbum != null && mMusicAlbum.getMusics() != null && mMusicAlbum.getMusics().size()>0){ - for(VoicePlayerBean v : mMusicAlbum.getMusics()){ - if(voicePlayerBean.isSameObject(v)){ - hasMusic = true; - } + public void togglePlay() { + if (mMusicAlbum == null) { + ToastNightUtil.showShort(ResUtils.getString(R.string.audio_no_content)); + return; + } + boolean hasMusic = false; + //更新播放器内容 + if (PlayerManager.getInstance().getAlbum() == null || TextUtils.isEmpty(PlayerManager.getInstance().getAlbum().getAlbumId()) || + !PlayerManager.getInstance().getAlbum().getAlbumId().equals(mMusicAlbum.getAlbumId())) { + VoicePlayerBean voicePlayerBean = PlayerManager.getInstance().getCurrentPlayingMusic(); + if (voicePlayerBean != null && mMusicAlbum != null && mMusicAlbum.getMusics() != null && mMusicAlbum.getMusics().size() > 0) { + for (VoicePlayerBean v : mMusicAlbum.getMusics()) { + if (voicePlayerBean.isSameObject(v)) { + hasMusic = true; } } - if(!hasMusic){ - PlayerManager.getInstance().singleListChange(); - PlayerManager.getInstance().loadAlbum(mMusicAlbum); - } } - if (!isStart) { - isStart = true; + if (!hasMusic) { + PlayerManager.getInstance().singleListChange(); + PlayerManager.getInstance().loadAlbum(mMusicAlbum); } - boolean ispause; - if (playModeIcon.getTag(R.id.res_clicktag) == null || (int)playModeIcon.getTag(R.id.res_clicktag) == R.mipmap.icon_player_button) { - if(PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().getType() != 4){ - ispause = false; - PlayerManager.getInstance().playAudio(); - }else{ - ispause = true; - PlayerManager.getInstance().pauseAudio(); - PlayerManager.getInstance().togglePlay(); - } - - if (FloatWindow.get() != null && !FloatWindow.get().isShow()) { - PlayerManager.getInstance().setFirstPlayAudio(); - } - FloatWindow.get().forceShow(AudioChannelActivity.this); + } + if (!isStart) { + isStart = true; + } + boolean ispause; + if (playModeIcon.getTag(R.id.res_clicktag) == null || (int) playModeIcon.getTag(R.id.res_clicktag) == R.mipmap.icon_player_button) { + if (PlayerManager.getInstance().getCurrentPlayingMusic() != null && PlayerManager.getInstance().getCurrentPlayingMusic().getType() != 4) { + ispause = false; + PlayerManager.getInstance().playAudio(); } else { ispause = true; PlayerManager.getInstance().pauseAudio(); + PlayerManager.getInstance().togglePlay(); } - if(!hasMusic && !ispause){ - PlayerManager.getInstance().unfoldAnimation(); + + if (FloatWindow.get() != null && !FloatWindow.get().isShow()) { + PlayerManager.getInstance().setFirstPlayAudio(); } + FloatWindow.get().forceShow(AudioChannelActivity.this); + } else { + ispause = true; + PlayerManager.getInstance().pauseAudio(); } - - public void next() { - PlayerManager.getInstance().playNext(); + if (!hasMusic && !ispause) { + PlayerManager.getInstance().unfoldAnimation(); } + } + public void next() { + PlayerManager.getInstance().playNext(); + } - public void more() { - playListDialog = new PlayListDialog(AudioChannelActivity.this, 1, mMusicAlbum); - playListDialog.show(); - } + public void more() { + playListDialog = new PlayListDialog(AudioChannelActivity.this, 1, mMusicAlbum); + playListDialog.show(); - public void close() { - finish(); - } + } + + public void close() { + finish(); + } @Override protected void onDestroy() { super.onDestroy(); //页面浏览 TrackContentBean trackContentBean = new TrackContentBean(); - if(mPageBean != null){ + if (mPageBean != null) { trackContentBean.setPage_name(mPageBean.getName()); trackContentBean.setPage_id(mPageBean.getId()); } @@ -802,7 +807,7 @@ public class AudioChannelActivity extends BaseActivity { //所属区域regionName,播报为5 trackContentBean.setRegion_name(RegionNameConstants.AUDIO); //埋点增频道id - trackContentBean.setChannelSourceId(StringUtils.isEmpty(channelId)? + trackContentBean.setChannelSourceId(StringUtils.isEmpty(channelId) ? ProcessUtils.CHANNEL_ID_VOICE : channelId); // CommonTrack.getInstance().channelExposureTrack(trackContentBean); @@ -818,12 +823,12 @@ public class AudioChannelActivity extends BaseActivity { /** * 调用挂角广告逻辑 */ - private void advLogic(PageBean pageBean,boolean isResume) { + private void advLogic(PageBean pageBean, boolean isResume) { if (cornerAdvLogic != null) { if (getWindow() != null) { Window window = getWindow(); cornerAdvLogic.setDragViewType(0); - cornerAdvLogic.handlerAdLogic(this,pageBean, false, window,isResume); + cornerAdvLogic.handlerAdLogic(this, pageBean, false, window, isResume); } } } @@ -885,13 +890,13 @@ public class AudioChannelActivity extends BaseActivity { public VoicePlayerBean contentBeanToVoicePlayerBean(ContentBean contentBean) { VoicePlayerBean voicePlayerBean = new VoicePlayerBean(); voicePlayerBean.contentBean = contentBean; - if(mPageBean != null){ + if (mPageBean != null) { voicePlayerBean.pageId = mPageBean.getId(); voicePlayerBean.pageName = mPageBean.getName(); } voicePlayerBean.setContentType(contentBean.getObjectType()); - TraceBean traceBean = new TraceBean(); + TraceBean traceBean = new TraceBean(); traceBean.sceneId = contentBean.getSceneId(); traceBean.subSceneId = contentBean.getSubSceneId(); traceBean.traceId = contentBean.getTraceId(); diff --git a/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/DrawerFragment.java b/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/DrawerFragment.java deleted file mode 100644 index bdc83eb..0000000 --- a/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/DrawerFragment.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2018-present KunMinX - * - * 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.wd.musicplayer.ui.page; - -import android.os.Bundle; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.ViewModel; - -; - - -import com.kunminx.architecture.ui.page.DataBindingConfig; -import com.kunminx.architecture.ui.state.State; -import com.wd.basemusic.ui.page.BaseFragment; -import com.wd.musicplayer.BR; -import com.wd.musicplayer.R; -import com.wd.musicplayer.data.bean.LibraryInfo; -import com.wd.musicplayer.domain.request.InfoRequester; -import com.wd.musicplayer.ui.page.adapter.DrawerAdapter; - -import java.util.ArrayList; -import java.util.List; - -/** - * @Author :张泽昊 - * @Email :1064771680@qq.com - * @Date :on 2023/7/7 17:49. - * @Description :测试界面 - */ -public class DrawerFragment extends BaseFragment { - - private DrawerViewModel mStates; - private InfoRequester mInfoRequester; - - @Override - protected void initViewModel() { - mStates = getFragmentScopeViewModel(DrawerViewModel.class); - mInfoRequester = getFragmentScopeViewModel(InfoRequester.class); - } - - @Override - protected DataBindingConfig getDataBindingConfig() { - return new DataBindingConfig(R.layout.fragment_drawer, BR.vm, mStates) - .addBindingParam(BR.click, new ClickProxy()) - .addBindingParam(BR.adapter, new DrawerAdapter(getContext())); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - mInfoRequester.getLibraryResult().observe(getViewLifecycleOwner(), dataResult -> { - if (!dataResult.getResponseStatus().isSuccess()) { - return; - } - - if (dataResult.getResult() != null) { - mStates.list.set(dataResult.getResult()); - } - }); - - if (mInfoRequester.getLibraryResult().getValue() == null) { - mInfoRequester.requestLibraryInfo(); - } - } - - public class ClickProxy { - public void logoClick() { - openUrlInBrowser(getString(R.string.github_project)); - } - } - - public static class DrawerViewModel extends ViewModel { - public final State> list = new State<>(new ArrayList<>()); - } - -} diff --git a/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/adapter/PlaylistRecommendationAdapter.java b/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/adapter/PlaylistRecommendationAdapter.java index 2e6db91..cdfbae9 100644 --- a/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/adapter/PlaylistRecommendationAdapter.java +++ b/module_musicplayer/src/main/java/com/wd/musicplayer/ui/page/adapter/PlaylistRecommendationAdapter.java @@ -16,64 +16,102 @@ package com.wd.musicplayer.ui.page.adapter; -import android.content.Context; import android.graphics.Typeface; -import android.text.TextUtils; import android.view.View; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatImageView; import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; +import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieDrawable; -import com.kunminx.binding_recyclerview.adapter.SimpleDataBindingAdapter; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; import com.wd.common.floatingview.FloatWindow; +import com.wd.foundation.bean.music.bean.VoicePlayerBean; import com.wd.musicplayer.R; -import com.wd.musicplayer.databinding.AdapterPlayRecommendationBinding; import com.wd.musicplayer.player.PlayerManager; -import com.wd.musicplayer.ui.activity.AudioChannelActivity; -import com.wd.foundation.bean.music.bean.VoicePlayerBean; /** * Create by KunMinX at 20/4/19 */ -public class PlaylistRecommendationAdapter extends SimpleDataBindingAdapter { - private boolean topause = true; - public PlaylistRecommendationAdapter(Context context) { - super(context, R.layout.adapter_play_recommendation, DiffUtils.getInstance().getVoicePlayerBeanItemCallback()); - } +public class PlaylistRecommendationAdapter extends BaseQuickAdapter { + private boolean topause = true; - @Override - protected void onBindItem(AdapterPlayRecommendationBinding binding, VoicePlayerBean item, RecyclerView.ViewHolder holder) { - binding.setAlbum(item); - binding.textView2.setText(item.getTitle()); - if (item.isSameObject(PlayerManager.getInstance().getCurrentPlayingMusic()) && FloatWindow.get()!= null && !FloatWindow.get().getColseed()){ - binding.lottieplaytag.setAnimation("playlistrecommendationgif.json"); - binding.lottieplaytag.setRepeatCount(LottieDrawable.INFINITE); - if(topause){ - if(PlayerManager.getInstance().isPlaying()){ - binding.lottieplaytag.playAnimation(); - }else{ - binding.lottieplaytag.pauseAnimation(); - } - }else{ - binding.lottieplaytag.playAnimation(); - } + public PlaylistRecommendationAdapter(int layoutResId) { + super(layoutResId); + } - binding.ivPlayStatus.setVisibility(View.GONE); + @Override + protected void convert(@NonNull BaseViewHolder holder, VoicePlayerBean item) { + TextView textView2 = holder.getView(R.id.textView2); + LottieAnimationView lottieAnimationView = holder.getView(R.id.lottieplaytag); + AppCompatImageView ivPlayStatus = holder.getView(R.id.iv_play_status); + textView2.setText(item.getTitle()); + if (item.isSameObject(PlayerManager.getInstance().getCurrentPlayingMusic()) && FloatWindow.get() != null && !FloatWindow.get().getColseed()) { + lottieAnimationView.setAnimation("playlistrecommendationgif.json"); + lottieAnimationView.setRepeatCount(LottieDrawable.INFINITE); + if (topause) { + if (PlayerManager.getInstance().isPlaying()) { + lottieAnimationView.playAnimation(); + } else { + lottieAnimationView.pauseAnimation(); + } + } else { + lottieAnimationView.playAnimation(); + } + + ivPlayStatus.setVisibility(View.GONE); + + lottieAnimationView.setVisibility(View.VISIBLE); + textView2.setTextColor(ContextCompat.getColor(textView2.getContext(), R.color.res_color_common_C1)); + textView2.setTypeface(Typeface.DEFAULT_BOLD); + } else { + ivPlayStatus.setVisibility(View.VISIBLE); + lottieAnimationView.setVisibility(View.GONE); + ivPlayStatus.setImageResource(R.mipmap.icon_play_stop); + textView2.setTextColor(ContextCompat.getColor(textView2.getContext(), R.color.res_color_common_C1)); + textView2.setTypeface(Typeface.DEFAULT); + } + } - binding.lottieplaytag.setVisibility(View.VISIBLE); - binding.textView2.setTextColor(ContextCompat.getColor( binding.getRoot().getContext(), R.color.res_color_common_C1)); - binding.textView2.setTypeface(Typeface.DEFAULT_BOLD); - }else { - binding.ivPlayStatus.setVisibility(View.VISIBLE); - binding.lottieplaytag.setVisibility(View.GONE); - binding.ivPlayStatus.setImageResource(R.mipmap.icon_play_stop); - binding.textView2.setTextColor(ContextCompat.getColor( binding.getRoot().getContext(), R.color.res_color_common_C1)); - binding.textView2.setTypeface(Typeface.DEFAULT); + // public PlaylistRecommendationAdapter(Context context) { +// super(context, R.layout.adapter_play_recommendation, DiffUtils.getInstance().getVoicePlayerBeanItemCallback()); +// } +// +// @Override +// protected void onBindItem(AdapterPlayRecommendationBinding binding, VoicePlayerBean item, RecyclerView.ViewHolder holder) { +// binding.setAlbum(item); +// binding.textView2.setText(item.getTitle()); +// if (item.isSameObject(PlayerManager.getInstance().getCurrentPlayingMusic()) && FloatWindow.get()!= null && !FloatWindow.get().getColseed()){ +// binding.lottieplaytag.setAnimation("playlistrecommendationgif.json"); +// binding.lottieplaytag.setRepeatCount(LottieDrawable.INFINITE); +// if(topause){ +// if(PlayerManager.getInstance().isPlaying()){ +// binding.lottieplaytag.playAnimation(); +// }else{ +// binding.lottieplaytag.pauseAnimation(); +// } +// }else{ +// binding.lottieplaytag.playAnimation(); +// } +// +// binding.ivPlayStatus.setVisibility(View.GONE); +// +// binding.lottieplaytag.setVisibility(View.VISIBLE); +// binding.textView2.setTextColor(ContextCompat.getColor( binding.getRoot().getContext(), R.color.res_color_common_C1)); +// binding.textView2.setTypeface(Typeface.DEFAULT_BOLD); +// }else { +// binding.ivPlayStatus.setVisibility(View.VISIBLE); +// binding.lottieplaytag.setVisibility(View.GONE); +// binding.ivPlayStatus.setImageResource(R.mipmap.icon_play_stop); +// binding.textView2.setTextColor(ContextCompat.getColor( binding.getRoot().getContext(), R.color.res_color_common_C1)); +// binding.textView2.setTypeface(Typeface.DEFAULT); +// } +// } + public void setTopause(boolean topause) { + this.topause = topause; } - } - public void setTopause(boolean topause){ - this.topause = topause; - } } diff --git a/module_musicplayer/src/main/res/layout/adapter_play_recommendation.xml b/module_musicplayer/src/main/res/layout/adapter_play_recommendation.xml index 06180d8..94eec53 100644 --- a/module_musicplayer/src/main/res/layout/adapter_play_recommendation.xml +++ b/module_musicplayer/src/main/res/layout/adapter_play_recommendation.xml @@ -14,66 +14,52 @@ ~ limitations under the License. --> - + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/root_view" + android:layout_width="match_parent" + android:layout_height="@dimen/rmrb_dp50" + tools:background="@color/res_color_common_C8"> - - - - - - - - - + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/rmrb_dp52" + android:layout_marginEnd="@dimen/rmrb_dp16" + android:ellipsize="end" + android:maxLines="1" + android:textColor="#212228" + android:textSize="@dimen/rmrb_dp17" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintStart_toEndOf="@+id/iv_play_status" + app:layout_constraintTop_toTopOf="parent" + tools:text="jhghjggj" /> - - - + + + - - \ No newline at end of file + \ No newline at end of file diff --git a/module_musicplayer/src/main/res/layout/fragment_drawer.xml b/module_musicplayer/src/main/res/layout/fragment_drawer.xml deleted file mode 100644 index e1e1242..0000000 --- a/module_musicplayer/src/main/res/layout/fragment_drawer.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/module_musicplayer/src/main/res/values/strings.xml b/module_musicplayer/src/main/res/values/strings.xml index 1ccca74..a5efa7e 100644 --- a/module_musicplayer/src/main/res/values/strings.xml +++ b/module_musicplayer/src/main/res/values/strings.xml @@ -20,6 +20,8 @@ 最近播放 + + 暂无可播放内容 -- libgit2 0.24.0