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 @@ - +