blob: 66f40bcd72bab3a9e199328cafe0072b8f8a332c [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.dialer.app.calllog;
import android.app.FragmentManager;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import com.android.dialer.blocking.BlockReportSpamDialogs;
import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
import com.android.dialer.common.LogUtil;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.nano.DialerImpression;
import com.android.dialer.logging.nano.ReportingLocation;
import com.android.dialer.spam.Spam;
/** Listener to show dialogs for block and report spam actions. */
public class BlockReportSpamListener implements CallLogListItemViewHolder.OnClickListener {
private final Context mContext;
private final FragmentManager mFragmentManager;
private final RecyclerView.Adapter mAdapter;
private final FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
public BlockReportSpamListener(
Context context,
FragmentManager fragmentManager,
RecyclerView.Adapter adapter,
FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler) {
mContext = context;
mFragmentManager = fragmentManager;
mAdapter = adapter;
mFilteredNumberAsyncQueryHandler = filteredNumberAsyncQueryHandler;
}
@Override
public void onBlockReportSpam(
String displayNumber,
final String number,
final String countryIso,
final int callType,
final int contactSourceType) {
BlockReportSpamDialogs.BlockReportSpamDialogFragment.newInstance(
displayNumber,
Spam.get(mContext).isDialogReportSpamCheckedByDefault(),
new BlockReportSpamDialogs.OnSpamDialogClickListener() {
@Override
public void onClick(boolean isSpamChecked) {
LogUtil.i("BlockReportSpamListener.onBlockReportSpam", "onClick");
if (isSpamChecked && Spam.get(mContext).isSpamEnabled()) {
Logger.get(mContext)
.logImpression(
DialerImpression.Type
.REPORT_CALL_AS_SPAM_VIA_CALL_LOG_BLOCK_REPORT_SPAM_SENT_VIA_BLOCK_NUMBER_DIALOG);
Spam.get(mContext)
.reportSpamFromCallHistory(
number,
countryIso,
callType,
ReportingLocation.Type.CALL_LOG_HISTORY,
contactSourceType);
}
mFilteredNumberAsyncQueryHandler.blockNumber(
new FilteredNumberAsyncQueryHandler.OnBlockNumberListener() {
@Override
public void onBlockComplete(Uri uri) {
Logger.get(mContext)
.logImpression(DialerImpression.Type.USER_ACTION_BLOCKED_NUMBER);
mAdapter.notifyDataSetChanged();
}
},
number,
countryIso);
}
},
null)
.show(mFragmentManager, BlockReportSpamDialogs.BLOCK_REPORT_SPAM_DIALOG_TAG);
}
@Override
public void onBlock(
String displayNumber,
final String number,
final String countryIso,
final int callType,
final int contactSourceType) {
BlockReportSpamDialogs.BlockDialogFragment.newInstance(
displayNumber,
Spam.get(mContext).isSpamEnabled(),
new BlockReportSpamDialogs.OnConfirmListener() {
@Override
public void onClick() {
LogUtil.i("BlockReportSpamListener.onBlock", "onClick");
if (Spam.get(mContext).isSpamEnabled()) {
Logger.get(mContext)
.logImpression(
DialerImpression.Type
.DIALOG_ACTION_CONFIRM_NUMBER_SPAM_INDIRECTLY_VIA_BLOCK_NUMBER);
Spam.get(mContext)
.reportSpamFromCallHistory(
number,
countryIso,
callType,
ReportingLocation.Type.CALL_LOG_HISTORY,
contactSourceType);
}
mFilteredNumberAsyncQueryHandler.blockNumber(
new FilteredNumberAsyncQueryHandler.OnBlockNumberListener() {
@Override
public void onBlockComplete(Uri uri) {
Logger.get(mContext)
.logImpression(DialerImpression.Type.USER_ACTION_BLOCKED_NUMBER);
mAdapter.notifyDataSetChanged();
}
},
number,
countryIso);
}
},
null)
.show(mFragmentManager, BlockReportSpamDialogs.BLOCK_DIALOG_TAG);
}
@Override
public void onUnblock(
String displayNumber,
final String number,
final String countryIso,
final int callType,
final int contactSourceType,
final boolean isSpam,
final Integer blockId) {
BlockReportSpamDialogs.UnblockDialogFragment.newInstance(
displayNumber,
isSpam,
new BlockReportSpamDialogs.OnConfirmListener() {
@Override
public void onClick() {
LogUtil.i("BlockReportSpamListener.onUnblock", "onClick");
if (isSpam && Spam.get(mContext).isSpamEnabled()) {
Logger.get(mContext)
.logImpression(DialerImpression.Type.REPORT_AS_NOT_SPAM_VIA_UNBLOCK_NUMBER);
Spam.get(mContext)
.reportNotSpamFromCallHistory(
number,
countryIso,
callType,
ReportingLocation.Type.CALL_LOG_HISTORY,
contactSourceType);
}
mFilteredNumberAsyncQueryHandler.unblock(
new FilteredNumberAsyncQueryHandler.OnUnblockNumberListener() {
@Override
public void onUnblockComplete(int rows, ContentValues values) {
Logger.get(mContext)
.logImpression(DialerImpression.Type.USER_ACTION_UNBLOCKED_NUMBER);
mAdapter.notifyDataSetChanged();
}
},
blockId);
}
},
null)
.show(mFragmentManager, BlockReportSpamDialogs.UNBLOCK_DIALOG_TAG);
}
@Override
public void onReportNotSpam(
String displayNumber,
final String number,
final String countryIso,
final int callType,
final int contactSourceType) {
BlockReportSpamDialogs.ReportNotSpamDialogFragment.newInstance(
displayNumber,
new BlockReportSpamDialogs.OnConfirmListener() {
@Override
public void onClick() {
LogUtil.i("BlockReportSpamListener.onReportNotSpam", "onClick");
if (Spam.get(mContext).isSpamEnabled()) {
Logger.get(mContext)
.logImpression(DialerImpression.Type.DIALOG_ACTION_CONFIRM_NUMBER_NOT_SPAM);
Spam.get(mContext)
.reportNotSpamFromCallHistory(
number,
countryIso,
callType,
ReportingLocation.Type.CALL_LOG_HISTORY,
contactSourceType);
}
mAdapter.notifyDataSetChanged();
}
},
null)
.show(mFragmentManager, BlockReportSpamDialogs.NOT_SPAM_DIALOG_TAG);
}
}