Handle onNewIntent in singleTop activities

Closes #296
pull/321/head 4.7.17
Alex Baker 9 years ago
parent 83eabbb9fe
commit 93168ce3e1

@ -27,8 +27,8 @@ android {
buildToolsVersion "22.0.1"
defaultConfig {
versionCode 372
versionName "4.7.16"
versionCode 373
versionName "4.7.17"
minSdkVersion 7
targetSdkVersion 22
}

@ -1,6 +1,5 @@
package org.tasks.reminders;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@ -17,7 +16,7 @@ import org.tasks.notifications.NotificationManager;
import javax.inject.Inject;
public class MissedCallActivity extends InjectingAppCompatActivity implements DialogInterface.OnDismissListener, MissedCallDialog.MissedCallHandler {
public class MissedCallActivity extends InjectingAppCompatActivity implements MissedCallDialog.MissedCallHandler {
private static final String FRAG_TAG_MISSED_CALL_FRAGMENT = "frag_tag_missed_call_fragment";
@ -37,8 +36,17 @@ public class MissedCallActivity extends InjectingAppCompatActivity implements Di
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
setup(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setup(intent);
}
private void setup(Intent intent) {
name = intent.getStringExtra(EXTRA_NAME);
number = intent.getStringExtra(EXTRA_NUMBER);
@ -51,15 +59,14 @@ public class MissedCallActivity extends InjectingAppCompatActivity implements Di
MissedCallDialog fragment = (MissedCallDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_MISSED_CALL_FRAGMENT);
if (fragment == null) {
fragment = new MissedCallDialog();
fragment.setTitle(intent.getStringExtra(EXTRA_TITLE));
fragment.show(supportFragmentManager, FRAG_TAG_MISSED_CALL_FRAGMENT);
}
fragment.setOnDismissListener(this);
fragment.setTitle(intent.getStringExtra(EXTRA_TITLE));
}
}
@Override
public void onDismiss(DialogInterface dialog) {
public void dismiss() {
finish();
}

@ -23,14 +23,13 @@ public class MissedCallDialog extends InjectingDialogFragment {
void callLater();
void ignore();
void dismiss();
}
@Inject DialogBuilder dialogBuilder;
private DialogInterface.OnDismissListener onDismissListener;
private String title;
MissedCallHandler handler;
private MissedCallHandler handler;
@NonNull
@Override
@ -56,24 +55,23 @@ public class MissedCallDialog extends InjectingDialogFragment {
break;
default:
handler.ignore();
break;
}
}
})
.show();
}
public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
this.onDismissListener = onDismissListener;
}
@Override
public void onDismiss(DialogInterface dialog) {
if (onDismissListener != null) {
onDismissListener.onDismiss(dialog);
}
handler.dismiss();
}
public void setTitle(String title) {
this.title = title;
Dialog dialog = getDialog();
if (dialog != null) {
dialog.setTitle(title);
}
}
}

