Replace PrivacyActivity with snackbar

pull/384/head
Alex Baker 9 years ago
parent e8d61b1916
commit 9d760b429d

@ -16,4 +16,8 @@ public class Tracker {
public void setTrackingEnabled(boolean enabled) { public void setTrackingEnabled(boolean enabled) {
} }
public void reportException(Exception e) {
}
} }

@ -4,6 +4,7 @@ import android.content.Context;
import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.StandardExceptionParser;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R; import org.tasks.R;
@ -17,11 +18,14 @@ public class Tracker {
private final GoogleAnalytics analytics; private final GoogleAnalytics analytics;
private final com.google.android.gms.analytics.Tracker tracker; private final com.google.android.gms.analytics.Tracker tracker;
private final StandardExceptionParser exceptionParser;
@Inject @Inject
public Tracker(@ForApplication Context context) { public Tracker(@ForApplication Context context) {
analytics = GoogleAnalytics.getInstance(context); analytics = GoogleAnalytics.getInstance(context);
tracker = analytics.newTracker(R.xml.analytics); tracker = analytics.newTracker(R.xml.analytics);
tracker.setAppVersion(Integer.toString(BuildConfig.VERSION_CODE));
exceptionParser = new StandardExceptionParser(context, null);
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
analytics.setDryRun(true); analytics.setDryRun(true);
} }
@ -35,4 +39,11 @@ public class Tracker {
public void setTrackingEnabled(boolean enabled) { public void setTrackingEnabled(boolean enabled) {
analytics.setAppOptOut(!enabled); analytics.setAppOptOut(!enabled);
} }
public void reportException(Exception e) {
tracker.send(new HitBuilders.ExceptionBuilder()
.setDescription(exceptionParser.getDescription(Thread.currentThread().getName(), e))
.setFatal(false)
.build());
}
} }

@ -2,5 +2,4 @@
<resources> <resources>
<string name="ga_trackingId">UA-43015607-3</string> <string name="ga_trackingId">UA-43015607-3</string>
<bool name="ga_reportUncaughtExceptions">true</bool> <bool name="ga_reportUncaughtExceptions">true</bool>
<integer name="ga_sessionTimeout">300</integer>
</resources> </resources>

@ -120,10 +120,6 @@
android:name=".activities.AddAttachmentActivity" android:name=".activities.AddAttachmentActivity"
android:theme="@style/TranslucentDialog" /> android:theme="@style/TranslucentDialog" />
<activity
android:name=".activities.PrivacyActivity"
android:theme="@style/TranslucentDialog" />
<!-- Activity that displays task list --> <!-- Activity that displays task list -->
<activity <activity
android:name="com.todoroo.astrid.activity.TaskListActivity" android:name="com.todoroo.astrid.activity.TaskListActivity"

