تطبيق إعلانات بأندرويد و firebase الجزء الثامن

تطبيق إعلانات بأندرويد و firebase الجزء الثامن


فهاد الجزء الثامن من تطبيق إعلانات بأندرويد و firebase غادي نكملو الملفات الخاصة بالبروفايل ديال المستخدم منبعد غادي نشوفوا كيفاش نعطيو للمستخدمين ديالنا الإمكانية ديال أنهم يراسلونا كما غادي نزيدو ملفات لي غادي يزيدونا إضافات على المظهر ديال les formulaires والصور ديال البروفايل.

نظرة سريعة بالفيديو

1- إضافة تعديل على الصور ديال البروفايل

غادي نمشي للمجلد res من بعد drawable فيه زيد ملف جديد سميه profile_image_border.xml فيه غادي يكون كود بحال css ف html غادي فقط يمكنا الصورة ديال لبروفايل من انها تكون دائرية ومعها border لي هو خط بيض الكود ديال الملف هو : 

                                <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="100dp" />
    <solid android:color="@color/colorPrimary" />
    <stroke
        android:width="3dip"
        android:color="@color/white" />
    <padding
        android:bottom="4dp"
        android:left="4dp"
        android:right="4dp"
        android:top="4dp" />
</shape>
                            

2- الملف ProfileActivity.java

باش نعرض المعلومات ديال المستخدم كنمشي ل dossier java فيه عندي الملف ProfileActivity فيه كنزيد الكود لي كيسترجع les champs لي زدنا فل interface من بعد كنسترجع la table لي سميتها profiles منبعد كاين ل fonction uploadProfileImage لي كتمكن من تعديل صورة البروفايل لي كتنفد ملي كيكليكي المستخدم على ل ImageView ولي كتمكنو من اختيار صورة منبعد كاين onActivityResult لي كتسترجع chemin ديال الصورة وكنخدم بواحد الbibliothèque لي كتمكني باش ندير Crop للصورة ولي زدناها فالملف build.gradle فمنبعد مكنديرلها ل crop كنزيدها لل ImageView من بعد كاين ل fonction addUserInfo لي كتمكن من إضافة المعلومات الخاصة بالمستخدم لقاعدة البيانات وتوجيه المستخدم للصفحة الرئيسية ثم كاين ل fonction showData لي فقط كتعرض المعلومات الخاصة بالمستخدم فالحقول و text views منبعد كاين ل fonction setUserProfileImage لي كتمكن من عرض صورة المستخدم فالبروفايل منبعد مكتاخد ل id ديالو وكتسترجع به الصورة من la table profiles الكود ديال الملف هو :

                                package com.example.belasri.hiresell;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatEditText;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.UserInfo;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;

import static android.os.Build.VERSION_CODES.M;
import static com.example.belasri.hiresell.R.drawable.user;
import static com.example.belasri.hiresell.R.id.fullname;

