diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 155b661..fdd0ead 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,7 +3,11 @@
xmlns:tools="http://schemas.android.com/tools">
-
+
+
+
() {
+ MyRoom.getInstance().getDataDao().queryAudioIsLove(resource.getId()).observe(this, new Observer() {
@Override
- public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
- return false;
+ public void onChanged(MyData myData) {
+ Log.d("----", "---myData.isAddLove()=" + myData.isAddLove());
+ imAddLove.setSelected(myData.isAddLove());
}
+ });
+ if(!resource.isSyStem()){
+ imageView.setImageResource(R.mipmap.default_covert);
+ }else {
+ Glide.with(this).load(resource.getPreUrl()).addListener(new RequestListener() {
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target target, boolean isFirstResource) {
+ return false;
+ }
+
+ @Override
+ public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
+ }).into(imageView);
+ }
- @Override
- public boolean onResourceReady(@NonNull Drawable resource, @NonNull Object model, Target target, @NonNull DataSource dataSource, boolean isFirstResource) {
- return false;
- }
- }).into(imageView);
}
private void initMediaPlayer() {
mediaPlayer = new MediaPlayer();
+ mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.reset();
- mediaPlayer.setDataSource(resource.getMp3Url());
+ String mp3Url = resource.getMp3Url();
+ //content://com.android.providers.media.documents/document/audio%3A1000000468
+ if(resource.isSyStem()){
+ mediaPlayer.setDataSource(mp3Url);
+ }else {
+ Uri parse = Uri.parse(mp3Url);
+ Log.d(Sounds.TAG,"--------Uri--="+parse);
+ mediaPlayer.setDataSource(this,parse);
+
+ }
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
-// setLoading(false);
+ setLoading(false);
}
});
@@ -144,8 +169,17 @@ public class DetailActivity extends AppCompatActivity {
}
});
} catch (IOException ioException) {
-// setLoading(false);
- Toast.makeText(this, "Prepare Fail", Toast.LENGTH_SHORT).show();
+ setLoading(false);
+ Log.d(Sounds.TAG,"-----------ioException="+ioException.getCause());
+ Toast.makeText(this, getString(R.string.load_fail), Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void setLoading(boolean isLoading){
+ if(isLoading){
+ pbLoading.setVisibility(View.VISIBLE);
+ }else {
+ pbLoading.setVisibility(View.GONE);
}
}
diff --git a/app/src/main/java/com/example/funnysounds/activity/MainActivity.java b/app/src/main/java/com/example/funnysounds/activity/MainActivity.java
index 18eada4..ec81367 100644
--- a/app/src/main/java/com/example/funnysounds/activity/MainActivity.java
+++ b/app/src/main/java/com/example/funnysounds/activity/MainActivity.java
@@ -23,6 +23,7 @@ import com.example.funnysounds.R;
import com.example.funnysounds.databinding.ActivityMainBinding;
import com.example.funnysounds.fragement.CategoryFragment;
import com.example.funnysounds.fragement.LoveFragment;
+import com.example.funnysounds.fragement.RecordFragment;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
@@ -110,7 +111,7 @@ public class MainActivity extends AppCompatActivity {
List fragmentList = new ArrayList<>();
fragmentList.add(CategoryFragment.newInstance());
- fragmentList.add(LoveFragment.newInstance());
+ fragmentList.add(RecordFragment.newInstance());
fragmentList.add(LoveFragment.newInstance());
vb.viewPager.setAdapter(new FragmentStateAdapter(MainActivity.this) {
diff --git a/app/src/main/java/com/example/funnysounds/activity/SpecifisoundsActivity.java b/app/src/main/java/com/example/funnysounds/activity/SpecifisoundsActivity.java
index 9e3dcf6..85a2d23 100644
--- a/app/src/main/java/com/example/funnysounds/activity/SpecifisoundsActivity.java
+++ b/app/src/main/java/com/example/funnysounds/activity/SpecifisoundsActivity.java
@@ -82,7 +82,7 @@ public class SpecifisoundsActivity extends AppCompatActivity implements MyDataSo
DataAdapter dataAdapter = new DataAdapter( this);
dataAdapter.setMyDataSounderListener(this);
recyclerview_specific.setAdapter(dataAdapter);
- MyRoom.getInstance().getDataDao().queryList(name.getCateId()).observe(this, new Observer>() {
+ MyRoom.getInstance().getDataDao().queryList(name.getCateId(),true).observe(this, new Observer>() {
@Override
public void onChanged(List myData) {
Log.d(Sounds.TAG,"------------myData"+myData.size());
diff --git a/app/src/main/java/com/example/funnysounds/data/MyData.java b/app/src/main/java/com/example/funnysounds/data/MyData.java
index 4ce848a..b2fcf32 100644
--- a/app/src/main/java/com/example/funnysounds/data/MyData.java
+++ b/app/src/main/java/com/example/funnysounds/data/MyData.java
@@ -12,13 +12,13 @@ import com.example.funnysounds.resolve.Sounds;
import java.io.Serializable;
@Entity(tableName = Sounds.TABLE_2, foreignKeys = @ForeignKey(entity = CategoryList.class, parentColumns = "cateId", childColumns = "categoryId", onDelete = ForeignKey.CASCADE),
- indices = @Index(value = {"id"}, unique = true))
+ indices = {@Index(value = {"id"}, unique = true),@Index(value = {"mp3Url"}, unique = true)} )
public class MyData implements Serializable {
@PrimaryKey(autoGenerate = true)
private long id;
private long categoryId;
-
+ private boolean isSyStem;
private String title;
private String mp3Url;
private String preUrl;
@@ -45,6 +45,14 @@ public class MyData implements Serializable {
this.preUrl = preUrl;
}
+ public boolean isSyStem() {
+ return isSyStem;
+ }
+
+ public void setSyStem(boolean syStem) {
+ isSyStem = syStem;
+ }
+
public long getId() {
return id;
}
diff --git a/app/src/main/java/com/example/funnysounds/dialog/RecordDialog.java b/app/src/main/java/com/example/funnysounds/dialog/RecordDialog.java
new file mode 100644
index 0000000..f33d73d
--- /dev/null
+++ b/app/src/main/java/com/example/funnysounds/dialog/RecordDialog.java
@@ -0,0 +1,94 @@
+package com.example.funnysounds.dialog;
+
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
+
+import com.example.funnysounds.R;
+import com.example.funnysounds.action.RecordDialogClickListener;
+import com.example.funnysounds.databinding.DialogRecordBinding;
+
+
+public class RecordDialog extends DialogFragment {
+
+
+ private DialogRecordBinding vb;
+ private RecordDialogClickListener mListener;
+
+
+ public RecordDialog(RecordDialogClickListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ }
+
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ vb = DialogRecordBinding.inflate(inflater, container, false);
+ init();
+ return vb.getRoot();
+ }
+
+
+ private void init() {
+
+ Dialog dialog = getDialog();
+ setCancelable(true);
+ if (dialog != null) {
+ Window window = dialog.getWindow();
+ if (window != null) {
+ window.setBackgroundDrawableResource(R.color.transparent);
+ window.getDecorView().setPadding(0, 0, 0, 0);
+
+ WindowManager.LayoutParams attributes = window.getAttributes();
+ attributes.gravity = Gravity.BOTTOM;
+ attributes.width = WindowManager.LayoutParams.MATCH_PARENT;
+ attributes.height = WindowManager.LayoutParams.WRAP_CONTENT;
+ window.setAttributes(attributes);
+ }
+ }
+
+ vb.btnRecord.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mListener.onRecord();
+ dismiss();
+ }
+ });
+ vb.btnImport.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mListener.onImport();
+ dismiss();
+ }
+ });
+
+ }
+
+ public void closeDialog() {
+ dismiss();
+ }
+
+
+ public static RecordDialog newInstance(RecordDialogClickListener listener) {
+
+ RecordDialog okDialogFragment = new RecordDialog(listener);
+ return okDialogFragment;
+ }
+}
diff --git a/app/src/main/java/com/example/funnysounds/fragement/RecordFragment.java b/app/src/main/java/com/example/funnysounds/fragement/RecordFragment.java
index a44a7ed..3105ad8 100644
--- a/app/src/main/java/com/example/funnysounds/fragement/RecordFragment.java
+++ b/app/src/main/java/com/example/funnysounds/fragement/RecordFragment.java
@@ -1,69 +1,197 @@
package com.example.funnysounds.fragement;
+import android.Manifest;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.example.funnysounds.action.IOListener;
+import com.example.funnysounds.action.RecordDialogClickListener;
import com.example.funnysounds.data.MyData;
-import com.example.funnysounds.databinding.FragmentLoveBinding;
import com.example.funnysounds.databinding.FragmentRecordBinding;
+import com.example.funnysounds.dialog.RecordDialog;
import com.example.funnysounds.resolve.MySpace;
+import com.example.funnysounds.resolve.Readfile;
+import com.example.funnysounds.resolve.Sounds;
import com.example.funnysounds.room.MyRoom;
import com.example.funnysounds.soundsadapter.LoveAdapter;
+import com.example.funnysounds.soundsadapter.RecordAdapter;
import java.util.List;
+import java.util.Map;
public class RecordFragment extends Fragment {
private RankViewModel mViewModel;
private FragmentRecordBinding vb;
+ private RecordDialog dialog;
+ private String[] permission1 = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
+ private String[] permission2 = {Manifest.permission.READ_MEDIA_AUDIO};
+ private ActivityResultLauncher audioSelectLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
+ @Override
+ public void onActivityResult(ActivityResult o) {
+ if (o.getResultCode() == Activity.RESULT_OK) {
+ Intent intent = o.getData();
+ if (intent != null) {
+ Uri audioUri = intent.getData();
+ String name = Readfile.getAudioPathFromUri(audioUri);
+ String decode = Uri.decode(String.valueOf(audioUri));
+
+ MyData myData = new MyData();
+ myData.setCategoryId(1);
+ myData.setSyStem(false);
+ myData.setTitle(name);
+ myData.setMp3Url(String.valueOf(audioUri));
+
+ Readfile.onSwitchIO(new IOListener() {
+ @Override
+ public void onRunIOAction() {
+ MyRoom.getInstance().getDataDao().insertPrank(myData);
+ }
+ });
+ // 处理选中的音频URI
+ Log.d(Sounds.TAG, "--------audioUri=" + audioUri+"---audioPathFromUri="+name +"--------decode-----"+decode);
+ }
+
+ }
+ }
+ });
+
+ private ActivityResultLauncher permissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback