معرفة اذا كان المستخدم موجود داخل التطبيق ام لا واظهار مربع به المستخدم اونلاين في تطبيق الشات

معرفة اذا كان المستخدم موجود داخل التطبيق ام لا واظهار مربع به المستخدم اونلاين في تطبيق الشات

معرفة اذا كان المستخدم موجود داخل التطبيق ام لا واظهار مربع به المستخدم اونلاين في تطبيق الشات

في تطبيقات المحادثات نلاحظ وجود علامة خضراء او شريط او حتى نص يظهر لنا اذا كان المستخدم الاخر موجود داخل التطبيق , وهذا ما سنعمل عليه اظهار شريط باللون الاخضر يظهر عندما يكون الطرف الاخر موجود داخل المحادثة في التطبيق .


لغه جافا من اكثر اللغات التي عليها طلب سواء في التعلم او في سوق العمل , والسبب يرجع في انه يمكنك من خلالها تطوير تطبيقات الاندرويد و عمل برامج سطح المكتب من خلال هذه اللغه ايضا اغلب الجامعات تقوم بتدريس هذه اللغه وهي لغه تعد من اللغات الصعبه وليست من اللغات السهله ولكن اذا اتقنت هذه اللغه بشكل جيد سوف اخبرك انه يمكنك تعلم اي لغه برمجه اخرى جديده لان java لغه من اللغات الصعبه وايضا بها تفاصيل كثيره جدا عكس اللغات التي تظهر جديده وتقدم مميزات معينه مثل لغة دارت الخاصه بفلاتر وهي بيئة تطوير تطبيقات الاندرويد والايفون وسطح المكتب بكود واحد . 


لغه python وهي من اللغات المطلوبه جدا في الذكاء الاصطناعي في سوق العمل هذة اللغه قوية في مجالها ولكنها غير قويه مثل الجافا او بمعنى اخر ليس بصعوبة الجافا . ويقصد بذلك اه يمكنك تعلم هذه اللغه ولكن سوف يصعب عليك تعلم الجافا بعدها لذلك حاول البدء بالجوبا او c++ او اي لغات البرمجه الصعبه لكي تستطيع فهم اي لغه تظهر بعد ذلك ونحن في موقعنا نقدم لكم الكثير والكثير من الاكواد البرمجيه المختلفه والمتنوعه. في لغه البايثون و في لغه الجافا وغيرها من اللغات الكثيره يحتوي الموقع الخاص بنا على العديد من البرامج والادوات والاكواد الخاصه للمطورين ويهدف موقعنا الى نشر ثقافه البرمجه لدي المحتوى العربي وذلك لان هذا المحتوى تقريبا مظلوم في هذا المجال و لا يوجد به الكثير من االاكواد والشروحات لذلك نعمل بكل جهدنا على توفير لكم كل ما تحتاجونه في مختلف لغات البرمجه وفي الشروحات و في تطوير تطبيقات الهواتف الذكيه.


تصميم available user داخل activity_chat

قم بإرفاق التصميم هذا داخل activity_chat وهو التصميم الخاص بصفحة الشات بعد اضافة شريط باللون الاخضر يظهر في اعلى الشاشة عندما يكون الطرف الاخر موجود داخل التطبيق ويختفي عندما يكون خارج التطبيق .

 <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/chat_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:clipToPadding="false"
        android:orientation="vertical"
        android:overScrollMode="never"
        android:padding="@dimen/_20sdp"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="@id/viewBack"
        app:layout_constraintTop_toBottomOf="@id/textAvailability"
        app:stackFromEnd="true" />

    <TextView
        android:id="@+id/textAvailability"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:gravity="center"
        android:padding="@dimen/_2sdp"
        android:text="@string/online"
        android:textColor="@color/white"
        android:textSize="@dimen/_10ssp"
        android:visibility="gone"
        app:layout_constraintTop_toBottomOf="@id/viewSupporter" />
        


عمل كلاس BaseActivity لقيمة البيانات

عمل كلاس BaseActivity لقيمة البيانات

اذا كان المستخدم خارج التطبيق نريد اعطاء القيمة 0 ونحدث القيمة في الfirebase لان هذة القيمة سوف نستخدمها لكي تدل لنا على توفر المستخدم ام لا واذا كانت 1 ايضا سوف نرسلها .


public class BaseActivity  extends AppCompatActivity {

    private DocumentReference documentReference;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferenceManager preferenceManager = new PreferenceManager(getApplicationContext());
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();

        documentReference = firestore.collection(Constants.KEY_COLLECTION_USERS)
                .document(preferenceManager.getString(Constants.KEY_USER_ID));

    }

    @Override
    protected void onPause() {
        super.onPause();
        documentReference.update(Constants.KEY_AVAILABILITY , 0);
    }

    @Override
    protected void onResume() {
        super.onResume();
        documentReference.update(Constants.KEY_AVAILABILITY, 1);
    }
}


عمل انترفيس للداتا

الان نقوم بعمل انترفيس للرسائل والذي سوف يكون مستخدم لارسال الرسائل داخل اشعارات في المقال القادم .


public interface ApisService {
    
    @POST("send")
    Call<String> sendMessage(@HeaderMap HashMap<String, String> headers, @Body String messageBody);

}

اضافة متغيرات حالة نشاط المستخدم في كلاس Constant


الان نريد حفظ قيمة المتغيرات داخل Constant لكي يسهل التعامل معها فيما بعد .

اضافة متغيرات حالة نشاط المستخدم في كلاس Constant


معرفة اذا كان المستخدم موجود داخل التطبيق ام لا

معرفة اذا كان المستخدم موجود داخل التطبيق ام لا

الخطوة الاهم هي نريد معرفة اذا كان متوفر ام لا ولذلك لذلك سوف نحتاج الى معرفة محتويات المعلومات الخاصه بالمستخدم والموجوده داخل الfirebase واذا كان القيمة 0 سوف يختفي الشريط واذا كانت 1 سوف يظهر الشريط الذي يحمل المستخدم اونلاين في شريط اخضر يظهر في اعلى الشاشه .

 private void listenAvailabilityOfReceiver() {
        // private Boolean isReceiverAvailable = false; --> global
        firebaseFirestore.collection(Constants.KEY_COLLECTION_USERS).document(receiverUser.id).addSnapshotListener(ChatActivity.this, (value, error) -> {
            if (error != null) {
                return;
            }
            if (value != null) {
                if (value.getLong(Constants.KEY_AVAILABILITY) != null) {
                    int availability = Objects.requireNonNull(
                            value.getLong(Constants.KEY_AVAILABILITY)
                    ).intValue();
                    isReceiverAvailable = availability == 1;
                }
            }
            if (isReceiverAvailable) {
                binding.textAvailability.setVisibility(View.VISIBLE);
            } else {
                binding.textAvailability.setVisibility(View.GONE);
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        listenAvailabilityOfReceiver();
    }
    

توريث UserActivity و MainActivity من BaseActivity


الان نحتاج الى جعل كلاس المستخدم والكلاس الرئيسي يرث من الكلاس BaseActivity والسبب هو تتبع وجود المستخدم سواء داخل الفحة الرئيسيه من التطبيق او حتى من المحادثة فاذا كان موجود داخل المحادثة او داخل التطبيق عموما سوف تتحول قيمته الى 1 ويظهر عند باقي المستخدمين انه متصل بالانترنت وموجود .

توريث UserActivity و MainActivity من BaseActivity

تعليقات