diff --git a/.gitignore b/.gitignore index 7c9a07d..108aea9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ local.properties app/release/coolkeyboard_v1.0.1(2)_07_26_15_20-release.apk app/release/coolkeyboard_v1.0.1(2)_07_26_15_45-release.aab app/release/coolkeyboard_v1.0.1(2)_07_26_16_14-release.aab +app/release/coolkeyboard_v1.0.2(3)_08_13_14_26-release.aab diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 689898a..5d73466 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,9 +1,10 @@ import java.util.Date import java.text.SimpleDateFormat + plugins { id("com.android.application") id("org.jetbrains.kotlin.android") - id ("kotlin-kapt") + id("kotlin-kapt") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") } @@ -16,15 +17,18 @@ android { applicationId = "com.key.coolkeyboard" minSdk = 23 targetSdk = 34 - versionCode = 2 - versionName = "1.0.1" - setProperty("archivesBaseName", "coolkeyboard_v" + versionName + "(${versionCode})_$timestamp") + versionCode = 3 + versionName = "1.0.2" + setProperty( + "archivesBaseName", + "coolkeyboard_v" + versionName + "(${versionCode})_$timestamp" + ) testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { - isShrinkResources =true + isShrinkResources = true isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), @@ -36,7 +40,7 @@ android { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } - buildFeatures{ + buildFeatures { viewBinding = true } } @@ -62,14 +66,14 @@ dependencies { implementation("androidx.room:room-guava:$room_version") testImplementation("androidx.room:room-testing:$room_version") implementation("androidx.room:room-paging:$room_version") - implementation ("io.github.youth5201314:banner:2.2.3") + implementation("io.github.youth5201314:banner:2.2.3") implementation(platform("com.google.firebase:firebase-bom:32.3.1")) implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-crashlytics-ktx") - + implementation("com.google.firebase:firebase-config") //-----------------------------------------------TopOn(pangle、IronSource、mintegral、unityads、liftoff(vungle)、Bigo) //Anythink (Necessary) @@ -107,8 +111,8 @@ dependencies { //Pangle implementation("com.anythink.sdk:adapter-tpn-pangle-nonchina:6.3.68.1") - implementation( "com.pangle.global:ads-sdk:6.0.0.3") - implementation( "com.google.android.gms:play-services-ads-identifier:18.0.1") + implementation("com.pangle.global:ads-sdk:6.0.0.3") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") //Mintegral implementation("com.anythink.sdk:adapter-tpn-mintegral-nonchina:6.3.68") diff --git a/app/src/main/assets/keyboard.json b/app/src/main/assets/keyboard.json index 2d87b54..c80da69 100644 --- a/app/src/main/assets/keyboard.json +++ b/app/src/main/assets/keyboard.json @@ -814,7 +814,8 @@ } ] }, - {"className": "festival","list": [ + {"className": "festival", + "list": [ { "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3ce935f39cfa4bf877370e7166523e0.webp", "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9b79cbc3b678e9a7e63d334ea66fc7c.jpg", diff --git a/app/src/main/assets/privacy.html b/app/src/main/assets/privacy.html index 8138fa8..8f6a74c 100644 --- a/app/src/main/assets/privacy.html +++ b/app/src/main/assets/privacy.html @@ -26,11 +26,13 @@ padding-left: 20px; } + +

Privacy Policy

-

Date: June 26, 2024

+

Date: August 13, 2024

We provide this Privacy Policy to help you understand how we collect, use, and disclose information, including what you may provide to us or that we obtain from our products and @@ -116,6 +118,6 @@

We may update the Privacy Policy from time to time. When we change the policy in a material way, a notice will be posted on our website along with the updated Privacy Policy.

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

+ us: saleemjeeta2@gmail.com.

