Skip to content

Commit

Permalink
Merge branch 'zjyzip:main' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
wfvw126 authored May 7, 2024
2 parents 84ec63d + 0a90fb7 commit 13bac12
Show file tree
Hide file tree
Showing 61 changed files with 1,374 additions and 1,343 deletions.
12 changes: 11 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,17 @@ android {
}
}

sourceSets {
getByName("main") {
java.srcDirs("src/main/java", "src/main/aidl")
aidl.srcDirs("src/main/aidl")
assets.srcDirs("src/main/assets")
res.srcDirs("src/main/res")
}
}

buildFeatures {
aidl = true
viewBinding = true
buildConfig = true
}
Expand Down Expand Up @@ -153,5 +163,5 @@ dependencies {
annotationProcessor("com.github.bumptech.glide:compiler:4.16.0")
implementation("com.microsoft.appcenter:appcenter-analytics:5.0.4")
implementation("com.microsoft.appcenter:appcenter-crashes:5.0.4")

debugImplementation("com.squareup.leakcanary:leakcanary-android:2.13")
}
22 changes: 15 additions & 7 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />

<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />

<permission
android:name="com.close.hook.ads.provider.READ_WRITE"
android:name="com.close.hook.ads.READ_WRITE"
android:protectionLevel="normal" />
<permission
android:name="com.close.hook.ads.provider.WRITE_DATABASE"
android:name="com.close.hook.ads.WRITE_DATABASE"
android:protectionLevel="normal" />

<application
Expand All @@ -23,11 +27,15 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">

<provider
android:name=".provider.UrlContentProvider"
android:authorities="com.close.hook.ads.provider"
<service
android:name=".service.AidlService"
android:enabled="true"
android:exported="true" />
android:exported="true"
android:foregroundServiceType="dataSync">
<intent-filter>
<action android:name="com.close.hook.ads.service.AidlService" />
</intent-filter>
</service>

<activity
android:name=".ui.activity.RequestInfoActivity"
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/aidl/com/close/hook/ads/BlockedBean.aidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.close.hook.ads;

parcelable BlockedBean;
30 changes: 30 additions & 0 deletions app/src/main/aidl/com/close/hook/ads/BlockedBean.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.close.hook.ads

import android.os.Parcel
import android.os.Parcelable
import java.io.Serializable

data class BlockedBean(
val isBlocked: Boolean,
val type: String?,
val value: String?
) : Parcelable, Serializable {
constructor(parcel: Parcel) : this(
parcel.readByte() != 0.toByte(),
parcel.readString(),
parcel.readString()
)

override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeByte(if (isBlocked) 1 else 0)
parcel.writeString(type)
parcel.writeString(value)
}

override fun describeContents(): Int = 0