public class ProfileActivity extends AppCompatActivity {
    private AppCompatEditText EditFullName,EditPhone;
    private TextInputLayout fullnameLayout,phoneeLayout;
    private DatabaseReference db;
    private ProgressBar progressBar;
    private RelativeLayout layout;
    private FirebaseAuth.AuthStateListener authStateListener;
    private FirebaseAuth mAuth;
    private TextView TextUserFullName,TextuUserEmail,TextUserPhone;
    private StorageReference storageReference;
    private  static final int RESULT_IMAGE = 1;
    Uri resultUri;
    private ImageView profileButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        mAuth = FirebaseAuth.getInstance();
        db = FirebaseDatabase.getInstance().getReference().child("profiles");
        storageReference = FirebaseStorage.getInstance().getReference().child("profile_images");
        layout = (RelativeLayout) findViewById(R.id.profileLayout);
        progressBar = new ProgressBar(ProfileActivity.this,null,android.R.attr.progressBarStyleLarge);
        TextUserFullName = (TextView) findViewById(R.id.user_profile_name);
        TextuUserEmail = (TextView) findViewById(R.id.user_profile_email);
        TextUserPhone = (TextView) findViewById(R.id.user_profile_txtphone);
        EditFullName = (AppCompatEditText) findViewById(R.id.user_profile_fullname);
        EditPhone = (AppCompatEditText) findViewById(R.id.user_profile_phone);
        profileButton = (ImageView) findViewById(R.id.profile_image_btn);
        showData();
        setUserProfileImage(mAuth.getCurrentUser().getUid());
    }
    public void uploadProfileImage(View view) {
        Intent gallery = new Intent(Intent.ACTION_GET_CONTENT);
        gallery.setType("image/*");
        startActivityForResult(gallery,RESULT_IMAGE);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == RESULT_IMAGE && resultCode == RESULT_OK){
            Uri imagePath = data.getData();
            //make the user crop the image
            CropImage.activity(imagePath).setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(1,1)
                    .start(this);
        }
        //if image has successufully croped
        if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
            //get result
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if(resultCode == RESULT_OK){
                resultUri = result.getUri();
                profileButton.setImageURI(resultUri);
                profileButton.setTag(resultUri);
            }else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
                Exception error = result.getError();
            }
        }
    }
    public void addUserInfo(View view) {
        final String username = EditFullName.getText().toString();
        final String phone = EditPhone.getText().toString();
        String backgroundImageName = String.valueOf(profileButton.getTag());
        //Log.d("profilebuttontag",profileButton.getTag().toString());
        //Log.d("tagstring",tag);
        if(!backgroundImageName.equals("profileDefaultImage")){
            StorageReference filePath = storageReference.child(resultUri.getLastPathSegment());
            if(!TextUtils.isEmpty(username) && !TextUtils.isEmpty(phone) && profileButton.getDrawable() != null){
                Log.d("pathImage",resultUri.toString());
                showProgressBar();
                //store image
                filePath.putFile(resultUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        @SuppressWarnings("VisibleForTests") String imageUrl = taskSnapshot.getDownloadUrl().toString();
                        UserInfo user = mAuth.getCurrentUser();
                        DatabaseReference current_user_profile = db.child(user.getUid());
                        current_user_profile.child("fullname").setValue(username);
                        current_user_profile.child("phone").setValue(phone);
                        current_user_profile.child("image_url").setValue(imageUrl);
                        progressBar.setVisibility(View.GONE);
                        layout.removeView(progressBar);
                        Intent homeIntent = new Intent(ProfileActivity.this,MainActivity.class);
                        finish();
                        startActivity(homeIntent);
                    }
                });
            }else{
                Toast.makeText(this,"Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
            }
        }else{
            if(!TextUtils.isEmpty(username) && !TextUtils.isEmpty(phone) && profileButton.getDrawable() != null){
                showProgressBar();
                UserInfo user = mAuth.getCurrentUser();
                DatabaseReference current_user_profile = db.child(user.getUid());
                current_user_profile.child("fullname").setValue(username);
                current_user_profile.child("phone").setValue(phone);
                progressBar.setVisibility(View.GONE);
                layout.removeView(progressBar);
                Intent homeIntent = new Intent(ProfileActivity.this,MainActivity.class);
                finish();
                startActivity(homeIntent);
            }else{
                Toast.makeText(this,"Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
            }
        }
    }
    public void showData(){
        db.child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String fullname = (String) dataSnapshot.child("fullname").getValue();
                String phone = (String) dataSnapshot.child("phone").getValue();
                String email = mAuth.getCurrentUser().getEmail();
                TextUserFullName.setText(fullname);
                TextuUserEmail.setText(email);
                TextUserPhone.setText(phone);
                EditFullName.setText(fullname);
                EditPhone.setText(phone);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
    private void showProgressBar(){
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100);
        params.addRule(RelativeLayout.CENTER_IN_PARENT);
        layout.addView(progressBar,params);
        progressBar.setVisibility(View.VISIBLE);  //To show ProgressBar// To Hide ProgressBar
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
    }
    public void setUserProfileImage(String userId){
        db.child(userId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String image = (String) dataSnapshot.child("image_url").getValue();
                if(image != null) {
                    Picasso.with(ProfileActivity.this).load(image).into(profileButton);
                }else {
                    profileButton.setImageResource(R.drawable.abc56789);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}
                            

3- إضافة تعديل على الحقول

غادي نمشي للمجلد res من بعد drawable فيه زيد ملف جديد سميه form_border.xml فيه الكود لي كيزيد للحقول border وبعد التعديلات كال padding والحواف الكود ديال الملف هو : 

                                <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topRightRadius="10dp"
        android:topLeftRadius="10dp"></corners>
    <stroke
        android:width="0.5dp"
        android:color="@color/colorPrimary"></stroke>
    <solid
        android:color="@color/white"
        >
    </solid>
</shape>
                            

4- إضافة spinner للتطبيق ديالنا

ف spinner هو ل background ديال select box لي كي afficher les villes و les catégories سير ل res/layout زيد ملف جديد سميه spinner.xml الكود ديالو هو : 

                                    <?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="normal"
    android:elevation="5dp"
    android:textColor="@color/colorPrimary"
    android:padding="10dp" />
                                

5- إضافة ل formulaire de contact

باش نمكن المستخدم من أنه يراسلني كنمشي ل dossier java فيه زيد activity جديدة سميها ContactActivity منبعد سير ل res ثم layout فيه غادي تلقى الملف activity_contact.xml فيه غادي نزيد الكود لي فيه الحقول لي كيمكنوا المستخدم باش يدخل المعلومات الخاصة بالرسالة ديالو الكود ديال الملف هو :

                                    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context="com.example.belasri.hiresell.ContactActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <include layout="@layout/toolbar"></include>
    </RelativeLayout>
    <ScrollView
        android:layout_marginTop="55dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:padding="10dp"
            android:elevation="5dp"
            android:background="@color/white"
            android:layout_height="match_parent"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">
            <TextView
                android:id="@+id/title"
                android:text="@string/Contact"
                android:textColor="@color/colorPrimary"
                android:fontFamily="sans-serif"
                android:textStyle="bold"
                android:textSize="30sp"
                android:padding="10dp"
                android:textAlignment="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
            <View
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:background="@color/colorPrimaryDark"></View>
            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/text_fullname_layout"
                android:layout_marginTop="50dp"
                android:layout_marginLeft="32dp"
                android:layout_marginBottom="8dp"
                android:layout_marginRight="32dp"
                >
                <android.support.v7.widget.AppCompatEditText
                    android:id="@+id/fullname"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="16dp"
                    android:inputType="text"
                    android:hint="@string/full_name"
                    />
            </android.support.design.widget.TextInputLayout>
            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/text_pseudo_layout"
                android:layout_marginLeft="32dp"
                android:layout_marginBottom="8dp"
                android:layout_marginRight="32dp"
                >
                <android.support.v7.widget.AppCompatEditText
                    android:id="@+id/pseudo"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="16dp"
                    android:inputType="text"
                    android:hint="@string/email"
                    />
            </android.support.design.widget.TextInputLayout>
            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/text_message_layout"
                android:layout_below="@+id/text_pseudo_layout"
                android:layout_marginLeft="32dp"
                android:layout_marginBottom="8dp"
                android:layout_marginRight="32dp"
                app:passwordToggleEnabled="true"
                app:counterOverflowTextAppearance="@style/textErrorColor"
                >
                <android.support.v7.widget.AppCompatEditText
                        android:id="@+id/message"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="16dp"
                        android:ems="10"
                        android:inputType="textMultiLine"
                        android:hint="Message"
                        />
            </android.support.design.widget.TextInputLayout>
            <android.support.v7.widget.AppCompatButton
                android:id="@+id/btn"
                android:text="@string/Send"
                android:textColor="@color/white"
                android:textStyle="bold"
                android:textSize="20dp"
                android:layout_marginTop="20dp"
                style="@style/buttonRaised"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>
</RelativeLayout>
                                


بحث في الموقع


إشترك للتوصل بالجديد