@ -11,10 +11,14 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteException;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.design.widget.Snackbar;
import android.view.View;
import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener; import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.backup.TasksXmlImporter; import com.todoroo.astrid.backup.TasksXmlImporter;
import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.DatabaseUpdateListener; import com.todoroo.astrid.dao.DatabaseUpdateListener;
@ -34,7 +38,9 @@ import org.slf4j.LoggerFactory;
import org.tasks.Broadcaster; import org.tasks.Broadcaster;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.tasks.preferences.BasicPreferences;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import java.io.File; import java.io.File;
@ -65,12 +71,14 @@ public class StartupService {
private final TaskDeleter taskDeleter; private final TaskDeleter taskDeleter;
private Broadcaster broadcaster; private Broadcaster broadcaster;
private DialogBuilder dialogBuilder; private DialogBuilder dialogBuilder;
private Tracker tracker;
@Inject @Inject
public StartupService(TagDataDao tagDataDao, Database database, GtasksPreferenceService gtasksPreferenceService, public StartupService(TagDataDao tagDataDao, Database database, GtasksPreferenceService gtasksPreferenceService,
GtasksSyncService gtasksSyncService, 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,
Tracker tracker) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.database = database; this.database = database;
this.gtasksPreferenceService = gtasksPreferenceService; this.gtasksPreferenceService = gtasksPreferenceService;
@ -81,6 +89,7 @@ public class StartupService {
this.taskDeleter = taskDeleter; this.taskDeleter = taskDeleter;
this.broadcaster = broadcaster; this.broadcaster = broadcaster;
this.dialogBuilder = dialogBuilder; this.dialogBuilder = dialogBuilder;
this.tracker = tracker;
} }
/** /**
@ -142,6 +151,34 @@ public class StartupService {
gtasksPreferenceService.stopOngoing(); gtasksPreferenceService.stopOngoing();
gtasksSyncService.initialize(); gtasksSyncService.initialize();
if (activity.getResources().getBoolean(R.bool.google_play_store_available) &&
!preferences.getBoolean(R.string.p_collect_statistics_notification, false) &&
activity instanceof TaskListActivity) {
preferences.setBoolean(R.string.p_collect_statistics_notification, true);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
View taskList = activity.findViewById(R.id.task_list_body);
String text = activity.getString(R.string.anonymous_usage_blurb);
//noinspection ResourceType
Snackbar.make(taskList, text, 10000)
.setActionTextColor(activity.getResources().getColor(R.color.snackbar_undo))
.setAction(R.string.opt_out, new View.OnClickListener() {
@Override
public void onClick(View v) {
activity.startActivityForResult(new Intent(activity, BasicPreferences.class), FilterAdapter.REQUEST_SETTINGS);
}
})
.show();
} catch (Exception e) {
log.error(e.getMessage(), e);
tracker.reportException(e);
}
}
});
}
} }
}).start(); }).start();

@ -15,7 +15,6 @@ import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import org.tasks.R; import org.tasks.R;
import org.tasks.activities.PrivacyActivity;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -86,7 +85,5 @@ public class UpgradeActivity extends InjectingAppCompatActivity {
} }
} }
} }
// notify existing users of analytics
startActivity(new Intent(this, PrivacyActivity.class));
} }
} }

@ -1,46 +0,0 @@
package org.tasks.activities;
import android.content.DialogInterface;
import android.os.Bundle;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.preferences.Preferences;
import javax.inject.Inject;
public class PrivacyActivity extends InjectingAppCompatActivity {
@Inject DialogBuilder dialogBuilder;
@Inject Tracker tracker;
@Inject Preferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dialogBuilder.newDialog()
.setCancelable(false)
.setTitle(R.string.send_anonymous_statistics)
.setMessage(String.format("%s\n\n%s",
getString(R.string.send_anonymous_statistics_summary),
getString(R.string.change_setting_anytime)))
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton(R.string.opt_out, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
preferences.setTrackingEnabled(false);
tracker.setTrackingEnabled(false);
finish();
}
})
.show();
}
}

@ -35,7 +35,6 @@ import org.tasks.activities.ExportTaskActivity;
import org.tasks.activities.FilterSelectionActivity; import org.tasks.activities.FilterSelectionActivity;
import org.tasks.activities.ImportTaskActivity; import org.tasks.activities.ImportTaskActivity;
import org.tasks.activities.LocationPickerActivity; import org.tasks.activities.LocationPickerActivity;
import org.tasks.activities.PrivacyActivity;
import org.tasks.activities.PurgeDeletedActivity; import org.tasks.activities.PurgeDeletedActivity;
import org.tasks.activities.ResetPreferencesActivity; import org.tasks.activities.ResetPreferencesActivity;
import org.tasks.activities.SortActivity; import org.tasks.activities.SortActivity;
@ -101,8 +100,7 @@ import dagger.Provides;
UpgradeActivity.class, UpgradeActivity.class,
CalendarSelectionActivity.class, CalendarSelectionActivity.class,
AddAttachmentActivity.class, AddAttachmentActivity.class,
ShortcutActivity.class, ShortcutActivity.class
PrivacyActivity.class
}) })
public class ActivityModule { public class ActivityModule {

@ -281,5 +281,6 @@
<string name="default_vibration_duration">1000</string> <string name="default_vibration_duration">1000</string>
<string name="default_vibration_pause">500</string> <string name="default_vibration_pause">500</string>
<string name="p_collect_statistics">collect_statistics</string> <string name="p_collect_statistics">collect_statistics</string>
<string name="p_collect_statistics_notification">collect_statistics_notification</string>
</resources> </resources>

@ -136,8 +136,8 @@
<string name="privacy_policy">Privacy policy</string> <string name="privacy_policy">Privacy policy</string>
<string name="send_anonymous_statistics">Improve Tasks</string> <string name="send_anonymous_statistics">Improve Tasks</string>
<string name="send_anonymous_statistics_summary">Send anonymous usage statistics and crash reports to help improve Tasks. No personal data will be collected.</string> <string name="send_anonymous_statistics_summary">Send anonymous usage statistics and crash reports to help improve Tasks. No personal data will be collected.</string>
<string name="anonymous_usage_blurb">Anonymous usage statistics are collected</string>
<string name="opt_out">Opt-out</string> <string name="opt_out">Opt-out</string>
<string name="change_setting_anytime">You can change this setting at any time.</string>
<string-array name="sync_SPr_interval_entries"> <string-array name="sync_SPr_interval_entries">
<!-- sync_SPr_interval_entries: Synchronization Intervals --> <!-- sync_SPr_interval_entries: Synchronization Intervals -->

Loading…
Cancel
Save