diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..898c033 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +SoundGags \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index d843f34..94a25f7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 80898bb..e2a6e7e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,6 +6,8 @@ plugins { alias(libs.plugins.kotlin.android) id("kotlin-kapt") id("kotlin-parcelize") + id("com.google.gms.google-services") + id("com.google.firebase.crashlytics") } android { @@ -18,8 +20,8 @@ android { applicationId = "com.soundapp.soundgags" minSdk = 26 targetSdk = 36 - versionCode = 3 - versionName = "3.0" + versionCode = 4 + versionName = "4.0" setProperty( "archivesBaseName", "Sound Gags_V" + versionName + "_${versionCode}$timeStamp" @@ -68,4 +70,92 @@ dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") implementation("androidx.activity:activity-ktx:1.10.1") implementation("com.google.android.flexbox:flexbox:3.0.0") + + implementation(files("libs/TradPlusLibrary_11_25_15_02-release.aar")) + implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar")) + + implementation ("com.squareup.okhttp3:okhttp:4.12.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + + implementation ("com.google.android.gms:play-services-ads-identifier:18.0.1") + + // TradPlus + implementation("com.tradplusad:tradplus:14.5.0.1") + //noinspection GradleCompatible + implementation("androidx.legacy:legacy-support-v4:1.0.0") + implementation("androidx.appcompat:appcompat:1.3.0-alpha02") + // Meta + implementation("com.facebook.android:audience-network-sdk:6.20.0") + implementation("com.tradplusad:tradplus-facebook:1.14.5.0.1") + // Applovin + implementation("com.applovin:applovin-sdk:13.3.1") + implementation("com.tradplusad:tradplus-applovin:9.14.5.0.1") + implementation("com.google.android.gms:play-services-ads-identifier:18.2.0") + // Ironsource + implementation("com.ironsource.sdk:mediationsdk:8.10.0") + implementation("com.tradplusad:tradplus-ironsource:10.14.5.0.1") + implementation("com.google.android.gms:play-services-appset:16.0.0") + implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") + implementation("com.google.android.gms:play-services-basement:17.5.0") + // Adcolony + implementation("com.adcolony:sdk:4.8.0") + implementation("com.tradplusad:tradplus-adcolony:4.14.5.0.1") + implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") + // Pangle + implementation("com.tradplusad:tradplus-pangle:19.14.5.0.1") + implementation("com.pangle.global:pag-sdk:7.3.0.3") + // UnityAds + implementation("com.tradplusad:tradplus-unity:5.14.5.0.1") + implementation("com.unity3d.ads:unity-ads:4.15.1") + // Chartboost + implementation("com.tradplusad:tradplus-chartboostx:15.14.5.0.1") + implementation("com.chartboost:chartboost-sdk:9.8.3") + implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") + implementation("com.google.android.gms:play-services-base:17.4.0") + // Inmobi + implementation("com.tradplusad:tradplus-inmobix:23.14.5.0.1") + implementation("com.inmobi.monetization:inmobi-ads-kotlin:10.8.3") + implementation("androidx.core:core-ktx:1.5.0") + implementation("com.inmobi.omsdk:inmobi-omsdk:1.5.2.0") + // Fyber + implementation("com.fyber:marketplace-sdk:8.3.7") + implementation("com.tradplusad:tradplus-fyber:24.14.5.0.1") + implementation("com.google.android.gms:play-services-ads-identifier:17.0.0") + implementation("com.google.android.gms:play-services-base:17.4.0") + // Start.io + implementation("com.startapp:inapp-sdk:5.2.3") + implementation("com.tradplusad:tradplus-startapp:28.14.5.0.1") + // Mintegral + implementation("com.tradplusad:tradplus-mintegralx_overseas:18.14.5.0.1") + implementation("androidx.recyclerview:recyclerview:1.1.0") + implementation("com.mbridge.msdk.oversea:mbridge_android_sdk:16.9.71") + // Liftoff + implementation("com.tradplusad:tradplus-vunglex:7.14.5.0.1") + implementation("com.vungle:vungle-ads:7.5.0") + // Yandex + implementation("com.yandex.android:mobileads:7.13.0") { + exclude(group = "com.caverock", module = "androidsvg-aar") + } + implementation("com.tradplusad:tradplus-yandex:50.14.6.10.1") + // Bigo + implementation("com.bigossp:bigo-ads:5.4.0") + implementation("com.tradplusad:tradplus-bigo:57.14.5.0.1") + // Cross Promotion + implementation("com.tradplusad:tradplus-crosspromotion:27.14.5.0.1") + // TP Exchange + // 请注意保持与主包版本同步更新 + implementation("com.google.code.gson:gson:2.8.6") + implementation("com.tradplusad:tp_exchange:40.14.5.0.1") + + // Google UMP + implementation ("com.google.android.ump:user-messaging-platform:3.2.0") + + // TradPlus Tools + // implementation 'com.tradplusad:tradplus-tool:1.1.4' + + //firebase + implementation(platform("com.google.firebase:firebase-bom:33.7.0")) + implementation("com.google.firebase:firebase-crashlytics") + implementation("com.google.firebase:firebase-analytics") + implementation("com.google.firebase:firebase-config") } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..dd84446 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "1039708218778", + "project_id": "sound-gags", + "storage_bucket": "sound-gags.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1039708218778:android:f00dc2f58e675e5d1d8623", + "android_client_info": { + "package_name": "com.soundapp.soundgags" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyCBz1rRYQ2Tsu0J_QsBkVxFW79zatUzDHU" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/libs/TradPlusLibrary_11_25_15_02-release.aar b/app/libs/TradPlusLibrary_11_25_15_02-release.aar new file mode 100644 index 0000000..803bb1c Binary files /dev/null and b/app/libs/TradPlusLibrary_11_25_15_02-release.aar differ diff --git a/app/libs/UpLoadLibrary_12_03_15_13-release.aar b/app/libs/UpLoadLibrary_12_03_15_13-release.aar new file mode 100644 index 0000000..a3e30aa Binary files /dev/null and b/app/libs/UpLoadLibrary_12_03_15_13-release.aar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f297c70..a40a41c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + @@ -17,6 +18,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" android:name=".ReloadApplication" android:theme="@style/Theme.SoundGags"> @@ -44,6 +46,9 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/soundapp/soundgags/ReloadApplication.kt b/app/src/main/java/com/soundapp/soundgags/ReloadApplication.kt index 033f752..751ac04 100644 --- a/app/src/main/java/com/soundapp/soundgags/ReloadApplication.kt +++ b/app/src/main/java/com/soundapp/soundgags/ReloadApplication.kt @@ -6,6 +6,7 @@ import android.util.Log import com.soundapp.soundgags.datame.AppDataBase import com.soundapp.soundgags.datame.Familiar import com.soundapp.soundgags.setting.SetUtil +import com.up.uploadlibrary.UpLoadManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -17,11 +18,16 @@ class ReloadApplication : Application() { lateinit var app: ReloadApplication lateinit var typeface: Typeface var familiars: List? = null + const val TAG = "ReloadApplication" } override fun onCreate() { super.onCreate() app = this + UpLoadManager.init(this, TAG) { _, _ -> + // 处理逻辑 + Log.d(TAG, "upload success") + } CoroutineScope(Dispatchers.IO).launch { initializeDatabase() } diff --git a/app/src/main/java/com/soundapp/soundgags/ui/JokeViewerActivity.kt b/app/src/main/java/com/soundapp/soundgags/ui/JokeViewerActivity.kt index c4ab389..9f6c989 100644 --- a/app/src/main/java/com/soundapp/soundgags/ui/JokeViewerActivity.kt +++ b/app/src/main/java/com/soundapp/soundgags/ui/JokeViewerActivity.kt @@ -5,6 +5,8 @@ import android.os.Bundle import android.os.CountDownTimer import android.os.Handler import androidx.appcompat.app.AppCompatActivity +import com.ad.tradpluslibrary.TPAdManager +import com.soundapp.soundgags.ReloadApplication import com.soundapp.soundgags.databinding.ActivityJokeViewBinding import com.soundapp.soundgags.setting.TopBarUtils @@ -12,6 +14,7 @@ class JokeViewerActivity : AppCompatActivity() { private lateinit var binding : ActivityJokeViewBinding private var handler: Handler = Handler() private var countDownTimer: CountDownTimer? = null + private var time = 14000L override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -19,24 +22,35 @@ class JokeViewerActivity : AppCompatActivity() { TopBarUtils.setLightStatusBar(this.window, true) binding = ActivityJokeViewBinding.inflate(layoutInflater) setContentView(binding.root) - handler.postDelayed({ - val intent= Intent( - this@JokeViewerActivity, - CompleteListActivity::class.java - ) - startActivity(intent) - finish() - }, 4000) - countDownTimer = object : CountDownTimer(4000, 100) { - override fun onTick(millisUntilFinished: Long) { - val progress = ((4000 - millisUntilFinished) / 4000f * 100).toInt() - binding.loadingPb.progress = progress - } - - override fun onFinish() { + TPAdManager.init( + this@JokeViewerActivity, + ReloadApplication.TAG, + "7798CDAEFBC2B1541B8B57EC7CC47F11", + "8E399B2604C0EF55A6625E21F4B46712", + "CE1D9ADA9743A8C426104487344AF712", + "8641E7001CB301CE14BAE457B5570712" + ) { + null + } + countDownTimer = TPAdManager.showWelcomeAd( + this@JokeViewerActivity, + time, + { aLong -> + val progressPercentage = (100 * aLong) / time + val percentage = 100 - progressPercentage + binding.loadingPb.progress = percentage.toInt() + }, + { binding.loadingPb.progress = 100 + val intent= Intent( + this@JokeViewerActivity, + CompleteListActivity::class.java + ) + startActivity(intent) + finish() } - }.start() + ) + countDownTimer?.start() } override fun onDestroy() { diff --git a/app/src/main/java/com/soundapp/soundgags/ui/LocalMusicActivity.kt b/app/src/main/java/com/soundapp/soundgags/ui/LocalMusicActivity.kt index e83a8a5..a6c9865 100644 --- a/app/src/main/java/com/soundapp/soundgags/ui/LocalMusicActivity.kt +++ b/app/src/main/java/com/soundapp/soundgags/ui/LocalMusicActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.os.Handler import android.os.SystemClock import androidx.appcompat.app.AppCompatActivity +import com.ad.tradpluslibrary.TPAdManager.showTPAD import com.soundapp.soundgags.R import com.soundapp.soundgags.databinding.ActivityLocalMusicBinding import com.soundapp.soundgags.setting.MediaPlayerManager @@ -28,7 +29,7 @@ class LocalMusicActivity : AppCompatActivity() { setContentView(binding!!.root) record = MediaPlayerManager(this) binding!!.audioTime.setText(R.string.time_init) - + showTPAD(this){} initClick() } diff --git a/app/src/main/java/com/soundapp/soundgags/ui/NowPlayingActivity.kt b/app/src/main/java/com/soundapp/soundgags/ui/NowPlayingActivity.kt index d7dfd4a..b539ff9 100644 --- a/app/src/main/java/com/soundapp/soundgags/ui/NowPlayingActivity.kt +++ b/app/src/main/java/com/soundapp/soundgags/ui/NowPlayingActivity.kt @@ -15,6 +15,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager +import com.ad.tradpluslibrary.TPAdManager.showTPAD import com.soundapp.soundgags.setting.SetUtil import com.soundapp.soundgags.R import com.soundapp.soundgags.setting.TypeAdapter @@ -51,6 +52,7 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener, setContentView(binding.root) viewModel = ViewModelProvider(this)[MainViewModel::class.java] popView = ClockChooseFragment(this, this) + showTPAD(this) {} initView() initAudio() initClick() @@ -79,34 +81,42 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener, private fun initClick() { //播放按钮 binding.layoutPlay.setOnClickListener { - val playing = binding.playing.isVisible - if (playing) { - if (mediaPlayer?.isPlaying == true) { - mediaPlayer?.pause() - showLoading(1) - } - } else { - if (!mediaPlayer?.isPlaying!!) { - mediaPlayer?.start() - showLoading(2) + showTPAD(this) { + val playing = binding.playing.isVisible + if (playing) { + if (mediaPlayer?.isPlaying == true) { + mediaPlayer?.pause() + showLoading(1) + } + } else { + if (!mediaPlayer?.isPlaying!!) { + mediaPlayer?.start() + showLoading(2) + } } } + } //弹出倒计时 binding.imTimer.setOnClickListener { - popView.showTop(binding.imTimer) + showTPAD(this) { + popView.showTop(binding.imTimer) + } } //like binding.imLike.setOnClickListener { - val isSelected = binding.imLike.isSelected - if(isSelected){ - viewModel.updateLikeStatus(data.name,false) - }else{ - viewModel.updateLikeStatus(data.name,true) - } - binding.imLike.isSelected = !isSelected + showTPAD(this) { + val isSelected = binding.imLike.isSelected + if (isSelected) { + viewModel.updateLikeStatus(data.name, false) + } else { + viewModel.updateLikeStatus(data.name, true) + } + binding.imLike.isSelected = !isSelected + } } + } private fun initAudio() { @@ -224,7 +234,7 @@ class NowPlayingActivity : AppCompatActivity(), LikeUpClickListener, } } - override fun onMoreClick(reflection: Reflection,isAdd: Boolean) { + override fun onMoreClick(reflection: Reflection, isAdd: Boolean) { val intent = Intent(this, NowPlayingActivity::class.java) intent.putExtra(KEY_LIST_DATA, reflection) startActivity(intent) diff --git a/app/src/main/java/com/soundapp/soundgags/ui/OpenSetActivity.kt b/app/src/main/java/com/soundapp/soundgags/ui/OpenSetActivity.kt index 63894cc..dbe7f75 100644 --- a/app/src/main/java/com/soundapp/soundgags/ui/OpenSetActivity.kt +++ b/app/src/main/java/com/soundapp/soundgags/ui/OpenSetActivity.kt @@ -3,6 +3,7 @@ package com.soundapp.soundgags.ui import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.GridLayoutManager +import com.ad.tradpluslibrary.TPAdManager.showTPAD import com.soundapp.soundgags.setting.TypeAdapter import com.soundapp.soundgags.datame.Familiar import com.bumptech.glide.Glide @@ -38,6 +39,6 @@ class OpenSetActivity : AppCompatActivity() { binding.recyclerView.adapter = adapter binding.recyclerView.layoutManager = GridLayoutManager(this, 3) adapter.setList(data.infolist) - binding.back.setOnClickListener { finish() } + binding.back.setOnClickListener { showTPAD(this){finish()} } } } \ No newline at end of file diff --git a/app/src/main/java/com/soundapp/soundgags/ui/VoiceRecorderActivity.kt b/app/src/main/java/com/soundapp/soundgags/ui/VoiceRecorderActivity.kt index 7d36431..fc61ce7 100644 --- a/app/src/main/java/com/soundapp/soundgags/ui/VoiceRecorderActivity.kt +++ b/app/src/main/java/com/soundapp/soundgags/ui/VoiceRecorderActivity.kt @@ -20,6 +20,7 @@ import java.io.File import java.io.FileOutputStream import java.io.IOException import androidx.core.net.toUri +import com.ad.tradpluslibrary.TPAdManager.showTPAD import com.soundapp.soundgags.databinding.ActivityVoiceRecorderBinding import com.soundapp.soundgags.setting.TopBarUtils @@ -126,7 +127,9 @@ class VoiceRecorderActivity : AppCompatActivity() { private fun initEvent() { binding.back.setOnClickListener { finish() } binding.audioTimeLayout.setOnClickListener { - binding.btnPlay.isSelected = !binding.btnPlay.isSelected + showTPAD(this){ + binding.btnPlay.isSelected = !binding.btnPlay.isSelected + } try { togglePrank() } catch (e: IOException) { @@ -135,6 +138,7 @@ class VoiceRecorderActivity : AppCompatActivity() { } binding.save.setOnClickListener { + showTPAD(this){} val name = binding.saveEdit.text.toString().trim() viewModel.checkSaveStatus(name, callback = { isSave -> runOnUiThread { diff --git a/app/src/main/res/xml/net.xml b/app/src/main/res/xml/net.xml new file mode 100644 index 0000000..0ac6102 --- /dev/null +++ b/app/src/main/res/xml/net.xml @@ -0,0 +1,6 @@ + + + + mobile-server.lux-ad.com + + diff --git a/build.gradle.kts b/build.gradle.kts index 922f551..935d953 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,4 +2,6 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false + id("com.google.gms.google-services") version "4.4.2" apply false + id ("com.google.firebase.crashlytics") version "3.0.2" apply false } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 20e2a01..a9bcbe8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ # 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 +org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=U # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. For more details, visit # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects diff --git a/settings.gradle.kts b/settings.gradle.kts index 745f200..91aca72 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,6 +16,26 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + //------------------------- TradPlus + // Ironsource + maven { url = uri("https://android-sdk.is.com/") } + // Pangle + maven { + url = uri("https://artifact.bytedance.com/repository/pangle") + } + // Chartboost + maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") } + maven { + name = "Chartboost Mediation’s maven repo" + url = uri("https://cboost.jfrog.io/artifactory/chartboost-mediation") + } + // Mintegral + //Launch GP market application, Android X Version + //If you fail to pull the code using gradle, add the maven warehouse configuration to the project root build.gradle file + maven { + url = + uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") + } } }