From d16b8c72b2cca850281c533ce0521209faa6a9cf Mon Sep 17 00:00:00 2001 From: zhouzhijia Date: Tue, 13 Aug 2024 14:32:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0ui=E4=B8=8ETop=20on=E5=B9=BF?= =?UTF-8?q?=E5=91=8A=201.0.2=EF=BC=883=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + app/build.gradle.kts | 24 +- app/src/main/assets/keyboard.json | 3 +- app/src/main/assets/privacy.html | 6 +- .../key/coolkeyboard/CoolKeyboardSkin.java | 11 +- .../coolkeyboard/activity/AllActivity.java | 74 ++++-- .../coolkeyboard/activity/MainActivity.java | 42 ++- .../activity/PreviewActivity.java | 93 +++++-- .../coolkeyboard/activity/SerachActivity.java | 23 +- .../activity/SettingActivity.java | 9 +- .../activity/ShowKeyboardActivity.java | 28 +- .../coolkeyboard/activity/SplashActivity.java | 57 ++-- .../java/com/key/coolkeyboard/data/MyDAO.java | 3 + .../com/key/coolkeyboard/data/Otherdata.java | 10 + .../coolkeyboard/firebase/RemoteConfigKey.kt | 245 ++++++++++++++++++ .../coolkeyboard/firebase/RemoteConfigNew.kt | 141 ++++++++++ .../com/key/coolkeyboard/firebase/Sp.java | 43 +++ .../coolkeyboard/fragment/AllFragment.java | 2 +- .../fragment/DownloadFragment.java | 75 ++++++ .../coolkeyboard/fragment/MainFragment.java | 50 ++-- .../key/coolkeyboard/keyboard/MyKeyboard.java | 1 + .../com/key/coolkeyboard/tool/Mytool.java | 6 +- .../key/coolkeyboard/tool/StaticValue.java | 1 + .../com/key/coolkeyboard/topon/AdListener.kt | 11 + .../com/key/coolkeyboard/topon/AdManager.kt | 244 +++++++++++++++++ .../coolkeyboard/topon/onActionListener.java | 6 + app/src/main/res/drawable/down_check.xml | 19 ++ app/src/main/res/drawable/down_uncheck.xml | 13 + app/src/main/res/drawable/icon_cancel.xml | 14 + app/src/main/res/drawable/progressbar.xml | 41 +++ app/src/main/res/layout/activity_preview.xml | 10 +- app/src/main/res/layout/dialog.xml | 9 + app/src/main/res/layout/fragment_download.xml | 59 +++++ .../res/mipmap-xxxhdpi/down_hint_image.png | Bin 0 -> 80127 bytes app/src/main/res/values/strings.xml | 5 +- 35 files changed, 1256 insertions(+), 123 deletions(-) create mode 100644 app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigKey.kt create mode 100644 app/src/main/java/com/key/coolkeyboard/firebase/RemoteConfigNew.kt create mode 100644 app/src/main/java/com/key/coolkeyboard/firebase/Sp.java create mode 100644 app/src/main/java/com/key/coolkeyboard/fragment/DownloadFragment.java create mode 100644 app/src/main/java/com/key/coolkeyboard/topon/AdListener.kt create mode 100644 app/src/main/java/com/key/coolkeyboard/topon/AdManager.kt create mode 100644 app/src/main/java/com/key/coolkeyboard/topon/onActionListener.java create mode 100644 app/src/main/res/drawable/down_check.xml create mode 100644 app/src/main/res/drawable/down_uncheck.xml create mode 100644 app/src/main/res/drawable/icon_cancel.xml create mode 100644 app/src/main/res/drawable/progressbar.xml create mode 100644 app/src/main/res/layout/fragment_download.xml create mode 100644 app/src/main/res/mipmap-xxxhdpi/down_hint_image.png 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 0000000000000000000000000000000000000000..aa0f6f92d8f219ef8b4fccf9bcf706e4d1141635 GIT binary patch literal 80127 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 F{{Wi-TKNC~ literal 0 HcmV?d00001 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