Flavor specific injections

pull/384/head
Alex Baker 9 years ago
parent 5ab3cbaf4f
commit df6a64cf7a

@ -2,11 +2,6 @@ package org.tasks.injection;
import com.todoroo.astrid.dao.MetadataDaoTests; import com.todoroo.astrid.dao.MetadataDaoTests;
import com.todoroo.astrid.dao.TaskDaoTests; import com.todoroo.astrid.dao.TaskDaoTests;
import com.todoroo.astrid.gtasks.GtasksIndentActionTest;
import com.todoroo.astrid.gtasks.GtasksListServiceTest;
import com.todoroo.astrid.gtasks.GtasksMetadataServiceTest;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdaterTest;
import com.todoroo.astrid.gtasks.GtasksTaskMovingTest;
import com.todoroo.astrid.model.TaskTest; import com.todoroo.astrid.model.TaskTest;
import com.todoroo.astrid.provider.Astrid3ProviderTests; import com.todoroo.astrid.provider.Astrid3ProviderTests;
import com.todoroo.astrid.reminders.NotificationTests; import com.todoroo.astrid.reminders.NotificationTests;
@ -20,13 +15,7 @@ import com.todoroo.astrid.sync.NewSyncTestCase;
import org.tasks.scheduling.BackupServiceTests; import org.tasks.scheduling.BackupServiceTests;
import javax.inject.Singleton; public interface BaseTestComponent {
import dagger.Component;
@Singleton
@Component(modules = TestModule.class)
public interface TestComponent {
void inject(ReminderServiceTest reminderServiceTest); void inject(ReminderServiceTest reminderServiceTest);
void inject(TaskTest taskTest); void inject(TaskTest taskTest);
@ -51,15 +40,5 @@ public interface TestComponent {
void inject(BackupServiceTests backupServiceTests); void inject(BackupServiceTests backupServiceTests);
void inject(GtasksIndentActionTest gtasksIndentActionTest);
void inject(GtasksTaskMovingTest gtasksTaskMovingTest);
void inject(GtasksListServiceTest gtasksListServiceTest);
void inject(GtasksTaskListUpdaterTest gtasksTaskListUpdaterTest);
GtasksMetadataServiceTest.GtasksMetadataServiceTestComponent plus(GtasksMetadataServiceTest.GtasksMetadataServiceTestModule gtasksMetadataServiceTestModule);
NotificationTests.NotificationTestsComponent plus(NotificationTests.NotificationTestsModule notificationTestsModule); NotificationTests.NotificationTestsComponent plus(NotificationTests.NotificationTestsModule notificationTestsModule);
} }

@ -2,25 +2,7 @@ package org.tasks.injection;
import android.content.Context; import android.content.Context;
import org.tasks.scheduling.BackupServiceTests;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDaoTests;
import com.todoroo.astrid.dao.TaskDaoTests;
import com.todoroo.astrid.gtasks.GtasksIndentActionTest;
import com.todoroo.astrid.gtasks.GtasksListServiceTest;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdaterTest;
import com.todoroo.astrid.gtasks.GtasksTaskMovingTest;
import com.todoroo.astrid.model.TaskTest;
import com.todoroo.astrid.provider.Astrid3ProviderTests;
import com.todoroo.astrid.reminders.ReminderServiceTest;
import com.todoroo.astrid.repeats.NewRepeatTests;
import com.todoroo.astrid.service.QuickAddMarkupTest;
import com.todoroo.astrid.service.TitleParserTest;
import com.todoroo.astrid.subtasks.SubtasksHelperTest;
import com.todoroo.astrid.subtasks.SubtasksMovingTest;
import com.todoroo.astrid.subtasks.SubtasksTestCase;
import com.todoroo.astrid.sync.NewSyncTestCase;
import com.todoroo.astrid.sync.SyncModelTest;
import javax.inject.Singleton; import javax.inject.Singleton;

@ -1,12 +0,0 @@
package com.todoroo.astrid.gtasks;
import android.test.AndroidTestCase;
import javax.inject.Inject;
public class GtasksIndentActionTest extends AndroidTestCase {
@Inject
public GtasksIndentActionTest() {
}
}

@ -1,12 +0,0 @@
package com.todoroo.astrid.gtasks;
import android.test.AndroidTestCase;
import javax.inject.Inject;
public class GtasksListServiceTest extends AndroidTestCase {
@Inject
public GtasksListServiceTest() {
}
}

@ -1,12 +0,0 @@
package com.todoroo.astrid.gtasks;
import android.test.AndroidTestCase;
import javax.inject.Inject;
public class GtasksTaskListUpdaterTest extends AndroidTestCase {
@Inject
public GtasksTaskListUpdaterTest() {
}
}

@ -1,12 +0,0 @@
package com.todoroo.astrid.gtasks;
import android.test.AndroidTestCase;
import javax.inject.Inject;
public class GtasksTaskMovingTest extends AndroidTestCase {
@Inject
public GtasksTaskMovingTest() {
}
}

@ -0,0 +1,10 @@
package org.tasks.injection;
import javax.inject.Singleton;
import dagger.Component;
@Singleton
@Component(modules = TestModule.class)
public interface TestComponent extends BaseTestComponent {
}

@ -0,0 +1,26 @@
package org.tasks.injection;
import com.todoroo.astrid.gtasks.GtasksIndentActionTest;
import com.todoroo.astrid.gtasks.GtasksListServiceTest;
import com.todoroo.astrid.gtasks.GtasksMetadataServiceTest;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdaterTest;
import com.todoroo.astrid.gtasks.GtasksTaskMovingTest;
import javax.inject.Singleton;
import dagger.Component;
@Singleton
@Component(modules = TestModule.class)
public interface TestComponent extends BaseTestComponent {
GtasksMetadataServiceTest.GtasksMetadataServiceTestComponent plus(GtasksMetadataServiceTest.GtasksMetadataServiceTestModule gtasksMetadataServiceTestModule);
void inject(GtasksIndentActionTest gtasksIndentActionTest);
void inject(GtasksTaskMovingTest gtasksTaskMovingTest);
void inject(GtasksListServiceTest gtasksListServiceTest);
void inject(GtasksTaskListUpdaterTest gtasksTaskListUpdaterTest);
}

@ -1,7 +1,7 @@
package com.todoroo.astrid.gtasks; package com.todoroo.astrid.gtasks;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends TaskListFragment { public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId"; public static final String TOKEN_STORE_ID = "storeId";
} }

