From 48f469eab7e52e9f442a2d82d6a7cc0eb809c761 Mon Sep 17 00:00:00 2001 From: MUQING <1966944300@qq.com> Date: Sun, 10 Dec 2023 13:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=96=9C=E6=AC=A2=E9=9F=B3?= =?UTF-8?q?=E4=B9=90=E9=80=BB=E8=BE=91=E5=92=8C=E5=82=A8=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 1 - app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 1 - app/src/main/java/com/muqingbfq/MP3.java | 31 +++++++ .../main/java/com/muqingbfq/MediaPlayer.java | 32 +++++-- .../muqingbfq/activity_about_software.java | 86 +++++++++++++++++- .../com/muqingbfq/api/FileDownloader.java | 3 +- .../main/java/com/muqingbfq/api/playlist.java | 72 +++++++-------- .../main/java/com/muqingbfq/api/resource.java | 29 ++++-- app/src/main/java/com/muqingbfq/api/url.java | 10 +- app/src/main/java/com/muqingbfq/bfq.java | 32 ++++--- app/src/main/java/com/muqingbfq/bfq_an.java | 31 +++++-- app/src/main/java/com/muqingbfq/bfqkz.java | 75 ++++++--------- .../java/com/muqingbfq/fragment/Media.java | 25 ++--- .../java/com/muqingbfq/fragment/bflb_db.java | 17 +++- .../java/com/muqingbfq/fragment/bfq_db.java | 19 +++- .../main/java/com/muqingbfq/fragment/gd.java | 19 +--- .../main/java/com/muqingbfq/fragment/mp3.java | 5 +- .../java/com/muqingbfq/fragment/search.java | 14 ++- app/src/main/java/com/muqingbfq/home.java | 5 + .../mq/NotificationManagerCompat.java | 1 - app/src/main/java/com/muqingbfq/mq/wj.java | 32 +++++++ app/src/main/java/com/muqingbfq/yc.java | 8 +- app/src/main/res/drawable/download.xml | 2 +- app/src/main/res/drawable/like.xml | 9 ++ app/src/main/res/layout-land/activity_bfq.xml | 4 +- app/src/main/res/layout-land/fragment_bfq.xml | 1 + .../res/layout/activity_about_software.xml | 2 +- app/src/main/res/layout/activity_bfq.xml | 2 +- app/src/main/res/layout/activity_home.xml | 2 - app/src/main/res/layout/list_kaifazhe.xml | 42 +++++++++ app/src/main/res/mipmap-hdpi/like.png | Bin 601 -> 0 bytes app/src/main/res/values/themes.xml | 13 ++- 33 files changed, 444 insertions(+), 183 deletions(-) create mode 100644 app/src/main/java/com/muqingbfq/MP3.java create mode 100644 app/src/main/res/drawable/like.xml create mode 100644 app/src/main/res/layout/list_kaifazhe.xml delete mode 100644 app/src/main/res/mipmap-hdpi/like.png diff --git a/.idea/misc.xml b/.idea/misc.xml index 2370002..72f0d47 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/app/build.gradle b/app/build.gradle index de009e4..9429f86 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ android { //noinspection OldTargetApi targetSdk 31 versionCode 1 - versionName "1.7.5" + versionName "1.7.6" } compileOptions { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fe3b9c6..702d8a5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -76,5 +76,4 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/muqingbfq/MP3.java b/app/src/main/java/com/muqingbfq/MP3.java new file mode 100644 index 0000000..17823f9 --- /dev/null +++ b/app/src/main/java/com/muqingbfq/MP3.java @@ -0,0 +1,31 @@ +package com.muqingbfq; + +import java.util.Objects; + +public class MP3 { + public String id, name, zz; +// 音乐的贴图 + public Object picurl; + public MP3(String id, String name, String zz, String picurl) { + this.id = id; + this.name = name; + this.zz = zz; + this.picurl = picurl; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof MP3)) return false; + MP3 mp3 = (MP3) o; + return Objects.equals(id, mp3.id) && + Objects.equals(name, mp3.name) && + Objects.equals(zz, mp3.zz) && + Objects.equals(picurl, mp3.picurl); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, zz, picurl); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/muqingbfq/MediaPlayer.java b/app/src/main/java/com/muqingbfq/MediaPlayer.java index f0b1247..bab5008 100644 --- a/app/src/main/java/com/muqingbfq/MediaPlayer.java +++ b/app/src/main/java/com/muqingbfq/MediaPlayer.java @@ -100,15 +100,16 @@ public class MediaPlayer { Media.setbf(isPlaying); } }); +// build.setShuffleModeEnabled(true); } - public void pause(){ + public void pause() { if (build.isPlaying()) { build.pause(); } } - public void start(){ + public void start() { if (bfqkz.xm == null) { if (bfqkz.list != null && bfqkz.list.size() > 0) { bfq_an.xyq(); @@ -118,17 +119,35 @@ public class MediaPlayer { build.play(); } + // 创建 MediaItem 列表 +// public static List list = new ArrayList<>(); @SuppressLint("NotifyDataSetChanged") public void setDataSource(String path) { - MediaItem mediaItem = MediaItem.fromUri(path); + DataSource(path); main.handler.post(() -> { - build.setMediaItem(mediaItem); - build.prepare(); build.setPlayWhenReady(true); start(); }); } + @SuppressLint("NotifyDataSetChanged") + public void DataSource(String path) { + if (path == null) { + return; + } + MediaItem mediaItem = MediaItem.fromUri(path); +/* if (!list.contains(mediaItem)) { + list.add(mediaItem); + }*/ + main.handler.post(() -> { +// build.setMediaItems(list); +// build.seekToDefaultPosition(getmti(bfqkz.ms)); + build.setMediaItem(mediaItem); + build.prepare(); + gj.sc(build.getMediaItemCount()); + }); + } + public boolean isPlaying() { if (build == null) { return false; @@ -153,6 +172,7 @@ public class MediaPlayer { bfqkz.notify.setBitmap(); return false; } + @Override public boolean onResourceReady(@NonNull Bitmap bitmap, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) { @@ -169,7 +189,7 @@ public class MediaPlayer { Media.setzz(zz); bfq_an.islike(); } - bfq_db.setname(name+"/"+zz); + bfq_db.setname(name + "/" + zz); if (com.muqingbfq.fragment.mp3.lbspq != null) { com.muqingbfq.fragment.mp3.lbspq.notifyDataSetChanged(); } diff --git a/app/src/main/java/com/muqingbfq/activity_about_software.java b/app/src/main/java/com/muqingbfq/activity_about_software.java index 833c410..722e7b8 100644 --- a/app/src/main/java/com/muqingbfq/activity_about_software.java +++ b/app/src/main/java/com/muqingbfq/activity_about_software.java @@ -1,16 +1,30 @@ package com.muqingbfq; +import android.content.Context; import android.content.pm.PackageManager; import android.os.Bundle; +import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import com.bumptech.glide.Glide; +import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.muqingbfq.databinding.ListKaifazheBinding; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; +import java.util.ArrayList; +import java.util.List; + public class activity_about_software extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { @@ -25,7 +39,6 @@ public class activity_about_software extends AppCompatActivity { } setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - findViewById(R.id.button1).setOnClickListener(view -> { wj.sc(wj.filesdri + "gx.mq"); new Thread() { @@ -43,13 +56,84 @@ public class activity_about_software extends AppCompatActivity { }); } + MenuItem itemA; + @Override + public boolean onCreateOptionsMenu(Menu menu) { + itemA= menu.add("特别鸣谢"); + itemA.setTitle("特别鸣谢"); + return super.onCreateOptionsMenu(menu); + } + @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int itemId = item.getItemId(); if (itemId == android.R.id.home) { finish(); + } else if (item == itemA) { + new botton(this); } return super.onOptionsItemSelected(item); } + class botton extends BottomSheetDialog { + + List list = new ArrayList<>(); + public botton(@NonNull Context context) { + super(context); + setTitle("特别鸣谢"); + list.add(new Object[]{"http://139.196.224.229/muqing/picurl/mint.jpg","薄荷今天吃什么?", "维护开发者", "QQ"}); + list.add(new Object[]{"http://139.196.224.229/muqing/picurl/weilian.jpg","威廉", "主要测试BUG", "QQ"}); + show(); + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + RecyclerView recyclerView = new RecyclerView(getContext()); + recyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT)); + recyclerView.setPadding(50,100,50,500); + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + recyclerView.setAdapter(new RecyclerView.Adapter() { + @NonNull + @Override + public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ListKaifazheBinding binding = ListKaifazheBinding.inflate(getLayoutInflater()); + return new VH(binding.getRoot()); + } + + @Override + public void onBindViewHolder(@NonNull VH holder, int position) { + Object[] objects = list.get(position); + holder.name.setText(objects[1].toString()); + holder.zz.setText(objects[2].toString()); + Glide.with(getContext()) + .load(objects[0]) + .error(R.drawable.icon) + .into(holder.imageView); + } + + @Override + public int getItemCount() { + return list.size(); + } + }); + setContentView(recyclerView); + + } + } + + class VH extends RecyclerView.ViewHolder { + public TextView name, zz; + public ImageView imageView; + public VH(@NonNull View itemView) { + super(itemView); + name = itemView.findViewById(R.id.text1); + zz = itemView.findViewById(R.id.text2); + imageView = itemView.findViewById(R.id.imageView); + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/muqingbfq/api/FileDownloader.java b/app/src/main/java/com/muqingbfq/api/FileDownloader.java index 83154e6..6052fc7 100644 --- a/app/src/main/java/com/muqingbfq/api/FileDownloader.java +++ b/app/src/main/java/com/muqingbfq/api/FileDownloader.java @@ -17,6 +17,7 @@ import com.mpatric.mp3agic.ID3v2; import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.Mp3File; import com.mpatric.mp3agic.UnsupportedTagException; +import com.muqingbfq.MP3; import com.muqingbfq.R; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; @@ -36,7 +37,7 @@ public class FileDownloader { private static final String CHANNEL_ID = "download_channel"; private static final int NOTIFICATION_ID = 3; - public static void downloadFile(Context context, String url,com.muqingbfq.xm x) { + public static void downloadFile(Context context, String url, MP3 x) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) diff --git a/app/src/main/java/com/muqingbfq/api/playlist.java b/app/src/main/java/com/muqingbfq/api/playlist.java index 72dd180..c9ca4bf 100644 --- a/app/src/main/java/com/muqingbfq/api/playlist.java +++ b/app/src/main/java/com/muqingbfq/api/playlist.java @@ -2,33 +2,36 @@ package com.muqingbfq.api; import android.annotation.SuppressLint; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.mpatric.mp3agic.ID3v2; import com.mpatric.mp3agic.Mp3File; +import com.muqingbfq.MP3; import com.muqingbfq.fragment.gd; -import com.muqingbfq.fragment.mp3; -import com.muqingbfq.main; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; import com.muqingbfq.mq.wl; -import com.muqingbfq.xm; import org.json.JSONArray; import org.json.JSONObject; import java.io.File; +import java.lang.reflect.Type; import java.util.Iterator; import java.util.List; public class playlist extends Thread { public static final String api = "/playlist/track/all?id="; + @SuppressLint("NotifyDataSetChanged") - public static boolean hq(List list, String uid) { - if (uid.equals("mp3_xz.json")) { - return playlist.hq_xz(list); - } else if (uid.equals("mp3_like.json")) { - return playlist.hq_like(list); - } else if (uid.equals("mp3_hc.json")) { - return hq_hc(list); + public static boolean hq(List list, String uid) { + switch (uid) { + case "mp3_xz.json": + return playlist.hq_xz(list); + case "mp3_like.json": + return playlist.hq_like(list); + case "mp3_hc.json": + return hq_hc(list); } list.clear(); try { @@ -56,7 +59,7 @@ public class playlist extends Thread { } zz.append("-").append(al.getString("name")); String picUrl = al.getString("picUrl"); - list.add(new xm(id, name, zz.toString(), picUrl)); + list.add(new MP3(id, name, zz.toString(), picUrl)); } return true; } catch (Exception e) { @@ -65,21 +68,17 @@ public class playlist extends Thread { return false; } - public static boolean hq_like(List list) { + public static boolean hq_like(List list) { list.clear(); try { - JSONObject json = gd.like; - if (json == null || json.length() < 1) { + String dqwb = wj.dqwb(wj.gd + "mp3_like.json"); + if (dqwb == null) { return false; } - for (Iterator it = json.keys(); it.hasNext(); ) { - String id = it.next(); - JSONObject jsonObject = json.getJSONObject(id); - String name = jsonObject.getString("name"); - String zz = jsonObject.getString("zz"); - String picUrl = jsonObject.getString("picUrl"); - list.add(new xm(id, name, zz, picUrl)); - } + Type type = new TypeToken>() { + }.getType(); + Gson gson = new Gson(); + list.addAll(gson.fromJson(dqwb, type)); return true; } catch (Exception e) { gj.sc("失败的错误 " + e); @@ -87,18 +86,18 @@ public class playlist extends Thread { return false; } - public static boolean hq_xz(List list) { + public static boolean hq_xz(List list) { list.clear(); try { File file = new File(wj.filesdri + "mp3"); File[] files = file.listFiles(); - for (int i = 0; i < files.length; i++) { - ID3v2 mp3File = new Mp3File(files[i]).getId3v2Tag(); - String id = files[i].getName(); + for (File value : files) { + ID3v2 mp3File = new Mp3File(value).getId3v2Tag(); + String id = value.getName(); String name = mp3File.getTitle(); String zz = mp3File.getArtist(); String picUrl = mp3File.getUrl(); - list.add(new xm(id, name, zz, picUrl)); + list.add(new MP3(id, name, zz, picUrl)); } return true; } catch (Exception e) { @@ -107,19 +106,18 @@ public class playlist extends Thread { } return false; } - public static boolean hq_hc(List list) { + + public static boolean hq_hc(List list) { list.clear(); try { - File file = new File(wj.filesdri + "hc"); - File[] files = file.listFiles(); - for (int i = 0; i < files.length; i++) { - ID3v2 mp3File = new Mp3File(files[i]).getId3v2Tag(); - String id = files[i].getName(); - String name = mp3File.getTitle(); - String zz = mp3File.getArtist(); - String picUrl = mp3File.getUrl(); - list.add(new xm(id, name, zz, picUrl)); + String dqwb = wj.dqwb(wj.gd + "mp3_hc.json"); + if (dqwb == null) { + return false; } + Type type = new TypeToken>() { + }.getType(); + Gson gson = new Gson(); + list.addAll(gson.fromJson(dqwb, type)); return true; } catch (Exception e) { gj.sc("失败的错误 " + e); diff --git a/app/src/main/java/com/muqingbfq/api/resource.java b/app/src/main/java/com/muqingbfq/api/resource.java index b0c03ee..a422abb 100644 --- a/app/src/main/java/com/muqingbfq/api/resource.java +++ b/app/src/main/java/com/muqingbfq/api/resource.java @@ -18,13 +18,26 @@ import com.muqingbfq.xm; public class resource { public static void recommend(List list) { - String hq; - JSONObject json; try { - hq = wl.hq("/recommend/resource?cookie=" + wl.Cookie); - if (TextUtils.isEmpty(hq) && wj.cz(wj.gd_json)) { - hq = wj.dqwb(wj.gd_json); + String hq = wj.dqwb(wj.gd_json); + JSONObject json; + if (hq != null) { + json = new JSONObject(hq); + if (json.getInt("code") == 200) { + wj.xrwb(wj.gd_json, hq); + JSONArray recommend = json.getJSONArray("recommend"); + int length = recommend.length(); + for (int i = 0; i < length; i++) { + JSONObject jsonObject = recommend.getJSONObject(i); + add(jsonObject, list); + } + } } + hq = wl.hq("/recommend/resource?cookie=" + wl.Cookie); + if (hq == null) { + return; + } + list.clear(); json = new JSONObject(hq); if (json.getInt("code") == 200) { wj.xrwb(wj.gd_json, hq); @@ -75,9 +88,9 @@ public class resource { } public static void 下载(List list) { - list.add(new xm("mp3_like.json", "喜欢", R.mipmap.like, true)); - list.add(new xm("mp3_xz.json", "下载", R.drawable.icon, true)); - list.add(new xm("mp3_hc.json", "缓存", R.drawable.icon, true)); + list.add(new xm("mp3_hc.json", "最近播放", R.drawable.zt, true)); + list.add(new xm("mp3_like.json", "喜欢", R.drawable.like, true)); + list.add(new xm("mp3_xz.json", "下载", R.drawable.download, true)); try { JSONObject date = new JSONObject(wj.dqwb(wj.gd_xz)); for (Iterator it = date.keys(); it.hasNext(); ) { diff --git a/app/src/main/java/com/muqingbfq/api/url.java b/app/src/main/java/com/muqingbfq/api/url.java index 30ad91c..622342f 100644 --- a/app/src/main/java/com/muqingbfq/api/url.java +++ b/app/src/main/java/com/muqingbfq/api/url.java @@ -2,6 +2,7 @@ package com.muqingbfq.api; import com.mpatric.mp3agic.ID3v2; import com.mpatric.mp3agic.Mp3File; +import com.muqingbfq.MP3; import com.muqingbfq.fragment.Media; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; @@ -25,14 +26,14 @@ import okhttp3.ResponseBody; public class url extends Thread { public static String api = "/song/url/v1"; - xm x; + MP3 x; - public url(xm x) { + public url(MP3 x) { this.x = x; start(); } - public static String hq(xm x) { + public static String hq(MP3 x) { if (Media.lrcview != null) { gc(x.id); } @@ -40,6 +41,9 @@ public class url extends Thread { if (wj.cz(wj.filesdri + "hc/" + x.id)) { return wj.filesdri + "hc/" + x.id; } + if (wj.cz(wj.mp3+x.id)) { + return wj.mp3 + x.id; + } String level = "standard"; boolean wiFiConnected = gj.isWiFiConnected(); if (wiFiConnected) { diff --git a/app/src/main/java/com/muqingbfq/bfq.java b/app/src/main/java/com/muqingbfq/bfq.java index c79f49e..f243422 100644 --- a/app/src/main/java/com/muqingbfq/bfq.java +++ b/app/src/main/java/com/muqingbfq/bfq.java @@ -20,6 +20,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.muqingbfq.api.FileDownloader; import com.muqingbfq.api.url; import com.muqingbfq.databinding.ActivityBfqBinding; @@ -32,6 +34,10 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + public class bfq extends AppCompatActivity { @SuppressLint("StaticFieldLeak") public static AppCompatActivity context; @@ -76,22 +82,26 @@ public class bfq extends AppCompatActivity { text(); inflate.like.setOnClickListener(view1 -> { try { + Gson gson = new Gson(); + Type type = new TypeToken>() { + }.getType(); + List list = gson.fromJson(wj.dqwb(wj.gd + "mp3_like.json"), type); + if (list == null) { + list = new ArrayList<>(); + } if (bfqkz.like_bool) { + list.remove(bfqkz.xm); inflate.like .setImageTintList(ContextCompat.getColorStateList(bfq.this, R.color.text)); - com.muqingbfq.fragment.gd.like.remove(String.valueOf(bfqkz.xm.id)); } else { - inflate.like.setImageTintList(ContextCompat. - getColorStateList(bfq.this, android.R.color.holo_red_dark)); - JSONObject json = new JSONObject(); - json.put("name", bfqkz.xm.name); - json.put("zz", bfqkz.xm.zz); - json.put("picUrl", bfqkz.xm.picurl); - com.muqingbfq.fragment.gd.like.put(String.valueOf(bfqkz.xm.id), json); + if (!list.contains(bfqkz.xm)) { + list.add(bfqkz.xm); + inflate.like.setImageTintList(ContextCompat. + getColorStateList(bfq.this, android.R.color.holo_red_dark)); + } } - com.muqingbfq.mq.wj.xrwb(com.muqingbfq.mq.wj.mp3_like, - com.muqingbfq.fragment.gd.like.toString()); bfqkz.like_bool = !bfqkz.like_bool; + wj.xrwb(wj.gd + "mp3_like.json", gson.toJson(list)); } catch (Exception e) { e.printStackTrace(); } @@ -111,7 +121,7 @@ public class bfq extends AppCompatActivity { @Override public void run() { super.run(); - xm x = bfqkz.xm; + MP3 x = bfqkz.xm; String hq = wl.hq(url.api + "?id=" + x.id + "&level=exhigh" + "&cookie=" + wl.Cookie); if (hq == null) { return; diff --git a/app/src/main/java/com/muqingbfq/bfq_an.java b/app/src/main/java/com/muqingbfq/bfq_an.java index 45def3a..15f4ca5 100644 --- a/app/src/main/java/com/muqingbfq/bfq_an.java +++ b/app/src/main/java/com/muqingbfq/bfq_an.java @@ -5,12 +5,18 @@ import android.content.Context; import android.view.View; import android.widget.ImageView; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.muqingbfq.api.url; import com.muqingbfq.fragment.Media; import com.muqingbfq.fragment.gd; +import com.muqingbfq.mq.gj; +import com.muqingbfq.mq.wj; +import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; public class bfq_an { public static class kz implements View.OnClickListener { @@ -49,6 +55,7 @@ public class bfq_an { bfqkz.xm = bfqkz.list.get(bfqkz.getmti(ms)); new url(bfqkz.xm); } + public static class control implements View.OnClickListener { public control(ImageView imageView) { switch (bfqkz.ms) { @@ -92,17 +99,27 @@ public class bfq_an { @SuppressLint("SimpleDateFormat") static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss"); + public static String getTime(long time) { return simpleDateFormat.format(new Date(time)); } + public static void islike() { - try { - gd.like.getJSONObject(String.valueOf(bfqkz.xm.id)); - bfqkz.like_bool = true; - Media.setlike(true); - } catch (Exception e) { - bfqkz.like_bool = false; - Media.setlike(false); + boolean contains = false; + String dqwb = wj.dqwb(wj.gd + "mp3_like.json"); + if (dqwb != null) { + try { + Type type = new TypeToken>() { + }.getType(); + List o = new Gson().fromJson(dqwb, type); + if (o != null) { + contains = o.contains(bfqkz.xm); + } + } catch (Exception e) { + wj.sc(wj.gd + "mp3_like.json"); + } } + bfqkz.like_bool = contains; + Media.setlike(contains); } } diff --git a/app/src/main/java/com/muqingbfq/bfqkz.java b/app/src/main/java/com/muqingbfq/bfqkz.java index 845201c..72b587b 100644 --- a/app/src/main/java/com/muqingbfq/bfqkz.java +++ b/app/src/main/java/com/muqingbfq/bfqkz.java @@ -3,8 +3,6 @@ package com.muqingbfq; import android.annotation.SuppressLint; import android.app.Service; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Binder; import android.os.Bundle; @@ -21,17 +19,19 @@ import androidx.media3.common.MediaItem; import com.muqingbfq.api.url; import com.muqingbfq.mq.BluetoothMusicController; import com.muqingbfq.mq.gj; +import com.muqingbfq.mq.wj; import java.util.ArrayList; import java.util.List; import java.util.Random; public class bfqkz extends Service { - public static com.muqingbfq.MediaPlayer mt; - public static List list = new ArrayList<>(); + public static MediaPlayer mt; + public static List list = new ArrayList<>(); + public static List lishi_list = new ArrayList<>(); public static int ms; // 0 循环 1 顺序 2 随机 - public static xm xm; + public static MP3 xm; public static boolean like_bool; @SuppressLint("StaticFieldLeak") public static com.muqingbfq.mq.NotificationManagerCompat notify; @@ -46,6 +46,7 @@ public class bfqkz extends Service { } else if (s == 2) { i = new Random().nextInt(bfqkz.list.size()); } + mt.build.seekToDefaultPosition(i); return i; } @@ -58,58 +59,39 @@ public class bfqkz extends Service { if (TextUtils.isEmpty(xm.picurl.toString())) { xm.picurl = url.picurl(xm.id); } + if (bfqkz.lishi_list.size() >= 100) { + bfqkz.lishi_list.remove(0); + } + bfqkz.lishi_list.remove(bfqkz.xm); + bfqkz.lishi_list.add(0, bfqkz.xm); + wj.xrwb(wj.gd + "mp3_hc.json", new com.google.gson.Gson().toJson(bfqkz.lishi_list)); mt.setDataSource(id); } catch (Exception e) { yc.start(home.appCompatActivity, "bfqkz mp3(" + id + ") :" + e); } } + public static void mp3(Uri id) { - try { - if (TextUtils.isEmpty(id.toString())) { - return; - } - gj.sc(xm.picurl); - if (TextUtils.isEmpty(xm.picurl.toString())) { - xm.picurl = url.picurl(xm.id); - } - MediaItem mediaItem = MediaItem.fromUri(id); - main.handler.post(() -> { - mt.build.setMediaItem(mediaItem); - mt.build.prepare(); - mt.build.setPlayWhenReady(true); - mt.start(); - }); - } catch (Exception e) { - yc.start(home.appCompatActivity, "bfqkz mp3(" + id + ") :" + e); - } + mp3(id.toString()); } public static MediaSessionCompat mSession; public static MediaMetadataCompat build; public static PlaybackStateCompat playback; + @Override public void onCreate() { super.onCreate(); - if (mt == null) { - mt = new com.muqingbfq.MediaPlayer(); - new BluetoothMusicController(this); - } + com.muqingbfq.api.playlist.hq_hc(bfqkz.lishi_list); + new BluetoothMusicController(this); mSession = new MediaSessionCompat(this, "MusicService"); - playback=new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_NONE,0,1.0f) + playback = new PlaybackStateCompat.Builder() + .setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f) .build(); mSession.setCallback(new callback()); mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setPlaybackState(playback); - Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); - - build = new MediaMetadataCompat.Builder() - .putString(MediaMetadataCompat.METADATA_KEY_TITLE, "Song Title") - .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "Artist Name") - .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap) - .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 1000) // 单位为毫秒 - .build(); mSession.setMetadata(build); mSession.setActive(true); notify = new com.muqingbfq.mq.NotificationManagerCompat(this); @@ -125,10 +107,10 @@ public class bfqkz extends Service { @Override public void onPlay() { super.onPlay(); - if(playback.getState() == PlaybackStateCompat.STATE_PAUSED){ + if (playback.getState() == PlaybackStateCompat.STATE_PAUSED) { mt.start(); playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_PLAYING,0,1.0f) + .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) .build(); mSession.setPlaybackState(playback); } @@ -137,43 +119,46 @@ public class bfqkz extends Service { @Override public void onPause() { super.onPause(); - if(playback.getState() == PlaybackStateCompat.STATE_PLAYING){ + if (playback.getState() == PlaybackStateCompat.STATE_PLAYING) { mt.pause(); playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_PAUSED,0,1.0f) + .setState(PlaybackStateCompat.STATE_PAUSED, 0, 1.0f) .build(); mSession.setPlaybackState(playback); } } + @Override public void onPlayFromUri(Uri uri, Bundle extras) { try { - switch (playback.getState()){ + switch (playback.getState()) { case PlaybackStateCompat.STATE_PLAYING: case PlaybackStateCompat.STATE_PAUSED: case PlaybackStateCompat.STATE_NONE: mp3(uri); playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_CONNECTING,0,1.0f) + .setState(PlaybackStateCompat.STATE_CONNECTING, 0, 1.0f) .build(); mSession.setPlaybackState(playback); //我们可以保存当前播放音乐的信息,以便客户端刷新UI mSession.setMetadata(new MediaMetadataCompat.Builder() - .putString(MediaMetadataCompat.METADATA_KEY_TITLE,extras.getString("title")) + .putString(MediaMetadataCompat.METADATA_KEY_TITLE, extras.getString("title")) .build() ); break; } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } } + @Nullable @Override public IBinder onBind(Intent intent) { return null; } + public class MyBinder extends Binder { bfqkz getService() { return bfqkz.this; diff --git a/app/src/main/java/com/muqingbfq/fragment/Media.java b/app/src/main/java/com/muqingbfq/fragment/Media.java index 34e71bf..35c43e6 100644 --- a/app/src/main/java/com/muqingbfq/fragment/Media.java +++ b/app/src/main/java/com/muqingbfq/fragment/Media.java @@ -87,17 +87,9 @@ public class Media extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (view != null) { - return view; - } FragmentBfqBinding inflate = FragmentBfqBinding.inflate(inflater, container, false); view = inflate.getRoot(); inflate.cardview.addView(home.imageView); - - LinearLayout.LayoutParams layoutParams = - new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, - LinearLayout.LayoutParams.MATCH_PARENT,2); - inflate.linearlayout.addView(lrcview,layoutParams); tdt = inflate.tdt; tdt.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override @@ -135,6 +127,15 @@ public class Media extends Fragment { kp.setVisibility(View.VISIBLE); } }); + LinearLayout.LayoutParams layoutParams = + new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.MATCH_PARENT,2); + inflate.linearlayout.addView(lrcview,layoutParams); + }else{ + LinearLayout.LayoutParams layoutParams = + new LinearLayout.LayoutParams(0, + LinearLayout.LayoutParams.MATCH_PARENT,1); + inflate.linearlayout.addView(lrcview,layoutParams); } //初始化播放器列表 if (bfqkz.xm != null) { @@ -145,14 +146,6 @@ public class Media extends Fragment { long position = bfqkz.mt.build.getCurrentPosition(); setProgress((int) position); main.handler.post(bfqkz.mt.updateSeekBar); // 在播放开始时启动更新进度 - - new Thread() { - @Override - public void run() { - super.run(); - url.gc(bfqkz.xm.id); - } - }.start(); } return view; } diff --git a/app/src/main/java/com/muqingbfq/fragment/bflb_db.java b/app/src/main/java/com/muqingbfq/fragment/bflb_db.java index e26e99f..1e36b56 100644 --- a/app/src/main/java/com/muqingbfq/fragment/bflb_db.java +++ b/app/src/main/java/com/muqingbfq/fragment/bflb_db.java @@ -11,16 +11,19 @@ import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.muqingbfq.MP3; import com.muqingbfq.R; import com.muqingbfq.api.url; import com.muqingbfq.bfqkz; import com.muqingbfq.list.MyViewHoder; import com.muqingbfq.main; +import com.muqingbfq.mq.gj; import com.muqingbfq.xm; import com.muqingbfq.yc; public class bflb_db extends BottomSheetDialog { public static RecyclerView.Adapter adapter; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -32,12 +35,12 @@ public class bflb_db extends BottomSheetDialog { RecyclerView lb = findViewById(R.id.lb); lb.setAdapter(new spq()); if (bfqkz.xm != null) { - lb.smoothScrollToPosition(bfqkz.list.indexOf(bfqkz.xm)); + lb.smoothScrollToPosition(getI()); } findViewById(R.id.xxbj). setOnClickListener(v -> { if (bfqkz.xm != null) { - lb.smoothScrollToPosition(bfqkz.list.indexOf(bfqkz.xm)); + lb.smoothScrollToPosition(getI()); } }); } catch (Exception e) { @@ -45,6 +48,13 @@ public class bflb_db extends BottomSheetDialog { } } + private int getI() { + int i = bfqkz.list.indexOf(bfqkz.xm); + if (i == -1) { + i = 0; + } + return i; + } public bflb_db(Context context) { super(context); } @@ -57,6 +67,7 @@ public class bflb_db extends BottomSheetDialog { public spq() { adapter = this; } + @NonNull @Override public MyViewHoder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -66,7 +77,7 @@ public class bflb_db extends BottomSheetDialog { @Override public void onBindViewHolder(@NonNull MyViewHoder holder, int position) { - xm x = bfqkz.list.get(position); + MP3 x = bfqkz.list.get(position); holder.name.setText(x.name); holder.zz.setText(x.zz); int color = ContextCompat.getColor(holder.getContext(), R.color.text); diff --git a/app/src/main/java/com/muqingbfq/fragment/bfq_db.java b/app/src/main/java/com/muqingbfq/fragment/bfq_db.java index cdc6f12..690088b 100644 --- a/app/src/main/java/com/muqingbfq/fragment/bfq_db.java +++ b/app/src/main/java/com/muqingbfq/fragment/bfq_db.java @@ -12,8 +12,12 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; +import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import com.muqingbfq.MP3; +import com.muqingbfq.MediaPlayer; import com.muqingbfq.R; +import com.muqingbfq.api.url; import com.muqingbfq.bfq; import com.muqingbfq.bfq_an; import com.muqingbfq.bfqkz; @@ -35,11 +39,24 @@ public class bfq_db extends Fragment { String jsonList = this.getContext().getSharedPreferences("list", Context.MODE_PRIVATE) .getString("listData", null); // 获取保存的 JSON 字符串 if (jsonList != null) { - Type type = new TypeToken>() { + Type type = new TypeToken>() { }.getType(); bfqkz.list = new com.google.gson.Gson().fromJson(jsonList, type); // 将 JSON 字符串转换回列表数据 } + + bfqkz.xm = wj.getMP3FromFile(); + bfqkz.mt = new MediaPlayer(); + if (bfqkz.xm != null) { + new Thread(){ + @Override + public void run() { + super.run(); + String hq = url.hq(bfqkz.xm); + bfqkz.mt.DataSource(hq); + } + }.start(); + } } view = inflater.inflate(R.layout.fragment_bfq_db, container, false); diff --git a/app/src/main/java/com/muqingbfq/fragment/gd.java b/app/src/main/java/com/muqingbfq/fragment/gd.java index 68c4643..2a00f5e 100644 --- a/app/src/main/java/com/muqingbfq/fragment/gd.java +++ b/app/src/main/java/com/muqingbfq/fragment/gd.java @@ -2,10 +2,8 @@ package com.muqingbfq.fragment; import android.annotation.SuppressLint; import android.content.Context; -import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -22,27 +20,21 @@ import androidx.viewpager2.widget.ViewPager2; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.google.android.material.card.MaterialCardView; +import com.muqingbfq.MP3; import com.muqingbfq.R; import com.muqingbfq.api.playlist; -import com.muqingbfq.api.resource; import com.muqingbfq.bfq_an; import com.muqingbfq.bfqkz; import com.muqingbfq.databinding.FragmentGdBinding; import com.muqingbfq.list.list_gd; import com.muqingbfq.main; -import com.muqingbfq.mq.gj; -import com.muqingbfq.mq.wj; import com.muqingbfq.xm; -import org.json.JSONException; -import org.json.JSONObject; - +import java.util.ArrayList; import java.util.List; -import java.util.Objects; public class gd extends Fragment { public static String gdid; - public static JSONObject like = new JSONObject(); FragmentGdBinding binding; @Override public void onResume() { @@ -105,13 +97,6 @@ public class gd extends Fragment { } } }); - try { - if (wj.cz(wj.mp3_like)) { - like = new JSONObject(wj.dqwb(wj.mp3_like)); - } - } catch (JSONException e) { - gj.sc(e); - } return binding.getRoot(); } public static class baseadapter extends RecyclerView.Adapter { diff --git a/app/src/main/java/com/muqingbfq/fragment/mp3.java b/app/src/main/java/com/muqingbfq/fragment/mp3.java index bd46578..fc37f99 100644 --- a/app/src/main/java/com/muqingbfq/fragment/mp3.java +++ b/app/src/main/java/com/muqingbfq/fragment/mp3.java @@ -14,6 +14,7 @@ import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.muqingbfq.MP3; import com.muqingbfq.R; import com.muqingbfq.api.playlist; import com.muqingbfq.api.url; @@ -29,7 +30,7 @@ import java.util.ArrayList; import java.util.List; public class mp3 extends FragmentActivity { - private final List list = new ArrayList<>(); + private final List list = new ArrayList<>(); public static RecyclerView.Adapter lbspq; @Override @@ -94,7 +95,7 @@ public class mp3 extends FragmentActivity { @Override public void onBindViewHolder(@NonNull MyViewHoder holder, int position) { - xm x = list.get(position); + MP3 x = list.get(position); holder.name.setText(x.name); holder.zz.setText(x.zz); int color = ContextCompat.getColor(holder.getContext(), R.color.text); diff --git a/app/src/main/java/com/muqingbfq/fragment/search.java b/app/src/main/java/com/muqingbfq/fragment/search.java index 9932812..cdce3c0 100644 --- a/app/src/main/java/com/muqingbfq/fragment/search.java +++ b/app/src/main/java/com/muqingbfq/fragment/search.java @@ -16,6 +16,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.tabs.TabLayout; +import com.muqingbfq.MP3; import com.muqingbfq.R; import com.muqingbfq.api.url; import com.muqingbfq.bfq; @@ -36,7 +37,8 @@ import java.util.List; public class search extends Fragment { public static RecyclerView.Adapter lbspq; - List list = new ArrayList<>(); + List list = new ArrayList<>(); + List xmList = new ArrayList<>(); gd.baseadapter adapter_gd; public String name; @@ -53,7 +55,7 @@ public class search extends Fragment { TypedValue typedValue = new TypedValue(); requireContext().getTheme().resolveAttribute(android.R.attr.windowBackground, typedValue, true); // 设置背景颜色 - adapter_gd = new gd.baseadapter(getContext(), list); + adapter_gd = new gd.baseadapter(getContext(), xmList); view.setBackgroundColor(typedValue.data); inflate.tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override @@ -107,6 +109,7 @@ public class search extends Fragment { public class start extends Thread { public start(String name) { list.clear(); + xmList.clear(); search.this.name = name; start(); } @@ -153,7 +156,7 @@ public class search extends Fragment { zz.append("/").append(name_zz); } } - list.add(new xm(id, name, zz.toString(), "")); + list.add(new MP3(id, name, zz.toString(), "")); } } catch (Exception e) { gj.sc(e); @@ -172,7 +175,8 @@ public class search extends Fragment { String name = jsonObject.getString("name"); String coverImgUrl = jsonObject.getString("coverImgUrl"); // gj.sc(name); - list.add(new xm(id, name, coverImgUrl, wj.cz(wj.gd + id))); + xmList.add(new xm(id, name, coverImgUrl, false)); + } } catch (Exception e) { @@ -195,7 +199,7 @@ public class search extends Fragment { @Override public void onBindViewHolder(@NonNull MyViewHoder holder, int position) { - xm x = list.get(position); + MP3 x = list.get(position); holder.name.setText(x.name); holder.zz.setText(x.zz); int color = ContextCompat.getColor(holder.getContext(), R.color.text); diff --git a/app/src/main/java/com/muqingbfq/home.java b/app/src/main/java/com/muqingbfq/home.java index 0c88aee..ac3e7b1 100644 --- a/app/src/main/java/com/muqingbfq/home.java +++ b/app/src/main/java/com/muqingbfq/home.java @@ -21,6 +21,10 @@ import com.muqingbfq.fragment.Media; import com.muqingbfq.fragment.bfq_db; import com.muqingbfq.fragment.gd; import com.muqingbfq.mq.gj; +import com.muqingbfq.mq.wj; + +import java.io.FileOutputStream; +import java.io.ObjectOutputStream; import me.wcy.lrcview.LrcView; @@ -104,6 +108,7 @@ public class home extends AppCompatActivity { String jsonList = new com.google.gson.Gson().toJson(bfqkz.list); editor.putString("listData", jsonList); editor.apply(); + wj.setMP3ToFile(bfqkz.xm); } diff --git a/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java b/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java index d3def04..628252e 100644 --- a/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java +++ b/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java @@ -111,7 +111,6 @@ public class NotificationManagerCompat { .setOngoing(bfqkz.mt.isPlaying()); notificationManager_notify(); } - private PendingIntent pendingIntent_kg, pendingIntent_syq, pendingIntent_xyq; diff --git a/app/src/main/java/com/muqingbfq/mq/wj.java b/app/src/main/java/com/muqingbfq/mq/wj.java index db8a70e..4c22638 100644 --- a/app/src/main/java/com/muqingbfq/mq/wj.java +++ b/app/src/main/java/com/muqingbfq/mq/wj.java @@ -2,15 +2,20 @@ package com.muqingbfq.mq; import android.content.Context; +import com.google.gson.Gson; +import com.muqingbfq.MP3; import com.muqingbfq.yc; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.OutputStream; import java.nio.file.Files; import java.security.MessageDigest; @@ -156,4 +161,31 @@ public class wj { } } } + + // 保存MP3对象到文件 + public static void setMP3ToFile(MP3 mp3) { + if (mp3 == null) { + return; + } + Gson gson = new Gson(); + String json = gson.toJson(mp3); + xrwb(filesdri + "mp3.dat", json); + } + + // 从文件中加载MP3对象 + public static MP3 getMP3FromFile() { + Gson gson = new Gson(); + MP3 mp3 = null; + try { + File file = new File(filesdri + "mp3.dat"); + if (file.exists() && file.length() > 0) { + FileReader reader = new FileReader(file); + mp3 = gson.fromJson(reader, MP3.class); + reader.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + return mp3; + } } diff --git a/app/src/main/java/com/muqingbfq/yc.java b/app/src/main/java/com/muqingbfq/yc.java index f3ed8ac..a012a6e 100644 --- a/app/src/main/java/com/muqingbfq/yc.java +++ b/app/src/main/java/com/muqingbfq/yc.java @@ -13,15 +13,15 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.muqingbfq.databinding.ActivityYcBinding; public class yc extends AppCompatActivity { public static Object exception; - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_yc); - TextView text = findViewById(R.id.text); + ActivityYcBinding binding = ActivityYcBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); String deviceModel = Build.MODEL; String deviceManufacturer = Build.MANUFACTURER; @@ -44,7 +44,7 @@ public class yc extends AppCompatActivity { + "屏幕密度:" + density + "\n" + "密度DPI:" + densityDpi + "\n" + "异常信息: " + exception.toString(); - text.setText(wb); + binding.text.setText(wb); } public static void start(Object e) { diff --git a/app/src/main/res/drawable/download.xml b/app/src/main/res/drawable/download.xml index 7d81e1a..2783224 100644 --- a/app/src/main/res/drawable/download.xml +++ b/app/src/main/res/drawable/download.xml @@ -5,5 +5,5 @@ android:viewportHeight="1024"> + android:fillColor="@color/text"/> diff --git a/app/src/main/res/drawable/like.xml b/app/src/main/res/drawable/like.xml new file mode 100644 index 0000000..6e84605 --- /dev/null +++ b/app/src/main/res/drawable/like.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout-land/activity_bfq.xml b/app/src/main/res/layout-land/activity_bfq.xml index d885993..a9a85c4 100644 --- a/app/src/main/res/layout-land/activity_bfq.xml +++ b/app/src/main/res/layout-land/activity_bfq.xml @@ -132,10 +132,10 @@ diff --git a/app/src/main/res/layout-land/fragment_bfq.xml b/app/src/main/res/layout-land/fragment_bfq.xml index 162e14f..2c5d543 100644 --- a/app/src/main/res/layout-land/fragment_bfq.xml +++ b/app/src/main/res/layout-land/fragment_bfq.xml @@ -6,6 +6,7 @@ android:layout_height="match_parent" android:orientation="vertical"> - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/like.png b/app/src/main/res/mipmap-hdpi/like.png deleted file mode 100644 index ececda2bf6ef4bc632d6ce441c47be165f9cc458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)4T98>;g2U&}&175s43pmv^&guME*>NuC9ik;3SGah0&f$FI7>{CP zTDTHfV3@hC;$wC^f%3hXE-SGb?-D59o40wlfjOE$=}?Xo65rKyZl<(wTRSDRq z+Ny5Y`H4L-B5*bVku$LpWYd@`YxZH~h9Pc1tVeqpB-&UvEQt`{u|*R6v|e9&Lwv%vmTN^Hh0VTn7^-lh46mh9#I?ytZP*}N^ZDovUR nyv&o#3tg2Bc^VoT8shl_0CTx%2$PFG00000NkvXXu0mjfPhk_D diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index c57f132..d5f8a07 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -12,7 +12,7 @@ true @color/bj - + @color/text #00BCD4 @@ -23,23 +23,26 @@ + + - - +