V1.0.0(1)

This commit is contained in:
zhouzhijia 2024-07-26 19:04:30 +08:00
commit 54f404ed15
106 changed files with 3658 additions and 0 deletions

18
.gitignore vendored Normal file
View 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
View File

@ -0,0 +1 @@
/build

62
app/build.gradle.kts Normal file
View 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

Binary file not shown.

BIN
app/lockapptest.jks Normal file

Binary file not shown.

34
app/proguard-rules.pro vendored Normal file
View 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.** { *; }

View 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"
}

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

View 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>

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

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

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

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

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

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

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

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

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

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

View File

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

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="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>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="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>

View 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>

View 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>

View 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>

View 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>

View 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>

View File

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

View 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>

View 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>

View File

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

View 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>

View 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>

View File

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

View File

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

View File

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

View File

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

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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
View 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
}

Some files were not shown because too many files have changed in this diff Show More