@ -1,10 +0,0 @@
package com.todoroo.astrid.gtasks;
import javax.inject.Inject;
public class GtasksMetadataService {
@Inject
public GtasksMetadataService() {
}
}

@ -1,10 +0,0 @@
package com.todoroo.astrid.gtasks;
import javax.inject.Inject;
public class GtasksPreferences {
@Inject
public GtasksPreferences() {
}
}

@ -1,10 +0,0 @@
package com.todoroo.astrid.gtasks;
import javax.inject.Inject;
public class GtasksTaskListUpdater {
@Inject
public GtasksTaskListUpdater() {
}
}

@ -1,10 +0,0 @@
package com.todoroo.astrid.gtasks.auth;
import javax.inject.Inject;
public class GtasksLoginActivity {
@Inject
public GtasksLoginActivity() {
}
}

@ -1,14 +0,0 @@
package com.todoroo.astrid.gtasks.sync;
import javax.inject.Inject;
public class GtasksSyncService {
@Inject
public GtasksSyncService() {
}
public void initialize() {
}
}

@ -0,0 +1,14 @@
package org.tasks;
import javax.inject.Inject;
public class FlavorSetup {
@Inject
public FlavorSetup() {
}
public void setup() {
}
}

@ -0,0 +1,11 @@
package org.tasks.injection;
import javax.inject.Singleton;
import dagger.Subcomponent;
@Singleton
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent extends BaseActivityComponent {
}

@ -0,0 +1,8 @@
package org.tasks.injection;
import dagger.Subcomponent;
@Subcomponent(modules = BroadcastModule.class)
public interface BroadcastComponent extends BaseBroadcastComponent {
}

@ -0,0 +1,26 @@
package org.tasks.preferences;
import android.os.Bundle;
import android.preference.PreferenceScreen;
import org.tasks.R;
import org.tasks.injection.ActivityComponent;
public class BasicPreferences extends BaseBasicPreferences {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceScreen preferenceScreen = getPreferenceScreen();
preferenceScreen.removePreference(findPreference(getString(R.string.synchronization)));
preferenceScreen.removePreference(findPreference(getString(R.string.p_tesla_unread_enabled)));
preferenceScreen.removePreference(findPreference(getString(R.string.p_tasker_enabled)));
preferenceScreen.removePreference(findPreference(getString(R.string.p_collect_statistics)));
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
}

@ -0,0 +1,39 @@
package org.tasks;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdater;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
import org.tasks.billing.IabHelper;
import org.tasks.preferences.Preferences;
import org.tasks.receivers.TeslaUnreadReceiver;
import javax.inject.Inject;
public class FlavorSetup {
private final Preferences preferences;
private final GtasksSyncService gtasksSyncService;
private final GtasksPreferenceService gtasksPreferenceService;
private final TeslaUnreadReceiver teslaUnreadReceiver;
private final IabHelper iabHelper;
@Inject
public FlavorSetup(Preferences preferences,
@SuppressWarnings("UnusedParameters") GtasksTaskListUpdater gtasksTaskListUpdater,
GtasksSyncService gtasksSyncService, GtasksPreferenceService gtasksPreferenceService,
TeslaUnreadReceiver teslaUnreadReceiver, IabHelper iabHelper) {
this.preferences = preferences;
this.gtasksSyncService = gtasksSyncService;
this.gtasksPreferenceService = gtasksPreferenceService;
this.teslaUnreadReceiver = teslaUnreadReceiver;
this.iabHelper = iabHelper;
}
public void setup() {
iabHelper.startSetup();
teslaUnreadReceiver.setEnabled(preferences.getBoolean(R.string.p_tesla_unread_enabled, false));
gtasksPreferenceService.stopOngoing(); // if sync ongoing flag was set, clear it
gtasksSyncService.initialize();
}
}

