Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a488c94 authored by /e/ robot's avatar /e/ robot
Browse files

Merge remote-tracking branch 'origin/lineage-22.2' into a15

parents 6ce0f826 fcedf0cc
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
package com.android.fmradio;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.KeyEvent;

public class FMMediaButtonIntentReceiver extends BroadcastReceiver {
    public interface MediaHandleListener {
        public boolean handleIntent(Intent intent);
    }
    private MediaHandleListener listener;
    public void setMediaHandleListener(MediaHandleListener listener) {
        this.listener = listener;
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if (listener != null) listener.handleIntent(intent);
    }
}
+18 −12
Original line number Original line Diff line number Diff line
@@ -259,7 +259,7 @@ public class FmMainActivity extends Activity implements FmFavoriteEditDialog.Edi
                            changeToMainLayout();
                            changeToMainLayout();
                        }
                        }
                    } else {
                    } else {
                        mMenuItemHeadset.setIcon(R.drawable.btn_fm_headset_selector);
                        toggleSpeaker(false);
                        if (mIsActivityForeground) {
                        if (mIsActivityForeground) {
                            cancelMainAnimation();
                            cancelMainAnimation();
                            playNoHeadsetAnimation();
                            playNoHeadsetAnimation();
@@ -733,6 +733,10 @@ public class FmMainActivity extends Activity implements FmFavoriteEditDialog.Edi
            mService.unregisterFmRadioListener(mFmRadioListener);
            mService.unregisterFmRadioListener(mFmRadioListener);
        }
        }
        mFmRadioListener = null;
        mFmRadioListener = null;
        if (mIsServiceBinded) {
            unbindService(mServiceConnection);
            mIsServiceBinded = false;
        }
        mScroller.closeAdapterCursor();
        mScroller.closeAdapterCursor();
        mScroller.unregisterListener(mEventListener);
        mScroller.unregisterListener(mEventListener);
        super.onDestroy();
        super.onDestroy();
@@ -779,8 +783,7 @@ public class FmMainActivity extends Activity implements FmFavoriteEditDialog.Edi
        refreshImageButton(isSeeking ? false : isPowerUp);
        refreshImageButton(isSeeking ? false : isPowerUp);
        refreshPlayButton(isSeeking ? false
        refreshPlayButton(isSeeking ? false
                : (isPowerUp || (isPowerdown && !mIsDisablePowerMenu)));
                : (isPowerUp || (isPowerdown && !mIsDisablePowerMenu)));
        mMenuItemHeadset.setIcon(isSpeakerUsed ? R.drawable.btn_fm_speaker_selector
        toggleSpeaker(isSpeakerUsed);
                : R.drawable.btn_fm_headset_selector);
        return true;
        return true;
    }
    }


@@ -808,13 +811,11 @@ public class FmMainActivity extends Activity implements FmFavoriteEditDialog.Edi


            case R.id.earphone_menu:
            case R.id.earphone_menu:
                setSpeakerPhoneOn(false);
                setSpeakerPhoneOn(false);
                mMenuItemHeadset.setIcon(R.drawable.btn_fm_headset_selector);
                invalidateOptionsMenu();
                invalidateOptionsMenu();
                break;
                break;


            case R.id.speaker_menu:
            case R.id.speaker_menu:
                setSpeakerPhoneOn(true);
                setSpeakerPhoneOn(true);
                mMenuItemHeadset.setIcon(R.drawable.btn_fm_speaker_selector);
                invalidateOptionsMenu();
                invalidateOptionsMenu();
                break;
                break;