companion object CREATOR : Parcelable.Creator<BlockedBean> {
override fun createFromParcel(parcel: Parcel): BlockedBean = BlockedBean(parcel)
override fun newArray(size: Int): Array<BlockedBean?> = arrayOfNulls(size)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// IBlockedStatusProvider.aidl
package com.close.hook.ads;

import android.os.ParcelFileDescriptor;

interface IBlockedStatusProvider {
ParcelFileDescriptor getData(String type, String value);
}
3 changes: 3 additions & 0 deletions app/src/main/java/com/close/hook/ads/CloseApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@ class CloseApplication : Application() {

override fun onCreate() {
super.onCreate()

closeApp = this

AppCenter.start(
this, "621cdb49-4473-44d3-a8f8-e76f28ba43d7",
Analytics::class.java, Crashes::class.java
)

AppCompatDelegate.setDefaultNightMode(darkTheme)

LocaleDelegate.defaultLocale = getLocale(PrefManager.language)
Expand Down
17 changes: 12 additions & 5 deletions app/src/main/java/com/close/hook/ads/data/DataSource.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.close.hook.ads.data

import android.content.Context
import androidx.lifecycle.LiveData
import com.close.hook.ads.BlockedBean
import com.close.hook.ads.data.database.UrlDatabase
import com.close.hook.ads.data.model.Url
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch

class DataSource(context: Context) {
private val urlDao = UrlDatabase.getDatabase(context).urlDao
Expand Down Expand Up @@ -57,14 +57,21 @@ class DataSource(context: Context) {
}
}

fun search(searchText: String): List<Url> {
return urlDao.searchUrls(searchText)
}
fun search(searchText: String): Flow<List<Url>> = urlDao.searchUrls(searchText)

fun isExist(type: String, url: String): Boolean {
return urlDao.isExist(type, url)
}

fun checkIsBlocked(type: String, url: String): BlockedBean {
val urlEntry = urlDao.findMatchingUrl(type, url)
return if (urlEntry != null) {
BlockedBean(true, urlEntry.type, urlEntry.url)
} else {
BlockedBean(false, null, null)
}
}

companion object {
@Volatile
private var INSTANCE: DataSource? = null
Expand Down
15 changes: 9 additions & 6 deletions app/src/main/java/com/close/hook/ads/data/dao/UrlDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
import com.close.hook.ads.data.model.Url
import kotlinx.coroutines.flow.Flow
Expand All @@ -30,12 +29,16 @@ interface UrlDao {
@Query("SELECT * FROM url_info ORDER BY id DESC")
fun loadAllList(): Flow<List<Url>>

@Query("SELECT url FROM url_info ORDER BY id DESC")
fun getAllUrls(): List<String>

@Transaction
@Query("SELECT * FROM url_info WHERE url LIKE '%' || :searchText || '%' ORDER BY id DESC")
fun searchUrls(searchText: String): List<Url>
fun searchUrls(searchText: String): Flow<List<Url>>

@Query("""
SELECT * FROM url_info
WHERE (:type = 'Domain' AND url = :url)
OR (:type IN ('URL', 'KeyWord') AND :url LIKE '%' || url || '%')
LIMIT 1
""")
fun findMatchingUrl(type: String, url: String): Url?

@Query("SELECT 1 FROM url_info WHERE url = :url LIMIT 1")
fun isExist(url: String): Boolean
Expand Down
39 changes: 22 additions & 17 deletions app/src/main/java/com/close/hook/ads/data/database/UrlDatabase.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,24 @@ package com.close.hook.ads.data.database

import android.content.Context
import androidx.room.Database
import androidx.room.Room.databaseBuilder
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.close.hook.ads.data.dao.UrlDao
import com.close.hook.ads.data.model.Url

@Database(entities = [Url::class], version = 3, exportSchema = false)
@Database(entities = [Url::class], version = 4, exportSchema = false)
abstract class UrlDatabase : RoomDatabase() {
abstract val urlDao: UrlDao

companion object {
@Volatile
private var instance: UrlDatabase? = null

private val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("CREATE TABLE url_info_new (id integer not null, url TEXT not null, PRIMARY KEY(id))")
db.execSQL("CREATE TABLE url_info_new (id INTEGER NOT NULL, url TEXT NOT NULL, PRIMARY KEY(id))")
db.execSQL("INSERT INTO url_info_new (id, url) SELECT id, url FROM url_info")
db.execSQL("DROP TABLE url_info")
db.execSQL("ALTER TABLE url_info_new RENAME TO url_info")
Expand All @@ -27,24 +28,28 @@ abstract class UrlDatabase : RoomDatabase() {

private val MIGRATION_2_3: Migration = object : Migration(2, 3) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE url_info ADD COLUMN type TEXT NOT NULL DEFAULT url")
db.execSQL("ALTER TABLE url_info ADD COLUMN type TEXT NOT NULL DEFAULT 'url'")
}
}


@Synchronized
fun getDatabase(context: Context): UrlDatabase {
instance?.let {
return it
private val MIGRATION_3_4: Migration = object : Migration(3, 4) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("CREATE INDEX IF NOT EXISTS index_url_info_url ON url_info(url)")
db.execSQL("CREATE INDEX IF NOT EXISTS index_url_info_type ON url_info(type)")
}
return databaseBuilder(
context.applicationContext,
UrlDatabase::class.java, "url_database"
)
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.build().apply {
instance = this
}
}

fun getDatabase(context: Context): UrlDatabase =
instance ?: synchronized(this) {
instance ?: Room.databaseBuilder(
context.applicationContext,
UrlDatabase::class.java,
"url_database"
)
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4)
.build().also {
instance = it
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.close.hook.ads.data.model

data class ConfiguredBean(
val packageName: String,
val switchStates: List<Boolean>
)
9 changes: 8 additions & 1 deletion app/src/main/java/com/close/hook/ads/data/model/Url.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,17 @@ package com.close.hook.ads.data.model
import android.os.Parcel
import android.os.Parcelable
import androidx.room.ColumnInfo
import androidx.room.Index
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "url_info")
@Entity(
tableName = "url_info",
indices = [
Index(value = ["url"]),
Index(value = ["type"])
]
)
data class Url(

@ColumnInfo(name = "type") // domain url keyword
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,20 @@ import java.io.File
class AppRepository(private val packageManager: PackageManager) {

suspend fun getInstalledApps(isSystem: Boolean? = null): List<AppInfo> = withContext(Dispatchers.IO) {
var allPackages = packageManager.getInstalledPackages(0)
isSystem?.let {
allPackages = allPackages.filter { packageInfo ->
isSystemApp(packageInfo.applicationInfo) == isSystem
packageManager.getInstalledPackages(0)
.asSequence()
.filter { packageInfo ->
isSystem == null || isSystemApp(packageInfo.applicationInfo) == isSystem
}
}

allPackages.map { packageInfo ->
async {
getAppInfo(packageInfo)
.map { packageInfo ->
async {
getAppInfo(packageInfo)
}
}
}.awaitAll().sortedBy { it.appName.lowercase() }
.toList()
.awaitAll()
.filterNotNull()
.sortedBy { it.appName.lowercase() }
}

suspend fun getFilteredAndSortedApps(
Expand Down
Loading

0 comments on commit 13bac12

Please sign in to comment.