Convert SnoozeDialog to fragment

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

@ -304,7 +304,10 @@
<activity <activity
android:name=".reminders.SnoozeActivity" 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 --> <!-- tags -->
<receiver android:name="com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer"> <receiver android:name="com.todoroo.astrid.tags.TagCustomFilterCriteriaExposer">

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

@ -60,7 +60,7 @@ public class NotificationFragment extends TaskListFragment {
public void onClick(View arg0) { public void onClick(View arg0) {
dismiss(); dismiss();
activity.startActivity(new Intent(activity, SnoozeActivity.class) {{ 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.FLAG_UPDATE_CURRENT);
PendingIntent snoozePendingIntent = PendingIntent.getActivity(context, notificationId, new Intent(context, SnoozeActivity.class) {{ PendingIntent snoozePendingIntent = PendingIntent.getActivity(context, notificationId, new Intent(context, SnoozeActivity.class) {{
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
putExtra(SnoozeActivity.TASK_ID, taskId); putExtra(SnoozeActivity.EXTRA_TASK_ID, taskId);
}}, PendingIntent.FLAG_UPDATE_CURRENT); }}, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(R.drawable.ic_action_tick_white, context.getResources().getString(R.string.rmd_NoA_done), completeIntent) 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; package com.todoroo.astrid.reminders;
import android.app.Activity; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; 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.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.Spinner; import android.widget.Spinner;
@ -17,36 +20,41 @@ import com.todoroo.astrid.ui.NumberPicker;
import org.tasks.R; import org.tasks.R;
public class SnoozeDialog extends FrameLayout implements DialogInterface.OnClickListener { import butterknife.ButterKnife;
import butterknife.InjectView;
LinearLayout snoozePicker; public class SnoozeDialog extends DialogFragment {
NumberPicker snoozeValue;
Spinner snoozeUnits;
SnoozeCallback snoozeCallback;
public SnoozeDialog(Activity activity, SnoozeCallback callback) { @InjectView(R.id.snoozePicker) LinearLayout snoozePicker;
super(activity); @InjectView(R.id.numberPicker) NumberPicker snoozeValue;
this.snoozeCallback = callback; @InjectView(R.id.numberUnits) Spinner snoozeUnits;
LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); private SnoozeCallback snoozeCallback;
mInflater.inflate(R.layout.snooze_dialog, this, true); private DialogInterface.OnDismissListener onDismissListener;
private String title;
snoozePicker = (LinearLayout) findViewById(R.id.snoozePicker); @NonNull
snoozeValue = (NumberPicker) findViewById(R.id.numberPicker); @Override
snoozeUnits = (Spinner) findViewById(R.id.numberUnits); 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.setIncrementBy(1);
snoozeValue.setRange(1, 99); snoozeValue.setRange(1, 99);
snoozeUnits.setSelection(RepeatControlSet.INTERVAL_HOURS); snoozeUnits.setSelection(RepeatControlSet.INTERVAL_HOURS);
snoozeUnits.setOnTouchListener(new OnTouchListener() { snoozeUnits.setOnTouchListener(new View.OnTouchListener() {
@Override @Override
public boolean onTouch(View v, MotionEvent event) { public boolean onTouch(View v, MotionEvent event) {
AndroidUtilities.hideSoftInputForViews(getContext(), snoozePicker); AndroidUtilities.hideSoftInputForViews(getActivity(), snoozePicker);
return false; return false;
} }
}); });
}
return new AlertDialog.Builder(getActivity(), R.style.Tasks_Dialog)
.setTitle(title)
.setView(layout)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
long time = DateUtilities.now(); long time = DateUtilities.now();
@ -74,4 +82,36 @@ public class SnoozeDialog extends FrameLayout implements DialogInterface.OnClick
snoozeCallback.snoozeForTime(time); 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 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;
}
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.content.DialogInterface;
import android.os.Bundle; 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.data.Task;
import com.todoroo.astrid.reminders.SnoozeCallback; import com.todoroo.astrid.reminders.SnoozeCallback;
@ -11,32 +11,42 @@ import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;
import org.tasks.R; 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.notifications.NotificationManager;
import org.tasks.preferences.ActivityPreferences;
import javax.inject.Inject; 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 StartupService startupService;
@Inject ActivityPreferences preferences;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject NotificationManager notificationManager; @Inject NotificationManager notificationManager;
private long taskId;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
preferences.applyTranslucentDialogTheme();
startupService.onStartupApplication(this); 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 @Override
public void snoozeForTime(long time) { public void snoozeForTime(long time) {
setResult(RESULT_OK); setResult(RESULT_OK);
@ -47,19 +57,10 @@ public class SnoozeActivity extends InjectingActivity {
notificationManager.cancel(taskId); notificationManager.cancel(taskId);
finish(); 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 @Override
public void onClick(DialogInterface dialog, int which) { public void onDismiss(DialogInterface dialog) {
setResult(RESULT_CANCELED); setResult(RESULT_CANCELED);
finish(); finish();
} }
})
.show().setOwnerActivity(this);
}
} }

@ -20,7 +20,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="5dip"> android:padding="16dp">
<TimePicker android:id="@+id/timePicker" <TimePicker android:id="@+id/timePicker"
android:visibility="gone" android:visibility="gone"

Loading…
Cancel
Save