commit 91f5a614af4370c9237b94faf65056c6e77aecea Author: denghaina Date: Wed Jul 31 09:58:56 2024 +0800 版本V1.0.0(1) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2bfca55 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +*.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/ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/SecurityLocks.jks b/app/SecurityLocks.jks new file mode 100644 index 0000000..dbdd33c Binary files /dev/null and b/app/SecurityLocks.jks differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..08353fa --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,67 @@ +import java.text.SimpleDateFormat +import java.util.Date + +plugins { + alias(libs.plugins.android.application) + id("org.jetbrains.kotlin.android") + id ("kotlin-kapt") +} +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +android { + namespace = "com.lc.myapplication.security.locks" + compileSdk = 34 + + defaultConfig { + applicationId = "com.lc.applock.security.locks" + minSdk = 23 + targetSdk = 34 + versionCode = 1 + versionName = "1.0.0" + setProperty("archivesBaseName", "AppLockMaster_v${versionName}_(${versionCode})_$timestamp") + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + 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(libs.appcompat) + implementation(libs.material) + implementation(libs.activity) + implementation(libs.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.ext.junit) + androidTestImplementation(libs.espresso.core) + implementation ("com.github.bumptech.glide:glide:4.16.0") + implementation("androidx.activity:activity-compose:1.8.2") + implementation("com.google.android.material:material:1.11.0") + implementation ("com.google.code.gson:gson:2.10.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") +} \ No newline at end of file diff --git a/app/info b/app/info new file mode 100644 index 0000000..7652982 --- /dev/null +++ b/app/info @@ -0,0 +1,6 @@ +包名:com.lc.applock.security.locks +应用名:App Lock Master +签名文件:SecurityLocks.jks +签名文件路径:D:\AndroidProjects\SecurityLocks\app +别名:SecurityLocks0 +密码:Security Locks \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# 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 \ No newline at end of file diff --git a/app/src/androidTest/java/com/lc/myapplication/security/locks/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/lc/myapplication/security/locks/ExampleInstrumentedTest.java new file mode 100644 index 0000000..11b6765 --- /dev/null +++ b/app/src/androidTest/java/com/lc/myapplication/security/locks/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.lc.myapplication.security.locks; + +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 Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.lc.myapplication.security.locks", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1b8e798 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/Securitylocks.java b/app/src/main/java/com/lc/myapplication/security/locks/Securitylocks.java new file mode 100644 index 0000000..a63d076 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/Securitylocks.java @@ -0,0 +1,36 @@ +package com.lc.myapplication.security.locks; + +import android.app.Application; +import android.util.Log; + +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.AppsManager; +import com.lc.myapplication.security.locks.tool.MyTools; +import com.lc.myapplication.security.locks.value.MeValues; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class Securitylocks extends Application { + public static List securityLockEntities = new ArrayList<>(); + @Override + public void onCreate() { + super.onCreate(); + MeValues.lock = this; + MyTools.init(this); + Set entities = AppsManager.queryapps(this); + //Log.d("--------en1","----------"+entities.size()); + AppsManager.insertEntity(entities); + // Log.d("--------en2","----------"+securityLockEntities.size()); + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + securityLockEntities = SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().GetAllapp(); + } + }); + //Log.d("--------en3","----------"+securityLockEntities.size()); + } + +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/activity/AllAppActivity.java b/app/src/main/java/com/lc/myapplication/security/locks/activity/AllAppActivity.java new file mode 100644 index 0000000..8d7c644 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/activity/AllAppActivity.java @@ -0,0 +1,85 @@ +package com.lc.myapplication.security.locks.activity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.Securitylocks; +import com.lc.myapplication.security.locks.adapter.AllAppsAdapter; +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.MyService; +import com.lc.myapplication.security.locks.tool.MyTools; + +import java.util.ArrayList; +import java.util.List; + +public class AllAppActivity extends AppCompatActivity { + private LinearLayout all_main; + + private RecyclerView all_apps_view; + private ImageView all_apps_back; + private List list; + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_all_app); + all_apps_view = findViewById(R.id.all_apps_view); + all_apps_back = findViewById(R.id.all_apps_back); + all_main = findViewById(R.id.all_main); + initbackground(); + onMyClick(); + gotoGetRecycle(); + } + + private void onMyClick() { + all_apps_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + private void initbackground() { + Window window = getWindow(); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + all_main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } + + private void gotoGetRecycle() { + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + list = SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().GetAllapp(); + runOnUiThread(new Runnable() { + @Override + public void run() { + AllAppsAdapter allAppsAdapter = new AllAppsAdapter(AllAppActivity.this, list); + all_apps_view.setAdapter(allAppsAdapter); + all_apps_view.setLayoutManager(new GridLayoutManager(AllAppActivity.this,3)); + } + }); + + } + }); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/activity/IntoActivity.java b/app/src/main/java/com/lc/myapplication/security/locks/activity/IntoActivity.java new file mode 100644 index 0000000..000c996 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/activity/IntoActivity.java @@ -0,0 +1,55 @@ +package com.lc.myapplication.security.locks.activity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; + +import androidx.appcompat.app.AppCompatActivity; + +import com.lc.myapplication.security.locks.tool.MyTools; +import com.lc.myapplication.security.locks.R; + +public class IntoActivity extends AppCompatActivity { + private CountDownTimer timer; + + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_into); + timer = new CountDownTimer(1000, 500) { + @Override + public void onTick(long millisUntilFinished) { + + } + + @Override + public void onFinish() { + startSwitchActivity(); + } + }; + timego(); + } + + private void startSwitchActivity() { + String firstkey = MyTools.getPassword(); + if (firstkey.isEmpty()){ + startActivity(new Intent(IntoActivity.this, PassCodeActivity.class)); + finish(); + }else { + startActivity(new Intent(IntoActivity.this, MainActivity.class)); + finish(); + } + } + + private void timego() { + timer.start(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + timer.cancel(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/activity/LockedAppActivity.java b/app/src/main/java/com/lc/myapplication/security/locks/activity/LockedAppActivity.java new file mode 100644 index 0000000..42cc535 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/activity/LockedAppActivity.java @@ -0,0 +1,83 @@ +package com.lc.myapplication.security.locks.activity; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.Securitylocks; +import com.lc.myapplication.security.locks.adapter.LockedAppAdapter; +import com.lc.myapplication.security.locks.draw.MySpace; +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.MyTools; + +import java.util.ArrayList; +import java.util.List; + +public class LockedAppActivity extends AppCompatActivity { + private RecyclerView locked_app; + private ImageView locked_back; + private boolean islock = true; + private LinearLayout locked_main; + private List list; + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_locked_app); + locked_app = findViewById(R.id.locked_apps_view); + locked_back = findViewById(R.id.locked_back); + locked_main = findViewById(R.id.locked_main); + initbackground(); + locked_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + gotoGetLockedList(); + //gotoGetRecycle(); + } + private void initbackground() { + Window window = getWindow(); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + locked_main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } + private void gotoGetLockedList() { + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + list = SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().GetLockedApp(islock); + runOnUiThread(new Runnable() { + @Override + public void run() { + gotoGetRecycle(); + } + }); + } + }); + } + private void gotoGetRecycle() { + MySpace mySpace = new MySpace(5,20,3); + GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3); + locked_app.setLayoutManager(gridLayoutManager); + locked_app.addItemDecoration(mySpace); + LockedAppAdapter lockedAppAdapter = new LockedAppAdapter(this,list); + locked_app.setAdapter(lockedAppAdapter); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/activity/MainActivity.java b/app/src/main/java/com/lc/myapplication/security/locks/activity/MainActivity.java new file mode 100644 index 0000000..a2ccbad --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/activity/MainActivity.java @@ -0,0 +1,125 @@ +package com.lc.myapplication.security.locks.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; + +import androidx.appcompat.app.AppCompatActivity; + +import com.lc.myapplication.security.locks.dialog.PermissionDialog; +import com.lc.myapplication.security.locks.dialog.SettingDialog; +import com.lc.myapplication.security.locks.tool.LockPremission; +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.tool.MyService; + + +public class MainActivity extends AppCompatActivity { + private LinearLayout main_lin; + private LockPremission lockPremission; + + private RelativeLayout main_re_lay1; + private RelativeLayout main_re2_lay1; + private RelativeLayout main_re2_lay2; + private ImageView main_set; + private PermissionDialog permissionDialog; + private SettingDialog settingDialog; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + initfindview(); + startService(new Intent(this, MyService.class)); + initpaperbackground(); + onMyClick(); + getPremission(); + } + + private void onMyClick() { + main_re_lay1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this,LockedAppActivity.class); + startActivity(intent); + + } + }); + main_re2_lay1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this,TestimonialsActivity.class); + startActivity(intent); + + } + }); + main_re2_lay2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this,AllAppActivity.class); + startActivity(intent); + } + }); + main_set.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getsettingDialog(); + } + }); + } + + private void getsettingDialog() { + if (settingDialog == null){ + settingDialog = new SettingDialog(this); + } + settingDialog.show(getSupportFragmentManager(),"-----settingdialog"); + } + + private void getPremission() { + boolean ispracy = LockPremission.privacysuccess(MainActivity.this); + boolean isshowon = LockPremission.showonsuccess(MainActivity.this); + if (ispracy && isshowon) { + hidedialog(); + } else { + if (permissionDialog == null) { + permissionDialog = new PermissionDialog(this); + } + permissionDialog.show(getSupportFragmentManager(), "permissiondialog"); + } + } + + private void hidedialog() { + if (LockPremission.allpermiss(this)) { + if (permissionDialog != null) { + permissionDialog.dismiss(); + } + } + } + + + private void initfindview() { + main_lin = findViewById(R.id.main_lin); + main_set = findViewById(R.id.main_set); + main_re_lay1 = findViewById(R.id.main_re_lay1); + main_re2_lay1 = findViewById(R.id.main_re2_lay1); + main_re2_lay2 = findViewById(R.id.main_re2_lay2); + } + + private void initpaperbackground() { + Window window = getWindow(); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + main_lin.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } + + @Override + protected void onResume() { + super.onResume(); + if (settingDialog != null) { + settingDialog.dismiss(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/activity/PassCodeActivity.java b/app/src/main/java/com/lc/myapplication/security/locks/activity/PassCodeActivity.java new file mode 100644 index 0000000..c54eb6e --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/activity/PassCodeActivity.java @@ -0,0 +1,130 @@ +package com.lc.myapplication.security.locks.activity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.lc.myapplication.security.locks.tool.MyTools; +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.draw.DrawInputView; +import com.lc.myapplication.security.locks.listener.InputCodeFinishListener; +import com.lc.myapplication.security.locks.value.MeValues; + +import java.util.Objects; + +public class PassCodeActivity extends AppCompatActivity { + private LinearLayout passcode_main; + private TextView passcode_name; + private TextView passcode_step; + private int type; + private String inputkey; + private DrawInputView drawInputView; + private ImageView image_back; + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_passcode_word); + type = getIntent().getIntExtra(MeValues.KEYCODE_TYPE,0); + initfindview(); + int result = 0; + int resourceId = this.getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = this.getResources().getDimensionPixelSize(resourceId); + } + Log.d("------height","------height"+result); + gotoSwitchKeyType(); + } + + private void gotoSwitchKeyType() { + if (type == 0){ + image_back.setVisibility(View.GONE); + passcode_name.setText(getString(R.string.set_passcode)); + passcode_step.setText(getString(R.string.passcode_next)); + passcode_step.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(PassCodeActivity.this,PassCodeActivity.class); + intent.putExtra(MeValues.KEYCODE_TYPE,1); + intent.putExtra(MeValues.FIRST_KEY,inputkey); + startActivity(intent); + finish(); + } + }); + }else if (type == 1){ + image_back.setVisibility(View.GONE); + passcode_name.setText(getString(R.string.setagain)); + passcode_step.setText(getString(R.string.passcode_goon)); + passcode_step.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String passkey = getIntent().getStringExtra(MeValues.FIRST_KEY); + if (Objects.equals(passkey,inputkey)){ + MyTools.setPassword(passkey); + Intent intent = new Intent(PassCodeActivity.this, MainActivity.class); + startActivity(intent); + finish(); + }else { + Toast.makeText(PassCodeActivity.this,getString(R.string.code_not_same),Toast.LENGTH_LONG).show(); + drawInputView.ClearInputCode(); + passcode_step.setVisibility(View.GONE); + } + } + }); + }else if (type == 2){ + image_back.setVisibility(View.VISIBLE); + passcode_name.setText(getString(R.string.change_passcode)); + passcode_step.setText(getString(R.string.passcode_change)); + passcode_step.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + changeKeycode(); + } + }); + image_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + drawInputView.setInputFinish(new InputCodeFinishListener() { + @Override + public void CodeFinish(String code) { + passcode_step.setVisibility(View.VISIBLE); + inputkey = code; + } + + @Override + public void CodeNotFinish(String code) { + passcode_step.setVisibility(View.GONE); + inputkey = code; + } + }); + } + + private void changeKeycode() { + MyTools.setPassword(inputkey); + Toast.makeText(PassCodeActivity.this, getString(R.string.change_success), Toast.LENGTH_SHORT).show(); + finish(); + } + + private void initfindview() { + passcode_main = findViewById(R.id.passcode_main); + passcode_name = findViewById(R.id.passcode_name); + passcode_step = findViewById(R.id.passcode_step); + drawInputView = findViewById(R.id.passcode_draw_input); + image_back = findViewById(R.id.passcode_back); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/activity/TestimonialsActivity.java b/app/src/main/java/com/lc/myapplication/security/locks/activity/TestimonialsActivity.java new file mode 100644 index 0000000..6341ce9 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/activity/TestimonialsActivity.java @@ -0,0 +1,84 @@ +package com.lc.myapplication.security.locks.activity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.Securitylocks; +import com.lc.myapplication.security.locks.adapter.LockedAppAdapter; +import com.lc.myapplication.security.locks.adapter.TuijianAdapter; +import com.lc.myapplication.security.locks.draw.MySpace; +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.MyService; +import com.lc.myapplication.security.locks.tool.MyTools; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class TestimonialsActivity extends AppCompatActivity { + + private RecyclerView tuijian_re; + private ImageView tuijian_back; + private LinearLayout tuijain_main; + private List list; + private boolean notlock = false; + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_testimonials); + tuijian_re = findViewById(R.id.tuijian_apps_view); + tuijian_back = findViewById(R.id.tuijian_back); + tuijain_main = findViewById(R.id.tuijian_main); + initbackground(); + tuijian_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + getNotLocked(); + } + + private void getNotLocked() { + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + list = SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().GetLockedApp(notlock); + runOnUiThread(new Runnable() { + @Override + public void run() { + gotoGetRecycle(); + } + }); + } + }); + } + + private void gotoGetRecycle() { + MySpace mySpace = new MySpace(5,20,3); + GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3); + tuijian_re.setLayoutManager(gridLayoutManager); + tuijian_re.addItemDecoration(mySpace); + TuijianAdapter tuijianAdapter = new TuijianAdapter(this,list); + tuijian_re.setAdapter(tuijianAdapter); + } + private void initbackground() { + Window window = getWindow(); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + tuijain_main.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lc/myapplication/security/locks/adapter/AllAppsAdapter.java b/app/src/main/java/com/lc/myapplication/security/locks/adapter/AllAppsAdapter.java new file mode 100644 index 0000000..fd67a40 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/adapter/AllAppsAdapter.java @@ -0,0 +1,102 @@ +package com.lc.myapplication.security.locks.adapter; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.databinding.AllAppsViewBinding; +import com.lc.myapplication.security.locks.listener.AppLockListener; +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.AppsManager; +import com.lc.myapplication.security.locks.tool.MyTools; + +import java.util.ArrayList; +import java.util.List; + +public class AllAppsAdapter extends RecyclerView.Adapter { + private Context mcon; + private List securityLockEntities; + + + @NonNull + @Override + public String toString() { + return super.toString(); + } + + public AllAppsAdapter(Context context, List entities) { + mcon = context; + this.securityLockEntities = entities; + } + + + @NonNull + @Override + public AllAppVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + + AllAppsViewBinding allAppsViewBinding = AllAppsViewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); + return new AllAppVH(allAppsViewBinding); + } + + + @Override + public void onBindViewHolder(@NonNull AllAppVH holder, int position) { + SecurityLockEntity entity = securityLockEntities.get(position); + String appsSign = entity.getApplsign(); + holder.allAppsViewBinding.appReName.setText(appsSign); + Drawable drawable = AppsManager.getapplogo(mcon, entity.getApppakname()); + holder.allAppsViewBinding.appReLogo.setImageDrawable(drawable); + +// boolean locksuccess = entity.isLocksuccess(); + boolean locksuccess = MyTools.getTest(entity.getApppakname()); + Log.d("----sign1", "-locksuccess" + entity.getApppakname() + "----------" + locksuccess); + holder.allAppsViewBinding.appReSwitch.setOnCheckedChangeListener(null); + if (locksuccess) { + holder.allAppsViewBinding.appReSwitch.setChecked(true); + } else { + holder.allAppsViewBinding.appReSwitch.setChecked(false); + } + holder.allAppsViewBinding.appReSwitch.setChecked(entity.isLocksuccess()); + holder.allAppsViewBinding.appReSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + MyTools.settest(entity.getApppakname(), locksuccess); + //Log.d("----sign1", "----------" + entity.getApppakname() + "-----sign1" + isChecked); + entity.setLocksuccess(isChecked); + //Log.d("----sign2", "----------" + isChecked); + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().Updataentity(entity); + // Log.d("----sign2", "----------" + entity.getApppakname() + "--------" + entity.isLocksuccess()); + } + }); + + } + }); + + } + + @Override + public int getItemCount() { + return securityLockEntities.size(); + } + + public class AllAppVH extends RecyclerView.ViewHolder { + private AllAppsViewBinding allAppsViewBinding; + + public AllAppVH(@NonNull AllAppsViewBinding itemView) { + super(itemView.getRoot()); + allAppsViewBinding = itemView; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/adapter/BottomInputadapter.java b/app/src/main/java/com/lc/myapplication/security/locks/adapter/BottomInputadapter.java new file mode 100644 index 0000000..17983cf --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/adapter/BottomInputadapter.java @@ -0,0 +1,68 @@ +package com.lc.myapplication.security.locks.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.databinding.BottomCodeViewBinding; +import com.lc.myapplication.security.locks.listener.BottomnumberClick; + +public class BottomInputadapter extends RecyclerView.Adapter { + + private String[] bottomcodes = new String[]{"1","2","3","4","5","6","7","8","9","-10","0","-12"}; + private BottomnumberClick bottomnumberClick; + @NonNull + @Override + public BottomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + BottomCodeViewBinding bottomCodeViewBinding = BottomCodeViewBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false); + return new BottomViewHolder(bottomCodeViewBinding); + } + public void setBottomClick(BottomnumberClick bottomClick){ + this.bottomnumberClick = bottomClick; + } + + + @Override + public void onBindViewHolder(@NonNull BottomViewHolder holder, int position) { + String code = bottomcodes[position]; + if (position == 9){ + holder.bottomCodeViewBinding.bottomText.setVisibility(View.GONE); + holder.bottomCodeViewBinding.bottomImage.setVisibility(View.GONE); + }else if(position == 11){ + holder.bottomCodeViewBinding.bottomText.setVisibility(View.GONE); + holder.bottomCodeViewBinding.bottomImage.setVisibility(View.VISIBLE); + }else { + holder.bottomCodeViewBinding.bottomText.setVisibility(View.VISIBLE); + holder.bottomCodeViewBinding.bottomText.setText(bottomcodes[position]); + holder.bottomCodeViewBinding.bottomImage.setVisibility(View.GONE); + } + holder.bottomCodeViewBinding.bottomText.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + bottomnumberClick.numberClick(code); + } + }); + holder.bottomCodeViewBinding.bottomImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + bottomnumberClick.delete(); + } + }); + } + + @Override + public int getItemCount() { + return 12; + } + + public class BottomViewHolder extends RecyclerView.ViewHolder { + private BottomCodeViewBinding bottomCodeViewBinding; + public BottomViewHolder(@NonNull BottomCodeViewBinding bottomViewBinding) { + super(bottomViewBinding.getRoot()); + bottomCodeViewBinding = bottomViewBinding; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/adapter/LockedAppAdapter.java b/app/src/main/java/com/lc/myapplication/security/locks/adapter/LockedAppAdapter.java new file mode 100644 index 0000000..afed485 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/adapter/LockedAppAdapter.java @@ -0,0 +1,70 @@ +package com.lc.myapplication.security.locks.adapter; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.databinding.LockedAppsViewBinding; +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.AppsManager; +import com.lc.myapplication.security.locks.tool.MyTools; + +import java.util.ArrayList; +import java.util.List; + +public class LockedAppAdapter extends RecyclerView.Adapter { + private Context mcon; + private List entityList; + public LockedAppAdapter(Context context, List entities){ + mcon = context; + entityList = entities; + } + @NonNull + @Override + public LockedAppVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + LockedAppsViewBinding lockedAppsViewBinding = LockedAppsViewBinding.inflate(LayoutInflater.from(mcon),null,false); + return new LockedAppVH(lockedAppsViewBinding); + } + + @Override + public void onBindViewHolder(@NonNull LockedAppVH holder, int position) { + SecurityLockEntity securityLockEntity = entityList.get(position); + holder.lockedAppsViewBinding.lockedReName.setText(securityLockEntity.getApplsign()); + Drawable drawable = AppsManager.getapplogo(mcon,securityLockEntity.getApppakname()); + holder.lockedAppsViewBinding.lockedReLogo.setImageDrawable(drawable); + holder.lockedAppsViewBinding.lockedReSwitch.setOnCheckedChangeListener(null); + holder.lockedAppsViewBinding.lockedReSwitch.setChecked(true); + holder.lockedAppsViewBinding.lockedReSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + securityLockEntity.setLocksuccess(isChecked); + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().Updataentity(securityLockEntity); + } + }); + } + }); + } + + @Override + public int getItemCount() { + return entityList.size(); + } + + public class LockedAppVH extends RecyclerView.ViewHolder { + private LockedAppsViewBinding lockedAppsViewBinding; + public LockedAppVH(@NonNull LockedAppsViewBinding itemView) { + super(itemView.getRoot()); + lockedAppsViewBinding = itemView; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/adapter/TopInputadapter.java b/app/src/main/java/com/lc/myapplication/security/locks/adapter/TopInputadapter.java new file mode 100644 index 0000000..eff58f2 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/adapter/TopInputadapter.java @@ -0,0 +1,58 @@ +package com.lc.myapplication.security.locks.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.databinding.TopCodeViewBinding; + +import java.util.logging.Handler; + +public class TopInputadapter extends RecyclerView.Adapter{ + + private String topcode = ""; + + @NonNull + @Override + public TopViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + TopCodeViewBinding topCodeViewBinding = TopCodeViewBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false); + return new TopViewHolder(topCodeViewBinding); + } + + @Override + public void onBindViewHolder(@NonNull TopViewHolder holder, int position) { + if (position == 0){ + holder.topCodeViewBinding.topView.setVisibility(View.GONE); + }else { + holder.topCodeViewBinding.topView.setVisibility(View.VISIBLE); + holder.topCodeViewBinding.topImageKey.setVisibility(View.VISIBLE); + } + if (position >topcode.length() - 1){ + holder.topCodeViewBinding.topImageKey.setSelected(true); + }else { + holder.topCodeViewBinding.topImageKey.setSelected(false); + } + } + + @Override + public int getItemCount() { + return 4; + } + public void upDatakey(String code){ + topcode = code; + notifyDataSetChanged(); + } + + + public class TopViewHolder extends RecyclerView.ViewHolder { + private TopCodeViewBinding topCodeViewBinding; + public TopViewHolder(@NonNull TopCodeViewBinding topViewBinding) { + super(topViewBinding.getRoot()); + topCodeViewBinding = topViewBinding; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/adapter/TuijianAdapter.java b/app/src/main/java/com/lc/myapplication/security/locks/adapter/TuijianAdapter.java new file mode 100644 index 0000000..a61266a --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/adapter/TuijianAdapter.java @@ -0,0 +1,86 @@ +package com.lc.myapplication.security.locks.adapter; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.databinding.TuijianAppsViewBinding; +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; +import com.lc.myapplication.security.locks.tool.AppsManager; +import com.lc.myapplication.security.locks.tool.MyTools; + +import java.sql.Array; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class TuijianAdapter extends RecyclerView.Adapter{ + private TuijianAppsViewBinding tuijianAppsViewBinding; + private List securityLockEntities; + private Context mycon; + public TuijianAdapter(Context context,List list){ + mycon = context; + securityLockEntities = list; + } + + @NonNull + @Override + public TuijianAppVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + tuijianAppsViewBinding = TuijianAppsViewBinding.inflate(LayoutInflater.from(mycon),null,false); + return new TuijianAppVH(tuijianAppsViewBinding); + } + + @Override + public void onBindViewHolder(@NonNull TuijianAppVH holder, int position) { + SecurityLockEntity entity = securityLockEntities.get(position); + holder.tuijianAppsViewBinding.tuijianReName.setText(entity.getApplsign()); + Drawable drawable = AppsManager.getapplogo(mycon,entity.getApppakname()); + holder.tuijianAppsViewBinding.tuijianReLogo.setImageDrawable(drawable); + boolean locksuccess = MyTools.getTest(entity.getApppakname()); + holder.tuijianAppsViewBinding.tuijianReSwitch.setOnCheckedChangeListener(null); + if (locksuccess) { + holder.tuijianAppsViewBinding.tuijianReSwitch.setChecked(true); + } else { + holder.tuijianAppsViewBinding.tuijianReSwitch.setChecked(false); + } + holder.tuijianAppsViewBinding.tuijianReSwitch.setChecked(entity.isLocksuccess()); + holder.tuijianAppsViewBinding.tuijianReSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + MyTools.settest(entity.getApppakname(), locksuccess); + entity.setLocksuccess(isChecked); + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().Updataentity(entity); + } + }); + } + }); + } + + + + + + @Override + public int getItemCount() { + return securityLockEntities.size()/2; + } + + public class TuijianAppVH extends RecyclerView.ViewHolder { + TuijianAppsViewBinding tuijianAppsViewBinding; + public TuijianAppVH(@NonNull TuijianAppsViewBinding itemView) { + super(itemView.getRoot()); + tuijianAppsViewBinding = itemView; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/dialog/PermissionDialog.java b/app/src/main/java/com/lc/myapplication/security/locks/dialog/PermissionDialog.java new file mode 100644 index 0000000..1cd8e56 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/dialog/PermissionDialog.java @@ -0,0 +1,81 @@ +package com.lc.myapplication.security.locks.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.Layout; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.FrameLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.databinding.PermissionDialogBinding; +import com.lc.myapplication.security.locks.tool.LockPremission; +import com.lc.myapplication.security.locks.tool.MyTools; + +public class PermissionDialog extends DialogFragment { + private Context mcon; + private boolean privacysuccess; + private boolean showonsuccess; + private PermissionDialogBinding permissionDialogBinding; + public PermissionDialog(Context context){ + mcon = context; + } + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + permissionDialogBinding = PermissionDialogBinding.inflate(inflater,null,false); + initdialog(); + return permissionDialogBinding.getRoot(); + } + + private void initdialog() { + Window window = getDialog().getWindow(); + WindowManager.LayoutParams wl = window.getAttributes(); + wl.gravity = Gravity.BOTTOM; + wl.height = WindowManager.LayoutParams.WRAP_CONTENT; + wl.width = WindowManager.LayoutParams.MATCH_PARENT; + window.setAttributes(wl); + if (privacysuccess && showonsuccess){ + setCancelable(true); + }else { + setCancelable(false); + } + permissionDialogBinding.dialogFra.setVisibility(View.VISIBLE); + permissionDialogBinding.dialogButton1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LockPremission.Privacypremit(mcon); + } + }); + permissionDialogBinding.dialogButton2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LockPremission.ShowOnpremit(mcon); + } + }); + } + + + @Override + public void onResume() { + super.onResume(); + frashButton(); + initdialog(); + } + + private void frashButton() { + privacysuccess = LockPremission.privacysuccess(mcon); + showonsuccess = LockPremission.showonsuccess(mcon); + permissionDialogBinding.dialogButton1.setSelected(privacysuccess); + permissionDialogBinding.dialogButton2.setSelected(showonsuccess); + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/dialog/SettingDialog.java b/app/src/main/java/com/lc/myapplication/security/locks/dialog/SettingDialog.java new file mode 100644 index 0000000..cad8e2d --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/dialog/SettingDialog.java @@ -0,0 +1,75 @@ +package com.lc.myapplication.security.locks.dialog; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.activity.PassCodeActivity; +import com.lc.myapplication.security.locks.databinding.PermissionDialogBinding; +import com.lc.myapplication.security.locks.databinding.SettingDialogBinding; +import com.lc.myapplication.security.locks.tool.LockPremission; +import com.lc.myapplication.security.locks.value.MeValues; + +public class SettingDialog extends DialogFragment { + private Context mcon; + private SettingDialogBinding settingDialogBinding; + public SettingDialog(Context context){ + mcon = context; + } + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + settingDialogBinding = SettingDialogBinding.inflate(inflater,null,false); + initdialog(); + return settingDialogBinding.getRoot(); + } + + private void initdialog() { + Window window = getDialog().getWindow(); + window.setBackgroundDrawableResource(R.drawable.setting_dg); + window.getDecorView().setPadding(32, 20, 32, 60); + WindowManager.LayoutParams wl = window.getAttributes(); + wl.gravity = Gravity.BOTTOM; + wl.height = WindowManager.LayoutParams.WRAP_CONTENT; + wl.width = WindowManager.LayoutParams.MATCH_PARENT; + window.setAttributes(wl); + setCancelable(true); + settingDialogBinding.setdialogFra.setVisibility(View.VISIBLE); + settingDialogBinding.setDialogChange.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), PassCodeActivity.class); + intent.putExtra(MeValues.KEYCODE_TYPE, 2); + startActivity(intent); + } + }); + settingDialogBinding.setDialogPrivacy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url = getString(R.string.url_privacy); + Intent intent2 = new Intent(Intent.ACTION_VIEW); + intent2.setData(Uri.parse(url)); + startActivity(intent2); + } + }); + } + + + @Override + public void onResume() { + super.onResume(); + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/draw/DrawInputView.java b/app/src/main/java/com/lc/myapplication/security/locks/draw/DrawInputView.java new file mode 100644 index 0000000..90a9030 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/draw/DrawInputView.java @@ -0,0 +1,90 @@ +package com.lc.myapplication.security.locks.draw; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.adapter.BottomInputadapter; +import com.lc.myapplication.security.locks.adapter.TopInputadapter; +import com.lc.myapplication.security.locks.listener.BottomnumberClick; +import com.lc.myapplication.security.locks.listener.InputCodeFinishListener; + + +public class DrawInputView extends FrameLayout { + private RecyclerView passcode_top; + private RecyclerView passcode_bottom; + private Context mcon; + private StringBuilder my_code_top; + private TopInputadapter topInputadapter; + private BottomInputadapter bottomInputadapter; + private InputCodeFinishListener inputCodeFinishListener; + + public DrawInputView(Context context) { + super(context); + initDrawView(context); + } + public void setInputFinish(InputCodeFinishListener codeFinish){ + this.inputCodeFinishListener = codeFinish; + } + private void initDrawView(Context context) { + mcon = context; + my_code_top = new StringBuilder(); + View view = LayoutInflater.from(context).inflate(R.layout.draw_input_view,null); + passcode_top = view.findViewById(R.id.draw_top); + passcode_bottom = view.findViewById(R.id.draw_bottom); + addView(view); + + topInputadapter = new TopInputadapter(); + passcode_top.setAdapter(topInputadapter); + passcode_top.setLayoutManager(new LinearLayoutManager(mcon,RecyclerView.HORIZONTAL,false)); + + bottomInputadapter = new BottomInputadapter(); + passcode_bottom.setAdapter(bottomInputadapter); + passcode_bottom.setLayoutManager(new GridLayoutManager(mcon,3)); + + bottomInputadapter.setBottomClick(new BottomnumberClick() { + @Override + public void numberClick(String number) { + if (my_code_top.length() > 4){ + my_code_top.delete(0,my_code_top.length()); + }else { + my_code_top.append(number); + topInputadapter.upDatakey(my_code_top.toString()); + if (my_code_top.length() == 4){ + inputCodeFinishListener.CodeFinish(my_code_top.toString()); + }else { + inputCodeFinishListener.CodeNotFinish(my_code_top.toString()); + } + } + } + + @Override + public void delete() { + if (my_code_top.length() >= 1){ + my_code_top.deleteCharAt(my_code_top.length()-1); + } + topInputadapter.upDatakey(my_code_top.toString()); + if (my_code_top.length() < 4){ + inputCodeFinishListener.CodeNotFinish(my_code_top.toString()); + } + } + }); + } + + public DrawInputView(Context context, AttributeSet attrs) { + super(context, attrs); + initDrawView(context); + } + public void ClearInputCode(){ + my_code_top.delete(0,my_code_top.length()); + topInputadapter.upDatakey(my_code_top.toString()); + } + +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/draw/MySpace.java b/app/src/main/java/com/lc/myapplication/security/locks/draw/MySpace.java new file mode 100644 index 0000000..fea12f9 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/draw/MySpace.java @@ -0,0 +1,53 @@ +package com.lc.myapplication.security.locks.draw; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +public class MySpace extends RecyclerView.ItemDecoration { + private int ex_space = 0; + private int h_space = 0; + private int v_space = 0; + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + int position = parent.getChildAdapterPosition(view); + int spanSize = 1; + int spanIndex = 0; + int spanCount = 1; + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager layoutManager1 = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = layoutManager1.getSpanCount();//设置每行排列的个数 + spanSize = layoutManager1.getSpanSizeLookup().getSpanSize(position);//每个item的跨度大小 + spanIndex = layoutParams.getSpanIndex();//放在给定位之前的每个项目,确定每个跨度 + + } + + + if (spanSize == spanCount) { + outRect.left = v_space + ex_space; + outRect.right = v_space + ex_space; + outRect.bottom = h_space; + } else { + int itemAllSpacing = (v_space * (spanCount + 1) + ex_space * 2) / spanCount; + int left = v_space * (spanIndex + 1) - itemAllSpacing * spanIndex + ex_space; + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h_space; + } + + } + + public MySpace(int ex_space, int h_space, int v_space) { + this.ex_space = ex_space; + this.h_space = h_space; + this.v_space = v_space; + + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/listener/AppLockListener.java b/app/src/main/java/com/lc/myapplication/security/locks/listener/AppLockListener.java new file mode 100644 index 0000000..c5b39de --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/listener/AppLockListener.java @@ -0,0 +1,5 @@ +package com.lc.myapplication.security.locks.listener; + +public interface AppLockListener { + void SendMessage(String msg); +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/listener/BottomnumberClick.java b/app/src/main/java/com/lc/myapplication/security/locks/listener/BottomnumberClick.java new file mode 100644 index 0000000..6b0e05e --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/listener/BottomnumberClick.java @@ -0,0 +1,6 @@ +package com.lc.myapplication.security.locks.listener; + +public interface BottomnumberClick { + void numberClick(String number); + void delete(); +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/listener/InputCodeFinishListener.java b/app/src/main/java/com/lc/myapplication/security/locks/listener/InputCodeFinishListener.java new file mode 100644 index 0000000..7e7ccaa --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/listener/InputCodeFinishListener.java @@ -0,0 +1,6 @@ +package com.lc.myapplication.security.locks.listener; + +public interface InputCodeFinishListener { + void CodeFinish(String code); + void CodeNotFinish(String code); +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockDAO.java b/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockDAO.java new file mode 100644 index 0000000..231b439 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockDAO.java @@ -0,0 +1,30 @@ +package com.lc.myapplication.security.locks.lockroom; + +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + + +@Dao +public interface SecurityLockDAO { + @Query("select * from lock_table where apppakname=:apppakname") + SecurityLockEntity QueryPackname(String apppakname); + + @Query("select * from lock_table where apppakname LIKE :apppakname") + SecurityLockEntity QueryByInputName(String apppakname); + @Query("delete from lock_table where apppakname=:apppakname") + void DeleteEntityByName(String apppakname); + @Insert(onConflict = OnConflictStrategy.IGNORE) + void InsertSecurityEntity(SecurityLockEntity securityLockEntity); + @Query("select * from lock_table") + List GetAllapp(); + @Query("select * from lock_table where locksuccess=:locksuccess") + List GetLockedApp(boolean locksuccess); + @Update + void Updataentity(SecurityLockEntity entity); + +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockDataBase.java b/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockDataBase.java new file mode 100644 index 0000000..e0db9a2 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockDataBase.java @@ -0,0 +1,22 @@ +package com.lc.myapplication.security.locks.lockroom; + +import androidx.room.Database; +import androidx.room.Entity; +import androidx.room.Room; +import androidx.room.RoomDatabase; + +import com.lc.myapplication.security.locks.value.MeValues; + +@Database(entities = {SecurityLockEntity.class}, version = 1,exportSchema = false) +public abstract class SecurityLockDataBase extends RoomDatabase { + private static SecurityLockDataBase securityLockDataBase; + public abstract SecurityLockDAO getsecurityLockDAO(); + public static synchronized SecurityLockDataBase getSecurityLockDataBase(){ + if (securityLockDataBase == null){ + securityLockDataBase = Room.databaseBuilder(MeValues.lock,SecurityLockDataBase.class,MeValues.DB_NAME).build(); + + } + return securityLockDataBase; + } + +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockEntity.java b/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockEntity.java new file mode 100644 index 0000000..1717ee2 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/lockroom/SecurityLockEntity.java @@ -0,0 +1,57 @@ +package com.lc.myapplication.security.locks.lockroom; + +import androidx.room.Entity; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +import com.lc.myapplication.security.locks.value.MeValues; + +@Entity(tableName = MeValues.TABLE_NAME,indices = {@Index(value = {"apppakname"},unique = true)}) +public class SecurityLockEntity { + @PrimaryKey(autoGenerate = true) + private int appid; + private String apppakname; + private String applsign; + private String applogo; + private boolean locksuccess; + + public int getAppid() { + return appid; + } + + public void setAppid(int appid) { + this.appid = appid; + } + + public String getApppakname() { + return apppakname; + } + + public void setApppakname(String apppakname) { + this.apppakname = apppakname; + } + + public String getApplsign() { + return applsign; + } + + public void setApplsign(String applsign) { + this.applsign = applsign; + } + + public String getApplogo() { + return applogo; + } + + public void setApplogo(String applogo) { + this.applogo = applogo; + } + + public boolean isLocksuccess() { + return locksuccess; + } + + public void setLocksuccess(boolean locksuccess) { + this.locksuccess = locksuccess; + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/tool/AppsManager.java b/app/src/main/java/com/lc/myapplication/security/locks/tool/AppsManager.java new file mode 100644 index 0000000..8b07c48 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/tool/AppsManager.java @@ -0,0 +1,97 @@ +package com.lc.myapplication.security.locks.tool; + +import android.annotation.SuppressLint; +import android.app.Service; +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.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; +import android.os.UserManager; +import android.os.Vibrator; +import android.text.TextUtils; +import android.util.ArraySet; +import android.util.Log; + +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class AppsManager { + + public static Set queryapps(Context context){ + Set entitieslist = new ArraySet<>();//set保证存储元素不重复 + Intent intent = new Intent(Intent.ACTION_MAIN,null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + PackageManager packageManager = context.getPackageManager(); + List resolveInfoslist = packageManager.queryIntentActivities(intent,PackageManager.MATCH_ALL); + for (ResolveInfo info : resolveInfoslist){ + String packname = info.activityInfo.packageName; + if (packname == context.getPackageName()){ + continue; + } + SecurityLockEntity securityLockEntity = new SecurityLockEntity(); + securityLockEntity.setApppakname(packname); + try { + ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packname,PackageManager.GET_UNINSTALLED_PACKAGES); + CharSequence applicationLabel = packageManager.getApplicationLabel(applicationInfo);//获取应用程序的名称 + securityLockEntity.setApplsign(applicationLabel.toString()); + entitieslist.add(securityLockEntity); + } catch (PackageManager.NameNotFoundException e) { + throw new RuntimeException(e); + } + } + return entitieslist; + } + public static void insertEntity(Set list) { + Log.d("--------size","----size"+list.size()); + MyTools.RUNIO(new Runnable() { + @Override + public void run() { + for (SecurityLockEntity entityApp : list) { + SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().InsertSecurityEntity(entityApp); + } + } + }); + } + public static void vir(Context context){ + Vibrator vibrator = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE); + vibrator.vibrate(300); + } + public static Drawable getapplogo(Context context,String packname){ + PackageManager packageManager = context.getPackageManager(); + Drawable appslogo; + try { + appslogo = packageManager.getApplicationIcon(packageManager.getApplicationInfo(packname,PackageManager.GET_UNINSTALLED_PACKAGES)); + } catch (PackageManager.NameNotFoundException e) { + return null; + } + return appslogo; + } + public static String appsusage(Context context){ + UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); + long lastTime = System.currentTimeMillis(); + long startTime = lastTime - 10000; + String result = ""; + UsageEvents.Event event = new UsageEvents.Event(); + UsageEvents usageEvents = usageStatsManager.queryEvents(startTime, lastTime); + while (usageEvents.hasNextEvent()) { + usageEvents.getNextEvent(event); + if (event.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) { + result = event.getPackageName(); + } + } + if (!TextUtils.isEmpty(result)) { + return result; + } else { + return ""; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/tool/LockAction.java b/app/src/main/java/com/lc/myapplication/security/locks/tool/LockAction.java new file mode 100644 index 0000000..8c99f21 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/tool/LockAction.java @@ -0,0 +1,90 @@ +package com.lc.myapplication.security.locks.tool; + +import android.content.Context; +import android.graphics.PixelFormat; +import android.os.Build; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.Toast; + +import com.lc.myapplication.security.locks.R; +import com.lc.myapplication.security.locks.databinding.MyServiceViewBinding; +import com.lc.myapplication.security.locks.listener.InputCodeFinishListener; + +public class LockAction { + private Context context; + + private MyServiceViewBinding myServiceViewBinding; + private WindowManager manager; + + private static LockAction myIntentSerivice; + private WindowManager.LayoutParams layParams; + + public LockAction(Context context) { + this.context = context; + manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + myServiceViewBinding = MyServiceViewBinding.inflate(LayoutInflater.from(context), null, false); + setLocation(); + myServiceViewBinding.passcodeDrawInput.setInputFinish(new InputCodeFinishListener() { + @Override + public void CodeFinish(String code) { + String curPin = MyTools.getPassword(); + if (curPin.equals(code)) { + HideLockView(); + } else { + Toast.makeText(context, context.getString(R.string.not_key), Toast.LENGTH_SHORT).show(); + AppsManager.vir(context); + myServiceViewBinding.passcodeDrawInput.ClearInputCode(); + + } + } + + @Override + public void CodeNotFinish(String code) { + + } + }); + } + + private void setLocation() { + int type = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + } else { + type = WindowManager.LayoutParams.TYPE_PHONE; + } + DisplayMetrics displayMetrics = new DisplayMetrics(); + manager.getDefaultDisplay().getMetrics(displayMetrics); + int flag = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | + WindowManager.LayoutParams.FLAG_FULLSCREEN | + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | + WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; + layParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, type, flag, PixelFormat.RGBA_8888); + + } + + public static LockAction getActionInstance(Context context) { + if (myIntentSerivice == null) { + myIntentSerivice = new LockAction(context); + } + return myIntentSerivice; + } + + public void showLockView() { + myServiceViewBinding.passcodeDrawInput.ClearInputCode(); + if (myServiceViewBinding.getRoot().getWindowToken() == null) { + manager.addView(myServiceViewBinding.getRoot(), layParams); + } + + } + + + public void HideLockView() { + if (myServiceViewBinding.getRoot().getWindowToken() != null) { + manager.removeView(myServiceViewBinding.getRoot()); + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/tool/LockPremission.java b/app/src/main/java/com/lc/myapplication/security/locks/tool/LockPremission.java new file mode 100644 index 0000000..dd2773a --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/tool/LockPremission.java @@ -0,0 +1,39 @@ +package com.lc.myapplication.security.locks.tool; + +import android.app.AppOpsManager; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.provider.Settings; + +import com.lc.myapplication.security.locks.value.MeValues; + +public class LockPremission { + private static AppOpsManager appOpsManager = (AppOpsManager) MeValues.lock.getSystemService(Context.APP_OPS_SERVICE); + public static void Privacypremit(Context context){ + Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); + context.startActivity(intent); + } + public static void ShowOnpremit(Context context){ + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); + context.startActivity(intent); + } + public static boolean privacysuccess(Context context){ + int mode = appOpsManager.checkOpNoThrow("android:get_usage_stats", android.os.Process.myUid(), context.getPackageName());//检查是否有某项权限 + if(mode == AppOpsManager.MODE_ALLOWED){ + return true; + } + return false; + } + public static boolean showonsuccess(Context context){ + if (Settings.canDrawOverlays(context)){ + return true; + } + return false; + } + public static boolean allpermiss(Context context){ + boolean privacy = LockPremission.privacysuccess(context); + boolean showon = LockPremission.showonsuccess(context); + return privacy && showon; + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/tool/MyService.java b/app/src/main/java/com/lc/myapplication/security/locks/tool/MyService.java new file mode 100644 index 0000000..bbd2a9b --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/tool/MyService.java @@ -0,0 +1,66 @@ +package com.lc.myapplication.security.locks.tool; + +import android.app.IntentService; +import android.content.Intent; +import android.util.Log; + +import androidx.annotation.Nullable; + + +import com.lc.myapplication.security.locks.lockroom.SecurityLockDataBase; +import com.lc.myapplication.security.locks.lockroom.SecurityLockEntity; + +import java.util.Objects; + +public class MyService extends IntentService { + private String lastLockPackName = ""; + private LockAction lockAction; + private Boolean isLock = true; + + public MyService() { + super("name"); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + } + + @Override + protected void onHandleIntent(@Nullable Intent intent) { + lockAction = LockAction.getActionInstance(this); + while (isLock) { + String packageName = AppsManager.appsusage(this); + if (Objects.equals(packageName, "")) { + continue; + } + SecurityLockEntity securityLockEntity = SecurityLockDataBase.getSecurityLockDataBase().getsecurityLockDAO().QueryPackname(packageName); + if (securityLockEntity == null) { + lockAction.HideLockView(); + lastLockPackName = packageName; + //Log.e("--------","---securityLockEntity"+null); + continue; + } + if (Objects.equals(packageName, lastLockPackName)) { + //Log.e("--------","---22222222222"); + continue; + } + if (securityLockEntity.isLocksuccess()) { + // Log.e("--------","---11111111111"); + if (!Objects.equals(packageName, lastLockPackName)) { + MyTools.onRunMain(() -> { + lockAction.showLockView(); + }); + } else { + } + } else { + /// Log.e("--------","---3333333333333"); + MyTools.onRunMain(() -> { + lockAction.HideLockView(); + }); + } + lastLockPackName = packageName; + } + } +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/tool/MyTools.java b/app/src/main/java/com/lc/myapplication/security/locks/tool/MyTools.java new file mode 100644 index 0000000..149c2b7 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/tool/MyTools.java @@ -0,0 +1,64 @@ +package com.lc.myapplication.security.locks.tool; + +import android.app.Service; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Handler; +import android.os.Looper; + +import com.lc.myapplication.security.locks.value.MeValues; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class MyTools { + private static SharedPreferences sharedPreferences; + private static SharedPreferences.Editor editor; + private static ExecutorService executorService; + private static Handler myHandler; + + public static void init(Context context){ + if (sharedPreferences == null){ + sharedPreferences = context.getSharedPreferences(MeValues.SHARE_NAME, Service.MODE_PRIVATE); + } + if(editor == null){ + editor = sharedPreferences.edit(); + } + } + public static void setPassword(String pin){ + editor.putString(MeValues.sh_password,pin); + editor.apply(); + } + + public static void settest(String key,boolean value){ + editor.putBoolean(key,value); + editor.apply(); + } + public static boolean getTest(String key){ + return sharedPreferences.getBoolean(key,false); + } + + public static String getPassword(){ + return sharedPreferences.getString(MeValues.sh_password,""); + } + + public static ExecutorService getExecutorService(){ + if (executorService == null){ + executorService = Executors.newSingleThreadExecutor(); + } + return executorService; + } + public static void RUNIO(Runnable runnable){ + getExecutorService().execute(runnable); + } + private static android.os.Handler getMyHandler() { + if (myHandler == null) { + myHandler = new Handler(Looper.getMainLooper()); + } + return myHandler; + } + public static void onRunMain(Runnable runnable){ + getMyHandler().post(runnable); + } + +} diff --git a/app/src/main/java/com/lc/myapplication/security/locks/value/MeValues.java b/app/src/main/java/com/lc/myapplication/security/locks/value/MeValues.java new file mode 100644 index 0000000..0f12805 --- /dev/null +++ b/app/src/main/java/com/lc/myapplication/security/locks/value/MeValues.java @@ -0,0 +1,14 @@ +package com.lc.myapplication.security.locks.value; + +import com.lc.myapplication.security.locks.Securitylocks; + +public class MeValues { + public static Securitylocks lock; + public static final String TABLE_NAME = "lock_table"; + public static final String SHARE_NAME = "share_name"; + public static final String DB_NAME = "db_name"; + + public static String KEYCODE_TYPE = "password_type"; + public static String sh_password = "share_password"; + public static final String FIRST_KEY = "first key"; +} diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_back_bg.xml b/app/src/main/res/drawable/image_back_bg.xml new file mode 100644 index 0000000..db9899d --- /dev/null +++ b/app/src/main/res/drawable/image_back_bg.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_back_src.xml b/app/src/main/res/drawable/image_back_src.xml new file mode 100644 index 0000000..4bb7d24 --- /dev/null +++ b/app/src/main/res/drawable/image_back_src.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/input_bg.xml b/app/src/main/res/drawable/input_bg.xml new file mode 100644 index 0000000..e1064db --- /dev/null +++ b/app/src/main/res/drawable/input_bg.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/input_delete_src.xml b/app/src/main/res/drawable/input_delete_src.xml new file mode 100644 index 0000000..6fe3fbf --- /dev/null +++ b/app/src/main/res/drawable/input_delete_src.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/lock.xml b/app/src/main/res/drawable/lock.xml new file mode 100644 index 0000000..397b8f1 --- /dev/null +++ b/app/src/main/res/drawable/lock.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/locked_recycle_bg.xml b/app/src/main/res/drawable/locked_recycle_bg.xml new file mode 100644 index 0000000..c60d4a9 --- /dev/null +++ b/app/src/main/res/drawable/locked_recycle_bg.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_dialog_button_bg.xml b/app/src/main/res/drawable/main_dialog_button_bg.xml new file mode 100644 index 0000000..1051b34 --- /dev/null +++ b/app/src/main/res/drawable/main_dialog_button_bg.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/main_dialog_button_bg2.xml b/app/src/main/res/drawable/main_dialog_button_bg2.xml new file mode 100644 index 0000000..8a4272d --- /dev/null +++ b/app/src/main/res/drawable/main_dialog_button_bg2.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_re1.xml b/app/src/main/res/drawable/main_re1.xml new file mode 100644 index 0000000..e312712 --- /dev/null +++ b/app/src/main/res/drawable/main_re1.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_re_allapp_src.xml b/app/src/main/res/drawable/main_re_allapp_src.xml new file mode 100644 index 0000000..90553f4 --- /dev/null +++ b/app/src/main/res/drawable/main_re_allapp_src.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/main_re_ig1.xml b/app/src/main/res/drawable/main_re_ig1.xml new file mode 100644 index 0000000..729a3fb --- /dev/null +++ b/app/src/main/res/drawable/main_re_ig1.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_re_src.xml b/app/src/main/res/drawable/main_re_src.xml new file mode 100644 index 0000000..202332d --- /dev/null +++ b/app/src/main/res/drawable/main_re_src.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/app/src/main/res/drawable/main_re_tuijian_src.xml b/app/src/main/res/drawable/main_re_tuijian_src.xml new file mode 100644 index 0000000..bcd8d27 --- /dev/null +++ b/app/src/main/res/drawable/main_re_tuijian_src.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/app/src/main/res/drawable/main_set_bg.xml b/app/src/main/res/drawable/main_set_bg.xml new file mode 100644 index 0000000..b76105a --- /dev/null +++ b/app/src/main/res/drawable/main_set_bg.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/mian_re2_bg.xml b/app/src/main/res/drawable/mian_re2_bg.xml new file mode 100644 index 0000000..97d25d7 --- /dev/null +++ b/app/src/main/res/drawable/mian_re2_bg.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ok_bg.xml b/app/src/main/res/drawable/ok_bg.xml new file mode 100644 index 0000000..bb5764d --- /dev/null +++ b/app/src/main/res/drawable/ok_bg.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_app_lock.xml b/app/src/main/res/drawable/selector_app_lock.xml new file mode 100644 index 0000000..e5d6aac --- /dev/null +++ b/app/src/main/res/drawable/selector_app_lock.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_dialog_buttonbg.xml b/app/src/main/res/drawable/selector_dialog_buttonbg.xml new file mode 100644 index 0000000..22762ee --- /dev/null +++ b/app/src/main/res/drawable/selector_dialog_buttonbg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/set_bg.xml b/app/src/main/res/drawable/set_bg.xml new file mode 100644 index 0000000..04e7a7a --- /dev/null +++ b/app/src/main/res/drawable/set_bg.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/set_src.xml b/app/src/main/res/drawable/set_src.xml new file mode 100644 index 0000000..e606b0f --- /dev/null +++ b/app/src/main/res/drawable/set_src.xml @@ -0,0 +1,30 @@ + + + + + + diff --git a/app/src/main/res/drawable/set_src1.xml b/app/src/main/res/drawable/set_src1.xml new file mode 100644 index 0000000..1193bff --- /dev/null +++ b/app/src/main/res/drawable/set_src1.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/drawable/set_src2.xml b/app/src/main/res/drawable/set_src2.xml new file mode 100644 index 0000000..710508a --- /dev/null +++ b/app/src/main/res/drawable/set_src2.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/app/src/main/res/drawable/setting_dg.xml b/app/src/main/res/drawable/setting_dg.xml new file mode 100644 index 0000000..4e37654 --- /dev/null +++ b/app/src/main/res/drawable/setting_dg.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/thumb_pass.xml b/app/src/main/res/drawable/thumb_pass.xml new file mode 100644 index 0000000..107f50b --- /dev/null +++ b/app/src/main/res/drawable/thumb_pass.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/thumb_selector.xml b/app/src/main/res/drawable/thumb_selector.xml new file mode 100644 index 0000000..c3ff346 --- /dev/null +++ b/app/src/main/res/drawable/thumb_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/top_code_selector.xml b/app/src/main/res/drawable/top_code_selector.xml new file mode 100644 index 0000000..6769468 --- /dev/null +++ b/app/src/main/res/drawable/top_code_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/top_current.xml b/app/src/main/res/drawable/top_current.xml new file mode 100644 index 0000000..6109a84 --- /dev/null +++ b/app/src/main/res/drawable/top_current.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/top_last.xml b/app/src/main/res/drawable/top_last.xml new file mode 100644 index 0000000..253e1f9 --- /dev/null +++ b/app/src/main/res/drawable/top_last.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/track_current.xml b/app/src/main/res/drawable/track_current.xml new file mode 100644 index 0000000..d9b1a26 --- /dev/null +++ b/app/src/main/res/drawable/track_current.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/track_pass.xml b/app/src/main/res/drawable/track_pass.xml new file mode 100644 index 0000000..eb00868 --- /dev/null +++ b/app/src/main/res/drawable/track_pass.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/track_selector.xml b/app/src/main/res/drawable/track_selector.xml new file mode 100644 index 0000000..a9f0e1d --- /dev/null +++ b/app/src/main/res/drawable/track_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/unlock.xml b/app/src/main/res/drawable/unlock.xml new file mode 100644 index 0000000..411241b --- /dev/null +++ b/app/src/main/res/drawable/unlock.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_all_app.xml b/app/src/main/res/layout/activity_all_app.xml new file mode 100644 index 0000000..1a43fe2 --- /dev/null +++ b/app/src/main/res/layout/activity_all_app.xml @@ -0,0 +1,40 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_into.xml b/app/src/main/res/layout/activity_into.xml new file mode 100644 index 0000000..4959b2e --- /dev/null +++ b/app/src/main/res/layout/activity_into.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_locked_app.xml b/app/src/main/res/layout/activity_locked_app.xml new file mode 100644 index 0000000..655f414 --- /dev/null +++ b/app/src/main/res/layout/activity_locked_app.xml @@ -0,0 +1,40 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..474c23b --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_passcode_word.xml b/app/src/main/res/layout/activity_passcode_word.xml new file mode 100644 index 0000000..fd79930 --- /dev/null +++ b/app/src/main/res/layout/activity_passcode_word.xml @@ -0,0 +1,46 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_testimonials.xml b/app/src/main/res/layout/activity_testimonials.xml new file mode 100644 index 0000000..baaa191 --- /dev/null +++ b/app/src/main/res/layout/activity_testimonials.xml @@ -0,0 +1,40 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/all_apps_view.xml b/app/src/main/res/layout/all_apps_view.xml new file mode 100644 index 0000000..8e5a4cc --- /dev/null +++ b/app/src/main/res/layout/all_apps_view.xml @@ -0,0 +1,30 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_code_view.xml b/app/src/main/res/layout/bottom_code_view.xml new file mode 100644 index 0000000..fb763e6 --- /dev/null +++ b/app/src/main/res/layout/bottom_code_view.xml @@ -0,0 +1,23 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/draw_input_view.xml b/app/src/main/res/layout/draw_input_view.xml new file mode 100644 index 0000000..8b15ecb --- /dev/null +++ b/app/src/main/res/layout/draw_input_view.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/locked_apps_view.xml b/app/src/main/res/layout/locked_apps_view.xml new file mode 100644 index 0000000..f6c35b0 --- /dev/null +++ b/app/src/main/res/layout/locked_apps_view.xml @@ -0,0 +1,30 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/my_service_view.xml b/app/src/main/res/layout/my_service_view.xml new file mode 100644 index 0000000..c1c8053 --- /dev/null +++ b/app/src/main/res/layout/my_service_view.xml @@ -0,0 +1,37 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/permission_dialog.xml b/app/src/main/res/layout/permission_dialog.xml new file mode 100644 index 0000000..ea7f46c --- /dev/null +++ b/app/src/main/res/layout/permission_dialog.xml @@ -0,0 +1,50 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/setting_dialog.xml b/app/src/main/res/layout/setting_dialog.xml new file mode 100644 index 0000000..23fe4b5 --- /dev/null +++ b/app/src/main/res/layout/setting_dialog.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/top_code_view.xml b/app/src/main/res/layout/top_code_view.xml new file mode 100644 index 0000000..0467a07 --- /dev/null +++ b/app/src/main/res/layout/top_code_view.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/tuijian_apps_view.xml b/app/src/main/res/layout/tuijian_apps_view.xml new file mode 100644 index 0000000..eaf142c --- /dev/null +++ b/app/src/main/res/layout/tuijian_apps_view.xml @@ -0,0 +1,30 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/dialog_bg.png b/app/src/main/res/mipmap-hdpi/dialog_bg.png new file mode 100644 index 0000000..699bc01 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/dialog_bg.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-hdpi/into.png b/app/src/main/res/mipmap-hdpi/into.png new file mode 100644 index 0000000..9f0b794 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/into.png differ diff --git a/app/src/main/res/mipmap-hdpi/logo.png b/app/src/main/res/mipmap-hdpi/logo.png new file mode 100644 index 0000000..eeeaefd Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/logo.png differ diff --git a/app/src/main/res/mipmap-hdpi/main_bg.png b/app/src/main/res/mipmap-hdpi/main_bg.png new file mode 100644 index 0000000..83182d6 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/main_bg.png differ diff --git a/app/src/main/res/mipmap-hdpi/main_bg2.png b/app/src/main/res/mipmap-hdpi/main_bg2.png new file mode 100644 index 0000000..0ac1e99 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/main_bg2.png differ diff --git a/app/src/main/res/mipmap-hdpi/main_fra_bg.png b/app/src/main/res/mipmap-hdpi/main_fra_bg.png new file mode 100644 index 0000000..d633b54 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/main_fra_bg.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..d061254 --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..cd7d6c4 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #FF000000 + #FFFFFFFF + #E4FCFD + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..8ce5ffa --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,28 @@ + + App Lock Master + apps_name + Hello + protect your privacy + App lock + All locked applications + Recommend + All app + App lock + Set passcode + Confirm password + Please enter password + Change password + next + go on + change + The password is not the same twice + Change to success + Permissions
To use App Lock properly, please allow the following + Step 1 + Step 2 + Settings + Change password + Privacy Policy + Sorry,The password is not right! + https://sites.google.com/view/page-privacy-policy- + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..1dc8709 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..fa0f996 --- /dev/null +++ b/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..9ee9997 --- /dev/null +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/com/lc/myapplication/security/locks/ExampleUnitTest.java b/app/src/test/java/com/lc/myapplication/security/locks/ExampleUnitTest.java new file mode 100644 index 0000000..5ff4131 --- /dev/null +++ b/app/src/test/java/com/lc/myapplication/security/locks/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.lc.myapplication.security.locks; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..a04e5ba --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,5 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + alias(libs.plugins.android.application) apply false + id("org.jetbrains.kotlin.android") version "1.9.0" apply false +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..4387edc --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..16d6c35 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,22 @@ +[versions] +agp = "8.4.0" +junit = "4.13.2" +junitVersion = "1.2.1" +espressoCore = "3.6.1" +appcompat = "1.7.0" +material = "1.12.0" +activity = "1.9.0" +constraintlayout = "2.1.4" + +[libraries] +junit = { group = "junit", name = "junit", version.ref = "junit" } +ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } +constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0039220 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jul 19 11:36:40 CST 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..1a00c1b --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,25 @@ +pluginManagement { + repositories { + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven("https://jitpack.io") + } +} + +rootProject.name = "Security Locks" +include(":app") + \ No newline at end of file