From af051d6f524345217c3791a94f0b93bb4e7e8ffb Mon Sep 17 00:00:00 2001 From: litingting Date: Wed, 4 Sep 2024 15:32:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=BC=E5=85=A5=E9=9F=B3?= =?UTF-8?q?=E9=A2=91=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 +- .../action/RecordDialogClickListener.java | 6 + .../funnysounds/activity/DetailActivity.java | 64 ++++++-- .../funnysounds/activity/MainActivity.java | 3 +- .../activity/SpecifisoundsActivity.java | 2 +- .../com/example/funnysounds/data/MyData.java | 12 +- .../funnysounds/dialog/RecordDialog.java | 94 +++++++++++ .../funnysounds/fragement/RecordFragment.java | 148 ++++++++++++++++-- .../example/funnysounds/resolve/Readfile.java | 28 ++++ .../com/example/funnysounds/room/DataDao.java | 12 +- .../soundsadapter/LoveAdapter.java | 15 +- .../soundsadapter/RecordAdapter.java | 103 ++++++++++++ .../res/drawable/add_record_bg_button.xml | 8 + app/src/main/res/drawable/bg_button.xml | 8 + app/src/main/res/drawable/dialog_bg.xml | 7 + app/src/main/res/drawable/im_add_record.xml | 12 ++ app/src/main/res/drawable/im_export.xml | 27 ++++ app/src/main/res/drawable/im_love_red.xml | 4 +- app/src/main/res/drawable/im_record1.xml | 36 +++++ app/src/main/res/layout/activity_detail.xml | 7 + app/src/main/res/layout/activity_main.xml | 3 +- app/src/main/res/layout/dialog_record.xml | 78 +++++++++ app/src/main/res/layout/fragment_record.xml | 46 +++++- app/src/main/res/layout/item_love.xml | 4 +- app/src/main/res/layout/item_record.xml | 34 ++++ .../res/mipmap-xxxhdpi/default_covert.png | Bin 0 -> 10898 bytes app/src/main/res/values/colors.xml | 5 + app/src/main/res/values/strings.xml | 6 + 28 files changed, 726 insertions(+), 52 deletions(-) create mode 100644 app/src/main/java/com/example/funnysounds/action/RecordDialogClickListener.java create mode 100644 app/src/main/java/com/example/funnysounds/dialog/RecordDialog.java create mode 100644 app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java create mode 100644 app/src/main/res/drawable/add_record_bg_button.xml create mode 100644 app/src/main/res/drawable/bg_button.xml create mode 100644 app/src/main/res/drawable/dialog_bg.xml create mode 100644 app/src/main/res/drawable/im_add_record.xml create mode 100644 app/src/main/res/drawable/im_export.xml create mode 100644 app/src/main/res/drawable/im_record1.xml create mode 100644 app/src/main/res/layout/dialog_record.xml create mode 100644 app/src/main/res/layout/item_record.xml create mode 100644 app/src/main/res/mipmap-xxxhdpi/default_covert.png 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>() { + @Override + public void onActivityResult(Map o) { + boolean isOK = true; + for (String key : o.keySet()) { + Boolean aBoolean = o.get(key); + Log.d(Sounds.TAG, "-----key="+key+"---aBoolean=" + aBoolean); + if (aBoolean != null) + isOK = aBoolean; + } + if(isOK){ + selectAudio(); + } + + } + }); + public static RecordFragment newInstance() { return new RecordFragment(); } + @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { vb = FragmentRecordBinding.inflate(inflater, container, false); + Log.d(Sounds.TAG, "-------onCreateView"); return vb.getRoot(); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + Log.d(Sounds.TAG, "-------onActivityCreated"); mViewModel = new ViewModelProvider(this).get(RankViewModel.class); init(); + + vb.addBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (dialog == null) { + dialog = RecordDialog.newInstance(new RecordDialogClickListener() { + @Override + public void onImport() { + checkPermissionAudio(); + } + + @Override + public void onRecord() { + + } + }); + } + dialog.show(requireActivity().getSupportFragmentManager(), ""); + } + }); + } + private void checkPermissionAudio() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + int i = ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_MEDIA_AUDIO); + if (i != PackageManager.PERMISSION_GRANTED) { + permissionLauncher.launch(permission2); + } else { + selectAudio(); + } + } else { + int i = ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE); + if (i != PackageManager.PERMISSION_GRANTED) { + permissionLauncher.launch(permission1); + } else { + selectAudio(); + } + } + + + } + + private void selectAudio() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("audio/*"); + audioSelectLauncher.launch(Intent.createChooser(intent, "Select Audio")); } private void init() { MySpace mySpace = new MySpace(20, 20, 25); LinearLayoutManager layoutManager = new LinearLayoutManager(requireActivity()); - vb.loveRecycler.setLayoutManager(layoutManager); - vb.loveRecycler.addItemDecoration(mySpace); - LoveAdapter loveAdapter = new LoveAdapter(requireActivity()); + vb.recordRecycler.setLayoutManager(layoutManager); + vb.recordRecycler.addItemDecoration(mySpace); + RecordAdapter recordAdapter = new RecordAdapter(requireActivity()); - vb.loveRecycler.setAdapter(loveAdapter); - MyRoom.getInstance().getDataDao().queryLoveList(true).observe(requireActivity(), new Observer>() { + vb.recordRecycler.setAdapter(recordAdapter); + MyRoom.getInstance().getDataDao().queryMyAudioList(false).observe(requireActivity(), new Observer>() { @Override public void onChanged(List list) { if (list.size() > 0) { - vb.tvNoFavorites.setVisibility(View.GONE); - }else { - vb.tvNoFavorites.setVisibility(View.VISIBLE); + setVisibility(true); + } else { + setVisibility(false); } - loveAdapter.setMyDataList(list); + recordAdapter.setMyDataList(list); } }); } + + private void setVisibility(boolean hasData) { + if (hasData) { + vb.recordRecycler.setVisibility(View.VISIBLE); + vb.textNoFile.setVisibility(View.GONE); + } else { + vb.recordRecycler.setVisibility(View.GONE); + vb.textNoFile.setVisibility(View.VISIBLE); + } + + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/funnysounds/resolve/Readfile.java b/app/src/main/java/com/example/funnysounds/resolve/Readfile.java index 6ff8920..ebb5081 100644 --- a/app/src/main/java/com/example/funnysounds/resolve/Readfile.java +++ b/app/src/main/java/com/example/funnysounds/resolve/Readfile.java @@ -1,5 +1,8 @@ package com.example.funnysounds.resolve; +import android.database.Cursor; +import android.net.Uri; +import android.provider.MediaStore; import android.util.DisplayMetrics; import android.util.Log; @@ -21,6 +24,7 @@ import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class Readfile { public static String getCovertStr(InputStream stream) { @@ -75,6 +79,7 @@ public class Readfile { prank.setMp3Url(mp3Url); prank.setTitle(title); prank.setPreUrl(preUrl); + prank.setSyStem(true); prank.setCategoryId(id); MyRoom.getInstance().getDataDao().insertPrank(prank); Log.d(Sounds.TAG,"title" + title + "---id=" + id); @@ -100,4 +105,27 @@ public class Readfile { thread.start(); return thread; } + + + public static String getAudioPathFromUri(Uri uri) { + String name = null; + Cursor cursor = Sounds.mAppContext.getContentResolver().query(uri, null, MediaStore.Audio.Media.DATA, null, null); + if (cursor != null) { + while (cursor.moveToNext()) { + for (String columnName : cursor.getColumnNames()) { + int columnIndex = cursor.getColumnIndex(columnName); + if(columnIndex>=0){ + String string = cursor.getString(columnIndex); + if(Objects.equals(columnName, "_display_name")){ + name = string; + } + Log.d(Sounds.TAG,"-----columnName="+columnName+"----string="+string); + } + + } + } + cursor.close(); + } + return name; + } } diff --git a/app/src/main/java/com/example/funnysounds/room/DataDao.java b/app/src/main/java/com/example/funnysounds/room/DataDao.java index 603ad04..f06c518 100644 --- a/app/src/main/java/com/example/funnysounds/room/DataDao.java +++ b/app/src/main/java/com/example/funnysounds/room/DataDao.java @@ -17,17 +17,21 @@ public interface DataDao { @Insert(onConflict = OnConflictStrategy.IGNORE) void insertPrank(MyData data); - @Query("select * from table_data") - List queryAll(); - @Query("select * from table_data where categoryId ==:mId") - LiveData> queryList(long mId); + + @Query("select * from table_data where categoryId ==:mId And isSyStem = :isSystem") + LiveData> queryList(long mId,boolean isSystem); @Query("select * from table_data where addLove ==:love") LiveData> queryLoveList(boolean love); + @Query("select * from table_data where isSyStem ==:isSystem") + LiveData> queryMyAudioList(boolean isSystem); + + @Query("select * from table_data where id=:mid Limit 1") + LiveData queryAudioIsLove(long mid); @Update void updatePrank(MyData myData); } diff --git a/app/src/main/java/com/example/funnysounds/soundsadapter/LoveAdapter.java b/app/src/main/java/com/example/funnysounds/soundsadapter/LoveAdapter.java index a4830be..b3424e1 100644 --- a/app/src/main/java/com/example/funnysounds/soundsadapter/LoveAdapter.java +++ b/app/src/main/java/com/example/funnysounds/soundsadapter/LoveAdapter.java @@ -59,12 +59,17 @@ public class LoveAdapter extends RecyclerView.Adapter { MyData myData = myDataList.get(position); holder.getVb().name.setText(myData.getTitle()); + String preUrl = myData.getPreUrl(); + if(preUrl!= null&&!preUrl.isEmpty()){ + Glide.with(myContext) + .asDrawable() + .load(myData.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(holder.getVb().imSounds); + }else { + holder.getVb().imSounds.setImageResource(R.mipmap.default_covert); + } - Glide.with(myContext) - .asDrawable() - .load(myData.getPreUrl()) - .placeholder(R.mipmap.logo) - .into(holder.getVb().imSounds); holder.getVb().getRoot().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java b/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java new file mode 100644 index 0000000..71aac4c --- /dev/null +++ b/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java @@ -0,0 +1,103 @@ +package com.example.funnysounds.soundsadapter; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.example.funnysounds.R; +import com.example.funnysounds.action.IOListener; +import com.example.funnysounds.action.MyDataSounderListener; +import com.example.funnysounds.activity.DetailActivity; +import com.example.funnysounds.data.MyData; +import com.example.funnysounds.databinding.ItemLoveBinding; +import com.example.funnysounds.databinding.ItemRecordBinding; +import com.example.funnysounds.resolve.Readfile; +import com.example.funnysounds.resolve.Sounds; +import com.example.funnysounds.room.MyRoom; +import com.example.funnysounds.value.StaticValue; + +import java.util.ArrayList; +import java.util.List; + +public class RecordAdapter extends RecyclerView.Adapter { + private List myDataList = new ArrayList<>(); + private Context myContext; + private MyDataSounderListener myDataSounderListener; + + public RecordAdapter(Context mycontext) { + myContext = mycontext; + } + + public void setMyDataList(List myDataList) { + this.myDataList = myDataList; + notifyDataSetChanged(); + } + + public void setMyDataSounderListener(MyDataSounderListener dataSounderListener) { + this.myDataSounderListener = dataSounderListener; + } + + + @NonNull + @Override + public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + + ItemRecordBinding inflate = ItemRecordBinding.inflate(LayoutInflater.from(myContext), parent, false); + + return new VH(inflate); + } + + @Override + public void onBindViewHolder(@NonNull VH holder, int position) { + MyData myData = myDataList.get(position); + holder.getVb().name.setText(myData.getTitle()); + + String preUrl = myData.getPreUrl(); + if(preUrl!= null&&!preUrl.isEmpty()){ + Glide.with(myContext) + .asDrawable() + .load(myData.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(holder.getVb().imSounds); + }else { + holder.getVb().imSounds.setImageResource(R.mipmap.default_covert); + } + + holder.getVb().getRoot().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(myContext, DetailActivity.class); + intent.putExtra(StaticValue.key_resourse, myData); + myContext.startActivity(intent); + } + }); + + } + + @Override + public int getItemCount() { + return myDataList.size(); + } + + + public static class VH extends RecyclerView.ViewHolder { + + private ItemRecordBinding vb; + + public VH(@NonNull ItemRecordBinding itemView) { + super(itemView.getRoot()); + vb = itemView; + } + + public ItemRecordBinding getVb() { + return vb; + } + } +} diff --git a/app/src/main/res/drawable/add_record_bg_button.xml b/app/src/main/res/drawable/add_record_bg_button.xml new file mode 100644 index 0000000..790805f --- /dev/null +++ b/app/src/main/res/drawable/add_record_bg_button.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_button.xml b/app/src/main/res/drawable/bg_button.xml new file mode 100644 index 0000000..f294265 --- /dev/null +++ b/app/src/main/res/drawable/bg_button.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_bg.xml b/app/src/main/res/drawable/dialog_bg.xml new file mode 100644 index 0000000..983a075 --- /dev/null +++ b/app/src/main/res/drawable/dialog_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/im_add_record.xml b/app/src/main/res/drawable/im_add_record.xml new file mode 100644 index 0000000..32cf096 --- /dev/null +++ b/app/src/main/res/drawable/im_add_record.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/im_export.xml b/app/src/main/res/drawable/im_export.xml new file mode 100644 index 0000000..049b457 --- /dev/null +++ b/app/src/main/res/drawable/im_export.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/im_love_red.xml b/app/src/main/res/drawable/im_love_red.xml index da162d0..b8ae067 100644 --- a/app/src/main/res/drawable/im_love_red.xml +++ b/app/src/main/res/drawable/im_love_red.xml @@ -1,6 +1,6 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml index 0599d72..a7c7f7e 100644 --- a/app/src/main/res/layout/activity_detail.xml +++ b/app/src/main/res/layout/activity_detail.xml @@ -130,4 +130,11 @@ android:layout_alignParentEnd="true" android:src="@drawable/im_volumehigh" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6cf91d1..d8568c6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,8 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - tools:context=".activity.MainActivity" - tools:openDrawer="right"> + tools:context=".activity.MainActivity"> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_record.xml b/app/src/main/res/layout/fragment_record.xml index 0a1845c..a107a24 100644 --- a/app/src/main/res/layout/fragment_record.xml +++ b/app/src/main/res/layout/fragment_record.xml @@ -1,21 +1,55 @@ - + + android:layout_centerInParent="true" + android:layout_centerHorizontal="true" + android:layout_marginStart="36dp" + android:layout_marginTop="20dp" + android:layout_marginEnd="36dp" + android:gravity="center" + android:lineSpacingExtra="4dp" + android:text="@string/no_file" + android:textColor="@color/text_color_gray" + android:textSize="17sp" /> - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_love.xml b/app/src/main/res/layout/item_love.xml index 7fb1bf4..d8baaa8 100644 --- a/app/src/main/res/layout/item_love.xml +++ b/app/src/main/res/layout/item_love.xml @@ -13,9 +13,7 @@ android:layout_marginStart="12dp" android:layout_marginTop="12dp" android:layout_marginBottom="12dp" - android:background="@drawable/bg_love" - android:padding="8dp" - android:src="@mipmap/ic_launcher" /> + android:src="@mipmap/default_covert" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/default_covert.png b/app/src/main/res/mipmap-xxxhdpi/default_covert.png new file mode 100644 index 0000000000000000000000000000000000000000..72992dd220972bcec7f84f2f9730f75e5b9ecee0 GIT binary patch literal 10898 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 T!~7K?MNpJem93OE`TqX^zm!#G literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 36e8ef3..58a1581 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -16,4 +16,9 @@ #DF3737 #80A1A2A3 + #A7A7A7 + #00000000 + #8072C8D5 + + #FB310D \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4bb6b84..00fe310 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,4 +8,10 @@ Removed from favorite My Favorites No favorites found + Add sound + No files are present at the moment. Let\'s create one now. + Adding sound + import audio + Record sound + Loading failed, please try again \ No newline at end of file