Convert SnoozeDialog to fragment

pull/281/head
Alex Baker 11 years ago
parent d4f2edd115
commit 97e7c44baa

@ -304,7 +304,10 @@
<activity
android:name=".reminders.SnoozeActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
android:theme="@style/Tasks.Dialog"
android:taskAffinity=""
android:excludeFromRecents="true"
android:launchMode="singleTask"/>
<!-- tags -->
<receiver android:name="com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer">

@ -13,7 +13,6 @@ import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
@ -31,7 +30,7 @@ import com.todoroo.astrid.service.TaskService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tasks.R;
import org.tasks.injection.InjectingActivity;
import org.tasks.injection.InjectingFragmentActivity;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.preferences.BasicPreferences;
import org.tasks.preferences.ResourceResolver;
@ -40,7 +39,7 @@ import java.io.InputStream;
import javax.inject.Inject;
public class MissedCallActivity extends InjectingActivity {
public class MissedCallActivity extends InjectingFragmentActivity {
private static final Logger log = LoggerFactory.getLogger(MissedCallActivity.class);
@ -53,6 +52,7 @@ public class MissedCallActivity extends InjectingActivity {
// Prompt user to ignore all missed calls after this many ignore presses
private static final int IGNORE_PROMPT_COUNT = 3;
private static final String FRAG_TAG_SNOOZE_DIALOG = "frag_tag_snooze_dialog";
@Inject StartupService startupService;
@Inject TaskService taskService;
@ -195,24 +195,25 @@ public class MissedCallActivity extends InjectingActivity {
taskTitle = getString(R.string.MCA_task_title_name, name, number);
dialogTitle = getString(R.string.MCA_schedule_dialog_title, name);
}
SnoozeDialog sd = new SnoozeDialog(MissedCallActivity.this, new SnoozeCallback() {
SnoozeDialog snoozeDialog = new SnoozeDialog();
snoozeDialog.setTitle(dialogTitle);
snoozeDialog.setSnoozeCallback(new SnoozeCallback() {
@Override
public void snoozeForTime(long time) {
Task newTask = new Task();
newTask.setTitle(taskTitle);
newTask.setDueDate(time);
taskService.save(newTask);
finish();
}
});
new AlertDialog.Builder(MissedCallActivity.this)
.setTitle(dialogTitle)
.setView(sd)
.setPositiveButton(android.R.string.ok, sd)
.setNegativeButton(android.R.string.cancel, null)
.show().setOwnerActivity(MissedCallActivity.this);
snoozeDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
finish();
}
});
snoozeDialog.show(getSupportFragmentManager(), FRAG_TAG_SNOOZE_DIALOG);
}
});
}

@ -60,7 +60,7 @@ public class NotificationFragment extends TaskListFragment {
public void onClick(View arg0) {
dismiss();
activity.startActivity(new Intent(activity, SnoozeActivity.class) {{
putExtra(SnoozeActivity.TASK_ID, taskId);
putExtra(SnoozeActivity.EXTRA_TASK_ID, taskId);
}});
}
});

@ -127,8 +127,8 @@ public class ShowNotificationReceiver extends InjectingBroadcastReceiver {
}}, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent snoozePendingIntent = PendingIntent.getActivity(context, notificationId, new Intent(context, SnoozeActivity.class) {{
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
putExtra(SnoozeActivity.TASK_ID, taskId);
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
putExtra(SnoozeActivity.EXTRA_TASK_ID, taskId);
}}, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(R.drawable.ic_action_tick_white, context.getResources().getString(R.string.rmd_NoA_done), completeIntent)

@ -1,12 +1,15 @@
package com.todoroo.astrid.reminders;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Spinner;
@ -17,61 +20,98 @@ import com.todoroo.astrid.ui.NumberPicker;
import org.tasks.R;
public class SnoozeDialog extends FrameLayout implements DialogInterface.OnClickListener {
import butterknife.ButterKnife;
import butterknife.InjectView;
LinearLayout snoozePicker;
NumberPicker snoozeValue;
Spinner snoozeUnits;
SnoozeCallback snoozeCallback;
public class SnoozeDialog extends DialogFragment {
public SnoozeDialog(Activity activity, SnoozeCallback callback) {
super(activity);
this.snoozeCallback = callback;
@InjectView(R.id.snoozePicker) LinearLayout snoozePicker;
@InjectView(R.id.numberPicker) NumberPicker snoozeValue;
@InjectView(R.id.numberUnits) Spinner snoozeUnits;
LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mInflater.inflate(R.layout.snooze_dialog, this, true);
private SnoozeCallback snoozeCallback;
private DialogInterface.OnDismissListener onDismissListener;
private String title;
snoozePicker = (LinearLayout) findViewById(R.id.snoozePicker);
snoozeValue = (NumberPicker) findViewById(R.id.numberPicker);
snoozeUnits = (Spinner) findViewById(R.id.numberUnits);
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater mInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = mInflater.inflate(R.layout.snooze_dialog, null);
ButterKnife.inject(this, layout);
snoozeValue.setIncrementBy(1);
snoozeValue.setRange(1, 99);
snoozeUnits.setSelection(RepeatControlSet.INTERVAL_HOURS);
snoozeUnits.setOnTouchListener(new OnTouchListener() {
snoozeUnits.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
AndroidUtilities.hideSoftInputForViews(getContext(), snoozePicker);
AndroidUtilities.hideSoftInputForViews(getActivity(), snoozePicker);
return false;
}
});
return new AlertDialog.Builder(getActivity(), R.style.Tasks_Dialog)
.setTitle(title)
.setView(layout)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
long time = DateUtilities.now();
int value = snoozeValue.getCurrent();
switch (snoozeUnits.getSelectedItemPosition()) {
case RepeatControlSet.INTERVAL_DAYS:
time += value * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_HOURS:
time += value * DateUtilities.ONE_HOUR;
break;
case RepeatControlSet.INTERVAL_MINUTES:
time += value * DateUtilities.ONE_MINUTE;
break;
case RepeatControlSet.INTERVAL_WEEKS:
time += value * 7 * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_MONTHS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 1);
break;
case RepeatControlSet.INTERVAL_YEARS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 12);
break;
}
snoozeCallback.snoozeForTime(time);
}
})
.setOnDismissListener(this)
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
@Override
public void onClick(DialogInterface dialog, int which) {
long time = DateUtilities.now();
int value = snoozeValue.getCurrent();
switch(snoozeUnits.getSelectedItemPosition()) {
case RepeatControlSet.INTERVAL_DAYS:
time += value * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_HOURS:
time += value * DateUtilities.ONE_HOUR;
break;
case RepeatControlSet.INTERVAL_MINUTES:
time += value * DateUtilities.ONE_MINUTE;
break;
case RepeatControlSet.INTERVAL_WEEKS:
time += value * 7 * DateUtilities.ONE_DAY;
break;
case RepeatControlSet.INTERVAL_MONTHS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 1);
break;
case RepeatControlSet.INTERVAL_YEARS:
time = DateUtilities.addCalendarMonthsToUnixtime(time, 12);
break;
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (onDismissListener != null) {
onDismissListener.onDismiss(dialog);
}
}
public void setSnoozeCallback(SnoozeCallback snoozeCallback) {
this.snoozeCallback = snoozeCallback;
}
public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
this.onDismissListener = onDismissListener;
}
snoozeCallback.snoozeForTime(time);
public void setTitle(String title) {
this.title = title;
}
}

