diff --git a/src/amazon/java/org/tasks/preferences/BasicPreferences.java b/src/amazon/java/org/tasks/preferences/BasicPreferences.java
index 0400f681f..b7183ab4a 100644
--- a/src/amazon/java/org/tasks/preferences/BasicPreferences.java
+++ b/src/amazon/java/org/tasks/preferences/BasicPreferences.java
@@ -18,9 +18,4 @@ public class BasicPreferences extends BaseBasicPreferences {
public void inject(ActivityComponent component) {
component.inject(this);
}
-
- @Override
- public void initiateThemePurchase() {
-
- }
}
diff --git a/src/generic/java/org/tasks/preferences/BasicPreferences.java b/src/generic/java/org/tasks/preferences/BasicPreferences.java
index 57ff39e21..c689e0be9 100644
--- a/src/generic/java/org/tasks/preferences/BasicPreferences.java
+++ b/src/generic/java/org/tasks/preferences/BasicPreferences.java
@@ -31,10 +31,4 @@ public class BasicPreferences extends BaseBasicPreferences {
public void inject(ActivityComponent component) {
component.inject(this);
}
-
- @Override
- public void initiateThemePurchase() {
- preferences.setBoolean(R.string.p_purchased_themes, true);
- recreate();
- }
}
diff --git a/src/googleplay/java/org/tasks/preferences/BasicPreferences.java b/src/googleplay/java/org/tasks/preferences/BasicPreferences.java
index 511fb06e4..6efeded0b 100644
--- a/src/googleplay/java/org/tasks/preferences/BasicPreferences.java
+++ b/src/googleplay/java/org/tasks/preferences/BasicPreferences.java
@@ -66,7 +66,7 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null && (boolean) newValue && !preferences.hasPurchase(R.string.p_purchased_themes)) {
- initiateThemePurchase();
+ purchaseHelper.purchase(dialogBuilder, BasicPreferences.this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, BasicPreferences.this);
}
return false;
}
@@ -185,9 +185,4 @@ public class BasicPreferences extends BaseBasicPreferences implements PurchaseHe
}
return values;
}
-
- @Override
- public void initiateThemePurchase() {
- purchaseHelper.purchase(dialogBuilder, this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, this);
- }
}
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 8d289eeec..e7cbdcd64 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -99,6 +99,10 @@
+
+
diff --git a/src/main/java/com/todoroo/astrid/actfm/TagSettingsActivity.java b/src/main/java/com/todoroo/astrid/actfm/TagSettingsActivity.java
index 46efae02f..f215ab576 100644
--- a/src/main/java/com/todoroo/astrid/actfm/TagSettingsActivity.java
+++ b/src/main/java/com/todoroo/astrid/actfm/TagSettingsActivity.java
@@ -29,12 +29,11 @@ import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import org.tasks.R;
+import org.tasks.activities.ColorPickerActivity;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
-import org.tasks.billing.PurchaseHelper;
-import org.tasks.billing.PurchaseHelperCallback;
+import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.DialogBuilder;
-import org.tasks.dialogs.ThemePickerDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
import org.tasks.preferences.Preferences;
@@ -46,17 +45,14 @@ import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
-import timber.log.Timber;
import static android.text.TextUtils.isEmpty;
-import static org.tasks.dialogs.SupportThemePickerDialog.newSupportThemePickerDialog;
-public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implements ThemePickerDialog.ThemePickerCallback, PurchaseHelperCallback, Toolbar.OnMenuItemClickListener {
+public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implements Toolbar.OnMenuItemClickListener {
- private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker";
private static final String EXTRA_SELECTED_THEME = "extra_selected_theme";
- private static final int REQUEST_PURCHASE = 10109;
+ private static final int REQUEST_COLOR_PICKER = 10109;
public static final String TOKEN_NEW_FILTER = "newFilter"; //$NON-NLS-1$
public static final String TOKEN_AUTOPOPULATE_NAME = "autopopulateName"; //$NON-NLS-1$
@@ -73,7 +69,6 @@ public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implem
@Inject DialogBuilder dialogBuilder;
@Inject Preferences preferences;
@Inject ThemeCache themeCache;
- @Inject PurchaseHelper purchaseHelper;
@Inject ThemeColor themeColor;
@Inject Tracker tracker;
@@ -144,8 +139,9 @@ public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implem
@OnClick(R.id.theme_row)
protected void showThemePicker() {
- newSupportThemePickerDialog(ThemePickerDialog.ColorPalette.COLORS)
- .show(getSupportFragmentManager(), FRAG_TAG_COLOR_PICKER);
+ startActivityForResult(new Intent(TagSettingsActivity.this, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.COLORS);
+ }}, REQUEST_COLOR_PICKER);
}
@OnClick(R.id.clear)
@@ -227,8 +223,13 @@ public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implem
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_PURCHASE) {
- purchaseHelper.handleActivityResult(this, requestCode, resultCode, data);
+ if (requestCode == REQUEST_COLOR_PICKER) {
+ if (resultCode == RESULT_OK) {
+ int index = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
+ tracker.reportEvent(Tracking.Events.SET_TAG_COLOR, Integer.toString(index));
+ selectedTheme = index;
+ updateTheme();
+ }
} else {
super.onActivityResult(requestCode, resultCode, data);
}
@@ -268,13 +269,6 @@ public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implem
}
}
- @Override
- public void themePicked(ThemePickerDialog.ColorPalette palette, int index) {
- tracker.reportEvent(Tracking.Events.SET_TAG_COLOR, Integer.toString(index));
- selectedTheme = index;
- updateTheme();
- }
-
private void updateTheme() {
ThemeColor color;
if (selectedTheme < 0) {
@@ -291,25 +285,6 @@ public class TagSettingsActivity extends ThemedInjectingAppCompatActivity implem
color.applyStatusBarColor(this);
}
- @Override
- public void initiateThemePurchase() {
- purchaseHelper.purchase(dialogBuilder, this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, this);
- }
-
- @Override
- public void purchaseCompleted(boolean success, final String sku) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (getString(R.string.sku_themes).equals(sku)) {
- showThemePicker();
- } else {
- Timber.d("Unhandled sku: %s", sku);
- }
- }
- });
- }
-
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
diff --git a/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java b/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java
index 13b36f80b..01c00d5da 100644
--- a/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java
+++ b/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java
@@ -16,11 +16,10 @@ import android.preference.Preference;
import android.preference.PreferenceManager;
import org.tasks.R;
+import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.TimePickerActivity;
-import org.tasks.billing.PurchaseHelper;
-import org.tasks.billing.PurchaseHelperCallback;
+import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.DialogBuilder;
-import org.tasks.dialogs.ThemePickerDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.preferences.ActivityPermissionRequestor;
@@ -37,25 +36,20 @@ import org.tasks.ui.TimePreference;
import javax.inject.Inject;
-import timber.log.Timber;
-
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow;
-import static org.tasks.dialogs.NativeThemePickerDialog.newNativeThemePickerDialog;
-public class ReminderPreferences extends InjectingPreferenceActivity implements ThemePickerDialog.ThemePickerCallback, PurchaseHelperCallback {
+public class ReminderPreferences extends InjectingPreferenceActivity {
private static final int REQUEST_QUIET_START = 10001;
private static final int REQUEST_QUIET_END = 10002;
private static final int REQUEST_DEFAULT_REMIND = 10003;
- private static final int REQUEST_PURCHASE = 10004;
- private static final String FRAG_TAG_LED_PICKER = "frag_tag_led_picker";
+ private static final int REQUEST_LED_PICKER = 10004;
@Inject Device device;
@Inject ActivityPermissionRequestor permissionRequestor;
@Inject PermissionChecker permissionChecker;
@Inject DialogBuilder dialogBuilder;
- @Inject PurchaseHelper purchaseHelper;
@Inject Preferences preferences;
@Inject ThemeCache themeCache;
@@ -94,7 +88,9 @@ public class ReminderPreferences extends InjectingPreferenceActivity implements
findPreference(getString(R.string.p_led_color)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- showLEDColorPicker();
+ startActivityForResult(new Intent(ReminderPreferences.this, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.LED);
+ }}, REQUEST_LED_PICKER);
return false;
}
});
@@ -182,7 +178,12 @@ public class ReminderPreferences extends InjectingPreferenceActivity implements
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_QUIET_START) {
+ if (requestCode == REQUEST_LED_PICKER) {
+ if (resultCode == RESULT_OK) {
+ preferences.setInt(R.string.p_led_color, data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0));
+ updateLEDColor();
+ }
+ } else if (requestCode == REQUEST_QUIET_START) {
if (resultCode == RESULT_OK) {
getQuietStartPreference().handleTimePickerActivityIntent(data);
}
@@ -194,10 +195,6 @@ public class ReminderPreferences extends InjectingPreferenceActivity implements
if (resultCode == RESULT_OK) {
getDefaultRemindTimePreference().handleTimePickerActivityIntent(data);
}
- } else if (requestCode == REQUEST_PURCHASE) {
- if (resultCode == RESULT_OK) {
- purchaseHelper.handleActivityResult(this, requestCode, resultCode, data);
- }
} else {
super.onActivityResult(requestCode, resultCode, data);
}
@@ -224,36 +221,6 @@ public class ReminderPreferences extends InjectingPreferenceActivity implements
component.inject(this);
}
- @Override
- public void themePicked(ThemePickerDialog.ColorPalette palette, int index) {
- preferences.setInt(R.string.p_led_color, index);
- updateLEDColor();
- }
-
- @Override
- public void initiateThemePurchase() {
- purchaseHelper.purchase(dialogBuilder, this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, this);
- }
-
- @Override
- public void purchaseCompleted(boolean success, final String sku) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (getString(R.string.sku_themes).equals(sku)) {
- showLEDColorPicker();
- } else {
- Timber.d("Unhandled sku: %s", sku);
- }
- }
- });
- }
-
- private void showLEDColorPicker() {
- newNativeThemePickerDialog(ThemePickerDialog.ColorPalette.LED)
- .show(getFragmentManager(), FRAG_TAG_LED_PICKER);
- }
-
private void updateLEDColor() {
int index = preferences.getInt(R.string.p_led_color);
LEDColor ledColor = themeCache.getLEDColor(index);
diff --git a/src/main/java/org/tasks/activities/ColorPickerActivity.java b/src/main/java/org/tasks/activities/ColorPickerActivity.java
new file mode 100644
index 000000000..562aeba7a
--- /dev/null
+++ b/src/main/java/org/tasks/activities/ColorPickerActivity.java
@@ -0,0 +1,81 @@
+package org.tasks.activities;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+import org.tasks.R;
+import org.tasks.billing.PurchaseHelper;
+import org.tasks.billing.PurchaseHelperCallback;
+import org.tasks.dialogs.ColorPickerDialog;
+import org.tasks.dialogs.DialogBuilder;
+import org.tasks.injection.ActivityComponent;
+import org.tasks.injection.InjectingAppCompatActivity;
+
+import javax.inject.Inject;
+
+import static org.tasks.dialogs.ColorPickerDialog.newColorPickerDialog;
+
+public class ColorPickerActivity extends InjectingAppCompatActivity implements ColorPickerDialog.ThemePickerCallback, PurchaseHelperCallback {
+
+ private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker";
+ private static final int REQUEST_PURCHASE = 1006;
+
+ public static final String EXTRA_PALETTE = "extra_palette";
+ public static final String EXTRA_THEME_INDEX = "extra_index";
+
+ @Inject PurchaseHelper purchaseHelper;
+ @Inject DialogBuilder dialogBuilder;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ protected void onPostResume() {
+ super.onPostResume();
+
+ newColorPickerDialog((ColorPickerDialog.ColorPalette) getIntent().getSerializableExtra(EXTRA_PALETTE))
+ .show(getSupportFragmentManager(), FRAG_TAG_COLOR_PICKER);
+ }
+
+ @Override
+ public void inject(ActivityComponent component) {
+ component.inject(this);
+ }
+
+ @Override
+ public void themePicked(final ColorPickerDialog.ColorPalette palette, final int index) {
+ setResult(RESULT_OK, new Intent() {{
+ putExtra(EXTRA_PALETTE, palette);
+ putExtra(EXTRA_THEME_INDEX, index);
+ }});
+ finish();
+ }
+
+ @Override
+ public void initiateThemePurchase() {
+ purchaseHelper.purchase(dialogBuilder, this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, this);
+ }
+
+ @Override
+ public void dismissed() {
+ finish();
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_PURCHASE) {
+ purchaseHelper.handleActivityResult(PurchaseHelperCallback.NO_OP, requestCode, resultCode, data);
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
+ @Override
+ public void purchaseCompleted(boolean success, String sku) {
+ if (!success) {
+ finish();
+ }
+ }
+}
diff --git a/src/main/java/org/tasks/billing/PurchaseHelperCallback.java b/src/main/java/org/tasks/billing/PurchaseHelperCallback.java
index de9e8181b..ff688ccdd 100644
--- a/src/main/java/org/tasks/billing/PurchaseHelperCallback.java
+++ b/src/main/java/org/tasks/billing/PurchaseHelperCallback.java
@@ -1,5 +1,13 @@
package org.tasks.billing;
public interface PurchaseHelperCallback {
+
+ PurchaseHelperCallback NO_OP = new PurchaseHelperCallback() {
+ @Override
+ public void purchaseCompleted(boolean success, String sku) {
+
+ }
+ };
+
void purchaseCompleted(boolean success, String sku);
}
diff --git a/src/main/java/org/tasks/dialogs/ThemePickerDialog.java b/src/main/java/org/tasks/dialogs/ColorPickerDialog.java
similarity index 58%
rename from src/main/java/org/tasks/dialogs/ThemePickerDialog.java
rename to src/main/java/org/tasks/dialogs/ColorPickerDialog.java
index dd088ef6e..1b7559f8c 100644
--- a/src/main/java/org/tasks/dialogs/ThemePickerDialog.java
+++ b/src/main/java/org/tasks/dialogs/ColorPickerDialog.java
@@ -1,19 +1,22 @@
package org.tasks.dialogs;
+import android.app.Activity;
+import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
+import android.os.Bundle;
import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
-import android.widget.ListAdapter;
import android.widget.TextView;
import org.tasks.R;
+import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForApplication;
+import org.tasks.injection.InjectingDialogFragment;
import org.tasks.preferences.Preferences;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeCache;
@@ -22,7 +25,9 @@ import javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybeanMR1;
-public class ThemePickerDialog {
+public class ColorPickerDialog extends InjectingDialogFragment {
+
+ private static final String EXTRA_PALETTE = "extra_palette";
public enum ColorPalette {THEMES, COLORS, ACCENTS, WIDGET_BACKGROUND, LED}
@@ -30,41 +35,45 @@ public class ThemePickerDialog {
void themePicked(ColorPalette palette, int index);
void initiateThemePurchase();
+
+ void dismissed();
}
- private DialogBuilder dialogBuilder;
- private Context context;
- private Preferences preferences;
- private ThemeCache themeCache;
- private Theme theme;
-
- @Inject
- public ThemePickerDialog(DialogBuilder dialogBuilder, @ForApplication Context context, Preferences preferences,
- Theme theme, ThemeCache themeCache) {
- this.dialogBuilder = dialogBuilder;
- this.context = context;
- this.preferences = preferences;
- this.theme = theme;
- this.themeCache = themeCache;
+ public static ColorPickerDialog newColorPickerDialog(ColorPalette palette) {
+ ColorPickerDialog dialog = new ColorPickerDialog();
+ dialog.palette = palette;
+ return dialog;
}
- public AlertDialog createDialog(final ColorPalette palette, final ThemePickerCallback callback) {
- if (palette == ColorPalette.THEMES || palette == ColorPalette.WIDGET_BACKGROUND) {
+ @Inject DialogBuilder dialogBuilder;
+ @Inject @ForApplication Context context;
+ @Inject Preferences preferences;
+ @Inject ThemeCache themeCache;
+ @Inject Theme theme;
+
+ private ColorPalette palette;
+ private ThemePickerCallback callback;
+ private ArrayAdapter adapter;
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ if (savedInstanceState != null) {
+ palette = (ColorPalette) savedInstanceState.getSerializable(EXTRA_PALETTE);
+ }
+ if (palette == ColorPickerDialog.ColorPalette.THEMES || palette == ColorPickerDialog.ColorPalette.WIDGET_BACKGROUND) {
theme = theme.withBaseTheme(themeCache.getThemeBase(2));
}
final String[] themes = context.getResources().getStringArray(getNameRes(palette));
- final boolean purchasedThemes = preferences.hasPurchase(R.string.p_purchased_themes);
-
final LayoutInflater inflater = theme.getLayoutInflater(context);
- ListAdapter adapter = new ArrayAdapter(context, R.layout.color_selection_row, themes) {
+ adapter = new ArrayAdapter(context, R.layout.color_selection_row, themes) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) (convertView == null
? inflater.inflate(R.layout.color_selection_row, parent, false)
: convertView);
- Drawable original = context.getResources().getDrawable(purchasedThemes || position < 2
+ Drawable original = context.getResources().getDrawable(preferences.hasPurchase(R.string.p_purchased_themes) || position < 2
? R.drawable.ic_lens_black_24dp
: R.drawable.ic_vpn_key_black_24dp);
Drawable wrapped = DrawableCompat.wrap(original.mutate());
@@ -83,18 +92,54 @@ public class ThemePickerDialog {
.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- if (purchasedThemes || which < 2) {
+ if (preferences.hasPurchase(R.string.p_purchased_themes) || which < 2) {
callback.themePicked(palette, which);
} else {
callback.initiateThemePurchase();
}
}
})
+ .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ callback.dismissed();
+ }
+ })
.show();
}
- private int getNameRes(ColorPalette palette) {
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ adapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ callback.dismissed();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ callback = (ThemePickerCallback) activity;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putSerializable(EXTRA_PALETTE, palette);
+ }
+
+ @Override
+ protected void inject(DialogFragmentComponent component) {
+ component.inject(this);
+ }
+
+ private int getNameRes(ColorPickerDialog.ColorPalette palette) {
switch (palette) {
case COLORS:
return R.array.colors;
@@ -109,7 +154,7 @@ public class ThemePickerDialog {
}
}
- private int getDisplayColor(ColorPalette palette, int index) {
+ private int getDisplayColor(ColorPickerDialog.ColorPalette palette, int index) {
switch (palette) {
case COLORS:
return themeCache.getThemeColor(index).getPrimaryColor();
diff --git a/src/main/java/org/tasks/dialogs/NativeThemePickerDialog.java b/src/main/java/org/tasks/dialogs/NativeThemePickerDialog.java
deleted file mode 100644
index 2efd9347c..000000000
--- a/src/main/java/org/tasks/dialogs/NativeThemePickerDialog.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.tasks.dialogs;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.os.Bundle;
-
-import org.tasks.injection.InjectingNativeDialogFragment;
-import org.tasks.injection.NativeDialogFragmentComponent;
-
-import javax.inject.Inject;
-
-public class NativeThemePickerDialog extends InjectingNativeDialogFragment implements ThemePickerDialog.ThemePickerCallback {
-
- private static final String EXTRA_PALETTE = "extra_palette";
-
- public static NativeThemePickerDialog newNativeThemePickerDialog(ThemePickerDialog.ColorPalette palette) {
- NativeThemePickerDialog dialog = new NativeThemePickerDialog();
- dialog.palette = palette;
- return dialog;
- }
-
- @Inject ThemePickerDialog themePickerDialog;
-
- private ThemePickerDialog.ColorPalette palette;
- private ThemePickerDialog.ThemePickerCallback callback;
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- if (savedInstanceState != null) {
- palette = (ThemePickerDialog.ColorPalette) savedInstanceState.getSerializable(EXTRA_PALETTE);
- }
- return themePickerDialog.createDialog(palette, this);
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
-
- callback = (ThemePickerDialog.ThemePickerCallback) activity;
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
-
- outState.putSerializable(EXTRA_PALETTE, palette);
- }
-
- @Override
- protected void inject(NativeDialogFragmentComponent component) {
- component.inject(this);
- }
-
- @Override
- public void themePicked(ThemePickerDialog.ColorPalette palette, int index) {
- callback.themePicked(palette, index);
- }
-
- @Override
- public void initiateThemePurchase() {
- callback.initiateThemePurchase();
- }
-}
diff --git a/src/main/java/org/tasks/dialogs/SupportThemePickerDialog.java b/src/main/java/org/tasks/dialogs/SupportThemePickerDialog.java
deleted file mode 100644
index 66d9452c4..000000000
--- a/src/main/java/org/tasks/dialogs/SupportThemePickerDialog.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.tasks.dialogs;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.os.Bundle;
-
-import org.tasks.injection.DialogFragmentComponent;
-import org.tasks.injection.InjectingDialogFragment;
-
-import javax.inject.Inject;
-
-public class SupportThemePickerDialog extends InjectingDialogFragment implements ThemePickerDialog.ThemePickerCallback {
-
- private static final String EXTRA_PALETTE = "extra_palette";
-
- public static SupportThemePickerDialog newSupportThemePickerDialog(ThemePickerDialog.ColorPalette palette) {
- SupportThemePickerDialog dialog = new SupportThemePickerDialog();
- dialog.palette = palette;
- return dialog;
- }
-
- @Inject ThemePickerDialog themePickerDialog;
-
- private ThemePickerDialog.ColorPalette palette;
- private ThemePickerDialog.ThemePickerCallback callback;
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- if (savedInstanceState != null) {
- palette = (ThemePickerDialog.ColorPalette) savedInstanceState.getSerializable(EXTRA_PALETTE);
- }
- return themePickerDialog.createDialog(palette, this);
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
-
- callback = (ThemePickerDialog.ThemePickerCallback) activity;
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
-
- outState.putSerializable(EXTRA_PALETTE, palette);
- }
-
- @Override
- protected void inject(DialogFragmentComponent component) {
- component.inject(this);
- }
-
- @Override
- public void themePicked(ThemePickerDialog.ColorPalette palette, int index) {
- callback.themePicked(palette, index);
- }
-
- @Override
- public void initiateThemePurchase() {
- callback.initiateThemePurchase();
- }
-}
diff --git a/src/main/java/org/tasks/injection/BaseActivityComponent.java b/src/main/java/org/tasks/injection/BaseActivityComponent.java
index b059b0142..e43b55a53 100644
--- a/src/main/java/org/tasks/injection/BaseActivityComponent.java
+++ b/src/main/java/org/tasks/injection/BaseActivityComponent.java
@@ -17,6 +17,7 @@ import org.tasks.activities.AddAttachmentActivity;
import org.tasks.activities.CalendarSelectionActivity;
import org.tasks.activities.CameraActivity;
import org.tasks.activities.ClearGtaskDataActivity;
+import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.DateAndTimePickerActivity;
import org.tasks.activities.DatePickerActivity;
import org.tasks.activities.ExportTaskActivity;
@@ -117,4 +118,6 @@ public interface BaseActivityComponent {
void inject(AppearancePreferences appearancePreferences);
void inject(MyFilePickerActivity myFilePickerActivity);
+
+ void inject(ColorPickerActivity colorPickerActivity);
}
diff --git a/src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java b/src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java
index 1a57733f1..226ab6a00 100644
--- a/src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java
+++ b/src/main/java/org/tasks/injection/BaseDialogFragmentComponent.java
@@ -4,7 +4,7 @@ import org.tasks.activities.CalendarSelectionDialog;
import org.tasks.dialogs.AccountSelectionDialog;
import org.tasks.dialogs.AddAttachmentDialog;
import org.tasks.dialogs.SortDialog;
-import org.tasks.dialogs.SupportThemePickerDialog;
+import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.reminders.MissedCallDialog;
import org.tasks.reminders.NotificationDialog;
import org.tasks.reminders.SnoozeDialog;
@@ -27,5 +27,5 @@ public interface BaseDialogFragmentComponent {
void inject(SortDialog sortDialog);
- void inject(SupportThemePickerDialog supportThemePickerDialog);
+ void inject(ColorPickerDialog colorPickerDialog);
}
diff --git a/src/main/java/org/tasks/injection/BaseNativeDialogFragmentComponent.java b/src/main/java/org/tasks/injection/BaseNativeDialogFragmentComponent.java
index fe75622fc..2c942d932 100644
--- a/src/main/java/org/tasks/injection/BaseNativeDialogFragmentComponent.java
+++ b/src/main/java/org/tasks/injection/BaseNativeDialogFragmentComponent.java
@@ -1,10 +1,7 @@
package org.tasks.injection;
-import org.tasks.dialogs.NativeThemePickerDialog;
import org.tasks.locale.LocalePickerDialog;
public interface BaseNativeDialogFragmentComponent {
- void inject(NativeThemePickerDialog themePickerDialog);
-
void inject(LocalePickerDialog localePickerDialog);
}
diff --git a/src/main/java/org/tasks/preferences/BaseBasicPreferences.java b/src/main/java/org/tasks/preferences/BaseBasicPreferences.java
index 827bf7c43..68260c817 100644
--- a/src/main/java/org/tasks/preferences/BaseBasicPreferences.java
+++ b/src/main/java/org/tasks/preferences/BaseBasicPreferences.java
@@ -14,10 +14,11 @@ import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.reminders.ReminderPreferences;
import org.tasks.R;
+import org.tasks.activities.ColorPickerActivity;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
+import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.DialogBuilder;
-import org.tasks.dialogs.ThemePickerDialog;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.locale.Locale;
import org.tasks.locale.LocalePickerDialog;
@@ -29,19 +30,17 @@ import org.tasks.themes.ThemeColor;
import javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybeanMR1;
-import static org.tasks.dialogs.NativeThemePickerDialog.newNativeThemePickerDialog;
import static org.tasks.locale.LocalePickerDialog.newLocalePickerDialog;
public abstract class BaseBasicPreferences extends InjectingPreferenceActivity implements
- ThemePickerDialog.ThemePickerCallback,
LocalePickerDialog.LocaleSelectionHandler {
private static final String EXTRA_RESULT = "extra_result";
- private static final String FRAG_TAG_THEME_PICKER = "frag_tag_theme_picker";
- private static final String FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker";
- private static final String FRAG_TAG_ACCENT_PICKER = "frag_tag_accent_picker";
private static final String FRAG_TAG_LOCALE_PICKER = "frag_tag_locale_picker";
private static final int RC_PREFS = 10001;
+ private static final int REQUEST_THEME_PICKER = 10002;
+ private static final int REQUEST_COLOR_PICKER = 10003;
+ private static final int REQUEST_ACCENT_PICKER = 10004;
@Inject Tracker tracker;
@Inject Preferences preferences;
@@ -69,8 +68,9 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity i
themePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- newNativeThemePickerDialog(ThemePickerDialog.ColorPalette.THEMES)
- .show(getFragmentManager(), FRAG_TAG_THEME_PICKER);
+ startActivityForResult(new Intent(BaseBasicPreferences.this, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.THEMES);
+ }}, REQUEST_THEME_PICKER);
return false;
}
});
@@ -79,8 +79,9 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity i
colorPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- newNativeThemePickerDialog(ThemePickerDialog.ColorPalette.COLORS)
- .show(getFragmentManager(), FRAG_TAG_COLOR_PICKER);
+ startActivityForResult(new Intent(BaseBasicPreferences.this, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.COLORS);
+ }}, REQUEST_COLOR_PICKER);
return false;
}
});
@@ -89,8 +90,9 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity i
accentPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- newNativeThemePickerDialog(ThemePickerDialog.ColorPalette.ACCENTS)
- .show(getFragmentManager(), FRAG_TAG_ACCENT_PICKER);
+ startActivityForResult(new Intent(BaseBasicPreferences.this, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.ACCENTS);
+ }}, REQUEST_ACCENT_PICKER);
return false;
}
});
@@ -151,34 +153,38 @@ public abstract class BaseBasicPreferences extends InjectingPreferenceActivity i
@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());
- }
- } else {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
-
- @Override
- public void themePicked(ThemePickerDialog.ColorPalette palette, int index) {
- switch (palette) {
- case THEMES:
+ if (requestCode == REQUEST_THEME_PICKER) {
+ if (resultCode == RESULT_OK) {
+ int index = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
preferences.setInt(R.string.p_theme, index);
themeCache.getThemeBase(index).setDefaultNightMode();
tracker.reportEvent(Tracking.Events.SET_THEME, Integer.toString(index));
- break;
- case COLORS:
+ result.putBoolean(AppearancePreferences.EXTRA_RESTART, true);
+ recreate();
+ }
+ } else if (requestCode == REQUEST_COLOR_PICKER) {
+ if (resultCode == RESULT_OK) {
+ int index = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
preferences.setInt(R.string.p_theme_color, index);
tracker.reportEvent(Tracking.Events.SET_COLOR, Integer.toString(index));
- break;
- case ACCENTS:
+ result.putBoolean(AppearancePreferences.EXTRA_RESTART, true);
+ recreate();
+ }
+ } else if (requestCode == REQUEST_ACCENT_PICKER) {
+ if (resultCode == RESULT_OK) {
+ int index = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
preferences.setInt(R.string.p_theme_accent, index);
tracker.reportEvent(Tracking.Events.SET_ACCENT, Integer.toString(index));
- break;
+ result.putBoolean(AppearancePreferences.EXTRA_RESTART, true);
+ recreate();
+ }
+ } else if (requestCode == RC_PREFS) {
+ if (resultCode == Activity.RESULT_OK && data != null) {
+ result.putAll(data.getExtras());
+ }
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
}
- result.putBoolean(AppearancePreferences.EXTRA_RESTART, true);
- recreate();
}
@Override
diff --git a/src/main/java/org/tasks/widget/WidgetConfigActivity.java b/src/main/java/org/tasks/widget/WidgetConfigActivity.java
index b00bb47b6..47aacf156 100644
--- a/src/main/java/org/tasks/widget/WidgetConfigActivity.java
+++ b/src/main/java/org/tasks/widget/WidgetConfigActivity.java
@@ -1,30 +1,23 @@
package org.tasks.widget;
-import android.support.v4.app.FragmentManager;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Bundle;
+import android.support.v4.app.FragmentManager;
import org.tasks.R;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
-import org.tasks.billing.PurchaseHelper;
-import org.tasks.billing.PurchaseHelperCallback;
import org.tasks.dialogs.DialogBuilder;
-import org.tasks.dialogs.ThemePickerDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import javax.inject.Inject;
-import timber.log.Timber;
-
-public class WidgetConfigActivity extends InjectingAppCompatActivity implements WidgetConfigDialog.WidgetConfigCallback, ThemePickerDialog.ThemePickerCallback, PurchaseHelperCallback {
+public class WidgetConfigActivity extends InjectingAppCompatActivity implements WidgetConfigDialog.WidgetConfigCallback {
private static final String FRAG_TAG_WIDGET_CONFIG = "frag_tag_widget_config";
- private static final int REQUEST_PURCHASE = 10109;
-
public static final int DEFAULT_OPACITY = 255;
public static final String PREF_WIDGET_ID = "widget-id-";
@@ -37,10 +30,8 @@ public class WidgetConfigActivity extends InjectingAppCompatActivity implements
@Inject Tracker tracker;
@Inject DialogBuilder dialogBuilder;
- @Inject PurchaseHelper purchaseHelper;
private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
- private WidgetConfigDialog widgetConfigDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -59,7 +50,7 @@ public class WidgetConfigActivity extends InjectingAppCompatActivity implements
finish();
} else {
FragmentManager fragmentManager = getSupportFragmentManager();
- widgetConfigDialog = (WidgetConfigDialog) fragmentManager.findFragmentByTag(FRAG_TAG_WIDGET_CONFIG);
+ WidgetConfigDialog widgetConfigDialog = (WidgetConfigDialog) fragmentManager.findFragmentByTag(FRAG_TAG_WIDGET_CONFIG);
if (widgetConfigDialog == null) {
widgetConfigDialog = WidgetConfigDialog.newWidgetConfigDialog(appWidgetId);
widgetConfigDialog.show(fragmentManager, FRAG_TAG_WIDGET_CONFIG);
@@ -81,49 +72,8 @@ public class WidgetConfigActivity extends InjectingAppCompatActivity implements
finish();
}
- @Override
- public void themePicked(ThemePickerDialog.ColorPalette palette, int index) {
- if (palette == ThemePickerDialog.ColorPalette.WIDGET_BACKGROUND) {
- widgetConfigDialog.setThemeIndex(index);
- } else {
- widgetConfigDialog.setColorIndex(index);
- }
- }
-
- @Override
- public void initiateThemePurchase() {
- purchaseHelper.purchase(dialogBuilder, this, getString(R.string.sku_themes), getString(R.string.p_purchased_themes), REQUEST_PURCHASE, this);
- }
-
- @Override
- public void purchaseCompleted(boolean success, final String sku) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (getString(R.string.sku_themes).equals(sku)) {
- showThemeSelection();
- } else {
- Timber.d("Unhandled sku: %s", sku);
- }
- }
- });
- }
-
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_PURCHASE) {
- purchaseHelper.handleActivityResult(this, requestCode, resultCode, data);
- } else {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
-
- protected void showThemeSelection() {
- widgetConfigDialog.showThemeSelection();
- }
}
diff --git a/src/main/java/org/tasks/widget/WidgetConfigDialog.java b/src/main/java/org/tasks/widget/WidgetConfigDialog.java
index 9741c8c6f..6ffdae2d9 100644
--- a/src/main/java/org/tasks/widget/WidgetConfigDialog.java
+++ b/src/main/java/org/tasks/widget/WidgetConfigDialog.java
@@ -15,9 +15,10 @@ import android.widget.TextView;
import com.todoroo.astrid.api.Filter;
import org.tasks.R;
+import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.FilterSelectionActivity;
+import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.DialogBuilder;
-import org.tasks.dialogs.ThemePickerDialog;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForApplication;
import org.tasks.injection.InjectingDialogFragment;
@@ -34,12 +35,8 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
-import static org.tasks.dialogs.SupportThemePickerDialog.newSupportThemePickerDialog;
-
public class WidgetConfigDialog extends InjectingDialogFragment implements SeekBar.OnSeekBarChangeListener {
- private static final String FRAG_TAG_THEME_SELECTION = "frag_tag_theme_selection";
- private static final String FRAG_TAG_COLOR_SELECTION = "frag_tag_color_selection";
private static final String EXTRA_FILTER = "extra_filter";
private static final String EXTRA_THEME = "extra_theme";
private static final String EXTRA_APP_WIDGET_ID = "extra_app_widget_id";
@@ -65,16 +62,6 @@ public class WidgetConfigDialog extends InjectingDialogFragment implements SeekB
}
- public void setThemeIndex(int index) {
- this.themeIndex = index;
- updateTheme();
- }
-
- public void setColorIndex(int index) {
- this.colorIndex = index;
- updateColor();
- }
-
public interface WidgetConfigCallback {
void ok();
@@ -82,6 +69,8 @@ public class WidgetConfigDialog extends InjectingDialogFragment implements SeekB
}
private static final int REQUEST_FILTER = 1005;
+ private static final int REQUEST_THEME_SELECTION = 1006;
+ private static final int REQUEST_COLOR_SELECTION = 1007;
@BindView(R.id.opacity_value) TextView opacityValue;
@BindView(R.id.selected_filter) TextView selectedFilter;
@@ -189,14 +178,16 @@ public class WidgetConfigDialog extends InjectingDialogFragment implements SeekB
@OnClick(R.id.theme_selection)
public void showThemeSelection() {
- newSupportThemePickerDialog(ThemePickerDialog.ColorPalette.WIDGET_BACKGROUND)
- .show(getChildFragmentManager(), FRAG_TAG_THEME_SELECTION);
+ startActivityForResult(new Intent(context, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.WIDGET_BACKGROUND);
+ }}, REQUEST_THEME_SELECTION);
}
@OnClick(R.id.theme_color)
public void showColorSelection() {
- newSupportThemePickerDialog(ThemePickerDialog.ColorPalette.COLORS)
- .show(getChildFragmentManager(), FRAG_TAG_COLOR_SELECTION);
+ startActivityForResult(new Intent(context, ColorPickerActivity.class) {{
+ putExtra(ColorPickerActivity.EXTRA_PALETTE, ColorPickerDialog.ColorPalette.COLORS);
+ }}, REQUEST_COLOR_SELECTION);
}
@Override
@@ -206,7 +197,17 @@ public class WidgetConfigDialog extends InjectingDialogFragment implements SeekB
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_FILTER) {
+ if (requestCode == REQUEST_THEME_SELECTION) {
+ if (resultCode == Activity.RESULT_OK) {
+ themeIndex = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
+ updateTheme();
+ }
+ } else if (requestCode == REQUEST_COLOR_SELECTION) {
+ if (resultCode == Activity.RESULT_OK) {
+ colorIndex = data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0);
+ updateColor();
+ }
+ } else if (requestCode == REQUEST_FILTER) {
if (resultCode == Activity.RESULT_OK) {
filter = data.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER);
updateFilter();
diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml
index c4338e3a5..ea1118949 100644
--- a/src/main/res/xml/preferences.xml
+++ b/src/main/res/xml/preferences.xml
@@ -17,7 +17,9 @@
-
+