@@ -973,12 +974,18 @@ public class FmMainActivity extends Activity implements FmFavoriteEditDialog.Edi
        mService.powerDownAsync();
        mService.powerDownAsync();
    }
    }


    private void setSpeakerPhoneOn(boolean isSpeaker) {
    private void toggleSpeaker(boolean isSpeaker) {
        if (isSpeaker) {
        if (mMenuItemHeadset != null) {
            mService.setSpeakerPhoneOn(true);
            mMenuItemHeadset.setIcon(isSpeaker ? R.drawable.btn_fm_speaker_selector
        } else {
                    : R.drawable.btn_fm_headset_selector);
            mService.setSpeakerPhoneOn(false);
            mMenuItemHeadset.setContentDescription(getString(isSpeaker ? R.string.optmenu_speaker
                    : R.string.optmenu_earphone));
        }
    }
    }

    private void setSpeakerPhoneOn(boolean isSpeaker) {
        mService.setSpeakerPhoneOn(isSpeaker);
        toggleSpeaker(isSpeaker);
    }
    }


    /**
    /**
@@ -1133,8 +1140,7 @@ public class FmMainActivity extends Activity implements FmFavoriteEditDialog.Edi
        refreshPlayButton(fmStatus ? false
        refreshPlayButton(fmStatus ? false
                : (isPowerUp || (isPowerdown && !mIsDisablePowerMenu)));
                : (isPowerUp || (isPowerdown && !mIsDisablePowerMenu)));
        if (null != mMenuItemHeadset) {
        if (null != mMenuItemHeadset) {
            mMenuItemHeadset.setIcon(isSpeakerUsed ? R.drawable.btn_fm_speaker_selector
            toggleSpeaker(isSpeakerUsed);
                    : R.drawable.btn_fm_headset_selector);
        }
        }


    }
    }
+110 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,8 @@ import android.media.AudioRecord;
import android.media.AudioSystem;
import android.media.AudioSystem;
import android.media.AudioTrack;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.media.MediaRecorder;
import android.media.session.MediaSession;
import android.media.session.PlaybackState;
import android.net.Uri;
import android.net.Uri;
import android.os.Binder;
import android.os.Binder;
import android.os.Bundle;
import android.os.Bundle;
@@ -61,6 +63,7 @@ import android.os.PowerManager.WakeLock;
import android.os.Process;
import android.os.Process;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Log;
import android.util.Log;
import android.view.KeyEvent;


import com.android.fmradio.FmStation.Station;
import com.android.fmradio.FmStation.Station;


@@ -114,6 +117,88 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan


    // FM recorder
    // FM recorder
    FmRecorder mFmRecorder = null;
    FmRecorder mFmRecorder = null;
    private FMMediaButtonIntentReceiver mMediaButtonIntentReceiver =
            new FMMediaButtonIntentReceiver();
    private FMMediaButtonIntentReceiver.MediaHandleListener listener =
            new FMMediaButtonIntentReceiver.MediaHandleListener() {
        @Override
        public boolean handleIntent(Intent intent) {
            KeyEvent event = (KeyEvent) intent.getParcelableExtra("android.intent.extra.KEY_EVENT");
            boolean result = false;
            if (event == null) {
                return result;
            }
            if (event.getAction() != KeyEvent.ACTION_DOWN) return result;
            int keyCode = event.getKeyCode();
            int repeatCount = event.getRepeatCount();
            switch (keyCode) {
                case KeyEvent.KEYCODE_HEADSETHOOK:
                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                    if (repeatCount == 0) {
                        if (mPowerStatus != POWER_UP) {
                            powerUpAsync(FmUtils.computeFrequency(getFrequency()));
                        }
                        else {
                            powerDownAsync();
                        }
                        result = true;
                    }
                    break;
                case KeyEvent.KEYCODE_MEDIA_PAUSE:
                    if (repeatCount == 0) {
                        if (mPowerStatus != POWER_DOWN) {
                            powerDownAsync();
                            result = true;
                        }
                    }
                    break;
                case KeyEvent.KEYCODE_MEDIA_PLAY:
                    if (repeatCount == 0) {
                        if (mPowerStatus != POWER_UP) {
                            powerUpAsync(FmUtils.computeFrequency(getFrequency()));
                            result = true;
                        }
                    }
                    break;
                case KeyEvent.KEYCODE_MEDIA_STOP:
                    if (repeatCount == 0) {
                        stopSelf();
                        result = true;
                    }
                    break;
                case KeyEvent.KEYCODE_MEDIA_SKIP_BACKWARD:
                case KeyEvent.KEYCODE_MEDIA_STEP_BACKWARD:
                case KeyEvent.KEYCODE_MEDIA_SKIP_FORWARD:
                case KeyEvent.KEYCODE_MEDIA_STEP_FORWARD:
                    if (repeatCount == 0) {
                        tuneStationAsync(keyCode == KeyEvent.KEYCODE_MEDIA_SKIP_BACKWARD ||
                                keyCode == KeyEvent.KEYCODE_MEDIA_STEP_BACKWARD?
                                FmUtils.computeDecreaseStation(mCurrentStation):
                                FmUtils.computeIncreaseStation(mCurrentStation));
                        result = true;
                        break;
                    }
                    else if (repeatCount == 1) {
                        keyCode = keyCode == KeyEvent.KEYCODE_MEDIA_SKIP_BACKWARD
                                || keyCode == KeyEvent.KEYCODE_MEDIA_STEP_BACKWARD ?
                                KeyEvent.KEYCODE_MEDIA_PREVIOUS : KeyEvent.KEYCODE_MEDIA_NEXT;
                        repeatCount = 0;
                        result = true;
                    }
                case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
                case KeyEvent.KEYCODE_MEDIA_NEXT:
                    if (repeatCount == 0) {
                        seekStationAsync(FmUtils.computeFrequency(mCurrentStation),
                                keyCode == KeyEvent.KEYCODE_MEDIA_NEXT);
                        result = true;
                    }
                    break;
                default:
                    break;
            }
            return result;
        }
    };
    private BroadcastReceiver mSdcardListener = null;
    private BroadcastReceiver mSdcardListener = null;
    private int mRecordState = FmRecorder.STATE_INVALID;
    private int mRecordState = FmRecorder.STATE_INVALID;
    private int mRecorderErrorType = -1;
    private int mRecorderErrorType = -1;
@@ -182,6 +267,7 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
    // Instance variables
    // Instance variables
    private Context mContext = null;
    private Context mContext = null;
    private AudioManager mAudioManager = null;
    private AudioManager mAudioManager = null;
    private MediaSession mMediaSession = null;
    private ActivityManager mActivityManager = null;
    private ActivityManager mActivityManager = null;
    //private MediaPlayer mFmPlayer = null;
    //private MediaPlayer mFmPlayer = null;
    private WakeLock mWakeLock = null;
    private WakeLock mWakeLock = null;
@@ -1271,6 +1357,26 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
        super.onCreate();
        super.onCreate();
        mContext = getApplicationContext();
        mContext = getApplicationContext();
        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        mMediaButtonIntentReceiver.setMediaHandleListener(listener);
        IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        registerReceiver(mMediaButtonIntentReceiver, filter);
        mMediaSession = new MediaSession(mContext, TAG);
        Intent i = new Intent(this, FMMediaButtonIntentReceiver.class)
                .setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        mMediaSession.setMediaButtonReceiver(PendingIntent.getBroadcast(this, 0, i, 0));
        mMediaSession.setActive(true);
        mMediaSession.setCallback(new MediaSession.Callback() {
            @Override
            public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
                return listener.handleIntent(mediaButtonIntent);
            }
        });
        mMediaSession.setPlaybackState(new PlaybackState.Builder().setActions(
                PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_PLAY
                | PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_STOP
                | PlaybackState.ACTION_REWIND | PlaybackState.ACTION_SKIP_TO_PREVIOUS
                | PlaybackState.ACTION_SKIP_TO_NEXT).build());
        mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
@@ -1488,6 +1594,10 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
    public void onDestroy() {
    public void onDestroy() {
        mAudioManager.setParameters("AudioFmPreStop=0");
        mAudioManager.setParameters("AudioFmPreStop=0");
        setMute(true);
        setMute(true);
        mMediaSession.setMediaButtonReceiver(null);
        mMediaSession.setActive(false);
        mMediaSession.release();
        unregisterReceiver(mMediaButtonIntentReceiver);
        // stop rds first, avoid blocking other native method
        // stop rds first, avoid blocking other native method
        if (isRdsSupported()) {
        if (isRdsSupported()) {
            stopRdsThread();
            stopRdsThread();