diff --git a/.gitignore b/.gitignore index 2c93e36..0d72c4d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,6 @@ app/release/keyboardskins_V1.0.3(4)_07_16_14_17-release.apk app/release/output-metadata.json app/release/keyboardskins_V1.0.6(7)_07_19_15_01-release.apk app/release/keyboardskins_V1.0.6(7)_07_19_15_03-release.aab +app/release/keyboardskins_V1.0.8(9)_08_13_16_45-release.apk +app/release/keyboardskins_V11.0.8(9)_08_15_15_51-release.apk +app/release/keyboardskins_V11.0.9(10)_08_15_17_14-release.aab diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4ae63b0..85c73a0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,24 +6,24 @@ plugins { id("org.jetbrains.kotlin.android") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") - + id("kotlin-kapt") } val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) android { - namespace = "com.exquisite.demo08" + namespace = "com.exquisite" compileSdk = 34 defaultConfig { applicationId = "com.key.keyboardskins" minSdk = 23 targetSdk = 34 - versionCode = 9 - versionName = "1.0.8" + versionCode = 10 + versionName = "1.0.9" setProperty( "archivesBaseName", - "keyboardskins_V" + versionName + "(${versionCode})_$timestamp" + "keyboardskins_V1" + versionName + "(${versionCode})_$timestamp" ) testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -39,8 +39,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + buildFeatures{ + viewBinding = true } } @@ -57,6 +60,12 @@ dependencies { implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.github.omicronapps:7-Zip-JBinding-4Android:Release-16.02-2.02") + val room_version = "2.6.1" + implementation("androidx.room:room-runtime:$room_version") + annotationProcessor("androidx.room:room-compiler:$room_version") + kapt("androidx.room:room-compiler:$room_version") + + implementation(platform("com.google.firebase:firebase-bom:33.1.2")) implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-crashlytics-ktx") @@ -104,11 +113,11 @@ dependencies { implementation("androidx.recyclerview:recyclerview:1.1.0") //Tramini - implementation("com.anythink.sdk:tramini-plugin-tpn:6.3.68") +// implementation("com.anythink.sdk:tramini-plugin-tpn:6.3.68") //-----------------------------TopOn 聚合 // Debugger UI Tools - implementation("com.anythink.sdk:debugger-ui:1.0.7") +// implementation("com.anythink.sdk:debugger-ui:1.0.7") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2ed3dda..3717293 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,12 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:targetApi="31"> + + + + + + + Privacy Policy + + + +

Privacy Policy

+

Date: August 15, 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 + services. We treat your privacy very seriously. Your privacy is important to us.

+ +

Information Collection and Use

+

For a better experience, while using our Service, we may require you to provide us with certain + personally identifiable information, such as users' name, address, location, pictures, etc. The + information that we request will be retained on your device and is not collected or retained by + us in any way and used as described in this privacy policy.

+

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

+

Please refer to the privacy policy of the third-party service provider used by the + application:

+
    +
  • Google Play Services
  • +
  • Google Analytics for Firebase
  • +
  • Firebase Crashlytics
  • +
  • Unity
  • +
  • AppLovin
  • +
  • Pangle
  • +
  • Mintegral
  • +
  • Bigo
  • +
  • Ironsource
  • +
  • Vungle
  • +
+ +

Log Data

+

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

+ +

Cookies

+

Cookies are files with a small amount of data that are commonly used as anonymous unique + identifiers. These are sent to your browser from the websites that you visit and are stored on + your device's internal memory.

+

This Service does not use these “cookies” explicitly. However, the app may use third-party code + and libraries that use “cookies” to collect information and improve their services. You have the + option to either accept or refuse these cookies and know when a cookie is being sent to your + device. If you choose to refuse our cookies, you may not be able to use some portions of this + Service.

+ +

Service Providers

+

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

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

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

+ +

Security

+

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

+ +

Links to Other Sites

+

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

+ +

Children’s Privacy

+

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

+ +

Changes to This Privacy Policy

+

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

+ +

Privacy Questions

+

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: PopRenajm@gmail.com.

