Commit b72847bb authored by alep's avatar alep

merge with master

parents 94f91fc0 c6c3917f
This diff is collapsed.
......@@ -23,8 +23,8 @@ class IncomingCallService : CallScreeningService() {
// Lookup VIPs
// val prefs = getSharedPreferences("WhoscallPrefs", MODE_PRIVATE)
val vipNumber = "+60108222562"
val vipName = "Arvin"
val vipNumber = "+60164034061"
val vipName = "Alyp"
Log.d("IncomingCallReceiver", "Looking up number: $number, Found VIPNumber: $vipNumber, Found VIPName: $vipName")
// Only show overlay if VIP
......
......@@ -8,6 +8,7 @@ import android.provider.Settings
import android.app.role.RoleManager
import androidx.activity.result.contract.ActivityResultContracts
import com.facebook.react.ReactActivity
import android.os.Bundle
class MainActivity : ReactActivity() {
......@@ -35,10 +36,23 @@ class MainActivity : ReactActivity() {
private fun requestCallScreeningRoleIfNeeded() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val roleManager = getSystemService(Context.ROLE_SERVICE) as RoleManager
if (!roleManager.isRoleHeld(RoleManager.ROLE_CALL_SCREENING)) {
val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_CALL_SCREENING)
roleLauncher.launch(intent)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Ask for overlay if needed
requestOverlay()
// Ask for call screening role if needed
requestCallScreeningRoleIfNeeded()
}
private fun simulateVipCall() {
val vipNumber = "+60189884118"
......
// OverlayPermissionModule.kt
package com.whoscall
import android.content.Intent
import android.net.Uri
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
import com.facebook.react.bridge.Promise
import android.os.Build
import android.provider.Settings
import com.facebook.react.bridge.*
class OverlayPermissionModule(private val reactContext: ReactApplicationContext)
: ReactContextBaseJavaModule(reactContext) {
class OverlayPermissionModule(reactContext: ReactApplicationContext) :
ReactContextBaseJavaModule(reactContext) {
override fun getName(): String = "OverlayPermission"
override fun getName(): String {
return "OverlayPermission"
}
@ReactMethod
fun hasOverlayPermission(promise: Promise) {
try {
val allowed = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Settings.canDrawOverlays(reactContext)
} else true
promise.resolve(allowed)
} catch (e: Exception) {
promise.reject("OVERLAY_CHECK_ERROR", e)
}
fun hasPermission(promise: Promise) {
val canDraw = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Settings.canDrawOverlays(reactApplicationContext)
} else {
true
}
@ReactMethod
fun openOverlaySettings() {
try {
val ctx = reactContext.currentActivity ?: reactContext
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:${reactContext.packageName}")
).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
ctx.startActivity(intent)
} catch (_: Exception) {
// best-effort
promise.resolve(canDraw)
}
}
}
......@@ -366,6 +366,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = SLK4N5KC2N;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = whoscall/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
......@@ -379,7 +380,7 @@
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_BUNDLE_IDENTIFIER = com.whoscall;
PRODUCT_NAME = whoscall;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
......@@ -394,6 +395,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = SLK4N5KC2N;
INFOPLIST_FILE = whoscall/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.1;
LD_RUNPATH_SEARCH_PATHS = (
......@@ -406,7 +408,7 @@
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_BUNDLE_IDENTIFIER = com.whoscall;
PRODUCT_NAME = whoscall;
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
......@@ -427,6 +429,7 @@
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = SLK4N5KC2N;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
......@@ -443,7 +446,7 @@
MARKETING_VERSION = 1.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.example.whoscall.whoscallDirectoryExtension;
PRODUCT_BUNDLE_IDENTIFIER = com.whoscall.whoscallDirectoryExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
......@@ -469,6 +472,7 @@
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = SLK4N5KC2N;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
......@@ -484,7 +488,7 @@
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.example.whoscall.whoscallDirectoryExtension;
PRODUCT_BUNDLE_IDENTIFIER = com.whoscall.whoscallDirectoryExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_COMPILATION_MODE = wholemodule;
......
#if os(iOS)
#if os(iOS)
import Foundation
import CallKit
......@@ -19,10 +20,7 @@ class CallDirectoryHandler: CXCallDirectoryProvider {
// Example: add VIP numbers
// Numbers must be E.164 format (+60 for Malaysia)
let vipNumbers: [(number: Int64, label: String)] = [
(60189884118, "Wei Yi"),
(60123456789, "Spam Caller"),
(60122553372, "Someone Else"),
(60123456789, "Scam Caller"),
(60189884118, "Wei Han"),
]
for entry in vipNumbers {
......@@ -50,3 +48,4 @@ extension CallDirectoryHandler: CXCallDirectoryExtensionContextDelegate {
}
}
#endif
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment