Как реализовать LocationListener в чистой архитектуре MVP - PullRequest
0 голосов
/ 29 августа 2018

быстро вопрос, кто-то может мне помочь, пожалуйста? Я просто хочу знать, правильно ли реализовала моя реализация Asynctask. Я новичок в разработке шаблонов MVP Clean Architecure, и я не уверен, что это хороший способ сделать это. По сути, у меня есть метод в моем классе Interactor, и здесь я вызвал свой Asynctask, и колбэк возвращает данные, затем я использую интерфейс для возврата данных своему докладчику, а затем обновляю представление. Я надеюсь, что кто-то может мне помочь, пожалуйста.

Кстати, на самом деле это работает нормально, но очень медленно

public class MapPresenterImpl implements MapPresenter,MapInteractorImpl.onDataChanged{

private MapView view;
private MapInteractor interactor;

public MapPresenterImpl(MapView view) {
    this.view = view;
    this.interactor = new MapInteractorImpl(this);

}

@Override
public void setInfo(LocationManager manager,Context mContext) {
    if (view != null) {
        view.showProgress(true);
        interactor.getCurrentInfMaps(manager,mContext);
    }
}

@Override
public void notifyPresenterDataChanged(Location location) {
    view.showProgress(false);
    if (null != location){
        view.setInfo(location);
    }
}

@Override
public void notifyPresenterGpsDisabled(boolean isDisabledGps) {
    if (isDisabledGps){
        view.showProgress(false);
        view.showMessage("The gps is disabled please enable first");
    }
}

}

public class MapInteractorImpl implements MapInteractor,GpsProvider.listener{


private final String TAG = getClass().getSimpleName();

private onDataChanged listener;

public MapInteractorImpl(onDataChanged listener){
    this.listener = listener;
}

@Override
public void getCurrentInfMaps(LocationManager manager, Context context) {
    new GpsProvider(manager,context,this);
}

@Override
public void dataChanged(Location location) {
    if (location!=null){
        listener.notifyPresenterDataChanged(location);
        Log.i("MapInteractorImpl() ",String.format("Lat: %s, Long: %s",String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude())));
    } else{
        listener.notifyPresenterGpsDisabled(true);
    }
}

public interface onDataChanged{
    void notifyPresenterDataChanged(Location location);
    void notifyPresenterGpsDisabled(boolean isDisabledGps);
}

}

public class GpsProvider implements android.location.LocationListener{

private LocationManager manager;
private Context context;
private listener listener;


public GpsProvider(LocationManager manager,Context context,listener listener){
    this.manager = manager;
    this.context = context;
    this.listener = listener;
    init();
}

public interface listener{
    void dataChanged(Location location);
}

private final String TAG = getClass().getSimpleName();

@Override
public void onLocationChanged(Location location) {
    if (location!=null){
        Log.i(TAG,String.format("Lat: %s, Long: %s",String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude())));
        listener.dataChanged(location);
    } else{
        Log.i(TAG,"Location is null");
    }
}

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

}

@Override
public void onProviderEnabled(String provider) {
    Log.i(TAG,"CurrentProvider enable: "+provider);
}

@Override
public void onProviderDisabled(String provider) {
    Log.i(TAG,"CurrentProvider disable: "+provider);
}


@SuppressLint("MissingPermission")
public void init(){
    manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    if (isGpsEnabled()){
        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                2000,
                10, this);
    } else{
        Log.i(TAG,"The gps is disabled");
        listener.dataChanged(null);
    }

}

public boolean isGpsEnabled(){
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER))
        return true;

    return false;
}

}

Это мой SampleMVP в GitHub! https://github.com/DjangoLC/SampleMvp если у вас будет немного свободного времени, я буду благодарен!

...