@ -0,0 +1,28 @@
package org.tasks.injection;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import dagger.ObjectGraph;
public abstract class InjectingFragmentActivity extends FragmentActivity implements Injector {
private ObjectGraph objectGraph;
@Override
protected void onCreate(Bundle savedInstanceState) {
objectGraph = ((Injector) getApplication()).getObjectGraph().plus(new ActivityModule(this));
inject(this);
super.onCreate(savedInstanceState);
}
@Override
public void inject(Object caller) {
objectGraph.inject(caller);
}
@Override
public ObjectGraph getObjectGraph() {
return objectGraph;
}
}

@ -2,7 +2,7 @@ package org.tasks.reminders;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v4.app.FragmentManager;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.reminders.SnoozeCallback;
@ -11,55 +11,56 @@ import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
import org.tasks.R;
import org.tasks.injection.InjectingActivity;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.injection.InjectingFragmentActivity;
import org.tasks.notifications.NotificationManager;
import org.tasks.preferences.ActivityPreferences;
import javax.inject.Inject;
public class SnoozeActivity extends InjectingActivity {
public class SnoozeActivity extends InjectingFragmentActivity implements SnoozeCallback, DialogInterface.OnDismissListener {
public static final String TASK_ID = "id";
private static final String FRAG_TAG_SNOOZE_DIALOG = "frag_tag_snooze_dialog";
public static final String EXTRA_TASK_ID = "id";
@Inject StartupService startupService;
@Inject ActivityPreferences preferences;
@Inject TaskService taskService;
@Inject NotificationManager notificationManager;
private long taskId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
preferences.applyTranslucentDialogTheme();
startupService.onStartupApplication(this);
long taskId = getIntent().getLongExtra(TASK_ID, 0L);
snooze(taskId);
FragmentManager supportFragmentManager = getSupportFragmentManager();
SnoozeDialog fragmentByTag = (SnoozeDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_SNOOZE_DIALOG);
if (fragmentByTag == null) {
fragmentByTag = new SnoozeDialog();
fragmentByTag.show(supportFragmentManager, FRAG_TAG_SNOOZE_DIALOG);
}
taskId = getIntent().getLongExtra(EXTRA_TASK_ID, 0L);
fragmentByTag.setOnDismissListener(this);
fragmentByTag.setTitle(getString(R.string.rmd_NoA_snooze));
fragmentByTag.setSnoozeCallback(this);
}
private void snooze(final long taskId) {
SnoozeCallback callback = new SnoozeCallback() {
@Override
public void snoozeForTime(long time) {
setResult(RESULT_OK);
Task task = new Task();
task.setId(taskId);
task.setReminderSnooze(time);
taskService.save(task);
notificationManager.cancel(taskId);
finish();
}
};
SnoozeDialog sd = new SnoozeDialog(this, callback);
new AlertDialog.Builder(this)
.setTitle(R.string.rmd_NoA_snooze)
.setView(sd)
.setPositiveButton(android.R.string.ok, sd)
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setResult(RESULT_CANCELED);
finish();
}
})
.show().setOwnerActivity(this);
@Override
public void snoozeForTime(long time) {
setResult(RESULT_OK);
Task task = new Task();
task.setId(taskId);
task.setReminderSnooze(time);
taskService.save(task);
notificationManager.cancel(taskId);
finish();
}
@Override
public void onDismiss(DialogInterface dialog) {
setResult(RESULT_CANCELED);
finish();
}
}

@ -20,7 +20,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip">
android:padding="16dp">
<TimePicker android:id="@+id/timePicker"
android:visibility="gone"
@ -35,7 +35,7 @@
<com.todoroo.astrid.ui.NumberPicker android:id="@+id/numberPicker"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content" />
<Spinner android:id="@+id/numberUnits"
android:layout_weight="1"

Loading…
Cancel
Save