+ + diff --git a/app/src/main/java/com/exquisite/KeyboardSkin.java b/app/src/main/java/com/exquisite/KeyboardSkin.java index de3432c..ac0e058 100644 --- a/app/src/main/java/com/exquisite/KeyboardSkin.java +++ b/app/src/main/java/com/exquisite/KeyboardSkin.java @@ -1,30 +1,21 @@ package com.exquisite; -import static android.content.ContentValues.TAG; - import android.app.Application; import android.content.Context; -import android.content.Intent; +import android.content.SharedPreferences; import android.util.Log; -import android.widget.Toast; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.anythink.core.api.ATSDK; import com.anythink.core.api.NetTrafficeCallback; -import com.anythink.debug.api.ATDebuggerUITest; import com.anythink.interstitial.api.ATInterstitial; import com.exquisite.data.Mydata; -import com.exquisite.mintegral.MBrManager; +import com.exquisite.data.MydataBase; import com.exquisite.tools.Mytools; -import com.mbridge.msdk.MBridgeSDK; -import com.mbridge.msdk.out.MBridgeSDKFactory; -import com.mbridge.msdk.out.SDKInitStatusListener; +import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; public class KeyboardSkin extends Application { public static KeyboardSkin app; @@ -34,13 +25,68 @@ public class KeyboardSkin extends Application { private static final String TOP_KEY = "a95ed90a717c7bcff42cd908db3f05664"; private static final String TOP_DEBUG = "8a341b6aa5cc3fa453d7741f01a534c1d5dd766a"; public static List ads; + public static final String VERSION_NAME = "1.0.0"; + public static final String DB_Name = "keyboard_database"; + public static final String Table_Name = "keyboard_table"; + public static final int DB_Version = 1; + private static boolean insert; + private SharedPreferences sp; + private SharedPreferences.Editor editor; + 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<>(); + public static List cutelist = new ArrayList<>(); + public static List neonlist = new ArrayList<>(); + public static List festivallist = new ArrayList<>(); + public static List gravitylist = new ArrayList<>(); + public static List aestheticlist = new ArrayList<>(); + public static List superlist = new ArrayList<>(); + + public static List getLovelist() { + return lovelist; + } + + public static List getCoollist() { + return coollist; + } + + public static List getCutelist() { + return cutelist; + } + + public static List getNeonlist() { + return neonlist; + } + + public static List getFestivallist() { + return festivallist; + } + + public static List getGravitylist() { + return gravitylist; + } + + public static List getAestheticlist() { + return aestheticlist; + } + + public static List getSuperlist() { + return superlist; + } + + public static int a; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); app = this; - + a = 0; +// Log.e("zzj","---a app is---"+a); ATSDK.checkIsEuTraffic(this, new NetTrafficeCallback() { @Override @@ -59,9 +105,44 @@ public class KeyboardSkin extends Application { }); initSdk(); + myDataArrayList = Mytools.parseJsonToList("keyboard.json"); + sp = getSharedPreferences(PRE_NAME, MODE_PRIVATE); + insert = sp.getBoolean(PRE_KEY, false); + if (!insert) { - List myData = Mytools.parseJsonToList("keyboard.json"); - myDataArrayList = myData; + Mytools.runIO(new Runnable() { + @Override + public void run() { + insert = true; + MydataBase.getInstance().myDAO().insertAll(myDataArrayList); + editor = sp.edit(); + editor.putBoolean(PRE_KEY, insert); + editor.apply(); + } + }); + } + + initData(); + + + } + + private void initData() { + Mytools.runIO(new Runnable() { + @Override + public void run() { + alllist = MydataBase.getInstance().myDAO().getAlldata(); + lovelist = MydataBase.getInstance().myDAO().getotherlist("love"); + coollist = MydataBase.getInstance().myDAO().getotherlist("cool"); + cutelist = MydataBase.getInstance().myDAO().getotherlist("cute"); + neonlist = MydataBase.getInstance().myDAO().getotherlist("neon"); + festivallist = MydataBase.getInstance().myDAO().getotherlist("festival"); + gravitylist = MydataBase.getInstance().myDAO().getotherlist("gravity"); + aestheticlist = MydataBase.getInstance().myDAO().getotherlist("aesthetic"); + superlist = MydataBase.getInstance().myDAO().getotherlist("super theme"); + + } + }); } private void initSdk() { diff --git a/app/src/main/java/com/exquisite/activity/AllActivity.java b/app/src/main/java/com/exquisite/activity/AllActivity.java index 9f98ecc..2b3fc87 100644 --- a/app/src/main/java/com/exquisite/activity/AllActivity.java +++ b/app/src/main/java/com/exquisite/activity/AllActivity.java @@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentTransaction; import android.annotation.SuppressLint; import android.os.Bundle; -import android.util.Log; import android.view.View; import android.widget.LinearLayout; @@ -20,11 +19,8 @@ import com.anythink.interstitial.api.ATInterstitial; import com.exquisite.KeyboardSkin; import com.exquisite.callback.Adcallback; import com.exquisite.fragment.AllFragment; -import com.exquisite.demo08.R; -import com.exquisite.mintegral.ADBean; -import com.exquisite.mintegral.MBrManager; -import com.exquisite.mintegral.Mylistener; -import com.exquisite.mintegral.onAdStatusListener; +import com.exquisite.R; + import com.exquisite.tools.Mytools; import java.util.List; @@ -56,6 +52,9 @@ public class AllActivity extends AppCompatActivity implements View.OnClickListen intEvent(); } + + + private void intEvent() { back.setOnClickListener(this); } diff --git a/app/src/main/java/com/exquisite/activity/KeyBoardSettingsActivity.java b/app/src/main/java/com/exquisite/activity/KeyBoardSettingsActivity.java index e92cc0a..fd56d88 100644 --- a/app/src/main/java/com/exquisite/activity/KeyBoardSettingsActivity.java +++ b/app/src/main/java/com/exquisite/activity/KeyBoardSettingsActivity.java @@ -20,13 +20,14 @@ import android.widget.LinearLayout; import android.widget.Toast; import com.exquisite.KeyboardSkin; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.Mytools; public class KeyBoardSettingsActivity extends AppCompatActivity implements View.OnClickListener { private static final InputMethodManager methodManager = (InputMethodManager) KeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE); private LinearLayout back, step1, step2; private ImageView step1_image, step2_image; + @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { @@ -55,14 +56,14 @@ public class KeyBoardSettingsActivity extends AppCompatActivity implements View. } private void intImage() { - if (Mytools.isStep2()){ + if (Mytools.isStep2()) { step2_image.setVisibility(View.VISIBLE); - }else { + } else { step2_image.setVisibility(View.GONE); } - if (Mytools.isStep1()){ + if (Mytools.isStep1()) { step1_image.setVisibility(View.VISIBLE); - }else { + } else { step1_image.setVisibility(View.GONE); } } @@ -101,6 +102,7 @@ public class KeyBoardSettingsActivity extends AppCompatActivity implements View. break; } } + @Override protected void onResume() { super.onResume(); @@ -112,10 +114,10 @@ public class KeyBoardSettingsActivity extends AppCompatActivity implements View. @Override protected void onDestroy() { super.onDestroy(); - if (Mytools.isStep1()&&Mytools.isStep2()){ - Toast.makeText(KeyBoardSettingsActivity.this,getString(R.string.text_step_successful),Toast.LENGTH_SHORT).show(); - }else { - Toast.makeText(KeyBoardSettingsActivity.this,getString(R.string.text_step_failed),Toast.LENGTH_SHORT).show(); + if (Mytools.isStep1() && Mytools.isStep2()) { + Toast.makeText(KeyBoardSettingsActivity.this, getString(R.string.text_step_successful), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(KeyBoardSettingsActivity.this, getString(R.string.text_step_failed), Toast.LENGTH_SHORT).show(); } } } \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/activity/MainActivity.java b/app/src/main/java/com/exquisite/activity/MainActivity.java index f66775d..611818e 100644 --- a/app/src/main/java/com/exquisite/activity/MainActivity.java +++ b/app/src/main/java/com/exquisite/activity/MainActivity.java @@ -1,6 +1,9 @@ package com.exquisite.activity; + import androidx.activity.EdgeToEdge; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; @@ -8,14 +11,49 @@ import androidx.core.view.WindowInsetsCompat; import androidx.viewpager.widget.ViewPager; import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Bitmap; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.provider.Settings; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.ImageView; +import android.widget.Toast; +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; +import com.exquisite.KeyboardSkin; +import com.exquisite.R; import com.exquisite.adapter.PageAdapter; -import com.exquisite.demo08.R; +import com.exquisite.data.Mydata; +import com.exquisite.data.MydataBase; +import com.exquisite.data.StaticValue; +import com.exquisite.tools.Mytools; import com.google.android.material.tabs.TabLayout; +import java.io.File; +import java.util.List; + public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; + private Dialog toastDialog; + private Mydata otherdata; + private String unzipPath; + private Dialog dialog; + private BroadcastReceiver broadcastReceiver; + private static final InputMethodManager methodManager = (InputMethodManager) KeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE); @SuppressLint("MissingInflatedId") @Override @@ -28,14 +66,16 @@ public class MainActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - tabLayout = findViewById(R.id.main_tabLayout); ViewPager viewPager = findViewById(R.id.main_viewpager); PageAdapter adapter = new PageAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); - setmainTabIcons(tabLayout); + showDg(); + + + setTabIcons(0); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { @@ -52,6 +92,182 @@ public class MainActivity extends AppCompatActivity { }); } + private void showDg() { + dialog = new Dialog(this); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.dialog); + dialog.setCancelable(true); + dialog.getWindow().setGravity(Gravity.BOTTOM); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + + WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); + lp.copyFrom(dialog.getWindow().getAttributes()); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + lp.height = WindowManager.LayoutParams.WRAP_CONTENT; +// dialog.setCanceledOnTouchOutside(false); + broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + updateDialogContent(); + } + }; + registerReceiver(broadcastReceiver, new IntentFilter(Intent.ACTION_INPUT_METHOD_CHANGED)); + + dialog.findViewById(R.id.step1).setOnClickListener(v -> { + Intent intent = new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS); + 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) { + Mytools.runIO(new Runnable() { + @Override + public void run() { + List list1 = MydataBase.getInstance().myDAO().getAlldata(); + otherdata = list1.get(666); + if (toastDialog == null) { + runOnUiThread(new Runnable() { + @Override + public void run() { + showToastDg(); + } + }); + + } + } + }); + } + }); + dialog.show(); + dialog.getWindow().setAttributes(lp); + + updateDialogContent(); + } + + private void hideDg() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + private void updateDialogContent() { + boolean step1 = Mytools.isStep1(); + boolean step2 = Mytools.isStep2(); + dialog.findViewById(R.id.step1).setSelected(step1); + dialog.findViewById(R.id.step2).setSelected(step2); + updateDialogImages(); + } + + private void updateDialogImages() { + if (Mytools.isStep2()) { + dialog.findViewById(R.id.step2_image).setVisibility(View.VISIBLE); + } else { + dialog.findViewById(R.id.step2_image).setVisibility(View.GONE); + } + if (Mytools.isStep1()) { + dialog.findViewById(R.id.step1_image).setVisibility(View.VISIBLE); + } else { + dialog.findViewById(R.id.step1_image).setVisibility(View.GONE); + } + } + + + private void showToastDg() { + toastDialog = new Dialog(this); + toastDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + toastDialog.setContentView(R.layout.toast_dialog); + toastDialog.setCancelable(true); +// toastDialog.getWindow().setGravity(Gravity.BOTTOM); + toastDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + + WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); + lp.copyFrom(toastDialog.getWindow().getAttributes()); + lp.width = WindowManager.LayoutParams.WRAP_CONTENT; + lp.height = WindowManager.LayoutParams.WRAP_CONTENT; + + ImageView toastImageView = toastDialog.findViewById(R.id.toast_dialog_image); + Glide.with(MainActivity.this) + .asBitmap() + .load(otherdata.getPreview()) + .placeholder(R.mipmap.logo) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + toastImageView.setImageBitmap(resource); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + + toastDialog.setCanceledOnTouchOutside(false); + toastDialog.findViewById(R.id.toast_dialog_cons).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + downLoad(); + } + }); + toastDialog.findViewById(R.id.toast_dialog_cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// if (toastDialog != null && toastDialog.isShowing()) { + toastDialog.dismiss(); +// } + } + }); + File cacheDir = this.getCacheDir(); + unzipPath = cacheDir + "/" + otherdata.getTitle(); + + if (toastDialog != null) { + toastDialog.show(); + } + + toastDialog.getWindow().setAttributes(lp); + } + + + private void downLoad() { + if (!Mytools.isStep1() || !Mytools.isStep2()) { +// Toast.makeText(this, getString(R.string.text_hint), Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(this, KeyBoardSettingsActivity.class); + startActivity(intent); + } else { + Mytools.donwnZip(this, otherdata.getZipUrl(), (successful, resource) -> { + if (successful) { + Mytools.unZip(this, unzipPath, resource, (successful1, resDirPath) -> { + if (successful1) { + StaticValue.PATH = resDirPath; + otherdata.setDownloaded(true); + otherdata.setPath(resDirPath); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MydataBase.getInstance().myDAO().update(otherdata); + } + }); + showKey(); + } else { + Toast.makeText(MainActivity.this, getString(R.string.text_zip_failed), Toast.LENGTH_SHORT).show(); + } + }); + } else { + Toast.makeText(MainActivity.this, getString(R.string.text_download_failed), Toast.LENGTH_SHORT).show(); + + } + }); + } + + } + private void setTabIcons(final int position) { for (int i = 0; i < tabLayout.getTabCount(); i++) { final TabLayout.Tab tab = tabLayout.getTabAt(i); @@ -61,7 +277,10 @@ public class MainActivity extends AppCompatActivity { tab.setIcon(position == 0 ? R.drawable.home_check : R.drawable.home_uncheck); break; case 1: - tab.setIcon(position == 0 ? R.drawable.setting_uncheck : R.drawable.setting_check); + tab.setIcon(position == 1 ? R.drawable.like_check : R.drawable.like_uncheck); + break; + case 2: + tab.setIcon(position == 2 ? R.drawable.setting_check : R.drawable.setting_uncheck); break; default: break; @@ -70,21 +289,34 @@ public class MainActivity extends AppCompatActivity { } } - private void setmainTabIcons(TabLayout tabLayout) { - for (int i = 0; i < tabLayout.getTabCount(); i++) { - TabLayout.Tab tab = tabLayout.getTabAt(i); - if (tab != null) { - switch (i) { - case 0: - tab.setIcon(R.drawable.home_check); - break; - case 1: - tab.setIcon(R.drawable.setting_uncheck); - break; - default: - break; - } + private void showKey() { + Toast.makeText(MainActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(this, ShowKeyboardActivity.class); + intent.putExtra(StaticValue.KEY_ISshow, 1); + startActivity(intent); + + } + + + @Override + protected void onResume() { + super.onResume(); + updateDialogContent(); +// Log.e("zzj", "---a app get is---" + KeyboardSkin.a); + if (KeyboardSkin.a == 1) { + if (toastDialog != null) { + toastDialog.dismiss(); } + } } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (broadcastReceiver != null) { + unregisterReceiver(broadcastReceiver); + } + KeyboardSkin.a = 0; + } } \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/activity/PreviewActivity.java b/app/src/main/java/com/exquisite/activity/PreviewActivity.java index 2bad127..80adefe 100644 --- a/app/src/main/java/com/exquisite/activity/PreviewActivity.java +++ b/app/src/main/java/com/exquisite/activity/PreviewActivity.java @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import androidx.lifecycle.Observer; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -15,7 +16,6 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; @@ -32,19 +32,17 @@ import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; import com.exquisite.callback.Adcallback; -import com.exquisite.callback.DownloadCallback; -import com.exquisite.callback.UnzipCallback; +import com.exquisite.data.Mydata; +import com.exquisite.data.MydataBase; import com.exquisite.data.StaticValue; -import com.exquisite.demo08.R; -import com.exquisite.mintegral.ADBean; -import com.exquisite.mintegral.MBrManager; -import com.exquisite.mintegral.Mylistener; -import com.exquisite.mintegral.onAdStatusListener; +import com.exquisite.R; + import com.exquisite.tools.Mytools; import com.exquisite.tools.SpaceItem; import java.io.File; -import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class PreviewActivity extends AppCompatActivity implements View.OnClickListener { @@ -60,7 +58,13 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi private ProgressBar progressBarDownload; private List ads; - + private ThumAdapter thumAdapter; + private ImageView like; + private Boolean islike = false; + private Mydata otherdata; + private TextView downloadText; + private ImageView downImage; + private List newList = new ArrayList<>(); @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { @@ -80,14 +84,74 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi imageView.setVisibility(View.GONE); progressBarPreview.setVisibility(View.VISIBLE); progressBarDownload.setVisibility(View.GONE); + SpaceItem spaceItem = new SpaceItem(10, 20, 10); - previewrv.setAdapter(new ThumAdapter(this, KeyboardSkin.getMyDataArrayList())); - previewrv.setLayoutManager(new GridLayoutManager(this, 2)); + previewrv.setLayoutManager(new GridLayoutManager(PreviewActivity.this, 2)); previewrv.addItemDecoration(spaceItem); + + Mytools.runIO(new Runnable() { + @Override + public void run() { + List mydata = MydataBase.getInstance().myDAO().getAlldata(); + Collections.shuffle(mydata); + newList = mydata.subList(0, 10); + runOnUiThread(new Runnable() { + @Override + public void run() { + thumAdapter = new ThumAdapter(PreviewActivity.this, newList); + previewrv.setAdapter(thumAdapter); + } + }); + + } + }); +// MydataBase.getInstance().myDAO().getAll().observe(this, new Observer>() { +// @Override +// public void onChanged(List mydata) { +// +// +// +// } +// }); + Intent intent = getIntent(); preview = intent.getStringExtra(StaticValue.KEY_PRE); name = intent.getStringExtra(StaticValue.KEY_NAME); url = intent.getStringExtra(StaticValue.KEY_URL); + + Mytools.runIO(new Runnable() { + @Override + public void run() { + List existingData = MydataBase.getInstance().myDAO().checklikelist(preview); + if (!existingData.isEmpty()) { + otherdata = existingData.get(0); + islike = otherdata.getIslike(); + boolean isdown = otherdata.getDownloaded(); + runOnUiThread(new Runnable() { + @Override + public void run() { + if (islike) { + like.setBackgroundResource(R.drawable.icon_like_check); + } else { + like.setBackgroundResource(R.drawable.icon_like_uncheck); + } + if (isdown) { + downloadText.setText(R.string.download_apply); + downImage.setVisibility(View.GONE); + } + String path = StaticValue.PATH; + if (path.equals(otherdata.getPath())) { +// binding.download.setSelected(true); + downloadText.setText(R.string.download_text_using); + settings.setEnabled(false); + } + } + }); + + } + } + }); + Glide.with(this) .asBitmap() .load(preview) @@ -114,9 +178,13 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi back.setOnClickListener(this); viewall.setOnClickListener(this); settings.setOnClickListener(this); + like.setOnClickListener(this); } private void intView() { + downImage = findViewById(R.id.pre_down_image); + downloadText = findViewById(R.id.pre_down_text); + like = findViewById(R.id.preview_islike); back = findViewById(R.id.detail_back); imageView = findViewById(R.id.preview_image); viewall = findViewById(R.id.preview_all); @@ -139,27 +207,61 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi Intent intent = new Intent(PreviewActivity.this, AllActivity.class); startActivity(intent); break; + case R.id.preview_islike: + checkLike(); + break; case R.id.detail_setting: download(); break; } } + private void checkLike() { + if (!islike) { + like.setBackgroundResource(R.drawable.icon_like_check); + islike = true; + otherdata.setIslike(true); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MydataBase.getInstance().myDAO().update(otherdata); + } + }); + } else { + like.setBackgroundResource(R.drawable.icon_like_uncheck); + islike = false; + otherdata.setIslike(false); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MydataBase.getInstance().myDAO().update(otherdata); + } + }); + } + } + + private void showKey() { + Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); + Intent intent = new Intent(this, ShowKeyboardActivity.class); + startActivity(intent); + finish(); + } + private void showAd() { ATInterstitial mInterstitialAd = Mytools.onCache(ads); if (mInterstitialAd == null) { - finish(); + showKey(); } else { if (mInterstitialAd.isAdReady()) { Mytools.setCallback(mInterstitialAd, new Adcallback() { @Override public void onShowFail(AdError ad) { - finish(); + showKey(); } @Override public void onAdHidden() { - finish(); + showKey(); } }); mInterstitialAd.show(this); @@ -182,7 +284,6 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi Mytools.unZip(this, unzipPath, resource, (successful1, resDirPath) -> { if (successful1) { StaticValue.PATH = resDirPath; - Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show(); progressBarDownload.setVisibility(View.GONE); showAd(); diff --git a/app/src/main/java/com/exquisite/activity/SearchActivity.java b/app/src/main/java/com/exquisite/activity/SearchActivity.java index 99d9f11..0ad41c6 100644 --- a/app/src/main/java/com/exquisite/activity/SearchActivity.java +++ b/app/src/main/java/com/exquisite/activity/SearchActivity.java @@ -7,28 +7,23 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.annotation.SuppressLint; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; -import android.util.Log; -import android.view.KeyEvent; import android.view.View; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; import com.exquisite.data.Mydata; -import com.exquisite.data.StaticValue; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; import java.util.List; @@ -116,7 +111,7 @@ public class SearchActivity extends AppCompatActivity implements View.OnClickLis faile.setVisibility(View.GONE); searchrv.setVisibility(View.VISIBLE); searchrv.setAdapter(new ThumAdapter(this, filteredData)); - searchrv.setLayoutManager(new GridLayoutManager(this, 2)); + searchrv.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); } } InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); diff --git a/app/src/main/java/com/exquisite/activity/ShowKeyboardActivity.java b/app/src/main/java/com/exquisite/activity/ShowKeyboardActivity.java new file mode 100644 index 0000000..a246f8d --- /dev/null +++ b/app/src/main/java/com/exquisite/activity/ShowKeyboardActivity.java @@ -0,0 +1,66 @@ +package com.exquisite.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.view.inputmethod.InputMethodManager; + +import com.exquisite.KeyboardSkin; +import com.exquisite.R; +import com.exquisite.data.StaticValue; +import com.exquisite.databinding.ActivityShowKeyboardBinding; + +public class ShowKeyboardActivity extends AppCompatActivity { + ActivityShowKeyboardBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityShowKeyboardBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_show), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + Intent intent = getIntent(); + int a = intent.getIntExtra(StaticValue.KEY_ISshow, 0); + KeyboardSkin.a = a; +// Log.e("zzj", "---a---" + a); + + binding.showBack.setOnClickListener(v -> finish()); + + } + + @Override + protected void onResume() { + super.onResume(); + binding.showkeyEdit.requestFocus(); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); + } + }, 500); + } + + @Override + protected void onPause() { + super.onPause(); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(binding.showkeyEdit.getWindowToken(), 0); + binding.showkeyEdit.clearFocus(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/activity/SplashActivity.java b/app/src/main/java/com/exquisite/activity/SplashActivity.java index 45b12e6..4fb296d 100644 --- a/app/src/main/java/com/exquisite/activity/SplashActivity.java +++ b/app/src/main/java/com/exquisite/activity/SplashActivity.java @@ -5,32 +5,21 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import android.annotation.SuppressLint; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.os.CountDownTimer; -import android.util.Log; import android.view.View; import com.anythink.core.api.AdError; import com.anythink.interstitial.api.ATInterstitial; import com.exquisite.KeyboardSkin; import com.exquisite.callback.Adcallback; -import com.exquisite.demo08.R; -import com.exquisite.mintegral.ADBean; -import com.exquisite.mintegral.MBrManager; -import com.exquisite.mintegral.Mylistener; -import com.exquisite.mintegral.onAdStatusListener; -import com.exquisite.mintegral.onInterHandlerListener; +import com.exquisite.R; + +import com.exquisite.tools.CustomProgressBar; import com.exquisite.tools.Mytools; -import com.mbridge.msdk.mbbid.out.BidListennning; -import com.mbridge.msdk.mbbid.out.BidManager; -import com.mbridge.msdk.mbbid.out.BidResponsed; import java.util.List; @@ -38,8 +27,8 @@ public class SplashActivity extends AppCompatActivity { private CountDownTimer countDownTimer; private List ads; - public static boolean isAlreadyShow = false; - + private boolean isAlreadyShow = false; + private float i = 0; @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { @@ -53,11 +42,15 @@ public class SplashActivity extends AppCompatActivity { return insets; }); + CustomProgressBar customProgressBar = findViewById(R.id.splash_pg); + ads = KeyboardSkin.lodAd(); countDownTimer = new CountDownTimer(11000, 100) { @Override public void onTick(long l) { + i++; + customProgressBar.setProgress(i); if (!isAlreadyShow) { showAd(false); } @@ -102,7 +95,6 @@ public class SplashActivity extends AppCompatActivity { goMain(); } }); - mInterstitialAd.show(this); } else { mInterstitialAd.load(); diff --git a/app/src/main/java/com/exquisite/activity/WebActivity.java b/app/src/main/java/com/exquisite/activity/WebActivity.java new file mode 100644 index 0000000..508751c --- /dev/null +++ b/app/src/main/java/com/exquisite/activity/WebActivity.java @@ -0,0 +1,33 @@ +package com.exquisite.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.os.Bundle; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.exquisite.R; + +public class WebActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_web); + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_web), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + WebView webView = findViewById(R.id.web); + webView.getSettings().setJavaScriptEnabled(true); + webView.setWebViewClient(new WebViewClient()); + webView.loadUrl("file:///android_asset/privacy.html"); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/adapter/PageAdapter.java b/app/src/main/java/com/exquisite/adapter/PageAdapter.java index ae9f2d4..2b19fd5 100644 --- a/app/src/main/java/com/exquisite/adapter/PageAdapter.java +++ b/app/src/main/java/com/exquisite/adapter/PageAdapter.java @@ -5,8 +5,9 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; -import com.exquisite.fragment.PageOneFragment; -import com.exquisite.fragment.PageTwoFragment; +import com.exquisite.fragment.LikeFragment; +import com.exquisite.fragment.MainFragment; +import com.exquisite.fragment.SettingFragment; import java.util.ArrayList; import java.util.List; @@ -16,8 +17,10 @@ public class PageAdapter extends FragmentPagerAdapter { public PageAdapter(@NonNull FragmentManager fm) { super(fm); - list.add(new PageOneFragment()); - list.add(new PageTwoFragment()); + list.add(new MainFragment()); + list.add(new LikeFragment()); + list.add(new SettingFragment()); + } @NonNull @@ -28,6 +31,6 @@ public class PageAdapter extends FragmentPagerAdapter { @Override public int getCount() { - return 2; + return list.size(); } } diff --git a/app/src/main/java/com/exquisite/adapter/ThumAdapter.java b/app/src/main/java/com/exquisite/adapter/ThumAdapter.java index 7376b19..be50ed7 100644 --- a/app/src/main/java/com/exquisite/adapter/ThumAdapter.java +++ b/app/src/main/java/com/exquisite/adapter/ThumAdapter.java @@ -11,14 +11,13 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; +import com.exquisite.R; import com.exquisite.activity.PreviewActivity; import com.exquisite.data.Mydata; import com.exquisite.data.StaticValue; -import com.exquisite.demo08.R; import com.exquisite.tools.Mytools; import java.util.List; -import java.util.Random; public class ThumAdapter extends RecyclerView.Adapter { private Context myContext; @@ -39,7 +38,17 @@ public class ThumAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull ThumVH holder, int position) { Mydata myData = myDataList.get(position); - String thumbnail = myData.getThumbnail(); + String thumbnail = myData.getThumb(); + + if (position == getItemCount() - 1) { + holder.getView().setVisibility(View.VISIBLE); + } else if (position == getItemCount() - 2) { + holder.getView().setVisibility(View.VISIBLE); + } else { + holder.getView().setVisibility(View.GONE); + } + + Glide.with(myContext) .load(thumbnail) .placeholder(R.mipmap.logo) @@ -47,8 +56,8 @@ public class ThumAdapter extends RecyclerView.Adapter { .into(holder.getImageViewThumb()); holder.getConstraintLayout().setOnClickListener(v -> { Intent intent = new Intent(myContext, PreviewActivity.class); - intent.putExtra(StaticValue.KEY_NAME, myData.getResourceName()); - intent.putExtra(StaticValue.KEY_URL, myData.getUrl()); + intent.putExtra(StaticValue.KEY_NAME, myData.getTitle()); + intent.putExtra(StaticValue.KEY_URL, myData.getZipUrl()); intent.putExtra(StaticValue.KEY_PRE, myData.getPreview()); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); myContext.startActivity(intent); diff --git a/app/src/main/java/com/exquisite/adapter/ThumVH.java b/app/src/main/java/com/exquisite/adapter/ThumVH.java index 22e9650..2afd911 100644 --- a/app/src/main/java/com/exquisite/adapter/ThumVH.java +++ b/app/src/main/java/com/exquisite/adapter/ThumVH.java @@ -7,16 +7,22 @@ import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; -import com.exquisite.demo08.R; +import com.exquisite.R; public class ThumVH extends RecyclerView.ViewHolder { private ImageView imageViewThumb; private ConstraintLayout constraintLayout; + private View view; public ThumVH(@NonNull View itemView) { super(itemView); imageViewThumb = itemView.findViewById(R.id.image_view_thumb_id); constraintLayout = itemView.findViewById(R.id.constraint_layout_id); + view = itemView.findViewById(R.id.view); + } + + public View getView() { + return view; } public ConstraintLayout getConstraintLayout() { diff --git a/app/src/main/java/com/exquisite/data/MyDAO.java b/app/src/main/java/com/exquisite/data/MyDAO.java new file mode 100644 index 0000000..200500d --- /dev/null +++ b/app/src/main/java/com/exquisite/data/MyDAO.java @@ -0,0 +1,34 @@ +package com.exquisite.data; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +@Dao +public interface MyDAO { + @Query("SELECT * FROM keyboard_table") + LiveData> getAll(); + @Query("SELECT * FROM keyboard_table") + List getAlldata(); + @Query("select * from keyboard_table where preview =:pre ") + List checklikelist(String pre); + + @Query("select * from keyboard_table where className =:classname ") + List getotherlist(String classname); + + @Query("SELECT * FROM keyboard_table WHERE islike = :islike") + LiveData> getlikelist(boolean islike); + + @Query("SELECT * FROM keyboard_table WHERE title LIKE '%' || :title || '%'") + List getSearchData(String title); + + @Insert + void insertAll(List likeDataList); + + @Update + void update(Mydata otherdata); +} diff --git a/app/src/main/java/com/exquisite/data/Mydata.java b/app/src/main/java/com/exquisite/data/Mydata.java index df88ea6..387c852 100644 --- a/app/src/main/java/com/exquisite/data/Mydata.java +++ b/app/src/main/java/com/exquisite/data/Mydata.java @@ -1,52 +1,94 @@ package com.exquisite.data; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import com.exquisite.KeyboardSkin; + import java.util.ArrayList; import java.util.List; +@Entity(tableName = KeyboardSkin.Table_Name) public class Mydata { - private String resourceName; - - private String thumbnail; - private String preview; - - private String url; - - public void setPreview(String preview) { - this.preview = preview; - } - - public void setResourceName(String resourceName) { - this.resourceName = resourceName; - } - - public void setThumbnail(String thumbnail) { - this.thumbnail = thumbnail; - } - - public void setUrl(String url) { - this.url = url; - } + @PrimaryKey(autoGenerate = true) + public int id; + public String preview; + public String thumb; + public String className; + public String title; + public String zipUrl; + public Boolean islike; + public Boolean isDownloaded; + public String path; public String getPreview() { return preview; } - public String getResourceName() { - return resourceName; + public void setPreview(String preview) { + this.preview = preview; } - public String getThumbnail() { - return thumbnail; + public String getThumb() { + return thumb; } - public String getUrl() { - return url; + public void setThumb(String thumb) { + this.thumb = thumb; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getZipUrl() { + return zipUrl; + } + + public void setZipUrl(String zipUrl) { + this.zipUrl = zipUrl; + } + + public Boolean getIslike() { + return islike; + } + + public void setIslike(Boolean islike) { + this.islike = islike; + } + + public Boolean getDownloaded() { + return isDownloaded; + } + + public void setDownloaded(Boolean downloaded) { + isDownloaded = downloaded; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; } public List filterByName(String input, List dataList) { List filteredList = new ArrayList<>(); for (Mydata data : dataList) { - if (data.getResourceName().toLowerCase().contains(input.toLowerCase())) { + if (data.getTitle().toLowerCase().contains(input.toLowerCase())) { filteredList.add(data); } } diff --git a/app/src/main/java/com/exquisite/data/MydataBase.java b/app/src/main/java/com/exquisite/data/MydataBase.java new file mode 100644 index 0000000..1828565 --- /dev/null +++ b/app/src/main/java/com/exquisite/data/MydataBase.java @@ -0,0 +1,24 @@ +package com.exquisite.data; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; + +import com.exquisite.KeyboardSkin; + + +@Database(entities = {Mydata.class}, version = KeyboardSkin.DB_Version, exportSchema = false) +public abstract class MydataBase extends RoomDatabase { + public abstract MyDAO myDAO(); + + private static MydataBase INSTANCE; + + public static MydataBase getInstance() { + if (INSTANCE == null) { + synchronized (MydataBase.class) { + INSTANCE = Room.databaseBuilder(KeyboardSkin.getAppContext(), MydataBase.class, KeyboardSkin.DB_Name).build(); + } + } + return INSTANCE; + } +} diff --git a/app/src/main/java/com/exquisite/data/StaticValue.java b/app/src/main/java/com/exquisite/data/StaticValue.java index 552f668..851c8aa 100644 --- a/app/src/main/java/com/exquisite/data/StaticValue.java +++ b/app/src/main/java/com/exquisite/data/StaticValue.java @@ -5,4 +5,5 @@ public class StaticValue { public static String KEY_URL = "key_url"; public static String KEY_PRE = "key_pre"; public static String PATH = ""; + public static String KEY_ISshow = ""; } diff --git a/app/src/main/java/com/exquisite/fragment/AllFragment.java b/app/src/main/java/com/exquisite/fragment/AllFragment.java index 2c6e19e..6511c85 100644 --- a/app/src/main/java/com/exquisite/fragment/AllFragment.java +++ b/app/src/main/java/com/exquisite/fragment/AllFragment.java @@ -6,7 +6,6 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.viewpager.widget.ViewPager; @@ -15,7 +14,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.google.android.material.tabs.TabLayout; import java.util.ArrayList; diff --git a/app/src/main/java/com/exquisite/fragment/FragmentAesthetic.java b/app/src/main/java/com/exquisite/fragment/FragmentAesthetic.java index a73eb93..00df999 100644 --- a/app/src/main/java/com/exquisite/fragment/FragmentAesthetic.java +++ b/app/src/main/java/com/exquisite/fragment/FragmentAesthetic.java @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; public class FragmentAesthetic extends Fragment { diff --git a/app/src/main/java/com/exquisite/fragment/FragmentCool.java b/app/src/main/java/com/exquisite/fragment/FragmentCool.java index b153103..6faae30 100644 --- a/app/src/main/java/com/exquisite/fragment/FragmentCool.java +++ b/app/src/main/java/com/exquisite/fragment/FragmentCool.java @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; public class FragmentCool extends Fragment { diff --git a/app/src/main/java/com/exquisite/fragment/FragmentCute.java b/app/src/main/java/com/exquisite/fragment/FragmentCute.java index a56c65d..9658fe1 100644 --- a/app/src/main/java/com/exquisite/fragment/FragmentCute.java +++ b/app/src/main/java/com/exquisite/fragment/FragmentCute.java @@ -12,7 +12,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; diff --git a/app/src/main/java/com/exquisite/fragment/FragmentForyou.java b/app/src/main/java/com/exquisite/fragment/FragmentForyou.java index b8aa7e4..b071995 100644 --- a/app/src/main/java/com/exquisite/fragment/FragmentForyou.java +++ b/app/src/main/java/com/exquisite/fragment/FragmentForyou.java @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; public class FragmentForyou extends Fragment { diff --git a/app/src/main/java/com/exquisite/fragment/FragmentLove.java b/app/src/main/java/com/exquisite/fragment/FragmentLove.java index 4644767..470057a 100644 --- a/app/src/main/java/com/exquisite/fragment/FragmentLove.java +++ b/app/src/main/java/com/exquisite/fragment/FragmentLove.java @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; public class FragmentLove extends Fragment { diff --git a/app/src/main/java/com/exquisite/fragment/FragmentNeon.java b/app/src/main/java/com/exquisite/fragment/FragmentNeon.java index afcee0e..ae0cb40 100644 --- a/app/src/main/java/com/exquisite/fragment/FragmentNeon.java +++ b/app/src/main/java/com/exquisite/fragment/FragmentNeon.java @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.exquisite.KeyboardSkin; import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; +import com.exquisite.R; import com.exquisite.tools.SpaceItem; diff --git a/app/src/main/java/com/exquisite/fragment/LikeFragment.java b/app/src/main/java/com/exquisite/fragment/LikeFragment.java new file mode 100644 index 0000000..da9824a --- /dev/null +++ b/app/src/main/java/com/exquisite/fragment/LikeFragment.java @@ -0,0 +1,58 @@ +package com.exquisite.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.exquisite.adapter.ThumAdapter; +import com.exquisite.data.Mydata; +import com.exquisite.data.MydataBase; +import com.exquisite.R; +import com.exquisite.databinding.FragmentLikeBinding; +import com.exquisite.tools.Mytools; +import com.exquisite.tools.SpaceItem; + +import java.util.ArrayList; +import java.util.List; + + +public class LikeFragment extends Fragment { + FragmentLikeBinding 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 = FragmentLikeBinding.inflate(getLayoutInflater()); + + initData(); + binding.likeRv.addItemDecoration(spaceItem); + + return binding.getRoot(); + } + + private void initData() { + MydataBase.getInstance().myDAO().getlikelist(true).observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List mydata) { + if (mydata.isEmpty()) { + binding.nolikeText.setVisibility(View.VISIBLE); + } else { + binding.nolikeText.setVisibility(View.GONE); + } + thumAdapter = new ThumAdapter(requireContext(), mydata); + binding.likeRv.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); + binding.likeRv.setAdapter(thumAdapter); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/fragment/MainFragment.java b/app/src/main/java/com/exquisite/fragment/MainFragment.java new file mode 100644 index 0000000..9239705 --- /dev/null +++ b/app/src/main/java/com/exquisite/fragment/MainFragment.java @@ -0,0 +1,106 @@ +package com.exquisite.fragment; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import com.exquisite.KeyboardSkin; +import com.exquisite.activity.AllActivity; +import com.exquisite.activity.SearchActivity; +import com.exquisite.adapter.ThumAdapter; +import com.exquisite.data.Mydata; +import com.exquisite.data.MydataBase; +import com.exquisite.R; +import com.exquisite.tools.Mytools; +import com.exquisite.tools.SpaceItem; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +public class MainFragment extends Fragment { + private RecyclerView mainrv; + private LinearLayout viewall; + private ImageView seach; + private SpaceItem spaceItem = new SpaceItem(10, 20, 10); + private ThumAdapter thumAdapter; + private List mainrandomlist = new ArrayList<>(); + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_page_one, container, false); + viewall = view.findViewById(R.id.view_all); + seach = view.findViewById(R.id.search_image); + mainrv = view.findViewById(R.id.main_keyboard_rv); + + viewall.setOnClickListener(v -> { + Intent intent = new Intent(getActivity(), AllActivity.class); + startActivity(intent); + }); + + seach.setOnClickListener(v -> { + Intent intent1 = new Intent(getActivity(), SearchActivity.class); + startActivity(intent1); + }); + + initData(); + + return view; + } + + private void initData() { + + List mainrvdataList = KeyboardSkin.getMyDataArrayList(); + mainrvdataList.subList(0, 20); + for (Mydata data : mainrvdataList) { + if (mainrandomlist.size() < 20) { + mainrandomlist.add(data); + } + } + thumAdapter = new ThumAdapter(requireContext(), mainrandomlist); + mainrv.setAdapter(thumAdapter); + mainrv.setLayoutManager(new GridLayoutManager(requireContext(), 2)); + mainrv.addItemDecoration(spaceItem); +// Mytools.runIO(new Runnable() { +// @Override +// public void run() { +// List mydata = MydataBase.getInstance().myDAO().getAlldata(); +// requireActivity().runOnUiThread(new Runnable() { +// @Override +// public void run() { +//// Collections.shuffle(mydata); +// List newList = mydata.subList(10, 20); +// thumAdapter = new ThumAdapter(requireContext(), newList); +// mainrv.setAdapter(thumAdapter); +// mainrv.setLayoutManager(new GridLayoutManager(requireContext(), 2)); +// mainrv.addItemDecoration(spaceItem); +// } +// }); +// } +// }); +// MydataBase.getInstance().myDAO().getAll().observe(getViewLifecycleOwner(), new Observer>() { +// @Override +// public void onChanged(List mydata) { +// Collections.shuffle(mydata); +// List newList = mydata.subList(0, 20); +// thumAdapter = new ThumAdapter(requireContext(), newList); +// mainrv.setAdapter(thumAdapter); +// mainrv.setLayoutManager(new GridLayoutManager(requireContext(), 2)); +// mainrv.addItemDecoration(spaceItem); +// } +// }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/fragment/PageOneFragment.java b/app/src/main/java/com/exquisite/fragment/PageOneFragment.java deleted file mode 100644 index 26103ec..0000000 --- a/app/src/main/java/com/exquisite/fragment/PageOneFragment.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.exquisite.fragment; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.os.Bundle; - -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.exquisite.KeyboardSkin; -import com.exquisite.activity.AllActivity; -import com.exquisite.activity.SearchActivity; -import com.exquisite.adapter.ThumAdapter; -import com.exquisite.demo08.R; -import com.exquisite.tools.SpaceItem; - - -public class PageOneFragment extends Fragment { - private RecyclerView mainrv; - private LinearLayout viewall; - private ImageView seach; - @SuppressLint("MissingInflatedId") - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_page_one, container, false); - viewall = view.findViewById(R.id.view_all); - seach = view.findViewById(R.id.search_image); - mainrv = view.findViewById(R.id.main_keyboard_rv); - viewall.setOnClickListener(v -> { - Intent intent = new Intent(getActivity(), AllActivity.class); - startActivity(intent); - }); - seach.setOnClickListener(v -> { - Intent intent1 = new Intent(getActivity(), SearchActivity.class); - startActivity(intent1); - }); - SpaceItem spaceItem = new SpaceItem(10, 20, 10); - mainrv.setAdapter(new ThumAdapter(requireContext(), KeyboardSkin.getMyDataArrayList())); - mainrv.setLayoutManager(new GridLayoutManager(requireContext(), 2)); - mainrv.addItemDecoration(spaceItem); - return view; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/fragment/PageTwoFragment.java b/app/src/main/java/com/exquisite/fragment/PageTwoFragment.java deleted file mode 100644 index 12d3b79..0000000 --- a/app/src/main/java/com/exquisite/fragment/PageTwoFragment.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.exquisite.fragment; - -import android.annotation.SuppressLint; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; - -import androidx.fragment.app.Fragment; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.Toast; - -import com.exquisite.activity.KeyBoardSettingsActivity; -import com.exquisite.demo08.R; - -public class PageTwoFragment extends Fragment implements View.OnClickListener { - private LinearLayout settings, rate, privacy; - - @SuppressLint("MissingInflatedId") - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_page_two, container, false); - settings = view.findViewById(R.id.keyboard_setting); - rate = view.findViewById(R.id.rate_us); - privacy = view.findViewById(R.id.privacy); - initEvent(); - return view; - } - - private void initEvent() { - settings.setOnClickListener(this); - rate.setOnClickListener(this); - privacy.setOnClickListener(this); - } - - - @SuppressLint("NonConstantResourceId") - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.keyboard_setting: - Intent intent1 = new Intent(getActivity(), KeyBoardSettingsActivity.class); - startActivity(intent1); - break; - case R.id.rate_us: - break; - case R.id.privacy: - String url = getString(R.string.url_privacy); - Intent intent2 = new Intent(Intent.ACTION_VIEW); - intent2.setData(Uri.parse(url)); - startActivity(intent2); - break; - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/fragment/SettingFragment.java b/app/src/main/java/com/exquisite/fragment/SettingFragment.java new file mode 100644 index 0000000..9a70bc2 --- /dev/null +++ b/app/src/main/java/com/exquisite/fragment/SettingFragment.java @@ -0,0 +1,76 @@ +package com.exquisite.fragment; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.exquisite.activity.KeyBoardSettingsActivity; +import com.exquisite.activity.WebActivity; +import com.exquisite.R; +import com.exquisite.databinding.FragmentPageTwoBinding; + +public class SettingFragment extends Fragment { + FragmentPageTwoBinding binding; + + @SuppressLint("MissingInflatedId") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentPageTwoBinding.inflate(getLayoutInflater()); + + initEvent(); + return binding.getRoot(); + } + + private void initEvent() { + + binding.versionText.setText("1.0.8"); + binding.keyboardSetting.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent1 = new Intent(getActivity(), KeyBoardSettingsActivity.class); + startActivity(intent1); + } + }); + + binding.share.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent share = new Intent(Intent.ACTION_SEND); + share.setType("text/plain"); + share.putExtra(Intent.EXTRA_SUBJECT, R.string.app_name); + String text = getString(R.string.share_title); + text = text + "\n https://play.google.com/store/apps/details?id=" + "com.key.keyboardskins"; + share.putExtra(Intent.EXTRA_TEXT, text); + startActivity(Intent.createChooser(share, "choose one")); + } + }); + + binding.rate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url = "https://play.google.com/store/apps/details?id=com.key.keyboardskins"; + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + } + }); + + binding.privacy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent2 = new Intent(requireContext(), WebActivity.class); + startActivity(intent2); + } + }); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/exquisite/keyboard/KeyboardService.java b/app/src/main/java/com/exquisite/keyboard/KeyboardService.java index 692cffd..5f11d69 100644 --- a/app/src/main/java/com/exquisite/keyboard/KeyboardService.java +++ b/app/src/main/java/com/exquisite/keyboard/KeyboardService.java @@ -1,18 +1,14 @@ package com.exquisite.keyboard; -import android.app.Service; import android.content.Context; -import android.content.Intent; import android.inputmethodservice.InputMethodService; -import android.inputmethodservice.Keyboard; import android.inputmethodservice.KeyboardView; -import android.os.IBinder; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; -import com.exquisite.demo08.R; +import com.exquisite.R; public class KeyboardService extends InputMethodService implements KeyboardView.OnKeyboardActionListener { private int[] ViewXmls = new int[4]; diff --git a/app/src/main/java/com/exquisite/keyboard/MyKeyboard.java b/app/src/main/java/com/exquisite/keyboard/MyKeyboard.java index 0bf6aff..ca3145b 100644 --- a/app/src/main/java/com/exquisite/keyboard/MyKeyboard.java +++ b/app/src/main/java/com/exquisite/keyboard/MyKeyboard.java @@ -7,7 +7,6 @@ import android.graphics.drawable.Drawable; import android.inputmethodservice.Keyboard; import android.inputmethodservice.KeyboardView; import android.util.AttributeSet; -import android.util.Log; import com.exquisite.tools.CustomViewConfig; import com.exquisite.tools.Mytools; diff --git a/app/src/main/java/com/exquisite/mintegral/ADBean.java b/app/src/main/java/com/exquisite/mintegral/ADBean.java deleted file mode 100644 index 13db5b7..0000000 --- a/app/src/main/java/com/exquisite/mintegral/ADBean.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.exquisite.mintegral; - -import com.mbridge.msdk.newinterstitial.out.MBBidNewInterstitialHandler; - -public class ADBean { - - private MBBidNewInterstitialHandler interstitialHandler; - private String token; - - public void setInterstitialHandler(MBBidNewInterstitialHandler interstitialHandler) { - this.interstitialHandler = interstitialHandler; - } - - public void setToken(String token) { - this.token = token; - } - - public MBBidNewInterstitialHandler getInterstitialHandler() { - return interstitialHandler; - } - - public String getToken() { - return token; - } -} diff --git a/app/src/main/java/com/exquisite/mintegral/MBrManager.java b/app/src/main/java/com/exquisite/mintegral/MBrManager.java deleted file mode 100644 index 45bb690..0000000 --- a/app/src/main/java/com/exquisite/mintegral/MBrManager.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.exquisite.mintegral; - -import android.app.Activity; -import android.util.Log; - -import com.exquisite.KeyboardSkin; -import com.mbridge.msdk.MBridgeConstans; -import com.mbridge.msdk.mbbid.out.BidListennning; -import com.mbridge.msdk.mbbid.out.BidManager; -import com.mbridge.msdk.mbbid.out.BidResponsed; -import com.mbridge.msdk.newinterstitial.out.MBBidNewInterstitialHandler; -import com.mbridge.msdk.newinterstitial.out.NewInterstitialListener; -import com.mbridge.msdk.out.MBridgeIds; -import com.mbridge.msdk.out.RewardInfo; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class MBrManager { - - public static String TAG = "------------ltt"; - - public static String[] placeIDs = new String[]{"1628304", "1628319", "1628321"}; - - public static String[] unitIDs = new String[]{"3491035", "3491052", "3491054"}; - - public static List AdInstances = new ArrayList<>(); - - public static void getToken(String placeId, String unitId, onBidTokenListener listener) { - BidManager manager = new BidManager(placeId, unitId); - manager.setBidListener(new BidListennning() { - @Override - public void onFailed(String s) { - listener.onBidToken(""); - } - - @Override - public void onSuccessed(BidResponsed bidResponsed) { - String mBidToken = bidResponsed.getBidToken(); - listener.onBidToken(mBidToken); - } - }); - manager.bid(); - } - - ; - - public static void init(Activity activity, onInterHandlerListener listener) { - for (int i = 0; i < 3; i++) { - String finalPlaceId = placeIDs[i]; - String unitId = unitIDs[i]; - getToken(finalPlaceId, unitId, new onBidTokenListener() { - @Override - public void onBidToken(String token) { - MBBidNewInterstitialHandler mMBBidNewInterstitialHandler = new MBBidNewInterstitialHandler(KeyboardSkin.getAppContext(), finalPlaceId, unitId); - ADBean adBean = new ADBean(); - Log.d(TAG, "------------token=" + token); - adBean.setToken(token); - adBean.setInterstitialHandler(mMBBidNewInterstitialHandler); - mMBBidNewInterstitialHandler.loadFromBid(token); - AdInstances.add(adBean); - listener.onAddOK(); - - } - }); - } - - } - - public static void loadAllAd() { - if (AdInstances.size() > 0) { - for (ADBean adBean : AdInstances) { - if (!adBean.getInterstitialHandler().isBidReady()) { - adBean.getInterstitialHandler().loadFromBid(adBean.getToken()); - } - } - } - - } - - public static ADBean getCache() { - Collections.shuffle(AdInstances); - for (ADBean adBean : AdInstances) { - if (adBean.getInterstitialHandler().isBidReady()) { - return adBean; - } - } - return null; - } - - - public static void setCallBack(MBBidNewInterstitialHandler mbBidNewInterstitialHandler, onAdStatusListener listener) { - mbBidNewInterstitialHandler.setInterstitialVideoListener(new NewInterstitialListener() { - - @Override - public void onLoadCampaignSuccess(MBridgeIds ids) { - /** - * 广告已填充 - * @param ids 封装的广告id对象 - */ - Log.i(TAG, "onLoadCampaignSuccess: " + Thread.currentThread() + " " + ids.toString()); - } - - @Override - public void onResourceLoadSuccess(MBridgeIds ids) { - /** - * 广告资源加载成功,可以播放 - * @param ids 封装的广告id对象 - */ - Log.i(TAG, "onResourceLoadSuccess: " + Thread.currentThread() + " " + ids.toString()); - listener.onLoaded(); - } - - @Override - public void onResourceLoadFail(MBridgeIds ids, String errorMsg) { - /** - * 广告加载失败 - * @param errorMsg 加载错误原因 - */ - listener.onLoadFail(); - Log.e(TAG, "onResourceLoadFail errorMsg: " + errorMsg + " " + ids.toString()); - } - - @Override - public void onShowFail(MBridgeIds ids, String errorMsg) { - /** - * 广告播放失败 - * @param errorMsg 错误原因 - */ - listener.onShowFail(); - Log.e(TAG, "onShowFail: " + errorMsg + " " + ids.toString()); - } - - @Override - public void onAdShow(MBridgeIds ids) { - /** - * 广告成功展示 - */ - Log.i(TAG, "onAdShow: " + ids.toString()); - } - - @Override - public void onAdClose(MBridgeIds ids, RewardInfo info) { - /** - * 广告关闭时调用 - * @param info.isCompleteView如果为true,则表示已完全观看了视频 - */ - listener.onClose(); - loadAllAd(); - Log.i(TAG, "onAdClose: " + "isCompleteView:" + info.isCompleteView() + " " + ids.toString()); - } - - @Override - public void onAdClicked(MBridgeIds ids) { - /** - * 广告被点击 - * @param 封装的广告id对象 - */ - Log.i(TAG, "onAdClicked: " + ids.toString()); - } - - @Override - public void onVideoComplete(MBridgeIds ids) { - /** - * 广告播放完成时调用 - * @param ids 封装的广告id对象 - */ - Log.i(TAG, "onVideoComplete: " + ids.toString()); - } - - @Override - public void onAdCloseWithNIReward(MBridgeIds ids, RewardInfo info) { - /** - * 如果开发人员设置了IV奖励,则在广告关闭时调用. - * - * @param 封装的广告id对象 - * @param info.isCompleteView() 是否完全观看 - */ - Log.i(TAG, "onAdCloseWithNIReward: " + ids.toString() + " " + info.toString()); - - Log.i(TAG, info.isCompleteView() ? "Video playback/playable is complete." : "Video playback/playable is not complete."); - - int rewardAlertStatus = info.getRewardAlertStatus(); - - if (rewardAlertStatus == MBridgeConstans.IVREWARDALERT_STATUS_NOTSHOWN) { - Log.e(TAG, "The dialog is not show."); - } - - if (rewardAlertStatus == MBridgeConstans.IVREWARDALERT_STATUS_CLICKCONTINUE) { - Log.e(TAG, "The dialog's continue button clicked."); - } - - if (rewardAlertStatus == MBridgeConstans.IVREWARDALERT_STATUS_CLICKCANCEL) { - Log.e(TAG, "The dialog's cancel button clicked."); - } - } - - @Override - public void onEndcardShow(MBridgeIds ids) { - /** - * 展示广告落地页时调用 - * @param ids 封装的广告id对象 - */ - Log.i(TAG, "onEndcardShow: " + ids.toString()); - } - - }); - - } - - -} diff --git a/app/src/main/java/com/exquisite/mintegral/Mylistener.java b/app/src/main/java/com/exquisite/mintegral/Mylistener.java deleted file mode 100644 index 4412a3d..0000000 --- a/app/src/main/java/com/exquisite/mintegral/Mylistener.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.exquisite.mintegral; - -public interface Mylistener { - void actuion(boolean go); -} diff --git a/app/src/main/java/com/exquisite/mintegral/onAdStatusListener.java b/app/src/main/java/com/exquisite/mintegral/onAdStatusListener.java deleted file mode 100644 index 5a5261f..0000000 --- a/app/src/main/java/com/exquisite/mintegral/onAdStatusListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.exquisite.mintegral; - -import com.mbridge.msdk.newinterstitial.out.MBBidNewInterstitialHandler; - -public interface onAdStatusListener { - - void onLoaded(); - void onLoadFail(); - void onShowFail(); - - void onClose(); -} diff --git a/app/src/main/java/com/exquisite/mintegral/onBidTokenListener.java b/app/src/main/java/com/exquisite/mintegral/onBidTokenListener.java deleted file mode 100644 index 0424afe..0000000 --- a/app/src/main/java/com/exquisite/mintegral/onBidTokenListener.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.exquisite.mintegral; - -public interface onBidTokenListener { - - void onBidToken(String token); -} diff --git a/app/src/main/java/com/exquisite/mintegral/onInterHandlerListener.java b/app/src/main/java/com/exquisite/mintegral/onInterHandlerListener.java deleted file mode 100644 index e84f170..0000000 --- a/app/src/main/java/com/exquisite/mintegral/onInterHandlerListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.exquisite.mintegral; - -import com.mbridge.msdk.newinterstitial.out.MBBidNewInterstitialHandler; - -public interface onInterHandlerListener { - - void onAddOK(); - - -// void onLoaded(); -// void onLoadFail(); -// void onShowFail(); -// -// void onClose(); -} diff --git a/app/src/main/java/com/exquisite/tools/CustomProgressBar.kt b/app/src/main/java/com/exquisite/tools/CustomProgressBar.kt new file mode 100644 index 0000000..d4fccd3 --- /dev/null +++ b/app/src/main/java/com/exquisite/tools/CustomProgressBar.kt @@ -0,0 +1,62 @@ +package com.exquisite.tools + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.LinearGradient +import android.graphics.Paint +import android.graphics.RectF +import android.graphics.Shader +import android.util.AttributeSet +import android.view.View + +class CustomProgressBar(context: Context, attrs: AttributeSet?) : View(context, attrs) { + private var progress = 0f // 当前进度 + private val maxProgress = 100f // 最大进度 + private val progressBarHeight = 20f // 进度条高度 + private val cornerRadius = 10f // 圆角半径 + private val backgroundColor = Color.parseColor("#26FFFFFF") + private val startColor = Color.parseColor("#FF9ce8ff") // 起始颜色 + private val middleColor = Color.parseColor("#FFa4c4fb") // 中间颜色 + private val endColor = Color.parseColor("#FFbfa4ee") // 结束颜色 + private val paint = Paint() + private val paintTow = Paint() + + init { + paint.style = Paint.Style.FILL + paint.isAntiAlias = true + paintTow.style = Paint.Style.FILL + paintTow.isAntiAlias = true + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + // 绘制底色矩形 + paint.shader = null // 重置着色器 + paint.color = backgroundColor + val backgroundRect = RectF(0f, (height / 2 - progressBarHeight / 2), width.toFloat(), (height / 2 + progressBarHeight / 2)) + canvas.drawRoundRect(backgroundRect, cornerRadius, cornerRadius, paint) + + + // 计算进度条的宽度 + val progressBarWidth = (width * progress / maxProgress) + + // 创建颜色渐变对象 + val gradient = LinearGradient(0f, 0f, width.toFloat(), 0f, intArrayOf(startColor, middleColor, endColor), null, Shader.TileMode.CLAMP) + paintTow.shader = gradient + + // 绘制带圆角的进度条矩形 + val rect = RectF(0f, (height / 2 - progressBarHeight / 2), progressBarWidth.toFloat(), (height / 2 + progressBarHeight / 2)) + canvas.drawRoundRect(rect, cornerRadius, cornerRadius, paintTow) + } + + fun getProgress():Float{ + return progress + } + + // 设置进度 + fun setProgress(progress: Float) { + this.progress = progress + invalidate() // 请求重绘 + } +} diff --git a/app/src/main/java/com/exquisite/tools/CustomViewConfig.java b/app/src/main/java/com/exquisite/tools/CustomViewConfig.java index 3a25dbe..908e4ac 100644 --- a/app/src/main/java/com/exquisite/tools/CustomViewConfig.java +++ b/app/src/main/java/com/exquisite/tools/CustomViewConfig.java @@ -6,14 +6,13 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; -import android.util.Log; import android.util.Xml; import androidx.core.content.ContextCompat; import com.exquisite.KeyboardSkin; import com.exquisite.data.StaticValue; -import com.exquisite.demo08.R; +import com.exquisite.R; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; diff --git a/app/src/main/java/com/exquisite/tools/Mytools.java b/app/src/main/java/com/exquisite/tools/Mytools.java index b2c7afa..62e729e 100644 --- a/app/src/main/java/com/exquisite/tools/Mytools.java +++ b/app/src/main/java/com/exquisite/tools/Mytools.java @@ -1,9 +1,6 @@ package com.exquisite.tools; -import static android.provider.Settings.System.getString; - import android.content.Context; -import android.content.SharedPreferences; import android.content.res.AssetManager; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; @@ -33,7 +30,7 @@ import com.exquisite.callback.Adcallback; import com.exquisite.callback.DownloadCallback; import com.exquisite.callback.UnzipCallback; import com.exquisite.data.Mydata; -import com.exquisite.demo08.R; +import com.exquisite.R; import net.sf.sevenzipjbinding.ArchiveFormat; import net.sf.sevenzipjbinding.IInArchive; @@ -58,6 +55,8 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class Mytools { private static InputMethodManager methodManager = (InputMethodManager) KeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE); @@ -65,8 +64,18 @@ public class Mytools { private static final String two_Ad = "n66a0bc9350f0e"; private static final String three_ad = "n66a0b8eca7766"; private static ArrayList adArrayList; + private static ExecutorService executorService; + public static void runIO(Runnable task) { + getExecutorService().execute(task); + } + private static ExecutorService getExecutorService() { + if (executorService == null) { + executorService = Executors.newSingleThreadExecutor(); + } + return executorService; + } public static void setCallback(ATInterstitial ad, Adcallback adcallback) { ad.setAdListener(new ATInterstitialListener() { @Override @@ -294,14 +303,18 @@ public class Mytools { JSONArray jsonObject = loadJSONFromAsset(filename); for (int a = 0; a < jsonObject.length(); a++) { JSONObject list = jsonObject.getJSONObject(a); + String className = list.getString("className"); JSONArray classArray = list.getJSONArray("list"); for (int i = 0; i < classArray.length(); i++) { JSONObject item = classArray.getJSONObject(i); Mydata myData = new Mydata(); + myData.setClassName(className); + myData.setDownloaded(false); + myData.setIslike(false); myData.setPreview(item.getString("preview")); - myData.setThumbnail(item.getString("thumb")); - myData.setResourceName(item.getString("title")); - myData.setUrl(item.getString("zipUrl")); + myData.setThumb(item.getString("thumb")); + myData.setTitle(item.getString("title")); + myData.setZipUrl(item.getString("zipUrl")); dataList.add(myData); } diff --git a/app/src/main/res/drawable/dialog_bg.xml b/app/src/main/res/drawable/dialog_bg.xml new file mode 100644 index 0000000..e2ac195 --- /dev/null +++ b/app/src/main/res/drawable/dialog_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_delete.xml b/app/src/main/res/drawable/icon_delete.xml new file mode 100644 index 0000000..e5a7ddf --- /dev/null +++ b/app/src/main/res/drawable/icon_delete.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/icon_like_check.xml b/app/src/main/res/drawable/icon_like_check.xml new file mode 100644 index 0000000..5546cad --- /dev/null +++ b/app/src/main/res/drawable/icon_like_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_like_uncheck.xml b/app/src/main/res/drawable/icon_like_uncheck.xml new file mode 100644 index 0000000..c7ef996 --- /dev/null +++ b/app/src/main/res/drawable/icon_like_uncheck.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_rate.xml b/app/src/main/res/drawable/icon_rate.xml new file mode 100644 index 0000000..9b2e3f7 --- /dev/null +++ b/app/src/main/res/drawable/icon_rate.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_share.xml b/app/src/main/res/drawable/icon_share.xml new file mode 100644 index 0000000..a1777af --- /dev/null +++ b/app/src/main/res/drawable/icon_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_version.xml b/app/src/main/res/drawable/icon_version.xml new file mode 100644 index 0000000..96b7811 --- /dev/null +++ b/app/src/main/res/drawable/icon_version.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/like_check.xml b/app/src/main/res/drawable/like_check.xml new file mode 100644 index 0000000..b4da267 --- /dev/null +++ b/app/src/main/res/drawable/like_check.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/like_uncheck.xml b/app/src/main/res/drawable/like_uncheck.xml new file mode 100644 index 0000000..10994a7 --- /dev/null +++ b/app/src/main/res/drawable/like_uncheck.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/showkeyboard_edit.xml b/app/src/main/res/drawable/showkeyboard_edit.xml new file mode 100644 index 0000000..54e654b --- /dev/null +++ b/app/src/main/res/drawable/showkeyboard_edit.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml index c0e118c..a9bbddd 100644 --- a/app/src/main/res/layout/activity_preview.xml +++ b/app/src/main/res/layout/activity_preview.xml @@ -9,7 +9,7 @@ tools:context="com.exquisite.activity.PreviewActivity"> - + android:layout_height="wrap_content" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 2e50dab..1a89ef3 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -57,10 +57,11 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/logo" /> - diff --git a/app/src/main/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml new file mode 100644 index 0000000..a1893e7 --- /dev/null +++ b/app/src/main/res/layout/activity_web.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog.xml b/app/src/main/res/layout/dialog.xml new file mode 100644 index 0000000..570698f --- /dev/null +++ b/app/src/main/res/layout/dialog.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml new file mode 100644 index 0000000..34804a3 --- /dev/null +++ b/app/src/main/res/layout/fragment_like.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_page_one.xml b/app/src/main/res/layout/fragment_page_one.xml index c60c4b5..625e25f 100644 --- a/app/src/main/res/layout/fragment_page_one.xml +++ b/app/src/main/res/layout/fragment_page_one.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background" - tools:context="com.exquisite.fragment.PageOneFragment"> + tools:context="com.exquisite.fragment.MainFragment"> + tools:context="com.exquisite.fragment.SettingFragment"> - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/image_list.xml b/app/src/main/res/layout/image_list.xml index d95c4b0..542f238 100644 --- a/app/src/main/res/layout/image_list.xml +++ b/app/src/main/res/layout/image_list.xml @@ -5,7 +5,7 @@ android:id="@+id/constraint_layout_id" android:layout_width="match_parent" android:layout_height="wrap_content" - tools:context="com.exquisite.fragment.PageOneFragment"> + tools:context="com.exquisite.fragment.MainFragment"> + + \ No newline at end of file diff --git a/app/src/main/res/layout/toast_dialog.xml b/app/src/main/res/layout/toast_dialog.xml new file mode 100644 index 0000000..3889214 --- /dev/null +++ b/app/src/main/res/layout/toast_dialog.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxxhdpi/toast_image_bg.png b/app/src/main/res/mipmap-xxxhdpi/toast_image_bg.png new file mode 100644 index 0000000..ca5409c Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/toast_image_bg.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b79845..8166916 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,10 +4,12 @@ Keyboard Settings Rate us Privacy + Share + Version For You View all All - Activate PassionCool Keyboard to \n enable MORE functions! + Keyboard \n requires permission to use Step 1:Select Step 2:Enabled Hello blank fragment @@ -21,6 +23,7 @@ Successfully set up \n Now you can download keyboard Setting failed ! Please try again Download failed + Zip failed Cancel The keyboard is not available Please enter the content @@ -28,4 +31,12 @@ Search 489845093456531 f4f2d45a7ca326adf493b7dd29a188be + Here is a Keyboard Skins + Application results + Enter text to see the effect + Apply + Apply Now + In Use + My Favorite + No favorites added yet \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 6c84453..b79134b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("com.android.application") version "8.1.3" apply false - id("org.jetbrains.kotlin.android") version "1.7.0" apply false + id("org.jetbrains.kotlin.android") version "1.9.0" apply false id("com.google.gms.google-services") version "4.3.15" apply false id ("com.google.firebase.crashlytics") version "2.9.2" apply false } diff --git a/settings.gradle.kts b/settings.gradle.kts index 8c70749..2a2f024 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,7 +14,7 @@ dependencyResolutionManagement { maven("https://jitpack.io") maven("https://jfrog.anythinktech.com/artifactory/overseas_sdk") maven("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") - maven("https://jfrog.anythinktech.com/artifactory/debugger") +// maven("https://jfrog.anythinktech.com/artifactory/debugger") maven{url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea")} } }