Add ColorPickerActivity

pull/437/head
Alex Baker 8 years ago
parent 36352875f4
commit 43eeab95b9

@ -18,9 +18,4 @@ public class BasicPreferences extends BaseBasicPreferences {
public void inject(ActivityComponent component) {
component.inject(this);
}
@Override
public void initiateThemePurchase() {
}
}

@ -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();
}
}

@ -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);
}
}

@ -99,6 +99,10 @@
<!-- ====================================================== Activities = -->
<activity
android:name=".activities.ColorPickerActivity"
android:theme="@style/TranslucentDialog" />
<activity
android:name=".activities.DatePickerActivity"
android:theme="@style/TranslucentDialog" />

@ -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()) {

@ -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);

@ -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();
}
}
}

@ -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);
}

@ -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<String> 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<String>(context, R.layout.color_selection_row, themes) {
adapter = new ArrayAdapter<String>(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();

@ -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();
}
}

@ -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();
}
}

@ -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);
}

@ -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);
}

@ -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);
}

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

@ -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();
}
}

@ -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();

@ -17,7 +17,9 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/settings_general">
<PreferenceCategory
android:key="@string/settings_general"
android:title="@string/settings_general">
<Preference
android:key="@string/EPr_appearance_header"

Loading…
Cancel
Save