Call PlayServices.check in MainActivity

pull/795/head
Alex Baker 5 years ago
parent 15f816883e
commit 44c34ce3ce

@ -2,21 +2,17 @@ package org.tasks;
import javax.inject.Inject;
import org.tasks.billing.BillingClient;
import org.tasks.gtasks.PlayServices;
public class FlavorSetup {
private final PlayServices playServices;
private final BillingClient billingClient;
@Inject
public FlavorSetup(PlayServices playServices, BillingClient billingClient) {
this.playServices = playServices;
public FlavorSetup(BillingClient billingClient) {
this.billingClient = billingClient;
}
public void setup() {
billingClient.initialize();
playServices.refresh();
}
}

@ -1,5 +1,7 @@
package org.tasks.gtasks;
import static io.reactivex.Single.fromCallable;
import android.accounts.Account;
import android.app.Activity;
import android.content.Context;
@ -12,9 +14,15 @@ import com.google.android.gms.common.GoogleApiAvailability;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.tasks.TasksScopes;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import java.io.IOException;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.LocationDao;
import org.tasks.injection.ForApplication;
import org.tasks.play.AuthResultHandler;
import org.tasks.preferences.Preferences;
@ -27,15 +35,39 @@ public class PlayServices {
private final Context context;
private final Preferences preferences;
private final GoogleAccountManager accountManager;
private final GoogleTaskListDao googleTaskListDao;
private final LocationDao locationDao;
@Inject
public PlayServices(
@ForApplication Context context,
Preferences preferences,
GoogleAccountManager googleAccountManager) {
GoogleAccountManager googleAccountManager,
GoogleTaskListDao googleTaskListDao,
LocationDao locationDao) {
this.context = context;
this.preferences = preferences;
this.accountManager = googleAccountManager;
this.googleTaskListDao = googleTaskListDao;
this.locationDao = locationDao;
}
public Disposable check(Activity activity) {
return Single.zip(
googleTaskListDao.accountCount(),
locationDao.geofenceCount(),
fromCallable(() -> preferences.getBoolean(R.string.p_google_drive_backup, false)),
(gtaskCount, geofenceCount, gdrive) -> gtaskCount > 0 || geofenceCount > 0 || gdrive)
.subscribeOn(Schedulers.io())
.map(needsCheck -> !needsCheck || refreshAndCheck())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
success -> {
if (!success && !preferences.getBoolean(R.string.warned_play_services, false)) {
preferences.setBoolean(R.string.warned_play_services, true);
resolve(activity);
}
});
}
public boolean refreshAndCheck() {
@ -43,11 +75,11 @@ public class PlayServices {
return isPlayServicesAvailable();
}
public boolean isPlayServicesAvailable() {
boolean isPlayServicesAvailable() {
return getResult() == ConnectionResult.SUCCESS;
}
public void refresh() {
private void refresh() {
GoogleApiAvailability instance = GoogleApiAvailability.getInstance();
int googlePlayServicesAvailable = instance.isGooglePlayServicesAvailable(context);
preferences.setInt(R.string.play_services_available, googlePlayServicesAvailable);
@ -63,9 +95,7 @@ public class PlayServices {
if (googleApiAvailability.isUserResolvableError(error)) {
googleApiAvailability.getErrorDialog(activity, error, REQUEST_RESOLUTION).show();
} else {
Toast.makeText(
activity, R.string.common_google_play_services_notification_ticker, Toast.LENGTH_LONG)
.show();
Toast.makeText(activity, getStatus(), Toast.LENGTH_LONG).show();
}
}

@ -61,6 +61,7 @@ import org.tasks.data.TagData;
import org.tasks.data.TagDataDao;
import org.tasks.dialogs.SortDialog;
import org.tasks.fragments.CommentBarFragment;
import org.tasks.gtasks.PlayServices;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.intents.TaskIntents;
@ -113,6 +114,7 @@ public class MainActivity extends InjectingAppCompatActivity
@Inject CaldavDao caldavDao;
@Inject LocalBroadcastManager localBroadcastManager;
@Inject TaskCreator taskCreator;
@Inject PlayServices playServices;
@BindView(R.id.drawer_layout)
DrawerLayout drawerLayout;
@ -344,7 +346,7 @@ public class MainActivity extends InjectingAppCompatActivity
localBroadcastManager.registerRepeatReceiver(repeatConfirmationReceiver);
disposables.add(syncAdapters.checkPlayServices(this));
disposables.add(playServices.check(this));
}
public void restart() {

@ -4,6 +4,7 @@ import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import io.reactivex.Single;
import java.util.List;
@Dao
@ -23,6 +24,9 @@ public interface LocationDao {
"SELECT locations.* FROM locations INNER JOIN tasks ON tasks._id = locations.task WHERE tasks.deleted = 0 AND tasks.completed = 0")
List<Location> getActiveGeofences();
@Query("SELECT COUNT(*) FROM locations")
Single<Integer> geofenceCount();
@Delete
void delete(Location location);

@ -1,58 +1,20 @@
package org.tasks.gtasks;
import android.app.Activity;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.data.GoogleTaskListDao;
import org.tasks.preferences.Preferences;
public class GtaskSyncAdapterHelper {
private final Preferences preferences;
private final PlayServices playServices;
private final GoogleTaskListDao googleTaskListDao;
private final Tracker tracker;
@Inject
public GtaskSyncAdapterHelper(
Preferences preferences,
PlayServices playServices,
GoogleTaskListDao googleTaskListDao,
Tracker tracker) {
this.preferences = preferences;
public GtaskSyncAdapterHelper(PlayServices playServices, GoogleTaskListDao googleTaskListDao) {
this.playServices = playServices;
this.googleTaskListDao = googleTaskListDao;
this.tracker = tracker;
}
public boolean isEnabled() {
return hasAccounts() && playServices.isPlayServicesAvailable();
}
private boolean hasAccounts() {
return !googleTaskListDao.getAccounts().isEmpty();
}
public Disposable checkPlayServices(Activity activity) {
return googleTaskListDao
.accountCount()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
count -> {
if (count > 0
&& !playServices.refreshAndCheck()
&& !preferences.getBoolean(R.string.warned_play_services, false)) {
preferences.setBoolean(R.string.warned_play_services, true);
playServices.resolve(activity);
tracker.reportEvent(
Tracking.Events.PLAY_SERVICES_WARNING, playServices.getStatus());
}
});
return !googleTaskListDao.getAccounts().isEmpty() && playServices.isPlayServicesAvailable();
}
}

@ -40,8 +40,4 @@ public class SyncAdapters {
public boolean isCaldavSyncEnabled() {
return caldavDao.getAccounts().size() > 0;
}
public Disposable checkPlayServices(Activity activity) {
return gtaskSyncAdapterHelper.checkPlayServices(activity);
}
}

Loading…
Cancel
Save