@ -35,6 +35,7 @@ import org.json.JSONException;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R; import org.tasks.R;
import org.tasks.injection.ForApplication; import org.tasks.injection.ForApplication;
import org.tasks.preferences.Preferences;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -42,6 +43,8 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import timber.log.Timber;
/** /**
* Provides convenience methods for in-app billing. You can create one instance of this * Provides convenience methods for in-app billing. You can create one instance of this
@ -155,35 +158,23 @@ public class IabHelper {
// some fields on the getSkuDetails response bundle // some fields on the getSkuDetails response bundle
public static final String GET_SKU_DETAILS_ITEM_LIST = "ITEM_ID_LIST"; public static final String GET_SKU_DETAILS_ITEM_LIST = "ITEM_ID_LIST";
public static final String GET_SKU_DETAILS_ITEM_TYPE_LIST = "ITEM_TYPE_LIST"; public static final String GET_SKU_DETAILS_ITEM_TYPE_LIST = "ITEM_TYPE_LIST";
private Preferences preferences;
@Inject @Inject
public IabHelper(@ForApplication Context ctx) { public IabHelper(@ForApplication Context ctx, Preferences preferences) {
this.preferences = preferences;
mContext = ctx.getApplicationContext(); mContext = ctx.getApplicationContext();
mSignatureBase64 = ctx.getString(R.string.gp_key); mSignatureBase64 = ctx.getString(R.string.gp_key);
logDebug("IAB helper created."); logDebug("IAB helper created.");
} }
/**
* Callback for setup process. This listener's {@link #onIabSetupFinished} method is called
* when the setup process is complete.
*/
public interface OnIabSetupFinishedListener {
/**
* Called to notify that setup is complete.
*
* @param result The result of the setup process.
*/
void onIabSetupFinished(IabResult result);
}
/** /**
* Starts the setup process. This will start up the setup process asynchronously. * Starts the setup process. This will start up the setup process asynchronously.
* You will be notified through the listener when the setup process is complete. * You will be notified through the listener when the setup process is complete.
* This method is safe to call from a UI thread. * This method is safe to call from a UI thread.
* *
* @param listener The listener to notify when the setup process is complete.
*/ */
public void startSetup(final OnIabSetupFinishedListener listener) { public void startSetup() {
// If already set up, can't do it again. // If already set up, can't do it again.
checkNotDisposed(); checkNotDisposed();
if (mSetupDone) throw new IllegalStateException("IAB helper is already set up."); if (mSetupDone) throw new IllegalStateException("IAB helper is already set up.");
@ -209,7 +200,7 @@ public class IabHelper {
// check for in-app billing v3 support // check for in-app billing v3 support
int response = mService.isBillingSupported(3, packageName, ITEM_TYPE_INAPP); int response = mService.isBillingSupported(3, packageName, ITEM_TYPE_INAPP);
if (response != BILLING_RESPONSE_RESULT_OK) { if (response != BILLING_RESPONSE_RESULT_OK) {
if (listener != null) listener.onIabSetupFinished(new IabResult(response, onIabSetupFinished(new IabResult(response,
"Error checking for billing v3 support.")); "Error checking for billing v3 support."));
// if in-app purchases aren't supported, neither are subscriptions. // if in-app purchases aren't supported, neither are subscriptions.
@ -231,17 +222,13 @@ public class IabHelper {
mSetupDone = true; mSetupDone = true;
} }
catch (RemoteException e) { catch (RemoteException e) {
if (listener != null) { onIabSetupFinished(new IabResult(IABHELPER_REMOTE_EXCEPTION,
listener.onIabSetupFinished(new IabResult(IABHELPER_REMOTE_EXCEPTION,
"RemoteException while setting up in-app billing.")); "RemoteException while setting up in-app billing."));
}
e.printStackTrace(); e.printStackTrace();
return; return;
} }
if (listener != null) { onIabSetupFinished(new IabResult(BILLING_RESPONSE_RESULT_OK, "Setup successful."));
listener.onIabSetupFinished(new IabResult(BILLING_RESPONSE_RESULT_OK, "Setup successful."));
}
} }
}; };
@ -253,12 +240,32 @@ public class IabHelper {
} }
else { else {
// no service available to handle that Intent // no service available to handle that Intent
if (listener != null) { onIabSetupFinished(
listener.onIabSetupFinished(
new IabResult(BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE, new IabResult(BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE,
"Billing service unavailable on device.")); "Billing service unavailable on device."));
} }
} }
private void onIabSetupFinished(IabResult result) {
if (result.isSuccess()) {
Timber.d("IAB setup successful");
queryInventoryAsync();
} else {
Timber.e(result.getMessage());
}
}
private void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
Timber.e("Query inventory failed: %s", result);
} else {
if (inventory.hasPurchase(mContext.getString(R.string.sku_tesla_unread))) {
preferences.setBoolean(R.string.p_purchased_tesla_unread, false);
}
if (inventory.hasPurchase(mContext.getString(R.string.sku_tasker))) {
preferences.setBoolean(R.string.p_purchased_tasker, false);
}
}
} }
/** /**
@ -291,7 +298,6 @@ public class IabHelper {
return mSubscriptionsSupported; return mSubscriptionsSupported;
} }
/** /**
* Callback that notifies when a purchase is finished. * Callback that notifies when a purchase is finished.
*/ */
@ -508,7 +514,7 @@ public class IabHelper {
/** /**
* Queries the inventory. This will query all owned items from the server, as well as * Queries the inventory. This will query all owned items from the server, as well as
* information on additional skus, if specified. This method may block or take long to execute. * information on additional skus, if specified. This method may block or take long to execute.
* Do not call from a UI thread. For that, use the non-blocking version {@link #refreshInventoryAsync}. * Do not call from a UI thread. For that, use the non-blocking version {@link #queryInventoryAsync}.
* *
* @param querySkuDetails if true, SKU details (price, description, etc) will be queried as well * @param querySkuDetails if true, SKU details (price, description, etc) will be queried as well
* as purchase information. * as purchase information.
@ -561,20 +567,6 @@ public class IabHelper {
} }
} }
/**
* Listener that notifies when an inventory query operation completes.
*/
public interface QueryInventoryFinishedListener {
/**
* Called to notify that an inventory query operation completed.
*
* @param result The result of the operation.
* @param inv The inventory.
*/
public void onQueryInventoryFinished(IabResult result, Inventory inv);
}
/** /**
* Asynchronous wrapper for inventory query. This will perform an inventory * Asynchronous wrapper for inventory query. This will perform an inventory
* query as described in {@link #queryInventory}, but will do so asynchronously * query as described in {@link #queryInventory}, but will do so asynchronously
@ -583,11 +575,8 @@ public class IabHelper {
* *
* @param querySkuDetails as in {@link #queryInventory} * @param querySkuDetails as in {@link #queryInventory}
* @param moreSkus as in {@link #queryInventory} * @param moreSkus as in {@link #queryInventory}
* @param listener The listener to notify when the refresh operation completes.
*/ */
public void queryInventoryAsync(final boolean querySkuDetails, public void queryInventoryAsync(final boolean querySkuDetails, final List<String> moreSkus) {
final List<String> moreSkus,
final QueryInventoryFinishedListener listener) {
final Handler handler = new Handler(); final Handler handler = new Handler();
checkNotDisposed(); checkNotDisposed();
checkSetupDone("queryInventory"); checkSetupDone("queryInventory");
@ -607,10 +596,10 @@ public class IabHelper {
final IabResult result_f = result; final IabResult result_f = result;
final Inventory inv_f = inv; final Inventory inv_f = inv;
if (!mDisposed && listener != null) { if (!mDisposed) {
handler.post(new Runnable() { handler.post(new Runnable() {
public void run() { public void run() {
listener.onQueryInventoryFinished(result_f, inv_f); onQueryInventoryFinished(result_f, inv_f);
} }
}); });
} }
@ -618,15 +607,14 @@ public class IabHelper {
})).start(); })).start();
} }
public void queryInventoryAsync(QueryInventoryFinishedListener listener) { public void queryInventoryAsync() {
queryInventoryAsync(true, null, listener); queryInventoryAsync(true, null);
} }
public void queryInventoryAsync(boolean querySkuDetails, QueryInventoryFinishedListener listener) { public void queryInventoryAsync(boolean querySkuDetails) {
queryInventoryAsync(querySkuDetails, null, listener); queryInventoryAsync(querySkuDetails, null);
} }
/** /**
* Consumes a given in-app product. Consuming can only be done on an item * Consumes a given in-app product. Consuming can only be done on an item
* that's owned, and as a result of consumption, the user will no longer own it. * that's owned, and as a result of consumption, the user will no longer own it.
@ -679,7 +667,7 @@ public class IabHelper {
* @param purchase The purchase that was (or was to be) consumed. * @param purchase The purchase that was (or was to be) consumed.
* @param result The result of the consumption operation. * @param result The result of the consumption operation.
*/ */
public void onConsumeFinished(Purchase purchase, IabResult result); void onConsumeFinished(Purchase purchase, IabResult result);
} }
/** /**
@ -693,7 +681,7 @@ public class IabHelper {
* @param results The results of each consumption operation, corresponding to each * @param results The results of each consumption operation, corresponding to each
* sku. * sku.
*/ */
public void onConsumeMultiFinished(List<Purchase> purchases, List<IabResult> results); void onConsumeMultiFinished(List<Purchase> purchases, List<IabResult> results);
} }
/** /**
@ -713,7 +701,7 @@ public class IabHelper {
} }
/** /**
* Same as {@link consumeAsync}, but for multiple items at once. * Same as {@link #consumeAsync}, but for multiple items at once.
* @param purchases The list of PurchaseInfo objects representing the purchases to consume. * @param purchases The list of PurchaseInfo objects representing the purchases to consume.
* @param listener The listener to notify when the consumption operation finishes. * @param listener The listener to notify when the consumption operation finishes.
*/ */

