summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
diff options
context:
space:
mode:
authorNancy Chen <nancychen@google.com>2015-08-18 16:39:02 -0700
committerNancy Chen <nancychen@google.com>2015-08-19 20:11:37 -0700
commit2d588b857347fda465a963742c4f61e4014f3441 (patch)
treed6124b35ffab0e725cdba1808e56650d043525f7 /src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
parent4e5df6b3a264cceba8774f6704697312b35f329d (diff)
Show snackbar to undo last deleted voicemail.
Snackbar will appear for 3 seconds during which the user can undo the last deletion. The way it works is the snackbar appears for 3 seconds and a delayed callback is set for 3 seconds after which the voicemail is permanently deleted from the database. If a second (or third or fourth) voicemail is deleted subsequently, the previous voicemails that were waiting for the undo timeout are deleted immediately. Bug: 22460745 Change-Id: I84b70994275975e4e3020321884d382cc87098dc
Diffstat (limited to 'src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java')
-rw-r--r--src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java49
1 files changed, 46 insertions, 3 deletions
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index 158ed5834..38f6a1773 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -22,10 +22,12 @@ import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.os.PowerManager;
import android.provider.VoicemailContract;
import android.util.AttributeSet;
import android.util.Log;
+import android.support.design.widget.Snackbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -36,6 +38,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import com.android.common.io.MoreCloseables;
+import com.android.dialer.PhoneCallDetails;
import com.android.dialer.R;
import com.android.dialer.calllog.CallLogAsyncTaskUtil;
@@ -58,8 +61,10 @@ import javax.annotation.concurrent.ThreadSafe;
*/
@NotThreadSafe
public class VoicemailPlaybackLayout extends LinearLayout
- implements VoicemailPlaybackPresenter.PlaybackView {
+ implements VoicemailPlaybackPresenter.PlaybackView,
+ CallLogAsyncTaskUtil.CallLogAsyncTaskListener {
private static final String TAG = VoicemailPlaybackLayout.class.getSimpleName();
+ private static final int VOICEMAIL_DELETE_DELAY_MS = 3000;
/**
* Controls the animation of the playback slider.
@@ -184,8 +189,36 @@ public class VoicemailPlaybackLayout extends LinearLayout
return;
}
mPresenter.pausePlayback();
- CallLogAsyncTaskUtil.deleteVoicemail(mContext, mVoicemailUri, null);
mPresenter.onVoicemailDeleted();
+
+ final Uri deleteUri = mVoicemailUri;
+ final Runnable deleteCallback = new Runnable() {
+ @Override
+ public void run() {
+ if (mVoicemailUri == deleteUri) {
+ CallLogAsyncTaskUtil.deleteVoicemail(mContext, deleteUri,
+ VoicemailPlaybackLayout.this);
+ }
+ }
+ };
+
+ final Handler handler = new Handler();
+ // Add a little buffer time in case the user clicked "undo" at the end of the delay
+ // window.
+ handler.postDelayed(deleteCallback, VOICEMAIL_DELETE_DELAY_MS + 50);
+
+ Snackbar.make(VoicemailPlaybackLayout.this, R.string.snackbar_voicemail_deleted,
+ Snackbar.LENGTH_LONG)
+ .setDuration(VOICEMAIL_DELETE_DELAY_MS)
+ .setAction(R.string.snackbar_voicemail_deleted_undo,
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mPresenter.onVoicemailDeleteUndo();
+ handler.removeCallbacks(deleteCallback);
+ }
+ })
+ .show();
}
};
@@ -282,7 +315,6 @@ public class VoicemailPlaybackLayout extends LinearLayout
mStateText.setText(getString(R.string.voicemail_playback_error));
}
-
public void onSpeakerphoneOn(boolean on) {
if (mPresenter != null) {
mPresenter.setSpeakerphoneOn(on);
@@ -357,6 +389,17 @@ public class VoicemailPlaybackLayout extends LinearLayout
mPlaybackSeek.setEnabled(true);
}
+ @Override
+ public void onDeleteCall() {}
+
+ @Override
+ public void onDeleteVoicemail() {
+ mPresenter.onVoicemailDeletedInDatabase();
+ }
+
+ @Override
+ public void onGetCallDetails(PhoneCallDetails[] details) {}
+
private String getString(int resId) {
return mContext.getString(resId);
}