@ -1,37 +1,80 @@
package org.tasks.reminders;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import org.tasks.Broadcaster;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.intents.TaskIntents;
import org.tasks.notifications.NotificationManager;
public class NotificationActivity extends InjectingAppCompatActivity implements DialogInterface.OnDismissListener {
import javax.inject.Inject;
public class NotificationActivity extends InjectingAppCompatActivity implements NotificationDialog.NotificationHandler {
private static final String FRAG_TAG_NOTIFICATION_FRAGMENT = "frag_tag_notification_fragment";
public static final String EXTRA_TITLE = "extra_title";
public static final String EXTRA_TASK_ID = "extra_task_id";
@Inject Broadcaster broadcaster;
@Inject NotificationManager notificationManager;
private long taskId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setup(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setup(intent);
}
private void setup(Intent intent) {
taskId = intent.getLongExtra(EXTRA_TASK_ID, 0L);
FragmentManager supportFragmentManager = getSupportFragmentManager();
NotificationDialog fragment = (NotificationDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_NOTIFICATION_FRAGMENT);
if (fragment == null) {
Intent intent = getIntent();
fragment = new NotificationDialog();
fragment.setTitle(intent.getStringExtra(EXTRA_TITLE));
fragment.setTaskId(intent.getLongExtra(EXTRA_TASK_ID, 0L));
fragment.show(supportFragmentManager, FRAG_TAG_NOTIFICATION_FRAGMENT);
}
fragment.setOnDismissListener(this);
fragment.setTitle(intent.getStringExtra(EXTRA_TITLE));
}
@Override
public void dismiss() {
finish();
}
@Override
public void edit() {
TaskIntents
.getEditTaskStack(this, null, taskId)
.startActivities();
notificationManager.cancel(taskId);
finish();
}
@Override
public void snooze() {
finish();
startActivity(new Intent(this, SnoozeActivity.class) {{
setFlags(FLAG_ACTIVITY_NEW_TASK);
putExtra(SnoozeActivity.EXTRA_TASK_ID, taskId);
}});
}
@Override
public void onDismiss(DialogInterface dialog) {
public void complete() {
broadcaster.completeTask(taskId);
finish();
}
}

@ -2,16 +2,12 @@ package org.tasks.reminders;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import org.tasks.Broadcaster;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.InjectingDialogFragment;
import org.tasks.intents.TaskIntents;
import org.tasks.notifications.NotificationManager;
import java.util.List;
@ -21,13 +17,20 @@ import static java.util.Arrays.asList;
public class NotificationDialog extends InjectingDialogFragment {
@Inject NotificationManager notificationManager;
@Inject Broadcaster broadcaster;
public interface NotificationHandler {
void edit();
void snooze();
void complete();
void dismiss();
}
@Inject DialogBuilder dialogBuilder;
private long taskId;
private String title;
private DialogInterface.OnDismissListener onDismissListener;
private NotificationHandler handler;
@NonNull
@Override
@ -37,6 +40,8 @@ public class NotificationDialog extends InjectingDialogFragment {
getString(R.string.rmd_NoA_snooze),
getString(R.string.rmd_NoA_done));
handler = (NotificationHandler) getActivity();
return dialogBuilder.newDialog()
.setTitle(title)
.setItems(items.toArray(new String[items.size()]), new DialogInterface.OnClickListener() {
@ -44,22 +49,13 @@ public class NotificationDialog extends InjectingDialogFragment {
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
TaskIntents
.getEditTaskStack(getActivity(), null, taskId)
.startActivities();
notificationManager.cancel(taskId);
dismiss();
handler.edit();
break;
case 1:
dismiss();
startActivity(new Intent(getActivity(), SnoozeActivity.class) {{
setFlags(FLAG_ACTIVITY_NEW_TASK);
putExtra(SnoozeActivity.EXTRA_TASK_ID, taskId);
}});
handler.snooze();
break;
case 2:
broadcaster.completeTask(taskId);
dismiss();
handler.complete();
break;
}
}
@ -67,22 +63,16 @@ public class NotificationDialog extends InjectingDialogFragment {
.show();
}
public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
this.onDismissListener = onDismissListener;
}
@Override
public void onDismiss(DialogInterface dialog) {
if (onDismissListener != null) {
onDismissListener.onDismiss(dialog);
}
handler.dismiss();
}
public void setTitle(String title) {
this.title = title;
}
public void setTaskId(long taskId) {
this.taskId = taskId;
Dialog dialog = getDialog();
if (dialog != null) {
dialog.setTitle(title);
}
}
}

@ -37,7 +37,18 @@ public class SnoozeActivity extends InjectingAppCompatActivity implements Snooze
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
taskId = getIntent().getLongExtra(EXTRA_TASK_ID, 0L);
setup(getIntent(), savedInstanceState);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setup(intent, null);
}
private void setup(Intent intent, Bundle savedInstanceState) {
taskId = intent.getLongExtra(EXTRA_TASK_ID, 0L);
if (savedInstanceState != null) {
pickingDateTime = savedInstanceState.getBoolean(EXTRA_PICKING_DATE_TIME, false);

Loading…
Cancel
Save