/*
 * Copyright (C) 2018 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.settings.homepage.contextualcards.conditional;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.provider.Settings;

public abstract class AbnormalRingerConditionController implements ConditionalCardController {

    private static final IntentFilter FILTER =
            new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION);

    protected final AudioManager mAudioManager;
    private final Context mAppContext;
    private final ConditionManager mConditionManager;
    private final RingerModeChangeReceiver mReceiver;

    public AbnormalRingerConditionController(Context appContext, ConditionManager manager) {
        mAppContext = appContext;
        mConditionManager = manager;
        mAudioManager = (AudioManager) appContext.getSystemService(Context.AUDIO_SERVICE);
        mReceiver = new RingerModeChangeReceiver();
    }

    @Override
    public void onPrimaryClick(Context context) {
        context.startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS)
                .setPackage(context.getPackageName()));
    }

    @Override
    public void onActionClick() {
        mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL);
        mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 1, 0 /* flags */);
    }

    @Override
    public void startMonitoringStateChange() {
        mAppContext.registerReceiver(mReceiver, FILTER);
    }

    @Override
    public void stopMonitoringStateChange() {
        mAppContext.unregisterReceiver(mReceiver);
    }

    class RingerModeChangeReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
                mConditionManager.onConditionChanged();
            }
        }
    }
}