@ -0,0 +1,20 @@
package org.tasks.injection;
import com.todoroo.astrid.gtasks.GtasksPreferences;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import org.tasks.locale.ui.activity.TaskerSettingsActivity;
import javax.inject.Singleton;
import dagger.Subcomponent;
@Singleton
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent extends BaseActivityComponent {
void inject(GtasksPreferences gtasksPreferences);
void inject(TaskerSettingsActivity taskerSettingsActivity);
void inject(GtasksLoginActivity gtasksLoginActivity);
}

@ -0,0 +1,10 @@
package org.tasks.injection;
import org.tasks.receivers.TeslaUnreadReceiver;
import dagger.Subcomponent;
@Subcomponent(modules = BroadcastModule.class)
public interface BroadcastComponent extends BaseBroadcastComponent {
void inject(TeslaUnreadReceiver teslaUnreadReceiver);
}

@ -0,0 +1,104 @@
package org.tasks.preferences;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import org.tasks.BuildConfig;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.billing.IabHelper;
import org.tasks.billing.IabResult;
import org.tasks.billing.Purchase;
import org.tasks.injection.ActivityComponent;
import org.tasks.receivers.TeslaUnreadReceiver;
import javax.inject.Inject;
public class BasicPreferences extends BaseBasicPreferences implements IabHelper.OnIabPurchaseFinishedListener {
private static final int REQUEST_PURCHASE_TESLA_UNREAD = 10002;
private static final int REQUEST_PURCHASE_TASKER = 10003;
@Inject Tracker tracker;
@Inject IabHelper iabHelper;
@Inject TeslaUnreadReceiver teslaUnreadReceiver;
@Inject Preferences preferences;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findPreference(getString(R.string.p_tesla_unread_enabled)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
if ((boolean) newValue && !preferences.getBoolean(R.string.p_purchased_tesla_unread, BuildConfig.DEBUG)) {
iabHelper.launchPurchaseFlow(BasicPreferences.this, getString(R.string.sku_tesla_unread), REQUEST_PURCHASE_TESLA_UNREAD, BasicPreferences.this);
} else {
teslaUnreadReceiver.setEnabled((boolean) newValue);
return true;
}
}
return false;
}
});
findPreference(getString(R.string.p_tasker_enabled)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
if ((boolean) newValue && !preferences.getBoolean(R.string.p_purchased_tasker, BuildConfig.DEBUG)) {
iabHelper.launchPurchaseFlow(BasicPreferences.this, getString(R.string.sku_tasker), REQUEST_PURCHASE_TASKER, BasicPreferences.this);
} else {
return true;
}
}
return false;
}
});
findPreference(getString(R.string.p_collect_statistics)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
tracker.setTrackingEnabled((boolean) newValue);
return true;
}
return false;
}
});
}
@Override
public void onIabPurchaseFinished(IabResult result, final Purchase info) {
if (result.isSuccess()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (info.getSku().equals(getString(R.string.sku_tasker))) {
preferences.setBoolean(R.string.p_purchased_tasker, true);
findPreference(getString(R.string.p_tasker_enabled)).setEnabled(true);
} else if (info.getSku().equals(getString(R.string.sku_tesla_unread))) {
preferences.setBoolean(R.string.p_purchased_tesla_unread, true);
findPreference(getString(R.string.p_tesla_unread_enabled)).setEnabled(true);
}
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_PURCHASE_TASKER || requestCode == REQUEST_PURCHASE_TESLA_UNREAD) {
iabHelper.handleActivityResult(requestCode, resultCode, data);
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
}

@ -23,8 +23,6 @@ import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
import com.todoroo.astrid.provider.Astrid2TaskProvider; import com.todoroo.astrid.provider.Astrid2TaskProvider;
import com.todoroo.astrid.provider.Astrid3ContentProvider; import com.todoroo.astrid.provider.Astrid3ContentProvider;
import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.TaskToTagMetadata;
@ -55,8 +53,6 @@ public class StartupService {
private final TagDataDao tagDataDao; private final TagDataDao tagDataDao;
private final Database database; private final Database database;
private final GtasksPreferenceService gtasksPreferenceService;
private final GtasksSyncService gtasksSyncService;
private final MetadataDao metadataDao; private final MetadataDao metadataDao;
private final Preferences preferences; private final Preferences preferences;
private final TasksXmlImporter xmlImporter; private final TasksXmlImporter xmlImporter;
@ -65,14 +61,11 @@ public class StartupService {
private final DialogBuilder dialogBuilder; private final DialogBuilder dialogBuilder;
@Inject @Inject
public StartupService(TagDataDao tagDataDao, Database database, GtasksPreferenceService gtasksPreferenceService, public StartupService(TagDataDao tagDataDao, Database database, MetadataDao metadataDao,
GtasksSyncService gtasksSyncService, MetadataDao metadataDao,
Preferences preferences, TasksXmlImporter xmlImporter, Preferences preferences, TasksXmlImporter xmlImporter,
TaskDeleter taskDeleter, Broadcaster broadcaster, DialogBuilder dialogBuilder) { TaskDeleter taskDeleter, Broadcaster broadcaster, DialogBuilder dialogBuilder) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.database = database; this.database = database;
this.gtasksPreferenceService = gtasksPreferenceService;
this.gtasksSyncService = gtasksSyncService;
this.metadataDao = metadataDao; this.metadataDao = metadataDao;
this.preferences = preferences; this.preferences = preferences;
this.xmlImporter = xmlImporter; this.xmlImporter = xmlImporter;
@ -136,11 +129,6 @@ public class StartupService {
@Override @Override
public void run() { public void run() {
taskDeleter.deleteTasksWithEmptyTitles(null); taskDeleter.deleteTasksWithEmptyTitles(null);
// if sync ongoing flag was set, clear it
gtasksPreferenceService.stopOngoing();
gtasksSyncService.initialize();
} }
}).start(); }).start();

@ -1,7 +1,5 @@
package org.tasks; package org.tasks;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.util.Log; import android.util.Log;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
@ -12,34 +10,23 @@ import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskListMetadataDao; import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.dao.UserActivityDao; import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.gtasks.GtasksListService;
import com.todoroo.astrid.gtasks.GtasksMetadataService;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdater;
import com.todoroo.astrid.gtasks.sync.GtasksSyncService;
import com.todoroo.astrid.service.SyncV2Service; import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TagService;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.billing.IabHelper;
import org.tasks.billing.IabResult;
import org.tasks.billing.Inventory;
import org.tasks.filters.FilterCounter; import org.tasks.filters.FilterCounter;
import org.tasks.injection.ApplicationComponent; import org.tasks.injection.ApplicationComponent;
import org.tasks.injection.InjectingApplication; import org.tasks.injection.InjectingApplication;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.receivers.TeslaUnreadReceiver;
import org.tasks.sync.SyncThrottle; import org.tasks.sync.SyncThrottle;
import javax.inject.Inject; import javax.inject.Inject;
import timber.log.Timber; import timber.log.Timber;
import static org.tasks.preferences.BasicPreferences.toggleTasker;
@SuppressWarnings("UnusedDeclaration") @SuppressWarnings("UnusedDeclaration")
public class Tasks extends InjectingApplication implements IabHelper.OnIabSetupFinishedListener, IabHelper.QueryInventoryFinishedListener { public class Tasks extends InjectingApplication {
@Inject Database database; @Inject Database database;
@Inject TaskDao taskDao; @Inject TaskDao taskDao;
@ -51,19 +38,13 @@ public class Tasks extends InjectingApplication implements IabHelper.OnIabSetupF
@Inject TaskListMetadataDao taskListMetadataDao; @Inject TaskListMetadataDao taskListMetadataDao;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject SyncV2Service syncV2Service; @Inject SyncV2Service syncV2Service;
@Inject GtasksPreferenceService gtasksPreferenceService;
@Inject GtasksListService gtasksListService;
@Inject GtasksMetadataService gtasksMetadataService;
@Inject GtasksTaskListUpdater gtasksTaskListUpdater;
@Inject GtasksSyncService gtasksSyncService;
@Inject TagService tagService; @Inject TagService tagService;
@Inject Broadcaster broadcaster; @Inject Broadcaster broadcaster;
@Inject FilterCounter filterCounter; @Inject FilterCounter filterCounter;
@Inject SyncThrottle syncThrottle; @Inject SyncThrottle syncThrottle;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject Tracker tracker; @Inject Tracker tracker;
@Inject TeslaUnreadReceiver teslaUnreadReceiver; @Inject FlavorSetup flavorSetup;
@Inject IabHelper iabHelper;
@Override @Override
public void onCreate() { public void onCreate() {
@ -77,40 +58,7 @@ public class Tasks extends InjectingApplication implements IabHelper.OnIabSetupF
tracker.setTrackingEnabled(preferences.isTrackingEnabled()); tracker.setTrackingEnabled(preferences.isTrackingEnabled());
iabHelper.startSetup(this); flavorSetup.setup();
teslaUnreadReceiver.setEnabled(preferences.getBoolean(R.string.p_tesla_unread_enabled, false));
try {
toggleTasker(this, preferences.getBoolean(R.string.p_tasker_enabled, false));
} catch(Exception e) {
Timber.e(e, e.getMessage());
tracker.reportException(e);
}
}
@Override
public void onIabSetupFinished(IabResult result) {
if (result.isSuccess()) {
Timber.d("IAB setup successful");
iabHelper.queryInventoryAsync(this);
} else {
Timber.e(result.getMessage());
}
}
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
if (result.isFailure()) {
Timber.e("Query inventory failed: %s", result);
} else {
if (inventory.hasPurchase(getString(R.string.sku_tesla_unread))) {
preferences.setBoolean(R.string.p_purchased_tesla_unread, false);
}
if (inventory.hasPurchase(getString(R.string.sku_tasker))) {
preferences.setBoolean(R.string.p_purchased_tasker, false);
}
}
} }
private static class ErrorReportingTree extends Timber.Tree { private static class ErrorReportingTree extends Timber.Tree {

@ -12,8 +12,6 @@ import com.todoroo.astrid.core.DefaultsPreferences;
import com.todoroo.astrid.core.OldTaskPreferences; import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.files.AACRecordingActivity; import com.todoroo.astrid.files.AACRecordingActivity;
import com.todoroo.astrid.gcal.CalendarReminderActivity; import com.todoroo.astrid.gcal.CalendarReminderActivity;
import com.todoroo.astrid.gtasks.GtasksPreferences;
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import com.todoroo.astrid.reminders.ReminderPreferences; import com.todoroo.astrid.reminders.ReminderPreferences;
import com.todoroo.astrid.service.UpgradeActivity; import com.todoroo.astrid.service.UpgradeActivity;
import com.todoroo.astrid.widget.WidgetConfigActivity; import com.todoroo.astrid.widget.WidgetConfigActivity;
@ -37,7 +35,6 @@ import org.tasks.activities.ResetPreferencesActivity;
import org.tasks.activities.SortActivity; import org.tasks.activities.SortActivity;
import org.tasks.activities.TimePickerActivity; import org.tasks.activities.TimePickerActivity;
import org.tasks.files.FileExplore; import org.tasks.files.FileExplore;
import org.tasks.locale.ui.activity.TaskerSettingsActivity;
import org.tasks.preferences.AppearancePreferences; import org.tasks.preferences.AppearancePreferences;
import org.tasks.preferences.BackupPreferences; import org.tasks.preferences.BackupPreferences;
import org.tasks.preferences.BasicPreferences; import org.tasks.preferences.BasicPreferences;
@ -49,13 +46,7 @@ import org.tasks.reminders.NotificationActivity;
import org.tasks.reminders.SnoozeActivity; import org.tasks.reminders.SnoozeActivity;
import org.tasks.voice.VoiceCommandActivity; import org.tasks.voice.VoiceCommandActivity;
import javax.inject.Singleton; public interface BaseActivityComponent {
import dagger.Subcomponent;
@Singleton
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {
FragmentComponent plus(FragmentModule module); FragmentComponent plus(FragmentModule module);
@ -123,8 +114,6 @@ public interface ActivityComponent {
void inject(VoiceCommandActivity voiceCommandActivity); void inject(VoiceCommandActivity voiceCommandActivity);
void inject(GtasksLoginActivity gtasksLoginActivity);
void inject(DonationActivity donationActivity); void inject(DonationActivity donationActivity);
void inject(ClearGtaskDataActivity clearGtaskDataActivity); void inject(ClearGtaskDataActivity clearGtaskDataActivity);
@ -150,8 +139,4 @@ public interface ActivityComponent {
void inject(DateShortcutPreferences dateShortcutPreferences); void inject(DateShortcutPreferences dateShortcutPreferences);
void inject(AppearancePreferences appearancePreferences); void inject(AppearancePreferences appearancePreferences);
void inject(GtasksPreferences gtasksPreferences);
void inject(TaskerSettingsActivity taskerSettingsActivity);
} }

@ -15,12 +15,8 @@ import org.tasks.receivers.ListNotificationReceiver;
import org.tasks.receivers.MyPackageReplacedReceiver; import org.tasks.receivers.MyPackageReplacedReceiver;
import org.tasks.receivers.RefreshReceiver; import org.tasks.receivers.RefreshReceiver;
import org.tasks.receivers.TaskNotificationReceiver; import org.tasks.receivers.TaskNotificationReceiver;
import org.tasks.receivers.TeslaUnreadReceiver;
import dagger.Subcomponent; public interface BaseBroadcastComponent {
@Subcomponent(modules = BroadcastModule.class)
public interface BroadcastComponent {
void inject(TimerTaskCompleteListener timerTaskCompleteListener); void inject(TimerTaskCompleteListener timerTaskCompleteListener);
@ -49,6 +45,4 @@ public interface BroadcastComponent {
void inject(BootCompletedReceiver bootCompletedReceiver); void inject(BootCompletedReceiver bootCompletedReceiver);
void inject(TasksWidget tasksWidget); void inject(TasksWidget tasksWidget);
void inject(TeslaUnreadReceiver teslaUnreadReceiver);
} }

@ -0,0 +1,66 @@
package org.tasks.preferences;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.reminders.ReminderPreferences;
import org.tasks.R;
import org.tasks.injection.InjectingPreferenceActivity;
public abstract class BaseBasicPreferences extends InjectingPreferenceActivity {
private static final String EXTRA_RESULT = "extra_result";
private static final int RC_PREFS = 10001;
private Bundle result;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
result = savedInstanceState == null ? new Bundle() : savedInstanceState.getBundle(EXTRA_RESULT);
addPreferencesFromResource(R.xml.preferences);
addPreferencesFromResource(R.xml.preferences_addons);
addPreferencesFromResource(R.xml.preferences_privacy);
setupActivity(R.string.EPr_appearance_header, AppearancePreferences.class);
setupActivity(R.string.notifications, ReminderPreferences.class);
setupActivity(R.string.EPr_manage_header, OldTaskPreferences.class);
}
private void setupActivity(int key, final Class<?> target) {
findPreference(getString(key)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivityForResult(new Intent(BaseBasicPreferences.this, target), RC_PREFS);
return true;
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle(EXTRA_RESULT, result);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RC_PREFS) {
if (resultCode == Activity.RESULT_OK && data != null) {
result.putAll(data.getExtras());
setResult(Activity.RESULT_OK, new Intent() {{
putExtras(result);
}});
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}

@ -1,160 +0,0 @@
package org.tasks.preferences;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.Preference;
import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.reminders.ReminderPreferences;
import org.tasks.BuildConfig;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.billing.IabHelper;
import org.tasks.billing.IabResult;
import org.tasks.billing.Purchase;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.receivers.TeslaUnreadReceiver;
import javax.inject.Inject;
public class BasicPreferences extends InjectingPreferenceActivity implements IabHelper.OnIabPurchaseFinishedListener {
private static final String EXTRA_RESULT = "extra_result";
private static final int RC_PREFS = 10001;
private static final int REQUEST_PURCHASE_TESLA_UNREAD = 10002;
private static final int REQUEST_PURCHASE_TASKER = 10003;
private Bundle result;
@Inject Tracker tracker;
@Inject TeslaUnreadReceiver teslaUnreadReceiver;
@Inject Preferences preferences;
@Inject IabHelper iabHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
result = savedInstanceState == null ? new Bundle() : savedInstanceState.getBundle(EXTRA_RESULT);
addPreferencesFromResource(R.xml.preferences);
if (!getResources().getBoolean(R.bool.sync_supported)) {
getPreferenceScreen().removePreference(findPreference(getString(R.string.synchronization)));
}
if (getResources().getBoolean(R.bool.google_play_store_available)) {
addPreferencesFromResource(R.xml.preferences_addons);
addPreferencesFromResource(R.xml.preferences_privacy);
findPreference(getString(R.string.p_tesla_unread_enabled)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
if ((boolean) newValue && !preferences.getBoolean(R.string.p_purchased_tesla_unread, BuildConfig.DEBUG)) {
iabHelper.launchPurchaseFlow(BasicPreferences.this, getString(R.string.sku_tesla_unread), REQUEST_PURCHASE_TESLA_UNREAD, BasicPreferences.this);
} else {
teslaUnreadReceiver.setEnabled((boolean) newValue);
return true;
}
}
return false;
}
});
findPreference(getString(R.string.p_tasker_enabled)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
if ((boolean) newValue && !preferences.getBoolean(R.string.p_purchased_tasker, BuildConfig.DEBUG)) {
iabHelper.launchPurchaseFlow(BasicPreferences.this, getString(R.string.sku_tasker), REQUEST_PURCHASE_TASKER, BasicPreferences.this);
} else {
toggleTasker(BasicPreferences.this, (boolean) newValue);
return true;
}
}
return false;
}
});
findPreference(getString(R.string.p_collect_statistics)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) {
tracker.setTrackingEnabled((boolean) newValue);
return true;
}
return false;
}
});
}
setupActivity(R.string.EPr_appearance_header, AppearancePreferences.class);
setupActivity(R.string.notifications, ReminderPreferences.class);
setupActivity(R.string.EPr_manage_header, OldTaskPreferences.class);
}
public static void toggleTasker(Context context, boolean enabled) {
ComponentName componentName = new ComponentName(context, "com.twofortyfouram.locale.example.setting.toast.ui.activity.PluginActivity");
int state = enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
context.getPackageManager().setComponentEnabledSetting(componentName, state, PackageManager.DONT_KILL_APP);
}
private void setupActivity(int key, final Class<?> target) {
findPreference(getString(key)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivityForResult(new Intent(BasicPreferences.this, target), RC_PREFS);
return true;
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle(EXTRA_RESULT, result);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RC_PREFS) {
if (resultCode == Activity.RESULT_OK && data != null) {
result.putAll(data.getExtras());
setResult(Activity.RESULT_OK, new Intent() {{
putExtras(result);
}});
}
} else if (requestCode == REQUEST_PURCHASE_TESLA_UNREAD || requestCode == REQUEST_PURCHASE_TASKER) {
iabHelper.handleActivityResult(requestCode, resultCode, data);
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void onIabPurchaseFinished(IabResult result, final Purchase info) {
if (result.isSuccess()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (info.getSku().equals(getString(R.string.sku_tasker))) {
preferences.setBoolean(R.string.p_purchased_tasker, true);
findPreference(getString(R.string.p_tasker_enabled)).setEnabled(true);
} else if (info.getSku().equals(getString(R.string.sku_tesla_unread))) {
preferences.setBoolean(R.string.p_purchased_tesla_unread, true);
findPreference(getString(R.string.p_tesla_unread_enabled)).setEnabled(true);
}
}
});
}
}
}

@ -3,6 +3,7 @@ package org.tasks.preferences;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import com.google.common.base.Strings;
import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.CustomFilter; import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;

Loading…
Cancel
Save