diff --git a/app/build.gradle.kts b/app/build.gradle.kts index af0f204..f54c50b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -62,6 +62,7 @@ dependencies { implementation ("com.google.code.gson:gson:2.10.1") implementation("com.google.android.material:material:1.11.0") + implementation ("com.airbnb.android:lottie:5.2.0") val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fdd0ead..8f14ecf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,11 +3,14 @@ xmlns:tools="http://schemas.android.com/tools"> - - + + + + @@ -38,9 +50,6 @@ - - - \ No newline at end of file diff --git a/app/src/main/assets/Funny_Sounds_Privacy.html b/app/src/main/assets/Funny_Sounds_Privacy.html new file mode 100644 index 0000000..2198f7d --- /dev/null +++ b/app/src/main/assets/Funny_Sounds_Privacy.html @@ -0,0 +1,110 @@ + + + + + + Privacy Policy for Funny Sounds: Air Horn + + + + +

Privacy Policy for Funny Sounds: Air Horn

+

July 10, 2024

+

ZT Tools ("we", "our", "us") operates the Funny Sounds: Air Horn mobile application (the + "Service").

+

This page informs you of our policies regarding the collection, use, and disclosure of personal + data when you use our Service and the choices you have associated with that data.

+ +

Information Collection and Use

+

For a better experience while using our Service, we may require you to provide us with certain + personally identifiable information, including but not limited to your name, email address, and + usage data. The information that we request will be retained on your device and is not collected + by us in any way.

+

The app does use third-party services that may collect information used to identify you.

+ +

Log Data

+

We want to inform you that whenever you use our Service, in a case of an error in the app, we + collect data and information (through third-party products) on your phone called Log Data. This + Log Data may include information such as your device Internet Protocol (“IP”) address, device + name, operating system version, the configuration of the app when utilizing our Service, the + time and date of your use of the Service, and other statistics.

+ +

Cookies

+

Cookies are files with a small amount of data that are commonly used as anonymous unique + identifiers. These are sent to your browser from the websites that you visit and are stored on + your device's internal memory. This Service does not use these “cookies” explicitly. However, + the app may use third-party code and libraries that use “cookies” to collect information and + improve their services. You have the option to either accept or refuse these cookies and know + when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be + able to use some portions of this Service.

+ +

Service Providers

+

We may employ third-party companies and individuals for the following reasons:

+
    +
  • To facilitate our Service;
  • +
  • To provide the Service on our behalf;
  • +
  • To perform Service-related services; or
  • +
  • To assist us in analyzing how our Service is used.
  • +
+

We want to inform users of this Service that these third parties have access to their Personal + Information. The reason is to perform the tasks assigned to them on our behalf. However, they + are obligated not to disclose or use the information for any other purpose.

+ +

Security

+

We value your trust in providing us with your Personal Information, and we strive to use + commercially acceptable means of protecting it. However, remember that no method of transmission + over the internet or method of electronic storage is 100% secure and reliable, and we cannot + guarantee its absolute security.

+ +

Links to Other Sites

+

This Service may contain links to other sites. If you click on a third-party link, you will be + directed to that site. Note that these external sites are not operated by us. Therefore, we + strongly advise you to review the Privacy Policy of these websites. We have no control over and + assume no responsibility for the content, privacy policies, or practices of any third-party + sites or services.

+ +

Children’s Privacy

+

These Services do not address anyone under the age of 13. We do not knowingly collect personally + identifiable information from children under 13 years of age. In the case we discover that a + child under 13 has provided us with personal information, we immediately delete this from our + servers. If you are a parent or guardian and you are aware that your child has provided us with + personal information, please contact us so that we can take the necessary actions.

+ +

Changes to This Privacy Policy

+

We may update our Privacy Policy from time to time. Thus, you are advised to review this page + periodically for any changes. We will notify you of any changes by posting the new Privacy + Policy on this page.

+ +

Contact Us

+

If you have any questions or concerns about our Privacy Policy or data processing, please contact + us at: WarrenThorCUIu@gmail.com.

+ +

ZT Tools

+ + + diff --git a/app/src/main/java/com/example/funnysounds/activity/DetailActivity.java b/app/src/main/java/com/example/funnysounds/activity/DetailActivity.java index 5610191..9d2343a 100644 --- a/app/src/main/java/com/example/funnysounds/activity/DetailActivity.java +++ b/app/src/main/java/com/example/funnysounds/activity/DetailActivity.java @@ -66,6 +66,9 @@ public class DetailActivity extends AppCompatActivity { imLoop = findViewById(R.id.im_loop); imAddLove = findViewById(R.id.im_add_love); pbLoading = findViewById(R.id.loading); + Intent intent = getIntent(); + resource = (MyData) intent.getSerializableExtra(StaticValue.key_resourse); + if (resource == null) return; goGetData(); initMediaPlayer(); setVolume(volumeSeekbar); @@ -74,21 +77,21 @@ public class DetailActivity extends AppCompatActivity { } - public void setVolume(SeekBar seekBar) { + public void setVolume(SeekBar seekBar) { AudioManager audioManager = (AudioManager) Sounds.mAppContext.getSystemService(AppCompatActivity.AUDIO_SERVICE); int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); seekBar.setMax(maxVolume); seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); - getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { - super.onChange(selfChange); - int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); - seekBar.setMax(maxVolume); - } - }); + getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + super.onChange(selfChange); + int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + seekBar.setMax(maxVolume); + } + }); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { @@ -108,9 +111,7 @@ public class DetailActivity extends AppCompatActivity { } private void goGetData() { - Intent intent = getIntent(); - resource = (MyData) intent.getSerializableExtra(StaticValue.key_resourse); - assert resource != null; + textView.setText(resource.getTitle()); media = resource.getMp3Url(); Log.d("----", "---media" + media); @@ -121,9 +122,9 @@ public class DetailActivity extends AppCompatActivity { imAddLove.setSelected(myData.isAddLove()); } }); - if(!resource.isSyStem()){ + if (!resource.isSyStem()) { imageView.setImageResource(R.mipmap.default_covert); - }else { + } 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) { @@ -141,20 +142,18 @@ public class DetailActivity extends AppCompatActivity { private void initMediaPlayer() { mediaPlayer = new MediaPlayer(); - mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { - mediaPlayer.reset(); String mp3Url = resource.getMp3Url(); //content://com.android.providers.media.documents/document/audio%3A1000000468 - if(resource.isSyStem()){ + if (resource.isSyStem()) { mediaPlayer.setDataSource(mp3Url); - }else { + } else { Uri parse = Uri.parse(mp3Url); - Log.d(Sounds.TAG,"--------Uri--="+parse); - mediaPlayer.setDataSource(this,parse); + Log.d(Sounds.TAG, "--------Uri--=" + parse); + mediaPlayer.setDataSource(this, parse); } - mediaPlayer.prepareAsync(); + mediaPlayer.prepare(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { @@ -170,15 +169,15 @@ public class DetailActivity extends AppCompatActivity { }); } catch (IOException ioException) { setLoading(false); - Log.d(Sounds.TAG,"-----------ioException="+ioException.getCause()); + Log.d(Sounds.TAG, "-----------ioException=" + ioException.getMessage()); Toast.makeText(this, getString(R.string.load_fail), Toast.LENGTH_SHORT).show(); } } - private void setLoading(boolean isLoading){ - if(isLoading){ + private void setLoading(boolean isLoading) { + if (isLoading) { pbLoading.setVisibility(View.VISIBLE); - }else { + } else { pbLoading.setVisibility(View.GONE); } } @@ -224,8 +223,8 @@ public class DetailActivity extends AppCompatActivity { } }); } else { - if (mediaPlayer != null) { - mediaPlayer.pause(); + if (mediaPlayer != null && mediaPlayer.isPlaying()) { + mediaPlayer.stop(); } } } 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 ec81367..b859022 100644 --- a/app/src/main/java/com/example/funnysounds/activity/MainActivity.java +++ b/app/src/main/java/com/example/funnysounds/activity/MainActivity.java @@ -61,12 +61,7 @@ public class MainActivity extends AppCompatActivity { String format = String.format(getString(R.string.app_sounds_version), appVersions); vb.textVersion.setText(format); } - vb.versionLay.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Toast.makeText(MainActivity.this, "This Version is V1.3", Toast.LENGTH_SHORT).show(); - } - }); + } private void initTabVp() { @@ -141,10 +136,12 @@ public class MainActivity extends AppCompatActivity { } private void updateTitle(int position) { - if (position == 1) { - vb.textviewSounds.setText(getString(R.string.favorites)); - }else { + if (position == 0) { vb.textviewSounds.setText(getString(R.string.app_name)); + }else if (position == 1) { + vb.textviewSounds.setText(getString(R.string.create_sounds)); + }else if (position == 2) { + vb.textviewSounds.setText(getString(R.string.favorites)); } } @@ -160,9 +157,7 @@ public class MainActivity extends AppCompatActivity { } private void gotopricy() { - String url = getString(R.string.url_privacy); - Intent intent2 = new Intent(Intent.ACTION_VIEW); - intent2.setData(Uri.parse(url)); + Intent intent2 = new Intent(MainActivity.this, WebActivity.class); startActivity(intent2); } diff --git a/app/src/main/java/com/example/funnysounds/activity/RecordAudioActivity.java b/app/src/main/java/com/example/funnysounds/activity/RecordAudioActivity.java new file mode 100644 index 0000000..df85a5b --- /dev/null +++ b/app/src/main/java/com/example/funnysounds/activity/RecordAudioActivity.java @@ -0,0 +1,99 @@ +package com.example.funnysounds.activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.media.MediaRecorder; +import android.os.Bundle; +import android.os.SystemClock; +import android.util.Log; +import android.view.View; + +import com.example.funnysounds.R; +import com.example.funnysounds.databinding.ActivityRecordAudioBinding; +import com.example.funnysounds.resolve.Utils; +import com.example.funnysounds.value.StaticValue; + +import java.io.File; +import java.io.IOException; + +public class RecordAudioActivity extends AppCompatActivity { + + private ActivityRecordAudioBinding vb; + private boolean isRecording = false; + private MediaRecorder recorder; + private String fileName; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + vb = ActivityRecordAudioBinding.inflate(getLayoutInflater()); + setContentView(vb.getRoot()); + vb.top.imAddLove.setVisibility(View.GONE); + + vb.top.dataName.setText(getString(R.string.new_record)); + vb.top.imageviewBack.setOnClickListener((view) -> finish()); + initMediaRecorder(); + init(); + } + + private void initMediaRecorder() { + fileName = String.valueOf(System.currentTimeMillis()); + File file = Utils.getAudioFile(fileName); + recorder = new MediaRecorder(); + recorder.setAudioSource(MediaRecorder.AudioSource.MIC); + recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); + recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + recorder.setOutputFile(file.getAbsolutePath()); + prepare(); + + } + + private void prepare() { + try { + recorder.prepare(); + } catch (IOException e) { + Log.e("MediaRecorder", "prepare() failed"); + } + } + + private void start() { + try { + recorder.start(); + } catch (RuntimeException e) { + Log.e("MediaRecorder", "start() failed"); + } + } + + private void stop() { + recorder.stop(); + recorder.release(); + recorder = null; + } + + private void init() { + vb.animationView.setRepeatCount(Integer.MAX_VALUE); + vb.tvBtnRecord.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isRecording = !isRecording; + if (isRecording) { + vb.tvBtnRecord.setText(getString(R.string.stop_record)); + vb.chronometer.setBase(SystemClock.elapsedRealtime()); + vb.chronometer.start(); + vb.animationView.playAnimation(); + start(); + } else { + // TODO: 2024/9/4 + vb.animationView.cancelAnimation(); + vb.chronometer.stop(); + stop(); + Intent intent = new Intent(RecordAudioActivity.this, SaveRecordActivity.class); + intent.putExtra(StaticValue.key_record_path, fileName); + startActivity(intent); + finish(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/funnysounds/activity/SaveRecordActivity.java b/app/src/main/java/com/example/funnysounds/activity/SaveRecordActivity.java new file mode 100644 index 0000000..d326420 --- /dev/null +++ b/app/src/main/java/com/example/funnysounds/activity/SaveRecordActivity.java @@ -0,0 +1,139 @@ +package com.example.funnysounds.activity; + +import androidx.appcompat.app.AppCompatActivity; + +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.example.funnysounds.R; +import com.example.funnysounds.action.IOListener; +import com.example.funnysounds.data.MyData; +import com.example.funnysounds.databinding.ActivitySaveRecordBinding; +import com.example.funnysounds.resolve.Readfile; +import com.example.funnysounds.resolve.Sounds; +import com.example.funnysounds.resolve.Utils; +import com.example.funnysounds.room.MyRoom; +import com.example.funnysounds.value.StaticValue; + +import java.io.File; +import java.io.IOException; + +public class SaveRecordActivity extends AppCompatActivity { + + + private ActivitySaveRecordBinding vb; + private String fileName; + private MediaPlayer mediaPlayer; + private File audioFile; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + vb = ActivitySaveRecordBinding.inflate(getLayoutInflater()); + setContentView(vb.getRoot()); + setLoading(true); + vb.top.dataName.setText(getString(R.string.save_sound)); + vb.top.imAddLove.setVisibility(View.GONE); + vb.top.imageviewBack.setOnClickListener((view) -> finish()); + init(); + + } + + private void init() { + fileName = getIntent().getStringExtra(StaticValue.key_record_path); + initMediaPlayer(); + vb.btnPlayPause.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + vb.btnPlayPause.setSelected(!vb.btnPlayPause.isSelected()); + if (vb.btnPlayPause.isSelected()) { + if (mediaPlayer != null && !mediaPlayer.isPlaying()) { + mediaPlayer.start(); + } + } else { + if (mediaPlayer != null) { + mediaPlayer.pause(); + } + } + } + }); + vb.tvBtnRecord.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String newName = vb.etName.getText().toString(); + if (newName.isEmpty()) { + Toast.makeText(SaveRecordActivity.this, getString(R.string.input_name), Toast.LENGTH_SHORT).show(); + } else { + File newFile = Utils.getAudioFile(newName); + boolean b = audioFile.renameTo(newFile); + if (b) { + addRoom(newFile,newName); + Toast.makeText(SaveRecordActivity.this, getString(R.string.rename_success), Toast.LENGTH_SHORT).show(); + finish(); + } else { + Toast.makeText(SaveRecordActivity.this, getString(R.string.rename_fail), Toast.LENGTH_SHORT).show(); + } + + } + } + }); + } + + private void addRoom(File newFile,String newName){ + MyData myData = new MyData(); + myData.setCategoryId(1); + myData.setSyStem(false); + myData.setTitle(newName); + myData.setMp3Url(newFile.getAbsolutePath()); + Readfile.onSwitchIO(new IOListener() { + @Override + public void onRunIOAction() { + MyRoom.getInstance().getDataDao().insertPrank(myData); + } + }); + } + + private void initMediaPlayer() { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); + try { + mediaPlayer.reset(); + Log.d(Sounds.TAG, "-------path=" + fileName); + audioFile = Utils.getAudioFile(fileName); + mediaPlayer.setDataSource(audioFile.getAbsolutePath()); + mediaPlayer.prepareAsync(); + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + setLoading(false); + } + }); + + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + vb.btnPlayPause.setSelected(false); + } + }); + } catch (IOException ioException) { + 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) { + vb.btnPlayPause.setVisibility(View.GONE); + vb.loading.setVisibility(View.VISIBLE); + } else { + vb.loading.setVisibility(View.GONE); + vb.btnPlayPause.setVisibility(View.VISIBLE); + } + + } +} \ No newline at end of file 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 85a2d23..ce3c73c 100644 --- a/app/src/main/java/com/example/funnysounds/activity/SpecifisoundsActivity.java +++ b/app/src/main/java/com/example/funnysounds/activity/SpecifisoundsActivity.java @@ -44,7 +44,8 @@ public class SpecifisoundsActivity extends AppCompatActivity implements MyDataSo setContentView(R.layout.activity_specifisounds); recyclerview_specific = findViewById(R.id.recyclerview_specific); imageView = findViewById(R.id.imageview_back); - cName = findViewById(R.id.categoryname); + cName = findViewById(R.id.data_name); + findViewById(R.id.im_add_love).setVisibility(View.GONE); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/com/example/funnysounds/activity/WebActivity.java b/app/src/main/java/com/example/funnysounds/activity/WebActivity.java new file mode 100644 index 0000000..9bcbcc5 --- /dev/null +++ b/app/src/main/java/com/example/funnysounds/activity/WebActivity.java @@ -0,0 +1,35 @@ +package com.example.funnysounds.activity; + +import android.os.Bundle; +import android.view.View; +import android.webkit.WebViewClient; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.funnysounds.R; +import com.example.funnysounds.databinding.ActivityWebBinding; + + +public class WebActivity extends AppCompatActivity { + + private ActivityWebBinding vb; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + vb = ActivityWebBinding.inflate(getLayoutInflater()); + setContentView(vb.getRoot()); + vb.top.imAddLove.setVisibility(View.GONE); + vb.top.dataName.setText(getString(R.string.privacy_policy)); + vb.top.imageviewBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + vb.web.getSettings().setJavaScriptEnabled(true); + vb.web.setWebViewClient(new WebViewClient()); + vb.web.loadUrl("file:///android_asset/Funny_Sounds_Privacy.html"); + + } +} \ No newline at end of file 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 3105ad8..42d07bd 100644 --- a/app/src/main/java/com/example/funnysounds/fragement/RecordFragment.java +++ b/app/src/main/java/com/example/funnysounds/fragement/RecordFragment.java @@ -27,6 +27,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.example.funnysounds.action.IOListener; import com.example.funnysounds.action.RecordDialogClickListener; +import com.example.funnysounds.activity.RecordAudioActivity; import com.example.funnysounds.data.MyData; import com.example.funnysounds.databinding.FragmentRecordBinding; import com.example.funnysounds.dialog.RecordDialog; @@ -34,7 +35,6 @@ 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; @@ -48,6 +48,13 @@ public class RecordFragment extends Fragment { 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 String[] permission_recordAudio = {Manifest.permission.RECORD_AUDIO}; + + /** + * 0 import 1 record + */ + private int clickType = 0; private ActivityResultLauncher audioSelectLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { @Override public void onActivityResult(ActivityResult o) { @@ -71,7 +78,7 @@ public class RecordFragment extends Fragment { } }); // 处理选中的音频URI - Log.d(Sounds.TAG, "--------audioUri=" + audioUri+"---audioPathFromUri="+name +"--------decode-----"+decode); + Log.d(Sounds.TAG, "--------audioUri=" + audioUri + "---audioPathFromUri=" + name + "--------decode-----" + decode); } } @@ -84,12 +91,15 @@ public class RecordFragment extends Fragment { boolean isOK = true; for (String key : o.keySet()) { Boolean aBoolean = o.get(key); - Log.d(Sounds.TAG, "-----key="+key+"---aBoolean=" + aBoolean); + Log.d(Sounds.TAG, "-----key=" + key + "---aBoolean=" + aBoolean); if (aBoolean != null) isOK = aBoolean; } - if(isOK){ - selectAudio(); + if (isOK) { + if (clickType == 0) + selectAudio(); + else + goRecord(); } } @@ -123,11 +133,14 @@ public class RecordFragment extends Fragment { dialog = RecordDialog.newInstance(new RecordDialogClickListener() { @Override public void onImport() { - checkPermissionAudio(); + clickType = 0; + checkPermissionImportAudio(); } @Override public void onRecord() { + clickType = 1; + checkPermissionRecordAudio(); } }); @@ -136,7 +149,18 @@ public class RecordFragment extends Fragment { } }); } - private void checkPermissionAudio() { + + private void checkPermissionRecordAudio() { + int i = ContextCompat.checkSelfPermission(requireActivity(), permission_recordAudio[0]); + if (i != PackageManager.PERMISSION_GRANTED) { + permissionLauncher.launch(permission_recordAudio); + } else { + goRecord(); + } + + } + + private void checkPermissionImportAudio() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { int i = ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_MEDIA_AUDIO); if (i != PackageManager.PERMISSION_GRANTED) { @@ -152,8 +176,6 @@ public class RecordFragment extends Fragment { selectAudio(); } } - - } private void selectAudio() { @@ -162,6 +184,11 @@ public class RecordFragment extends Fragment { audioSelectLauncher.launch(Intent.createChooser(intent, "Select Audio")); } + private void goRecord() { + Intent intent = new Intent(requireActivity(), RecordAudioActivity.class); + startActivity(intent); + } + private void init() { MySpace mySpace = new MySpace(20, 20, 25); LinearLayoutManager layoutManager = new LinearLayoutManager(requireActivity()); diff --git a/app/src/main/java/com/example/funnysounds/resolve/Utils.java b/app/src/main/java/com/example/funnysounds/resolve/Utils.java new file mode 100644 index 0000000..ece64ae --- /dev/null +++ b/app/src/main/java/com/example/funnysounds/resolve/Utils.java @@ -0,0 +1,10 @@ +package com.example.funnysounds.resolve; + +import java.io.File; + +public class Utils { + + public static File getAudioFile(String name) { + return new File(Sounds.mAppContext.getExternalCacheDir(), name + ".amr"); + } +} 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 f06c518..0ab53a8 100644 --- a/app/src/main/java/com/example/funnysounds/room/DataDao.java +++ b/app/src/main/java/com/example/funnysounds/room/DataDao.java @@ -2,6 +2,7 @@ package com.example.funnysounds.room; import androidx.lifecycle.LiveData; import androidx.room.Dao; +import androidx.room.Delete; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; @@ -34,4 +35,7 @@ public interface DataDao { LiveData queryAudioIsLove(long mid); @Update void updatePrank(MyData myData); + + @Delete + void deletePrank(MyData myData); } diff --git a/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java b/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java index 71aac4c..fcfce60 100644 --- a/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java +++ b/app/src/main/java/com/example/funnysounds/soundsadapter/RecordAdapter.java @@ -1,7 +1,9 @@ package com.example.funnysounds.soundsadapter; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -69,7 +71,21 @@ public class RecordAdapter extends RecyclerView.Adapter { }else { holder.getVb().imSounds.setImageResource(R.mipmap.default_covert); } + holder.getVb().imDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d(Sounds.TAG,"---------holder.getAdapterPosition()="+holder.getAdapterPosition()); + notifyItemRemoved(holder.getAdapterPosition()); + Toast.makeText(myContext, myContext.getString(R.string.deleted_successfully), Toast.LENGTH_SHORT).show(); + Readfile.onSwitchIO(new IOListener() { + @Override + public void onRunIOAction() { + MyRoom.getInstance().getDataDao().deletePrank(myData); + } + }); + } + }); holder.getVb().getRoot().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/com/example/funnysounds/value/StaticValue.java b/app/src/main/java/com/example/funnysounds/value/StaticValue.java index 57d56a5..6874e18 100644 --- a/app/src/main/java/com/example/funnysounds/value/StaticValue.java +++ b/app/src/main/java/com/example/funnysounds/value/StaticValue.java @@ -5,4 +5,7 @@ public class StaticValue { public static final String key_resourse = "key_resourse"; + + public static final String key_record_path= "key_path"; + } diff --git a/app/src/main/res/drawable/im_delete.xml b/app/src/main/res/drawable/im_delete.xml new file mode 100644 index 0000000..1c13c0c --- /dev/null +++ b/app/src/main/res/drawable/im_delete.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/shape_edit_record_name.xml b/app/src/main/res/drawable/shape_edit_record_name.xml new file mode 100644 index 0000000..89e3424 --- /dev/null +++ b/app/src/main/res/drawable/shape_edit_record_name.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml index a7c7f7e..043ed24 100644 --- a/app/src/main/res/layout/activity_detail.xml +++ b/app/src/main/res/layout/activity_detail.xml @@ -7,42 +7,8 @@ android:orientation="vertical" tools:context=".activity.DetailActivity"> - + - - - - - - - @@ -74,6 +75,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" + android:clickable="true" android:background="@color/white"> + android:textSize="15sp" /> + android:textSize="15sp" /> + android:textSize="15sp" /> diff --git a/app/src/main/res/layout/activity_record_audio.xml b/app/src/main/res/layout/activity_record_audio.xml new file mode 100644 index 0000000..df808e8 --- /dev/null +++ b/app/src/main/res/layout/activity_record_audio.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_save_record.xml b/app/src/main/res/layout/activity_save_record.xml new file mode 100644 index 0000000..c0a3d4b --- /dev/null +++ b/app/src/main/res/layout/activity_save_record.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_specifisounds.xml b/app/src/main/res/layout/activity_specifisounds.xml index e5a1d6d..61d09fc 100644 --- a/app/src/main/res/layout/activity_specifisounds.xml +++ b/app/src/main/res/layout/activity_specifisounds.xml @@ -8,32 +8,8 @@ android:orientation="vertical" tools:context=".activity.SpecifisoundsActivity"> - + - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/comon_layout_top.xml b/app/src/main/res/layout/comon_layout_top.xml new file mode 100644 index 0000000..2db00d1 --- /dev/null +++ b/app/src/main/res/layout/comon_layout_top.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_love.xml b/app/src/main/res/layout/fragment_love.xml index 0a1845c..89a5ac7 100644 --- a/app/src/main/res/layout/fragment_love.xml +++ b/app/src/main/res/layout/fragment_love.xml @@ -16,6 +16,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:text="@string/no_favorites" /> + android:text="@string/no_favorites" + android:textColor="@color/text_color_gray" + android:textSize="17sp" /> \ 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 a107a24..226bfed 100644 --- a/app/src/main/res/layout/fragment_record.xml +++ b/app/src/main/res/layout/fragment_record.xml @@ -17,7 +17,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" - android:layout_centerHorizontal="true" android:layout_marginStart="36dp" android:layout_marginTop="20dp" android:layout_marginEnd="36dp" diff --git a/app/src/main/res/layout/item_record.xml b/app/src/main/res/layout/item_record.xml index 683655b..54c618c 100644 --- a/app/src/main/res/layout/item_record.xml +++ b/app/src/main/res/layout/item_record.xml @@ -29,6 +29,15 @@ android:textColor="@color/black" android:textSize="15sp" /> - + \ No newline at end of file diff --git a/app/src/main/res/raw/anima.json b/app/src/main/res/raw/anima.json new file mode 100644 index 0000000..1d29024 --- /dev/null +++ b/app/src/main/res/raw/anima.json @@ -0,0 +1,2716 @@ +{ + "nm": "newScene", + "ddd": 0, + "h": 470, + "w": 470, + "meta": { + "g": "@lottiefiles/toolkit-js 0.33.2" + }, + "layers": [ + { + "ty": 4, + "nm": "pill top", + "sr": 1, + "st": 0, + "op": 1000, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 3.5, + -29.75, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + -100, + 100 + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 237, + 220.75, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "np": 4, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 20 + }, + "s": { + "a": 0, + "k": [ + 26.627, + 55.588 + ] + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 61, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 16, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 4 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 3.627, + -30.815 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "pill down", + "sr": 1, + "st": 0, + "op": 1000, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 3.5, + -29.75, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 237, + 220.75, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "np": 4, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 20 + }, + "s": { + "a": 0, + "k": [ + 26.627, + 55.588 + ] + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 58, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 4 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 3.627, + -30.815 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 2 + }, + { + "ty": 4, + "nm": "base", + "sr": 1, + "st": 0, + "op": 1000, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 3.25, + 23.5, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 236.802, + 274, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 20 + }, + "s": { + "a": 0, + "k": [ + 3.99, + 18.391 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 123.795, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 3.575, + 23.858 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 3 + }, + { + "ty": 4, + "nm": "Half rign", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 3, + -16.25, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 236.533, + 234.25, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 4, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 44.426, + 44.426 + ] + } + }, + { + "ty": "tm", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Filter - Trim", + "nm": "Trim Paths 1", + "ix": 2, + "e": { + "a": 0, + "k": 75, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "s": { + "a": 0, + "k": 25, + "ix": 1 + }, + "m": 1 + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 3 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 137.481, + 137.481 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 3.594, + -15.692 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 4 + }, + { + "ty": 4, + "nm": "01", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 116.574 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 131.616 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 148.5380859375 + } + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 235, + 235, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 198.609, + 198.609 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k":[0.4471, 0.7843, 0.8353, 1] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 1, + 1 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 5 + }, + { + "ty": 4, + "nm": "02", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 162, + 162, + 100 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 99, + 99, + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 162, + 162, + 100 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 0.97 + }, + "s": [ + 162, + 162, + 100 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.333, + "y": -0.002 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 116 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 133, + 133, + 100 + ], + "t": 116.574 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 162, + 162, + 100 + ], + "t": 131.616 + }, + { + "s": [ + 99, + 99, + 100 + ], + "t": 148.5380859375 + } + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 235, + 235, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 50 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 198.609, + 198.609 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k":[0.4471, 0.7843, 0.8353, 1] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 1, + 1 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 6 + }, + { + "ty": 4, + "nm": "03", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 190, + 190, + 100 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 151, + 151, + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 195, + 195, + 100 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 160, + 160, + 100 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 0.947 + }, + "s": [ + 195, + 195, + 100 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.333, + "y": -0.012 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 116 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 116.574 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 195, + 195, + 100 + ], + "t": 131.616 + }, + { + "s": [ + 99, + 99, + 100 + ], + "t": 148.5380859375 + } + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 235, + 235, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 30 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 198.609, + 198.609 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k":[0.4471, 0.7843, 0.8353, 1] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 1, + 1 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 7 + }, + { + "ty": 4, + "nm": "04", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 116.574 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 130, + 130, + 100 + ], + "t": 131.616 + }, + { + "s": [ + 100, + 100, + 100 + ], + "t": 148.5380859375 + } + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 235, + 235, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 198.609, + 198.609 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k":[0.4471, 0.7843, 0.8353, 1] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 1, + 1 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 8 + }, + { + "ty": 4, + "nm": "transparent1", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 224, + 224, + 100 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 127, + 127, + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 224, + 224, + 100 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 145, + 145, + 100 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 0.944 + }, + "s": [ + 224, + 224, + 100 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.333, + "y": -0.016 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 116 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 115, + 115, + 100 + ], + "t": 116.574 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 224, + 224, + 100 + ], + "t": 131.616 + }, + { + "s": [ + 99, + 99, + 100 + ], + "t": 148.5380859375 + } + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 235, + 235, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 10 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 5 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 20 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 5 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 20 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0 + ], + "t": 116.574 + }, + { + "s": [ + 20 + ], + "t": 131.6162109375 + } + ] + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 198.609, + 198.609 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k":[0.4471, 0.7843, 0.8353, 1] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 1, + 1 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 9 + }, + { + "ty": 4, + "nm": "transparent2", + "sr": 1, + "st": 0, + "op": 116, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 234, + 234, + 100 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 234, + 234, + 100 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 234, + 234, + 100 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100, + 100, + 100 + ], + "t": 116.574 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 234, + 234, + 100 + ], + "t": 131.616 + }, + { + "s": [ + 99, + 99, + 100 + ], + "t": 148.5380859375 + } + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 235, + 235, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + }, + "o": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100 + ], + "t": 0 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 0 + ], + "t": 22.562 + }, + { + "o": { + "x": 0.333, + "y": 0 + }, + "i": { + "x": 0.667, + "y": 1 + }, + "s": [ + 100 + ], + "t": 41.365 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 62.047 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 80.85 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 99.651 + }, + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 116.574 + }, + { + "s": [ + 0 + ], + "t": 131.6162109375 + } + ] + } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Ellipse 1", + "np": 3, + "it": [ + { + "ty": "el", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Ellipse", + "nm": "Ellipse Path 1", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 198.609, + 198.609 + ] + } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { + "a": 0, + "k":[0.4471, 0.7843, 0.8353, 1] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "p": { + "a": 0, + "k": [ + 1, + 1 + ], + "ix": 2 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + } + } + ] + } + ], + "ind": 10 + } + ], + "v": "4.5.9", + "fr": 25, + "op": 116, + "ip": 0, + "assets": [] +} \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 58a1581..8c98c3b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -21,4 +21,6 @@ #8072C8D5 #FB310D + #FB310D + #8768FF \ 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 00fe310..2c068ad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,7 +2,7 @@ Funny Sounds privacy https://sites.google.com/view/funnysoundsairhorn - version + Version V%s Loop Removed from favorite @@ -14,4 +14,16 @@ import audio Record sound Loading failed, please try again + New record + %s:%s:%s + Start recording + Stop recording + Give your created sound a name + Save sound + Please enter a name for your audio + Failed to rename the file, please try again + Save file successfully + Create sounds + Deleted successfully + Privacy Policy \ No newline at end of file