优化了搜索,修复了若干通知栏BUG
This commit is contained in:
parent
69c7cd15b9
commit
907b52a700
|
@ -12,8 +12,8 @@
|
||||||
"filters": [],
|
"filters": [],
|
||||||
"attributes": [],
|
"attributes": [],
|
||||||
"versionCode": 1,
|
"versionCode": 1,
|
||||||
"versionName": "1.7.8",
|
"versionName": "1.8.0",
|
||||||
"outputFile": "Cloud_music-debug-v1.7.8.apk"
|
"outputFile": "Cloud_music-debug-v1.8.0.apk"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"elementType": "File"
|
"elementType": "File"
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
<!--悬浮窗权限-->
|
<!--悬浮窗权限-->
|
||||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||||
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
|
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".main"
|
android:name=".main"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
@ -66,9 +65,11 @@
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".bfqkz"
|
android:name=".bfqkz"
|
||||||
android:exported="false">
|
android:exported="true"
|
||||||
|
tools:ignore="ExportedService">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.media.browse.MediaBrowserService" />
|
<action android:name="android.media.browse.MediaBrowserService" />
|
||||||
|
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
<service android:name=".mq.floating" />
|
<service android:name=".mq.floating" />
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
package com.muqingbfq;
|
package com.muqingbfq;
|
||||||
|
import static android.support.v4.media.session.MediaSessionCompat.*;
|
||||||
|
|
||||||
|
import android.support.v4.media.session.MediaSessionCompat;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Queue;
|
||||||
|
|
||||||
public class MP3 {
|
public class MP3 {
|
||||||
public String id, name, zz;
|
public String id, name, zz;
|
||||||
// 音乐的贴图
|
// 音乐的贴图
|
||||||
|
|
|
@ -138,7 +138,8 @@ public class MediaPlayer extends android.media.MediaPlayer {
|
||||||
.listener(new RequestListener<Bitmap>() {
|
.listener(new RequestListener<Bitmap>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onLoadFailed(@Nullable GlideException e, Object model,
|
public boolean onLoadFailed(@Nullable GlideException e, Object model,
|
||||||
@NonNull Target<Bitmap> target, boolean isFirstResource) {
|
@NonNull Target<Bitmap> target,
|
||||||
|
boolean isFirstResource) {
|
||||||
bfq.bitmap = null;
|
bfq.bitmap = null;
|
||||||
try {
|
try {
|
||||||
Mp3File mp3file = new Mp3File(wj.mp3 + bfqkz.xm.id);
|
Mp3File mp3file = new Mp3File(wj.mp3 + bfqkz.xm.id);
|
||||||
|
@ -151,15 +152,22 @@ public class MediaPlayer extends android.media.MediaPlayer {
|
||||||
} catch (Exception a) {
|
} catch (Exception a) {
|
||||||
gj.sc("yc:"+a);
|
gj.sc("yc:"+a);
|
||||||
}
|
}
|
||||||
bfqkz.notify.setBitmap();
|
if (bfqkz.notify != null) {
|
||||||
|
bfqkz.notify.tzl();
|
||||||
|
}
|
||||||
|
Media.setImageBitmap();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onResourceReady(@NonNull Bitmap bitmap, @NonNull Object model, Target<Bitmap> target,
|
public boolean onResourceReady(@NonNull Bitmap bitmap, @NonNull Object model, Target<Bitmap> target,
|
||||||
@NonNull DataSource dataSource, boolean isFirstResource) {
|
@NonNull DataSource dataSource,
|
||||||
|
boolean isFirstResource) {
|
||||||
bfq.bitmap = bitmap;
|
bfq.bitmap = bitmap;
|
||||||
bfqkz.notify.setBitmap();
|
if (bfqkz.notify != null) {
|
||||||
|
bfqkz.notify.tzl();
|
||||||
|
}
|
||||||
|
Media.setImageBitmap();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -167,8 +175,8 @@ public class MediaPlayer extends android.media.MediaPlayer {
|
||||||
}
|
}
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
public void bfui() {
|
public void bfui() {
|
||||||
setTX();
|
|
||||||
String name = xm.name, zz = bfqkz.xm.zz;
|
String name = xm.name, zz = bfqkz.xm.zz;
|
||||||
|
setTX();
|
||||||
if (bfq.view != null) {
|
if (bfq.view != null) {
|
||||||
Media.setProgress(0);
|
Media.setProgress(0);
|
||||||
bfq.setname(name);
|
bfq.setname(name);
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
package com.muqingbfq;
|
package com.muqingbfq;
|
||||||
|
|
||||||
public class xm {
|
public class XM {
|
||||||
public String id, name;
|
public String id, name;
|
||||||
public Object picurl;
|
public Object picurl;
|
||||||
public xm(String id, String name, String picurl) {
|
public XM(String id, String name, String picurl) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.picurl = picurl;
|
this.picurl = picurl;
|
||||||
}
|
}
|
||||||
public xm(String id, String name, int picurl) {
|
public XM(String id, String name, int picurl) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.picurl = picurl;
|
this.picurl = picurl;
|
|
@ -25,6 +25,8 @@ import com.google.android.flexbox.FlexDirection;
|
||||||
import com.google.android.flexbox.FlexWrap;
|
import com.google.android.flexbox.FlexWrap;
|
||||||
import com.google.android.flexbox.FlexboxLayoutManager;
|
import com.google.android.flexbox.FlexboxLayoutManager;
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.muqingbfq.databinding.ActivitySearchBinding;
|
import com.muqingbfq.databinding.ActivitySearchBinding;
|
||||||
import com.muqingbfq.fragment.search;
|
import com.muqingbfq.fragment.search;
|
||||||
import com.muqingbfq.mq.FragmentActivity;
|
import com.muqingbfq.mq.FragmentActivity;
|
||||||
|
@ -33,7 +35,6 @@ import com.muqingbfq.mq.wj;
|
||||||
import com.muqingbfq.mq.wl;
|
import com.muqingbfq.mq.wl;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -42,28 +43,25 @@ import java.util.List;
|
||||||
public class activity_search extends FragmentActivity {
|
public class activity_search extends FragmentActivity {
|
||||||
private EditText editText;
|
private EditText editText;
|
||||||
private ArrayAdapter<String> adapter;
|
private ArrayAdapter<String> adapter;
|
||||||
private SearchRecordAdapter recordAdapter;
|
private List<String> json_list = new ArrayList<>();
|
||||||
private JSONObject json = new JSONObject();
|
|
||||||
private final List<String> json_list = new ArrayList<>();
|
|
||||||
private final List<String> list = new ArrayList<>();
|
private final List<String> list = new ArrayList<>();
|
||||||
ListView listPopupWindow;
|
ListView listPopupWindow;
|
||||||
ActivitySearchBinding inflate;
|
ActivitySearchBinding binding;
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
inflate = ActivitySearchBinding.inflate(getLayoutInflater());
|
binding = ActivitySearchBinding.inflate(getLayoutInflater());
|
||||||
setContentView(inflate.getRoot());
|
setContentView(binding.getRoot());
|
||||||
RecyclerView recyclerView = findViewById(R.id.list_recycler);
|
|
||||||
FlexboxLayoutManager manager = new FlexboxLayoutManager(this);
|
FlexboxLayoutManager manager = new FlexboxLayoutManager(this);
|
||||||
//设置主轴排列方式
|
//设置主轴排列方式
|
||||||
manager.setFlexDirection(FlexDirection.ROW);
|
manager.setFlexDirection(FlexDirection.ROW);
|
||||||
//设置是否换行
|
//设置是否换行
|
||||||
manager.setFlexWrap(FlexWrap.WRAP);
|
manager.setFlexWrap(FlexWrap.WRAP);
|
||||||
manager.setAlignItems(AlignItems.STRETCH);
|
manager.setAlignItems(AlignItems.STRETCH);
|
||||||
recyclerView.setLayoutManager(manager);
|
binding.listRecycler.setLayoutManager(manager);
|
||||||
new SearchRecordAdapter();
|
binding.listRecycler.setAdapter(new SearchRecordAdapter());
|
||||||
recyclerView.setAdapter(recordAdapter);
|
|
||||||
|
|
||||||
editText = findViewById(R.id.editview);
|
editText = findViewById(R.id.editview);
|
||||||
editText.setOnEditorActionListener((v, actionId, event) -> {
|
editText.setOnEditorActionListener((v, actionId, event) -> {
|
||||||
|
@ -75,15 +73,15 @@ public class activity_search extends FragmentActivity {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
inflate.deleat.setOnClickListener(v -> new MaterialAlertDialogBuilder(v.getContext())
|
binding.deleat.setOnClickListener(v -> new MaterialAlertDialogBuilder(
|
||||||
|
activity_search.this)
|
||||||
.setTitle("删除")
|
.setTitle("删除")
|
||||||
.setMessage("清空历史记录?")
|
.setMessage("清空历史记录?")
|
||||||
.setNegativeButton("取消", null)
|
.setNegativeButton("取消", null)
|
||||||
.setPositiveButton("确定", (dialogInterface, i) -> {
|
.setPositiveButton("确定", (dialogInterface, i) -> {
|
||||||
wj.sc(wj.filesdri + wj.lishi_json);
|
wj.sc(wj.filesdri + wj.lishi_json);
|
||||||
json = new JSONObject();
|
|
||||||
json_list.clear();
|
json_list.clear();
|
||||||
recordAdapter.notifyDataSetChanged();
|
binding.listRecycler.getAdapter().notifyDataSetChanged();
|
||||||
findViewById(R.id.xxbj1).setVisibility(View.GONE);
|
findViewById(R.id.xxbj1).setVisibility(View.GONE);
|
||||||
})
|
})
|
||||||
.show());
|
.show());
|
||||||
|
@ -150,38 +148,32 @@ public class activity_search extends FragmentActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
inflate.editview.requestFocus();//获取焦点
|
binding.editview.requestFocus();//获取焦点
|
||||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
//if (!imm.isActive()) //没有显示键盘,弹出
|
//if (!imm.isActive()) //没有显示键盘,弹出
|
||||||
imm.showSoftInput(inflate.editview, 0);
|
imm.showSoftInput(binding.editview, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dismiss() {
|
public void dismiss() {
|
||||||
inflate.editview.clearFocus();
|
binding.editview.clearFocus();
|
||||||
listPopupWindow.setVisibility(View.GONE);
|
listPopupWindow.setVisibility(View.GONE);
|
||||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
if (imm.isActive()) //有显示键盘,隐藏
|
if (imm.isActive()) //有显示键盘,隐藏
|
||||||
imm.hideSoftInputFromWindow(inflate.editview.getWindowToken(),
|
imm.hideSoftInputFromWindow(binding.editview.getWindowToken(),
|
||||||
InputMethodManager.HIDE_NOT_ALWAYS);
|
InputMethodManager.HIDE_NOT_ALWAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
private void addSearchRecord(String name) {
|
private void addSearchRecord(String name) {
|
||||||
try {
|
try {
|
||||||
if (!findViewById(R.id.xxbj1).isShown()) {
|
if (!binding.xxbj1.isShown()) {
|
||||||
findViewById(R.id.xxbj1).setVisibility(View.VISIBLE);
|
binding.xxbj1.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
if (!json.has("list")) {
|
json_list.remove(name);
|
||||||
json.put("list", new JSONArray());
|
json_list.add(0, name);
|
||||||
}
|
wj.xrwb(wj.filesdri + wj.lishi_json, new Gson().toJson(json_list));
|
||||||
if (!json_list.contains(name)) {
|
binding.listRecycler.getAdapter().notifyDataSetChanged();
|
||||||
json_list.add(name);
|
} catch (Exception e) {
|
||||||
JSONObject record = new JSONObject();
|
|
||||||
record.put("name", name);
|
|
||||||
json.getJSONArray("list").put(record);
|
|
||||||
wj.xrwb(wj.filesdri + wj.lishi_json, json.toString());
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
} catch (JSONException e) {
|
|
||||||
gj.sc(e);
|
gj.sc(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,21 +214,16 @@ public class activity_search extends FragmentActivity {
|
||||||
String dqwb = wj.dqwb(wj.filesdri + wj.lishi_json);
|
String dqwb = wj.dqwb(wj.filesdri + wj.lishi_json);
|
||||||
if (dqwb != null) {
|
if (dqwb != null) {
|
||||||
try {
|
try {
|
||||||
json = new JSONObject(dqwb);
|
json_list = new Gson().fromJson(dqwb, new TypeToken<List<String>>() {
|
||||||
JSONArray list1 = json.getJSONArray("list");
|
}.getType());
|
||||||
int length = list1.length();
|
} catch (Exception e) {
|
||||||
for (int i = length - 1; i >= 0; i--) {
|
wj.sc(wj.filesdri + wj.lishi_json);
|
||||||
json_list.add(list1.
|
|
||||||
getJSONObject(i).getString("name"));
|
|
||||||
}
|
|
||||||
} catch (JSONException e) {
|
|
||||||
yc.start(activity_search.this, e);
|
yc.start(activity_search.this, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (json_list.isEmpty()) {
|
if (json_list.isEmpty()) {
|
||||||
inflate.xxbj1.setVisibility(View.INVISIBLE);
|
binding.xxbj1.setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
recordAdapter = this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@ -254,6 +241,19 @@ public class activity_search extends FragmentActivity {
|
||||||
editText.setText(keyword);
|
editText.setText(keyword);
|
||||||
start(keyword);
|
start(keyword);
|
||||||
});
|
});
|
||||||
|
holder.recordTextView.setOnLongClickListener(view -> {
|
||||||
|
new MaterialAlertDialogBuilder(activity_search.this).
|
||||||
|
setTitle("删除此记录:" + keyword)
|
||||||
|
.setPositiveButton("确定", (dialogInterface, i) -> {
|
||||||
|
json_list.remove(keyword);
|
||||||
|
wj.xrwb(wj.filesdri + wj.lishi_json, new Gson().toJson(json_list));
|
||||||
|
notifyItemChanged(position);
|
||||||
|
})
|
||||||
|
.setNegativeButton("取消", null)
|
||||||
|
.show();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -285,6 +285,7 @@ public class activity_search extends FragmentActivity {
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finish() {
|
public void finish() {
|
||||||
super.finish();
|
super.finish();
|
||||||
|
|
|
@ -8,16 +8,14 @@ import android.content.pm.PackageManager;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Environment;
|
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
|
|
||||||
import com.mpatric.mp3agic.ID3v2;
|
import com.mpatric.mp3agic.ID3v2;
|
||||||
import com.mpatric.mp3agic.InvalidDataException;
|
|
||||||
import com.mpatric.mp3agic.Mp3File;
|
import com.mpatric.mp3agic.Mp3File;
|
||||||
import com.mpatric.mp3agic.UnsupportedTagException;
|
|
||||||
import com.muqingbfq.MP3;
|
import com.muqingbfq.MP3;
|
||||||
import com.muqingbfq.R;
|
import com.muqingbfq.R;
|
||||||
import com.muqingbfq.bfq;
|
import com.muqingbfq.bfq;
|
||||||
|
@ -37,10 +35,10 @@ import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
|
|
||||||
public class FileDownloader {
|
public class FileDownloader {
|
||||||
private static final String CHANNEL_ID = "download_channel";
|
private final String CHANNEL_ID = "download_channel";
|
||||||
private static final int NOTIFICATION_ID = 3;
|
private final int NOTIFICATION_ID = 3;
|
||||||
|
|
||||||
public static void downloadFile(Context context, String url, MP3 x) {
|
public void downloadFile(Context context, String url, MP3 x) {
|
||||||
OkHttpClient client = new OkHttpClient();
|
OkHttpClient client = new OkHttpClient();
|
||||||
Request request = new Request.Builder()
|
Request request = new Request.Builder()
|
||||||
.url(url)
|
.url(url)
|
||||||
|
@ -50,18 +48,18 @@ public class FileDownloader {
|
||||||
// 发起请求
|
// 发起请求
|
||||||
client.newCall(request).enqueue(new Callback() {
|
client.newCall(request).enqueue(new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Call call, IOException e) {
|
public void onFailure(@NonNull Call call, @NonNull IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
// 下载失败处理
|
// 下载失败处理
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call call, Response response) throws IOException {
|
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
|
||||||
if (!response.isSuccessful()) {
|
if (!response.isSuccessful()) {
|
||||||
// 下载失败处理
|
// 下载失败处理
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
File outputFile = new File(wj.mp3, "nihao");
|
File outputFile = new File(wj.mp3, x.id);
|
||||||
File parentFile = outputFile.getParentFile();
|
File parentFile = outputFile.getParentFile();
|
||||||
if (!parentFile.isDirectory()) {
|
if (!parentFile.isDirectory()) {
|
||||||
parentFile.mkdirs();
|
parentFile.mkdirs();
|
||||||
|
@ -122,7 +120,7 @@ public class FileDownloader {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createNotificationChannel(Context context) {
|
private void createNotificationChannel(Context context) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
CharSequence name = "Download Channel";
|
CharSequence name = "Download Channel";
|
||||||
String description = "Channel for file download";
|
String description = "Channel for file download";
|
||||||
|
@ -139,7 +137,7 @@ public class FileDownloader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateNotificationProgress(Context context, long fileSize,
|
private void updateNotificationProgress(Context context, long fileSize,
|
||||||
long fileSizeDownloaded) {
|
long fileSizeDownloaded) {
|
||||||
int progress = (int) ((fileSizeDownloaded * 100) / fileSize);
|
int progress = (int) ((fileSizeDownloaded * 100) / fileSize);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import com.muqingbfq.main;
|
||||||
import com.muqingbfq.mq.gj;
|
import com.muqingbfq.mq.gj;
|
||||||
import com.muqingbfq.mq.wj;
|
import com.muqingbfq.mq.wj;
|
||||||
import com.muqingbfq.mq.wl;
|
import com.muqingbfq.mq.wl;
|
||||||
import com.muqingbfq.xm;
|
import com.muqingbfq.XM;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
@ -16,7 +16,7 @@ import java.util.List;
|
||||||
|
|
||||||
public class resource {
|
public class resource {
|
||||||
|
|
||||||
public static void recommend(List<xm> list) {
|
public static void recommend(List<XM> list) {
|
||||||
try {
|
try {
|
||||||
list.clear();
|
list.clear();
|
||||||
String hq;
|
String hq;
|
||||||
|
@ -54,16 +54,16 @@ public class resource {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static xm Playlist_content(String UID) throws JSONException {
|
public static XM Playlist_content(String UID) throws JSONException {
|
||||||
String hq = wl.get(main.api + "/playlist/detail?id=" + UID);
|
String hq = wl.get(main.api + "/playlist/detail?id=" + UID);
|
||||||
JSONObject js = new JSONObject(hq).getJSONObject("playlist");
|
JSONObject js = new JSONObject(hq).getJSONObject("playlist");
|
||||||
String id = js.getString("id");
|
String id = js.getString("id");
|
||||||
String name = js.getString("name");
|
String name = js.getString("name");
|
||||||
String coverImgUrl = js.getString("coverImgUrl");
|
String coverImgUrl = js.getString("coverImgUrl");
|
||||||
return new xm(id, name, coverImgUrl);
|
return new XM(id, name, coverImgUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void 排行榜(List<xm> list) {
|
public static void 排行榜(List<XM> list) {
|
||||||
String hq;
|
String hq;
|
||||||
try {
|
try {
|
||||||
if (wj.cz(wj.gd_phb)) {
|
if (wj.cz(wj.gd_phb)) {
|
||||||
|
@ -88,7 +88,7 @@ public class resource {
|
||||||
name += description;
|
name += description;
|
||||||
}
|
}
|
||||||
String coverImgUrl = get.getString("coverImgUrl");
|
String coverImgUrl = get.getString("coverImgUrl");
|
||||||
list.add(new xm(id, name, coverImgUrl));
|
list.add(new XM(id, name, coverImgUrl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -96,10 +96,10 @@ public class resource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void add(JSONObject jsonObject, List<xm> list) throws Exception {
|
private static void add(JSONObject jsonObject, List<XM> list) throws Exception {
|
||||||
String id = jsonObject.getString("id");
|
String id = jsonObject.getString("id");
|
||||||
String name = jsonObject.getString("name");
|
String name = jsonObject.getString("name");
|
||||||
String picUrl = jsonObject.getString("picUrl");
|
String picUrl = jsonObject.getString("picUrl");
|
||||||
list.add(new xm(id, name, picUrl));
|
list.add(new XM(id, name, picUrl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,13 @@
|
||||||
package com.muqingbfq.api;
|
package com.muqingbfq.api;
|
||||||
|
|
||||||
import com.mpatric.mp3agic.ID3v2;
|
import com.mpatric.mp3agic.ID3v2;
|
||||||
import com.mpatric.mp3agic.InvalidDataException;
|
|
||||||
import com.mpatric.mp3agic.Mp3File;
|
import com.mpatric.mp3agic.Mp3File;
|
||||||
import com.mpatric.mp3agic.UnsupportedTagException;
|
|
||||||
import com.muqingbfq.MP3;
|
import com.muqingbfq.MP3;
|
||||||
import com.muqingbfq.bfq;
|
import com.muqingbfq.bfq;
|
||||||
import com.muqingbfq.fragment.Media;
|
import com.muqingbfq.fragment.Media;
|
||||||
import com.muqingbfq.mq.gj;
|
import com.muqingbfq.mq.gj;
|
||||||
import com.muqingbfq.mq.wj;
|
import com.muqingbfq.mq.wj;
|
||||||
import com.muqingbfq.mq.wl;
|
import com.muqingbfq.mq.wl;
|
||||||
import com.muqingbfq.xm;
|
|
||||||
import com.muqingbfq.yc;
|
import com.muqingbfq.yc;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
@ -19,7 +16,6 @@ import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
import okhttp3.Call;
|
import okhttp3.Call;
|
||||||
|
|
|
@ -50,8 +50,8 @@ public class bfq extends AppCompatActivity {
|
||||||
lrcView = binding.lrcView;
|
lrcView = binding.lrcView;
|
||||||
|
|
||||||
ViewGroup.LayoutParams layoutParams = binding.cardview.getLayoutParams();
|
ViewGroup.LayoutParams layoutParams = binding.cardview.getLayoutParams();
|
||||||
layoutParams.height = main.k;
|
layoutParams.height = main.k - 100;
|
||||||
layoutParams.width = main.k;
|
layoutParams.width = main.k - 100;
|
||||||
binding.cardview.setLayoutParams(layoutParams);/*
|
binding.cardview.setLayoutParams(layoutParams);/*
|
||||||
bfqkz.mt.seekTo(Math.toIntExact(time));
|
bfqkz.mt.seekTo(Math.toIntExact(time));
|
||||||
if (!gj.isTablet(this)) {
|
if (!gj.isTablet(this)) {
|
||||||
|
@ -151,7 +151,7 @@ public class bfq extends AppCompatActivity {
|
||||||
JSONArray data = json.getJSONArray("data");
|
JSONArray data = json.getJSONArray("data");
|
||||||
JSONObject jsonObject = data.getJSONObject(0);
|
JSONObject jsonObject = data.getJSONObject(0);
|
||||||
String url = jsonObject.getString("url");
|
String url = jsonObject.getString("url");
|
||||||
FileDownloader.downloadFile(bfq.this, url, bfqkz.xm);
|
new FileDownloader().downloadFile(bfq.this, url, bfqkz.xm);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,63 +85,62 @@ public class bfqkz extends MediaBrowserServiceCompat {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static MediaSessionCompat mSession;
|
public MediaSessionCompat mSession;
|
||||||
public static PlaybackStateCompat playback;
|
public PlaybackStateCompat.Builder playback;
|
||||||
|
|
||||||
public PendingIntent pendingIntent;
|
public PendingIntent pendingIntent;
|
||||||
|
|
||||||
|
public MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
com.muqingbfq.api.playlist.hq_hc(bfqkz.lishi_list);
|
|
||||||
new BluetoothMusicController(this);
|
|
||||||
playback = new PlaybackStateCompat.Builder()
|
|
||||||
.setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f)
|
|
||||||
.build();
|
|
||||||
Intent intent = new Intent(Intent.ACTION_MAIN);
|
Intent intent = new Intent(Intent.ACTION_MAIN);
|
||||||
intent.addCategory(Intent.CATEGORY_LAUNCHER);
|
intent.addCategory(Intent.CATEGORY_LAUNCHER);
|
||||||
intent.setComponent(new ComponentName(this, home.class));//用ComponentName得到class对象
|
intent.setComponent(new ComponentName(this, home.class));//用ComponentName得到class对象
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);// 关键的一步,设置启动模式,两种情况
|
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);// 关键的一步,设置启动模式,两种情况
|
||||||
pendingIntent = com.muqingbfq.mq.NotificationManagerCompat.getActivity(this, intent);
|
pendingIntent = com.muqingbfq.mq.NotificationManagerCompat.getActivity(this, intent);
|
||||||
mSession = new MediaSessionCompat(this, "MusicService",
|
com.muqingbfq.api.playlist.hq_hc(bfqkz.lishi_list);
|
||||||
|
new BluetoothMusicController(this);
|
||||||
|
mSession = new MediaSessionCompat(this, "MediaSessionCompat",
|
||||||
home.componentName, pendingIntent);
|
home.componentName, pendingIntent);
|
||||||
|
playback = new PlaybackStateCompat.Builder();
|
||||||
|
playback.setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f)
|
||||||
|
.build();
|
||||||
mSession.setCallback(new callback());
|
mSession.setCallback(new callback());
|
||||||
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
|
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
|
||||||
mSession.setPlaybackState(playback);
|
|
||||||
// mSession.setActive(true);
|
playback.setActions(PlaybackStateCompat.ACTION_PLAY);
|
||||||
|
playback.setActions(PlaybackStateCompat.ACTION_STOP);
|
||||||
|
|
||||||
|
mSession.setPlaybackState(playback.build());
|
||||||
setSessionToken(mSession.getSessionToken());
|
setSessionToken(mSession.getSessionToken());
|
||||||
|
mSession.setActive(true);
|
||||||
notify = new com.muqingbfq.mq.NotificationManagerCompat(this);
|
notify = new com.muqingbfq.mq.NotificationManagerCompat(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class callback extends MediaSessionCompat.Callback {
|
class callback extends MediaSessionCompat.Callback {
|
||||||
@Override
|
|
||||||
public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
|
|
||||||
mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlay() {
|
public void onPlay() {
|
||||||
super.onPlay();
|
super.onPlay();
|
||||||
if (playback.getState() == PlaybackStateCompat.STATE_PAUSED) {
|
if (playback.build().getState() == PlaybackStateCompat.STATE_PAUSED) {
|
||||||
mt.start();
|
mt.start();
|
||||||
playback = new PlaybackStateCompat.Builder()
|
playback.setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f)
|
||||||
.setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f)
|
|
||||||
.build();
|
.build();
|
||||||
mSession.setPlaybackState(playback);
|
mSession.setPlaybackState(playback.build());
|
||||||
}
|
}
|
||||||
|
gj.sc(this.getClass());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
if (playback.getState() == PlaybackStateCompat.STATE_PLAYING) {
|
if (playback.build().getState() == PlaybackStateCompat.STATE_PLAYING) {
|
||||||
mt.pause();
|
mt.pause();
|
||||||
playback = new PlaybackStateCompat.Builder()
|
playback.setState(PlaybackStateCompat.STATE_PAUSED, 0, 1.0f)
|
||||||
.setState(PlaybackStateCompat.STATE_PAUSED, 0, 1.0f)
|
|
||||||
.build();
|
.build();
|
||||||
mSession.setPlaybackState(playback);
|
mSession.setPlaybackState(playback.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,15 +148,14 @@ public class bfqkz extends MediaBrowserServiceCompat {
|
||||||
@Override
|
@Override
|
||||||
public void onPlayFromUri(Uri uri, Bundle extras) {
|
public void onPlayFromUri(Uri uri, Bundle extras) {
|
||||||
try {
|
try {
|
||||||
switch (playback.getState()) {
|
switch (playback.build().getState()) {
|
||||||
case PlaybackStateCompat.STATE_PLAYING:
|
case PlaybackStateCompat.STATE_PLAYING:
|
||||||
case PlaybackStateCompat.STATE_PAUSED:
|
case PlaybackStateCompat.STATE_PAUSED:
|
||||||
case PlaybackStateCompat.STATE_NONE:
|
case PlaybackStateCompat.STATE_NONE:
|
||||||
// mp3(uri);/
|
// mp3(uri);/
|
||||||
playback = new PlaybackStateCompat.Builder()
|
playback.setState(PlaybackStateCompat.STATE_CONNECTING, 0, 1.0f)
|
||||||
.setState(PlaybackStateCompat.STATE_CONNECTING, 0, 1.0f)
|
|
||||||
.build();
|
.build();
|
||||||
mSession.setPlaybackState(playback);
|
mSession.setPlaybackState(playback.build());
|
||||||
//我们可以保存当前播放音乐的信息,以便客户端刷新UI
|
//我们可以保存当前播放音乐的信息,以便客户端刷新UI
|
||||||
mSession.setMetadata(new MediaMetadataCompat.Builder()
|
mSession.setMetadata(new MediaMetadataCompat.Builder()
|
||||||
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, extras.getString("title"))
|
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, extras.getString("title"))
|
||||||
|
@ -187,14 +185,4 @@ public class bfqkz extends MediaBrowserServiceCompat {
|
||||||
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {
|
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {
|
||||||
|
|
||||||
}
|
}
|
||||||
public static void updateNotification() {
|
|
||||||
try {
|
|
||||||
// 更新通知栏的播放状态
|
|
||||||
if (bfqkz.notify != null && notify.notificationBuilder != null) {
|
|
||||||
notify.tzl();
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
gj.sc("bfqkz updateNotification:" + e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -53,7 +53,10 @@ public class Media {
|
||||||
bfq.kgsetImageResource(R.drawable.zt);
|
bfq.kgsetImageResource(R.drawable.zt);
|
||||||
}
|
}
|
||||||
bfq_db.setkg(bool);
|
bfq_db.setkg(bool);
|
||||||
bfqkz.updateNotification();
|
if (bfqkz.notify != null) {
|
||||||
|
bfqkz.notify.tzl_button();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Media(ActivityBfqBinding binding) {
|
public Media(ActivityBfqBinding binding) {
|
||||||
|
|
|
@ -12,10 +12,8 @@ import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.muqingbfq.MP3;
|
import com.muqingbfq.MP3;
|
||||||
import com.muqingbfq.MediaPlayer;
|
|
||||||
import com.muqingbfq.R;
|
import com.muqingbfq.R;
|
||||||
import com.muqingbfq.api.url;
|
import com.muqingbfq.api.url;
|
||||||
import com.muqingbfq.bfq;
|
import com.muqingbfq.bfq;
|
||||||
|
@ -24,9 +22,7 @@ import com.muqingbfq.bfqkz;
|
||||||
import com.muqingbfq.home;
|
import com.muqingbfq.home;
|
||||||
import com.muqingbfq.mq.gj;
|
import com.muqingbfq.mq.gj;
|
||||||
import com.muqingbfq.mq.wj;
|
import com.muqingbfq.mq.wj;
|
||||||
import com.muqingbfq.xm;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import com.muqingbfq.mq.gj;
|
||||||
import com.muqingbfq.mq.wj;
|
import com.muqingbfq.mq.wj;
|
||||||
import com.muqingbfq.mq.wl;
|
import com.muqingbfq.mq.wl;
|
||||||
import com.muqingbfq.view.CardImage;
|
import com.muqingbfq.view.CardImage;
|
||||||
import com.muqingbfq.xm;
|
import com.muqingbfq.XM;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
|
@ -42,7 +42,7 @@ import java.util.Objects;
|
||||||
|
|
||||||
public class gd extends com.muqingbfq.mq.FragmentActivity {
|
public class gd extends com.muqingbfq.mq.FragmentActivity {
|
||||||
public static String gdid;
|
public static String gdid;
|
||||||
private final List<xm> list = new ArrayList<>();
|
private final List<XM> list = new ArrayList<>();
|
||||||
public static RecyclerView.Adapter<VH> adapter;
|
public static RecyclerView.Adapter<VH> adapter;
|
||||||
|
|
||||||
int k;
|
int k;
|
||||||
|
@ -90,7 +90,7 @@ public class gd extends com.muqingbfq.mq.FragmentActivity {
|
||||||
String id = jsonObject.getString("id");
|
String id = jsonObject.getString("id");
|
||||||
String name = jsonObject.getString("name");
|
String name = jsonObject.getString("name");
|
||||||
String coverImgUrl = jsonObject.getString("coverImgUrl");
|
String coverImgUrl = jsonObject.getString("coverImgUrl");
|
||||||
list.add(new xm(id, name, coverImgUrl));
|
list.add(new XM(id, name, coverImgUrl));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
gj.sc(e);
|
gj.sc(e);
|
||||||
|
@ -102,15 +102,15 @@ public class gd extends com.muqingbfq.mq.FragmentActivity {
|
||||||
|
|
||||||
public static class baseadapter extends RecyclerView.Adapter<VH>{
|
public static class baseadapter extends RecyclerView.Adapter<VH>{
|
||||||
Context context;
|
Context context;
|
||||||
List<xm> list;
|
List<XM> list;
|
||||||
|
|
||||||
public baseadapter(Context context, List<xm> list) {
|
public baseadapter(Context context, List<XM> list) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.list = list;
|
this.list = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean bool = false;
|
boolean bool = false;
|
||||||
public baseadapter(Context context, List<xm> list,boolean bool) {
|
public baseadapter(Context context, List<XM> list, boolean bool) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.list = list;
|
this.list = list;
|
||||||
this.bool = bool;
|
this.bool = bool;
|
||||||
|
@ -127,13 +127,13 @@ public class gd extends com.muqingbfq.mq.FragmentActivity {
|
||||||
.inflate(R.layout.list_gd, parent, false));
|
.inflate(R.layout.list_gd, parent, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setList(List<xm> list) {
|
public void setList(List<XM> list) {
|
||||||
this.list = list;
|
this.list = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull VH holder, int position) {
|
public void onBindViewHolder(@NonNull VH holder, int position) {
|
||||||
xm xm = list.get(position);
|
XM xm = list.get(position);
|
||||||
CARD card = new CARD(xm);
|
CARD card = new CARD(xm);
|
||||||
if (bool) {
|
if (bool) {
|
||||||
holder.itemView.setOnClickListener(card);
|
holder.itemView.setOnClickListener(card);
|
||||||
|
@ -180,9 +180,9 @@ public class gd extends com.muqingbfq.mq.FragmentActivity {
|
||||||
|
|
||||||
class CARD implements View.OnClickListener
|
class CARD implements View.OnClickListener
|
||||||
, View.OnLongClickListener {
|
, View.OnLongClickListener {
|
||||||
xm xm;
|
XM xm;
|
||||||
|
|
||||||
public CARD(xm xm) {
|
public CARD(XM xm) {
|
||||||
this.xm = xm;
|
this.xm = xm;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
@ -212,7 +212,7 @@ public class gd extends com.muqingbfq.mq.FragmentActivity {
|
||||||
if (wj.cz(wj.gd_xz)) {
|
if (wj.cz(wj.gd_xz)) {
|
||||||
jsonObject = new JSONObject(Objects.requireNonNull(wj.dqwb(wj.gd_xz)));
|
jsonObject = new JSONObject(Objects.requireNonNull(wj.dqwb(wj.gd_xz)));
|
||||||
}
|
}
|
||||||
xm fh=resource.Playlist_content(xm.id);
|
XM fh=resource.Playlist_content(xm.id);
|
||||||
JSONObject json = new JSONObject();
|
JSONObject json = new JSONObject();
|
||||||
json.put("name", fh.name);
|
json.put("name", fh.name);
|
||||||
json.put("picUrl", fh.picurl);
|
json.put("picUrl", fh.picurl);
|
||||||
|
|
|
@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.muqingbfq.api.resource;
|
import com.muqingbfq.api.resource;
|
||||||
import com.muqingbfq.main;
|
import com.muqingbfq.main;
|
||||||
import com.muqingbfq.xm;
|
import com.muqingbfq.XM;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -26,7 +26,7 @@ public class gd_adapter extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
FrameLayout layout = new FrameLayout(getContext());
|
FrameLayout layout = new FrameLayout(getContext());
|
||||||
List<xm> list = new ArrayList<>();
|
List<XM> list = new ArrayList<>();
|
||||||
RecyclerView recyclerView = new RecyclerView(layout.getContext());
|
RecyclerView recyclerView = new RecyclerView(layout.getContext());
|
||||||
int k = (int) (main.k / getResources().getDisplayMetrics().density + 0.5f);
|
int k = (int) (main.k / getResources().getDisplayMetrics().density + 0.5f);
|
||||||
GridLayoutManager gridLayoutManager = new GridLayoutManager(layout.getContext(), k / 120);
|
GridLayoutManager gridLayoutManager = new GridLayoutManager(layout.getContext(), k / 120);
|
||||||
|
|
|
@ -24,7 +24,6 @@ import com.muqingbfq.databinding.FragmentMp3Binding;
|
||||||
import com.muqingbfq.list.MyViewHoder;
|
import com.muqingbfq.list.MyViewHoder;
|
||||||
import com.muqingbfq.main;
|
import com.muqingbfq.main;
|
||||||
import com.muqingbfq.mq.FragmentActivity;
|
import com.muqingbfq.mq.FragmentActivity;
|
||||||
import com.muqingbfq.xm;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -26,7 +26,7 @@ import com.muqingbfq.list.MyViewHoder;
|
||||||
import com.muqingbfq.main;
|
import com.muqingbfq.main;
|
||||||
import com.muqingbfq.mq.gj;
|
import com.muqingbfq.mq.gj;
|
||||||
import com.muqingbfq.mq.wl;
|
import com.muqingbfq.mq.wl;
|
||||||
import com.muqingbfq.xm;
|
import com.muqingbfq.XM;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
@ -37,7 +37,7 @@ import java.util.List;
|
||||||
public class search extends Fragment {
|
public class search extends Fragment {
|
||||||
public static RecyclerView.Adapter<MyViewHoder> lbspq;
|
public static RecyclerView.Adapter<MyViewHoder> lbspq;
|
||||||
List<MP3> list = new ArrayList<>();
|
List<MP3> list = new ArrayList<>();
|
||||||
List<xm> xmList = new ArrayList<>();
|
List<XM> xmList = new ArrayList<>();
|
||||||
public String name;
|
public String name;
|
||||||
|
|
||||||
public FragmentSearchBinding inflate;
|
public FragmentSearchBinding inflate;
|
||||||
|
@ -169,7 +169,7 @@ public class search extends Fragment {
|
||||||
String name = js.getString("name");
|
String name = js.getString("name");
|
||||||
String coverImgUrl = js.getString("coverImgUrl");
|
String coverImgUrl = js.getString("coverImgUrl");
|
||||||
// gj.sc(name);
|
// gj.sc(name);
|
||||||
xmList.add(new xm(id, name, coverImgUrl));
|
xmList.add(new XM(id, name, coverImgUrl));
|
||||||
return;
|
return;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
gj.sc(e);
|
gj.sc(e);
|
||||||
|
@ -185,7 +185,7 @@ public class search extends Fragment {
|
||||||
String name = jsonObject.getString("name");
|
String name = jsonObject.getString("name");
|
||||||
String coverImgUrl = jsonObject.getString("coverImgUrl");
|
String coverImgUrl = jsonObject.getString("coverImgUrl");
|
||||||
// gj.sc(name);
|
// gj.sc(name);
|
||||||
xmList.add(new xm(id, name, coverImgUrl));
|
xmList.add(new XM(id, name, coverImgUrl));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
gj.sc(e);
|
gj.sc(e);
|
||||||
|
|
|
@ -25,7 +25,7 @@ import com.muqingbfq.login.user_message;
|
||||||
import com.muqingbfq.main;
|
import com.muqingbfq.main;
|
||||||
import com.muqingbfq.mq.gj;
|
import com.muqingbfq.mq.gj;
|
||||||
import com.muqingbfq.mq.wj;
|
import com.muqingbfq.mq.wj;
|
||||||
import com.muqingbfq.xm;
|
import com.muqingbfq.XM;
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ public class wode extends Fragment {
|
||||||
{R.drawable.paihangbang, "排行榜", "排行榜"},
|
{R.drawable.paihangbang, "排行榜", "排行榜"},
|
||||||
{R.drawable.icon, "开发中", ""}
|
{R.drawable.icon, "开发中", ""}
|
||||||
};
|
};
|
||||||
private final List<com.muqingbfq.xm> list = new ArrayList<>();
|
private final List<XM> list = new ArrayList<>();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
|
@ -151,7 +151,7 @@ public class wode extends Fragment {
|
||||||
JSONObject jsonObject = date.getJSONObject(id);
|
JSONObject jsonObject = date.getJSONObject(id);
|
||||||
String name = jsonObject.getString("name");
|
String name = jsonObject.getString("name");
|
||||||
String picUrl = jsonObject.getString("picUrl");
|
String picUrl = jsonObject.getString("picUrl");
|
||||||
list.add(new xm(id, name, picUrl));
|
list.add(new XM(id, name, picUrl));
|
||||||
}
|
}
|
||||||
main.handler.post(() -> binding.recyclerview2.getAdapter().notifyDataSetChanged());
|
main.handler.post(() -> binding.recyclerview2.getAdapter().notifyDataSetChanged());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.media.session.MediaSessionManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
@ -25,7 +26,6 @@ import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import androidx.viewpager2.widget.ViewPager2;
|
||||||
|
|
||||||
import com.muqingbfq.databinding.ActivityHomeBinding;
|
import com.muqingbfq.databinding.ActivityHomeBinding;
|
||||||
import com.muqingbfq.databinding.FloatLrcviewBinding;
|
|
||||||
import com.muqingbfq.fragment.bfq_db;
|
import com.muqingbfq.fragment.bfq_db;
|
||||||
import com.muqingbfq.fragment.gd_adapter;
|
import com.muqingbfq.fragment.gd_adapter;
|
||||||
import com.muqingbfq.fragment.wode;
|
import com.muqingbfq.fragment.wode;
|
||||||
|
@ -69,9 +69,9 @@ public class home extends AppCompatActivity {
|
||||||
//初始化播放器组件
|
//初始化播放器组件
|
||||||
// 启动Service
|
// 启动Service
|
||||||
if (componentName == null) {
|
if (componentName == null) {
|
||||||
componentName = new ComponentName(this, bfqkz.class);
|
componentName = new ComponentName(getApplicationContext(), bfqkz.class);
|
||||||
mBrowser = new MediaBrowserCompat(
|
mBrowser = new MediaBrowserCompat(
|
||||||
this, componentName
|
getApplicationContext(), componentName
|
||||||
,//绑定服务端
|
,//绑定服务端
|
||||||
browserConnectionCallback,//设置连接回调
|
browserConnectionCallback,//设置连接回调
|
||||||
null
|
null
|
||||||
|
@ -269,6 +269,7 @@ public class home extends AppCompatActivity {
|
||||||
//当Service获取数据后会将数据发送回来,此时会触发SubscriptionCallback.onChildrenLoaded回调
|
//当Service获取数据后会将数据发送回来,此时会触发SubscriptionCallback.onChildrenLoaded回调
|
||||||
mBrowser.subscribe(mediaId, browserSubscriptionCallback);
|
mBrowser.subscribe(mediaId, browserSubscriptionCallback);
|
||||||
}
|
}
|
||||||
|
gj.sc("连接成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -284,6 +285,8 @@ public class home extends AppCompatActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onChildrenLoaded(@NonNull String parentId,
|
public void onChildrenLoaded(@NonNull String parentId,
|
||||||
@NonNull List<MediaBrowserCompat.MediaItem> children) {
|
@NonNull List<MediaBrowserCompat.MediaItem> children) {
|
||||||
|
|
||||||
|
gj.sc("onChildrenLoaded------");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -1,25 +1,4 @@
|
||||||
package com.muqingbfq.list;
|
package com.muqingbfq.list;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import com.muqingbfq.R;
|
|
||||||
import com.muqingbfq.api.url;
|
|
||||||
import com.muqingbfq.bfq;
|
|
||||||
import com.muqingbfq.bfqkz;
|
|
||||||
import com.muqingbfq.fragment.bflb_db;
|
|
||||||
import com.muqingbfq.fragment.mp3;
|
|
||||||
import com.muqingbfq.home;
|
|
||||||
import com.muqingbfq.xm;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class yylb {
|
public class yylb {
|
||||||
}
|
}
|
|
@ -65,7 +65,8 @@ public class FloatingLyricsService extends Service implements View.OnClickListen
|
||||||
public static class SETUP {
|
public static class SETUP {
|
||||||
//0是关闭 1是打开 2是锁定
|
//0是关闭 1是打开 2是锁定
|
||||||
public int i;
|
public int i;
|
||||||
public float TOP;
|
public float TOP, Alpha;
|
||||||
|
public String Color;
|
||||||
public int Y;
|
public int Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,6 +95,8 @@ public class FloatingLyricsService extends Service implements View.OnClickListen
|
||||||
setup.i = 1;
|
setup.i = 1;
|
||||||
setup.TOP = 0;
|
setup.TOP = 0;
|
||||||
setup.Y = -main.g;
|
setup.Y = -main.g;
|
||||||
|
setup.Alpha = 0.9f;
|
||||||
|
setup.Color = "#0088FF";
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
wj.sc(file.toString());
|
wj.sc(file.toString());
|
||||||
|
@ -118,6 +121,7 @@ public class FloatingLyricsService extends Service implements View.OnClickListen
|
||||||
params.y = setup.Y;
|
params.y = setup.Y;
|
||||||
|
|
||||||
lrcView = binding.lrcView;
|
lrcView = binding.lrcView;
|
||||||
|
lrcView.setTextColor(setup.Color);
|
||||||
bfq_an.kz bfqAn = new bfq_an.kz();
|
bfq_an.kz bfqAn = new bfq_an.kz();
|
||||||
binding.kg.setOnClickListener(this);
|
binding.kg.setOnClickListener(this);
|
||||||
binding.syq.setOnClickListener(bfqAn);
|
binding.syq.setOnClickListener(bfqAn);
|
||||||
|
|
|
@ -5,15 +5,14 @@ import android.annotation.SuppressLint;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.support.v4.media.MediaMetadataCompat;
|
||||||
|
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.media.MediaBrowserServiceCompat;
|
|
||||||
|
|
||||||
import com.muqingbfq.MyButtonClickReceiver;
|
import com.muqingbfq.MyButtonClickReceiver;
|
||||||
import com.muqingbfq.R;
|
import com.muqingbfq.R;
|
||||||
|
@ -58,13 +57,12 @@ public class NotificationManagerCompat {
|
||||||
setAction("lrc"));
|
setAction("lrc"));
|
||||||
style = new androidx.media.app.NotificationCompat.MediaStyle()
|
style = new androidx.media.app.NotificationCompat.MediaStyle()
|
||||||
.setShowActionsInCompactView(1, 2, 3)
|
.setShowActionsInCompactView(1, 2, 3)
|
||||||
.setMediaSession(bfqkz.mSession.getSessionToken());
|
.setMediaSession(context.mSession.getSessionToken());
|
||||||
notificationManager = androidx.core.app.NotificationManagerCompat.from(context);
|
notificationManager = androidx.core.app.NotificationManagerCompat.from(context);
|
||||||
notificationBuilder = getNotificationBuilder(context)
|
notificationBuilder = getNotificationBuilder(context)
|
||||||
.setSmallIcon(R.drawable.icon)
|
.setSmallIcon(R.drawable.icon)
|
||||||
.setContentTitle(name).setContentText(zz)
|
|
||||||
.setPriority(NotificationCompat.PRIORITY_LOW)
|
.setPriority(NotificationCompat.PRIORITY_LOW)
|
||||||
.setOngoing(true).setAutoCancel(false).setOnlyAlertOnce(true)
|
.setOngoing(true).setColorized(true).setShowWhen(false)
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
.setContentIntent(context.pendingIntent)
|
.setContentIntent(context.pendingIntent)
|
||||||
.setStyle(style);
|
.setStyle(style);
|
||||||
|
@ -73,15 +71,38 @@ public class NotificationManagerCompat {
|
||||||
yc.start(context, e);
|
yc.start(context, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
androidx.media.app.NotificationCompat.MediaStyle style;
|
androidx.media.app.NotificationCompat.MediaStyle style;
|
||||||
|
|
||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
public void tzl() {
|
public void tzl_button() {
|
||||||
if (bfqkz.xm != null) {
|
if (notificationBuilder == null) {
|
||||||
name = bfqkz.xm.name;
|
return;
|
||||||
zz = bfqkz.xm.zz;
|
|
||||||
}
|
}
|
||||||
notificationBuilder.mActions.clear();
|
notificationBuilder.mActions.clear();
|
||||||
notificationBuilder
|
notificationBuilder
|
||||||
|
.addAction(R.drawable.like, "like", pendingIntent_kg) // #0
|
||||||
|
.addAction(R.drawable.syq, "syq", pendingIntent_syq) // #0
|
||||||
|
.addAction(bfqkz.mt.isPlaying() ? R.drawable.bf : R.drawable.zt
|
||||||
|
, "kg", pendingIntent_kg) // #1
|
||||||
|
.addAction(R.drawable.xyq, "xyq", pendingIntent_xyq)
|
||||||
|
.addAction(R.drawable.lock, "lrc", pendingIntent_lrc)
|
||||||
|
.setOngoing(bfqkz.mt.isPlaying());
|
||||||
|
notificationManager_notify();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
public void tzl() {
|
||||||
|
if (notificationBuilder == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (bfqkz.xm != null) {
|
||||||
|
name = bfqkz.xm.name;
|
||||||
|
zz = bfqkz.xm.zz;
|
||||||
|
}
|
||||||
|
notificationBuilder.mActions.clear();
|
||||||
|
notificationBuilder
|
||||||
|
.setLargeIcon(bfq.bitmap)
|
||||||
.addAction(R.drawable.like, "like", pendingIntent_kg) // #0
|
.addAction(R.drawable.like, "like", pendingIntent_kg) // #0
|
||||||
.addAction(R.drawable.syq, "syq", pendingIntent_syq) // #0
|
.addAction(R.drawable.syq, "syq", pendingIntent_syq) // #0
|
||||||
.addAction(bfqkz.mt.isPlaying() ? R.drawable.bf : R.drawable.zt
|
.addAction(bfqkz.mt.isPlaying() ? R.drawable.bf : R.drawable.zt
|
||||||
|
@ -91,6 +112,14 @@ public class NotificationManagerCompat {
|
||||||
.setContentTitle(name)
|
.setContentTitle(name)
|
||||||
.setContentText(zz)
|
.setContentText(zz)
|
||||||
.setOngoing(bfqkz.mt.isPlaying());
|
.setOngoing(bfqkz.mt.isPlaying());
|
||||||
|
|
||||||
|
context.builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, name)
|
||||||
|
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, zz)
|
||||||
|
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, zz)
|
||||||
|
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bfq.bitmap)
|
||||||
|
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 100);
|
||||||
|
|
||||||
|
context.mSession.setMetadata(context.builder.build());
|
||||||
notificationManager_notify();
|
notificationManager_notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,31 +127,13 @@ public class NotificationManagerCompat {
|
||||||
pendingIntent_syq,
|
pendingIntent_syq,
|
||||||
pendingIntent_xyq,
|
pendingIntent_xyq,
|
||||||
pendingIntent_lrc;
|
pendingIntent_lrc;
|
||||||
private final String CHANNEL_ID = "muqing_yy_id";
|
private final String CHANNEL_ID = "MediaSessionCompat";
|
||||||
|
|
||||||
public void notificationManager_notify() {
|
public void notificationManager_notify() {
|
||||||
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
notificationManager.notify(1, notificationBuilder.build());
|
notificationManager.notify(0, notificationBuilder.build());
|
||||||
}
|
|
||||||
|
|
||||||
public void setBitmap() {
|
|
||||||
Media.setImageBitmap();
|
|
||||||
if (notificationManager != null) {
|
|
||||||
if (ActivityCompat.checkSelfPermission(home.appCompatActivity, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
// TODO: Consider calling
|
|
||||||
// ActivityCompat#requestPermissions
|
|
||||||
// here to request the missing permissions, and then overriding
|
|
||||||
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
|
||||||
// int[] grantResults)
|
|
||||||
// to handle the case where the user grants the permission. See the documentation
|
|
||||||
// for ActivityCompat#requestPermissions for more details.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
notificationBuilder.setLargeIcon(bfq.bitmap);
|
|
||||||
notificationManager.notify(1, notificationBuilder.build());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private NotificationCompat.Builder getNotificationBuilder(Context context) {
|
private NotificationCompat.Builder getNotificationBuilder(Context context) {
|
||||||
|
@ -142,7 +153,6 @@ public class NotificationManagerCompat {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static PendingIntent getActivity(Context context, Intent intent) {
|
public static PendingIntent getActivity(Context context, Intent intent) {
|
||||||
int flag;
|
int flag;
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
|
|
@ -2,7 +2,7 @@ package com.muqingbfq.mq;
|
||||||
|
|
||||||
|
|
||||||
import com.muqingbfq.main;
|
import com.muqingbfq.main;
|
||||||
import com.muqingbfq.xm;
|
import com.muqingbfq.XM;
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
@ -87,9 +87,9 @@ public class wl {
|
||||||
|
|
||||||
public static class xz extends Thread {
|
public static class xz extends Thread {
|
||||||
String url;
|
String url;
|
||||||
xm x;
|
XM x;
|
||||||
|
|
||||||
public xz(String url, xm x) {
|
public xz(String url, XM x) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
start();
|
start();
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.muqingbfq.view;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
@ -74,6 +75,15 @@ public class LrcView extends RecyclerView {
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTextColor(int textColor) {
|
||||||
|
TextColor = textColor;
|
||||||
|
}
|
||||||
|
public void setTextColor(String textColor) {
|
||||||
|
TextColor = Color.parseColor(textColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
if (attrs != null) {
|
if (attrs != null) {
|
||||||
TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.LrcView);
|
TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.LrcView);
|
||||||
|
|
|
@ -59,8 +59,7 @@
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/list_recycler"
|
android:id="@+id/list_recycler"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"/>
|
||||||
android:orientation="horizontal"/>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/search_fragment"
|
android:id="@+id/search_fragment"
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:TextColor="@color/purple_200"
|
|
||||||
tools:layout_editor_absoluteX="16dp" />
|
tools:layout_editor_absoluteX="16dp" />
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:layout_marginTop="16dp"
|
android:paddingTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
android:lines="2"
|
android:lines="2"
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:text="@string/name"
|
android:text="@string/name"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user