V1.0.0(1)
18
.gitignore
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
.idea/
|
||||
app/release/lockapp_v1.0.0(1)_07_26_16_40-release.apk
|
||||
app/release/lockapp_v1.0.0(1)_07_26_16_57-release.aab
|
||||
1
app/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
||||
62
app/build.gradle.kts
Normal file
@ -0,0 +1,62 @@
|
||||
import java.util.Date
|
||||
import java.text.SimpleDateFormat
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
id("kotlin-kapt")
|
||||
}
|
||||
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
|
||||
android {
|
||||
namespace = "com.tool.applockpro"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "com.tool.lockapp"
|
||||
minSdk = 23
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "1.0.0"
|
||||
setProperty("archivesBaseName", "lockapp_v" + versionName + "(${versionCode})_$timestamp")
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isShrinkResources =true
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation("androidx.appcompat:appcompat:1.7.0")
|
||||
implementation("com.google.android.material:material:1.12.0")
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.2.1")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
|
||||
|
||||
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("androidx.room:room-ktx:$room_version")
|
||||
implementation("androidx.room:room-rxjava2:$room_version")
|
||||
implementation("androidx.room:room-rxjava3:$room_version")
|
||||
implementation("androidx.room:room-guava:$room_version")
|
||||
testImplementation("androidx.room:room-testing:$room_version")
|
||||
implementation("androidx.room:room-paging:$room_version")
|
||||
|
||||
}
|
||||
BIN
app/lockapp.jks
Normal file
BIN
app/lockapptest.jks
Normal file
34
app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
-keepclassmembers class com.tool.applockpro.ApplockSkin{
|
||||
public static final java.lang.String DB_Name;
|
||||
public static final int DB_Version;
|
||||
}
|
||||
-keepclassmembers class *{
|
||||
@androidx.room.Query <methods>;
|
||||
}
|
||||
|
||||
-keep class com.tool.applockpro.data.MyDataBase { *; }
|
||||
-keep class com.tool.applockpro.data.Mydao { *; }
|
||||
-keep class com.tool.applockpro.data.Mydata { *; }
|
||||
-keep class com.omicronapplications.** { *; }
|
||||
-keep class net.sf.sevenzipjbinding.** { *; }
|
||||
20
app/release/output-metadata.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "APK",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.tool.lockapp",
|
||||
"variantName": "release",
|
||||
"elements": [
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"attributes": [],
|
||||
"versionCode": 1,
|
||||
"versionName": "1.0.0",
|
||||
"outputFile": "lockapp_v1.0.0(1)_07_26_16_40-release.apk"
|
||||
}
|
||||
],
|
||||
"elementType": "File"
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.tool.applockpro;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.tool.applockpro", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
57
app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission
|
||||
android:name="android.permission.PACKAGE_USAGE_STATS"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
</intent>
|
||||
</queries>
|
||||
|
||||
<application
|
||||
android:name=".ApplockSkin"
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/icon_logo"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/icon_logo"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".activity.SearchActivity"
|
||||
android:exported="false"
|
||||
android:windowSoftInputMode="adjustPan" />
|
||||
<activity
|
||||
android:name=".activity.SettingActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".activity.PermissionActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<service
|
||||
android:name=".tool.Myservice"
|
||||
tools:ignore="Instantiatable" />
|
||||
|
||||
<activity
|
||||
android:name=".activity.SetPWDActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".activity.MainActivity"
|
||||
android:exported="true" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
81
app/src/main/java/com/tool/applockpro/ApplockSkin.java
Normal file
@ -0,0 +1,81 @@
|
||||
package com.tool.applockpro;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.Log;
|
||||
|
||||
import com.tool.applockpro.data.MyDataBase;
|
||||
import com.tool.applockpro.data.Mydata;
|
||||
import com.tool.applockpro.tool.Mytools;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ApplockSkin extends Application {
|
||||
public static final String DB_Name = "lock_database";
|
||||
public static final String Table_Name = "lock_table";
|
||||
public static final int DB_Version = 1;
|
||||
private static Context context;
|
||||
private static final String PREFS_NAME = "MyPrefs";
|
||||
private static final String KEY_PWD = "key_pwd";
|
||||
public static SharedPreferences sp;
|
||||
public static SharedPreferences.Editor et;
|
||||
public static final int checkpwd_0 = 0;
|
||||
public static List<Mydata> system = new ArrayList<>();
|
||||
public static List<Mydata> third = new ArrayList<>();
|
||||
public static List<Mydata> lock = new ArrayList<>();
|
||||
|
||||
public static List<Mydata> getSystem() {
|
||||
return system;
|
||||
}
|
||||
|
||||
public static List<Mydata> getThird() {
|
||||
return third;
|
||||
}
|
||||
|
||||
public static List<Mydata> getLock() {
|
||||
return lock;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
context = getApplicationContext();
|
||||
Mytools.getapplist(this);
|
||||
|
||||
|
||||
sp = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
|
||||
et = sp.edit();
|
||||
|
||||
initData();
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
|
||||
// Mytools.runIO(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// system = MyDataBase.getINSTANCE().mydao().getappissystem(true);
|
||||
// third = MyDataBase.getINSTANCE().mydao().getappissystem(false);
|
||||
// lock = MyDataBase.getINSTANCE().mydao().getlockapp(true);
|
||||
//
|
||||
// }
|
||||
// });
|
||||
|
||||
}
|
||||
|
||||
public static void savePWD(String pwd) {
|
||||
et.putString(KEY_PWD, pwd);
|
||||
et.apply();
|
||||
// Log.e("zzj", "--------savepwd----------" + pwd);
|
||||
}
|
||||
|
||||
public static String getPWD() {
|
||||
return sp.getString(KEY_PWD, "");
|
||||
}
|
||||
|
||||
public static Context getContext() {
|
||||
return context;
|
||||
}
|
||||
}
|
||||
151
app/src/main/java/com/tool/applockpro/activity/MainActivity.java
Normal file
@ -0,0 +1,151 @@
|
||||
package com.tool.applockpro.activity;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.adapter.PageAdapter;
|
||||
import com.tool.applockpro.databinding.ActivityMainBinding;
|
||||
import com.tool.applockpro.fragment.AllFragment;
|
||||
import com.tool.applockpro.tool.Myservice;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
ActivityMainBinding binding;
|
||||
private String[] listtext = {"System", "Third", "Lock"};
|
||||
private List<AllFragment> list = new ArrayList<>();
|
||||
private PageAdapter adapter;
|
||||
private TypedArray imageArray;
|
||||
private ImageView tabimg;
|
||||
private TextView tabtext;
|
||||
private ConstraintLayout imagebg;
|
||||
|
||||
|
||||
@SuppressLint("MissingInflatedId")
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityMainBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_main), (v, insets) -> {
|
||||
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
||||
return insets;
|
||||
});
|
||||
startService(new Intent(this, Myservice.class));
|
||||
initTab();
|
||||
|
||||
binding.mainSeeting.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(MainActivity.this, SettingActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
binding.mainSearch.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initTab() {
|
||||
|
||||
for (String s : listtext) {
|
||||
list.add(AllFragment.newInstance(s));
|
||||
}
|
||||
adapter = new PageAdapter(getSupportFragmentManager(), list);
|
||||
imageArray = getResources().obtainTypedArray(R.array.drawable_images);
|
||||
binding.mainViewpager.setAdapter(adapter);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
TabLayout.Tab tab = binding.mainTabLayout.newTab();
|
||||
binding.mainTabLayout.addTab(tab);
|
||||
View customView = LayoutInflater.from(this).inflate(R.layout.item_tablayout, null);
|
||||
tabimg = customView.findViewById(R.id.tab_image);
|
||||
tabtext = customView.findViewById(R.id.tab_text);
|
||||
imagebg = customView.findViewById(R.id.tab_cons);
|
||||
tabtext.setText(listtext[i]);
|
||||
Drawable drawable = imageArray.getDrawable(i);
|
||||
tabimg.setBackground(drawable);
|
||||
tab.setCustomView(customView);
|
||||
final int finalI = i;
|
||||
tab.view.setOnClickListener(v -> {
|
||||
binding.mainViewpager.setCurrentItem(finalI);
|
||||
});
|
||||
}
|
||||
// binding.mainViewpager.setOffscreenPageLimit(1);
|
||||
binding.mainViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
setTabIcons(position);
|
||||
if (position == 1) {
|
||||
AllFragment fragment = list.get(1);
|
||||
fragment.refesh();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setTabIcons(int position) {
|
||||
|
||||
for (int i = 0; i < binding.mainTabLayout.getTabCount(); i++) {
|
||||
TabLayout.Tab tab = binding.mainTabLayout.getTabAt(i);
|
||||
if (tab != null) {
|
||||
View customView = tab.getCustomView();
|
||||
if (i == position) {
|
||||
customView.findViewById(R.id.custom_tablayout).setSelected(true);
|
||||
customView.findViewById(R.id.tab_cons).setSelected(true);
|
||||
customView.findViewById(R.id.tab_text).setSelected(true);
|
||||
} else {
|
||||
customView.findViewById(R.id.custom_tablayout).setSelected(false);
|
||||
customView.findViewById(R.id.tab_cons).setSelected(false);
|
||||
customView.findViewById(R.id.tab_text).setSelected(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (imageArray != null) {
|
||||
imageArray.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,77 @@
|
||||
package com.tool.applockpro.activity;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.view.View;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.databinding.ActivityPermissionBinding;
|
||||
import com.tool.applockpro.tool.Myservice;
|
||||
import com.tool.applockpro.tool.Mytools;
|
||||
|
||||
public class PermissionActivity extends AppCompatActivity {
|
||||
ActivityPermissionBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityPermissionBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_Permission), (v, insets) -> {
|
||||
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
||||
return insets;
|
||||
});
|
||||
|
||||
|
||||
|
||||
binding.step2.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent usageAccessIntent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
|
||||
startActivity(usageAccessIntent);
|
||||
}
|
||||
});
|
||||
binding.step1.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent overlayIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
|
||||
startActivity(overlayIntent);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void starMainactivity() {
|
||||
if (Mytools.hasUsagePermission(this) && Mytools.hasOverlayPermission(this)) {
|
||||
Intent intent = new Intent(PermissionActivity.this, SetPWDActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
binding.step1.setSelected(Mytools.hasOverlayPermission(this));
|
||||
binding.step2.setSelected(Mytools.hasUsagePermission(this));
|
||||
if (ApplockSkin.getPWD().isEmpty()) {
|
||||
starMainactivity();
|
||||
} else {
|
||||
Intent intent = new Intent(PermissionActivity.this, MainActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,121 @@
|
||||
package com.tool.applockpro.activity;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.adapter.AppAdapter;
|
||||
import com.tool.applockpro.data.MyDataBase;
|
||||
import com.tool.applockpro.data.Mydata;
|
||||
import com.tool.applockpro.databinding.ActivitySearchBinding;
|
||||
import com.tool.applockpro.tool.Mytools;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SearchActivity extends AppCompatActivity {
|
||||
ActivitySearchBinding binding;
|
||||
private List<Mydata> searchdata = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivitySearchBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_search), (v, insets) -> {
|
||||
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
||||
return insets;
|
||||
});
|
||||
|
||||
initData();
|
||||
|
||||
initEvent();
|
||||
}
|
||||
|
||||
private void initEvent() {
|
||||
binding.cancel.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
binding.search.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
search(binding.searchEdit.getText().toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void search(String text) {
|
||||
if (TextUtils.isEmpty(text)) {
|
||||
binding.searchTips.setText(R.string.text_tips);
|
||||
binding.searchTips.setVisibility(View.VISIBLE);
|
||||
binding.searchRv.setVisibility(View.GONE);
|
||||
} else {
|
||||
|
||||
binding.searchEdit.setText(text);
|
||||
binding.searchTips.setVisibility(View.GONE);
|
||||
binding.searchRv.setVisibility(View.VISIBLE);
|
||||
|
||||
Mytools.runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
searchdata = MyDataBase.getINSTANCE().mydao().getSearchDatas(text);
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (searchdata.isEmpty()) {
|
||||
binding.searchTips.setText(R.string.text_null);
|
||||
binding.searchTips.setVisibility(View.VISIBLE);
|
||||
binding.searchRv.setVisibility(View.GONE);
|
||||
} else {
|
||||
binding.searchTips.setVisibility(View.GONE);
|
||||
binding.searchRv.setVisibility(View.VISIBLE);
|
||||
binding.searchRv.setAdapter(new AppAdapter(SearchActivity.this, searchdata));
|
||||
binding.searchRv.setLayoutManager(new LinearLayoutManager(SearchActivity.this));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
hideKeyView();
|
||||
}
|
||||
|
||||
private void initData() {
|
||||
|
||||
// binding.searchTips.setVisibility(View.GONE);
|
||||
// binding.searchEdit.requestFocus();
|
||||
// InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
// imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void hideKeyView() {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(binding.searchEdit.getWindowToken(), 0);
|
||||
binding.searchEdit.clearFocus();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
hideKeyView();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,138 @@
|
||||
package com.tool.applockpro.activity;
|
||||
|
||||
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.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.databinding.ActivitySetPwdactivityBinding;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class SetPWDActivity extends AppCompatActivity {
|
||||
ActivitySetPwdactivityBinding binding;
|
||||
private List<EditText> etlis = new ArrayList<>();
|
||||
private int chewkpwd;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivitySetPwdactivityBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_setpwd), (v, insets) -> {
|
||||
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
||||
return insets;
|
||||
});
|
||||
|
||||
|
||||
chewkpwd = getIntent().getIntExtra("1", 0);
|
||||
|
||||
// if (chewkpwd == 0) {
|
||||
// binding.setpwdBack.setVisibility(View.GONE);
|
||||
// } else {
|
||||
// binding.setpwdBack.setVisibility(View.VISIBLE);
|
||||
// }
|
||||
|
||||
etlis.add(binding.et1);
|
||||
etlis.add(binding.et2);
|
||||
etlis.add(binding.et3);
|
||||
etlis.add(binding.et4);
|
||||
setupEditTextListeners();
|
||||
initEvent();
|
||||
}
|
||||
|
||||
private void initEvent() {
|
||||
|
||||
binding.btnContinue.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append(binding.et1.getText().toString());
|
||||
stringBuilder.append(binding.et2.getText().toString());
|
||||
stringBuilder.append(binding.et3.getText().toString());
|
||||
stringBuilder.append(binding.et4.getText().toString());
|
||||
if (stringBuilder.length() == 4) {
|
||||
ApplockSkin.savePWD(stringBuilder.toString());
|
||||
if (chewkpwd == ApplockSkin.checkpwd_0) {
|
||||
Intent intent = new Intent(SetPWDActivity.this, MainActivity.class);
|
||||
Toast.makeText(SetPWDActivity.this, getString(R.string.setlock_tips), Toast.LENGTH_SHORT).show();
|
||||
startActivity(intent);
|
||||
finish();
|
||||
} else {
|
||||
// Intent intent = new Intent(SetPWDActivity.this, MainActivity.class);
|
||||
//
|
||||
// startActivity(intent);
|
||||
Toast.makeText(SetPWDActivity.this, getString(R.string.changelock_tips), Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
} else {
|
||||
Toast.makeText(SetPWDActivity.this, getString(R.string.text_hint), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void setupEditTextListeners() {
|
||||
for (int i = 0; i < etlis.size(); i++) {
|
||||
EditText currentEditText = etlis.get(i);
|
||||
EditText nextEditText = (i < etlis.size() - 1) ? etlis.get(i + 1) : null;
|
||||
EditText previousEditText = (i > 0) ? etlis.get(i - 1) : null;
|
||||
int finalI = i;
|
||||
currentEditText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
|
||||
if (s.length() == 1 && nextEditText != null) {
|
||||
nextEditText.requestFocus();
|
||||
} else if (s.length() == 0 && previousEditText != null) {
|
||||
previousEditText.requestFocus();
|
||||
} else if (finalI == 3 || finalI == 0) {
|
||||
|
||||
currentEditText.clearFocus();
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(currentEditText.getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
});
|
||||
currentEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
if (currentEditText.getText().length() > 0) {
|
||||
currentEditText.setBackgroundResource(R.drawable.stepwd_check);
|
||||
} else {
|
||||
currentEditText.setBackgroundResource(R.drawable.stepwd_uncheck);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
package com.tool.applockpro.activity;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.databinding.ActivitySettingBinding;
|
||||
|
||||
|
||||
public class SettingActivity extends AppCompatActivity {
|
||||
ActivitySettingBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivitySettingBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_setting), (v, insets) -> {
|
||||
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
||||
return insets;
|
||||
});
|
||||
|
||||
binding.changepwd.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(SettingActivity.this, SetPWDActivity.class);
|
||||
intent.putExtra("1", 1);
|
||||
startActivity(intent);
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
binding.privacy.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse("https://sites.google.com/view/privacy-policy-web-page"));
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
binding.cancel.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
184
app/src/main/java/com/tool/applockpro/adapter/AppAdapter.java
Normal file
@ -0,0 +1,184 @@
|
||||
package com.tool.applockpro.adapter;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.TranslateAnimation;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.data.MyDataBase;
|
||||
import com.tool.applockpro.data.Mydata;
|
||||
import com.tool.applockpro.tool.Mytools;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
|
||||
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.AppVH> {
|
||||
private Context mycontext;
|
||||
private List<Mydata> mydataList = new ArrayList<>();
|
||||
private PackageManager packageManager;
|
||||
private boolean mtost = true;
|
||||
public static SharedPreferences keysp;
|
||||
public static SharedPreferences.Editor keyeditor;
|
||||
private int keyid;
|
||||
private ObjectAnimator animator1, animator2;
|
||||
private Activity activity;
|
||||
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
public AppAdapter(Context context, List<Mydata> list) {
|
||||
mydataList = list;
|
||||
mycontext = context;
|
||||
packageManager = context.getPackageManager();
|
||||
keysp = mycontext.getSharedPreferences("key", Context.MODE_PRIVATE);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public AppVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(mycontext).inflate(R.layout.item_app, parent, false);
|
||||
return new AppVH(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull AppVH holder, @SuppressLint("RecyclerView") int position) {
|
||||
Mydata mydata = mydataList.get(position);
|
||||
String appname = mydata.getAppName();
|
||||
|
||||
|
||||
boolean lock = mydata.isLock();
|
||||
// Log.e("zzj", mydata.getAppName() + "------mydata.isLock-----" + lock);
|
||||
holder.switchCompat.setSelected(lock);
|
||||
holder.lock.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
keyid = getkey();
|
||||
keyid++;
|
||||
keyeditor = keysp.edit();
|
||||
if (keyid % 5 == 0) {
|
||||
keyeditor.putInt("key", keyid);
|
||||
keyeditor.apply();
|
||||
// Log.e("zzj", String.valueOf(keyid));
|
||||
if (holder.switchCompat.isSelected()) {
|
||||
holder.switchCompat.setSelected(false);
|
||||
} else {
|
||||
holder.switchCompat.setSelected(true);
|
||||
}
|
||||
Mytools.runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mydata.setLock(holder.switchCompat.isSelected());
|
||||
MyDataBase.getINSTANCE().mydao().update(mydata);
|
||||
|
||||
}
|
||||
});
|
||||
String s;
|
||||
if (holder.switchCompat.isSelected()) {
|
||||
s = String.format(mycontext.getString(R.string.text_locked), appname);
|
||||
} else {
|
||||
s = String.format(mycontext.getString(R.string.text_unlocked), appname);
|
||||
}
|
||||
|
||||
Toast.makeText(mycontext, s, Toast.LENGTH_SHORT).show();
|
||||
} else {
|
||||
keyeditor.putInt("key", keyid);
|
||||
keyeditor.apply();
|
||||
if (holder.switchCompat.isSelected()) {
|
||||
holder.switchCompat.setSelected(false);
|
||||
} else {
|
||||
holder.switchCompat.setSelected(true);
|
||||
}
|
||||
Mytools.runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mydata.setLock(holder.switchCompat.isSelected());
|
||||
MyDataBase.getINSTANCE().mydao().update(mydata);
|
||||
|
||||
}
|
||||
});
|
||||
String s;
|
||||
if (holder.switchCompat.isSelected()) {
|
||||
s = String.format(mycontext.getString(R.string.text_locked), appname);
|
||||
} else {
|
||||
s = String.format(mycontext.getString(R.string.text_unlocked), appname);
|
||||
}
|
||||
|
||||
|
||||
Toast.makeText(mycontext, s, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
holder.textView.setText(mydata.getAppName());
|
||||
try {
|
||||
Drawable appLogo = getLogo(mydata.getPackageName());
|
||||
holder.imageView.setImageDrawable(appLogo);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static int getkey() {
|
||||
return keysp.getInt("key", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mydataList.size();
|
||||
}
|
||||
|
||||
private Drawable getLogo(String packageName) throws PackageManager.NameNotFoundException {
|
||||
ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
|
||||
return packageManager.getApplicationIcon(appInfo);
|
||||
}
|
||||
|
||||
public static class AppVH extends RecyclerView.ViewHolder {
|
||||
|
||||
private ImageView imageView;
|
||||
private TextView textView;
|
||||
private AppCompatImageView switchCompat;
|
||||
private ConstraintLayout lock;
|
||||
|
||||
public AppVH(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
imageView = itemView.findViewById(R.id.logo);
|
||||
textView = itemView.findViewById(R.id.name);
|
||||
switchCompat = itemView.findViewById(R.id.app_switch);
|
||||
lock = itemView.findViewById(R.id.lock);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,95 @@
|
||||
package com.tool.applockpro.adapter;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.tool.Staticvalue;
|
||||
|
||||
public class NumberAdapter extends RecyclerView.Adapter<NumberAdapter.NumberVH> {
|
||||
private String[] numberlist = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "-0", "0", "-1"};
|
||||
private StringBuilder currentNumber = new StringBuilder();
|
||||
private PinAdapter mpinAdapter;
|
||||
private Context mcontext;
|
||||
|
||||
public NumberAdapter(Context context, PinAdapter pinAdapter) {
|
||||
mcontext = context;
|
||||
mpinAdapter = pinAdapter;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public NumberVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.number_item, null);
|
||||
return new NumberVH(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull NumberVH holder, @SuppressLint("RecyclerView") int position) {
|
||||
|
||||
if (position == 9) {
|
||||
holder.getImage().setVisibility(View.GONE);
|
||||
holder.getNumbertext().setVisibility(View.GONE);
|
||||
} else if (position == 11) {
|
||||
holder.getImage().setVisibility(View.VISIBLE);
|
||||
// holder.getNumbertext().setVisibility(View.GONE);
|
||||
} else {
|
||||
holder.getImage().setVisibility(View.GONE);
|
||||
holder.getNumbertext().setText(numberlist[position]);
|
||||
}
|
||||
holder.getNumbertext().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (position == 11) {
|
||||
if (currentNumber.length() > 0) {
|
||||
currentNumber.deleteCharAt(currentNumber.length() - 1);
|
||||
mpinAdapter.updateItem(currentNumber.toString());
|
||||
}
|
||||
} else {
|
||||
if (currentNumber.length() < 4) {
|
||||
currentNumber.append(numberlist[position]);
|
||||
}
|
||||
}
|
||||
mpinAdapter.updateItem(currentNumber.toString());
|
||||
if (currentNumber.length() == 4) {
|
||||
Staticvalue.KEY_NUMBER = currentNumber.toString();
|
||||
currentNumber.setLength(0);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return numberlist.length;
|
||||
}
|
||||
|
||||
public class NumberVH extends RecyclerView.ViewHolder {
|
||||
private TextView numbertext;
|
||||
private ConstraintLayout image;
|
||||
|
||||
public ConstraintLayout getImage() {
|
||||
return image;
|
||||
}
|
||||
|
||||
public NumberVH(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
numbertext = itemView.findViewById(R.id.text_number);
|
||||
image = itemView.findViewById(R.id.pin_cons);
|
||||
}
|
||||
|
||||
public TextView getNumbertext() {
|
||||
return numbertext;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package com.tool.applockpro.adapter;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
|
||||
import com.tool.applockpro.fragment.AllFragment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PageAdapter extends FragmentStatePagerAdapter {
|
||||
private final List<AllFragment> fragmentList;
|
||||
|
||||
public PageAdapter(@NonNull FragmentManager fm, List<AllFragment> list) {
|
||||
super(fm);
|
||||
fragmentList = list;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment getItem(int position) {
|
||||
return fragmentList.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return fragmentList.size();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,64 @@
|
||||
package com.tool.applockpro.adapter;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tool.applockpro.R;
|
||||
|
||||
|
||||
public class PinAdapter extends RecyclerView.Adapter<PinAdapter.NumberVH> {
|
||||
|
||||
private String mPin = "";
|
||||
private Context mContext;
|
||||
|
||||
public PinAdapter(Context context) {
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public NumberVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.number_pin, null);
|
||||
return new NumberVH(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull NumberVH holder, @SuppressLint("RecyclerView") int position) {
|
||||
|
||||
if (position < mPin.length()) {
|
||||
holder.getImageView().setSelected(true);
|
||||
} else {
|
||||
holder.getImageView().setSelected(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 4;
|
||||
}
|
||||
|
||||
public void updateItem(String pin) {
|
||||
mPin = pin;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public class NumberVH extends RecyclerView.ViewHolder {
|
||||
private ImageView imageView;
|
||||
|
||||
public NumberVH(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
imageView = itemView.findViewById(R.id.im_pin);
|
||||
}
|
||||
|
||||
public ImageView getImageView() {
|
||||
return imageView;
|
||||
}
|
||||
}
|
||||
}
|
||||
24
app/src/main/java/com/tool/applockpro/data/MyDataBase.java
Normal file
@ -0,0 +1,24 @@
|
||||
package com.tool.applockpro.data;
|
||||
|
||||
import androidx.room.Database;
|
||||
import androidx.room.Room;
|
||||
import androidx.room.RoomDatabase;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
|
||||
@Database(entities = {Mydata.class}, version = ApplockSkin.DB_Version, exportSchema = false)
|
||||
public abstract class MyDataBase extends RoomDatabase {
|
||||
|
||||
public abstract Mydao mydao();
|
||||
|
||||
public static MyDataBase INSTANCE;
|
||||
|
||||
public static MyDataBase getINSTANCE() {
|
||||
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = Room.databaseBuilder(ApplockSkin.getContext(), MyDataBase.class, ApplockSkin.DB_Name).build();
|
||||
}
|
||||
|
||||
return INSTANCE;
|
||||
}
|
||||
}
|
||||
44
app/src/main/java/com/tool/applockpro/data/Mydao.java
Normal file
@ -0,0 +1,44 @@
|
||||
package com.tool.applockpro.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 {
|
||||
@Insert
|
||||
void insertAll(List<Mydata> myDataList);
|
||||
|
||||
@Query("SELECT * FROM lock_table WHERE isLock = :islock")
|
||||
List<Mydata> getlockapp(boolean islock);
|
||||
|
||||
@Query("SELECT * FROM lock_table WHERE system = :issystem")
|
||||
List<Mydata> getappissystem(boolean issystem);
|
||||
|
||||
@Query("SELECT * FROM lock_table WHERE packageName = :packagename")
|
||||
Mydata getappislock(String packagename);
|
||||
|
||||
@Query("SELECT * FROM lock_table WHERE appName LIKE '%' || :appName || '%'")
|
||||
LiveData<List<Mydata>> getSearchData(String appName);
|
||||
@Query("SELECT * FROM lock_table WHERE appName LIKE '%' || :appName || '%'")
|
||||
List<Mydata> getSearchDatas(String appName);
|
||||
@Query("SELECT * FROM lock_table ")
|
||||
List<Mydata> getAllapp();
|
||||
|
||||
@Update
|
||||
void update(Mydata myData);
|
||||
|
||||
@Query("SELECT * FROM lock_table WHERE isLock = :islock")
|
||||
LiveData<List<Mydata>> getLockApps(boolean islock);
|
||||
|
||||
@Query("SELECT * FROM lock_table WHERE system = :issystem")
|
||||
LiveData<List<Mydata>> getAppsBySystem(boolean issystem);
|
||||
|
||||
@Query("SELECT * FROM lock_table")
|
||||
LiveData<List<Mydata>> getAllApps();
|
||||
|
||||
}
|
||||
53
app/src/main/java/com/tool/applockpro/data/Mydata.java
Normal file
@ -0,0 +1,53 @@
|
||||
package com.tool.applockpro.data;
|
||||
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.PrimaryKey;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
|
||||
@Entity(tableName = ApplockSkin.Table_Name)
|
||||
public class Mydata {
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
public int id;
|
||||
private String packageName;
|
||||
|
||||
private String appName;
|
||||
|
||||
private boolean isLock = false;
|
||||
|
||||
private boolean system = false;
|
||||
|
||||
public boolean isSystem() {
|
||||
return system;
|
||||
}
|
||||
|
||||
public void setSystem(boolean system) {
|
||||
this.system = system;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public String getAppName() {
|
||||
return appName;
|
||||
}
|
||||
|
||||
public void setAppName(String appName) {
|
||||
this.appName = appName;
|
||||
}
|
||||
|
||||
public boolean isLock() {
|
||||
return isLock;
|
||||
}
|
||||
|
||||
public void setLock(boolean lock) {
|
||||
isLock = lock;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
121
app/src/main/java/com/tool/applockpro/fragment/AllFragment.java
Normal file
@ -0,0 +1,121 @@
|
||||
package com.tool.applockpro.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.adapter.AppAdapter;
|
||||
import com.tool.applockpro.data.MyDataBase;
|
||||
import com.tool.applockpro.data.Mydao;
|
||||
import com.tool.applockpro.data.Mydata;
|
||||
import com.tool.applockpro.databinding.FragmentAllBinding;
|
||||
import com.tool.applockpro.tool.Mytools;
|
||||
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class AllFragment extends Fragment {
|
||||
FragmentAllBinding binding;
|
||||
private String tabargs;
|
||||
private AppAdapter thumAdapter;
|
||||
private Mydao mydao;
|
||||
// private List<Mydata> list1 = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
binding = FragmentAllBinding.inflate(inflater, container, false);
|
||||
|
||||
initData();
|
||||
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
|
||||
public void refesh(){
|
||||
mydao.getAppsBySystem(false).observe(getViewLifecycleOwner(), new Observer<List<Mydata>>() {
|
||||
@Override
|
||||
public void onChanged(List<Mydata> mydata) {
|
||||
|
||||
}
|
||||
});
|
||||
Mytools.runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<Mydata> list1 = MyDataBase.getINSTANCE().mydao().getappissystem(false);
|
||||
requireActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
updateRecyclerView(list1);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
private void initData() {
|
||||
mydao = MyDataBase.getINSTANCE().mydao();
|
||||
tabargs = getArguments().getString("tab");
|
||||
Log.e("zzj", tabargs);
|
||||
if (tabargs.equals("System")) {
|
||||
Mytools.runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<Mydata> list = MyDataBase.getINSTANCE().mydao().getappissystem(true);
|
||||
updateRecyclerView(list);
|
||||
}
|
||||
});
|
||||
} else if (tabargs.equals("Third")) {
|
||||
// updateRecyclerView(list1);
|
||||
// mydao.getAppsBySystem(false).observe(getViewLifecycleOwner(), new Observer<List<Mydata>>() {
|
||||
// @Override
|
||||
// public void onChanged(List<Mydata> mydata) {
|
||||
// updateRecyclerView(mydata);
|
||||
// }
|
||||
// });
|
||||
Mytools.runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<Mydata> list1 = MyDataBase.getINSTANCE().mydao().getappissystem(false);
|
||||
updateRecyclerView(list1);
|
||||
}
|
||||
});
|
||||
} else if (tabargs.equals("Lock")) {
|
||||
mydao.getLockApps(true).observe(getViewLifecycleOwner(), new Observer<List<Mydata>>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable List<Mydata> mydataList) {
|
||||
updateRecyclerView(mydataList);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRecyclerView(List<Mydata> mydataList) {
|
||||
thumAdapter = new AppAdapter(requireContext(), mydataList);
|
||||
binding.allRv.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
binding.allRv.setAdapter(thumAdapter);
|
||||
}
|
||||
|
||||
public static AllFragment newInstance(String pos) {
|
||||
|
||||
Bundle args = new Bundle();
|
||||
AllFragment fragment = new AllFragment();
|
||||
args.putString("tab", pos);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
}
|
||||
65
app/src/main/java/com/tool/applockpro/tool/MyinputPWD.java
Normal file
@ -0,0 +1,65 @@
|
||||
package com.tool.applockpro.tool;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.adapter.NumberAdapter;
|
||||
import com.tool.applockpro.adapter.PinAdapter;
|
||||
|
||||
|
||||
public class MyinputPWD extends FrameLayout {
|
||||
private Context mcontext;
|
||||
private RecyclerView numberrv;
|
||||
private StringBuilder builder;
|
||||
private NumberAdapter numberAdapter;
|
||||
private PinAdapter pinAdapter;
|
||||
private RecyclerView pinrv;
|
||||
|
||||
public MyinputPWD(@NonNull Context context) {
|
||||
super(context);
|
||||
initView(context);
|
||||
}
|
||||
|
||||
public MyinputPWD(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initView(context);
|
||||
}
|
||||
|
||||
@SuppressLint("MissingInflatedId")
|
||||
private void initView(Context context) {
|
||||
mcontext = context;
|
||||
View view = LayoutInflater.from(mcontext).inflate(R.layout.number_input, null);
|
||||
numberrv = view.findViewById(R.id.number_rv);
|
||||
pinrv = view.findViewById(R.id.pin_rv);
|
||||
addView(view);
|
||||
|
||||
|
||||
pinAdapter = new PinAdapter(mcontext);
|
||||
pinrv.setAdapter(pinAdapter);
|
||||
pinrv.setLayoutManager(new LinearLayoutManager(mcontext, RecyclerView.HORIZONTAL, false));
|
||||
// SpaceItem spaceItem1 = new SpaceItem(20, 0, 20);
|
||||
// pinrv.addItemDecoration(spaceItem1);
|
||||
|
||||
numberAdapter = new NumberAdapter(mcontext, pinAdapter);
|
||||
// SpaceItem spaceItem = new SpaceItem(100, 90, 100);
|
||||
numberrv.setAdapter(numberAdapter);
|
||||
numberrv.setLayoutManager(new GridLayoutManager(mcontext, 3));
|
||||
// numberrv.addItemDecoration(spaceItem);
|
||||
}
|
||||
|
||||
public PinAdapter getPinAdapter() {
|
||||
return pinAdapter;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
120
app/src/main/java/com/tool/applockpro/tool/Mymanager.java
Normal file
@ -0,0 +1,120 @@
|
||||
package com.tool.applockpro.tool;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.Point;
|
||||
import android.os.Build;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tool.applockpro.ApplockSkin;
|
||||
import com.tool.applockpro.R;
|
||||
import com.tool.applockpro.adapter.PinAdapter;
|
||||
|
||||
|
||||
public class Mymanager {
|
||||
private static Mymanager myManager;
|
||||
private Context mContext;
|
||||
private View mView;
|
||||
private WindowManager windowManager;
|
||||
private TextView btncontinue;
|
||||
private PinAdapter pinAdapter;
|
||||
private WindowManager.LayoutParams layoutParams;
|
||||
private MyinputPWD myinputPWD;
|
||||
private StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
public Mymanager(Context context) {
|
||||
mContext = context;
|
||||
|
||||
|
||||
mView = LayoutInflater.from(context).inflate(R.layout.lock_view, null, false);
|
||||
windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
|
||||
|
||||
myinputPWD = mView.findViewById(R.id.myinput);
|
||||
pinAdapter = myinputPWD.getPinAdapter();
|
||||
|
||||
initView();
|
||||
initEvent();
|
||||
|
||||
}
|
||||
|
||||
private void initEvent() {
|
||||
btncontinue.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (Staticvalue.KEY_NUMBER.length() == 4) {
|
||||
String pwd = Staticvalue.KEY_NUMBER;
|
||||
if (pwd.equals(ApplockSkin.getPWD())) {
|
||||
unLock();
|
||||
Staticvalue.KEY_NUMBER = "";
|
||||
pinAdapter.updateItem(Staticvalue.KEY_NUMBER);
|
||||
} else {
|
||||
showLockView();
|
||||
Staticvalue.KEY_NUMBER = "";
|
||||
pinAdapter.updateItem(Staticvalue.KEY_NUMBER);
|
||||
}
|
||||
} else {
|
||||
Staticvalue.KEY_NUMBER = "";
|
||||
pinAdapter.updateItem(Staticvalue.KEY_NUMBER);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public static synchronized Mymanager getInstance(Context context) {
|
||||
if (myManager == null) {
|
||||
myManager = new Mymanager(context);
|
||||
}
|
||||
return myManager;
|
||||
}
|
||||
|
||||
@SuppressLint("WrongConstant")
|
||||
private void initView() {
|
||||
btncontinue = mView.findViewById(R.id.lock_btn_continue);
|
||||
int type = 0;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
} else {
|
||||
type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
|
||||
}
|
||||
layoutParams = new WindowManager.LayoutParams();
|
||||
layoutParams.type = type;
|
||||
layoutParams.format = PixelFormat.RGBA_8888;
|
||||
layoutParams.flags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
|
||||
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
|
||||
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
|
||||
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
|
||||
layoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
|
||||
layoutParams.gravity = Gravity.CENTER;
|
||||
Point screenSize = new Point();
|
||||
windowManager.getDefaultDisplay().getRealSize(screenSize);
|
||||
layoutParams.width = screenSize.x;
|
||||
layoutParams.height = screenSize.y;
|
||||
}
|
||||
|
||||
public void showLockView() {
|
||||
if (!isViewAttached()) {
|
||||
stringBuilder.setLength(0);
|
||||
Staticvalue.KEY_NUMBER = "";
|
||||
windowManager.addView(mView, layoutParams);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void unLock() {
|
||||
try {
|
||||
windowManager.removeView(mView);
|
||||
} catch (Exception exception) {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isViewAttached() {
|
||||
return mView.getParent() != null;
|
||||
}
|
||||
|
||||
}
|
||||
67
app/src/main/java/com/tool/applockpro/tool/Myservice.java
Normal file
@ -0,0 +1,67 @@
|
||||
package com.tool.applockpro.tool;
|
||||
|
||||
import android.app.IntentService;
|
||||
import android.content.Intent;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tool.applockpro.data.MyDataBase;
|
||||
import com.tool.applockpro.data.Mydata;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class Myservice extends IntentService {
|
||||
private String lastLockPackName = "";
|
||||
private Mymanager myinstance;
|
||||
private Handler mHandler;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
mHandler = new Handler(Looper.getMainLooper());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHandleIntent(@Nullable Intent intent) {
|
||||
myinstance = Mymanager.getInstance(this);
|
||||
while (true) {
|
||||
String appname = Mytools.checkTopapp(this);
|
||||
// Log.e("zzj","--- ----"+appname);
|
||||
if (appname.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
Mydata mydata = MyDataBase.getINSTANCE().mydao().getappislock(appname);
|
||||
|
||||
if (mydata == null) {
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myinstance.unLock();
|
||||
}
|
||||
});
|
||||
lastLockPackName = appname;
|
||||
continue;
|
||||
}
|
||||
if (mydata.isLock()) {
|
||||
if (!Objects.equals(lastLockPackName, appname)) {
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
myinstance.showLockView();
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
}
|
||||
|
||||
lastLockPackName = appname;
|
||||
}
|
||||
}
|
||||
|
||||
public Myservice() {
|
||||
super("");
|
||||
}
|
||||
}
|
||||
119
app/src/main/java/com/tool/applockpro/tool/Mytools.java
Normal file
@ -0,0 +1,119 @@
|
||||
package com.tool.applockpro.tool;
|
||||
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.usage.UsageEvents;
|
||||
import android.app.usage.UsageStatsManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.tool.applockpro.data.MyDataBase;
|
||||
import com.tool.applockpro.data.Mydata;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class Mytools {
|
||||
public static String checkTopapp(Context context) {
|
||||
UsageStatsManager sUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
|
||||
long endTime = System.currentTimeMillis();
|
||||
long beginTime = endTime - 10000;
|
||||
String result = "";
|
||||
UsageEvents.Event event = new UsageEvents.Event();
|
||||
UsageEvents usageEvents = sUsageStatsManager.queryEvents(beginTime, endTime);
|
||||
while (usageEvents.hasNextEvent()) {
|
||||
usageEvents.getNextEvent(event);
|
||||
if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {
|
||||
result = event.getPackageName();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public static List<Mydata> getapplist(Context context) {
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
Intent intent = new Intent(Intent.ACTION_MAIN, null);
|
||||
intent.addCategory(Intent.CATEGORY_LAUNCHER);
|
||||
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);
|
||||
List<Mydata> allapplist = new ArrayList<>();
|
||||
for (ResolveInfo resolveInfo : resolveInfos) {
|
||||
String packageName = resolveInfo.activityInfo.packageName;
|
||||
String appName = resolveInfo.loadLabel(packageManager).toString();
|
||||
Mydata data = new Mydata();
|
||||
data.setAppName(appName);
|
||||
data.setPackageName(packageName);
|
||||
if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
|
||||
data.setSystem(false);
|
||||
} else {
|
||||
data.setSystem(true);
|
||||
}
|
||||
allapplist.add(data);
|
||||
}
|
||||
runIO(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<Mydata> existingData = MyDataBase.getINSTANCE().mydao().getAllapp();
|
||||
if (!existingData.isEmpty()) {
|
||||
|
||||
} else {
|
||||
List<Mydata> uniqueSystemList = removeDuplApp(allapplist);
|
||||
MyDataBase.getINSTANCE().mydao().insertAll(uniqueSystemList);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return allapplist;
|
||||
}
|
||||
|
||||
private static List<Mydata> removeDuplApp(List<Mydata> appList) {
|
||||
Set<Mydata> uniqueApps = new LinkedHashSet<>(appList);
|
||||
return new ArrayList<>(uniqueApps);
|
||||
}
|
||||
|
||||
public static boolean hasOverlayPermission(Context context) {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
return Settings.canDrawOverlays(context);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean hasUsagePermission(Context context) {
|
||||
try {
|
||||
AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), context.getPackageName());
|
||||
return (mode == AppOpsManager.MODE_ALLOWED);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static ExecutorService executorService;
|
||||
|
||||
private static ExecutorService getExecutorService() {
|
||||
if (executorService == null) {
|
||||
executorService = Executors.newSingleThreadExecutor();
|
||||
}
|
||||
return executorService;
|
||||
}
|
||||
|
||||
public static void runIO(Runnable task) {
|
||||
getExecutorService().execute(task);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package com.tool.applockpro.tool;
|
||||
|
||||
public class Staticvalue {
|
||||
public static String KEY_NUMBER = "key_number";
|
||||
public static String KEY_CANCEL = "key_cancel";
|
||||
}
|
||||
6
app/src/main/res/drawable/all_tab_selector.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/tab_check" android:state_selected="true" />
|
||||
<item android:drawable="@drawable/tab_uncheck" android:state_selected="false" />
|
||||
|
||||
</selector>
|
||||
6
app/src/main/res/drawable/all_tabcons_selector.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/tabcons_check" android:state_selected="true" />
|
||||
<item android:drawable="@drawable/tabcons_uncheck" android:state_selected="false" />
|
||||
|
||||
</selector>
|
||||
6
app/src/main/res/drawable/all_tabtext_selector.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/black" android:state_selected="true" />
|
||||
<item android:color="@color/tab_text_uncheck" android:state_selected="false" />
|
||||
|
||||
</selector>
|
||||
20
app/src/main/res/drawable/bg_main_cons.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<gradient
|
||||
android:translateX="1"
|
||||
android:translateY="0"
|
||||
android:pivotX="187.5"
|
||||
android:pivotY="314"
|
||||
android:scaleX="2"
|
||||
android:scaleY="2"
|
||||
android:startColor="@color/bg_main_end"
|
||||
android:endColor="@color/bg_main_star"
|
||||
android:angle="90"
|
||||
android:type="linear"
|
||||
/>
|
||||
<corners
|
||||
android:topLeftRadius="40dp"
|
||||
android:topRightRadius="40dp" />
|
||||
|
||||
</shape>
|
||||
17
app/src/main/res/drawable/bg_main_item_cons.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<gradient
|
||||
android:startX="83.75"
|
||||
android:startY="32"
|
||||
android:endX="251.25"
|
||||
android:endY="32"
|
||||
android:startColor="@color/bg_cons_end"
|
||||
android:endColor="@color/bg_cons_star"
|
||||
android:angle="180"
|
||||
android:type="linear"
|
||||
/>
|
||||
<corners
|
||||
android:radius="64dp" />
|
||||
|
||||
</shape>
|
||||
17
app/src/main/res/drawable/bg_main_item_icon.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<gradient
|
||||
android:startX="83.75"
|
||||
android:startY="32"
|
||||
android:endX="251.25"
|
||||
android:endY="32"
|
||||
android:startColor="@color/bg_cons_star"
|
||||
android:endColor="@color/bg_cons_end"
|
||||
android:angle="90"
|
||||
android:type="linear"
|
||||
/>
|
||||
<corners
|
||||
android:radius="64dp" />
|
||||
|
||||
</shape>
|
||||
16
app/src/main/res/drawable/bg_setting_cons.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<gradient
|
||||
android:startX="83.75"
|
||||
android:startY="32"
|
||||
android:endX="251.25"
|
||||
android:endY="32"
|
||||
android:startColor="@color/bg_cons_end"
|
||||
android:endColor="@color/bg_cons_star"
|
||||
android:angle="180"
|
||||
android:type="linear"
|
||||
/>
|
||||
<corners android:radius="24dp" />
|
||||
|
||||
</shape>
|
||||
170
app/src/main/res/drawable/ic_launcher_background.xml
Normal file
@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
30
app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/icon_back.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="200dp"
|
||||
android:height="200dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:fillColor="@color/white"
|
||||
android:pathData="M748.9,1024c-9.8,0 -19.6,-3.7 -27,-11.2L248.1,539a38.2,38.2 0,0 1,-11.2 -27c0,-10.1 4,-19.9 11.2,-27L721.8,11.2c14.9,-14.9 39.1,-14.9 54.1,0s14.9,39.2 0,54.1L329.2,512l446.7,446.7c14.9,14.9 14.9,39.2 0,54.1 -7.5,7.5 -17.2,11.2 -27,11.2z"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/icon_cancel.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="23dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="23">
|
||||
<path
|
||||
android:pathData="M17.358,16.72L12.001,11.363M12.001,11.363L6.644,6.006M12.001,11.363L17.358,6.006M12.001,11.363L6.644,16.72"
|
||||
android:strokeWidth="2.27273"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
10
app/src/main/res/drawable/icon_delete.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<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="M5.685,17.938C6.007,18.316 6.407,18.619 6.858,18.827C7.308,19.035 7.799,19.143 8.295,19.143H18.893C19.802,19.143 20.674,18.782 21.317,18.139C21.961,17.496 22.322,16.624 22.322,15.714V8.288C22.322,7.379 21.961,6.507 21.317,5.864C20.674,5.221 19.802,4.859 18.893,4.859H8.295C7.799,4.859 7.308,4.967 6.858,5.175C6.407,5.383 6.007,5.687 5.685,6.065L2.522,9.778C1.993,10.398 1.703,11.186 1.703,12.001C1.703,12.816 1.993,13.604 2.522,14.224L5.685,17.938ZM9.396,8.135C9.495,8.036 9.614,7.957 9.744,7.903C9.874,7.849 10.013,7.821 10.154,7.821C10.294,7.821 10.434,7.849 10.564,7.903C10.694,7.957 10.812,8.036 10.911,8.135L13.226,10.45L15.538,8.135C15.638,8.036 15.756,7.957 15.886,7.903C16.016,7.849 16.155,7.822 16.296,7.822C16.437,7.822 16.576,7.849 16.706,7.903C16.836,7.957 16.954,8.036 17.054,8.135C17.153,8.235 17.232,8.353 17.286,8.483C17.34,8.613 17.368,8.752 17.368,8.893C17.368,9.034 17.34,9.173 17.286,9.303C17.232,9.433 17.153,9.551 17.054,9.651L14.739,11.965L17.054,14.279C17.153,14.379 17.232,14.497 17.286,14.627C17.34,14.757 17.368,14.896 17.368,15.037C17.368,15.178 17.34,15.317 17.286,15.447C17.232,15.577 17.153,15.695 17.054,15.795C16.954,15.894 16.836,15.973 16.706,16.027C16.576,16.081 16.437,16.109 16.296,16.109C16.155,16.109 16.016,16.081 15.886,16.027C15.756,15.973 15.638,15.894 15.538,15.795L13.224,13.481L10.91,15.795C10.707,15.986 10.437,16.09 10.159,16.086C9.88,16.082 9.614,15.969 9.417,15.772C9.22,15.575 9.108,15.309 9.104,15.03C9.1,14.751 9.205,14.482 9.396,14.279L11.71,11.965L9.396,9.651C9.296,9.551 9.218,9.433 9.164,9.303C9.11,9.173 9.082,9.034 9.082,8.893C9.082,8.752 9.11,8.613 9.164,8.483C9.218,8.353 9.296,8.235 9.396,8.135Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
||||
20
app/src/main/res/drawable/icon_go.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<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="M10,17L15,12"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M15,12L10,7"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
14
app/src/main/res/drawable/icon_islock.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<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="M9.013,2.78L9.013,2.78L9.01,2.781C7.821,3.109 6.64,3.465 5.469,3.849C5.23,3.927 5.017,4.07 4.856,4.263C4.694,4.455 4.589,4.69 4.553,4.939L4.553,4.939L4.553,4.945C3.839,10.303 5.491,14.248 7.484,16.858C8.329,17.973 9.335,18.956 10.471,19.773L10.471,19.773L10.477,19.777C10.933,20.099 11.349,20.34 11.693,20.502C11.859,20.581 12.01,20.641 12.142,20.682C12.223,20.709 12.305,20.729 12.389,20.742L12.505,20.759L12.62,20.74C12.699,20.728 12.777,20.709 12.853,20.684C12.988,20.642 13.141,20.581 13.307,20.501C13.65,20.34 14.066,20.098 14.522,19.778L14.522,19.778L14.529,19.773C15.665,18.956 16.671,17.973 17.515,16.858C19.509,14.25 21.162,10.303 20.447,4.945L20.448,4.945L20.447,4.94C20.412,4.69 20.307,4.455 20.145,4.262C19.983,4.07 19.771,3.927 19.532,3.849C18.721,3.584 17.349,3.151 15.988,2.781L15.987,2.781C14.634,2.414 13.274,2.107 12.5,2.107C11.728,2.107 10.367,2.413 9.013,2.78Z"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M14.434,9.363C14.434,9.763 14.311,10.153 14.08,10.48C13.849,10.807 13.522,11.054 13.145,11.188L13.641,13.754C13.659,13.847 13.656,13.943 13.633,14.035C13.61,14.127 13.566,14.213 13.505,14.286C13.445,14.36 13.369,14.419 13.283,14.459C13.197,14.5 13.103,14.521 13.008,14.521H11.992C11.897,14.521 11.803,14.5 11.717,14.459C11.632,14.418 11.556,14.359 11.495,14.286C11.435,14.213 11.392,14.127 11.368,14.035C11.345,13.943 11.342,13.847 11.36,13.754L11.855,11.188C11.521,11.069 11.226,10.861 11.002,10.587C10.777,10.312 10.633,9.981 10.584,9.63C10.535,9.279 10.584,8.921 10.725,8.595C10.866,8.27 11.093,7.99 11.383,7.785C11.672,7.58 12.012,7.459 12.366,7.434C12.72,7.41 13.074,7.483 13.389,7.646C13.703,7.809 13.968,8.055 14.152,8.358C14.336,8.661 14.434,9.008 14.434,9.363Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
21
app/src/main/res/drawable/icon_left.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<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="M18,8L14,12L18,16"
|
||||
android:strokeAlpha="0.5"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M11,6L5,12L11,18"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
26
app/src/main/res/drawable/icon_lock.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="34dp"
|
||||
android:height="34dp"
|
||||
android:viewportWidth="34"
|
||||
android:viewportHeight="34">
|
||||
<path
|
||||
android:pathData="M23.818,14.273H10.182C9.429,14.273 8.818,14.884 8.818,15.637V25.183C8.818,25.936 9.429,26.546 10.182,26.546H23.818C24.571,26.546 25.182,25.936 25.182,25.183V15.637C25.182,14.884 24.571,14.273 23.818,14.273Z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2.04545"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M12.909,14.274V10.183C12.909,7.672 14.741,6.092 17,6.092C19.259,6.092 21.091,7.672 21.091,10.183V14.274"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2.04545"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M17,19.729V21.092"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2.04545"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
21
app/src/main/res/drawable/icon_right.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<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="M6,8L10,12L6,16"
|
||||
android:strokeAlpha="0.5"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M13,6L19,12L13,18"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/icon_search.xml
Normal 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="M11,2C15.968,2 20,6.032 20,11C20,15.968 15.968,20 11,20C6.032,20 2,15.968 2,11C2,6.032 6.032,2 11,2ZM11,18C14.867,18 18,14.867 18,11C18,7.133 14.867,4 11,4C7.133,4 4,7.133 4,11C4,14.867 7.133,18 11,18ZM19.485,18.071L22.314,20.899L20.899,22.314L18.071,19.485L19.485,18.071Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/icon_setting.xml
Normal 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="M10,19C10,20.1 10.9,21 12,21C13.1,21 14,20.1 14,19C14,17.9 13.1,17 12,17C10.9,17 10,17.9 10,19ZM10,5C10,6.1 10.9,7 12,7C13.1,7 14,6.1 14,5C14,3.9 13.1,3 12,3C10.9,3 10,3.9 10,5ZM10,12C10,13.1 10.9,14 12,14C13.1,14 14,13.1 14,12C14,10.9 13.1,10 12,10C10.9,10 10,10.9 10,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
16
app/src/main/res/drawable/icon_system.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<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="M3.582,13.947C3.053,12.997 2.789,12.521 2.789,12.002C2.789,11.483 3.053,11.008 3.582,10.058L4.93,7.632L6.356,5.251C6.915,4.318 7.194,3.851 7.643,3.591C8.093,3.332 8.636,3.324 9.723,3.306L12.5,3.262L15.275,3.306C16.363,3.324 16.906,3.332 17.355,3.592C17.805,3.852 18.085,4.318 18.643,5.251L20.07,7.632L21.42,10.058C21.948,11.008 22.212,11.483 22.212,12.002C22.212,12.521 21.948,12.996 21.419,13.946L20.07,16.372L18.644,18.753C18.085,19.686 17.806,20.153 17.357,20.413C16.907,20.672 16.364,20.68 15.277,20.698L12.5,20.742L9.725,20.698C8.637,20.68 8.094,20.672 7.645,20.412C7.195,20.152 6.915,19.686 6.357,18.753L4.93,16.372L3.582,13.947Z"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M12.5,15.002C14.157,15.002 15.5,13.659 15.5,12.002C15.5,10.345 14.157,9.002 12.5,9.002C10.843,9.002 9.5,10.345 9.5,12.002C9.5,13.659 10.843,15.002 12.5,15.002Z"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/icon_third.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<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="M9.5,3H4.5C4.235,3 3.98,3.105 3.793,3.293C3.605,3.48 3.5,3.735 3.5,4V9C3.5,9.265 3.605,9.52 3.793,9.707C3.98,9.895 4.235,10 4.5,10H9.5C9.765,10 10.02,9.895 10.207,9.707C10.395,9.52 10.5,9.265 10.5,9V4C10.5,3.735 10.395,3.48 10.207,3.293C10.02,3.105 9.765,3 9.5,3ZM9.5,14H4.5C4.235,14 3.98,14.105 3.793,14.293C3.605,14.48 3.5,14.735 3.5,15V20C3.5,20.265 3.605,20.52 3.793,20.707C3.98,20.895 4.235,21 4.5,21H9.5C9.765,21 10.02,20.895 10.207,20.707C10.395,20.52 10.5,20.265 10.5,20V15C10.5,14.735 10.395,14.48 10.207,14.293C10.02,14.105 9.765,14 9.5,14ZM20.5,3H15.5C15.235,3 14.98,3.105 14.793,3.293C14.605,3.48 14.5,3.735 14.5,4V9C14.5,9.265 14.605,9.52 14.793,9.707C14.98,9.895 15.235,10 15.5,10H20.5C20.765,10 21.02,9.895 21.207,9.707C21.395,9.52 21.5,9.265 21.5,9V4C21.5,3.735 21.395,3.48 21.207,3.293C21.02,3.105 20.765,3 20.5,3ZM20.5,14H15.5C15.235,14 14.98,14.105 14.793,14.293C14.605,14.48 14.5,14.735 14.5,15V20C14.5,20.265 14.605,20.52 14.793,20.707C14.98,20.895 15.235,21 15.5,21H20.5C20.765,21 21.02,20.895 21.207,20.707C21.395,20.52 21.5,20.265 21.5,20V15C21.5,14.735 21.395,14.48 21.207,14.293C21.02,14.105 20.765,14 20.5,14Z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#ffffff"/>
|
||||
</vector>
|
||||
26
app/src/main/res/drawable/icon_unlock.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="34dp"
|
||||
android:height="34dp"
|
||||
android:viewportWidth="34"
|
||||
android:viewportHeight="34">
|
||||
<path
|
||||
android:pathData="M23.818,14.273H10.182C9.429,14.273 8.818,14.884 8.818,15.637V25.183C8.818,25.936 9.429,26.546 10.182,26.546H23.818C24.571,26.546 25.182,25.936 25.182,25.183V15.637C25.182,14.884 24.571,14.273 23.818,14.273Z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2.04545"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#707070"/>
|
||||
<path
|
||||
android:pathData="M12.909,14.274V10.183C12.909,7.672 14.741,6.092 17,6.092C18.261,6.092 19.389,6.584 20.139,7.455C20.47,7.84 20.727,8.297 20.89,8.819"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2.04545"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#707070"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M17,19.729V21.092"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2.04545"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#707070"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/search_edit.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/icon_bg_color" />
|
||||
<corners android:radius="42dp" />
|
||||
</shape>
|
||||
7
app/src/main/res/drawable/selector_lock.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/icon_lock" android:state_selected="true" />
|
||||
<item android:drawable="@drawable/icon_unlock" />
|
||||
|
||||
</selector>
|
||||
7
app/src/main/res/drawable/step_check.xml
Normal 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/step_check" />
|
||||
<corners android:radius="29dp" />
|
||||
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/step_selector.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/step_uncheck" android:state_selected="true" />
|
||||
<item android:drawable="@drawable/step_check" android:state_selected="false" />
|
||||
|
||||
</selector>
|
||||
5
app/src/main/res/drawable/step_uncheck.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/step_uncheck" />
|
||||
<corners android:radius="29dp" />
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/stepwd_check.xml
Normal 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/step_uncheck" />
|
||||
<corners android:radius="36dp" />
|
||||
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/stepwd_selector.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/stepwd_uncheck" android:state_selected="false" />
|
||||
<item android:drawable="@drawable/stepwd_check" android:state_selected="true" />
|
||||
|
||||
</selector>
|
||||
7
app/src/main/res/drawable/stepwd_uncheck.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/edit_biankuang" />
|
||||
<corners android:radius="36dp" />
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/tab_check.xml
Normal 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/step_uncheck" />
|
||||
<corners android:radius="24dp" />
|
||||
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/tab_uncheck.xml
Normal 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/tab_bg_uncheck" />
|
||||
<corners android:radius="24dp" />
|
||||
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/tabcons_check.xml
Normal 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/black" />
|
||||
<corners android:radius="43dp" />
|
||||
|
||||
</shape>
|
||||
6
app/src/main/res/drawable/tabcons_uncheck.xml
Normal 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/tab_text_uncheck" />
|
||||
<corners android:radius="43dp" />
|
||||
|
||||
</shape>
|
||||
92
app/src/main/res/layout/activity_main.xml
Normal file
@ -0,0 +1,92 @@
|
||||
<?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_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@mipmap/bg_main"
|
||||
tools:context=".activity.MainActivity">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/main_search"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="26dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:background="@drawable/bg_setting_cons"
|
||||
android:padding="10dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="18dp"
|
||||
android:layout_height="18dp"
|
||||
android:src="@drawable/icon_search"
|
||||
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/main_seeting"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:background="@drawable/bg_setting_cons"
|
||||
android:padding="10dp"
|
||||
app:layout_constraintEnd_toStartOf="@id/main_search"
|
||||
app:layout_constraintTop_toTopOf="@id/main_search">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="18dp"
|
||||
android:layout_height="18dp"
|
||||
android:src="@drawable/icon_setting"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="20dp"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="@color/step_uncheck"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/main_search" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:background="@drawable/bg_main_cons"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/title">
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:layout_marginTop="32dp"
|
||||
android:id="@+id/main_tabLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="100dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:tabIndicatorHeight="0dp" />
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/main_viewpager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="20dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/main_tabLayout" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
106
app/src/main/res/layout/activity_permission.xml
Normal file
@ -0,0 +1,106 @@
|
||||
<?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:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@mipmap/bg_main"
|
||||
android:id="@+id/activity_Permission"
|
||||
tools:context=".activity.PermissionActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/setting_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@mipmap/image_permission_title"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/cons_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/bg_setting_cons"
|
||||
android:paddingStart="40dp"
|
||||
android:paddingEnd="40dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/setting_title">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="40dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/setting_content"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="14sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/step1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:layout_marginBottom="32dp"
|
||||
android:background="@drawable/step_selector"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:paddingBottom="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/text_content">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/step1_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/step1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="17sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/step2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:background="@drawable/step_selector"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:paddingBottom="10dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/text_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/step2_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/step2"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="17sp" />
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="230dp"
|
||||
android:layout_height="150dp"
|
||||
android:layout_marginBottom="-30dp"
|
||||
android:src="@mipmap/image_permission"
|
||||
app:layout_constraintBottom_toTopOf="@id/cons_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
106
app/src/main/res/layout/activity_search.xml
Normal file
@ -0,0 +1,106 @@
|
||||
<?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_search"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@mipmap/bg_main"
|
||||
tools:context=".activity.SearchActivity">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/search_cons"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:background="@drawable/search_edit"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:paddingStart="20dp"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:paddingBottom="10dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/search"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:src="@drawable/icon_search"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/search_edit"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginStart="10dp"
|
||||
android:background="@android:color/transparent"
|
||||
android:lines="1"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="19sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/search" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:background="@drawable/bg_main_cons"
|
||||
android:padding="20dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/search_cons">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/search_tips"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/search_rv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="10dp" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="70dp"
|
||||
android:background="@drawable/bg_main_item_icon"
|
||||
android:padding="6dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/app_switch"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:background="@drawable/icon_cancel"
|
||||
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>
|
||||
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
119
app/src/main/res/layout/activity_set_pwdactivity.xml
Normal file
@ -0,0 +1,119 @@
|
||||
<?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:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@mipmap/bg_main"
|
||||
android:id="@+id/activity_setpwd"
|
||||
tools:context=".activity.SetPWDActivity">
|
||||
|
||||
<!-- <ImageView-->
|
||||
<!-- android:id="@+id/setpwd_back"-->
|
||||
<!-- android:layout_width="24dp"-->
|
||||
<!-- android:layout_height="24dp"-->
|
||||
<!-- android:layout_marginStart="20dp"-->
|
||||
<!-- android:layout_marginTop="20dp"-->
|
||||
<!-- android:background="@drawable/icon_back"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent" />-->
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lock_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/lock_tpis"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lock_text1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="30dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/lock_text1"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="15sp"
|
||||
app:layout_constraintTop_toBottomOf="@id/lock_text" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/layout_et"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="32dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toTopOf="@id/lock_text">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et1"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="64dp"
|
||||
android:background="@drawable/stepwd_selector"
|
||||
android:gravity="center"
|
||||
android:inputType="numberPassword"
|
||||
android:maxLength="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="18sp" />
|
||||
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et2"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="64dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:background="@drawable/stepwd_selector"
|
||||
android:gravity="center"
|
||||
android:inputType="numberPassword"
|
||||
android:maxLength="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="18sp" />
|
||||
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et3"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="64dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:background="@drawable/stepwd_selector"
|
||||
android:gravity="center"
|
||||
android:inputType="numberPassword"
|
||||
android:maxLength="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="18sp" />
|
||||
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et4"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="64dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:background="@drawable/stepwd_selector"
|
||||
android:gravity="center"
|
||||
android:inputType="numberPassword"
|
||||
android:maxLength="1"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="18sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/btn_continue"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="32dp"
|
||||
android:background="@drawable/stepwd_check"
|
||||
android:text="@string/text_continue"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="17sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/lock_text1" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
115
app/src/main/res/layout/activity_setting.xml
Normal file
@ -0,0 +1,115 @@
|
||||
<?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_setting"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@mipmap/bg_main"
|
||||
tools:context=".activity.SettingActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="@string/setting_title"
|
||||
android:textColor="@color/step_uncheck"
|
||||
android:textSize="30sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:background="@drawable/bg_main_cons"
|
||||
android:padding="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/title">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/changepwd"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:background="@drawable/bg_setting_cons"
|
||||
android:padding="16dp"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/change_pwd"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="17sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:src="@drawable/icon_go"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/privacy"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:background="@drawable/bg_setting_cons"
|
||||
android:padding="16dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/changepwd">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/Privacy"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="17sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:src="@drawable/icon_go"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="70dp"
|
||||
android:background="@drawable/bg_main_item_icon"
|
||||
android:padding="6dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/app_switch"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:background="@drawable/icon_cancel"
|
||||
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>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
13
app/src/main/res/layout/fragment_all.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".fragment.AllFragment">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/all_rv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
63
app/src/main/res/layout/item_app.xml
Normal file
@ -0,0 +1,63 @@
|
||||
<?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:layout_margin="10dp"
|
||||
android:padding="6dp"
|
||||
android:background="@drawable/bg_main_item_cons">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/logo"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:src="@mipmap/ic_launcher"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="20dp"
|
||||
android:gravity="center"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="17sp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/logo"
|
||||
app:layout_constraintStart_toEndOf="@id/logo"
|
||||
app:layout_constraintTop_toTopOf="@id/logo" />
|
||||
|
||||
|
||||
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/lock"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:padding="6dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/bg_main_item_icon"
|
||||
app:layout_constraintBottom_toBottomOf="@id/name"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/name">
|
||||
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/app_switch"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:background="@drawable/selector_lock" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
44
app/src/main/res/layout/item_tablayout.xml
Normal file
@ -0,0 +1,44 @@
|
||||
<?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:id="@+id/custom_tablayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/all_tab_selector">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_marginBottom="20dp"
|
||||
android:id="@+id/tab_cons"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/all_tabcons_selector"
|
||||
android:padding="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/tab_image"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<TextView
|
||||
android:layout_marginBottom="10dp"
|
||||
android:id="@+id/tab_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:textColor="@drawable/all_tabtext_selector"
|
||||
android:textSize="15sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tab_cons" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
36
app/src/main/res/layout/lock_view.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<?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/lock_pwd"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@mipmap/bg_main"
|
||||
tools:context=".activity.SetPWDActivity">
|
||||
|
||||
|
||||
<com.tool.applockpro.tool.MyinputPWD
|
||||
android:id="@+id/myinput"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/lock_btn_continue"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginTop="6dp"
|
||||
android:background="@drawable/stepwd_check"
|
||||
android:gravity="center"
|
||||
android:text="@string/text_continue"
|
||||
android:textColor="@color/white"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/myinput" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
49
app/src/main/res/layout/number_input.xml
Normal file
@ -0,0 +1,49 @@
|
||||
<?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="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/pin_rv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_logo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/lock_title"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/pin_rv" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_hint"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/lock_hint"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="15sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/text_logo" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/number_rv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/text_hint" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
41
app/src/main/res/layout/number_item.xml
Normal file
@ -0,0 +1,41 @@
|
||||
<?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:padding="10dp"
|
||||
android:gravity="center">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_number"
|
||||
android:layout_width="55dp"
|
||||
android:layout_height="55dp"
|
||||
android:layout_margin="10dp"
|
||||
android:background="@drawable/search_edit"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/pin_cons"
|
||||
android:layout_width="55dp"
|
||||
android:layout_height="55dp"
|
||||
android:layout_margin="10dp"
|
||||
android:background="@drawable/search_edit"
|
||||
android:padding="15dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@drawable/icon_delete" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
14
app/src/main/res/layout/number_pin.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/linear"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:layout_margin="10dp"
|
||||
android:id="@+id/im_pin"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="64dp"
|
||||
android:src="@drawable/stepwd_selector" />
|
||||
|
||||
</LinearLayout>
|
||||
6
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
6
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 982 B |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/bg_main.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
app/src/main/res/mipmap-xxxhdpi/bg_main_title.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/icon_logo.png
Normal file
|
After Width: | Height: | Size: 133 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/image_permission.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/image_permission_title.png
Normal file
|
After Width: | Height: | Size: 344 KiB |
7
app/src/main/res/values-night/themes.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.ApplockPro" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
<!-- Customize your dark theme here. -->
|
||||
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
|
||||
</style>
|
||||
</resources>
|
||||
8
app/src/main/res/values/arryays.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer-array name="drawable_images">
|
||||
<item>@drawable/icon_system</item>
|
||||
<item>@drawable/icon_third</item>
|
||||
<item>@drawable/icon_islock</item>
|
||||
</integer-array>
|
||||
</resources>
|
||||
18
app/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="bg_main_star">#40FFFFFF</color>
|
||||
<color name="bg_cons_star">#80FFFFFF</color>
|
||||
<color name="bg_cons_end">#50FFFFFF</color>
|
||||
<color name="bg_main_end">#40000000</color>
|
||||
<color name="step_check">#EBFFFC</color>
|
||||
<color name="edit_color">#40FFFFFF</color>
|
||||
<color name="icon_bg_color">#50414141</color>
|
||||
<color name="step_uncheck">#37F3D3</color>
|
||||
<color name="tab_bg_uncheck">#EBFFFC</color>
|
||||
<color name="text_uncheck">#9AA6A4</color>
|
||||
<color name="edit_biankuang">#727272</color>
|
||||
<color name="tab_text_uncheck">#909090</color>
|
||||
|
||||
</resources>
|
||||
23
app/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<resources>
|
||||
<string name="app_name">Lock App</string>
|
||||
<string name="setting_content">Permissions\n For normal use App Lock \n Please grant the following</string>
|
||||
<string name="step1">Step 1</string>
|
||||
<string name="step2">Step 2</string>
|
||||
<string name="change_pwd">Change password</string>
|
||||
<string name="Privacy">Privacy Policy</string>
|
||||
<string name="text_locked">locked: %s</string>
|
||||
<string name="text_unlocked">Unlocked: %s</string>
|
||||
<string name="text_continue">Continue</string>
|
||||
<string name="nolock_tips">At present, there is nothing\n application are locked</string>
|
||||
<string name="lock_tpis">Set Passcode</string>
|
||||
<string name="lock_text1">Create a 4-digit password</string>
|
||||
<string name="changelock">Please enter the password you want to change</string>
|
||||
<string name="changelock_tips">Password change successful</string>
|
||||
<string name="setlock_tips">Password set successfully</string>
|
||||
<string name="text_hint">please input complete</string>
|
||||
<string name="setting_title">Settings</string>
|
||||
<string name="text_tips">Please enter the content</string>
|
||||
<string name="text_null">Query is empty</string>
|
||||
<string name="lock_title">Confirm Your PIN</string>
|
||||
<string name="lock_hint">Crea un Pin de ingreso de 4 digitos</string>
|
||||
</resources>
|
||||
17
app/src/main/res/values/themes.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.ApplockPro" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
<!-- Customize your light theme here. -->
|
||||
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
|
||||
</style>
|
||||
|
||||
<style name="Theme.ApplockPro" parent="Base.Theme.ApplockPro" />
|
||||
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:windowBackground">@android:color/white</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<item name="android:statusBarColor" />
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
13
app/src/main/res/xml/backup_rules.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample backup rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/guide/topics/data/autobackup
|
||||
for details.
|
||||
Note: This file is ignored for devices older that API 31
|
||||
See https://developer.android.com/about/versions/12/backup-restore
|
||||
-->
|
||||
<full-backup-content>
|
||||
<!--
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
-->
|
||||
</full-backup-content>
|
||||
19
app/src/main/res/xml/data_extraction_rules.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample data extraction rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
|
||||
for details.
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<!-- TODO: Use <include> and <exclude> to control what is backed up.
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
-->
|
||||
</cloud-backup>
|
||||
<!--
|
||||
<device-transfer>
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
</device-transfer>
|
||||
-->
|
||||
</data-extraction-rules>
|
||||
17
app/src/test/java/com/tool/applockpro/ExampleUnitTest.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.tool.applockpro;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
||||
5
build.gradle.kts
Normal file
@ -0,0 +1,5 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
plugins {
|
||||
id("com.android.application") version "8.1.3" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
|
||||
}
|
||||