net.jongrakko.zipsuri.activity.PostUploadActivity.java Source code

Java tutorial

Introduction

Here is the source code for net.jongrakko.zipsuri.activity.PostUploadActivity.java

Source

package net.jongrakko.zipsuri.activity;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMyLocationButtonClickListener;
import com.google.android.gms.maps.LocationSource;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import com.yalantis.ucrop.UCrop;

import net.jongrakko.zipsuri.R;
import net.jongrakko.zipsuri.manager.ProgressManger;
import net.jongrakko.zipsuri.manager.ServerManager;
import net.jongrakko.zipsuri.model.AddressModel;
import net.jongrakko.zipsuri.model.PostModel;
import net.jongrakko.zipsuri.view.CheckableButton;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

/**
 * Created by MoonJongRak on 2016. 5. 11..
 */
public class PostUploadActivity extends Fragment
        implements View.OnClickListener, CompoundButton.OnCheckedChangeListener, OnMapReadyCallback,
        OnMyLocationButtonClickListener, GoogleMap.OnMapClickListener, LocationListener {
    private static final int PICK_PHOTO_FOR_AVATAR = 100;
    private static final int TAKE_PHOTO_FOR_AVATAR = 104;
    private static final int TAKE_VIDEO_FOR_AVATAR = 105;
    private static final int PICK_VIDEO_FOR_AVATAR = 103;
    private static final int SEARCH_ADDRESS = 101;
    private static final int MY_LOCATION_REQUEST_CODE = 102;
    private int[] licenseButtonIds = { R.id.buttonLicense0, R.id.buttonLicense1, R.id.buttonLicense2,
            R.id.buttonLicense3, R.id.buttonLicense4, R.id.buttonLicense5, R.id.buttonLicense6, R.id.buttonLicense7,
            R.id.buttonLicense8, R.id.buttonLicense9, R.id.buttonLicense10, R.id.buttonLicense11,
            R.id.buttonLicense12, R.id.buttonLicense13, R.id.buttonLicense14, R.id.buttonLicense15 };
    private int[] postImageViewIds = { R.id.imageView_0, R.id.imageView_1, R.id.imageView_2, R.id.imageView_3,
            R.id.imageView_4, };
    private int[] postImageViewPlusIds = { R.id.imageView_plus_0, R.id.imageView_plus_1, R.id.imageView_plus_2,
            R.id.imageView_plus_3, R.id.imageView_plus_4, };
    private int[] postImageViewRemoveIds = { R.id.imageView_remove_0, R.id.imageView_remove_1,
            R.id.imageView_remove_2, R.id.imageView_remove_3, R.id.imageView_remove_4, };

    private ImageView mImageViewTitle;
    private EditText mEditTextContent, mEditTextAddress;
    private TextView mTextViewDate, mTextViewTime;
    private GoogleMap mGoogleMap;

    private PostModel uploadPostModel;
    private AddressModel uploadAddressModel;
    private long uploadEndDate;

    private View rootView;
    private Context context;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.activity_upload_post, container, false);
        uploadPostModel = new PostModel();
        context = getContext();
        setLayout();

        return rootView;
    }

    private void setLayout() {
        mImageViewTitle = (ImageView) rootView.findViewById(R.id.imageViewTitle);

        // 
        mEditTextContent = (EditText) rootView.findViewById(R.id.editTextContent);
        mEditTextAddress = (EditText) rootView.findViewById(R.id.editTextAddress);
        mTextViewDate = (TextView) rootView.findViewById(R.id.textViewDate);
        mTextViewTime = (TextView) rootView.findViewById(R.id.textViewTime);

        ((RadioButton) rootView.findViewById(R.id.radioButtonAddressGPS)).setOnCheckedChangeListener(this);
        ((RadioButton) rootView.findViewById(R.id.radioButtonAddressSelf)).setOnCheckedChangeListener(this);

        rootView.findViewById(R.id.imageViewLeft).setOnClickListener(this);
        rootView.findViewById(R.id.imageViewRight).setOnClickListener(this);
        rootView.findViewById(R.id.buttonDone).setOnClickListener(this);
        rootView.findViewById(R.id.layoutDateMain).setOnClickListener(this);
        rootView.findViewById(R.id.buttonBack).setOnClickListener(this);
        rootView.findViewById(R.id.imageViewVideo).setOnClickListener(this);
        rootView.findViewById(R.id.imageView_remove_video).setOnClickListener(this);
        for (int id : postImageViewIds) {
            rootView.findViewById(id).setOnClickListener(this);
        }
        for (int id : postImageViewPlusIds) {
            rootView.findViewById(id).setOnClickListener(this);
        }
        for (int id : postImageViewRemoveIds) {
            rootView.findViewById(id).setOnClickListener(this);

        }

        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
                .findFragmentById(R.id.googleMap);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.imageViewLeft:
            titlePictureLeft();
            break;
        case R.id.imageViewRight:
            titlePictureRight();
            break;
        case R.id.layoutDateMain:
            showSetTimePicker();
            break;
        case R.id.editTextAddress:
            startActivityForResult(new Intent(getContext(), SearchAddressActivity.class), SEARCH_ADDRESS);
            break;
        case R.id.buttonDone:
            uploadPost();
            break;
        case R.id.buttonBack:
            DrawerLayout drawer = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
            drawer.openDrawer(GravityCompat.START);
            break;
        case R.id.imageViewVideo:
            showVideoDialog();
            break;
        case R.id.imageView_remove_video:
            removeVideo();
            break;

        default:
            for (int id : postImageViewIds) {
                if (v.getId() == id) {
                    Object tag = rootView.findViewById(id).getTag();
                    if (tag != null) {
                        startActivityPhoto(tag.toString());
                    } else {
                        showPhotoDialog();
                    }
                    return;
                }
            }

            for (int i = 0; i < postImageViewPlusIds.length; i++) {
                if (v.getId() == postImageViewPlusIds[i]) {
                    rootView.findViewById(postImageViewIds[i]).callOnClick();
                    return;
                }
            }

            for (int i = 0; i < postImageViewPlusIds.length; i++) {
                if (v.getId() == postImageViewRemoveIds[i]) {
                    removeImage(i);

                    return;
                }
            }

            break;
        }
    }

    private void startActivityPhoto(String path) {
        Intent intent = new Intent(getContext(), PhotoActivity.class);
        intent.putExtra(PhotoActivity.INTENT_FILE, path);
        startActivity(intent);
    }

    private void showPhotoDialog() {
        if (rootView.findViewById(postImageViewIds[postImageViewIds.length - 1]).getTag() != null) {
            ProgressManger.showToast("?  5 .");
            return;
        }
        new AlertDialog.Builder(getContext()).setTitle("?")
                .setItems(new String[] { " ?", "" }, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                        case 0:
                            takeImage();
                            break;
                        case 1:
                            pickImage();
                            break;
                        }
                    }
                }).show();
    }

    private void showVideoDialog() {
        new AlertDialog.Builder(getContext()).setTitle("?")
                .setItems(new String[] { "??? ?", "" }, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                        case 0:
                            takeVideo();
                            break;
                        case 1:
                            pickVideo();
                            break;
                        }
                    }
                }).show();
    }

    private void showSetTimePicker() {
        final Calendar now = Calendar.getInstance();
        final Calendar time = Calendar.getInstance();
        DatePickerDialog mDatePickerDialog = DatePickerDialog.newInstance(new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
                time.set(year, monthOfYear, dayOfMonth, 24, 0);
                uploadEndDate = time.getTimeInMillis();
                mTextViewDate.setText(new SimpleDateFormat("yyyy-MM-dd").format(time.getTime()));
                mTextViewTime.setText(new SimpleDateFormat("HH:mm").format(time.getTime()));
            }
        }, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
        mDatePickerDialog.setAccentColor(getResources().getColor(R.color.calendarAccent));
        mDatePickerDialog.show(getActivity().getFragmentManager(), "");
    }

    private void titlePictureRight() {
        Object tag = mImageViewTitle.getTag();
        if (tag == null) {
            return;
        }

        for (int i = 0; i < postImageViewIds.length - 1; i++) {
            int id = postImageViewIds[i + 1];
            if (rootView.findViewById(id).getTag() == null) {
                return;
            }
            if (tag.equals(postImageViewIds[i])) {
                mImageViewTitle.setImageDrawable(((ImageView) rootView.findViewById(id)).getDrawable());
                mImageViewTitle.setTag(id);
                break;
            }
        }
    }

    private void titlePictureLeft() {
        Object tag = mImageViewTitle.getTag();
        if (tag == null) {
            return;
        }

        for (int i = 1; i < postImageViewIds.length; i++) {
            int id = postImageViewIds[i - 1];
            if (rootView.findViewById(id).getTag() == null) {
                return;
            }
            if (tag.equals(postImageViewIds[i])) {
                mImageViewTitle.setImageDrawable(((ImageView) rootView.findViewById(id)).getDrawable());
                mImageViewTitle.setTag(id);
                break;
            }
        }
    }

    private long getLicense() {
        long result = 0;
        for (int i = 0; i < licenseButtonIds.length; i++) {
            if (((CheckableButton) rootView.findViewById(licenseButtonIds[i])).isChecked()) {
                result |= PostModel.FLAG_LICENSE[i];
            }
        }
        return result;
    }

    private void uploadPost() {

        if (mEditTextContent.getText().toString().equals("")) {
            ProgressManger.showToast("?  .");
            return;
        } else if (getLicense() == 0) {
            ProgressManger.showToast("1 ???  ? .");
            return;
        } else if (uploadAddressModel == null) {
            ProgressManger.showToast("  .");
            return;
        } else if (uploadEndDate == 0) {
            ProgressManger.showToast("??  .");
            return;
        }

        uploadPostModel.setContent(mEditTextContent.getText().toString());
        uploadPostModel.setLicense(getLicense());
        uploadPostModel.setAddressModel(uploadAddressModel);
        uploadPostModel.setEndDate(uploadEndDate);
        for (int id : postImageViewIds) {
            Object image = rootView.findViewById(id).getTag();
            if (image != null) {
                uploadPostModel.addImage(image.toString());

            } else {
                break;
            }
        }

        ServerManager.uploadPost(new ServerManager.OnServerListener<Void>(getContext()) {
            @Override
            protected void onSuccess(Void data) {
                ProgressManger.showToast(" !");
                getActivity().onBackPressed();
            }
        }, uploadPostModel);

    }

    //<--Start of Pick Image
    private void pickImage() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);
    }

    File takeFile;

    private void takeImage() {
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        takeFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                "Zisuri_tmp_" + System.currentTimeMillis() + ".jpg");
        Uri saveUri = Uri.fromFile(takeFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, saveUri); // set the image file name
        startActivityForResult(intent, TAKE_PHOTO_FOR_AVATAR);
    }

    private void takeVideo() {
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        takeFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                "Zisuri_tmp_" + System.currentTimeMillis() + ".mp4");
        Uri saveUri = Uri.fromFile(takeFile);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, saveUri); // set the image file name
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
        startActivityForResult(intent, TAKE_VIDEO_FOR_AVATAR);
    }

    private void pickVideo() {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(android.provider.MediaStore.Video.Media.CONTENT_TYPE);
        intent.setData(android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, PICK_VIDEO_FOR_AVATAR);

    }

    private void removeImage(int index) {
        for (int i = index; i < postImageViewIds.length - 1; i++) {
            int nextIndex = i + 1;
            ImageView nowImage = (ImageView) rootView.findViewById(postImageViewIds[i]);
            ImageView nextImage = (ImageView) rootView.findViewById(postImageViewIds[nextIndex]);

            nowImage.setImageDrawable(nextImage.getDrawable());
            nowImage.setTag(nextImage.getTag());
            rootView.findViewById(postImageViewPlusIds[i])
                    .setVisibility(rootView.findViewById(postImageViewPlusIds[nextIndex]).getVisibility());
            rootView.findViewById(postImageViewRemoveIds[i])
                    .setVisibility(rootView.findViewById(postImageViewRemoveIds[nextIndex]).getVisibility());

            if (nowImage.getTag() == null) {
                nowImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            } else {
                nowImage.setScaleType(ImageView.ScaleType.FIT_XY);
            }
        }
        int lastIndex = postImageViewIds.length - 1;
        ImageView lastImage = (ImageView) rootView.findViewById(postImageViewIds[lastIndex]);
        lastImage.setImageResource(R.drawable.ic_add_photo);
        lastImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        lastImage.setTag(null);
        rootView.findViewById(postImageViewPlusIds[lastIndex]).setVisibility(View.GONE);
        rootView.findViewById(postImageViewRemoveIds[lastIndex]).setVisibility(View.GONE);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK && requestCode == UCrop.REQUEST_CROP) {

            File cropFile = new File(UCrop.getOutput(data).getPath());

            int index = 0;
            for (int id : postImageViewIds) {
                ImageView mImageView = (ImageView) rootView.findViewById(id);
                if (mImageView.getTag() == null) {
                    rootView.findViewById(postImageViewPlusIds[index]).setVisibility(View.VISIBLE);
                    rootView.findViewById(postImageViewRemoveIds[index]).setVisibility(View.VISIBLE);
                    mImageView.setImageBitmap(BitmapFactory.decodeFile(cropFile.getPath()));
                    mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
                    mImageView.setPadding(10, 10, 10, 10);
                    mImageView.setTag(cropFile.getPath());
                    mImageViewTitle.setImageDrawable(((ImageView) rootView.findViewById(id)).getDrawable());
                    mImageViewTitle.setTag(id);
                    break;
                }
                index++;
            }

        } else if (resultCode == Activity.RESULT_OK && requestCode == PICK_PHOTO_FOR_AVATAR) {
            UCrop.of(data.getData(),
                    Uri.fromFile(
                            new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                                    System.currentTimeMillis() + ".jpg")))
                    .withMaxResultSize(1920, 1920).start(getContext(), this);
        } else if (resultCode == Activity.RESULT_OK && requestCode == TAKE_PHOTO_FOR_AVATAR) {
            UCrop.of(Uri.fromFile(takeFile),
                    Uri.fromFile(
                            new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                                    System.currentTimeMillis() + ".jpg")))
                    .withMaxResultSize(1920, 1920).start(getContext(), this);

        } else if (resultCode == UCrop.RESULT_ERROR) {
            final Throwable cropError = UCrop.getError(data);
            Log.d("mox", "croperror" + cropError.toString());

        } else if (resultCode == Activity.RESULT_OK && requestCode == SEARCH_ADDRESS) {
            AddressModel mAddressModel = (AddressModel) data.getSerializableExtra("data");
            setAddressModel(mAddressModel);
        } else if (resultCode == Activity.RESULT_OK && requestCode == PICK_VIDEO_FOR_AVATAR) {
            String path = getPath(data.getData());
            showVideoAlertDialog(path);
        } else if (resultCode == Activity.RESULT_OK && requestCode == TAKE_VIDEO_FOR_AVATAR) {
            String path = takeFile.getPath();
            showVideoAlertDialog(path);
        }

    }

    private void showVideoAlertDialog(final String path) {

        double size = ((double) new File(path).length()) / (1024 * 1024);
        size = Math.round(size * 100) / 100.0;
        new AlertDialog.Builder(getContext()).setMessage("?").setMessage(
                "???  ? ??    .\n? Wifi .\n( "
                        + size + "MB )")
                .setNegativeButton("", null)
                .setPositiveButton("?", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Bitmap thumb = ThumbnailUtils.createVideoThumbnail(path,
                                MediaStore.Video.Thumbnails.MINI_KIND);
                        ((ImageView) rootView.findViewById(R.id.imageViewVideo)).setImageBitmap(thumb);
                        ((ImageView) rootView.findViewById(R.id.imageViewVideo))
                                .setScaleType(ImageView.ScaleType.FIT_XY);
                        uploadPostModel.setVideo(path);
                        rootView.findViewById(R.id.imageView_remove_video).setVisibility(View.VISIBLE);
                    }
                }).show();
    }

    private void removeVideo() {
        ((ImageView) rootView.findViewById(R.id.imageViewVideo)).setImageResource(R.drawable.ic_add_video);
        ((ImageView) rootView.findViewById(R.id.imageViewVideo)).setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        uploadPostModel.setVideo(null);
        rootView.findViewById(R.id.imageView_remove_video).setVisibility(View.GONE);
    }

    @Override
    public void onCheckedChanged(final CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            switch (buttonView.getId()) {
            case R.id.radioButtonAddressGPS:
                mEditTextAddress.setOnClickListener(null);
                this.mGoogleMap.setOnMapClickListener(this);
                this.mGoogleMap.setOnMyLocationButtonClickListener(this);

                if (ContextCompat.checkSelfPermission(getContext(),
                        Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                    mGoogleMap.setMyLocationEnabled(true);
                    LocationProvider lprovider;
                    LocationManager lm = (LocationManager) getActivity()
                            .getSystemService(getActivity().LOCATION_SERVICE);
                    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
                    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
                    String provider;
                    Criteria criteria = new Criteria();
                    criteria.setAccuracy(Criteria.ACCURACY_FINE);
                    criteria.setPowerRequirement(Criteria.POWER_HIGH);
                    provider = lm.getBestProvider(criteria, true);

                    if (provider == null || provider.equals("passive")) { // ? ?    ??
                        new AlertDialog.Builder(getActivity()).setTitle(" ??")
                                .setNeutralButton("??", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                        buttonView.toggle();
                                        startActivityForResult(
                                                new Intent(
                                                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS),
                                                0);
                                    }
                                }).setOnCancelListener(new DialogInterface.OnCancelListener() {
                                    @Override
                                    public void onCancel(DialogInterface dialog) {
                                        dialog.dismiss();
                                    }
                                }).show();
                    } else { //  ? ?   
                        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, this);
                        Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (l != null) {
                            Log.e("hello??", "okok");
                        }
                    }

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        requestPermissions(new String[] { Manifest.permission.ACCESS_FINE_LOCATION },
                                MY_LOCATION_REQUEST_CODE);
                    }
                }
                break;
            case R.id.radioButtonAddressSelf:
                this.mGoogleMap.setOnMapClickListener(null);
                mEditTextAddress.setOnClickListener(this);
                this.mGoogleMap.setOnMyLocationButtonClickListener(null);
                mGoogleMap.setMyLocationEnabled(false);
                mEditTextAddress.setOnClickListener(this);
                startActivityForResult(new Intent(getContext(), SearchAddressActivity.class), SEARCH_ADDRESS);
                break;
            }
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        this.mGoogleMap = googleMap;
        this.mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.541, 126.986), 18));
        this.mGoogleMap.setOnMapClickListener(null);
    }

    private void setAddressModel(AddressModel addressModel) {
        LatLng mLocation = new LatLng(addressModel.getLatitude(), addressModel.getLongitude());
        this.uploadAddressModel = addressModel;
        mEditTextAddress.setText(addressModel.getRoadAddr());
        if (addressModel.getRoadAddr() != null)
            Log.i("setAddressModel", addressModel.getRoadAddr());
        else
            Log.i("setAddressModel", "addressModel hasn't RoadAddr");
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(mLocation);
        mGoogleMap.addMarker(markerOptions);
        mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(mLocation, 18));
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults) {
        if (requestCode == MY_LOCATION_REQUEST_CODE) {
            if (permissions.length == 1 && permissions[0].equals(Manifest.permission.ACCESS_FINE_LOCATION)
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.checkSelfPermission(getContext(),
                        Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                        && ActivityCompat.checkSelfPermission(getContext(),
                                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                mGoogleMap.setMyLocationEnabled(true);
            } else {
                ProgressManger.showToast("?  .");
            }
        }
    }

    @Override
    public boolean onMyLocationButtonClick() {
        LocationManager mLocationManager = (LocationManager) getActivity()
                .getSystemService(Context.LOCATION_SERVICE);
        if (!mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
            ProgressManger.showToast("  .");
        } else {
            ProgressManger.showToast("  ...");
        }
        return false;
    }

    @Override
    public void onMapClick(LatLng latLng) {
        mGoogleMap.clear();
        AddressModel mAddressModelTmp = new AddressModel();
        mAddressModelTmp.setLatitude(latLng.latitude);
        mAddressModelTmp.setLongitude(latLng.longitude);
        ServerManager.reverseGeoCoding(new ServerManager.OnServerListener<AddressModel>(getContext()) {
            @Override
            protected void onSuccess(AddressModel data) {
                setAddressModel(data);
            }

        }, mAddressModelTmp);
    }

    //   
    private String getPath(Uri uri) {
        String[] projection = { MediaStore.Video.Media.DATA };
        Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.e("Hello", "helo");
        if (mEditTextAddress.getText().toString().length() < 1) {
            AddressModel add = new AddressModel();
            add.setLatitude(location.getLatitude());
            add.setLongitude(location.getLongitude());
            ServerManager.reverseGeoCoding(new ServerManager.OnServerListener<AddressModel>(getContext()) {
                @Override
                protected void onSuccess(AddressModel data) {
                    setAddressModel(data);
                }

            }, add);
        }

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
}