更新UI 1.0.9(10)

This commit is contained in:
zhouzhijia 2024-08-15 17:24:21 +08:00
parent d3007e5d5f
commit e014e76911
68 changed files with 1785 additions and 609 deletions

3
.gitignore vendored
View File

@ -14,3 +14,6 @@ app/release/keyboardskins_V1.0.3(4)_07_16_14_17-release.apk
app/release/output-metadata.json 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_01-release.apk
app/release/keyboardskins_V1.0.6(7)_07_19_15_03-release.aab 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

View File

@ -6,24 +6,24 @@ plugins {
id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
id("com.google.gms.google-services") id("com.google.gms.google-services")
id("com.google.firebase.crashlytics") id("com.google.firebase.crashlytics")
id("kotlin-kapt")
} }
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
android { android {
namespace = "com.exquisite.demo08" namespace = "com.exquisite"
compileSdk = 34 compileSdk = 34
defaultConfig { defaultConfig {
applicationId = "com.key.keyboardskins" applicationId = "com.key.keyboardskins"
minSdk = 23 minSdk = 23
targetSdk = 34 targetSdk = 34
versionCode = 9 versionCode = 10
versionName = "1.0.8" versionName = "1.0.9"
setProperty( setProperty(
"archivesBaseName", "archivesBaseName",
"keyboardskins_V" + versionName + "(${versionCode})_$timestamp" "keyboardskins_V1" + versionName + "(${versionCode})_$timestamp"
) )
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
@ -39,8 +39,11 @@ android {
} }
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_17
}
buildFeatures{
viewBinding = true
} }
} }
@ -57,6 +60,12 @@ dependencies {
implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.github.bumptech.glide:glide:4.16.0")
implementation("com.github.omicronapps:7-Zip-JBinding-4Android:Release-16.02-2.02") 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(platform("com.google.firebase:firebase-bom:33.1.2"))
implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-analytics-ktx")
implementation("com.google.firebase:firebase-crashlytics-ktx") implementation("com.google.firebase:firebase-crashlytics-ktx")
@ -104,11 +113,11 @@ dependencies {
implementation("androidx.recyclerview:recyclerview:1.1.0") implementation("androidx.recyclerview:recyclerview:1.1.0")
//Tramini //Tramini
implementation("com.anythink.sdk:tramini-plugin-tpn:6.3.68") // implementation("com.anythink.sdk:tramini-plugin-tpn:6.3.68")
//-----------------------------TopOn 聚合 //-----------------------------TopOn 聚合
// Debugger UI Tools // Debugger UI Tools
implementation("com.anythink.sdk:debugger-ui:1.0.7") // implementation("com.anythink.sdk:debugger-ui:1.0.7")
} }

View File

@ -15,6 +15,12 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
tools:targetApi="31"> tools:targetApi="31">
<activity
android:name="com.exquisite.activity.ShowKeyboardActivity"
android:exported="false" />
<activity
android:name="com.exquisite.activity.WebActivity"
android:exported="false" />
<meta-data <meta-data
android:name="com.facebook.sdk.ApplicationId" android:name="com.facebook.sdk.ApplicationId"

View File

