blob: 46b6c282326a0b0f8093eaca971f1d867fa5a236 [file] [log] [blame]
/*
* Copyright (C) 2017 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.server.telecom.ui;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioAttributes;
import android.net.Uri;
import android.telecom.Log;
import com.android.server.telecom.R;
/**
* Manages the {@link android.app.NotificationChannel}s for Telecom.
*/
public class NotificationChannelManager {
public static final String CHANNEL_ID_NAME = "Telecom-";
public static final String CHANNEL_ID_MISSED_CALLS = "TelecomMissedCalls";
public static final String CHANNEL_ID_INCOMING_CALLS = "TelecomIncomingCalls";
private BroadcastReceiver mLocaleChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(this, "Locale change; recreating channels.");
createOrUpdateAll(context);
}
};
public void createChannels(Context context) {
context.registerReceiver(mLocaleChangeReceiver,
new IntentFilter(Intent.ACTION_LOCALE_CHANGED));
createOrUpdateAll(context);
}
private void createOrUpdateAll(Context context) {
createOrUpdateChannel(context, CHANNEL_ID_MISSED_CALLS);
createOrUpdateChannel(context, CHANNEL_ID_INCOMING_CALLS);
}
private void createOrUpdateChannel(Context context, String channelId) {
NotificationChannel channel = createChannel(context, channelId);
getNotificationManager(context).createNotificationChannel(channel);
}
private NotificationChannel createChannel(Context context, String channelId) {
Uri silentRingtone = Uri.parse("");
CharSequence name = "";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
boolean canShowBadge = false;
boolean lights = false;
boolean vibration = false;
Uri sound = silentRingtone;
switch (channelId) {
case CHANNEL_ID_INCOMING_CALLS:
name = context.getText(R.string.notification_channel_incoming_call);
importance = NotificationManager.IMPORTANCE_MAX;
canShowBadge = false;
lights = true;
vibration = false;
sound = silentRingtone;
break;
case CHANNEL_ID_MISSED_CALLS:
name = context.getText(R.string.notification_channel_missed_call);
importance = NotificationManager.IMPORTANCE_DEFAULT;
canShowBadge = true;
lights = true;
vibration = true;
sound = silentRingtone;
break;
}
NotificationChannel channel = new NotificationChannel(channelId, name, importance);
channel.setShowBadge(canShowBadge);
if (sound != null) {
channel.setSound(
sound,
new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build());
}
channel.enableLights(lights);
channel.enableVibration(vibration);
return channel;
}
private NotificationManager getNotificationManager(Context context) {
return context.getSystemService(NotificationManager.class);
}
}