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" buildToolsVersion "22.0.1"
defaultConfig { defaultConfig {
versionCode 372 versionCode 373
versionName "4.7.16" versionName "4.7.17"
minSdkVersion 7 minSdkVersion 7
targetSdkVersion 22 targetSdkVersion 22
} }

@ -1,6 +1,5 @@
package org.tasks.reminders; package org.tasks.reminders;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@ -17,7 +16,7 @@ import org.tasks.notifications.NotificationManager;
import javax.inject.Inject; 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"; 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) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(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); name = intent.getStringExtra(EXTRA_NAME);
number = intent.getStringExtra(EXTRA_NUMBER); 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); MissedCallDialog fragment = (MissedCallDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_MISSED_CALL_FRAGMENT);
if (fragment == null) { if (fragment == null) {
fragment = new MissedCallDialog(); fragment = new MissedCallDialog();
fragment.setTitle(intent.getStringExtra(EXTRA_TITLE));
fragment.show(supportFragmentManager, FRAG_TAG_MISSED_CALL_FRAGMENT); fragment.show(supportFragmentManager, FRAG_TAG_MISSED_CALL_FRAGMENT);
} }
fragment.setOnDismissListener(this); fragment.setTitle(intent.getStringExtra(EXTRA_TITLE));
} }
} }
@Override @Override
public void onDismiss(DialogInterface dialog) { public void dismiss() {
finish(); finish();
} }

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

@ -1,37 +1,80 @@
package org.tasks.reminders; package org.tasks.reminders;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import org.tasks.Broadcaster;
import org.tasks.injection.InjectingAppCompatActivity; 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"; 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_TITLE = "extra_title";
public static final String EXTRA_TASK_ID = "extra_task_id"; public static final String EXTRA_TASK_ID = "extra_task_id";
@Inject Broadcaster broadcaster;
@Inject NotificationManager notificationManager;
private long taskId;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(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(); FragmentManager supportFragmentManager = getSupportFragmentManager();
NotificationDialog fragment = (NotificationDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_NOTIFICATION_FRAGMENT); NotificationDialog fragment = (NotificationDialog) supportFragmentManager.findFragmentByTag(FRAG_TAG_NOTIFICATION_FRAGMENT);
if (fragment == null) { if (fragment == null) {
Intent intent = getIntent();
fragment = new NotificationDialog(); 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.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 @Override
public void onDismiss(DialogInterface dialog) { public void complete() {
broadcaster.completeTask(taskId);
finish(); finish();
} }
} }

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

@ -37,7 +37,18 @@ public class SnoozeActivity extends InjectingAppCompatActivity implements Snooze
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(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) { if (savedInstanceState != null) {
pickingDateTime = savedInstanceState.getBoolean(EXTRA_PICKING_DATE_TIME, false); pickingDateTime = savedInstanceState.getBoolean(EXTRA_PICKING_DATE_TIME, false);

Loading…
Cancel
Save