عند إيقاف NFC، كان يظهر Security Score بقيمة 100 (ممتاز) بدلاً من عرض حالة "غير متاح" أو "N/A".
-
القيمة الافتراضية في قاعدة البيانات:
NFCSettingsEntity.ktيحتوي على قيمة افتراضيةlastSecurityScore = 100- عند إيقاف NFC، كان يتم عرض هذه القيمة الافتراضية
-
عدم التحديث التلقائي:
SecurityScoreViewModelلم يكن يراقب تغييرات حالة NFC- عند تشغيل/إيقاف NFC، لم يتم إعادة حساب الـ Score
fun calculateSecurityScore() {
viewModelScope.launch {
_isLoading.value = true
val context = application.applicationContext
val nfcAdapter = NfcAdapter.getDefaultAdapter(context)
try {
if (nfcAdapter == null) {
// الجهاز لا يدعم NFC
_securityScore.value = SecurityScore(
score = 0,
level = SecurityLevel.NOT_APPLICABLE,
violations = emptyList(),
recommendations = listOf(context.getString(R.string.nfc_not_supported_device))
)
} else if (!nfcAdapter.isEnabled) {
// NFC معطل - التحقق من البيانات التاريخية
val recentEvents = repository.getEventsFromLastDays(7).first()
if (recentEvents.isEmpty()) {
// لا توجد أنشطة حديثة - NFC كان معطلاً
_securityScore.value = SecurityScore(
score = 0,
level = SecurityLevel.NOT_APPLICABLE,
violations = emptyList(),
recommendations = listOf(
context.getString(R.string.recommendation_nfc_disabled_no_data),
context.getString(R.string.recommendation_enable_nfc_when_needed)
)
)
repository.updateSecurityScore(0, SecurityLevel.NOT_APPLICABLE.name)
} else {
// توجد بيانات تاريخية - الحساب بناءً على الاستخدام السابق
val calculatedScore = privacyScoreCalculator.calculateSecurityScore(recentEvents)
val adjustedRecommendations = mutableListOf<String>()
adjustedRecommendations.add(context.getString(R.string.recommendation_nfc_currently_disabled))
adjustedRecommendations.addAll(calculatedScore.recommendations)
_securityScore.value = calculatedScore.copy(
recommendations = adjustedRecommendations
)
repository.updateSecurityScore(calculatedScore.score, calculatedScore.level.name)
}
} else {
// NFC مفعل - الحساب بناءً على الأحداث الحديثة
val recentEvents = repository.getEventsFromLastDays(7).first()
val calculatedScore = privacyScoreCalculator.calculateSecurityScore(recentEvents)
_securityScore.value = calculatedScore
repository.updateSecurityScore(calculatedScore.score, calculatedScore.level.name)
}
} catch (e: Exception) {
e.printStackTrace()
_securityScore.value = SecurityScore(
score = 0,
level = SecurityLevel.NOT_APPLICABLE,
violations = emptyList(),
recommendations = listOf(context.getString(R.string.error_calculating_score, e.message ?: "Unknown error"))
)
} finally {
_isLoading.value = false
}
}
}init {
calculateSecurityScore()
// مراقبة تغييرات حالة NFC
observeNfcStateChanges()
}
private fun observeNfcStateChanges() {
viewModelScope.launch {
// مراقبة تغييرات الإعدادات التي قد تشير إلى تغيير حالة NFC
repository.getSettings().collect {
// إعادة حساب الـ Score عند تغيير الإعدادات
calculateSecurityScore()
}
}
}الكود الموجود في HomeScreen.kt يتعامل بشكل صحيح مع حالة NOT_APPLICABLE:
Text(
text = if (securityScore.level == SecurityLevel.NOT_APPLICABLE)
stringResource(R.string.security_score_range_not_applicable)
else
"${securityScore.score}",
style = NothingTextStyles.HeaderTitle.copy(
fontSize = if (securityScore.level == SecurityLevel.NOT_APPLICABLE) 16.sp else 20.sp,
fontWeight = FontWeight.Bold
),
color = securityScore.level.color
)- Score: 0
- Level: NOT_APPLICABLE (N/A)
- Recommendations:
- "NFC معطل حالياً. لا توجد أنشطة حديثة للتحليل"
- "فعّل NFC فقط عند الحاجة لاستخدام الميزات اللاتلامسية"
- Score: محسوب بناءً على آخر 7 أيام
- Level: بناءً على الـ Score المحسوب
- Recommendations:
- "NFC معطل حالياً. الدرجة أدناه بناءً على سجل استخدامك الأخير"
-
- توصيات إضافية بناءً على الانتهاكات
- Score: محسوب بناءً على الأحداث الحديثة
- Level: بناءً على الـ Score المحسوب
- Recommendations: بناءً على الانتهاكات المكتشفة
- Score: 0
- Level: NOT_APPLICABLE (N/A)
- Recommendations: "جهازك لا يدعم NFC"
- إضافة
observeNfcStateChanges()لمراقبة تغييرات الحالة - تحسين منطق
calculateSecurityScore()للتعامل مع حالات NFC المختلفة - حفظ الـ Score في قاعدة البيانات بشكل صحيح
- يحتوي بالفعل على
SecurityLevel.NOT_APPLICABLE - يتعامل مع الحالات الخاصة بشكل صحيح
- يعرض "N/A" بدلاً من الرقم عند
NOT_APPLICABLE - يستخدم حجم خط مناسب للنص
<string name="recommendation_nfc_disabled_no_data">NFC is currently disabled. No recent activity to analyze.</string>
<string name="recommendation_enable_nfc_when_needed">Enable NFC only when you need to use contactless features like payments or tag reading.</string>
<string name="recommendation_nfc_currently_disabled">NFC is currently disabled. The score below is based on your recent usage history.</string>
<string name="security_score_range_not_applicable">N/A</string>
<string name="nfc_not_supported_device">Your device does not support NFC</string>
<string name="error_calculating_score">Error calculating security score: %1$s</string><string name="recommendation_nfc_disabled_no_data">NFC معطل حالياً. لا توجد أنشطة حديثة للتحليل.</string>
<string name="recommendation_enable_nfc_when_needed">فعّل NFC فقط عند الحاجة لاستخدام الميزات اللاتلامسية مثل الدفع أو قراءة العلامات.</string>
<string name="recommendation_nfc_currently_disabled">NFC معطل حالياً. الدرجة أدناه بناءً على سجل استخدامك الأخير.</string>-
✅ فتح التطبيق مع NFC معطل (بدون بيانات سابقة)
- يجب أن يظهر N/A
-
✅ تفعيل NFC واستخدامه ثم إيقافه
- يجب أن يظهر Score بناءً على الاستخدام السابق
-
✅ تفعيل NFC
- يجب أن يظهر Score محسوب
-
✅ التبديل بين تفعيل/إيقاف NFC
- يجب أن يتحدث Score تلقائياً
-
✅ جهاز بدون دعم NFC
- يجب أن يظهر N/A مع رسالة مناسبة
- دقة أفضل: Score يعكس الحالة الفعلية لـ NFC
- تحديث تلقائي: يتم إعادة الحساب عند تغيير حالة NFC
- رسائل واضحة: توصيات مناسبة لكل حالة
- تجربة مستخدم محسنة: لا مزيد من الارتباك حول Score 100 عند إيقاف NFC
- يتم الاحتفاظ بسجل آخر 7 أيام
- عند إيقاف NFC، يتم استخدام هذه البيانات لحساب Score تقديري
- هذا يساعد المستخدم على فهم مستوى أمانه السابق
- يتم مراقبة تغييرات الإعدادات
- عند أي تغيير، يتم إعادة حساب الـ Score
- هذا يضمن دقة المعلومات المعروضة
-
إضافة BroadcastReceiver لحالة NFC:
- مراقبة
NfcAdapter.ACTION_ADAPTER_STATE_CHANGED - تحديث فوري عند تغيير حالة NFC
- مراقبة
-
إضافة رسوم بيانية:
- عرض تاريخ الـ Score على مدار الوقت
- مقارنة بين الفترات المختلفة
-
إشعارات ذكية:
- تنبيه عند انخفاض الـ Score
- اقتراحات لتحسين الأمان
تم حل مشكلة عرض Security Score = 100 عند إيقاف NFC:
- ✅ يظهر N/A عند إيقاف NFC بدون بيانات
- ✅ يظهر Score تقديري عند وجود بيانات تاريخية
- ✅ تحديث تلقائي عند تغيير حالة NFC
- ✅ رسائل وتوصيات واضحة لكل حالة
النظام الآن يعمل بشكل منطقي ودقيق!