创建仓库
15
.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
*.iml
|
||||||
|
.gradle
|
||||||
|
/local.properties
|
||||||
|
/.idea/caches
|
||||||
|
/.idea/libraries
|
||||||
|
/.idea/modules.xml
|
||||||
|
/.idea/workspace.xml
|
||||||
|
/.idea/navEditor.xml
|
||||||
|
/.idea/assetWizardSettings.xml
|
||||||
|
.DS_Store
|
||||||
|
/build
|
||||||
|
/captures
|
||||||
|
.externalNativeBuild
|
||||||
|
.cxx
|
||||||
|
local.properties
|
||||||
1
app/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/build
|
||||||
BIN
app/PrankSoundApp.jks
Normal file
64
app/build.gradle.kts
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import java.util.Date
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
plugins {
|
||||||
|
id("com.android.application")
|
||||||
|
id("org.jetbrains.kotlin.android")
|
||||||
|
id("io.objectbox")
|
||||||
|
}
|
||||||
|
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
|
||||||
|
android {
|
||||||
|
namespace = "com.prank.sound.funnyapp"
|
||||||
|
compileSdk = 34
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
//com.prank.sound.funnyapp
|
||||||
|
applicationId = "com.prank.sound.funnyapp"
|
||||||
|
minSdk = 23
|
||||||
|
targetSdk = 34
|
||||||
|
versionCode = 1
|
||||||
|
versionName = "1.0"
|
||||||
|
setProperty("archivesBaseName", "Prank Sound App_V" + versionName + "(${versionCode})_$timestamp")
|
||||||
|
testInstrumentationRunner = "androidx.sounds.runner.AndroidJUnitRunner"
|
||||||
|
vectorDrawables {
|
||||||
|
useSupportLibrary = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
isMinifyEnabled = true
|
||||||
|
proguardFiles(
|
||||||
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||||
|
"proguard-rules.pro"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = "17"
|
||||||
|
}
|
||||||
|
buildFeatures {
|
||||||
|
viewBinding = true
|
||||||
|
}
|
||||||
|
|
||||||
|
packaging {
|
||||||
|
resources {
|
||||||
|
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||||
|
implementation("com.google.android.material:material:1.12.0")
|
||||||
|
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
|
||||||
|
implementation("androidx.legacy:legacy-support-v4:1.0.0")
|
||||||
|
implementation("androidx.recyclerview:recyclerview:1.3.2")
|
||||||
|
implementation ("com.github.bumptech.glide:glide:4.16.0")
|
||||||
|
implementation ("com.airbnb.android:lottie:5.2.0")
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
6
app/keystore.properties
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
app_name=Prank Sound App
|
||||||
|
package_name=com.prank.sound.funnyapp
|
||||||
|
keystoreFile=app/PrankSoundApp.jks
|
||||||
|
key_alias=PrankSoundAppkey0
|
||||||
|
key_store_password=PrankSoundApp
|
||||||
|
key_password=PrankSoundApp
|
||||||
151
app/objectbox-models/default.json
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
{
|
||||||
|
"_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.",
|
||||||
|
"_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.",
|
||||||
|
"_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"id": "10:8085616393527895261",
|
||||||
|
"lastPropertyId": "3:5188652570119820578",
|
||||||
|
"name": "MyBean",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "1:146773896596794310",
|
||||||
|
"name": "id",
|
||||||
|
"type": 6,
|
||||||
|
"flags": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2:5478293265216175724",
|
||||||
|
"name": "name",
|
||||||
|
"type": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3:5188652570119820578",
|
||||||
|
"name": "covert",
|
||||||
|
"type": 9
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"relations": [
|
||||||
|
{
|
||||||
|
"id": "7:3875887204039397939",
|
||||||
|
"name": "infoList",
|
||||||
|
"targetId": "11:8334073788849786621"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "11:8334073788849786621",
|
||||||
|
"lastPropertyId": "7:6219244463945872074",
|
||||||
|
"name": "MyInfo",
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "1:3846004680686214718",
|
||||||
|
"name": "id",
|
||||||
|
"type": 6,
|
||||||
|
"flags": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2:1072405592606868493",
|
||||||
|
"name": "name",
|
||||||
|
"type": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3:6403945971117545375",
|
||||||
|
"name": "covert",
|
||||||
|
"type": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4:8380391915022128542",
|
||||||
|
"name": "audioUrl",
|
||||||
|
"type": 9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "5:5397337392918335861",
|
||||||
|
"name": "isLike",
|
||||||
|
"type": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "6:8617726678385755040",
|
||||||
|
"name": "isCustomization",
|
||||||
|
"type": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "7:6219244463945872074",
|
||||||
|
"name": "colorIndex",
|
||||||
|
"type": 5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"relations": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lastEntityId": "11:8334073788849786621",
|
||||||
|
"lastIndexId": "0:0",
|
||||||
|
"lastRelationId": "7:3875887204039397939",
|
||||||
|
"lastSequenceId": "0:0",
|
||||||
|
"modelVersion": 5,
|
||||||
|
"modelVersionParserMinimum": 5,
|
||||||
|
"retiredEntityUids": [
|
||||||
|
6644187494744704837,
|
||||||
|
5451755925324613900,
|
||||||
|
5341528467384834198,
|
||||||
|
8669262289368091330,
|
||||||
|
8810616757821398748,
|
||||||
|
6372494608185382462,
|
||||||
|
260548638537148495,
|
||||||
|
6171058126503557976,
|
||||||
|
8739827070759887179
|
||||||
|
],
|
||||||
|
"retiredIndexUids": [],
|
||||||
|
"retiredPropertyUids": [
|
||||||
|
3737650329028529369,
|
||||||
|
4763378658873693443,
|
||||||
|
125364974873863130,
|
||||||
|
2528835553105827913,
|
||||||
|
4125097520975656265,
|
||||||
|
1927156637783361412,
|
||||||
|
6438478261519714898,
|
||||||
|
2535158628950494443,
|
||||||
|
4963029281587776266,
|
||||||
|
8017263761729239946,
|
||||||
|
3918234626049153042,
|
||||||
|
4840800811073356695,
|
||||||
|
930394402218217369,
|
||||||
|
1357489842440803099,
|
||||||
|
783114452691941347,
|
||||||
|
881748992619560888,
|
||||||
|
95077662452914291,
|
||||||
|
7000351314398811626,
|
||||||
|
3982750000194227585,
|
||||||
|
5235585844249440522,
|
||||||
|
3371160825837869454,
|
||||||
|
9088572167887595053,
|
||||||
|
2294045821758826971,
|
||||||
|
6190783800393335475,
|
||||||
|
6856939928119969590,
|
||||||
|
9041548896743223717,
|
||||||
|
4243540562679615259,
|
||||||
|
3106056562243875264,
|
||||||
|
7411940719916723671,
|
||||||
|
8627564250033438412,
|
||||||
|
2362105308234412259,
|
||||||
|
6967435104198349134,
|
||||||
|
9068611668884650878,
|
||||||
|
1871289416013564443,
|
||||||
|
6461488128394318327,
|
||||||
|
1026277688866110674,
|
||||||
|
2521498030617118564,
|
||||||
|
2583438008647218971,
|
||||||
|
731259648768476447,
|
||||||
|
5851268731306509989,
|
||||||
|
7559103671740386544
|
||||||
|
],
|
||||||
|
"retiredRelationUids": [
|
||||||
|
4497042841980461487,
|
||||||
|
5723529287069432111,
|
||||||
|
8439944504818566677,
|
||||||
|
6781268415547019296,
|
||||||
|
2600628166471439351,
|
||||||
|
6610744321567014290
|
||||||
|
],
|
||||||
|
"version": 1
|
||||||
|
}
|
||||||
51
app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Add project specific ProGuard rules here.
|
||||||
|
# You can control the set of applied configuration files using the
|
||||||
|
# proguardFiles setting in build.gradle.
|
||||||
|
#
|
||||||
|
# For more details, see
|
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following
|
||||||
|
# and specify the fully qualified class name to the JavaScript interface
|
||||||
|
# class:
|
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||||
|
# public *;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Uncomment this to preserve the line number information for
|
||||||
|
# debugging stack traces.
|
||||||
|
#-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
# If you keep the line number information, uncomment this to
|
||||||
|
# hide the original source file name.
|
||||||
|
#-renamesourcefileattribute SourceFile
|
||||||
|
-useuniqueclassmembernames
|
||||||
|
-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
-keepclassmembers class * implements java.io.Serializable {
|
||||||
|
|
||||||
|
static final long serialVersionUID;
|
||||||
|
|
||||||
|
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
||||||
|
|
||||||
|
private void writeObject(java.io.ObjectOutputStream);
|
||||||
|
|
||||||
|
private void readObject(java.io.ObjectInputStream);
|
||||||
|
|
||||||
|
java.lang.Object writeReplace();
|
||||||
|
|
||||||
|
java.lang.Object readResolve();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# 保留Processor类,这些类用于在编译时生成ObjectBox需要的代码
|
||||||
|
-keep @io.objectbox.annotation.processor.Processor class * {
|
||||||
|
*;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 保留ObjectBox的关键方法和构造函数
|
||||||
|
-keepclassmembers class * extends io.objectbox.Box {
|
||||||
|
<init>(...);
|
||||||
|
<methods>;
|
||||||
|
}
|
||||||
62
app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||||
|
android:maxSdkVersion="32" />
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
|
android:maxSdkVersion="32" />
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:name="com.prank.sound.funnyapp.MyApp"
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@mipmap/icon"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:roundIcon="@mipmap/icon"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
android:theme="@style/Theme.FunnyAudio"
|
||||||
|
tools:targetApi="31">
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.CollectionActivity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.RecordActivity"
|
||||||
|
android:exported="false" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.PlayItemActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.ViewAllActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.MainActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.SaveSoundsActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.StartRecorderActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:screenOrientation="portrait" />
|
||||||
|
<activity
|
||||||
|
android:name="com.prank.sound.funnyapp.activity.SplashActivity"
|
||||||
|
android:exported="true"
|
||||||
|
android:screenOrientation="portrait">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
||||||
3791
app/src/main/assets/prank.json
Normal file
BIN
app/src/main/assets/prankfont.ttf
Normal file
48
app/src/main/java/com/prank/sound/funnyapp/MyApp.java
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package com.prank.sound.funnyapp;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.res.AssetManager;
|
||||||
|
import android.graphics.Typeface;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.bean.MyBean;
|
||||||
|
import com.prank.sound.funnyapp.bean.DbManager;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MyApp extends Application {
|
||||||
|
|
||||||
|
public static MyApp app;
|
||||||
|
public static Typeface defaultFont;
|
||||||
|
public static List<MyBean> bean;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
app = this;
|
||||||
|
AssetManager assets = getAssets();
|
||||||
|
defaultFont = Typeface.createFromAsset(assets, "prankfont.ttf");
|
||||||
|
DbManager.init(this);
|
||||||
|
if (bean != null)
|
||||||
|
return;
|
||||||
|
try {
|
||||||
|
InputStream open = getAssets().open("prank.json");
|
||||||
|
String string = Common.getString(open);
|
||||||
|
if (!string.isEmpty()) {
|
||||||
|
bean = Common.getBean(string);
|
||||||
|
for (MyBean category:bean){
|
||||||
|
for (MyInfo info1 : category.getInfoList()) {
|
||||||
|
info1.setLike(false);
|
||||||
|
DbManager.getBoxBean().put(info1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivityCollectionBinding
|
||||||
|
import com.prank.sound.funnyapp.myadapter.AdapterFavorite
|
||||||
|
import com.prank.sound.funnyapp.bean.DbManager
|
||||||
|
import com.prank.sound.funnyapp.mytool.Decoration
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common
|
||||||
|
|
||||||
|
class CollectionActivity : AppCompatActivity(), View.OnClickListener {
|
||||||
|
private lateinit var binding: ActivityCollectionBinding
|
||||||
|
|
||||||
|
private var likeAdapter: AdapterFavorite? = null
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityCollectionBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
Common.setStatusBarTextColor(this, true)
|
||||||
|
binding.back.setOnClickListener(this)
|
||||||
|
|
||||||
|
|
||||||
|
binding.list.run {
|
||||||
|
layoutManager = GridLayoutManager(this@CollectionActivity, 2)
|
||||||
|
val all = DbManager.getAllLike()
|
||||||
|
if (all.size == 0) {
|
||||||
|
binding.layoutEmpty.visibility = View.VISIBLE
|
||||||
|
binding.list.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
binding.layoutEmpty.visibility = View.GONE
|
||||||
|
binding.list.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
likeAdapter = AdapterFavorite(
|
||||||
|
this@CollectionActivity,
|
||||||
|
all,
|
||||||
|
false
|
||||||
|
)
|
||||||
|
val itemHelper =
|
||||||
|
Decoration(10, 10, 5)
|
||||||
|
addItemDecoration(itemHelper)
|
||||||
|
adapter = likeAdapter
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClick(v: View?) {
|
||||||
|
if (v == binding.back) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refresh() {
|
||||||
|
if (likeAdapter != null) {
|
||||||
|
val all = DbManager.getAllLike()
|
||||||
|
if (all.size == 0) {
|
||||||
|
binding.layoutEmpty.visibility = View.VISIBLE
|
||||||
|
binding.list.visibility = View.GONE
|
||||||
|
} else {
|
||||||
|
binding.layoutEmpty.visibility = View.GONE
|
||||||
|
binding.list.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
|
likeAdapter!!.updateData(all)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity;
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.MyApp;
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivityMainBinding;
|
||||||
|
import com.prank.sound.funnyapp.myadapter.AdapterMain;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Decoration;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private ActivityMainBinding activityMainBinding;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(activityMainBinding.getRoot());
|
||||||
|
Common.setStatusBarTextColor(this, true);
|
||||||
|
|
||||||
|
|
||||||
|
Decoration itemHelper = new Decoration(10, 10, 0);
|
||||||
|
activityMainBinding.recyclerView.addItemDecoration(itemHelper);
|
||||||
|
activityMainBinding.recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
|
||||||
|
activityMainBinding.recyclerView.setAdapter(new AdapterMain(this, MyApp.bean));
|
||||||
|
initClick();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initClick(){
|
||||||
|
activityMainBinding.rlRecord.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(MainActivity.this, RecordActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
activityMainBinding.rlLike.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(MainActivity.this, CollectionActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,235 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.media.AudioManager;
|
||||||
|
import android.media.MediaPlayer;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.CountDownTimer;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.prank.sound.funnyapp.R;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
import com.prank.sound.funnyapp.myinterface.OnClickItem;
|
||||||
|
import com.prank.sound.funnyapp.myinterface.OnClickItemTimer;
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivityPlaySoundsBinding;
|
||||||
|
import com.prank.sound.funnyapp.dialog.DialogStartTimer;
|
||||||
|
import com.prank.sound.funnyapp.myadapter.AdapterViewAll;
|
||||||
|
import com.prank.sound.funnyapp.bean.DbManager;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Decoration;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PlayItemActivity extends AppCompatActivity implements View.OnClickListener, OnClickItemTimer, OnClickItem {
|
||||||
|
|
||||||
|
private ActivityPlaySoundsBinding playBinding;
|
||||||
|
|
||||||
|
private MyInfo info;
|
||||||
|
private DialogStartTimer dialogStartTimer;
|
||||||
|
|
||||||
|
private MediaPlayer mediaPlayer;
|
||||||
|
private BroadcastReceiver volumeReceiver;
|
||||||
|
private CountDownTimer countDownTimer;
|
||||||
|
private int color;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
playBinding = ActivityPlaySoundsBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(playBinding.getRoot());
|
||||||
|
Common.setStatusBarTextColor(this, true);
|
||||||
|
info = (MyInfo) getIntent().getSerializableExtra(Common.KEY_PLAY_DATA);
|
||||||
|
color = getIntent().getIntExtra(Common.KEY_LIST_COLOR_POS,0);
|
||||||
|
// playBinding.constraintLayout.setBackground(ContextCompat.getDrawable(this, Tools.playBgs[color]));
|
||||||
|
initAudio();
|
||||||
|
String covert = info.getCovert();
|
||||||
|
if (covert != null && !covert.isEmpty()) {
|
||||||
|
Glide.with(this).load(covert)
|
||||||
|
.placeholder(R.drawable.def_sounds)
|
||||||
|
.into(playBinding.image);
|
||||||
|
} else {
|
||||||
|
Glide.with(this).load(R.drawable.def_sounds)
|
||||||
|
.into(playBinding.image);
|
||||||
|
}
|
||||||
|
playBinding.name.setText(info.getName());
|
||||||
|
playBinding.back.setOnClickListener(this);
|
||||||
|
playBinding.btnPlay.setOnClickListener(this);
|
||||||
|
playBinding.imLike.setOnClickListener(this);
|
||||||
|
playBinding.imLoop.setOnClickListener(this);
|
||||||
|
playBinding.imTimer.setOnClickListener(this);
|
||||||
|
Common.setVolume(this, playBinding.seekbar);
|
||||||
|
|
||||||
|
initLike();
|
||||||
|
loadMore();
|
||||||
|
volumeReceiver();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopCountDown() {
|
||||||
|
if (countDownTimer != null) {
|
||||||
|
countDownTimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void startCountDown(long time) {
|
||||||
|
stopCountDown();
|
||||||
|
countDownTimer = new CountDownTimer(time, 1000) {
|
||||||
|
@Override
|
||||||
|
public void onTick(long millisUntilFinished) {
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onFinish() {
|
||||||
|
dialogStartTimer.setOffSelected();
|
||||||
|
if (!mediaPlayer.isPlaying()) {
|
||||||
|
playBinding.btnPlay.setSelected(true);
|
||||||
|
mediaPlayer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
countDownTimer.start();
|
||||||
|
}
|
||||||
|
private void volumeReceiver() {
|
||||||
|
volumeReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) {
|
||||||
|
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
|
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
|
||||||
|
if (playBinding.seekbar.getProgress() != currentVolume) {
|
||||||
|
playBinding.seekbar.setProgress(currentVolume);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
IntentFilter filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION");
|
||||||
|
registerReceiver(volumeReceiver, filter);
|
||||||
|
}
|
||||||
|
private void initLike() {
|
||||||
|
Log.d("---------","--------info="+info.isLike());
|
||||||
|
boolean b = DbManager.checkLike(info);
|
||||||
|
playBinding.imLike.setSelected(b);
|
||||||
|
}
|
||||||
|
private void loadMore() {
|
||||||
|
List<MyInfo> more = DbManager.getMore();
|
||||||
|
Decoration itemHelper = new Decoration(0, 0, (int) Common.dpToPx(3));
|
||||||
|
AdapterViewAll adapterViewAll = new AdapterViewAll(this, more, 1, this);
|
||||||
|
playBinding.moreRecycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
|
||||||
|
playBinding.moreRecycler.setAdapter(adapterViewAll);
|
||||||
|
playBinding.moreRecycler.addItemDecoration(itemHelper);
|
||||||
|
adapterViewAll.setColorIndex(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initAudio() {
|
||||||
|
showPlayBtn(false);
|
||||||
|
mediaPlayer = new MediaPlayer();
|
||||||
|
try {
|
||||||
|
mediaPlayer.reset();
|
||||||
|
mediaPlayer.setDataSource(info.getAudioUrl());
|
||||||
|
mediaPlayer.prepareAsync();
|
||||||
|
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
|
||||||
|
@Override
|
||||||
|
public void onPrepared(MediaPlayer mp) {
|
||||||
|
showPlayBtn(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
||||||
|
@Override
|
||||||
|
public void onCompletion(MediaPlayer mp) {
|
||||||
|
playBinding.btnPlay.setSelected(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException ioException) {
|
||||||
|
showPlayBtn(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showPlayBtn(boolean showBtn) {
|
||||||
|
if (showBtn) {
|
||||||
|
playBinding.btnPlay.setVisibility(View.VISIBLE);
|
||||||
|
playBinding.playLoading.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
playBinding.btnPlay.setVisibility(View.GONE);
|
||||||
|
playBinding.playLoading.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (v.equals(playBinding.back)) {
|
||||||
|
finish();
|
||||||
|
} else if (v.equals(playBinding.btnPlay)) {
|
||||||
|
boolean selected = playBinding.btnPlay.isSelected();
|
||||||
|
if (selected) {
|
||||||
|
if (mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.pause();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playBinding.btnPlay.setSelected(!selected);
|
||||||
|
|
||||||
|
} else if (v.equals(playBinding.imLike)) {
|
||||||
|
playBinding.imLike.setSelected(!playBinding.imLike.isSelected());
|
||||||
|
boolean selected = playBinding.imLike.isSelected();
|
||||||
|
if (selected) {
|
||||||
|
info.setColorIndex(color);
|
||||||
|
DbManager.addLike(info);
|
||||||
|
} else {
|
||||||
|
DbManager.removeLike(info);
|
||||||
|
}
|
||||||
|
} else if (v.equals(playBinding.imLoop)) {
|
||||||
|
playBinding.imLoop.setSelected(!playBinding.imLoop.isSelected());
|
||||||
|
mediaPlayer.setLooping(playBinding.imLoop.isSelected());
|
||||||
|
} else if (v.equals(playBinding.imTimer)) {
|
||||||
|
if (dialogStartTimer == null) {
|
||||||
|
dialogStartTimer = new DialogStartTimer(PlayItemActivity.this, this);
|
||||||
|
}
|
||||||
|
dialogStartTimer.showTop(playBinding.imTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (mediaPlayer.isPlaying()) {
|
||||||
|
mediaPlayer.stop();
|
||||||
|
}
|
||||||
|
mediaPlayer.release();
|
||||||
|
mediaPlayer = null;
|
||||||
|
stopCountDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClickTimerListener(long time) {
|
||||||
|
dialogStartTimer.hide();
|
||||||
|
if (time == -1) {
|
||||||
|
stopCountDown();
|
||||||
|
} else {
|
||||||
|
startCountDown(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClickSoundsListener(MyInfo data) {
|
||||||
|
Intent intent = new Intent(this, PlayItemActivity.class);
|
||||||
|
intent.putExtra(Common.KEY_PLAY_DATA, data);
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,174 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.pm.PackageManager
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
|
import com.prank.sound.funnyapp.R
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivityRecordBinding
|
||||||
|
import com.prank.sound.funnyapp.myadapter.AdapterFavorite
|
||||||
|
import com.prank.sound.funnyapp.bean.DbManager
|
||||||
|
import com.prank.sound.funnyapp.mytool.Decoration
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common
|
||||||
|
|
||||||
|
class RecordActivity : AppCompatActivity(), View.OnClickListener {
|
||||||
|
private lateinit var binding: ActivityRecordBinding
|
||||||
|
|
||||||
|
private var adapter: AdapterFavorite? = null
|
||||||
|
private var requestRecordAudioLauncher: ActivityResultLauncher<String>? = null
|
||||||
|
private var audioPickerLauncher: ActivityResultLauncher<String>? = null
|
||||||
|
private var requestStorePermissionsLauncher: ActivityResultLauncher<Array<String>>? = null
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityRecordBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
Common.setStatusBarTextColor(this, true)
|
||||||
|
|
||||||
|
|
||||||
|
requestRecordAudioLauncher = registerForActivityResult<String, Boolean>(
|
||||||
|
ActivityResultContracts.RequestPermission()
|
||||||
|
) { isGranted: Boolean ->
|
||||||
|
if (isGranted) {
|
||||||
|
intentRecordAudio()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(
|
||||||
|
this,
|
||||||
|
"Recording permission denied",
|
||||||
|
Toast.LENGTH_SHORT
|
||||||
|
).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
requestStorePermissionsLauncher = registerForActivityResult(
|
||||||
|
ActivityResultContracts.RequestMultiplePermissions()
|
||||||
|
) { result: Map<String, Boolean> ->
|
||||||
|
val isGranted = result.all { it.value }
|
||||||
|
|
||||||
|
if (isGranted) {
|
||||||
|
importAudio()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
audioPickerLauncher = registerForActivityResult(
|
||||||
|
ActivityResultContracts.GetContent()
|
||||||
|
) { uri: Uri? ->
|
||||||
|
// Handle the returned Uri
|
||||||
|
uri?.let {
|
||||||
|
val duration = Common.getAudioDuration(this, it)
|
||||||
|
val intent = Intent(this, SaveSoundsActivity::class.java).apply {
|
||||||
|
putExtra(SaveSoundsActivity.KEY_Path, it.toString())
|
||||||
|
putExtra(SaveSoundsActivity.KEY_Time, duration)
|
||||||
|
}
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initList()
|
||||||
|
|
||||||
|
binding.btnimport.setOnClickListener(this)
|
||||||
|
binding.record.setOnClickListener(this)
|
||||||
|
binding.back.setOnClickListener(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initList() {
|
||||||
|
val itemHelper = Decoration(5, 5, 0)
|
||||||
|
binding.recyclerImport.addItemDecoration(itemHelper)
|
||||||
|
binding.recyclerImport.layoutManager = GridLayoutManager(this, 3)
|
||||||
|
val all = DbManager.getAllCustomization()
|
||||||
|
|
||||||
|
adapter =
|
||||||
|
AdapterFavorite(this, all, true)
|
||||||
|
binding.recyclerImport.adapter = adapter
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun checkAndRequestAudioPermission() {
|
||||||
|
if (ContextCompat.checkSelfPermission(this, Common.permission_record_audio)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED
|
||||||
|
) {
|
||||||
|
requestRecordAudioLauncher!!.launch(Common.permission_record_audio)
|
||||||
|
} else {
|
||||||
|
intentRecordAudio()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun intentRecordAudio() {
|
||||||
|
val intent = Intent(this, StartRecorderActivity::class.java)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun importAudio() {
|
||||||
|
val intent = Intent(Intent.ACTION_GET_CONTENT)
|
||||||
|
intent.type = "audio/*"
|
||||||
|
audioPickerLauncher!!.launch("audio/*")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClick(v: View?) {
|
||||||
|
if (v == binding.btnimport) {
|
||||||
|
onClickTimer(0)
|
||||||
|
} else if (v == binding.record) {
|
||||||
|
onClickTimer(1)
|
||||||
|
} else if (v == binding.back) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refresh() {
|
||||||
|
if (adapter != null) {
|
||||||
|
val all = DbManager.getAllCustomization()
|
||||||
|
adapter!!.updateData(all)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private fun onClickTimer(type: Int) {
|
||||||
|
when (type) {
|
||||||
|
0 -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||||
|
if (ContextCompat.checkSelfPermission(
|
||||||
|
this,
|
||||||
|
Common.permission_read_audio[0]
|
||||||
|
)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED
|
||||||
|
) {
|
||||||
|
requestStorePermissionsLauncher!!.launch(Common.permission_read_audio)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
importAudio()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ContextCompat.checkSelfPermission(
|
||||||
|
this,
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
|
)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED ||
|
||||||
|
ContextCompat.checkSelfPermission(
|
||||||
|
this,
|
||||||
|
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||||
|
)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED
|
||||||
|
) {
|
||||||
|
requestStorePermissionsLauncher!!.launch(Common.permission_store)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
importAudio()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
1 -> checkAndRequestAudioPermission()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,218 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.media.AudioAttributes;
|
||||||
|
import android.media.MediaPlayer;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.SystemClock;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.R;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivitySaveSoundsBinding;
|
||||||
|
import com.prank.sound.funnyapp.bean.DbManager;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
public class SaveSoundsActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
private MediaPlayer mediaPlayer;
|
||||||
|
private Handler handler = new Handler();
|
||||||
|
private Runnable timeUpdater;
|
||||||
|
private long startTime;
|
||||||
|
private long elapsedTime;
|
||||||
|
private long audioDuration;
|
||||||
|
|
||||||
|
public static String KEY_Time = "KEY_time";
|
||||||
|
public static String KEY_Path = "KEY_path";
|
||||||
|
public static String KEY_import = "flag";
|
||||||
|
private ActivitySaveSoundsBinding binding;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
binding = ActivitySaveSoundsBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
|
||||||
|
Common.setStatusBarTextColor(this, true);
|
||||||
|
binding.audioTime.setText(R.string.time_init);
|
||||||
|
initData();
|
||||||
|
initEvent();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void togglePrank() throws IOException {
|
||||||
|
if (binding.imPlayBtn.isSelected()) {
|
||||||
|
initMediaPlayer();
|
||||||
|
} else {
|
||||||
|
stopPrank();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopPrank() {
|
||||||
|
handler.removeCallbacks(timeUpdater);
|
||||||
|
if (mediaPlayer != null) {
|
||||||
|
mediaPlayer.release();
|
||||||
|
mediaPlayer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initMediaPlayer() {
|
||||||
|
if (mediaPlayer == null) {
|
||||||
|
mediaPlayer = new MediaPlayer();
|
||||||
|
mediaPlayer.setAudioAttributes(
|
||||||
|
new AudioAttributes.Builder()
|
||||||
|
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
|
||||||
|
.setUsage(AudioAttributes.USAGE_MEDIA)
|
||||||
|
.build());
|
||||||
|
try {
|
||||||
|
mediaPlayer.setDataSource(path);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
mediaPlayer.setOnPreparedListener(mp -> {
|
||||||
|
mediaPlayer.start();
|
||||||
|
startTimer();
|
||||||
|
});
|
||||||
|
mediaPlayer.setOnCompletionListener(mp -> {
|
||||||
|
binding.imPlayBtn.setSelected(false);
|
||||||
|
handler.removeCallbacks(timeUpdater);
|
||||||
|
});
|
||||||
|
mediaPlayer.prepareAsync();
|
||||||
|
} else {
|
||||||
|
mediaPlayer.start();
|
||||||
|
startTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void startTimer() {
|
||||||
|
if (timeUpdater == null) {
|
||||||
|
timeUpdater = new Runnable() {
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
|
||||||
|
long currentTime = SystemClock.elapsedRealtime();
|
||||||
|
elapsedTime = currentTime - startTime;
|
||||||
|
int milliseconds = (int) (elapsedTime % 1000) / 10;
|
||||||
|
int seconds = (int) (elapsedTime / 1000) % 60;
|
||||||
|
int minutes = (int) (elapsedTime / (1000 * 60)) % 60;
|
||||||
|
binding.audioTime.setText(String.format("%02d : %02d : %02d", minutes, seconds, milliseconds));
|
||||||
|
handler.postDelayed(this, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
startTime = SystemClock.elapsedRealtime();
|
||||||
|
handler.post(timeUpdater);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initEvent() {
|
||||||
|
binding.back.setOnClickListener(v -> finish());
|
||||||
|
binding.imPlayBtn.setOnClickListener(v -> {
|
||||||
|
binding.imPlayBtn.setSelected(!binding.imPlayBtn.isSelected());
|
||||||
|
try {
|
||||||
|
togglePrank();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e("SaveActivity", "Error toggling prank", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
binding.save.setOnClickListener(v -> {
|
||||||
|
String name = binding.saveEdit.getText().toString().trim();
|
||||||
|
boolean b = DbManager.checkName(name);
|
||||||
|
if (!TextUtils.isEmpty(name)) {
|
||||||
|
if(!b){
|
||||||
|
binding.saveEdit.setText("");
|
||||||
|
Toast.makeText(SaveSoundsActivity.this, getString(R.string.name_hint), Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
saveData(name);
|
||||||
|
Toast.makeText(SaveSoundsActivity.this, getString(R.string.save_tips), Toast.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
Toast.makeText(SaveSoundsActivity.this, getString(R.string.save_tip), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveData(String name) {
|
||||||
|
File cacheDir = getCacheDir();
|
||||||
|
File sourceFile = new File(path);
|
||||||
|
File destinationFile = new File(cacheDir, name + ".mp3");
|
||||||
|
|
||||||
|
if (sourceFile.renameTo(destinationFile)) {
|
||||||
|
MyInfo mydata = new MyInfo();
|
||||||
|
mydata.setLike(false);
|
||||||
|
mydata.setName(name);
|
||||||
|
mydata.setCustomization(true);
|
||||||
|
mydata.setAudioUrl(destinationFile.getAbsolutePath());
|
||||||
|
DbManager.getBoxBean().put(mydata);
|
||||||
|
} else {
|
||||||
|
Log.e("SaveActivity", "Failed to rename file");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String readFileFromUri(Context context, Uri uri) {
|
||||||
|
ContentResolver contentResolver = context.getContentResolver();
|
||||||
|
try (InputStream inputStream = contentResolver.openInputStream(uri);
|
||||||
|
FileOutputStream outputStream = new FileOutputStream(new File(getCacheDir(), "temp_audio_file.mp3"))) {
|
||||||
|
|
||||||
|
if (inputStream == null) {
|
||||||
|
Log.e("SaveActivity", "Input stream is null");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||||
|
outputStream.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
return new File(getCacheDir(), "temp_audio_file.mp3").getAbsolutePath();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e("SaveActivity", "Error reading file from URI", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initData() {
|
||||||
|
Intent intent = getIntent();
|
||||||
|
audioDuration = intent.getLongExtra(KEY_Time, 0);
|
||||||
|
int importFlag = intent.getIntExtra(KEY_import, 0);
|
||||||
|
|
||||||
|
if (importFlag == 1) {
|
||||||
|
path = intent.getStringExtra(KEY_Path);
|
||||||
|
Log.e("zzj", "save path is" + path);
|
||||||
|
} else {
|
||||||
|
String uriPath = intent.getStringExtra(KEY_Path);
|
||||||
|
Uri uri = Uri.parse(uriPath);
|
||||||
|
path = readFileFromUri(this, uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
stopPrank();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.CountDownTimer;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivitySplashBinding;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
public class SplashActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
private long time = 3000;
|
||||||
|
private ActivitySplashBinding binding;
|
||||||
|
private CountDownTimer countDownTimer;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
binding = ActivitySplashBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
Common.setStatusBarTextColor(this, true);
|
||||||
|
countDownTimer = new CountDownTimer(time, 200) {
|
||||||
|
@Override
|
||||||
|
public void onTick(long millisUntilFinished) {
|
||||||
|
int progressPercentage = (int) ((100 * millisUntilFinished) / time);
|
||||||
|
int Percentage = 100 - progressPercentage;
|
||||||
|
binding.loadingPb.setProgress(Percentage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFinish() {
|
||||||
|
welcomeMain();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
countDownTimer.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void welcomeMain() {
|
||||||
|
binding.loadingPb.setProgress(100);
|
||||||
|
Intent intent = new Intent(this, MainActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (countDownTimer != null) {
|
||||||
|
countDownTimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,88 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.SystemClock;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.R;
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivityStartRecorderBinding;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
import com.prank.sound.funnyapp.mytool.RecorderManager;
|
||||||
|
|
||||||
|
public class StartRecorderActivity extends AppCompatActivity {
|
||||||
|
private ActivityStartRecorderBinding binding;
|
||||||
|
private long startTime;
|
||||||
|
private long elapsedTime;
|
||||||
|
private Handler handler = new Handler();
|
||||||
|
private Runnable runnable;
|
||||||
|
private boolean isCreate = false;
|
||||||
|
|
||||||
|
private RecorderManager recorderManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
binding = ActivityStartRecorderBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
Common.setStatusBarTextColor(this, true);
|
||||||
|
recorderManager = new RecorderManager(this);
|
||||||
|
|
||||||
|
binding.audioTime.setText(R.string.time_init);
|
||||||
|
|
||||||
|
initEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initEvent() {
|
||||||
|
binding.back.setOnClickListener(v -> finish());
|
||||||
|
binding.imMic.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
binding.imMic.setSelected(!binding.imMic.isSelected());
|
||||||
|
createSound();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createSound() {
|
||||||
|
if (!isCreate) {
|
||||||
|
recorderManager.startRecording();
|
||||||
|
isCreate = true;
|
||||||
|
runnable = new Runnable() {
|
||||||
|
@SuppressLint("DefaultLocale")
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
long currentTime = SystemClock.elapsedRealtime();
|
||||||
|
elapsedTime = currentTime - startTime;
|
||||||
|
int milliseconds = (int) (elapsedTime % 1000) / 10;
|
||||||
|
int seconds = (int) (elapsedTime / 1000) % 60;
|
||||||
|
int minutes = (int) (elapsedTime / (1000 * 60)) % 60;
|
||||||
|
binding.audioTime.setText(String.format("%02d : %02d : %02d", minutes, seconds, milliseconds));
|
||||||
|
handler.postDelayed(this, 10);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
startTime = SystemClock.elapsedRealtime();
|
||||||
|
handler.post(runnable);
|
||||||
|
} else {
|
||||||
|
recorderManager.stopRecording();
|
||||||
|
|
||||||
|
handler.removeCallbacks(runnable);
|
||||||
|
Intent intent = new Intent(StartRecorderActivity.this, SaveSoundsActivity.class);
|
||||||
|
intent.putExtra(SaveSoundsActivity.KEY_Time, elapsedTime);
|
||||||
|
intent.putExtra(SaveSoundsActivity.KEY_Path, recorderManager.getTempFileName());
|
||||||
|
intent.putExtra(SaveSoundsActivity.KEY_import, 1);
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
handler.removeCallbacks(runnable);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
package com.prank.sound.funnyapp.activity;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyBean;
|
||||||
|
import com.prank.sound.funnyapp.myinterface.OnClickItem;
|
||||||
|
import com.prank.sound.funnyapp.databinding.ActivityViewAllBinding;
|
||||||
|
import com.prank.sound.funnyapp.myadapter.AdapterViewAll;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Decoration;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
public class ViewAllActivity extends AppCompatActivity implements View.OnClickListener, OnClickItem {
|
||||||
|
|
||||||
|
private ActivityViewAllBinding activityListBinding;
|
||||||
|
private MyBean data;
|
||||||
|
private int colorIndex;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
Common.setStatusBarTextColor(this,true);
|
||||||
|
activityListBinding = ActivityViewAllBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(activityListBinding.getRoot());
|
||||||
|
data = (MyBean) getIntent().getSerializableExtra(Common.KEY_LIST_DATA);
|
||||||
|
colorIndex = getIntent().getIntExtra(Common.KEY_LIST_COLOR_POS,0);
|
||||||
|
activityListBinding.categoryName.setText(data.getName());
|
||||||
|
onList();
|
||||||
|
activityListBinding.back.setOnClickListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onList() {
|
||||||
|
Decoration itemHelper = new Decoration(10, 10, 0);
|
||||||
|
activityListBinding.listRecycler.addItemDecoration(itemHelper);
|
||||||
|
activityListBinding.listRecycler.setLayoutManager(new GridLayoutManager(this, 3));
|
||||||
|
AdapterViewAll adapterViewAll = new AdapterViewAll(this, data.getInfoList(),0,this);
|
||||||
|
activityListBinding.listRecycler.setAdapter(adapterViewAll);
|
||||||
|
adapterViewAll.setColorIndex(colorIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if(v.equals(activityListBinding.back)){
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClickSoundsListener(MyInfo data) {
|
||||||
|
Intent intent = new Intent(this, PlayItemActivity.class);
|
||||||
|
intent.putExtra(Common.KEY_PLAY_DATA, data);
|
||||||
|
intent.putExtra(Common.KEY_LIST_COLOR_POS, colorIndex);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
package com.prank.sound.funnyapp.bean;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.objectbox.Box;
|
||||||
|
import io.objectbox.BoxStore;
|
||||||
|
import io.objectbox.query.Query;
|
||||||
|
|
||||||
|
public class DbManager {
|
||||||
|
|
||||||
|
private static BoxStore store;
|
||||||
|
|
||||||
|
public static void init(Context context) {
|
||||||
|
store = MyObjectBox.builder()
|
||||||
|
.androidContext(context)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Box<MyInfo> getBoxBean() {
|
||||||
|
return store.boxFor(MyInfo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MyInfo> getAllLike() {
|
||||||
|
Query<MyInfo> query = DbManager.getBoxBean().query(MyInfo_.isLike.equal(true)).build();
|
||||||
|
List<MyInfo> data = query.find();
|
||||||
|
query.close();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MyInfo> getAllCustomization() {
|
||||||
|
Query<MyInfo> query = DbManager.getBoxBean().query(MyInfo_.isCustomization.equal(true)).build();
|
||||||
|
List<MyInfo> data = query.find();
|
||||||
|
query.close();
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static List<MyInfo> getMore() {
|
||||||
|
Query<MyInfo> query = DbManager.getBoxBean().query(MyInfo_.isCustomization.equal(false)).build();
|
||||||
|
List<MyInfo> data = query.find();
|
||||||
|
query.close();
|
||||||
|
Collections.shuffle(data);
|
||||||
|
return data.subList(0, 11);
|
||||||
|
}
|
||||||
|
public static boolean checkLike(MyInfo info) {
|
||||||
|
Query<MyInfo> query = DbManager.getBoxBean().query(MyInfo_.name.equal(info.getName())).build();
|
||||||
|
MyInfo data = query.findFirst();
|
||||||
|
query.close();
|
||||||
|
if (data != null) {
|
||||||
|
return data.isLike();
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkName(String name) {
|
||||||
|
Query<MyInfo> query = DbManager.getBoxBean().query(MyInfo_.name.equal(name)).build();
|
||||||
|
MyInfo data = query.findFirst();
|
||||||
|
query.close();
|
||||||
|
if (data != null) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addLike(MyInfo info) {
|
||||||
|
info.setLike(true);
|
||||||
|
DbManager.getBoxBean().put(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeLike(MyInfo info) {
|
||||||
|
info.setLike(false);
|
||||||
|
DbManager.getBoxBean().put(info);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
50
app/src/main/java/com/prank/sound/funnyapp/bean/MyBean.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package com.prank.sound.funnyapp.bean;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.objectbox.annotation.Entity;
|
||||||
|
import io.objectbox.annotation.Id;
|
||||||
|
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class MyBean implements Serializable {
|
||||||
|
@Id
|
||||||
|
private long id;
|
||||||
|
private String name;
|
||||||
|
private String covert;
|
||||||
|
|
||||||
|
private List<MyInfo> infoList;
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCovert() {
|
||||||
|
return covert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCovert(String covert) {
|
||||||
|
this.covert = covert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MyInfo> getInfoList() {
|
||||||
|
return infoList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInfoList(List<MyInfo> infoList) {
|
||||||
|
this.infoList = infoList;
|
||||||
|
}
|
||||||
|
}
|
||||||
78
app/src/main/java/com/prank/sound/funnyapp/bean/MyInfo.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package com.prank.sound.funnyapp.bean;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import io.objectbox.annotation.Entity;
|
||||||
|
import io.objectbox.annotation.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class MyInfo implements Serializable {
|
||||||
|
@Id
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String covert;
|
||||||
|
|
||||||
|
private String audioUrl;
|
||||||
|
private boolean isLike;
|
||||||
|
|
||||||
|
private boolean isCustomization;
|
||||||
|
private int colorIndex;
|
||||||
|
|
||||||
|
public int getColorIndex() {
|
||||||
|
return colorIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColorIndex(int colorIndex) {
|
||||||
|
this.colorIndex = colorIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCustomization() {
|
||||||
|
return isCustomization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomization(boolean customization) {
|
||||||
|
isCustomization = customization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLike() {
|
||||||
|
return isLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLike(boolean like) {
|
||||||
|
isLike = like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCovert() {
|
||||||
|
return covert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCovert(String covert) {
|
||||||
|
this.covert = covert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAudioUrl() {
|
||||||
|
return audioUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAudioUrl(String audioUrl) {
|
||||||
|
this.audioUrl = audioUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,104 @@
|
|||||||
|
package com.prank.sound.funnyapp.dialog;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.PopupWindow;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.myinterface.OnClickItemTimer;
|
||||||
|
import com.prank.sound.funnyapp.databinding.DialogStartTimerBinding;
|
||||||
|
import com.prank.sound.funnyapp.mytool.MyText;
|
||||||
|
|
||||||
|
public class DialogStartTimer implements View.OnClickListener {
|
||||||
|
private DialogStartTimerBinding binding;
|
||||||
|
private PopupWindow popupWindow;
|
||||||
|
private OnClickItemTimer mListener;
|
||||||
|
|
||||||
|
public DialogStartTimer(Activity context, OnClickItemTimer listener) {
|
||||||
|
mListener = listener;
|
||||||
|
binding = DialogStartTimerBinding.inflate(context.getLayoutInflater());
|
||||||
|
popupWindow = new PopupWindow(binding.getRoot(), ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
popupWindow.setBackgroundDrawable(new BitmapDrawable());
|
||||||
|
popupWindow.setOutsideTouchable(true);
|
||||||
|
popupWindow.setFocusable(true);
|
||||||
|
binding.tvOff.setSelected(true);
|
||||||
|
binding.tvOff.setOnClickListener(this);
|
||||||
|
binding.tv15s.setOnClickListener(this);
|
||||||
|
binding.tv30s.setOnClickListener(this);
|
||||||
|
binding.tv1m.setOnClickListener(this);
|
||||||
|
binding.tv5m.setOnClickListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showTop(View view) {
|
||||||
|
|
||||||
|
int[] location = new int[2];
|
||||||
|
view.getLocationOnScreen(location);
|
||||||
|
|
||||||
|
int x = location[0];
|
||||||
|
int y = location[1];
|
||||||
|
|
||||||
|
|
||||||
|
int popupHeight = popupWindow.getHeight();
|
||||||
|
int height = view.getHeight();
|
||||||
|
int width = view.getWidth();
|
||||||
|
Log.d("-------------", "--------x=" + x + "---y=" + y + "----popupHeight=" + popupHeight);
|
||||||
|
// popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, x-30, y - popupHeight+height);
|
||||||
|
popupWindow.showAsDropDown(view, -50,
|
||||||
|
0,
|
||||||
|
Gravity.NO_GRAVITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSelected(MyText tv) {
|
||||||
|
int childCount = binding.layoutTime.getChildCount();
|
||||||
|
for (int i = 0; i < childCount; i++) {
|
||||||
|
View child = binding.layoutTime.getChildAt(i);
|
||||||
|
if (child instanceof MyText) {
|
||||||
|
MyText tvTimer = (MyText) child;
|
||||||
|
if (tvTimer.equals(tv)) {
|
||||||
|
tvTimer.setSelected(true);
|
||||||
|
} else {
|
||||||
|
tvTimer.setSelected(false);
|
||||||
|
}
|
||||||
|
System.out.println("TextView: " + tvTimer.getText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void hide() {
|
||||||
|
popupWindow.dismiss();
|
||||||
|
|
||||||
|
}
|
||||||
|
public void setOffSelected() {
|
||||||
|
setSelected(binding.tvOff);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
if (v instanceof MyText) {
|
||||||
|
MyText v1 = (MyText) v;
|
||||||
|
String string = v1.getText().toString();
|
||||||
|
switch (string){
|
||||||
|
case "off":
|
||||||
|
mListener.onClickTimerListener(-1);
|
||||||
|
break;
|
||||||
|
case "15 sec":
|
||||||
|
mListener.onClickTimerListener(15*1000L);
|
||||||
|
break;
|
||||||
|
case "30 sec":
|
||||||
|
mListener.onClickTimerListener(30*1000L);
|
||||||
|
break;
|
||||||
|
case "1 min":
|
||||||
|
mListener.onClickTimerListener(60*1000L);
|
||||||
|
break;
|
||||||
|
case "5 min":
|
||||||
|
mListener.onClickTimerListener(5*60*1000L);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
setSelected(v1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,131 @@
|
|||||||
|
package com.prank.sound.funnyapp.myadapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.prank.sound.funnyapp.R;
|
||||||
|
import com.prank.sound.funnyapp.activity.PlayItemActivity;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
import com.prank.sound.funnyapp.databinding.AdapterFavoriteBinding;
|
||||||
|
import com.prank.sound.funnyapp.bean.DbManager;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class AdapterFavorite extends RecyclerView.Adapter<AdapterFavorite.ViewHolder> {
|
||||||
|
|
||||||
|
private List<MyInfo> mValues;
|
||||||
|
private Context mCOn;
|
||||||
|
private boolean showDelete = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public AdapterFavorite(Context context, List<MyInfo> items, boolean showDelete) {
|
||||||
|
mValues = items;
|
||||||
|
mCOn = context;
|
||||||
|
this.showDelete = showDelete;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateData(List<MyInfo> items) {
|
||||||
|
mValues = items;
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
|
||||||
|
return new ViewHolder(AdapterFavoriteBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
|
MyInfo info = mValues.get(position);
|
||||||
|
holder.vb.ttvName.setText(info.getName());
|
||||||
|
int colorIndex = info.getColorIndex();
|
||||||
|
holder.vb.layout.setBackground(ContextCompat.getDrawable(mCOn, Common.recorderBgs[colorIndex]));
|
||||||
|
if (info.isCustomization()) {
|
||||||
|
Glide.with(mCOn).load(R.drawable.def_sounds).into(holder.vb.image);
|
||||||
|
} else {
|
||||||
|
Glide.with(mCOn).load(info.getCovert()).into(holder.vb.image);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (holder.vb.layout.getTag() == null) {
|
||||||
|
holder.vb.layout.setTag(true);
|
||||||
|
|
||||||
|
holder.vb.layout.post(() -> {
|
||||||
|
int width = holder.vb.layout.getWidth();
|
||||||
|
ViewGroup.LayoutParams params = holder.vb.layout.getLayoutParams();
|
||||||
|
params.height = width;
|
||||||
|
holder.vb.layout.setLayoutParams(params);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (showDelete) {
|
||||||
|
// if(position == mValues.size()-1||position == mValues.size()-2){
|
||||||
|
// holder.vb.view.setVisibility(View.VISIBLE);
|
||||||
|
// }else {
|
||||||
|
// holder.vb.view.setVisibility(View.GONE);
|
||||||
|
// }
|
||||||
|
holder.vb.imDelete.setVisibility(View.VISIBLE);
|
||||||
|
holder.vb.imDelete.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
DbManager.getBoxBean().remove(info);
|
||||||
|
String audioUrl = info.getAudioUrl();
|
||||||
|
int pos = holder.getBindingAdapterPosition();
|
||||||
|
mValues.remove(pos);
|
||||||
|
notifyItemRemoved(pos);
|
||||||
|
File file = new File(audioUrl);
|
||||||
|
if (file.exists()) {
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
holder.vb.imDelete.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
holder.vb.layout.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(mCOn, PlayItemActivity.class);
|
||||||
|
intent.putExtra(Common.KEY_PLAY_DATA, info);
|
||||||
|
intent.putExtra(Common.KEY_LIST_COLOR_POS, colorIndex);
|
||||||
|
mCOn.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return mValues.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
public AdapterFavoriteBinding vb;
|
||||||
|
|
||||||
|
public ViewHolder(AdapterFavoriteBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
vb = binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,80 @@
|
|||||||
|
package com.prank.sound.funnyapp.myadapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.prank.sound.funnyapp.activity.ViewAllActivity;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyBean;
|
||||||
|
import com.prank.sound.funnyapp.databinding.AdapterMainBinding;
|
||||||
|
import com.prank.sound.funnyapp.mytool.Common;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class AdapterMain extends RecyclerView.Adapter<AdapterMain.ViewHolder> {
|
||||||
|
|
||||||
|
private final List<MyBean> mValues;
|
||||||
|
|
||||||
|
private Context mCon;
|
||||||
|
|
||||||
|
|
||||||
|
public AdapterMain(Context context, List<MyBean> items) {
|
||||||
|
mValues = items;
|
||||||
|
this.mCon = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
|
||||||
|
return new ViewHolder(AdapterMainBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
|
int i = position % 6;
|
||||||
|
holder.vb.relative.setBackground(ContextCompat.getDrawable(mCon, Common.bgs[i]));
|
||||||
|
MyBean myBean = mValues.get(position);
|
||||||
|
String covert = myBean.getCovert();
|
||||||
|
Glide.with(mCon).load(covert).into(holder.vb.image);
|
||||||
|
holder.vb.name.setText(myBean.getName());
|
||||||
|
holder.vb.relative.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(mCon, ViewAllActivity.class);
|
||||||
|
intent.putExtra(Common.KEY_LIST_DATA, myBean);
|
||||||
|
intent.putExtra(Common.KEY_LIST_COLOR_POS, i);
|
||||||
|
mCon.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// if(position == mValues.size()-1||position == mValues.size()-2){
|
||||||
|
// holder.vb.view.setVisibility(View.VISIBLE);
|
||||||
|
// }else {
|
||||||
|
// holder.vb.view.setVisibility(View.GONE);
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return mValues.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
private AdapterMainBinding vb;
|
||||||
|
|
||||||
|
public ViewHolder(AdapterMainBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
vb = binding;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
package com.prank.sound.funnyapp.myadapter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
import com.prank.sound.funnyapp.myinterface.OnClickItem;
|
||||||
|
import com.prank.sound.funnyapp.databinding.AdapterViewAllBinding;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
public class AdapterViewAll extends RecyclerView.Adapter<AdapterViewAll.ViewHolder> {
|
||||||
|
private final List<MyInfo> mValues;
|
||||||
|
private Context mCon;
|
||||||
|
private int type;
|
||||||
|
private OnClickItem mListener;
|
||||||
|
private int colorIndex;
|
||||||
|
public void setColorIndex(int colorIndex) {
|
||||||
|
this.colorIndex = colorIndex;
|
||||||
|
}
|
||||||
|
public AdapterViewAll(Context context, List<MyInfo> items, int mType, OnClickItem listener) {
|
||||||
|
mValues = items;
|
||||||
|
this.mCon = context;
|
||||||
|
type = mType;
|
||||||
|
mListener = listener;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
return new ViewHolder(AdapterViewAllBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(final ViewHolder holder, int position) {
|
||||||
|
// holder.vb.relative.setBackground(ContextCompat.getDrawable(mCon, MyUtils.bgs[colorIndex]));
|
||||||
|
|
||||||
|
if (holder.vb.relative.getTag() == null) {
|
||||||
|
holder.vb.relative.setTag(true);
|
||||||
|
|
||||||
|
holder.vb.relative.post(() -> {
|
||||||
|
int width = holder.vb.relative.getWidth();
|
||||||
|
ViewGroup.LayoutParams params = holder.vb.relative.getLayoutParams();
|
||||||
|
params.height = width;
|
||||||
|
holder.vb.relative.setLayoutParams(params);
|
||||||
|
Log.d("------","------layoutParams.width="+width);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
MyInfo info = mValues.get(position);
|
||||||
|
String covert = info.getCovert();
|
||||||
|
Glide.with(mCon).load(covert).into(holder.vb.image);
|
||||||
|
holder.vb.name.setText(info.getName());
|
||||||
|
holder.vb.getRoot().setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
mListener.onClickSoundsListener(info);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return mValues.size();
|
||||||
|
}
|
||||||
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
private AdapterViewAllBinding vb;
|
||||||
|
public ViewHolder(AdapterViewAllBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
vb = binding;
|
||||||
|
ViewGroup.LayoutParams layoutParams = vb.relative.getLayoutParams();
|
||||||
|
Log.d("------","------layoutParams.width="+layoutParams.width);
|
||||||
|
|
||||||
|
// if(type == 0){
|
||||||
|
// layoutParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;
|
||||||
|
// vb.name.setMaxLines(2);
|
||||||
|
// }else {
|
||||||
|
// layoutParams.width = (int) MyUtils.dpToPx(130);
|
||||||
|
// vb.name.setMaxLines(1);
|
||||||
|
// }
|
||||||
|
vb.relative.setLayoutParams(layoutParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package com.prank.sound.funnyapp.myinterface;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
|
||||||
|
public interface OnClickItem {
|
||||||
|
|
||||||
|
void onClickSoundsListener(MyInfo data);
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
package com.prank.sound.funnyapp.myinterface;
|
||||||
|
|
||||||
|
public interface OnClickItemTimer {
|
||||||
|
|
||||||
|
void onClickTimerListener(long time);
|
||||||
|
}
|
||||||
174
app/src/main/java/com/prank/sound/funnyapp/mytool/Common.java
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
package com.prank.sound.funnyapp.mytool;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.media.AudioManager;
|
||||||
|
import android.media.MediaMetadataRetriever;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.widget.SeekBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.MyApp;
|
||||||
|
import com.prank.sound.funnyapp.R;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyInfo;
|
||||||
|
import com.prank.sound.funnyapp.bean.MyBean;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Common {
|
||||||
|
|
||||||
|
public static int[] bgs = new int[]{R.drawable.oval_stoke_3,R.drawable.oval_stoke_3,R.drawable.oval_stoke_3,R.drawable.oval_stoke_3,
|
||||||
|
R.drawable.oval_stoke_3,R.drawable.oval_stoke_3};
|
||||||
|
|
||||||
|
public static int[] childBgs = new int[]{R.drawable.oval_stoke_3,R.drawable.oval_stoke_3,R.drawable.oval_stoke_3,R.drawable.oval_stoke_3,
|
||||||
|
R.drawable.oval_stoke_3,R.drawable.oval_stoke_3};
|
||||||
|
|
||||||
|
public static int[] recorderBgs = new int[]{R.drawable.rect_stoke_12,R.drawable.rect_stoke_12,R.drawable.rect_stoke_12,R.drawable.rect_stoke_12,
|
||||||
|
R.drawable.rect_stoke_12,R.drawable.rect_stoke_12};
|
||||||
|
public static final String KEY_LIST_COLOR_POS = "list_page_color_pos";
|
||||||
|
public static final String KEY_LIST_DATA = "list_page_data";
|
||||||
|
public static final String KEY_PLAY_DATA = "play_page_data";
|
||||||
|
public static final String KEY_PLAY_COLOR_POS = "play_page_color_pos";
|
||||||
|
|
||||||
|
public static final int REQUEST_READ_STORAGE_PERMISSION = 5;
|
||||||
|
|
||||||
|
|
||||||
|
public static String[] permission_read_audio = {Manifest.permission.READ_MEDIA_AUDIO};
|
||||||
|
|
||||||
|
public static String permission_record_audio = Manifest.permission.RECORD_AUDIO;
|
||||||
|
public static String[] permission_store = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
|
||||||
|
|
||||||
|
|
||||||
|
public static void initFont(TextView tv) {
|
||||||
|
tv.setTypeface(MyApp.defaultFont);
|
||||||
|
}
|
||||||
|
public static void setStatusBarTextColor(Activity activity, boolean dark) {
|
||||||
|
Window window = activity.getWindow();
|
||||||
|
View decor = window.getDecorView();
|
||||||
|
if (dark) {
|
||||||
|
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||||
|
} else {
|
||||||
|
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
|
||||||
|
}
|
||||||
|
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getString(InputStream input) {
|
||||||
|
try {
|
||||||
|
char[] charArray = new char[input.available()];
|
||||||
|
int count = 0;
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
InputStreamReader inputStreamReader = new InputStreamReader(input);
|
||||||
|
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
|
||||||
|
while ((count = bufferedReader.read(charArray)) != -1) {
|
||||||
|
stringWriter.write(charArray, 0, count);
|
||||||
|
}
|
||||||
|
return stringWriter.toString();
|
||||||
|
} catch (IOException exception) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setVolume(Context context, SeekBar seekBar) {
|
||||||
|
AudioManager audioManager = (AudioManager)context.getSystemService(AppCompatActivity.AUDIO_SERVICE);
|
||||||
|
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
|
||||||
|
seekBar.setMax(maxVolume);
|
||||||
|
seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
|
||||||
|
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||||
|
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public static List<MyBean> getBean(String str) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
List<MyBean> data = new ArrayList<MyBean>();
|
||||||
|
JSONArray jsonArray = new JSONArray(str);
|
||||||
|
|
||||||
|
for (int i = 0; i < jsonArray.length(); i++) {
|
||||||
|
JSONObject it = jsonArray.getJSONObject(i);
|
||||||
|
JSONArray listArray = it.getJSONArray("list");
|
||||||
|
List<MyInfo> list = new ArrayList<>();
|
||||||
|
for (int k = 0; k < listArray.length(); k++) {
|
||||||
|
JSONObject listBean = listArray.getJSONObject(k);
|
||||||
|
MyInfo info = new MyInfo();
|
||||||
|
info.setAudioUrl(listBean.getString("mp3Url"));
|
||||||
|
info.setCovert(listBean.getString("preUrl"));
|
||||||
|
info.setName(listBean.getString("title"));
|
||||||
|
list.add(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
MyBean newBean = new MyBean();
|
||||||
|
newBean.setCovert(it.getString("categoryUrl"));
|
||||||
|
newBean.setInfoList(list);
|
||||||
|
newBean.setName(it.getString("categoryName"));
|
||||||
|
data.add(newBean);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
} catch (JSONException jo) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static long getAudioDuration(Context context, Uri uri) {
|
||||||
|
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
|
||||||
|
long duration = 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
ContentResolver contentResolver = context.getContentResolver();
|
||||||
|
retriever.setDataSource(context, uri);
|
||||||
|
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
|
||||||
|
duration = Long.parseLong(time);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
retriever.release();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
public static float dpToPx(float dpValue) {
|
||||||
|
float density = MyApp.app.getResources().getDisplayMetrics().density;
|
||||||
|
return density * dpValue + 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
package com.prank.sound.funnyapp.mytool;
|
||||||
|
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.MyApp;
|
||||||
|
|
||||||
|
|
||||||
|
public class Decoration extends RecyclerView.ItemDecoration {
|
||||||
|
|
||||||
|
private int v, h, ex;
|
||||||
|
|
||||||
|
public Decoration(int v, int h, int ex) {
|
||||||
|
this.v = Math.round(dpToPx(v));
|
||||||
|
this.h = Math.round(dpToPx(h));
|
||||||
|
this.ex = Math.round(dpToPx(ex));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
|
||||||
|
super.getItemOffsets(outRect, view, parent, state);
|
||||||
|
int spanCount = 1;
|
||||||
|
int spanSize = 1;
|
||||||
|
int spanIndex = 0;
|
||||||
|
|
||||||
|
int childAdapterPosition = parent.getChildAdapterPosition(view);
|
||||||
|
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
|
||||||
|
if (layoutManager instanceof StaggeredGridLayoutManager) {
|
||||||
|
StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
|
||||||
|
StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
|
||||||
|
spanCount = staggeredGridLayoutManager.getSpanCount();
|
||||||
|
if (layoutParams.isFullSpan()) {
|
||||||
|
spanSize = spanCount;
|
||||||
|
}
|
||||||
|
spanIndex = layoutParams.getSpanIndex();
|
||||||
|
} else if (layoutManager instanceof GridLayoutManager) {
|
||||||
|
GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
|
||||||
|
GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams();
|
||||||
|
spanCount = gridLayoutManager.getSpanCount();
|
||||||
|
spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(childAdapterPosition);
|
||||||
|
spanIndex = layoutParams.getSpanIndex();
|
||||||
|
} else if (layoutManager instanceof LinearLayoutManager) {
|
||||||
|
outRect.left = v;
|
||||||
|
outRect.right = v;
|
||||||
|
outRect.bottom = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spanSize == spanCount) {
|
||||||
|
outRect.left = v + ex;
|
||||||
|
outRect.right = v + ex;
|
||||||
|
outRect.bottom = h;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
int itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount;
|
||||||
|
int left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex;
|
||||||
|
int right = itemAllSpacing - left;
|
||||||
|
outRect.left = left;
|
||||||
|
outRect.right = right;
|
||||||
|
outRect.bottom = h;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static float dpToPx(float dpValue) {
|
||||||
|
float density = MyApp.app.getResources().getDisplayMetrics().density;
|
||||||
|
return density * dpValue + 0.5f;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
package com.prank.sound.funnyapp.mytool;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.TypedArray;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.prank.sound.funnyapp.R;
|
||||||
|
|
||||||
|
|
||||||
|
public class MyText extends androidx.appcompat.widget.AppCompatTextView {
|
||||||
|
|
||||||
|
|
||||||
|
public MyText(Context context, @Nullable AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
initAttrs(context,attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void initAttrs(Context context, AttributeSet attrs){
|
||||||
|
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyTV);
|
||||||
|
boolean aBoolean = typedArray.getBoolean(R.styleable.MyTV_apply_font,false);
|
||||||
|
if(aBoolean){
|
||||||
|
Common.initFont(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedArray.recycle();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
package com.prank.sound.funnyapp.mytool;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.media.MediaRecorder;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class RecorderManager {
|
||||||
|
private MediaRecorder mediaRecorder;
|
||||||
|
private String tempFileName;
|
||||||
|
private String fileName;
|
||||||
|
private boolean isRecording = false;
|
||||||
|
|
||||||
|
public RecorderManager(Context context) {
|
||||||
|
|
||||||
|
File dir = context.getCacheDir();
|
||||||
|
File file = new File(dir, "temp_audio.mp3");
|
||||||
|
tempFileName = file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void startRecording() {
|
||||||
|
if (isRecording) return;
|
||||||
|
mediaRecorder = new MediaRecorder();
|
||||||
|
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
|
||||||
|
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
|
||||||
|
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
|
||||||
|
mediaRecorder.setOutputFile(tempFileName);
|
||||||
|
|
||||||
|
try {
|
||||||
|
mediaRecorder.prepare();
|
||||||
|
mediaRecorder.start();
|
||||||
|
isRecording = true;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopRecording() {
|
||||||
|
if (!isRecording) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
mediaRecorder.stop();
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
mediaRecorder.release();
|
||||||
|
mediaRecorder = null;
|
||||||
|
isRecording = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTempFileName() {
|
||||||
|
return tempFileName;
|
||||||
|
}
|
||||||
|
}
|
||||||
5
app/src/main/res/color/seletor_color_timer.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:color="@color/color_CECECE" android:state_selected="false"/>
|
||||||
|
<item android:color="@color/color_86e5fe" android:state_selected="true"/>
|
||||||
|
</selector>
|
||||||
9
app/src/main/res/drawable/back_black.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M395.2,513.6l323.1,-312.4c19.1,-18.4 19.1,-48.3 0,-66.7 -19.1,-18.4 -49.9,-18.4 -69,0L291.8,480.3c-19.1,18.4 -19.1,48.3 0,66.7l357.6,345.7c9.5,9.2 22,13.8 34.5,13.8 12.5,0 25,-4.6 34.5,-13.8 19.1,-18.4 19.1,-48.2 0,-66.7L395.2,513.6z"
|
||||||
|
android:fillColor="@color/black"/>
|
||||||
|
</vector>
|
||||||
24
app/src/main/res/drawable/def_sounds.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="256dp"
|
||||||
|
android:height="256dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M904,960H120c-30.9,0 -56,-25.1 -56,-56V120c0,-30.9 25.1,-56 56,-56h784c30.9,0 56,25.1 56,56v784c0,30.9 -25.1,56 -56,56z"
|
||||||
|
android:fillColor="@color/color_A18DFD"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M512,512m-336,0a336,336 0,1 0,672 0,336 336,0 1,0 -672,0Z"
|
||||||
|
android:fillColor="@color/color_897BED"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M512,512m-112,0a112,112 0,1 0,224 0,112 112,0 1,0 -224,0Z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M512,512m-42,0a42,42 0,1 0,84 0,42 42,0 1,0 -84,0Z"
|
||||||
|
android:fillColor="@color/color_86e5fe"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M842.7,239c-34.7,0 -63,-28.3 -63,-63s28.3,-63 63,-63 63,28.3 63,63 -28.3,63 -63,63zM842.7,155c-11.6,0 -21,9.4 -21,21s9.4,21 21,21 21,-9.4 21,-21 -9.4,-21 -21,-21z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M715.1,597.2c-6.7,0 -13.3,-3.2 -17.3,-9.1 -6.6,-9.6 -4.1,-22.6 5.4,-29.2l52.8,-36.2 67.6,-309.2c2.5,-11.3 13.7,-18.5 25,-16 11.3,2.5 18.5,13.7 16,25L795.3,539.8a21,21 0,0 1,-8.6 12.8l-59.7,40.9a20.9,20.9 0,0 1,-11.9 3.7z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
</vector>
|
||||||
12
app/src/main/res/drawable/delete_red.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="256dp"
|
||||||
|
android:height="256dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M1009.2,513.5C1009.2,236 788.5,15.4 511,15.4 233.5,15.4 13.3,236 13.3,513.5c0,277.5 220.7,498.2 498.2,498.2 277,0 497.7,-220.7 497.7,-498.2zM1009.2,513.5"
|
||||||
|
android:fillColor="@color/color_FA666B"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M719.9,627.7l-114.2,-114.2L719.9,399.4c29.2,-29.2 29.2,-58.9 0,-88.1l-6.7,-6.7c-29.2,-29.2 -58.9,-29.2 -88.1,0L511,418.8 397.3,304.6c-29.2,-29.2 -58.9,-29.2 -88.1,0L302.1,311.3c-29.2,29.2 -29.2,58.9 0,88.1l114.2,114.2L302.1,627.7c-29.2,29.2 -29.2,58.9 0,88.1l6.7,6.7c29.2,29.2 58.9,29.2 88.1,0l114.2,-114.2 114.2,114.2c29.2,29.2 58.9,29.2 88.1,0l6.7,-6.7c29.2,-29.7 29.2,-58.9 0,-88.1z"
|
||||||
|
android:fillColor="#FFFFFF"/>
|
||||||
|
</vector>
|
||||||
57
app/src/main/res/drawable/ic_empty_data.xml
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="256dp"
|
||||||
|
android:height="256dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M64,826.6c0,70.6 203.2,128 454.2,128s454.1,-57.2 454.1,-128 -203.1,-128 -454.1,-128S64,756.1 64,826.6zM64,826.6"
|
||||||
|
android:fillColor="#DEDEDE"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M795.6,740.3L600,912l-7,-332.3 208,-123.4zM795.6,740.3"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M593.8,908.6L228.8,802L228.8,678.6l307.7,90.6c20.2,-142 37,-197.4 49.4,-167.5s15,132.3 8,306.9zM588.5,574.4l-97.9,-21.3 -6.3,-69.5L484.2,365.4l306.9,85.6h10.5zM588.5,574.4"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M490.6,557.6l-254.9,-70.6 254.9,-123.4zM490.6,557.6"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M878.6,618.5l-74.8,-152.5v132.3zM878.6,618.5"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M489.8,562.1a4.3,4.3 0,0 1,-4.5 -4.5L485.3,372.6a4.5,4.5 0,1 1,9 0L494.2,557.6a4.4,4.4 0,0 1,-4.5 4.5zM489.8,562.1"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M588.5,584.9h-0.8L229.6,493.3c-1.8,-0.8 -3.4,-1.8 -3.4,-3.4a4.7,4.7 0,0 1,2.6 -4.4l260.2,-124.5a1.8,1.8 0,0 1,2.6 0l311.4,86.4a4.3,4.3 0,0 1,1.6 8L591.1,584c-0.8,0 -1.8,1 -2.6,1zM243.8,487.3l344,88 202.5,-122.4 -299.8,-83.8zM243.8,487.3"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M600,918.3h-1.8a3.5,3.5 0,0 1,-2.6 -3.4L584,580.7c0,-1.8 0.8,-3.4 1.8,-3.4l213.4,-128.6a4.5,4.5 0,0 1,4.5 0,4.4 4.4,0 0,1 2.6,3.4v290.1a5.3,5.3 0,0 1,-1.8 3.4l-201.9,172.8zM593,582.3L603.4,904l193.2,-164.8v-280zM593,582.3"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M600,918.3h-0.8l-369.3,-107.7a5.4,5.4 0,0 1,-3.4 -4.5L226.5,677.6a4.3,4.3 0,0 1,4.5 -4.5,4.2 4.2,0 0,1 4.4,4.5v126l360.7,105.8v-0.8a4.5,4.5 0,1 1,9 0v6.3a3.8,3.8 0,0 1,-1.8 3.4zM600,918.3"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M530.2,768.4L161.6,655.5l68.8,-166.7 358.1,91.6zM530.2,768.4"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M530.2,772.9h-0.8L160,660c-0.8,0 -1.8,-0.8 -2.6,-2.6a2.8,2.8 0,0 1,0 -3.4l68.8,-166.6a4.1,4.1 0,0 1,5.2 -2.6L589.5,576a4.2,4.2 0,0 1,2.6 1.8,2.8 2.8,0 0,1 0,3.4l-58.3,189c0,1.6 -1.8,2.6 -3.6,2.6zM166.9,652.9L528,763.1l56,-179.8 -351,-89zM876.7,627.4h-0.8l-74.8,-21.3a5.4,5.4 0,0 1,-3.4 -4.5L797.7,451c0,-1.8 1.8,-3.4 3.4,-4.5a4.6,4.6 0,0 1,5.3 2.6l74.8,155.9v17.6a3.6,3.6 0,0 1,-1.8 3.4,2.6 2.6,0 0,1 -2.6,1.4zM806.1,598.3l65.9,19.4L872,608.8l-66.2,-137.6z"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M880,86.6c-6.3,-8.9 -49.4,0.8 -68.7,30 -5.3,8.9 -11.6,36.2 -7.1,29.9 11.5,-16.8 32.6,-7.1 48.6,-20.2 13.1,-11.3 32.6,-32.6 27.3,-40zM880,86.6"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M804.3,149.4h-1.8c-4.5,-2.6 4.5,-28.1 7.1,-33.6a85.4,85.4 0,0 1,59.8 -34.4,12.9 12.9,0 0,1 11.5,4.5c8,11.5 -26.5,42.2 -27.3,42.2a42.2,42.2 0,0 1,-25.5 9c-8.9,1.8 -17.5,2.6 -22.8,10.5a1.2,1.2 0,0 1,-1 1.8zM870.5,84.9a76.6,76.6 0,0 0,-56.5 32,104 104,0 0,0 -8,24 35,35 0,0 1,22.8 -8.9,44.3 44.3,0 0,0 22.9,-8c15,-13.1 29.9,-32 26.5,-36.2 -0.8,-1.5 -3.7,-2.6 -8,-2.6zM870.5,84.9"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M826.4,127.4l-3.4,-2.6c16,-20.2 34.4,-36.2 73.2,-46.7 3.4,-0.8 5.3,-1.8 6.3,-1.8s1.8,-0.8 7.1,-0.8l0.8,4.5a26.4,26.4 0,0 1,-6.3 0.8,65.7 65.7,0 0,0 -6.3,1.8c-38.1,9.4 -56,24 -71.4,44.9zM826.4,127.4M856,149.4c30.6,49.2 31.4,107.1 2.1,139a112.6,112.6 0,0 1,-37 24c4.3,-22.8 -1.3,-51 -11.8,-65.3a20.9,20.9 0,0 0,-14.3 -9.5,29 29,0 0,0 -24,10.6 44.9,44.9 0,0 0,-16 36.2,42.4 42.4,0 0,0 21.8,32l0.6,0.6a53.4,53.4 0,0 0,39.4 1.8c-13.8,52.3 -76.9,79 -84.3,81.7l1.8,4.4a182.5,182.5 0,0 0,59.8 -38.6,86.4 86.4,0 0,0 26.5,-48.8 101.4,101.4 0,0 0,41 -26.2c30.5,-33 30.5,-92.8 -1.3,-144.6zM817.8,314.6a50.3,50.3 0,0 1,-38 -0.6l-1,-1.7c-15.4,-9.7 -18.8,-20.8 -18.8,-28.2a43.7,43.7 0,0 1,14.5 -33,28.6 28.6,0 0,1 20.6,-9.4 18.5,18.5 0,0 1,11.9 8,88.6 88.6,0 0,1 11.4,64z"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M137.4,831.1c-0.8,9 -37.8,19.4 -64,7.1 -9,-3.4 -24,-20.2 -18.6,-17.6 16,6.3 27.3,-8 44.9,-6.3 14.4,2.6 38.1,9.8 38.1,16.8zM137.4,831.1"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M100.3,846.1a78.2,78.2 0,0 1,-28.3 -5.2c-6.3,-2.6 -22.9,-16 -20.2,-20.2 0,0 0.8,-2.6 4.5,-0.8a28.2,28.2 0,0 0,22.1 -1.8,38.8 38.8,0 0,1 22.8,-3.4c8,0.8 40,8 40,18.6 0,2.6 -1.8,5.3 -6.3,7.1a130.1,130.1 0,0 1,-34.4 5.8zM58.1,824a60.9,60.9 0,0 0,15 12.3,69.4 69.4,0 0,0 57.2,-1.8c2.6,-1.8 3.4,-2.6 3.4,-3.4 0,-4.5 -18.6,-11.5 -36.2,-14.2a52.9,52.9 0,0 0,-20.2 3.4,28.5 28.5,0 0,1 -19.1,3.7zM58.1,824"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M150.7,832.7a123.2,123.2 0,0 0,-43.3 -1.8,78.2 78.2,0 0,1 -32.6,-1.8l1.8,-4.5a73.5,73.5 0,0 0,31 1.8,127.1 127.1,0 0,1 44.1,1.8zM150.7,832.7"
|
||||||
|
android:fillColor="#AAAAAA"/>
|
||||||
|
</vector>
|
||||||
12
app/src/main/res/drawable/main_img_add_like.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="455.3dp"
|
||||||
|
android:height="256dp"
|
||||||
|
android:viewportWidth="1821"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/color_D6242A"
|
||||||
|
android:pathData="M954.1,729.5c0,-110.1 89.2,-199.3 199.3,-199.3 66.3,0 125.1,32.4 161.3,82.2 48.5,-75.4 81.4,-161.5 81.4,-256C1396.1,200.5 1270.7,73.3 1117,73.3c-78.9,0 -153.7,32.8 -206.3,92.3C858.1,108.2 783.2,73.3 704.3,73.3c-153.7,0 -279.1,127.2 -279.1,283 0,350.7 453.1,584.5 471.3,592.7 4,2.1 10.1,4.1 14.2,4.1 4,0 10.1,-2 14.2,-4.1 5.3,-2.4 48,-24.2 105.7,-62.6 -46.6,-36.5 -76.5,-93.2 -76.5,-157"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/color_D6242A"
|
||||||
|
android:pathData="M1288.7,698.5h-106.2v-105.5c0,-8.4 -6.8,-15.2 -15.2,-15.2h-30.3c-8.4,0 -15.2,6.8 -15.2,15.2v105.5h-106.2c-8.4,0 -15.2,6.8 -15.2,15.2v30.3c0,8.4 6.8,15.2 15.2,15.2h106.2v106.9c0,8.4 6.8,15.2 15.2,15.2h30.3c8.4,0 15.2,-6.8 15.2,-15.2v-106.9h106.2c8.4,0 15.2,-6.8 15.2,-15.2v-30.3c-0,-8.4 -6.8,-15.2 -15.2,-15.2"/>
|
||||||
|
</vector>
|
||||||
9
app/src/main/res/drawable/main_img_reocrder.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="307.5dp"
|
||||||
|
android:height="256dp"
|
||||||
|
android:viewportWidth="1230"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M559.6,950.9a34.7,34.7 0,0 1,-0.3 -4.3L559.3,807.3c-145.1,-15.1 -258.2,-137.7 -258.2,-286.8L301.2,352.8h51.6v159.2C352.8,642.8 458.8,748.6 589.4,748.6 720.2,748.6 826.1,642.7 826.1,512L826.1,352.8h51.6v167.8c0,146.1 -108.6,266.8 -249.5,285.7v140.3c0,1.4 -0.1,2.9 -0.3,4.3h39a34.4,34.4 0,0 1,0 68.8L503.4,1019.7a34.4,34.4 0,0 1,0 -68.8h56.2zM404.4,185C404.4,82.8 487.3,0 589.4,0h8.6C700.2,0 783.1,82.9 783.1,185v327.1C783.1,614.2 700.2,697 598.1,697h-8.6C487.3,697 404.4,614.1 404.4,512.1L404.4,185zM404.4,189.3v51.6h86.1v-51.6L404.4,189.3zM593.7,189.3v51.6h189.3v-51.6L593.7,189.3zM404.4,301.2v51.6h86.1v-51.6L404.4,301.2zM593.7,301.2v51.6h189.3v-51.6L593.7,301.2zM404.4,413v51.6h86.1v-51.6L404.4,413zM593.7,413v51.6h189.3v-51.6L593.7,413zM172.1,464.7c0,-14.3 11.6,-25.8 25.8,-25.8 14.3,0 25.8,11.6 25.8,25.8v206.5c0,14.3 -11.6,25.8 -25.8,25.8 -14.3,0 -25.8,-11.6 -25.8,-25.8L172.1,464.7zM86.1,533.5a25.8,25.8 0,0 1,51.6 0v77.4a25.8,25.8 0,0 1,-51.6 0v-77.4zM0,568A25.9,25.9 0,0 1,25.8 542.1c14.3,0 25.8,11.6 25.8,25.9v8.4A25.9,25.9 0,0 1,25.8 602.4c-14.3,0 -25.8,-11.6 -25.8,-25.9v-8.4zM1006.8,464.7c0,-14.3 11.6,-25.8 25.8,-25.8 14.3,0 25.8,11.6 25.8,25.8v206.5c0,14.3 -11.6,25.8 -25.8,25.8 -14.3,0 -25.8,-11.6 -25.8,-25.8L1006.8,464.7zM1092.8,533.5a25.8,25.8 0,0 1,51.6 0v77.4a25.8,25.8 0,0 1,-51.6 0v-77.4zM1178.9,568a25.9,25.9 0,0 1,25.8 -25.9c14.3,0 25.8,11.6 25.8,25.9v8.4a25.9,25.9 0,0 1,-25.8 25.9c-14.3,0 -25.8,-11.6 -25.8,-25.9v-8.4z"
|
||||||
|
android:fillColor="@color/color_EFB38B"/>
|
||||||
|
</vector>
|
||||||
9
app/src/main/res/drawable/noraml_loop.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/color_cccccc"
|
||||||
|
android:pathData="M199.7,583.7c15.4,-5.1 25.6,-20.5 20.5,-35.8 -5.1,-15.4 -5.1,-35.8 -5.1,-51.2 0,-102.4 87,-189.4 189.4,-189.4L665.6,307.2v51.2c0,15.4 10.2,20.5 25.6,15.4l117.8,-71.7c15.4,-10.2 15.4,-20.5 0,-30.7l-117.8,-76.8c-15.4,-15.4 -25.6,-10.2 -25.6,5.1v51.2L404.5,250.9c-66.6,0 -128,25.6 -174.1,71.7 -46.1,46.1 -71.7,107.5 -71.7,174.1 0,20.5 5.1,46.1 10.2,66.6 5.1,10.2 15.4,20.5 25.6,20.5h5.1zM199.7,583.7M844.8,409.6c-5.1,-10.2 -15.4,-20.5 -25.6,-20.5h-5.1c-15.4,5.1 -25.6,20.5 -20.5,35.8 5.1,15.4 5.1,35.8 5.1,51.2 0,107.5 -87,194.6 -194.6,194.6h-256v-51.2c0,-15.4 -10.2,-20.5 -25.6,-15.4L204.8,681c-15.4,10.2 -15.4,20.5 0,30.7l117.8,76.8c15.4,10.2 25.6,5.1 25.6,-15.4v-51.2h261.1c66.6,0 128,-25.6 174.1,-71.7 46.1,-46.1 71.7,-107.5 71.7,-174.1 0,-20.5 -5.1,-46.1 -10.2,-66.6zM844.8,409.6"/>
|
||||||
|
</vector>
|
||||||
15
app/src/main/res/drawable/normal_favorite.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M510.4,298.9C394.7,30.2 65.6,92.9 63.4,404.8c-1.3,180.3 434.6,455.2 447.7,499.8 11.9,-46.3 448,-322.6 446.7,-501.7 -2.2,-312.7 -337,-362.1 -447.4,-104z"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M425.2,824.7c39.9,47.1 82.4,67.9 86,80 11.9,-46.3 448,-322.6 446.7,-501.7 -0.7,-101 -36.1,-174.5 -87.4,-219C762.9,90.4 275.6,538.5 425.2,824.7z"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M511.1,904.6c8.6,-47 448,-322.6 446.7,-501.7 -0.3,-50.5 -9.4,-94.1 -24.7,-130.7S355.8,729.6 511.1,904.6z"
|
||||||
|
android:fillColor="@color/color_cccccc"/>
|
||||||
|
</vector>
|
||||||
12
app/src/main/res/drawable/normal_play.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M512.5,512m-418.9,0a418.9,418.9 0,1 0,837.7 0,418.9 418.9,0 1,0 -837.7,0Z"
|
||||||
|
android:fillColor="@color/color_86e5fe"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M683.6,470l-231.4,-133.6c-32.3,-18.6 -72.7,4.7 -72.7,42v267.2c0,37.3 40.4,60.6 72.7,42l231.4,-133.6c32.3,-18.7 32.3,-65.3 0,-84z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
</vector>
|
||||||
21
app/src/main/res/drawable/normal_recording.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="45dp"
|
||||||
|
android:height="45dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M513.1,504.6m-450.8,0a450.8,450.8 0,1 0,901.6 0,450.8 450.8,0 1,0 -901.6,0Z"
|
||||||
|
android:fillColor="@color/color_EFB38B"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M513.1,182c-178.2,0 -322.7,144.4 -322.7,322.7 0,178.2 144.4,322.7 322.7,322.7 178.2,0 322.7,-144.4 322.7,-322.7 0,-178.2 -144.4,-322.7 -322.7,-322.7zM419.1,397.9c0,-51.9 42,-94 94,-94 51.9,0 94,42 94,94v96.3c0,51.9 -42,94 -94,94 -51.9,0 -94,-42 -94,-94v-96.3zM684.5,492.5c0,86.5 -63.3,158.4 -145.7,171.2v46.7c0,14.1 -11.5,25.6 -25.6,25.6s-25.6,-11.5 -25.6,-25.6v-46.5C404.5,651.7 340.4,579.5 340.4,492.5v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0,67.3 54.2,122 120.8,122 66.7,0 120.8,-54.7 120.8,-122v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M799.6,356.4c-53.7,-103.6 -161.8,-174.4 -286.6,-174.4 -178.2,0 -322.7,144.4 -322.7,322.7 0,117.1 62.4,219.6 155.8,276.2 1.1,0 2.3,0.1 3.4,0.1 240.1,0 436.4,-187.8 450,-424.4zM419.1,397.9c0,-51.9 42,-94 94,-94 51.9,0 94,42 94,94v96.3c0,51.9 -42,94 -94,94 -51.9,0 -94,-42 -94,-94v-96.3zM538.8,663.7v46.7c0,14.1 -11.5,25.6 -25.6,25.6s-25.6,-11.5 -25.6,-25.6v-46.5C404.5,651.7 340.4,579.5 340.4,492.5v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0,67.3 54.2,122 120.8,122 66.7,0 120.8,-54.7 120.8,-122v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0.1,86.5 -63.2,158.4 -145.6,171.2z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M190.4,504.6c0,40.9 7.7,79.9 21.5,115.9 4.8,0.2 9.5,0.3 14.3,0.3 51.9,0 101.8,-8.8 148.2,-24.9a172.9,172.9 0,0 1,-34.1 -103.3v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0,31.9 12.2,61 32.2,82.8 8.4,-4.1 16.6,-8.4 24.7,-13.1 -18.1,-17.1 -29.4,-41.3 -29.4,-68.1v-96.3c0,-51.9 42,-94 94,-94 51.9,0 94,42 94,94v13.6a448.5,448.5 0,0 0,66.8 -186.6,321 321,0 0,0 -160.7,-42.9c-178.1,0 -322.6,144.5 -322.6,322.7z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M194.5,453.8c152.2,-27.8 277.7,-132 335.3,-271.5 -5.5,-0.3 -11.1,-0.4 -16.6,-0.4 -160.9,0 -294.2,117.8 -318.6,271.9z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
</vector>
|
||||||
9
app/src/main/res/drawable/oval_stoke_3.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
|
||||||
|
<stroke
|
||||||
|
android:width="3dp"
|
||||||
|
android:color="@color/color_86e5fe" />
|
||||||
|
<solid android:color="@color/color_EFB38B"/>
|
||||||
|
<size android:height="150dp" android:width="150dp"/>
|
||||||
|
</shape>
|
||||||
10
app/src/main/res/drawable/play_center_backg.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners
|
||||||
|
android:topLeftRadius="35dp"
|
||||||
|
android:topRightRadius="35dp" />
|
||||||
|
<solid android:color="@color/color_EFB38B" />
|
||||||
|
|
||||||
|
|
||||||
|
</shape>
|
||||||
20
app/src/main/res/drawable/progress_draw_welcome.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:id="@android:id/background">
|
||||||
|
<shape>
|
||||||
|
<corners android:radius="5dp" />
|
||||||
|
<solid android:color="@color/color_CECECE" /> <!-- 背景颜色 -->
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item android:id="@android:id/progress">
|
||||||
|
<clip>
|
||||||
|
<shape>
|
||||||
|
<corners android:radius="20dp" />
|
||||||
|
<gradient
|
||||||
|
android:startColor="@color/color_EFB38B"
|
||||||
|
android:endColor="@color/color_86e5fe"
|
||||||
|
android:angle="0" />
|
||||||
|
</shape>
|
||||||
|
</clip>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
||||||
17
app/src/main/res/drawable/progress_drawable.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:id="@android:id/background">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/color_cccccc" />
|
||||||
|
<corners android:radius="10dp" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item android:id="@android:id/progress">
|
||||||
|
<scale android:scaleWidth="100%">
|
||||||
|
<shape>
|
||||||
|
<solid android:color="@color/white" />
|
||||||
|
<corners android:radius="10dp" />
|
||||||
|
</shape>
|
||||||
|
</scale>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
||||||
8
app/src/main/res/drawable/rect_10.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners android:radius="10dp" />
|
||||||
|
<solid android:color="@color/white" />
|
||||||
|
|
||||||
|
|
||||||
|
</shape>
|
||||||
10
app/src/main/res/drawable/rect_10_btn.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners android:radius="10dp" />
|
||||||
|
<gradient
|
||||||
|
android:angle="135"
|
||||||
|
android:endColor="@color/color_EFB38B"
|
||||||
|
android:startColor="@color/color_86e5fe" />
|
||||||
|
|
||||||
|
</shape>
|
||||||
7
app/src/main/res/drawable/rect_12.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/view" />
|
||||||
|
<corners android:bottomLeftRadius="12dp" android:bottomRightRadius="12dp"/>
|
||||||
|
|
||||||
|
</shape>
|
||||||
8
app/src/main/res/drawable/rect_stoke_12.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners android:radius="12dp"/>
|
||||||
|
<solid android:color="@color/color_EFB38B"/>
|
||||||
|
<stroke
|
||||||
|
android:width="3dp"
|
||||||
|
android:color="@color/color_86e5fe" />
|
||||||
|
</shape>
|
||||||
15
app/src/main/res/drawable/red_like.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M510.4,298.9C394.7,30.2 65.6,92.9 63.4,404.8c-1.3,180.3 434.6,455.2 447.7,499.8 11.9,-46.3 448,-322.6 446.7,-501.7 -2.2,-312.7 -337,-362.1 -447.4,-104z"
|
||||||
|
android:fillColor="@color/color_D6242A"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M425.2,824.7c39.9,47.1 82.4,67.9 86,80 11.9,-46.3 448,-322.6 446.7,-501.7 -0.7,-101 -36.1,-174.5 -87.4,-219C762.9,90.4 275.6,538.5 425.2,824.7z"
|
||||||
|
android:fillColor="@color/color_D6242A"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M511.1,904.6c8.6,-47 448,-322.6 446.7,-501.7 -0.3,-50.5 -9.4,-94.1 -24.7,-130.7S355.8,729.6 511.1,904.6z"
|
||||||
|
android:fillColor="@color/color_D6242A"/>
|
||||||
|
</vector>
|
||||||
6
app/src/main/res/drawable/selector_favorite.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="@drawable/normal_favorite" android:state_selected="false" />
|
||||||
|
<item android:drawable="@drawable/red_like" android:state_selected="true" />
|
||||||
|
|
||||||
|
</selector>
|
||||||
6
app/src/main/res/drawable/selector_looper.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="@drawable/noraml_loop" android:state_selected="false" />
|
||||||
|
<item android:drawable="@drawable/true_loop" android:state_selected="true" />
|
||||||
|
|
||||||
|
</selector>
|
||||||
7
app/src/main/res/drawable/selector_micphone.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_selected="false" android:drawable="@drawable/normal_recording"/>
|
||||||
|
<item android:state_selected="true" android:drawable="@drawable/true_recording"/>
|
||||||
|
|
||||||
|
|
||||||
|
</selector>
|
||||||
6
app/src/main/res/drawable/selector_play_pause.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="@drawable/normal_play" android:state_selected="false" />
|
||||||
|
<item android:drawable="@drawable/true_pause" android:state_selected="true" />
|
||||||
|
|
||||||
|
</selector>
|
||||||
11
app/src/main/res/drawable/sp_12_main.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@android:color/transparent" />
|
||||||
|
<corners android:radius="12dp" />
|
||||||
|
<stroke
|
||||||
|
android:width="2dp"
|
||||||
|
android:color="@color/color_EFB38B"
|
||||||
|
android:dashWidth="6dp"
|
||||||
|
android:dashGap="4dp" />
|
||||||
|
</shape>
|
||||||
9
app/src/main/res/drawable/stoke_8.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
<stroke
|
||||||
|
android:width="2dp"
|
||||||
|
android:color="@color/color_EFB38B" />
|
||||||
|
|
||||||
|
</shape>
|
||||||
8
app/src/main/res/drawable/thumb.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<solid android:color="@color/white" />
|
||||||
|
<size
|
||||||
|
android:width="12dp"
|
||||||
|
android:height="12dp" />
|
||||||
|
</shape>
|
||||||
9
app/src/main/res/drawable/true_loop.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/color_86e5fe"
|
||||||
|
android:pathData="M199.7,583.7c15.4,-5.1 25.6,-20.5 20.5,-35.8 -5.1,-15.4 -5.1,-35.8 -5.1,-51.2 0,-102.4 87,-189.4 189.4,-189.4L665.6,307.2v51.2c0,15.4 10.2,20.5 25.6,15.4l117.8,-71.7c15.4,-10.2 15.4,-20.5 0,-30.7l-117.8,-76.8c-15.4,-15.4 -25.6,-10.2 -25.6,5.1v51.2L404.5,250.9c-66.6,0 -128,25.6 -174.1,71.7 -46.1,46.1 -71.7,107.5 -71.7,174.1 0,20.5 5.1,46.1 10.2,66.6 5.1,10.2 15.4,20.5 25.6,20.5h5.1zM199.7,583.7M844.8,409.6c-5.1,-10.2 -15.4,-20.5 -25.6,-20.5h-5.1c-15.4,5.1 -25.6,20.5 -20.5,35.8 5.1,15.4 5.1,35.8 5.1,51.2 0,107.5 -87,194.6 -194.6,194.6h-256v-51.2c0,-15.4 -10.2,-20.5 -25.6,-15.4L204.8,681c-15.4,10.2 -15.4,20.5 0,30.7l117.8,76.8c15.4,10.2 25.6,5.1 25.6,-15.4v-51.2h261.1c66.6,0 128,-25.6 174.1,-71.7 46.1,-46.1 71.7,-107.5 71.7,-174.1 0,-20.5 -5.1,-46.1 -10.2,-66.6zM844.8,409.6"/>
|
||||||
|
</vector>
|
||||||
16
app/src/main/res/drawable/true_pause.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M512,42.7c258.8,0 469.3,210.5 469.3,469.3s-210.5,469.3 -469.3,469.3 -469.3,-210.5 -469.3,-469.3 210.5,-469.3 469.3,-469.3z"
|
||||||
|
android:fillColor="@color/color_86e5fe"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M384,312.9c31.3,0 56.9,25.6 56.9,56.9v284.4c0,31.3 -25.6,56.9 -56.9,56.9s-56.9,-25.6 -56.9,-56.9v-284.4c0,-31.3 25.6,-56.9 56.9,-56.9z"
|
||||||
|
android:strokeAlpha="0.6"
|
||||||
|
android:fillColor="@color/white" />
|
||||||
|
<path
|
||||||
|
android:pathData="M640,312.9c31.3,0 56.9,25.6 56.9,56.9v284.4c0,31.3 -25.6,56.9 -56.9,56.9s-56.9,-25.6 -56.9,-56.9v-284.4c0,-31.3 25.6,-56.9 56.9,-56.9z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
</vector>
|
||||||
21
app/src/main/res/drawable/true_recording.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="25dp"
|
||||||
|
android:height="25dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M513.1,504.6m-450.8,0a450.8,450.8 0,1 0,901.6 0,450.8 450.8,0 1,0 -901.6,0Z"
|
||||||
|
android:fillColor="@color/color_CECECE"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M513.1,182c-178.2,0 -322.7,144.4 -322.7,322.7 0,178.2 144.4,322.7 322.7,322.7 178.2,0 322.7,-144.4 322.7,-322.7 0,-178.2 -144.4,-322.7 -322.7,-322.7zM419.1,397.9c0,-51.9 42,-94 94,-94 51.9,0 94,42 94,94v96.3c0,51.9 -42,94 -94,94 -51.9,0 -94,-42 -94,-94v-96.3zM684.5,492.5c0,86.5 -63.3,158.4 -145.7,171.2v46.7c0,14.1 -11.5,25.6 -25.6,25.6s-25.6,-11.5 -25.6,-25.6v-46.5C404.5,651.7 340.4,579.5 340.4,492.5v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0,67.3 54.2,122 120.8,122 66.7,0 120.8,-54.7 120.8,-122v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M799.6,356.4c-53.7,-103.6 -161.8,-174.4 -286.6,-174.4 -178.2,0 -322.7,144.4 -322.7,322.7 0,117.1 62.4,219.6 155.8,276.2 1.1,0 2.3,0.1 3.4,0.1 240.1,0 436.4,-187.8 450,-424.4zM419.1,397.9c0,-51.9 42,-94 94,-94 51.9,0 94,42 94,94v96.3c0,51.9 -42,94 -94,94 -51.9,0 -94,-42 -94,-94v-96.3zM538.8,663.7v46.7c0,14.1 -11.5,25.6 -25.6,25.6s-25.6,-11.5 -25.6,-25.6v-46.5C404.5,651.7 340.4,579.5 340.4,492.5v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0,67.3 54.2,122 120.8,122 66.7,0 120.8,-54.7 120.8,-122v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0.1,86.5 -63.2,158.4 -145.6,171.2z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M190.4,504.6c0,40.9 7.7,79.9 21.5,115.9 4.8,0.2 9.5,0.3 14.3,0.3 51.9,0 101.8,-8.8 148.2,-24.9a172.9,172.9 0,0 1,-34.1 -103.3v-12.8c0,-14.1 11.5,-25.6 25.6,-25.6s25.6,11.5 25.6,25.6v12.8c0,31.9 12.2,61 32.2,82.8 8.4,-4.1 16.6,-8.4 24.7,-13.1 -18.1,-17.1 -29.4,-41.3 -29.4,-68.1v-96.3c0,-51.9 42,-94 94,-94 51.9,0 94,42 94,94v13.6a448.5,448.5 0,0 0,66.8 -186.6,321 321,0 0,0 -160.7,-42.9c-178.1,0 -322.6,144.5 -322.6,322.7z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M194.5,453.8c152.2,-27.8 277.7,-132 335.3,-271.5 -5.5,-0.3 -11.1,-0.4 -16.6,-0.4 -160.9,0 -294.2,117.8 -318.6,271.9z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
</vector>
|
||||||
12
app/src/main/res/drawable/true_timer.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="64dp"
|
||||||
|
android:height="64dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/color_86e5fe"
|
||||||
|
android:pathData="M512,64C264.6,64 64,264.6 64,512s200.6,448 448,448 448,-200.6 448,-448S759.4,64 512,64zM512,884c-205.4,0 -372,-166.6 -372,-372s166.6,-372 372,-372 372,166.6 372,372 -166.6,372 -372,372z"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/color_86e5fe"
|
||||||
|
android:pathData="M686.7,638.6L544.1,535.5V288c0,-4.4 -3.6,-8 -8,-8H488c-4.4,0 -8,3.6 -8,8v275.4c0,2.6 1.2,5 3.3,6.5l165.4,120.6c3.6,2.6 8.6,1.8 11.2,-1.7l28.6,-39c2.6,-3.7 1.8,-8.7 -1.8,-11.2z"/>
|
||||||
|
</vector>
|
||||||
9
app/src/main/res/drawable/volume_white.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="21dp"
|
||||||
|
android:height="18dp"
|
||||||
|
android:viewportWidth="21"
|
||||||
|
android:viewportHeight="18">
|
||||||
|
<path
|
||||||
|
android:pathData="M1.5,3.996H3.27C3.742,3.997 4.199,3.83 4.56,3.526L8.25,0.396C8.493,0.19 8.789,0.058 9.105,0.015C9.42,-0.028 9.741,0.02 10.03,0.154C10.319,0.287 10.564,0.5 10.736,0.768C10.908,1.036 10.999,1.348 11,1.666V16.326C10.999,16.645 10.908,16.956 10.736,17.224C10.564,17.492 10.319,17.705 10.03,17.838C9.741,17.972 9.42,18.02 9.105,17.977C8.789,17.934 8.493,17.802 8.25,17.596L4.56,14.466C4.199,14.162 3.742,13.996 3.27,13.996H1.5C1.102,13.996 0.721,13.838 0.439,13.557C0.158,13.276 0,12.894 0,12.496V5.496C0,5.098 0.158,4.717 0.439,4.436C0.721,4.154 1.102,3.996 1.5,3.996ZM14.77,13.766C15.397,13.14 15.895,12.397 16.234,11.578C16.573,10.76 16.748,9.882 16.748,8.996C16.748,8.11 16.573,7.233 16.234,6.414C15.895,5.596 15.397,4.852 14.77,4.226C14.629,4.086 14.439,4.007 14.24,4.007C14.041,4.007 13.851,4.086 13.71,4.226C13.569,4.367 13.491,4.557 13.491,4.756C13.491,4.955 13.569,5.146 13.71,5.286C14.198,5.773 14.585,6.351 14.849,6.988C15.113,7.625 15.25,8.307 15.25,8.996C15.25,9.685 15.113,10.368 14.849,11.005C14.585,11.641 14.198,12.219 13.71,12.706C13.569,12.847 13.491,13.038 13.491,13.236C13.491,13.435 13.569,13.626 13.71,13.766C13.778,13.838 13.861,13.894 13.952,13.932C14.043,13.97 14.141,13.988 14.24,13.986C14.339,13.987 14.436,13.967 14.527,13.93C14.618,13.892 14.701,13.836 14.77,13.766ZM17.07,16.816C16.971,16.817 16.874,16.798 16.782,16.76C16.691,16.723 16.609,16.667 16.54,16.596C16.469,16.527 16.413,16.445 16.375,16.354C16.336,16.263 16.316,16.165 16.316,16.066C16.316,15.967 16.336,15.87 16.375,15.779C16.413,15.688 16.469,15.605 16.54,15.536C18.274,13.802 19.249,11.449 19.249,8.996C19.249,6.543 18.274,4.191 16.54,2.456C16.469,2.387 16.413,2.305 16.375,2.214C16.336,2.123 16.316,2.025 16.316,1.926C16.316,1.827 16.336,1.73 16.375,1.639C16.413,1.548 16.469,1.465 16.54,1.396C16.681,1.256 16.871,1.177 17.07,1.177C17.269,1.177 17.459,1.256 17.6,1.396C18.599,2.394 19.392,3.578 19.932,4.882C20.473,6.187 20.751,7.584 20.751,8.996C20.751,10.408 20.473,11.806 19.932,13.11C19.392,14.414 18.599,15.599 17.6,16.596C17.531,16.666 17.448,16.722 17.357,16.76C17.266,16.797 17.169,16.817 17.07,16.816Z"
|
||||||
|
android:fillColor="@color/white"/>
|
||||||
|
</vector>
|
||||||
75
app/src/main/res/layout/activity_collection.xml
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
tools:context="com.prank.sound.funnyapp.activity.CollectionActivity">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="34dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="@string/tab3"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:src="@drawable/back_black" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_empty"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="160dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="200dp"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:src="@drawable/ic_empty_data" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:text="@string/empty_like"
|
||||||
|
android:textColor="@color/color_CECECE"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
151
app/src/main/res/layout/activity_main.xml
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:paddingTop="40dp"
|
||||||
|
tools:context="com.prank.sound.funnyapp.activity.MainActivity">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/rl_record"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="130dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginTop="12dp"
|
||||||
|
android:background="@drawable/sp_12_main"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toLeftOf="@id/rl_like"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tv_name">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="85dp"
|
||||||
|
android:layout_height="85dp"
|
||||||
|
android:padding="14dp"
|
||||||
|
android:src="@drawable/main_img_reocrder" />
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_upload"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:text="@string/recording_audio"
|
||||||
|
android:textColor="@color/text_color1"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/rl_like"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="130dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_marginEnd="15dp"
|
||||||
|
android:background="@drawable/sp_12_main"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/rl_record"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/rl_record">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="95dp"
|
||||||
|
android:layout_height="85dp"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:src="@drawable/main_img_add_like" />
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:text="@string/tab3"
|
||||||
|
android:textColor="@color/text_color1"
|
||||||
|
android:textSize="15sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recyclerView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="18dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/rl_record" />
|
||||||
|
<!-- <androidx.viewpager2.widget.ViewPager2-->
|
||||||
|
<!-- android:id="@+id/vp2"-->
|
||||||
|
<!-- android:layout_width="match_parent"-->
|
||||||
|
<!-- android:layout_height="match_parent"-->
|
||||||
|
<!-- app:layout_constraintTop_toTopOf="parent"-->
|
||||||
|
<!-- app:layout_constraintVertical_bias="1.0"-->
|
||||||
|
<!-- tools:layout_editor_absoluteX="16dp" />-->
|
||||||
|
|
||||||
|
<!-- <LinearLayout-->
|
||||||
|
<!-- android:id="@+id/linear_tab"-->
|
||||||
|
<!-- android:layout_width="match_parent"-->
|
||||||
|
<!-- android:layout_height="52dp"-->
|
||||||
|
<!-- android:background="@color/color_03A9F4"-->
|
||||||
|
<!-- android:orientation="horizontal"-->
|
||||||
|
<!-- app:layout_constraintBottom_toBottomOf="parent">-->
|
||||||
|
|
||||||
|
<!-- <FrameLayout-->
|
||||||
|
<!-- android:id="@+id/frame_home"-->
|
||||||
|
<!-- android:layout_width="0dp"-->
|
||||||
|
<!-- android:layout_height="match_parent"-->
|
||||||
|
<!-- android:layout_weight="1">-->
|
||||||
|
|
||||||
|
<!-- <ImageView-->
|
||||||
|
<!-- android:id="@+id/imHome"-->
|
||||||
|
<!-- android:layout_width="23dp"-->
|
||||||
|
<!-- android:layout_height="23dp"-->
|
||||||
|
<!-- android:layout_gravity="center"-->
|
||||||
|
<!-- android:src="@drawable/item_tab_home" />-->
|
||||||
|
<!-- </FrameLayout>-->
|
||||||
|
|
||||||
|
<!-- <FrameLayout-->
|
||||||
|
<!-- android:id="@+id/frame_add"-->
|
||||||
|
<!-- android:layout_width="0dp"-->
|
||||||
|
<!-- android:layout_height="match_parent"-->
|
||||||
|
<!-- android:layout_weight="1">-->
|
||||||
|
|
||||||
|
<!-- <ImageView-->
|
||||||
|
<!-- android:id="@+id/imAdd"-->
|
||||||
|
<!-- android:layout_width="23dp"-->
|
||||||
|
<!-- android:layout_height="23dp"-->
|
||||||
|
<!-- android:layout_gravity="center"-->
|
||||||
|
<!-- android:src="@drawable/item_recording" />-->
|
||||||
|
<!-- </FrameLayout>-->
|
||||||
|
|
||||||
|
<!-- <FrameLayout-->
|
||||||
|
<!-- android:id="@+id/frame_collect"-->
|
||||||
|
<!-- android:layout_width="0dp"-->
|
||||||
|
<!-- android:layout_height="match_parent"-->
|
||||||
|
<!-- android:layout_weight="1">-->
|
||||||
|
|
||||||
|
<!-- <ImageView-->
|
||||||
|
<!-- android:id="@+id/imCollect"-->
|
||||||
|
<!-- android:layout_width="23dp"-->
|
||||||
|
<!-- android:layout_height="23dp"-->
|
||||||
|
<!-- android:layout_gravity="center"-->
|
||||||
|
<!-- android:src="@drawable/item_tab_like" />-->
|
||||||
|
<!-- </FrameLayout>-->
|
||||||
|
<!-- </LinearLayout>-->
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
185
app/src/main/res/layout/activity_play_sounds.xml
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/constraint_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context="com.prank.sound.funnyapp.activity.PlayItemActivity">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="34dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:src="@drawable/back_black" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/linear_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:background="@drawable/play_center_backg"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/title_layout">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="160dp"
|
||||||
|
android:layout_height="160dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="55dp"
|
||||||
|
android:src="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/play_parent"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="25dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/play_loading"
|
||||||
|
android:layout_width="34dp"
|
||||||
|
android:layout_height="34dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:indeterminateTint="@color/white" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btn_play"
|
||||||
|
android:layout_width="62dp"
|
||||||
|
android:layout_height="62dp"
|
||||||
|
android:src="@drawable/selector_play_pause" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="30dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/play_parent">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/im_timer"
|
||||||
|
android:layout_width="35dp"
|
||||||
|
android:layout_height="35dp"
|
||||||
|
android:layout_marginStart="66dp"
|
||||||
|
|
||||||
|
android:layout_marginEnd="15dp"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:src="@drawable/true_timer"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/im_loop"
|
||||||
|
android:layout_width="35dp"
|
||||||
|
android:layout_height="35dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:padding="2dp"
|
||||||
|
android:src="@drawable/selector_looper"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/im_timer"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/im_timer" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/im_like"
|
||||||
|
android:layout_width="35dp"
|
||||||
|
android:layout_height="35dp"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:src="@drawable/selector_favorite"
|
||||||
|
app:layout_constraintLeft_toRightOf="@id/im_loop"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/im_timer" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/layout_volume"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="52dp"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:layout_marginEnd="20dp"
|
||||||
|
android:paddingStart="10dp"
|
||||||
|
android:paddingEnd="10dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/im_timer">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/im"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:src="@drawable/volume_white" />
|
||||||
|
|
||||||
|
<SeekBar
|
||||||
|
android:id="@+id/seekbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_toEndOf="@id/im"
|
||||||
|
android:maxHeight="5dp"
|
||||||
|
android:progress="10"
|
||||||
|
android:progressDrawable="@drawable/progress_drawable"
|
||||||
|
android:thumb="@drawable/thumb" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/more_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:text="@string/more"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:apply_font="true"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/more_recycler"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent" />
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/more_recycler"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="40dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent" />
|
||||||
|
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
79
app/src/main/res/layout/activity_record.xml
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context="com.prank.sound.funnyapp.dialog.FragRecorder">
|
||||||
|
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="34dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="@string/tab2"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:src="@drawable/back_black" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recycler_import"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/title_layout" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/btnimport"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_above="@id/record"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:background="@drawable/rect_10_btn"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="9dp"
|
||||||
|
android:text="@string/import_audio"
|
||||||
|
android:textColor="@color/text_color2"
|
||||||
|
android:textSize="16sp"
|
||||||
|
app:apply_font="false" />
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/record"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginBottom="120dp"
|
||||||
|
android:background="@drawable/rect_10_btn"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="9dp"
|
||||||
|
android:text="@string/recording_audio"
|
||||||
|
android:textColor="@color/text_color2"
|
||||||
|
android:textSize="16sp"
|
||||||
|
app:apply_font="false" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
128
app/src/main/res/layout/activity_save_sounds.xml
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/activity_save"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="34dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="@string/save_sound"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:src="@drawable/back_black" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/audio_im"
|
||||||
|
android:layout_width="260dp"
|
||||||
|
android:layout_height="220dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:src="@drawable/def_sounds"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/title_layout">
|
||||||
|
|
||||||
|
</ImageView>
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/im_play_btn"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="38dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/audio_im"
|
||||||
|
android:background="@drawable/rect_10_btn"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingStart="10dp"
|
||||||
|
android:paddingEnd="10dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/btn_play"
|
||||||
|
android:layout_width="22dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:src="@drawable/selector_play_pause" />
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:text="@string/play_audio"
|
||||||
|
app:apply_font="true" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/audio_time"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="14dp"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:text="00:00:00"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/im_play_btn" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/save_edit"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="36dp"
|
||||||
|
android:background="@drawable/stoke_8"
|
||||||
|
android:gravity="center"
|
||||||
|
android:hint="@string/save_audio_name_hint"
|
||||||
|
android:maxLength="10"
|
||||||
|
android:padding="11dp"
|
||||||
|
android:textColorHint="@color/color_CECECE"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/audio_time" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/save"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:paddingStart="35dp"
|
||||||
|
android:paddingEnd="35dp"
|
||||||
|
android:background="@drawable/rect_10_btn"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/save"
|
||||||
|
android:layout_marginTop="50dp"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="19sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/save_edit" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
49
app/src/main/res/layout/activity_splash.xml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/white"
|
||||||
|
tools:context="com.prank.sound.funnyapp.activity.SplashActivity">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.utils.widget.ImageFilterView
|
||||||
|
android:layout_width="95dp"
|
||||||
|
android:layout_height="95dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
app:roundPercent="0.2"
|
||||||
|
android:id="@+id/logo"
|
||||||
|
android:layout_marginTop="240dp"
|
||||||
|
android:src="@mipmap/icon" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:layout_marginEnd="15dp"
|
||||||
|
android:layout_marginTop="24dp"
|
||||||
|
android:layout_below="@id/logo"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/welcome"
|
||||||
|
android:textColor="@color/text_color1"
|
||||||
|
android:textSize="19sp" />
|
||||||
|
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/loading_pb"
|
||||||
|
style="?android:attr/progressBarStyleHorizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="7dp"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginStart="25dp"
|
||||||
|
android:layout_marginEnd="25dp"
|
||||||
|
android:layout_marginBottom="35dp"
|
||||||
|
android:progress="90"
|
||||||
|
android:progressDrawable="@drawable/progress_draw_welcome" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
60
app/src/main/res/layout/activity_start_recorder.xml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="34dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="@string/recording_audio"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:src="@drawable/back_black" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/audio_time"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="134dp"
|
||||||
|
android:text="00:00:00"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="28sp" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/im_mic"
|
||||||
|
android:layout_width="125dp"
|
||||||
|
android:layout_height="125dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_marginTop="60dp"
|
||||||
|
android:src="@drawable/selector_micphone" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
48
app/src/main/res/layout/activity_view_all.xml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
|
||||||
|
android:paddingTop="34dp"
|
||||||
|
tools:context="com.prank.sound.funnyapp.activity.ViewAllActivity">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/category_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/back"
|
||||||
|
android:layout_width="45dp"
|
||||||
|
android:layout_height="45dp"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:src="@drawable/back_black" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/list_recycler"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
56
app/src/main/res/layout/adapter_favorite.xml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="24dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="150dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:padding="10dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="85dp"
|
||||||
|
android:layout_height="85dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:src="@drawable/def_sounds" />
|
||||||
|
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/im_delete"
|
||||||
|
android:layout_width="34dp"
|
||||||
|
android:layout_height="34dp"
|
||||||
|
android:layout_alignEnd="@id/layout"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:src="@drawable/delete_red" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_alignStart="@id/layout"
|
||||||
|
android:layout_alignEnd="@id/layout"
|
||||||
|
android:layout_alignBottom="@id/layout"
|
||||||
|
android:background="@drawable/rect_12"
|
||||||
|
android:padding="10dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ttv_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
48
app/src/main/res/layout/adapter_main.xml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/relative"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:gravity="center">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="96dp"
|
||||||
|
android:layout_height="96dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:src="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/image"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginStart="2dp"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
|
android:layout_marginEnd="2dp"
|
||||||
|
android:layout_marginBottom="2dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="center"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textSize="12sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<!-- <View-->
|
||||||
|
<!-- android:id="@+id/view"-->
|
||||||
|
<!-- android:layout_width="wrap_content"-->
|
||||||
|
<!-- android:layout_height="100dp"-->
|
||||||
|
<!-- android:layout_below="@id/relative" />-->
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
38
app/src/main/res/layout/adapter_view_all.xml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/relative"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:background="@drawable/oval_stoke_3"
|
||||||
|
android:paddingBottom="10dp">
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="80dp"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
|
android:src="@mipmap/ic_launcher" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/image"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="3dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="12sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
119
app/src/main/res/layout/dialog_start_timer.xml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/rect_10"
|
||||||
|
android:padding="10dp">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/title_timer"
|
||||||
|
android:textColor="@color/text_color1"
|
||||||
|
android:textSize="14sp"
|
||||||
|
app:apply_font="false" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_time"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/title"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_off"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="7dp"
|
||||||
|
android:text="@string/timer1"
|
||||||
|
android:textColor="@color/seletor_color_timer"
|
||||||
|
android:textSize="13sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:background="@color/main_gray" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_15s"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="7dp"
|
||||||
|
android:text="@string/timer2"
|
||||||
|
android:textColor="@color/seletor_color_timer"
|
||||||
|
android:textSize="13sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:background="@color/main_gray" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_30s"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="7dp"
|
||||||
|
android:text="@string/timer3"
|
||||||
|
android:textColor="@color/seletor_color_timer"
|
||||||
|
android:textSize="13sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:background="@color/main_gray" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_1m"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="7dp"
|
||||||
|
android:text="@string/timer4"
|
||||||
|
android:textColor="@color/seletor_color_timer"
|
||||||
|
android:textSize="13sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:background="@color/main_gray" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.prank.sound.funnyapp.mytool.MyText
|
||||||
|
android:id="@+id/tv_5m"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="7dp"
|
||||||
|
android:text="@string/timer5"
|
||||||
|
android:textColor="@color/seletor_color_timer"
|
||||||
|
android:textSize="13sp"
|
||||||
|
app:apply_font="true" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 982 B |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/icon.png
Normal file
|
After Width: | Height: | Size: 130 KiB |
6
app/src/main/res/values/attrs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<declare-styleable name="MyTV">
|
||||||
|
<attr name="apply_font" format="boolean"/>
|
||||||
|
</declare-styleable>
|
||||||
|
</resources>
|
||||||
21
app/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<color name="black">#FF000000</color>
|
||||||
|
<color name="white">#FFFFFFFF</color>
|
||||||
|
<color name="view">#80000000</color>
|
||||||
|
<!-- <color name="main_gray1">#E4E1E1</color>-->
|
||||||
|
<color name="text_color1">#2C2C2C</color>
|
||||||
|
<color name="text_color2">#F6F3F3</color>
|
||||||
|
<color name="main_gray">#E6CBCCCC</color>
|
||||||
|
<color name="color_CECECE">#CECECE</color>
|
||||||
|
<color name="color_FA666B">#FA666B</color>
|
||||||
|
<color name="color_D6242A">#D6242A</color>
|
||||||
|
<color name="color_cccccc">#cccccc</color>
|
||||||
|
<color name="color_897BED">#EFA73D</color>
|
||||||
|
<color name="color_A18DFD">#F4DB8D</color>
|
||||||
|
<!-- <color name="color_CCC2F8">#33FA6502</color>-->
|
||||||
|
<color name="color_EFB38B">#8492DF</color>
|
||||||
|
<color name="color_86e5fe">#86e5fe</color>
|
||||||
|
|
||||||
|
</resources>
|
||||||
26
app/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<resources>
|
||||||
|
<string name="app_name">Prank Sound App</string>
|
||||||
|
<string name="empty_like">There is no sound in the favorites</string>
|
||||||
|
<string name="play_audio">Play a Prank</string>
|
||||||
|
<string name="title_timer">Countdown to Prank</string>
|
||||||
|
<string name="timer1">off</string>
|
||||||
|
<string name="timer2">15 sec</string>
|
||||||
|
<string name="timer3">30 sec</string>
|
||||||
|
<string name="timer4">1 min</string>
|
||||||
|
<string name="timer5">5 min</string>
|
||||||
|
<string name="tab2">Recording</string>
|
||||||
|
<string name="tab3">Favorite</string>
|
||||||
|
<!-- <string name="import_sound">Click the upper right button to record audio or import local audio</string>-->
|
||||||
|
<string name="save_tip">Please enter the content</string>
|
||||||
|
<string name="save_tips">Successfully save</string>
|
||||||
|
<string name="permission_fail">Permission denied. Cannot access audio files.</string>
|
||||||
|
<string name="save_audio_name_hint">Give your created sound a name</string>
|
||||||
|
<string name="save_sound">Save Sound</string>
|
||||||
|
<string name="recording_audio">Recording Audio</string>
|
||||||
|
<string name="save">Save</string>
|
||||||
|
<string name="time_init">00 : 00 : 00</string>
|
||||||
|
<string name="name_hint">An audio with the same name already exists!</string>
|
||||||
|
<string name="import_audio">Import Audio</string>
|
||||||
|
<string name="more">More Pranks</string>
|
||||||
|
<string name="welcome">Welcome to Prank Sound App, the world of endless laughter and mischievous fun</string>
|
||||||
|
</resources>
|
||||||
7
app/src/main/res/values/themes.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="Theme.FunnyAudio" parent="Theme.Material3.Light.NoActionBar" >
|
||||||
|
<item name="android:statusBarColor">@color/white</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.prank.funny.audio.sounds
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
import org.junit.Assert.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example local unit sounds, which will execute on the development machine (host).
|
||||||
|
*
|
||||||
|
* See [testing documentation](http://d.android.com/tools/testing).
|
||||||
|
*/
|
||||||
|
class ExampleUnitTest {
|
||||||
|
@Test
|
||||||
|
fun addition_isCorrect() {
|
||||||
|
assertEquals(4, 2 + 2)
|
||||||
|
}
|
||||||
|
}
|
||||||
21
build.gradle.kts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
plugins {
|
||||||
|
id("com.android.application") version "8.1.3" apply false
|
||||||
|
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
|
||||||
|
}
|
||||||
|
|
||||||
|
buildscript {
|
||||||
|
// ext.objectboxVersion = "4.0.0" // For Groovy build scripts
|
||||||
|
val objectboxVersion by extra("4.0.0") // For KTS build scripts
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
// Note: 2.9.0 and older are available on jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
// Android Gradle Plugin 4.1.0 or later supported.
|
||||||
|
// classpath("com.android.tools.build:gradle:8.1.0")
|
||||||
|
classpath("io.objectbox:objectbox-gradle-plugin:$objectboxVersion")
|
||||||
|
}
|
||||||
|
}
|
||||||
23
gradle.properties
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Project-wide Gradle settings.
|
||||||
|
# IDE (e.g. Android Studio) users:
|
||||||
|
# Gradle settings configured through the IDE *will override*
|
||||||
|
# any settings specified in this file.
|
||||||
|
# For more details on how to configure your build environment visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||||
|
# Specifies the JVM arguments used for the daemon process.
|
||||||
|
# The setting is particularly useful for tweaking memory settings.
|
||||||
|
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||||
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
|
# This option should only be used with decoupled projects. More details, visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
|
# org.gradle.parallel=true
|
||||||
|
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||||
|
# Android operating system, and which are packaged with your app's APK
|
||||||
|
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||||
|
android.useAndroidX=true
|
||||||
|
# Kotlin code style for this project: "official" or "obsolete":
|
||||||
|
kotlin.code.style=official
|
||||||
|
# Enables namespacing of each library's R class so that its R class includes only the
|
||||||
|
# resources declared in the library itself and none from the library's dependencies,
|
||||||
|
# thereby reducing the size of the R class for that library
|
||||||
|
android.nonTransitiveRClass=true
|
||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#Tue May 28 10:52:01 CST 2024
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
185
gradlew
vendored
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright 2015 the original author or authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
NONSTOP* )
|
||||||
|
nonstop=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
|
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=`expr $i + 1`
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
0) set -- ;;
|
||||||
|
1) set -- "$args0" ;;
|
||||||
|
2) set -- "$args0" "$args1" ;;
|
||||||
|
3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Escape application args
|
||||||
|
save () {
|
||||||
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
APP_ARGS=`save "$@"`
|
||||||
|
|
||||||
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
||||||
89
gradlew.bat
vendored
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
@rem
|
||||||
|
@rem Copyright 2015 the original author or authors.
|
||||||
|
@rem
|
||||||
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@rem you may not use this file except in compliance with the License.
|
||||||
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@rem See the License for the specific language governing permissions and
|
||||||
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
|
|
||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||||
|
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
||||||
20
settings.gradle.kts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
gradlePluginPortal()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencyResolutionManagement {
|
||||||
|
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = "Prank Sound App"
|
||||||
|
include(":app")
|
||||||
|
|
||||||