diff --git a/app/src/main/java/com/key/coolkeyboard/CoolKeyboardSkin.java b/app/src/main/java/com/key/coolkeyboard/CoolKeyboardSkin.java index 7518031..4eb9463 100644 --- a/app/src/main/java/com/key/coolkeyboard/CoolKeyboardSkin.java +++ b/app/src/main/java/com/key/coolkeyboard/CoolKeyboardSkin.java @@ -13,7 +13,10 @@ import com.anythink.interstitial.api.ATInterstitial; import com.key.coolkeyboard.data.Mydata; import com.key.coolkeyboard.data.MydataBase; import com.key.coolkeyboard.data.Otherdata; +import com.key.coolkeyboard.firebase.RemoteConfigNew; import com.key.coolkeyboard.tool.Mytool; +import com.key.coolkeyboard.topon.AdManager; +import com.pgl.ssdk.S; import java.util.ArrayList; import java.util.HashSet; @@ -35,6 +38,7 @@ public class CoolKeyboardSkin extends Application { public static final String PRE_NAME = "Mypre"; public static final String PRE_KEY = "isinsert"; public static final String PRE_KEY_INIT = "isinit"; + public static final String TAG = "zzj"; public static List alllist = new ArrayList<>(); public static List lovelist = new ArrayList<>(); public static List coollist = new ArrayList<>(); @@ -152,7 +156,6 @@ public class CoolKeyboardSkin extends Application { } private void initSdk() { - // ATSDK.integrationChecking(context); ATSDK.init(context, TOP_ID, TOP_KEY); @@ -160,12 +163,14 @@ public class CoolKeyboardSkin extends Application { ads = Mytool.getAllAd(); // ATSDK.setNetworkLogDebug(true); // ATDebuggerUITest.showDebuggerUI(context,TOP_DEBUG); - + RemoteConfigNew configNew = new RemoteConfigNew(); + configNew.init(app); + AdManager.loadAllAd(); } public static List lodAd() { - return ads; + return null; } diff --git a/app/src/main/java/com/key/coolkeyboard/activity/AllActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/AllActivity.java index f1194f8..bb30f9a 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/AllActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/AllActivity.java @@ -27,13 +27,16 @@ import com.key.coolkeyboard.databinding.ActivityAllBinding; import com.key.coolkeyboard.fragment.AllFragment; import com.key.coolkeyboard.tool.Adcallback; import com.key.coolkeyboard.tool.Mytool; +import com.key.coolkeyboard.topon.AdManager; +import com.key.coolkeyboard.topon.onActionListener; +import com.vungle.ads.Ad; import java.util.ArrayList; import java.util.List; public class AllActivity extends AppCompatActivity { ActivityAllBinding binding; - private String[] listtext = {"ALL", "Love", "Cool", "Cute", "Neon", "Festival", "Gravity", "Aesthetic", "Super Theme"}; + private String[] listtext = {"ALL", "Aesthetic", "Cool", "Cute", "Festival", "Love", "Neon", "Shining", "Super Theme"}; private PageAdapter adapter; private List list = new ArrayList<>(); private TextView tabtext; @@ -54,7 +57,8 @@ public class AllActivity extends AppCompatActivity { return insets; }); - ads = CoolKeyboardSkin.lodAd(); + AdManager.loadAllAd(); +// ads = CoolKeyboardSkin.lodAd(); initView(); initEvent(); @@ -62,40 +66,52 @@ public class AllActivity extends AppCompatActivity { } - private void showAd() { - ATInterstitial mInterstitialAd = Mytool.onCache(ads); - if (mInterstitialAd == null) { - finish(); - } else { - Mytool.setCallback(mInterstitialAd, new Adcallback() { - @Override - public void onShowFail(AdError ad) { - finish(); - } - - @Override - public void onAdHidden() { - finish(); - } - }); - mInterstitialAd.show(this); - } - - } +// private void showAd() { +// ATInterstitial mInterstitialAd = Mytool.onCache(ads); +// if (mInterstitialAd == null) { +// finish(); +// } else { +// Mytool.setCallback(mInterstitialAd, new Adcallback() { +// @Override +// public void onShowFail(AdError ad) { +// finish(); +// } +// +// @Override +// public void onAdHidden() { +// finish(); +// } +// }); +// mInterstitialAd.show(this); +// } +// +// } private void initEvent() { binding.allBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showAd(); +// showAd(); + AdManager.showTopOn(AllActivity.this, new onActionListener() { + @Override + public void onAction() { + finish(); + } + }); } }); binding.allSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(AllActivity.this, SerachActivity.class); - startActivity(intent); + AdManager.showTopOn(AllActivity.this, new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(AllActivity.this, SerachActivity.class); + startActivity(intent); + } + }); + } }); } @@ -163,6 +179,12 @@ public class AllActivity extends AppCompatActivity { @Override public void onBackPressed() { super.onBackPressed(); - showAd(); +// showAd(); + AdManager.showTopOn(this, new onActionListener() { + @Override + public void onAction() { + + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/activity/MainActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/MainActivity.java index c335ff1..cf7908c 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/MainActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/MainActivity.java @@ -46,10 +46,13 @@ import com.key.coolkeyboard.adapter.PageAdapter; import com.key.coolkeyboard.data.MydataBase; import com.key.coolkeyboard.data.Otherdata; import com.key.coolkeyboard.databinding.ActivityMainBinding; +import com.key.coolkeyboard.fragment.DownloadFragment; import com.key.coolkeyboard.fragment.LikeFragment; import com.key.coolkeyboard.fragment.MainFragment; import com.key.coolkeyboard.tool.Mytool; import com.key.coolkeyboard.tool.StaticValue; +import com.key.coolkeyboard.topon.AdManager; +import com.key.coolkeyboard.topon.onActionListener; import java.io.File; import java.util.ArrayList; @@ -80,9 +83,15 @@ public class MainActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); + AdManager.loadAllAd(); initData(); showDg(); + if (Mytool.isStep1() && Mytool.isStep2()) { + dialog.dismiss(); +// Log.e("zzj", "---step1---" + Mytool.isStep1() + "---step2---" + Mytool.isStep2()); + } + } private void showDg() { @@ -111,6 +120,12 @@ public class MainActivity extends AppCompatActivity { startActivity(intent); }); dialog.findViewById(R.id.step2).setOnClickListener(v -> methodManager.showInputMethodPicker()); + dialog.findViewById(R.id.setting_cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + hideDg(); + } + }); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { @@ -178,8 +193,15 @@ public class MainActivity extends AppCompatActivity { }); toastDialog.setCanceledOnTouchOutside(false); + toastDialog.findViewById(R.id.toast_dialog_apply).setOnClickListener(v -> { - downLoad(); + AdManager.showTopOn(MainActivity.this, new onActionListener() { + @Override + public void onAction() { + downLoad(); + } + }); + }); toastDialog.findViewById(R.id.toast_dialog_cancel).setOnClickListener(new View.OnClickListener() { @@ -193,7 +215,10 @@ public class MainActivity extends AppCompatActivity { File cacheDir = this.getCacheDir(); unzipPath = cacheDir + "/" + otherdata.getTitle(); - toastDialog.show(); + if (toastDialog != null) { + toastDialog.show(); + } + toastDialog.getWindow().setAttributes(lp); } @@ -258,6 +283,7 @@ public class MainActivity extends AppCompatActivity { list.add(new MainFragment()); list.add(new LikeFragment()); + list.add(new DownloadFragment()); PageAdapter adapter = new PageAdapter(getSupportFragmentManager(), list); binding.mainViewpager.setAdapter(adapter); binding.mainTabLayout.setupWithViewPager(binding.mainViewpager); @@ -289,6 +315,9 @@ public class MainActivity extends AppCompatActivity { case 1: tab.setIcon(position == 1 ? R.drawable.like_check : R.drawable.like_uncheck); break; + case 2: + tab.setIcon(position == 2 ? R.drawable.down_check : R.drawable.down_uncheck); + break; default: break; } @@ -307,6 +336,9 @@ public class MainActivity extends AppCompatActivity { case 1: tab.setIcon(R.drawable.like_uncheck); break; + case 2: + tab.setIcon(R.drawable.down_uncheck); + break; default: break; } @@ -318,6 +350,12 @@ public class MainActivity extends AppCompatActivity { protected void onResume() { super.onResume(); updateDialogContent(); + Intent intent = getIntent(); + int a = intent.getIntExtra(StaticValue.KEY_ISshow, 0); +// Log.e("zzj", "a is------" + a); + if (a == 1) { + dialog.dismiss(); + } } @Override diff --git a/app/src/main/java/com/key/coolkeyboard/activity/PreviewActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/PreviewActivity.java index 356f540..4885ee1 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/PreviewActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/PreviewActivity.java @@ -32,6 +32,8 @@ import com.key.coolkeyboard.databinding.ActivityPreviewBinding; import com.key.coolkeyboard.tool.Adcallback; import com.key.coolkeyboard.tool.Mytool; import com.key.coolkeyboard.tool.StaticValue; +import com.key.coolkeyboard.topon.AdManager; +import com.key.coolkeyboard.topon.onActionListener; import java.io.File; import java.util.List; @@ -56,8 +58,8 @@ public class PreviewActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - - ads = CoolKeyboardSkin.lodAd(); + AdManager.loadAllAd(); +// ads = CoolKeyboardSkin.lodAd(); Intent intent = getIntent(); preview = intent.getStringExtra(StaticValue.KEY_PRE); @@ -68,27 +70,27 @@ public class PreviewActivity extends AppCompatActivity { initEvent(); } - private void showAd() { - ATInterstitial mInterstitialAd = Mytool.onCache(ads); - if (mInterstitialAd == null) { - showKey(); - - } else { - Mytool.setCallback(mInterstitialAd, new Adcallback() { - @Override - public void onShowFail(AdError ad) { - showKey(); - } - - @Override - public void onAdHidden() { - showKey(); - } - }); - mInterstitialAd.show(this); - } - - } +// private void showAd() { +// ATInterstitial mInterstitialAd = Mytool.onCache(ads); +// if (mInterstitialAd == null) { +// showKey(); +// +// } else { +// Mytool.setCallback(mInterstitialAd, new Adcallback() { +// @Override +// public void onShowFail(AdError ad) { +// showKey(); +// } +// +// @Override +// public void onAdHidden() { +// showKey(); +// } +// }); +// mInterstitialAd.show(this); +// } +// +// } private void showKey() { Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); @@ -102,7 +104,13 @@ public class PreviewActivity extends AppCompatActivity { binding.previewBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + AdManager.showTopOn(PreviewActivity.this, new onActionListener() { + @Override + public void onAction() { + finish(); + } + }); + } }); @@ -116,7 +124,12 @@ public class PreviewActivity extends AppCompatActivity { binding.previewIslike.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - checkLike(); + AdManager.showTopOn(PreviewActivity.this, new onActionListener() { + @Override + public void onAction() { + checkLike(); + } + }); } }); @@ -152,6 +165,10 @@ public class PreviewActivity extends AppCompatActivity { Intent intent = new Intent(this, SettingActivity.class); startActivity(intent); } else { +// Intent intent = new Intent(); +// intent.putExtra(StaticValue.KEY_ISshow, 1); +// startActivity(intent); + binding.downloadProgress.setVisibility(View.VISIBLE); binding.downloadImage.setVisibility(View.GONE); binding.downloadText.setVisibility(View.GONE); @@ -160,6 +177,7 @@ public class PreviewActivity extends AppCompatActivity { Mytool.unZip(this, unzipPath, resource, (successful1, resDirPath) -> { if (successful1) { StaticValue.PATH = resDirPath; + otherdata.setPath(resDirPath); otherdata.setDownloaded(true); Mytool.runIO(new Runnable() { @Override @@ -167,7 +185,13 @@ public class PreviewActivity extends AppCompatActivity { MydataBase.getInstance().myDAO().update(otherdata); } }); - showAd(); + AdManager.showTopOn(this, new onActionListener() { + @Override + public void onAction() { + showKey(); + } + }); +// showAd(); } else { Toast.makeText(PreviewActivity.this, getString(R.string.text_zip_failed), Toast.LENGTH_SHORT).show(); } @@ -183,6 +207,7 @@ public class PreviewActivity extends AppCompatActivity { } private void initData() { + binding.download.setSelected(false); binding.previewTitle.setTypeface(Typeface.createFromAsset(getAssets(), "Baumans-Regular.ttf")); binding.previewTitle.setText(name); binding.imageProgress.setVisibility(View.VISIBLE); @@ -205,6 +230,12 @@ public class PreviewActivity extends AppCompatActivity { binding.downloadText.setText(R.string.download_apply); binding.downloadImage.setVisibility(View.GONE); } + String path = StaticValue.PATH; + if (path.equals(otherdata.getPath())) { + binding.download.setSelected(true); + binding.downloadText.setText(R.string.download_text_using); + binding.download.setEnabled(false); + } } } }); @@ -230,4 +261,14 @@ public class PreviewActivity extends AppCompatActivity { } + @Override + public void onBackPressed() { + super.onBackPressed(); + AdManager.showTopOn(PreviewActivity.this, new onActionListener() { + @Override + public void onAction() { + + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/activity/SerachActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/SerachActivity.java index c330ca2..e4c997f 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/SerachActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/SerachActivity.java @@ -25,6 +25,8 @@ import com.key.coolkeyboard.databinding.ActivitySerachBinding; import com.key.coolkeyboard.tool.Mytool; import com.key.coolkeyboard.tool.SpaceItem; import com.key.coolkeyboard.tool.StaticValue; +import com.key.coolkeyboard.topon.AdManager; +import com.key.coolkeyboard.topon.onActionListener; import java.util.ArrayList; import java.util.List; @@ -47,7 +49,7 @@ public class SerachActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - + AdManager.loadAllAd(); Intent intent = getIntent(); text = intent.getStringExtra(StaticValue.KEY_TEXT); @@ -63,7 +65,13 @@ public class SerachActivity extends AppCompatActivity { binding.searchBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + AdManager.showTopOn(SerachActivity.this, new onActionListener() { + @Override + public void onAction() { + finish(); + } + }); +// finish(); } }); binding.searchSearch.setOnClickListener(new View.OnClickListener() { @@ -134,4 +142,15 @@ public class SerachActivity extends AppCompatActivity { super.onPause(); hideKeyView(); } + + @Override + public void onBackPressed() { + super.onBackPressed(); + AdManager.showTopOn(this, new onActionListener() { + @Override + public void onAction() { + + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/activity/SettingActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/SettingActivity.java index 2fbfc94..cd907b6 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/SettingActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/SettingActivity.java @@ -20,6 +20,7 @@ import com.key.coolkeyboard.CoolKeyboardSkin; import com.key.coolkeyboard.R; import com.key.coolkeyboard.databinding.ActivitySettingBinding; import com.key.coolkeyboard.tool.Mytool; +import com.key.coolkeyboard.topon.AdManager; public class SettingActivity extends AppCompatActivity { ActivitySettingBinding binding; @@ -38,7 +39,7 @@ public class SettingActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - + AdManager.loadAllAd(); binding.settingTitle.setTypeface(Typeface.createFromAsset(getAssets(), "Baumans-Regular.ttf")); @@ -50,12 +51,6 @@ public class SettingActivity extends AppCompatActivity { binding.step1.setSelected(step1); binding.step2.setSelected(step2); intImage(); - if (step1 && step2) { - Intent settingIntent = new Intent(context, SettingActivity.class); - settingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - context.startActivity(settingIntent); - finish(); - } } }; registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_INPUT_METHOD_CHANGED)); diff --git a/app/src/main/java/com/key/coolkeyboard/activity/ShowKeyboardActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/ShowKeyboardActivity.java index aded9c2..90ad582 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/ShowKeyboardActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/ShowKeyboardActivity.java @@ -10,10 +10,13 @@ import android.content.Context; import android.graphics.Typeface; import android.os.Bundle; import android.os.Handler; +import android.view.View; import android.view.inputmethod.InputMethodManager; import com.key.coolkeyboard.R; import com.key.coolkeyboard.databinding.ActivityShowKeyboardBinding; +import com.key.coolkeyboard.topon.AdManager; +import com.key.coolkeyboard.topon.onActionListener; public class ShowKeyboardActivity extends AppCompatActivity { ActivityShowKeyboardBinding binding; @@ -30,8 +33,18 @@ public class ShowKeyboardActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - - binding.showkeyBack.setOnClickListener(v -> finish()); + AdManager.loadAllAd(); + binding.showkeyBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdManager.showTopOn(ShowKeyboardActivity.this, new onActionListener() { + @Override + public void onAction() { + finish(); + } + }); + } + }); binding.showkeyTitle.setTypeface(Typeface.createFromAsset(getAssets(), "Baumans-Regular.ttf")); } @@ -55,4 +68,15 @@ public class ShowKeyboardActivity extends AppCompatActivity { imm.hideSoftInputFromWindow(binding.showkeyEdit.getWindowToken(), 0); binding.showkeyEdit.clearFocus(); } + + @Override + public void onBackPressed() { + super.onBackPressed(); + AdManager.showTopOn(ShowKeyboardActivity.this, new onActionListener() { + @Override + public void onAction() { + + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/activity/SplashActivity.java b/app/src/main/java/com/key/coolkeyboard/activity/SplashActivity.java index 10e6d43..845b40c 100644 --- a/app/src/main/java/com/key/coolkeyboard/activity/SplashActivity.java +++ b/app/src/main/java/com/key/coolkeyboard/activity/SplashActivity.java @@ -19,12 +19,18 @@ import com.key.coolkeyboard.CoolKeyboardSkin; import com.key.coolkeyboard.R; import com.key.coolkeyboard.databinding.ActivityPreviewBinding; import com.key.coolkeyboard.databinding.ActivitySplashBinding; +import com.key.coolkeyboard.firebase.RemoteConfigNew; import com.key.coolkeyboard.tool.Adcallback; import com.key.coolkeyboard.tool.CustomProgressBar; import com.key.coolkeyboard.tool.Mytool; +import com.key.coolkeyboard.topon.AdManager; import java.util.List; +import kotlin.Unit; +import kotlin.jvm.functions.Function0; +import kotlin.jvm.functions.Function1; + public class SplashActivity extends AppCompatActivity { ActivitySplashBinding binding; private CountDownTimer countDownTimer; @@ -46,31 +52,50 @@ public class SplashActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - - ads = CoolKeyboardSkin.lodAd(); + AdManager.loadAllAd(); +// ads = CoolKeyboardSkin.lodAd(); binding.splashTitle.setTypeface(Typeface.createFromAsset(getAssets(), "Baumans-Regular.ttf")); - countDownTimer = new CountDownTimer(10100, 100) { + countDownTimer = AdManager.showWelcomeAd(this, 10100, new Function1() { @Override - public void onTick(long l) { - i++; - binding.splashPg.setProgress(i); - if (!isAlreadyShow) { - showAd(false); - } + public Unit invoke(Long aLong) { + Float percentage = 100 - (float) aLong / 10100 * 100; +// round = Integer.parseInt(String.valueOf(percentage)); + binding.splashPg.setProgress(percentage); +// i++; +// binding.splashPg.setProgress(i); + return null; } - + }, new Function0() { @Override - public void onFinish() { - if (!isAlreadyShow) { - showAd(true); - } + public Unit invoke() { + starMainactivity(); + return null; } - }; - + }); countDownTimer.start(); +// countDownTimer = new CountDownTimer(10100, 100) { +// @Override +// public void onTick(long l) { +// i++; +// binding.splashPg.setProgress(i); +// if (!isAlreadyShow) { +// showAd(false); +// } +// } +// +// @Override +// public void onFinish() { +// if (!isAlreadyShow) { +// showAd(true); +// } +// } +// }; +// +// countDownTimer.start(); + } diff --git a/app/src/main/java/com/key/coolkeyboard/data/MyDAO.java b/app/src/main/java/com/key/coolkeyboard/data/MyDAO.java index 8540cbb..902910a 100644 --- a/app/src/main/java/com/key/coolkeyboard/data/MyDAO.java +++ b/app/src/main/java/com/key/coolkeyboard/data/MyDAO.java @@ -24,6 +24,9 @@ public interface MyDAO { @Query("SELECT * FROM keyboard_table WHERE islike = :islike") List getlikelist(boolean islike); + @Query("SELECT * FROM keyboard_table WHERE isDownloaded = :isdownload") + List getdownloadlist(boolean isdownload); + @Query("SELECT * FROM keyboard_table WHERE title LIKE '%' || :title || '%'") List getSearchData(String title); diff --git a/app/src/main/java/com/key/coolkeyboard/data/Otherdata.java b/app/src/main/java/com/key/coolkeyboard/data/Otherdata.java index 8660b97..f722891 100644 --- a/app/src/main/java/com/key/coolkeyboard/data/Otherdata.java +++ b/app/src/main/java/com/key/coolkeyboard/data/Otherdata.java @@ -4,6 +4,7 @@ import androidx.room.Entity; import androidx.room.PrimaryKey; import com.key.coolkeyboard.CoolKeyboardSkin; +import com.pgl.ssdk.S; import java.util.ArrayList; import java.util.List; @@ -20,6 +21,15 @@ public class Otherdata { public String zipUrl; public Boolean islike; public Boolean isDownloaded; + public String path; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } public Boolean getDownloaded() { return isDownloaded; diff --git a/app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigKey.kt b/app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigKey.kt new file mode 100644 index 0000000..c9e8059 --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigKey.kt @@ -0,0 +1,245 @@ +package com.key.coolkeyboard.firebase + +object RemoteConfigKey { + + //配置在firebase中的key,通过它取出自己配置的json + const val KEY_AD_SHOW_INTERVAL = "key_ad_show_interval" + + + const val DEFAULT_AD_JSON = """ +{ + "AD_SHOW_LIMIT": { + "admob_inst": 100, + "admob_native": 100, + "max_banner": 100, + "max_inst": 100, + "max_native": 100 + }, + "sounds_inst_show_interval": 25000, + "LOLAds_EXPIRE_HOURS_NEW_USER": 20, + "sounds_inst_splash": { + "data": [{ + "after_click": { + "admob_inst": "keep", + "max_inst": "keep" + }, + "block": { + "admob_inst": { + "delay": 0, + "rate": 0 + }, + "max_inst": { + "delay": 0, + "rate": 0 + } + }, + "close": { + "admob_inst": { + "delay": 0, + "rate": 0 + }, + "max_inst": { + "delay": 0, + "rate": 0 + } + }, + "config": [ + [ + "admob_inst", + { + "ca-app-pub-2419639357236809/7376891200": 100 + } + ] + ], + "limit": { + "admob_inst": 100, + "max_inst": 100 + }, + "cycle": 0, + "timeout": 15000, + "showIntervalEnable": false + }] + }, + "sounds_inst_into_play": { + "data": [{ + "after_click": { + "admob_inst": "keep", + "max_inst": "keep" + }, + "block": { + "admob_inst": { + "delay": 0, + "rate": 0 + }, + "max_inst": { + "delay": 0, + "rate": 0 + } + }, + "close": { + "admob_inst": { + "delay": 0, + "rate": 0 + }, + "max_inst": { + "delay": 0, + "rate": 0 + } + }, + "config": [ + [ + "admob_inst", + { + "ca-app-pub-2419639357236809/9750976941": 100 + } + ] + ], + "limit": { + "admob_inst": 100, + "max_inst": 100 + }, + "cycle": 0, + "timeout": 15000, + "showIntervalEnable": false + }] + }, + "sounds_inst_exit_sounds_list": { + "data": [{ + "after_click": { + "admob_inst": "keep", + "max_inst": "keep" + }, + "block": { + "admob_inst": { + "delay": 0, + "rate": 0 + }, + "max_inst": { + "delay": 0, + "rate": 0 + } + }, + "close": { + "admob_inst": { + "delay": 0, + "rate": 0 + }, + "max_inst": { + "delay": 0, + "rate": 0 + } + }, + "config": [ + [ + "admob_inst", + { + "ca-app-pub-2419639357236809/9844693327": 100 + } + ] + ], + "limit": { + "admob_inst": 100, + "max_inst": 100 + }, + "cycle": 0, + "timeout": 15000, + "showIntervalEnable": false + }] + }, + "sounds_android_native_musicList": { + "data": [{ + "config": [ + [ + "admob_native", + { + "ca-app-pub-2419639357236809/9811482858": 100 + } + ] + ], + "block": { + "admob_native": { + "delay": 0, + "rate": 0 + }, + "max_native": { + "delay": 0, + "rate": 0 + } + }, + "click": { + "admob_native": [ + 100, + 100, + 100, + 100, + 100 + ], + "max_native": [ + 100, + 100, + 100, + 100, + 100 + ] + }, + "after_click": { + "admob_native": "next", + "max_native": "next" + }, + "limit": { + "admob_native": 100, + "max_native": 100 + } + }] + }, + "sounds_android_native_play": { + "data": [{ + "config": [ + [ + "admob_native", + { + "ca-app-pub-2419639357236809/8134642941": 100 + } + ] + ], + "block": { + "admob_native": { + "delay": 0, + "rate": 0 + }, + "max_native": { + "delay": 0, + "rate": 0 + } + }, + "click": { + "admob_native": [ + 100, + 100, + 100, + 100, + 100 + ], + "max_native": [ + 100, + 100, + 100, + 100, + 100 + ] + }, + "after_click": { + "admob_native": "next", + "max_native": "next" + }, + "limit": { + "admob_native": 100, + "max_native": 100 + } + }] + } +} + """ +//"{\"AD_SHOW_LIMIT\":{\"max_banner\":100,\"max_inst\":100,\"max_native\":100},\"sounds_inst_show_interval\":25000,\"LOLAds_EXPIRE_HOURS_NEW_USER\":20,\"sounds_inst_splash\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"f685a8fc471fd92b\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_into_sounds_list\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"2a1e13e10c0358c9\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_into_play\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"2a1e13e10c0358c9\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_into_play2\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"2a1e13e10c0358c9\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_exit_sounds_list\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"b0c27a89f370cbed\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_exit_play\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"b0c27a89f370cbed\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_exit_play2\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"b0c27a89f370cbed\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_exit_edit\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"b0c27a89f370cbed\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_inst_create_next\":{\"data\":[{\"after_click\":{\"max_inst\":\"keep\"},\"block\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"close\":{\"max_inst\":{\"delay\":0,\"rate\":0}},\"config\":[[\"max_inst\",{\"66d99619cea2243d\":100}]],\"limit\":{\"max_inst\":100},\"cycle\":0,\"timeout\":15000,\"showIntervalEnable\":false}]},\"sounds_android_native_musicList\":{\"data\":[{\"config\":[[\"max_native\",{\"2aa4162b650aa26d\":100}]],\"block\":{\"max_native\":{\"delay\":0,\"rate\":0}},\"click\":{\"max_native\":[100,100,100,100,100]},\"after_click\":{\"max_native\":\"next\"},\"limit\":{\"max_native\":100}}]},\"sounds_android_native_play\":{\"data\":[{\"config\":[[\"max_native\",{\"35f6847f26ddcd76\":100}]],\"block\":{\"max_native\":{\"delay\":0,\"rate\":0}},\"click\":{\"max_native\":[100,100,100,100,100]},\"after_click\":{\"max_native\":\"next\"},\"limit\":{\"max_native\":100}}]}}" +} + diff --git a/app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigNew.kt b/app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigNew.kt new file mode 100644 index 0000000..59c47e7 --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigNew.kt @@ -0,0 +1,141 @@ +package com.key.coolkeyboard.firebase + +import android.app.Application +import android.content.Context +import android.os.Handler +import android.os.Looper +import android.os.Message +import android.text.TextUtils +import android.util.Log +import com.google.firebase.remoteconfig.BuildConfig +import com.google.firebase.remoteconfig.ConfigUpdate +import com.google.firebase.remoteconfig.ConfigUpdateListener +import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import com.google.firebase.remoteconfig.FirebaseRemoteConfigException +import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings +import com.google.firebase.remoteconfig.FirebaseRemoteConfigValue +import com.key.coolkeyboard.CoolKeyboardSkin + +import java.lang.ref.WeakReference + + +class RemoteConfigNew { + + + private var ctx: Context? = null + private var mFirebaseRemoteConfig: FirebaseRemoteConfig? = null + + //配置是否初始化成功 + private var isInit = false + + //上次获取数据的时间 + private var lastFetchTime: Long = 0 + private val handler = MHandler(this) + + + companion object { + const val MSG_REFRESH_CONFIG = 1 + val instance: RemoteConfigNew by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + RemoteConfigNew() + } + } + + fun init(ctx: Application) { + this.ctx = ctx + initConfig() + fetchConfig() + onConfigUpdate() + } + + private fun initConfig() { + var intervalTime = (60 * 10).toLong() + //如果是开发状态,则将提取时间缩短 + if (BuildConfig.DEBUG) { + intervalTime = (60 * 5).toLong() + } + mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance() + val configSettings = + FirebaseRemoteConfigSettings.Builder() //默认值12小时的最短提取间隔,如果在间隔内取值,则优先取上次的结果 + .setMinimumFetchIntervalInSeconds(intervalTime).build() + mFirebaseRemoteConfig!!.setConfigSettingsAsync(configSettings) + } + + private fun onConfigUpdate() { + mFirebaseRemoteConfig!!.addOnConfigUpdateListener(object : ConfigUpdateListener { + override fun onUpdate(configUpdate: ConfigUpdate) { + Log.d(CoolKeyboardSkin.TAG, "Updated keys: " + configUpdate.updatedKeys) + try { + mFirebaseRemoteConfig!!.activate().addOnCompleteListener { task -> + if (task.isSuccessful) { + updateData("onConfigUpdate", mFirebaseRemoteConfig!!.all) + } + } + } catch (ignore: Exception) { + } + } + + override fun onError(error: FirebaseRemoteConfigException) { + Log.d(CoolKeyboardSkin.TAG, "Config update error with code: " + error.code) + } + }) + } + + private fun fetchConfig() { + //这里可能会抛出异常 FirebaseRemoteConfigFetchThrottledException + try { + mFirebaseRemoteConfig!!.fetchAndActivate().addOnCompleteListener { task -> + if (task.isSuccessful) { + isInit = true + lastFetchTime = System.currentTimeMillis() + updateData("fetchAndActivate", mFirebaseRemoteConfig!!.all) + //24小时后,重新再去获取 + handler.removeMessages(MSG_REFRESH_CONFIG) + handler.sendEmptyMessageDelayed( + MSG_REFRESH_CONFIG, (1000 * 60 * 60 * 24).toLong() + ) + } else { + //15分钟后重新再去获取 + handler.removeMessages(MSG_REFRESH_CONFIG) + handler.sendEmptyMessageDelayed(MSG_REFRESH_CONFIG, (1000 * 60 * 15).toLong()) + } + } + } catch (ignore: Exception) { + } + } + + private fun updateData(from: String, all: Map) { + for ((key, value) in all) { + try { + Log.d( + CoolKeyboardSkin.TAG, "from = " + from + "Key = " + key + " Value = " + value.asString() + ) + if (TextUtils.equals(RemoteConfigKey.KEY_AD_SHOW_INTERVAL, key)) { + Sp.getInstance(CoolKeyboardSkin.app) + .putLong(RemoteConfigKey.KEY_AD_SHOW_INTERVAL, value.asLong()).commit() + } + + } catch (ignore: Exception) { + + } + } + } + + private class MHandler(remoteConfig: RemoteConfigNew) : Handler(Looper.getMainLooper()) { + private val weakReference: WeakReference + + init { + weakReference = WeakReference(remoteConfig) + } + + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val remoteConfig = weakReference.get() + if (remoteConfig?.ctx != null) { + if (msg.what == MSG_REFRESH_CONFIG) { + remoteConfig.fetchConfig() + } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/firebase/Sp.java b/app/src/main/java/com/key/coolkeyboard/firebase/Sp.java new file mode 100644 index 0000000..e888bfd --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/firebase/Sp.java @@ -0,0 +1,43 @@ +package com.key.coolkeyboard.firebase; + +import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; + +import com.key.coolkeyboard.topon.AdManager; + + +public class Sp { + private static String spName = "AD_SHOW"; + private static Sp instance; + private SharedPreferences.Editor editor; + + private SharedPreferences preferences; + + private Sp(Application context) { + preferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); + editor = preferences.edit(); + } + + + public static Sp getInstance(Application context) { + if (instance == null) { + instance = new Sp(context); + } + return instance; + } + + + public Sp putLong(String key, long value) { + editor.putLong(key, value); + return this; + } + + public boolean commit() { + return editor.commit(); + } + + public long getLongValue(String key) { + return preferences.getLong(key, AdManager.VALUE_SHOW_INTERVAL); + } +} diff --git a/app/src/main/java/com/key/coolkeyboard/fragment/AllFragment.java b/app/src/main/java/com/key/coolkeyboard/fragment/AllFragment.java index 13032fe..050dee4 100644 --- a/app/src/main/java/com/key/coolkeyboard/fragment/AllFragment.java +++ b/app/src/main/java/com/key/coolkeyboard/fragment/AllFragment.java @@ -49,7 +49,7 @@ public class AllFragment extends Fragment { thumAdapter = new ThumAdapter(requireContext(), CoolKeyboardSkin.getNeonlist()); } else if (tabargs.equals("Festival")) { thumAdapter = new ThumAdapter(requireContext(), CoolKeyboardSkin.getFestivallist()); - } else if (tabargs.equals("Gravity")) { + } else if (tabargs.equals("Shining")) { thumAdapter = new ThumAdapter(requireContext(), CoolKeyboardSkin.getGravitylist()); } else if (tabargs.equals("Aesthetic")) { thumAdapter = new ThumAdapter(requireContext(), CoolKeyboardSkin.getAestheticlist()); diff --git a/app/src/main/java/com/key/coolkeyboard/fragment/DownloadFragment.java b/app/src/main/java/com/key/coolkeyboard/fragment/DownloadFragment.java new file mode 100644 index 0000000..4891b0a --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/fragment/DownloadFragment.java @@ -0,0 +1,75 @@ +package com.key.coolkeyboard.fragment; + +import android.graphics.Typeface; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.key.coolkeyboard.R; +import com.key.coolkeyboard.adapter.ThumAdapter; +import com.key.coolkeyboard.data.MydataBase; +import com.key.coolkeyboard.data.Otherdata; +import com.key.coolkeyboard.databinding.FragmentDownloadBinding; +import com.key.coolkeyboard.tool.Mytool; +import com.key.coolkeyboard.tool.SpaceItem; + +import java.util.ArrayList; +import java.util.List; + + +public class DownloadFragment extends Fragment { + FragmentDownloadBinding binding; + private SpaceItem spaceItem = new SpaceItem(12, 12, 12); + private List likelist = new ArrayList<>(); + private ThumAdapter thumAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentDownloadBinding.inflate(getLayoutInflater()); + + binding.downTitle.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "Baumans-Regular.ttf")); + binding.downText.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "Baumans-Regular.ttf")); + + initData(); + binding.downRv.addItemDecoration(spaceItem); + + return binding.getRoot(); + } + + private void initData() { + Mytool.runIO(new Runnable() { + @Override + public void run() { + likelist = MydataBase.getInstance().myDAO().getdownloadlist(true); + requireActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (likelist.isEmpty()) { + binding.downHintImage.setVisibility(View.VISIBLE); + binding.downText.setVisibility(View.VISIBLE); + } else { + binding.downHintImage.setVisibility(View.GONE); + binding.downText.setVisibility(View.GONE); + } + thumAdapter = new ThumAdapter(requireContext(), likelist); + binding.downRv.setLayoutManager(new GridLayoutManager(requireContext(), 2)); + binding.downRv.setAdapter(thumAdapter); + } + }); + + } + }); + } + + @Override + public void onResume() { + super.onResume(); + initData(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/fragment/MainFragment.java b/app/src/main/java/com/key/coolkeyboard/fragment/MainFragment.java index 599c894..9676015 100644 --- a/app/src/main/java/com/key/coolkeyboard/fragment/MainFragment.java +++ b/app/src/main/java/com/key/coolkeyboard/fragment/MainFragment.java @@ -34,6 +34,8 @@ import com.key.coolkeyboard.databinding.FragmentMainBinding; import com.key.coolkeyboard.tool.Mytool; import com.key.coolkeyboard.tool.SpaceItem; import com.key.coolkeyboard.tool.StaticValue; +import com.key.coolkeyboard.topon.AdManager; +import com.key.coolkeyboard.topon.onActionListener; import com.youth.banner.adapter.BannerImageAdapter; import com.youth.banner.holder.BannerImageHolder; import com.youth.banner.indicator.CircleIndicator; @@ -78,10 +80,15 @@ public class MainFragment extends Fragment { binding.rateCons.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - String url = "https://play.google.com/store/apps/details?id=com.key.coolkeyboard"; - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - startActivity(intent); + try { + String url = "https://play.google.com/store/apps/details?id=com.key.coolkeyboard"; + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + } catch (Exception e) { + + } + } }); @@ -109,24 +116,35 @@ public class MainFragment extends Fragment { binding.minSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - String text = binding.mainEdit.getText().toString(); - hideKeyboard(); - if (!TextUtils.isEmpty(text)) { - Intent intent = new Intent(requireContext(), SerachActivity.class); - intent.putExtra(StaticValue.KEY_TEXT, text); - intent.putExtra(StaticValue.KEY_ISMAINSH, text); - startActivity(intent); - } else { - Toast.makeText(requireContext(), getString(R.string.text_tips), Toast.LENGTH_SHORT).show(); - } + AdManager.showTopOn(requireActivity(), new onActionListener() { + @Override + public void onAction() { + String text = binding.mainEdit.getText().toString(); + hideKeyboard(); + if (!TextUtils.isEmpty(text)) { + Intent intent = new Intent(requireContext(), SerachActivity.class); + intent.putExtra(StaticValue.KEY_TEXT, text); + intent.putExtra(StaticValue.KEY_ISMAINSH, text); + startActivity(intent); + } else { + Toast.makeText(requireContext(), getString(R.string.text_tips), Toast.LENGTH_SHORT).show(); + } + } + }); } }); binding.mainViewAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(requireContext(), AllActivity.class); - startActivity(intent); + AdManager.showTopOn(requireActivity(), new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(requireContext(), AllActivity.class); + startActivity(intent); + } + }); + } }); diff --git a/app/src/main/java/com/key/coolkeyboard/keyboard/MyKeyboard.java b/app/src/main/java/com/key/coolkeyboard/keyboard/MyKeyboard.java index d4b16f6..3e7faeb 100644 --- a/app/src/main/java/com/key/coolkeyboard/keyboard/MyKeyboard.java +++ b/app/src/main/java/com/key/coolkeyboard/keyboard/MyKeyboard.java @@ -105,6 +105,7 @@ public class MyKeyboard extends KeyboardView { config.init(); float texsize = Mytool.spToPpx(20f, this.getContext()); mPaint.setTextSize(texsize); + setPreviewEnabled(false); } public void updateConfigView(Context con) { diff --git a/app/src/main/java/com/key/coolkeyboard/tool/Mytool.java b/app/src/main/java/com/key/coolkeyboard/tool/Mytool.java index 944e834..6890d02 100644 --- a/app/src/main/java/com/key/coolkeyboard/tool/Mytool.java +++ b/app/src/main/java/com/key/coolkeyboard/tool/Mytool.java @@ -62,9 +62,9 @@ public class Mytool { private static InputMethodManager methodManager = (InputMethodManager) CoolKeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE); private static ExecutorService executorService; - private static final String one_AD = "n66a23b25d78ba"; - private static final String two_Ad = "n66a23b25ada67"; - private static final String three_ad = "n66a23b257ca0e"; + public static final String one_AD = "n66a23b25d78ba"; + public static final String two_Ad = "n66a23b25ada67"; + public static final String three_ad = "n66a23b257ca0e"; private static ArrayList adArrayList; diff --git a/app/src/main/java/com/key/coolkeyboard/tool/StaticValue.java b/app/src/main/java/com/key/coolkeyboard/tool/StaticValue.java index 451415a..382cf53 100644 --- a/app/src/main/java/com/key/coolkeyboard/tool/StaticValue.java +++ b/app/src/main/java/com/key/coolkeyboard/tool/StaticValue.java @@ -7,4 +7,5 @@ public class StaticValue { public static String PATH = ""; public static String KEY_TEXT = ""; public static String KEY_ISMAINSH = ""; + public static String KEY_ISshow = ""; } diff --git a/app/src/main/java/com/key/coolkeyboard/topon/AdListener.kt b/app/src/main/java/com/key/coolkeyboard/topon/AdListener.kt new file mode 100644 index 0000000..9c0193d --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/topon/AdListener.kt @@ -0,0 +1,11 @@ +package com.key.coolkeyboard.topon + +interface AdListener { + + fun loadFail(placeId: String) + fun showSuccess() + + fun showFail() + + fun showClose() +} \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/topon/AdManager.kt b/app/src/main/java/com/key/coolkeyboard/topon/AdManager.kt new file mode 100644 index 0000000..3c80305 --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/topon/AdManager.kt @@ -0,0 +1,244 @@ +package com.key.coolkeyboard.topon + +import android.app.Activity +import android.os.CountDownTimer +import android.util.Log +import com.anythink.core.api.ATAdInfo +import com.anythink.core.api.AdError +import com.anythink.interstitial.api.ATInterstitial +import com.anythink.interstitial.api.ATInterstitialListener +import com.key.coolkeyboard.CoolKeyboardSkin +import com.key.coolkeyboard.firebase.RemoteConfigKey +import com.key.coolkeyboard.firebase.Sp + + +object AdManager { + + //默认的广告展示间隔时间20s + const val VALUE_SHOW_INTERVAL = 1000 * 30L + + //上次广告展示时刻 + var LAST_AD_SHOW = 0L + + const val type_no_cache = 0 + const val type_has_cache = 1 + const val type_show_success = 2 + const val type_show_close = 3 + const val type_show_fail = 4 + + /** + n66b1d3d019590 + n66b1d3cfebd3c + n66b1d3cfc4f3b + */ + + const val place1Id = "n66a23b25d78ba" + const val place2Id = "n66a23b25ada67" + const val place3Id = "n66a23b257ca0e" + + + var place1LoadFail = false + var place2LoadFail = false + var place3LoadFail = false + + val list = mutableListOf() + + + @JvmStatic + fun loadAllAd() { + if (list.size <= 0) { + val mInterstitialAd1 = ATInterstitial(CoolKeyboardSkin.app, place1Id) + val mInterstitialAd2 = ATInterstitial(CoolKeyboardSkin.app, place2Id) + val mInterstitialAd3 = ATInterstitial(CoolKeyboardSkin.app, place3Id) + list.add(mInterstitialAd1) + list.add(mInterstitialAd2) + list.add(mInterstitialAd3) + } + for (ad in list) { + if (!ad.isAdReady) { + setCallBack(ad, object : AdListener { + override fun loadFail(placeId: String) { + if (placeId == place1Id) { + place1LoadFail = true + } + if (placeId == place2Id) { + place2LoadFail = true + } + if (placeId == place3Id) { + place3LoadFail = true + } + } + + override fun showSuccess() { + + } + + override fun showFail() { + + } + + override fun showClose() { + + } + + }) + ad.load() + } + } + + + } + + @JvmStatic + fun getReadyAd(): ATInterstitial? { + + if (LAST_AD_SHOW > 0L) { + val adInterval = + Sp.getInstance(CoolKeyboardSkin.app) + .getLongValue(RemoteConfigKey.KEY_AD_SHOW_INTERVAL) + val curInterval = System.currentTimeMillis() - LAST_AD_SHOW + + Log.d( + CoolKeyboardSkin.TAG, + "-广告判断------------LAST_AD_SHOW=$LAST_AD_SHOW curInterval=${curInterval} adInterval=${adInterval}" + ) + if (curInterval < adInterval) { + Log.d( + CoolKeyboardSkin.TAG, + "-没有广告--------" + ) + return null + } + } + list.shuffle() + for (ad in list) { + if (ad.isAdReady) { + Log.d(CoolKeyboardSkin.TAG, "-有广告------------") + return ad + } + } + Log.d(CoolKeyboardSkin.TAG, "-没有广告------------") + return null + } + + + @JvmStatic + fun showWelcomeAd( + activity: Activity, + totalTim: Long, + countAction: (Long) -> Unit, + goMain:()->Unit + ): CountDownTimer { + var alreadyShow = false + var timer = object : CountDownTimer(totalTim, 100) { + override fun onTick(millisUntilFinished: Long) { + countAction.invoke(millisUntilFinished) + if (!alreadyShow) { + showAD(activity) { + if (it == type_has_cache) { + alreadyShow = true + } + if (it == type_show_close || it == type_show_fail) { + goMain.invoke() + } + + } + } + + } + + override fun onFinish() { + if (!alreadyShow) { + showAD(activity) { + if (it == type_show_close || it == type_show_fail || it == type_no_cache) { + goMain.invoke() + } + } + } + } + + } + return timer + } + + private fun setCallBack(ad: ATInterstitial, listener: AdListener) { + ad.setAdListener(object : ATInterstitialListener { + override fun onInterstitialAdLoaded() { + Log.d(CoolKeyboardSkin.TAG, "LoadLoaded ${ad.mPlacementId}") + } + + override fun onInterstitialAdLoadFail(p0: AdError?) { + Log.d(CoolKeyboardSkin.TAG, "LoadFail:${p0?.code} ${p0?.desc}") + } + + override fun onInterstitialAdClicked(p0: ATAdInfo?) { + + } + + override fun onInterstitialAdShow(p0: ATAdInfo?) { + Log.d(CoolKeyboardSkin.TAG, "AdShow ${p0?.showId} ") + listener.showSuccess() + ad.load() + } + + override fun onInterstitialAdClose(p0: ATAdInfo?) { + listener.showClose() + } + + override fun onInterstitialAdVideoStart(p0: ATAdInfo?) { + + } + + override fun onInterstitialAdVideoEnd(p0: ATAdInfo?) { + + } + + override fun onInterstitialAdVideoError(p0: AdError?) { + listener.showFail() + } + + }) + } + + + @JvmStatic + private fun showAD(activity: Activity, action: (type: Int) -> Unit) { + val readyAd = getReadyAd() + if (readyAd != null) { + Log.d(CoolKeyboardSkin.TAG, "readyAd ${readyAd.mPlacementId} ") + action.invoke(type_has_cache) + setCallBack(readyAd, object : AdListener { + override fun loadFail(placeId: String) { + + } + + override fun showSuccess() { + action.invoke(type_show_success) + LAST_AD_SHOW = System.currentTimeMillis() + } + + override fun showFail() { + action.invoke(type_show_fail) + } + + override fun showClose() { + action.invoke(type_show_close) + } + + }) + readyAd.show(activity) + } else { + action.invoke(type_no_cache) + + } + } + + @JvmStatic + fun showTopOn(activity: Activity, listener: onActionListener) { + showAD(activity) { type -> + if (type == type_no_cache || type == type_show_close || type == type_show_fail) { + listener.onAction() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/key/coolkeyboard/topon/onActionListener.java b/app/src/main/java/com/key/coolkeyboard/topon/onActionListener.java new file mode 100644 index 0000000..82c20bb --- /dev/null +++ b/app/src/main/java/com/key/coolkeyboard/topon/onActionListener.java @@ -0,0 +1,6 @@ +package com.key.coolkeyboard.topon; + +public interface onActionListener { + + void onAction(); +} diff --git a/app/src/main/res/drawable/down_check.xml b/app/src/main/res/drawable/down_check.xml new file mode 100644 index 0000000..1150e9a --- /dev/null +++ b/app/src/main/res/drawable/down_check.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/down_uncheck.xml b/app/src/main/res/drawable/down_uncheck.xml new file mode 100644 index 0000000..4a03277 --- /dev/null +++ b/app/src/main/res/drawable/down_uncheck.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/icon_cancel.xml b/app/src/main/res/drawable/icon_cancel.xml new file mode 100644 index 0000000..3077880 --- /dev/null +++ b/app/src/main/res/drawable/icon_cancel.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/progressbar.xml b/app/src/main/res/drawable/progressbar.xml new file mode 100644 index 0000000..c0c7054 --- /dev/null +++ b/app/src/main/res/drawable/progressbar.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml index b1c27b5..94602ed 100644 --- a/app/src/main/res/layout/activity_preview.xml +++ b/app/src/main/res/layout/activity_preview.xml @@ -22,10 +22,10 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/down_hint_image.png b/app/src/main/res/mipmap-xxxhdpi/down_hint_image.png new file mode 100644 index 0000000..aa0f6f9 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/down_hint_image.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 653cabf..8c04df6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,6 +3,7 @@ Cool Key All My Favorite + My Download Settings System authorization Rate @@ -25,12 +26,13 @@ Zip failed Here is a Cool Keyboard No favorites added yet + No keyboards downloaded yet Keyboard \n requires permission to use Step 1:Select Step 2:Enabled For normal use, please enter the setting to complete the setting steps. Start using Wallpaper Keyboard ! - Version 1.0.1 + Version 1.0.2 Hello blank fragment https://sites.google.com/view/cool-keyboard---theme-skin @@ -38,4 +40,5 @@ Applied results Apply Apply Now + In Use \ No newline at end of file