@ -814,7 +814,9 @@
} }
] ]
}, },
{"className": "festival","list": [ {
"className": "festival",
"list": [
{ {
"preview": "https://resource-sg-public.lux-ad.com/keyboard/d3ce935f39cfa4bf877370e7166523e0.webp", "preview": "https://resource-sg-public.lux-ad.com/keyboard/d3ce935f39cfa4bf877370e7166523e0.webp",
"thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9b79cbc3b678e9a7e63d334ea66fc7c.jpg", "thumb": "https://resource-sg-public.lux-ad.com/keyboard/f9b79cbc3b678e9a7e63d334ea66fc7c.jpg",

View File

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Privacy Policy</title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
padding: 20px;
}
h1, h2 {
color: #333;
}
h2 {
margin-top: 20px;
}
p {
margin: 10px 0;
}
ul {
margin: 10px 0;
padding-left: 20px;
}
</style>
</head>
<body>
<h1>Privacy Policy</h1>
<p><strong>Date:</strong> August 15, 2024</p>
<p>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.</p>
<h2>Information Collection and Use</h2>
<p>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.</p>
<p>The app does use third-party services that may collect information used to identify you.</p>
<p>Please refer to the privacy policy of the third-party service provider used by the
application:</p>
<ul>
<li>Google Play Services</li>
<li>Google Analytics for Firebase</li>
<li>Firebase Crashlytics</li>
<li>Unity</li>
<li>AppLovin</li>
<li>Pangle</li>
<li>Mintegral</li>
<li>Bigo</li>
<li>Ironsource</li>
<li>Vungle</li>
</ul>
<h2>Log Data</h2>
<p>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.</p>
<h2>Cookies</h2>
<p>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.</p>
<p>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.</p>
<h2>Service Providers</h2>
<p>We may employ third-party companies and individuals due to the following reasons:</p>
<ul>
<li>To facilitate our Service</li>
<li>To provide the Service on our behalf</li>
<li>To perform Service-related services</li>
<li>To assist us in analyzing how our Service is used</li>
</ul>
<p>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.</p>
<h2>Security</h2>
<p>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.</p>
<h2>Links to Other Sites</h2>
<p>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.</p>
<h2>Childrens Privacy</h2>
<p>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.</p>
<h2>Changes to This Privacy Policy</h2>
<p>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.</p>
<h2>Privacy Questions</h2>
<p>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.</p>
<p>If you have any questions or concerns about our Privacy Policy or data processing, please contact
us: <a href="mailto:PopRenajm@gmail.com">PopRenajm@gmail.com</a>.</p>
</body>
</html>

View File

@ -1,30 +1,21 @@
package com.exquisite; package com.exquisite;
import static android.content.ContentValues.TAG;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.SharedPreferences;
import android.util.Log; import android.util.Log;
import android.widget.Toast;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.anythink.core.api.ATSDK; import com.anythink.core.api.ATSDK;
import com.anythink.core.api.NetTrafficeCallback; import com.anythink.core.api.NetTrafficeCallback;
import com.anythink.debug.api.ATDebuggerUITest;
import com.anythink.interstitial.api.ATInterstitial; import com.anythink.interstitial.api.ATInterstitial;
import com.exquisite.data.Mydata; import com.exquisite.data.Mydata;
import com.exquisite.mintegral.MBrManager; import com.exquisite.data.MydataBase;
import com.exquisite.tools.Mytools; 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.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
public class KeyboardSkin extends Application { public class KeyboardSkin extends Application {
public static KeyboardSkin app; 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_KEY = "a95ed90a717c7bcff42cd908db3f05664";
private static final String TOP_DEBUG = "8a341b6aa5cc3fa453d7741f01a534c1d5dd766a"; private static final String TOP_DEBUG = "8a341b6aa5cc3fa453d7741f01a534c1d5dd766a";
public static List<ATInterstitial> ads; public static List<ATInterstitial> 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<Mydata> alllist = new ArrayList<>();
public static List<Mydata> lovelist = new ArrayList<>();
public static List<Mydata> coollist = new ArrayList<>();
public static List<Mydata> cutelist = new ArrayList<>();
public static List<Mydata> neonlist = new ArrayList<>();
public static List<Mydata> festivallist = new ArrayList<>();
public static List<Mydata> gravitylist = new ArrayList<>();
public static List<Mydata> aestheticlist = new ArrayList<>();
public static List<Mydata> superlist = new ArrayList<>();
public static List<Mydata> getLovelist() {
return lovelist;
}
public static List<Mydata> getCoollist() {
return coollist;
}
public static List<Mydata> getCutelist() {
return cutelist;
}
public static List<Mydata> getNeonlist() {
return neonlist;
}
public static List<Mydata> getFestivallist() {
return festivallist;
}
public static List<Mydata> getGravitylist() {
return gravitylist;
}
public static List<Mydata> getAestheticlist() {
return aestheticlist;
}
public static List<Mydata> getSuperlist() {
return superlist;
}
public static int a;
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
context = getApplicationContext(); context = getApplicationContext();
app = this; app = this;
a = 0;
// Log.e("zzj","---a app is---"+a);
ATSDK.checkIsEuTraffic(this, new NetTrafficeCallback() { ATSDK.checkIsEuTraffic(this, new NetTrafficeCallback() {
@Override @Override
@ -59,9 +105,44 @@ public class KeyboardSkin extends Application {
}); });
initSdk(); initSdk();
myDataArrayList = Mytools.parseJsonToList("keyboard.json");
sp = getSharedPreferences(PRE_NAME, MODE_PRIVATE);
insert = sp.getBoolean(PRE_KEY, false);
if (!insert) {
List<Mydata> myData = Mytools.parseJsonToList("keyboard.json"); Mytools.runIO(new Runnable() {
myDataArrayList = myData; @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() { private void initSdk() {

View File

@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentTransaction;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -20,11 +19,8 @@ import com.anythink.interstitial.api.ATInterstitial;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.callback.Adcallback; import com.exquisite.callback.Adcallback;
import com.exquisite.fragment.AllFragment; import com.exquisite.fragment.AllFragment;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.mintegral.ADBean;
import com.exquisite.mintegral.MBrManager;
import com.exquisite.mintegral.Mylistener;
import com.exquisite.mintegral.onAdStatusListener;
import com.exquisite.tools.Mytools; import com.exquisite.tools.Mytools;
import java.util.List; import java.util.List;
@ -56,6 +52,9 @@ public class AllActivity extends AppCompatActivity implements View.OnClickListen
intEvent(); intEvent();
} }
private void intEvent() { private void intEvent() {
back.setOnClickListener(this); back.setOnClickListener(this);
} }

View File

@ -20,13 +20,14 @@ import android.widget.LinearLayout;
import android.widget.Toast; import android.widget.Toast;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.Mytools; import com.exquisite.tools.Mytools;
public class KeyBoardSettingsActivity extends AppCompatActivity implements View.OnClickListener { public class KeyBoardSettingsActivity extends AppCompatActivity implements View.OnClickListener {
private static final InputMethodManager methodManager = (InputMethodManager) KeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE); private static final InputMethodManager methodManager = (InputMethodManager) KeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE);
private LinearLayout back, step1, step2; private LinearLayout back, step1, step2;
private ImageView step1_image, step2_image; private ImageView step1_image, step2_image;
@SuppressLint("MissingInflatedId") @SuppressLint("MissingInflatedId")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -55,14 +56,14 @@ public class KeyBoardSettingsActivity extends AppCompatActivity implements View.
} }
private void intImage() { private void intImage() {
if (Mytools.isStep2()){ if (Mytools.isStep2()) {
step2_image.setVisibility(View.VISIBLE); step2_image.setVisibility(View.VISIBLE);
}else { } else {
step2_image.setVisibility(View.GONE); step2_image.setVisibility(View.GONE);
} }
if (Mytools.isStep1()){ if (Mytools.isStep1()) {
step1_image.setVisibility(View.VISIBLE); step1_image.setVisibility(View.VISIBLE);
}else { } else {
step1_image.setVisibility(View.GONE); step1_image.setVisibility(View.GONE);
} }
} }
@ -101,6 +102,7 @@ public class KeyBoardSettingsActivity extends AppCompatActivity implements View.
break; break;
} }
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
@ -112,10 +114,10 @@ public class KeyBoardSettingsActivity extends AppCompatActivity implements View.
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
if (Mytools.isStep1()&&Mytools.isStep2()){ if (Mytools.isStep1() && Mytools.isStep2()) {
Toast.makeText(KeyBoardSettingsActivity.this,getString(R.string.text_step_successful),Toast.LENGTH_SHORT).show(); Toast.makeText(KeyBoardSettingsActivity.this, getString(R.string.text_step_successful), Toast.LENGTH_SHORT).show();
}else { } else {
Toast.makeText(KeyBoardSettingsActivity.this,getString(R.string.text_step_failed),Toast.LENGTH_SHORT).show(); Toast.makeText(KeyBoardSettingsActivity.this, getString(R.string.text_step_failed), Toast.LENGTH_SHORT).show();
} }
} }
} }

View File

@ -1,6 +1,9 @@
package com.exquisite.activity; package com.exquisite.activity;
import androidx.activity.EdgeToEdge; import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets; import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
@ -8,14 +11,49 @@ import androidx.core.view.WindowInsetsCompat;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import android.annotation.SuppressLint; 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.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.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 com.google.android.material.tabs.TabLayout;
import java.io.File;
import java.util.List;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout; 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") @SuppressLint("MissingInflatedId")
@Override @Override
@ -28,14 +66,16 @@ public class MainActivity extends AppCompatActivity {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets; return insets;
}); });
tabLayout = findViewById(R.id.main_tabLayout); tabLayout = findViewById(R.id.main_tabLayout);
ViewPager viewPager = findViewById(R.id.main_viewpager); ViewPager viewPager = findViewById(R.id.main_viewpager);
PageAdapter adapter = new PageAdapter(getSupportFragmentManager()); PageAdapter adapter = new PageAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter); viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager); tabLayout.setupWithViewPager(viewPager);
setmainTabIcons(tabLayout); showDg();
setTabIcons(0);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 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<Mydata> 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<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> 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) { private void setTabIcons(final int position) {
for (int i = 0; i < tabLayout.getTabCount(); i++) { for (int i = 0; i < tabLayout.getTabCount(); i++) {
final TabLayout.Tab tab = tabLayout.getTabAt(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); tab.setIcon(position == 0 ? R.drawable.home_check : R.drawable.home_uncheck);
break; break;
case 1: 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; break;
default: default:
break; break;
@ -70,21 +289,34 @@ public class MainActivity extends AppCompatActivity {
} }
} }
private void setmainTabIcons(TabLayout tabLayout) { private void showKey() {
for (int i = 0; i < tabLayout.getTabCount(); i++) { Toast.makeText(MainActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show();
TabLayout.Tab tab = tabLayout.getTabAt(i); Intent intent = new Intent(this, ShowKeyboardActivity.class);
if (tab != null) { intent.putExtra(StaticValue.KEY_ISshow, 1);
switch (i) { startActivity(intent);
case 0:
tab.setIcon(R.drawable.home_check); }
break;
case 1:
tab.setIcon(R.drawable.setting_uncheck); @Override
break; protected void onResume() {
default: super.onResume();
break; 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;
}
} }

View File

@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets; import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -15,7 +16,6 @@ import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -32,19 +32,17 @@ import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.callback.Adcallback; import com.exquisite.callback.Adcallback;
import com.exquisite.callback.DownloadCallback; import com.exquisite.data.Mydata;
import com.exquisite.callback.UnzipCallback; import com.exquisite.data.MydataBase;
import com.exquisite.data.StaticValue; import com.exquisite.data.StaticValue;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.mintegral.ADBean;
import com.exquisite.mintegral.MBrManager;
import com.exquisite.mintegral.Mylistener;
import com.exquisite.mintegral.onAdStatusListener;
import com.exquisite.tools.Mytools; import com.exquisite.tools.Mytools;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;
import java.io.File; import java.io.File;
import java.io.IOException; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class PreviewActivity extends AppCompatActivity implements View.OnClickListener { public class PreviewActivity extends AppCompatActivity implements View.OnClickListener {
@ -60,7 +58,13 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi
private ProgressBar progressBarDownload; private ProgressBar progressBarDownload;
private List<ATInterstitial> ads; private List<ATInterstitial> ads;
private ThumAdapter thumAdapter;
private ImageView like;
private Boolean islike = false;
private Mydata otherdata;
private TextView downloadText;
private ImageView downImage;
private List<Mydata> newList = new ArrayList<>();
@SuppressLint("MissingInflatedId") @SuppressLint("MissingInflatedId")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -80,14 +84,74 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi
imageView.setVisibility(View.GONE); imageView.setVisibility(View.GONE);
progressBarPreview.setVisibility(View.VISIBLE); progressBarPreview.setVisibility(View.VISIBLE);
progressBarDownload.setVisibility(View.GONE); progressBarDownload.setVisibility(View.GONE);
SpaceItem spaceItem = new SpaceItem(10, 20, 10); SpaceItem spaceItem = new SpaceItem(10, 20, 10);
previewrv.setAdapter(new ThumAdapter(this, KeyboardSkin.getMyDataArrayList())); previewrv.setLayoutManager(new GridLayoutManager(PreviewActivity.this, 2));
previewrv.setLayoutManager(new GridLayoutManager(this, 2));
previewrv.addItemDecoration(spaceItem); previewrv.addItemDecoration(spaceItem);
Mytools.runIO(new Runnable() {
@Override
public void run() {
List<Mydata> 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<List<Mydata>>() {
// @Override
// public void onChanged(List<Mydata> mydata) {
//
//
//
// }
// });
Intent intent = getIntent(); Intent intent = getIntent();
preview = intent.getStringExtra(StaticValue.KEY_PRE); preview = intent.getStringExtra(StaticValue.KEY_PRE);
name = intent.getStringExtra(StaticValue.KEY_NAME); name = intent.getStringExtra(StaticValue.KEY_NAME);
url = intent.getStringExtra(StaticValue.KEY_URL); url = intent.getStringExtra(StaticValue.KEY_URL);
Mytools.runIO(new Runnable() {
@Override
public void run() {
List<Mydata> 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) Glide.with(this)
.asBitmap() .asBitmap()
.load(preview) .load(preview)
@ -114,9 +178,13 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi
back.setOnClickListener(this); back.setOnClickListener(this);
viewall.setOnClickListener(this); viewall.setOnClickListener(this);
settings.setOnClickListener(this); settings.setOnClickListener(this);
like.setOnClickListener(this);
} }
private void intView() { 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); back = findViewById(R.id.detail_back);
imageView = findViewById(R.id.preview_image); imageView = findViewById(R.id.preview_image);
viewall = findViewById(R.id.preview_all); 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); Intent intent = new Intent(PreviewActivity.this, AllActivity.class);
startActivity(intent); startActivity(intent);
break; break;
case R.id.preview_islike:
checkLike();
break;
case R.id.detail_setting: case R.id.detail_setting:
download(); download();
break; 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() { private void showAd() {
ATInterstitial mInterstitialAd = Mytools.onCache(ads); ATInterstitial mInterstitialAd = Mytools.onCache(ads);
if (mInterstitialAd == null) { if (mInterstitialAd == null) {
finish(); showKey();
} else { } else {
if (mInterstitialAd.isAdReady()) { if (mInterstitialAd.isAdReady()) {
Mytools.setCallback(mInterstitialAd, new Adcallback() { Mytools.setCallback(mInterstitialAd, new Adcallback() {
@Override @Override
public void onShowFail(AdError ad) { public void onShowFail(AdError ad) {
finish(); showKey();
} }
@Override @Override
public void onAdHidden() { public void onAdHidden() {
finish(); showKey();
} }
}); });
mInterstitialAd.show(this); mInterstitialAd.show(this);
@ -182,7 +284,6 @@ public class PreviewActivity extends AppCompatActivity implements View.OnClickLi
Mytools.unZip(this, unzipPath, resource, (successful1, resDirPath) -> { Mytools.unZip(this, unzipPath, resource, (successful1, resDirPath) -> {
if (successful1) { if (successful1) {
StaticValue.PATH = resDirPath; StaticValue.PATH = resDirPath;
Toast.makeText(PreviewActivity.this, getString(R.string.set_successful), Toast.LENGTH_SHORT).show();
progressBarDownload.setVisibility(View.GONE); progressBarDownload.setVisibility(View.GONE);
showAd(); showAd();

View File

@ -7,28 +7,23 @@ import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.data.Mydata; import com.exquisite.data.Mydata;
import com.exquisite.data.StaticValue; import com.exquisite.R;
import com.exquisite.demo08.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;
import java.util.List; import java.util.List;
@ -116,7 +111,7 @@ public class SearchActivity extends AppCompatActivity implements View.OnClickLis
faile.setVisibility(View.GONE); faile.setVisibility(View.GONE);
searchrv.setVisibility(View.VISIBLE); searchrv.setVisibility(View.VISIBLE);
searchrv.setAdapter(new ThumAdapter(this, filteredData)); 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); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

View File

@ -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();
}
}

View File

@ -5,32 +5,21 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets; import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer; import android.os.CountDownTimer;
import android.util.Log;
import android.view.View; import android.view.View;
import com.anythink.core.api.AdError; import com.anythink.core.api.AdError;
import com.anythink.interstitial.api.ATInterstitial; import com.anythink.interstitial.api.ATInterstitial;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.callback.Adcallback; import com.exquisite.callback.Adcallback;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.mintegral.ADBean;
import com.exquisite.mintegral.MBrManager; import com.exquisite.tools.CustomProgressBar;
import com.exquisite.mintegral.Mylistener;
import com.exquisite.mintegral.onAdStatusListener;
import com.exquisite.mintegral.onInterHandlerListener;
import com.exquisite.tools.Mytools; 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; import java.util.List;
@ -38,8 +27,8 @@ public class SplashActivity extends AppCompatActivity {
private CountDownTimer countDownTimer; private CountDownTimer countDownTimer;
private List<ATInterstitial> ads; private List<ATInterstitial> ads;
public static boolean isAlreadyShow = false; private boolean isAlreadyShow = false;
private float i = 0;
@SuppressLint("MissingInflatedId") @SuppressLint("MissingInflatedId")
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -53,11 +42,15 @@ public class SplashActivity extends AppCompatActivity {
return insets; return insets;
}); });
CustomProgressBar customProgressBar = findViewById(R.id.splash_pg);
ads = KeyboardSkin.lodAd(); ads = KeyboardSkin.lodAd();
countDownTimer = new CountDownTimer(11000, 100) { countDownTimer = new CountDownTimer(11000, 100) {
@Override @Override
public void onTick(long l) { public void onTick(long l) {
i++;
customProgressBar.setProgress(i);
if (!isAlreadyShow) { if (!isAlreadyShow) {
showAd(false); showAd(false);
} }
@ -102,7 +95,6 @@ public class SplashActivity extends AppCompatActivity {
goMain(); goMain();
} }
}); });
mInterstitialAd.show(this); mInterstitialAd.show(this);
} else { } else {
mInterstitialAd.load(); mInterstitialAd.load();

View File

@ -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");
}
}

View File

@ -5,8 +5,9 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentPagerAdapter;
import com.exquisite.fragment.PageOneFragment; import com.exquisite.fragment.LikeFragment;
import com.exquisite.fragment.PageTwoFragment; import com.exquisite.fragment.MainFragment;
import com.exquisite.fragment.SettingFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -16,8 +17,10 @@ public class PageAdapter extends FragmentPagerAdapter {
public PageAdapter(@NonNull FragmentManager fm) { public PageAdapter(@NonNull FragmentManager fm) {
super(fm); super(fm);
list.add(new PageOneFragment()); list.add(new MainFragment());
list.add(new PageTwoFragment()); list.add(new LikeFragment());
list.add(new SettingFragment());
} }
@NonNull @NonNull
@ -28,6 +31,6 @@ public class PageAdapter extends FragmentPagerAdapter {
@Override @Override
public int getCount() { public int getCount() {
return 2; return list.size();
} }
} }

View File

@ -11,14 +11,13 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.exquisite.R;
import com.exquisite.activity.PreviewActivity; import com.exquisite.activity.PreviewActivity;
import com.exquisite.data.Mydata; import com.exquisite.data.Mydata;
import com.exquisite.data.StaticValue; import com.exquisite.data.StaticValue;
import com.exquisite.demo08.R;
import com.exquisite.tools.Mytools; import com.exquisite.tools.Mytools;
import java.util.List; import java.util.List;
import java.util.Random;
public class ThumAdapter extends RecyclerView.Adapter<ThumVH> { public class ThumAdapter extends RecyclerView.Adapter<ThumVH> {
private Context myContext; private Context myContext;
@ -39,7 +38,17 @@ public class ThumAdapter extends RecyclerView.Adapter<ThumVH> {
@Override @Override
public void onBindViewHolder(@NonNull ThumVH holder, int position) { public void onBindViewHolder(@NonNull ThumVH holder, int position) {
Mydata myData = myDataList.get(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) Glide.with(myContext)
.load(thumbnail) .load(thumbnail)
.placeholder(R.mipmap.logo) .placeholder(R.mipmap.logo)
@ -47,8 +56,8 @@ public class ThumAdapter extends RecyclerView.Adapter<ThumVH> {
.into(holder.getImageViewThumb()); .into(holder.getImageViewThumb());
holder.getConstraintLayout().setOnClickListener(v -> { holder.getConstraintLayout().setOnClickListener(v -> {
Intent intent = new Intent(myContext, PreviewActivity.class); Intent intent = new Intent(myContext, PreviewActivity.class);
intent.putExtra(StaticValue.KEY_NAME, myData.getResourceName()); intent.putExtra(StaticValue.KEY_NAME, myData.getTitle());
intent.putExtra(StaticValue.KEY_URL, myData.getUrl()); intent.putExtra(StaticValue.KEY_URL, myData.getZipUrl());
intent.putExtra(StaticValue.KEY_PRE, myData.getPreview()); intent.putExtra(StaticValue.KEY_PRE, myData.getPreview());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
myContext.startActivity(intent); myContext.startActivity(intent);

View File

@ -7,16 +7,22 @@ import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.demo08.R; import com.exquisite.R;
public class ThumVH extends RecyclerView.ViewHolder { public class ThumVH extends RecyclerView.ViewHolder {
private ImageView imageViewThumb; private ImageView imageViewThumb;
private ConstraintLayout constraintLayout; private ConstraintLayout constraintLayout;
private View view;
public ThumVH(@NonNull View itemView) { public ThumVH(@NonNull View itemView) {
super(itemView); super(itemView);
imageViewThumb = itemView.findViewById(R.id.image_view_thumb_id); imageViewThumb = itemView.findViewById(R.id.image_view_thumb_id);
constraintLayout = itemView.findViewById(R.id.constraint_layout_id); constraintLayout = itemView.findViewById(R.id.constraint_layout_id);
view = itemView.findViewById(R.id.view);
}
public View getView() {
return view;
} }
public ConstraintLayout getConstraintLayout() { public ConstraintLayout getConstraintLayout() {

View File

@ -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<List<Mydata>> getAll();
@Query("SELECT * FROM keyboard_table")
List<Mydata> getAlldata();
@Query("select * from keyboard_table where preview =:pre ")
List<Mydata> checklikelist(String pre);
@Query("select * from keyboard_table where className =:classname ")
List<Mydata> getotherlist(String classname);
@Query("SELECT * FROM keyboard_table WHERE islike = :islike")
LiveData<List<Mydata>> getlikelist(boolean islike);
@Query("SELECT * FROM keyboard_table WHERE title LIKE '%' || :title || '%'")
List<Mydata> getSearchData(String title);
@Insert
void insertAll(List<Mydata> likeDataList);
@Update
void update(Mydata otherdata);
}

View File

@ -1,52 +1,94 @@
package com.exquisite.data; package com.exquisite.data;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
import com.exquisite.KeyboardSkin;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Entity(tableName = KeyboardSkin.Table_Name)
public class Mydata { public class Mydata {
private String resourceName; @PrimaryKey(autoGenerate = true)
public int id;
private String thumbnail; public String preview;
private String preview; public String thumb;
public String className;
private String url; public String title;
public String zipUrl;
public void setPreview(String preview) { public Boolean islike;
this.preview = preview; public Boolean isDownloaded;
} public String path;
public void setResourceName(String resourceName) {
this.resourceName = resourceName;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public void setUrl(String url) {
this.url = url;
}
public String getPreview() { public String getPreview() {
return preview; return preview;
} }
public String getResourceName() { public void setPreview(String preview) {
return resourceName; this.preview = preview;
} }
public String getThumbnail() { public String getThumb() {
return thumbnail; return thumb;
} }
public String getUrl() { public void setThumb(String thumb) {
return url; 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<Mydata> filterByName(String input, List<Mydata> dataList) { public List<Mydata> filterByName(String input, List<Mydata> dataList) {
List<Mydata> filteredList = new ArrayList<>(); List<Mydata> filteredList = new ArrayList<>();
for (Mydata data : dataList) { for (Mydata data : dataList) {
if (data.getResourceName().toLowerCase().contains(input.toLowerCase())) { if (data.getTitle().toLowerCase().contains(input.toLowerCase())) {
filteredList.add(data); filteredList.add(data);
} }
} }

View File

@ -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;
}
}

View File

@ -5,4 +5,5 @@ public class StaticValue {
public static String KEY_URL = "key_url"; public static String KEY_URL = "key_url";
public static String KEY_PRE = "key_pre"; public static String KEY_PRE = "key_pre";
public static String PATH = ""; public static String PATH = "";
public static String KEY_ISshow = "";
} }

View File

@ -6,7 +6,6 @@ import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
@ -15,7 +14,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;
public class FragmentAesthetic extends Fragment { public class FragmentAesthetic extends Fragment {

View File

@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;
public class FragmentCool extends Fragment { public class FragmentCool extends Fragment {

View File

@ -12,7 +12,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;

View File

@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;
public class FragmentForyou extends Fragment { public class FragmentForyou extends Fragment {

View File

@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;
public class FragmentLove extends Fragment { public class FragmentLove extends Fragment {

View File

@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.adapter.ThumAdapter; import com.exquisite.adapter.ThumAdapter;
import com.exquisite.demo08.R; import com.exquisite.R;
import com.exquisite.tools.SpaceItem; import com.exquisite.tools.SpaceItem;

View File

@ -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<Mydata> 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<List<Mydata>>() {
@Override
public void onChanged(List<Mydata> 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);
}
});
}
}

View File

@ -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<Mydata> 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<Mydata> 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> mydata = MydataBase.getInstance().myDAO().getAlldata();
// requireActivity().runOnUiThread(new Runnable() {
// @Override
// public void run() {
//// Collections.shuffle(mydata);
// List<Mydata> 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<List<Mydata>>() {
// @Override
// public void onChanged(List<Mydata> mydata) {
// Collections.shuffle(mydata);
// List<Mydata> newList = mydata.subList(0, 20);
// thumAdapter = new ThumAdapter(requireContext(), newList);
// mainrv.setAdapter(thumAdapter);
// mainrv.setLayoutManager(new GridLayoutManager(requireContext(), 2));
// mainrv.addItemDecoration(spaceItem);
// }
// });
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}
});
}
}

View File

@ -1,18 +1,14 @@
package com.exquisite.keyboard; package com.exquisite.keyboard;
import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView; import android.inputmethodservice.KeyboardView;
import android.os.IBinder;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import com.exquisite.demo08.R; import com.exquisite.R;
public class KeyboardService extends InputMethodService implements KeyboardView.OnKeyboardActionListener { public class KeyboardService extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
private int[] ViewXmls = new int[4]; private int[] ViewXmls = new int[4];

View File

@ -7,7 +7,6 @@ import android.graphics.drawable.Drawable;
import android.inputmethodservice.Keyboard; import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView; import android.inputmethodservice.KeyboardView;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import com.exquisite.tools.CustomViewConfig; import com.exquisite.tools.CustomViewConfig;
import com.exquisite.tools.Mytools; import com.exquisite.tools.Mytools;

View File

@ -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;
}
}

View File

@ -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<ADBean> 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());
}
});
}
}

View File

@ -1,5 +0,0 @@
package com.exquisite.mintegral;
public interface Mylistener {
void actuion(boolean go);
}

View File

@ -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();
}

View File

@ -1,6 +0,0 @@
package com.exquisite.mintegral;
public interface onBidTokenListener {
void onBidToken(String token);
}

View File

@ -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();
}

View File

@ -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() // 请求重绘
}
}

View File

@ -6,14 +6,13 @@ import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable;
import android.util.Log;
import android.util.Xml; import android.util.Xml;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import com.exquisite.KeyboardSkin; import com.exquisite.KeyboardSkin;
import com.exquisite.data.StaticValue; import com.exquisite.data.StaticValue;
import com.exquisite.demo08.R; import com.exquisite.R;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;

View File

@ -1,9 +1,6 @@
package com.exquisite.tools; package com.exquisite.tools;
import static android.provider.Settings.System.getString;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.StateListDrawable;
@ -33,7 +30,7 @@ import com.exquisite.callback.Adcallback;
import com.exquisite.callback.DownloadCallback; import com.exquisite.callback.DownloadCallback;
import com.exquisite.callback.UnzipCallback; import com.exquisite.callback.UnzipCallback;
import com.exquisite.data.Mydata; import com.exquisite.data.Mydata;
import com.exquisite.demo08.R; import com.exquisite.R;
import net.sf.sevenzipjbinding.ArchiveFormat; import net.sf.sevenzipjbinding.ArchiveFormat;
import net.sf.sevenzipjbinding.IInArchive; import net.sf.sevenzipjbinding.IInArchive;
@ -58,6 +55,8 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Mytools { public class Mytools {
private static InputMethodManager methodManager = (InputMethodManager) KeyboardSkin.app.getSystemService(Context.INPUT_METHOD_SERVICE); 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 two_Ad = "n66a0bc9350f0e";
private static final String three_ad = "n66a0b8eca7766"; private static final String three_ad = "n66a0b8eca7766";
private static ArrayList<ATInterstitial> adArrayList; private static ArrayList<ATInterstitial> 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) { public static void setCallback(ATInterstitial ad, Adcallback adcallback) {
ad.setAdListener(new ATInterstitialListener() { ad.setAdListener(new ATInterstitialListener() {
@Override @Override
@ -294,14 +303,18 @@ public class Mytools {
JSONArray jsonObject = loadJSONFromAsset(filename); JSONArray jsonObject = loadJSONFromAsset(filename);
for (int a = 0; a < jsonObject.length(); a++) { for (int a = 0; a < jsonObject.length(); a++) {
JSONObject list = jsonObject.getJSONObject(a); JSONObject list = jsonObject.getJSONObject(a);
String className = list.getString("className");
JSONArray classArray = list.getJSONArray("list"); JSONArray classArray = list.getJSONArray("list");
for (int i = 0; i < classArray.length(); i++) { for (int i = 0; i < classArray.length(); i++) {
JSONObject item = classArray.getJSONObject(i); JSONObject item = classArray.getJSONObject(i);
Mydata myData = new Mydata(); Mydata myData = new Mydata();
myData.setClassName(className);
myData.setDownloaded(false);
myData.setIslike(false);
myData.setPreview(item.getString("preview")); myData.setPreview(item.getString("preview"));
myData.setThumbnail(item.getString("thumb")); myData.setThumb(item.getString("thumb"));
myData.setResourceName(item.getString("title")); myData.setTitle(item.getString("title"));
myData.setUrl(item.getString("zipUrl")); myData.setZipUrl(item.getString("zipUrl"));
dataList.add(myData); dataList.add(myData);
} }

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/black" />
<corners
android:topLeftRadius="60dp"
android:topRightRadius="60dp" />
</shape>

View File

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="25dp"
android:height="24dp"
android:viewportWidth="25"
android:viewportHeight="24">
<path
android:pathData="M7.5,7L17.5,17"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="round"/>
<path
android:pathData="M7.5,17L17.5,7"
android:strokeLineJoin="round"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="round"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M512,926h-6c-6,0 -12,-3 -15,-9L143,569C92,518 62,449 62,374s30,-144 81,-195c51,-51 120,-81 195,-81 63,0 126,21 174,63 108,-90 270,-81 369,18 108,108 108,282 0,390L533,917c-6,6 -12,9 -21,9z"
android:fillColor="#ff0000"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M512,926h-6c-6,0 -12,-3 -15,-9L143,569C92,518 62,449 62,374s30,-144 81,-195c51,-51 120,-81 195,-81 63,0 126,21 174,63 108,-90 270,-81 369,18 108,108 108,282 0,390L533,917c-6,6 -12,9 -21,9z"
android:fillColor="#ffffff"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="@color/white"
android:pathData="M512,64C264.5,64 64,264.5 64,512s200.5,448 448,448 448,-200.5 448,-448S759.5,64 512,64zM512,917.3C288,917.3 106.7,736 106.7,512S288,106.7 512,106.7s405.3,181.3 405.3,405.3 -181.3,405.3 -405.3,405.3z" />
<path
android:fillColor="@color/white"
android:pathData="M627.2,622.9c-29.9,32 -70.4,49.1 -115.2,49.1 -42.7,0 -83.2,-17.1 -113.1,-46.9 -8.5,-8.5 -21.3,-8.5 -29.9,0 -8.5,8.5 -8.5,21.3 0,29.9 38.4,38.4 89.6,59.7 142.9,59.7 55.5,0 106.7,-21.3 145.1,-61.9 8.5,-8.5 8.5,-21.3 0,-29.9 -8.5,-8.5 -21.3,-8.5 -29.9,0z" />
<path
android:fillColor="@color/white"
android:pathData="M384,448m-42.7,0a42.7,42.7 0,1 0,85.3 0,42.7 42.7,0 1,0 -85.3,0Z" />
<path
android:fillColor="@color/white"
android:pathData="M640,448m-42.7,0a42.7,42.7 0,1 0,85.3 0,42.7 42.7,0 1,0 -85.3,0Z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M763.8,896c-47.1,0 -85.3,-38.2 -85.3,-85.3s38.2,-85.3 85.3,-85.3c47.1,0 85.3,38.2 85.3,85.3 0,47.1 -38.2,85.3 -85.3,85.3M329.9,558.8c-14.9,26.2 -42.6,43.6 -74.5,43.6 -47.1,0 -85.3,-38.2 -85.3,-85.3 0,-16.1 4.5,-31.2 12.2,-44 14.9,-24.8 42.1,-41.3 73.1,-41.3 47.1,0 85.3,38.2 85.3,85.3 0,15.3 -4,29.7 -11.1,42.1M763.8,128c47.1,0 85.3,38.2 85.3,85.3s-38.2,85.3 -85.3,85.3c-47.1,0 -85.3,-38.2 -85.3,-85.3 0,-47.1 38.2,-85.3 85.3,-85.3M763.8,682.7c-0,0 -0,0 -0.1,0 -39.2,0 -74.2,17.6 -97.6,45.4l-289.9,-167.1c4.9,-13.1 7.8,-28.2 7.8,-44.1 0,-0.1 0,-0.2 0,-0.3 0,-0.1 0,-0.2 0,-0.3 0,-15.8 -2.9,-31 -8.1,-44.9l295.5,-169.6c23.3,24.4 56,39.5 92.3,39.5 0,0 0,0 0.1,0 70.7,0 128,-57.3 128,-128 0,-70.7 -57.3,-128 -128,-128 -70.7,0 -128,57.3 -128,128 0,19 4.2,36.9 11.6,53.1l-292.3,168.7c-23.7,-28.8 -59.3,-47.1 -99.2,-47.1 -70.7,0 -128,57.3 -128,128 0,0.2 0,0.4 0,0.6 -0,0.1 -0,0.3 -0,0.5 0,70.7 57.3,128 128,128 39.9,0 75.5,-18.3 99,-46.9l289.4,166.8c-5.4,13.6 -8.5,29.3 -8.5,45.7 0,70.6 57.3,127.9 128,127.9 70.7,0 128,-57.3 128,-128 0,-70.7 -57.3,-128 -128,-128z"
android:fillColor="#ffffff"/>
</vector>

View File

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="256dp"
android:height="256dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:fillColor="#ffffff"
android:pathData="M512,1024C229.9,1024 0,794.1 0,512S229.9,0 512,0s512,229.9 512,512 -229.9,512 -512,512zM512,51.2c-254,0 -460.8,206.8 -460.8,460.8s206.8,460.8 460.8,460.8 460.8,-206.8 460.8,-460.8 -206.8,-460.8 -460.8,-460.8z" />
<path
android:fillColor="#ffffff"
android:pathData="M512,870.4c-28.2,0 -51.2,-23 -51.2,-51.2V409.6c0,-28.2 23,-51.2 51.2,-51.2s51.2,23 51.2,51.2v409.6c0,28.2 -23,51.2 -51.2,51.2z" />
<path
android:fillColor="#ffffff"
android:pathData="M512,256m-51.2,0a51.2,51.2 0,1 0,102.4 0,51.2 51.2,0 1,0 -102.4,0Z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M16.875,3C15.375,3 13.95,3.6 12.9,4.65L12,5.55L11.175,4.725C9,2.475 5.4,2.475 3.225,4.65L3.15,4.725C0.9,6.975 0.9,10.575 3.15,12.825L12,21.75L20.85,12.825C23.1,10.575 23.1,6.975 20.85,4.725C19.8,3.6 18.375,3 16.875,3Z"
android:fillColor="#ffffff"/>
</vector>

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M11.293,6.257L12,6.964L12.708,6.257L13.608,5.357C14.472,4.492 15.644,4 16.875,4C18.103,4 19.262,4.489 20.119,5.407L20.131,5.42L20.143,5.432C22.003,7.292 22.003,10.258 20.143,12.118L20.14,12.121L12,20.33L3.86,12.121L3.86,12.121L3.858,12.118C1.998,10.258 1.998,7.292 3.858,5.432L3.932,5.357C5.715,3.575 8.672,3.575 10.456,5.42L10.462,5.426L10.468,5.432L11.293,6.257Z"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
</vector>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<corners android:radius="8dp" />
</shape>

View File

@ -9,7 +9,7 @@
tools:context="com.exquisite.activity.PreviewActivity"> tools:context="com.exquisite.activity.PreviewActivity">
<LinearLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/detail_title" android:id="@+id/detail_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -25,7 +25,9 @@
<LinearLayout <LinearLayout
android:id="@+id/detail_back" android:id="@+id/detail_back"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -42,7 +44,19 @@
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="20sp" /> android:textSize="20sp" />
</LinearLayout> </LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/preview_islike"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="24dp"
android:background="@drawable/icon_like_uncheck"
app:layout_constraintBottom_toBottomOf="@id/detail_back"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/detail_back" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout <LinearLayout
android:id="@+id/detailcenter" android:id="@+id/detailcenter"
@ -167,14 +181,14 @@
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<ImageView <ImageView
android:id="@+id/step1_image" android:id="@+id/pre_down_image"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/icon_down" /> android:background="@drawable/icon_down" />
<TextView <TextView
android:id="@+id/step1_text" android:id="@+id/pre_down_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.exquisite.activity.ShowKeyboardActivity">
<TextView
android:id="@+id/showkey_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:text="@string/showkey_title"
android:textColor="@color/white"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/show_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:src="@drawable/icon_back"
app:layout_constraintBottom_toBottomOf="@id/showkey_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/showkey_title" />
<EditText
android:id="@+id/showkey_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:background="@drawable/showkeyboard_edit"
android:hint="@string/showkey_hint_text"
android:maxLines="1"
android:padding="16dp"
android:textColorHint="@color/tab_uncheck"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -57,10 +57,11 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/logo" /> app:layout_constraintTop_toBottomOf="@id/logo" />
<ProgressBar <com.exquisite.tools.CustomProgressBar
android:layout_width="wrap_content" android:id="@+id/splash_pg"
android:layout_height="wrap_content" android:layout_width="300dp"
android:layout_marginTop="20dp" android:layout_height="20dp"
android:layout_marginTop="80dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text" /> app:layout_constraintTop_toBottomOf="@id/text" />

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_web"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.exquisite.activity.WebActivity">
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/dialog_bg">
<ImageView
android:id="@+id/setting_cancel"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="24dp"
android:src="@drawable/icon_delete"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/setting_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:gravity="center"
android:text="@string/setting_text"
android:textColor="@color/white"
android:textSize="29sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/setting_cancel" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/step1"
android:layout_width="match_parent"
android:layout_height="54dp"
android:layout_marginStart="24dp"
android:layout_marginTop="50dp"
android:layout_marginEnd="24dp"
android:background="@drawable/step_selector"
android:paddingStart="12dp"
android:paddingTop="10dp"
android:paddingEnd="12dp"
android:paddingBottom="10dp"
app:layout_constraintTop_toBottomOf="@id/setting_hint">
<ImageView
android:id="@+id/step1_image"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="12dp"
android:background="@drawable/icon_check"
app:layout_constraintBottom_toBottomOf="@id/step1_text"
app:layout_constraintStart_toEndOf="@id/step1_text"
app:layout_constraintTop_toTopOf="@id/step1_text" />
<TextView
android:id="@+id/step1_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/step1"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/step2"
android:layout_width="match_parent"
android:layout_height="54dp"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="60dp"
android:background="@drawable/step_selector"
android:paddingStart="12dp"
android:paddingTop="10dp"
android:paddingEnd="12dp"
android:paddingBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/step1">
<ImageView
android:id="@+id/step2_image"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="12dp"
android:background="@drawable/icon_check"
app:layout_constraintBottom_toBottomOf="@id/step2_text"
app:layout_constraintStart_toEndOf="@id/step2_text"
app:layout_constraintTop_toTopOf="@id/step2_text" />
<TextView
android:id="@+id/step2_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/step2"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,50 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.exquisite.fragment.LikeFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/like_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/favorite_title"
android:textColor="@color/white"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/nolike_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/nolike_tips"
android:textColor="@color/tab_uncheck"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/like_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/like_rv"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="17dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/like_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/background" android:background="@color/background"
tools:context="com.exquisite.fragment.PageOneFragment"> tools:context="com.exquisite.fragment.MainFragment">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/main" android:id="@+id/main"

View File

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/background" android:background="@color/background"
tools:context="com.exquisite.fragment.PageTwoFragment"> tools:context="com.exquisite.fragment.SettingFragment">
<LinearLayout <LinearLayout
@ -90,52 +90,6 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/rate_us"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingTop="10dp"
android:paddingEnd="16dp"
android:paddingBottom="10dp">
<ImageView
android:id="@+id/rateus"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/rateus"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="@string/rate_us"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@id/rateus"
app:layout_constraintStart_toEndOf="@id/rateus"
app:layout_constraintTop_toTopOf="@id/rateus" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:background="@drawable/icon"
app:layout_constraintBottom_toBottomOf="@id/rateus"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/rateus" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/privacy" android:id="@+id/privacy"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -179,6 +133,140 @@
app:layout_constraintTop_toTopOf="@id/img_privacy" /> app:layout_constraintTop_toTopOf="@id/img_privacy" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/rate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingTop="10dp"
android:paddingEnd="16dp"
android:paddingBottom="10dp">
<ImageView
android:id="@+id/img_rate"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/icon_rate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="@string/rate_us"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@id/img_rate"
app:layout_constraintStart_toEndOf="@id/img_rate"
app:layout_constraintTop_toTopOf="@id/img_rate" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:background="@drawable/icon"
app:layout_constraintBottom_toBottomOf="@id/img_rate"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/img_rate" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/share"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingTop="10dp"
android:paddingEnd="16dp"
android:paddingBottom="10dp">
<ImageView
android:id="@+id/img_share"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/icon_share"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="@string/Share"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@id/img_share"
app:layout_constraintStart_toEndOf="@id/img_share"
app:layout_constraintTop_toTopOf="@id/img_share" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:background="@drawable/icon"
app:layout_constraintBottom_toBottomOf="@id/img_share"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/img_share" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/version"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingTop="10dp"
android:paddingEnd="16dp"
android:paddingBottom="10dp">
<ImageView
android:id="@+id/img_version"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/icon_version"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="@string/Version"
android:textColor="@color/white"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@id/img_version"
app:layout_constraintStart_toEndOf="@id/img_version"
app:layout_constraintTop_toTopOf="@id/img_version" />
<TextView
android:id="@+id/version_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="2dp"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@id/img_version"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/img_version" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -5,7 +5,7 @@
android:id="@+id/constraint_layout_id" android:id="@+id/constraint_layout_id"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:context="com.exquisite.fragment.PageOneFragment"> tools:context="com.exquisite.fragment.MainFragment">
<ImageView <ImageView
android:id="@+id/image_view_thumb_id" android:id="@+id/image_view_thumb_id"
@ -16,4 +16,10 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="100dp"
app:layout_constraintTop_toBottomOf="@id/image_view_thumb_id" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toast_dialog_cons"
android:layout_width="305dp"
android:layout_height="395dp"
android:background="@mipmap/toast_image_bg"
android:padding="24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/toast_dialog_image"
android:layout_width="280dp"
android:layout_height="205dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:layout_marginTop="20dp"
android:id="@+id/toast_dialog_cancel"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/icon_delete"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toast_dialog_cons" />
</androidx.constraintlayout.widget.ConstraintLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 KiB

View File

@ -4,10 +4,12 @@
<string name="keyboardsettings">Keyboard Settings</string> <string name="keyboardsettings">Keyboard Settings</string>
<string name="rate_us">Rate us</string> <string name="rate_us">Rate us</string>
<string name="privacy">Privacy</string> <string name="privacy">Privacy</string>
<string name="Share">Share</string>
<string name="Version">Version</string>
<string name="for_you">For You</string> <string name="for_you">For You</string>
<string name="view_all">View all</string> <string name="view_all">View all</string>
<string name="all">All</string> <string name="all">All</string>
<string name="setting_text">Activate PassionCool Keyboard to \n enable MORE functions!</string> <string name="setting_text">Keyboard \n requires permission to use</string>
<string name="step1">Step 1:Select</string> <string name="step1">Step 1:Select</string>
<string name="step2">Step 2:Enabled</string> <string name="step2">Step 2:Enabled</string>
<string name="hello_blank_fragment">Hello blank fragment</string> <string name="hello_blank_fragment">Hello blank fragment</string>
@ -21,6 +23,7 @@
<string name="text_step_successful">Successfully set up \n Now you can download keyboard</string> <string name="text_step_successful">Successfully set up \n Now you can download keyboard</string>
<string name="text_step_failed">Setting failed ! Please try again</string> <string name="text_step_failed">Setting failed ! Please try again</string>
<string name="text_download_failed">Download failed</string> <string name="text_download_failed">Download failed</string>
<string name="text_zip_failed">Zip failed</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="nofiles">The keyboard is not available</string> <string name="nofiles">The keyboard is not available</string>
<string name="text_tips">Please enter the content</string> <string name="text_tips">Please enter the content</string>
@ -28,4 +31,12 @@
<string name="search">Search</string> <string name="search">Search</string>
<string name="facebook_app_id">489845093456531</string> <string name="facebook_app_id">489845093456531</string>
<string name="facebook_client_token">f4f2d45a7ca326adf493b7dd29a188be</string> <string name="facebook_client_token">f4f2d45a7ca326adf493b7dd29a188be</string>
<string name="share_title">Here is a Keyboard Skins</string>
<string name="showkey_title">Application results</string>
<string name="showkey_hint_text">Enter text to see the effect</string>
<string name="download_apply">Apply</string>
<string name="toast_apply_text">Apply Now</string>
<string name="download_text_using">In Use</string>
<string name="favorite_title">My Favorite</string>
<string name="nolike_tips">No favorites added yet</string>
</resources> </resources>

View File

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins { plugins {
id("com.android.application") version "8.1.3" apply false 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.gms.google-services") version "4.3.15" apply false
id ("com.google.firebase.crashlytics") version "2.9.2" apply false id ("com.google.firebase.crashlytics") version "2.9.2" apply false
} }

View File

@ -14,7 +14,7 @@ dependencyResolutionManagement {
maven("https://jitpack.io") maven("https://jitpack.io")
maven("https://jfrog.anythinktech.com/artifactory/overseas_sdk") maven("https://jfrog.anythinktech.com/artifactory/overseas_sdk")
maven("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") 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")} maven{url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea")}
} }
} }