AppRTCAudioManager.smali

.class public Lorg/webrtc/audio/AppRTCAudioManager;
.super Ljava/lang/Object;
.source "AppRTCAudioManager.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lorg/webrtc/audio/AppRTCAudioManager$WiredHeadsetReceiver;,
        Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;,
        Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;,
        Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;
    }
.end annotation


# static fields
.field private static final SPEAKERPHONE_AUTO:Ljava/lang/String; = "auto"

.field private static final SPEAKERPHONE_FALSE:Ljava/lang/String; = "false"

.field private static final SPEAKERPHONE_TRUE:Ljava/lang/String; = "true"

.field private static final TAG:Ljava/lang/String; = "AppRTCAudioManager"


# instance fields
.field private amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

.field private apprtcContext:Ljava/lang/ref/WeakReference;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/lang/ref/WeakReference<",
            "Landroid/content/Context;",
            ">;"
        }
    .end annotation
.end field

.field private audioDevices:Ljava/util/Set;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/Set<",
            "Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;",
            ">;"
        }
    .end annotation
.end field

.field private audioFocusChangeListener:Landroid/media/AudioManager$OnAudioFocusChangeListener;

.field private audioManager:Landroid/media/AudioManager;

.field private audioManagerEvents:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;

.field private final bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

.field private defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

.field private hasWiredHeadset:Z

.field private mActivityCallbacks:Landroid/app/Application$ActivityLifecycleCallbacks;

.field private mAudioFocusLost:Z

.field private mFromBackground:Z

.field private mIsBasicMusicMode:Z

.field private mPhoneStateListener:Landroid/telephony/PhoneStateListener;

.field private volatile mReceiverTag:Z

.field private mSpeakerOnWhenRinging:Z

.field private proximitySensor:Lorg/webrtc/audio/AppRTCProximitySensor;

.field private savedAudioMode:I

.field private savedIsMicrophoneMute:Z

.field private savedIsSpeakerPhoneOn:Z

.field private volatile selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

.field private telephonyManager:Landroid/telephony/TelephonyManager;

.field private final useSpeakerphone:Ljava/lang/String;

.field private userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

.field private wiredHeadsetReceiver:Landroid/content/BroadcastReceiver;


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method private constructor <init>(Landroid/content/Context;)V
    .registers 6
    .param p1, "context"    # Landroid/content/Context;

    .line 266
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 84
    const/4 v0, -0x2

    iput v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedAudioMode:I

    .line 85
    const/4 v0, 0x0

    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedIsSpeakerPhoneOn:Z

    .line 86
    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedIsMicrophoneMute:Z

    .line 87
    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    .line 130
    const/4 v1, 0x0

    iput-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->proximitySensor:Lorg/webrtc/audio/AppRTCProximitySensor;

    .line 140
    new-instance v2, Ljava/util/HashSet;

    invoke-direct {v2}, Ljava/util/HashSet;-><init>()V

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    .line 145
    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mReceiverTag:Z

    .line 151
    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mIsBasicMusicMode:Z

    .line 215
    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mAudioFocusLost:Z

    .line 216
    iput-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mFromBackground:Z

    .line 217
    new-instance v0, Lorg/webrtc/audio/AppRTCAudioManager$1;

    invoke-direct {v0, p0}, Lorg/webrtc/audio/AppRTCAudioManager$1;-><init>(Lorg/webrtc/audio/AppRTCAudioManager;)V

    iput-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mActivityCallbacks:Landroid/app/Application$ActivityLifecycleCallbacks;

    .line 363
    new-instance v0, Lorg/webrtc/audio/AppRTCAudioManager$4;

    invoke-direct {v0, p0}, Lorg/webrtc/audio/AppRTCAudioManager$4;-><init>(Lorg/webrtc/audio/AppRTCAudioManager;)V

    iput-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mPhoneStateListener:Landroid/telephony/PhoneStateListener;

    .line 267
    const-string v0, "AppRTCAudioManager"

    const-string v2, "ctor"

    invoke-static {v0, v2}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 268
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 269
    new-instance v2, Ljava/lang/ref/WeakReference;

    invoke-direct {v2, p1}, Ljava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    .line 270
    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/content/Context;

    const-string v3, "audio"

    invoke-virtual {v2, v3}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/media/AudioManager;

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    .line 271
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/content/Context;

    const-string v3, "phone"

    invoke-virtual {v2, v3}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/telephony/TelephonyManager;

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->telephonyManager:Landroid/telephony/TelephonyManager;

    .line 272
    invoke-static {p1, p0}, Lorg/webrtc/audio/AppRTCBluetoothManager;->create(Landroid/content/Context;Lorg/webrtc/audio/AppRTCAudioManager;)Lorg/webrtc/audio/AppRTCBluetoothManager;

    move-result-object v2

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 273
    new-instance v2, Lorg/webrtc/audio/AppRTCAudioManager$WiredHeadsetReceiver;

    invoke-direct {v2, p0, v1}, Lorg/webrtc/audio/AppRTCAudioManager$WiredHeadsetReceiver;-><init>(Lorg/webrtc/audio/AppRTCAudioManager;Lorg/webrtc/audio/AppRTCAudioManager$1;)V

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->wiredHeadsetReceiver:Landroid/content/BroadcastReceiver;

    .line 274
    sget-object v1, Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;->UNINITIALIZED:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    iput-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    .line 276
    invoke-static {p1}, Landroid/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;

    move-result-object v1

    .line 277
    .local v1, "sharedPreferences":Landroid/content/SharedPreferences;
    sget v2, Lcom/aliyun/sophonsdk/R$string;->pref_speakerphone_key:I

    invoke-virtual {p1, v2}, Landroid/content/Context;->getString(I)Ljava/lang/String;

    move-result-object v2

    sget v3, Lcom/aliyun/sophonsdk/R$string;->pref_speakerphone_default:I

    .line 278
    invoke-virtual {p1, v3}, Landroid/content/Context;->getString(I)Ljava/lang/String;

    move-result-object v3

    .line 277
    invoke-interface {v1, v2, v3}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

    move-result-object v2

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->useSpeakerphone:Ljava/lang/String;

    .line 279
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "useSpeakerphone: "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->useSpeakerphone:Ljava/lang/String;

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-static {v0, v2}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 280
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->useSpeakerphone:Ljava/lang/String;

    const-string v3, "false"

    invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v2

    if-eqz v2, :cond_ac

    .line 281
    sget-object v2, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->EARPIECE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    goto :goto_b0

    .line 283
    :cond_ac
    sget-object v2, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 292
    :goto_b0
    new-instance v2, Lorg/webrtc/audio/AppRTCAudioManager$2;

    invoke-direct {v2, p0}, Lorg/webrtc/audio/AppRTCAudioManager$2;-><init>(Lorg/webrtc/audio/AppRTCAudioManager;)V

    invoke-static {p1, v2}, Lorg/webrtc/audio/AppRTCProximitySensor;->create(Landroid/content/Context;Ljava/lang/Runnable;)Lorg/webrtc/audio/AppRTCProximitySensor;

    move-result-object v2

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->proximitySensor:Lorg/webrtc/audio/AppRTCProximitySensor;

    .line 301
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "defaultAudioDevice: "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-static {v0, v2}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 302
    invoke-static {v0}, Lorg/webrtc/utils/AppRTCUtils;->logDeviceInfo(Ljava/lang/String;)V

    .line 303
    return-void
.end method

.method static synthetic access$002(Lorg/webrtc/audio/AppRTCAudioManager;Z)Z
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;
    .param p1, "x1"    # Z

    .line 47
    iput-boolean p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    return p1
.end method

.method static synthetic access$100(Lorg/webrtc/audio/AppRTCAudioManager;)Z
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;

    .line 47
    iget-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mAudioFocusLost:Z

    return v0
.end method

.method static synthetic access$102(Lorg/webrtc/audio/AppRTCAudioManager;Z)Z
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;
    .param p1, "x1"    # Z

    .line 47
    iput-boolean p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mAudioFocusLost:Z

    return p1
.end method

.method static synthetic access$202(Lorg/webrtc/audio/AppRTCAudioManager;Z)Z
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;
    .param p1, "x1"    # Z

    .line 47
    iput-boolean p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mFromBackground:Z

    return p1
.end method

.method static synthetic access$300(Lorg/webrtc/audio/AppRTCAudioManager;)I
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;

    .line 47
    invoke-direct {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->requestAudioFocus()I

    move-result v0

    return v0
.end method

.method static synthetic access$500(Lorg/webrtc/audio/AppRTCAudioManager;)V
    .registers 1
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;

    .line 47
    invoke-direct {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->onProximitySensorChangedState()V

    return-void
.end method

.method static synthetic access$600(Lorg/webrtc/audio/AppRTCAudioManager;)Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;

    .line 47
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManagerEvents:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;

    return-object v0
.end method

.method static synthetic access$700(Lorg/webrtc/audio/AppRTCAudioManager;)Landroid/media/AudioManager;
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;

    .line 47
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    return-object v0
.end method

.method static synthetic access$800(Lorg/webrtc/audio/AppRTCAudioManager;)Z
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;

    .line 47
    iget-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mSpeakerOnWhenRinging:Z

    return v0
.end method

.method static synthetic access$802(Lorg/webrtc/audio/AppRTCAudioManager;Z)Z
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;
    .param p1, "x1"    # Z

    .line 47
    iput-boolean p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mSpeakerOnWhenRinging:Z

    return p1
.end method

.method static synthetic access$900(Lorg/webrtc/audio/AppRTCAudioManager;Z)V
    .registers 2
    .param p0, "x0"    # Lorg/webrtc/audio/AppRTCAudioManager;
    .param p1, "x1"    # Z

    .line 47
    invoke-direct {p0, p1}, Lorg/webrtc/audio/AppRTCAudioManager;->setSpeakerphoneOn(Z)V

    return-void
.end method

.method public static create(Landroid/content/Context;)Lorg/webrtc/audio/AppRTCAudioManager;
    .registers 2
    .param p0, "context"    # Landroid/content/Context;

    .line 263
    new-instance v0, Lorg/webrtc/audio/AppRTCAudioManager;

    invoke-direct {v0, p0}, Lorg/webrtc/audio/AppRTCAudioManager;-><init>(Landroid/content/Context;)V

    return-object v0
.end method

.method private hasEarpiece()Z
    .registers 3

    .line 725
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Landroid/content/Context;

    invoke-virtual {v0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;

    move-result-object v0

    const-string v1, "android.hardware.telephony"

    invoke-virtual {v0, v1}, Landroid/content/pm/PackageManager;->hasSystemFeature(Ljava/lang/String;)Z

    move-result v0

    return v0
.end method

.method private hasWiredHeadset()Z
    .registers 2
    .annotation runtime Ljava/lang/Deprecated;
    .end annotation

    .line 745
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v0}, Landroid/media/AudioManager;->isWiredHeadsetOn()Z

    move-result v0

    return v0
.end method

.method private onProximitySensorChangedState()V
    .registers 3

    .line 163
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->useSpeakerphone:Ljava/lang/String;

    const-string v1, "auto"

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-nez v0, :cond_b

    .line 164
    return-void

    .line 171
    :cond_b
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-interface {v0}, Ljava/util/Set;->size()I

    move-result v0

    const/4 v1, 0x2

    if-ne v0, v1, :cond_3b

    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    sget-object v1, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->EARPIECE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-interface {v0, v1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_3b

    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    sget-object v1, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 172
    invoke-interface {v0, v1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_3b

    .line 173
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->proximitySensor:Lorg/webrtc/audio/AppRTCProximitySensor;

    invoke-virtual {v0}, Lorg/webrtc/audio/AppRTCProximitySensor;->sensorReportsNearState()Z

    move-result v0

    if-eqz v0, :cond_36

    .line 178
    sget-object v0, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->EARPIECE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-direct {p0, v0}, Lorg/webrtc/audio/AppRTCAudioManager;->setAudioDeviceInternal(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;)V

    goto :goto_3b

    .line 184
    :cond_36
    sget-object v0, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-direct {p0, v0}, Lorg/webrtc/audio/AppRTCAudioManager;->setAudioDeviceInternal(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;)V

    .line 187
    :cond_3b
    :goto_3b
    return-void
.end method

.method private registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)V
    .registers 4
    .param p1, "receiver"    # Landroid/content/BroadcastReceiver;
    .param p2, "filter"    # Landroid/content/IntentFilter;

    .line 612
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Landroid/content/Context;

    .line 613
    .local v0, "context":Landroid/content/Context;
    if-eqz v0, :cond_d

    .line 614
    invoke-virtual {v0, p1, p2}, Landroid/content/Context;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;

    .line 617
    :cond_d
    return-void
.end method

.method private requestAudioFocus()I
    .registers 5

    .line 306
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioFocusChangeListener:Landroid/media/AudioManager$OnAudioFocusChangeListener;

    if-nez v0, :cond_b

    .line 309
    new-instance v0, Lorg/webrtc/audio/AppRTCAudioManager$3;

    invoke-direct {v0, p0}, Lorg/webrtc/audio/AppRTCAudioManager$3;-><init>(Lorg/webrtc/audio/AppRTCAudioManager;)V

    iput-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioFocusChangeListener:Landroid/media/AudioManager$OnAudioFocusChangeListener;

    .line 359
    :cond_b
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    const/4 v1, 0x0

    if-eqz v0, :cond_17

    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioFocusChangeListener:Landroid/media/AudioManager$OnAudioFocusChangeListener;

    const/4 v3, 0x2

    invoke-virtual {v0, v2, v1, v3}, Landroid/media/AudioManager;->requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I

    move-result v1

    :cond_17
    return v1
.end method

.method private setAudioDeviceInternal(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;)V
    .registers 7
    .param p1, "device"    # Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 528
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "setAudioDeviceInternal(device="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    const-string v1, ")"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    const-string v1, "AppRTCAudioManager"

    invoke-static {v1, v0}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 529
    const/4 v0, 0x0

    .line 530
    .local v0, "portType":I
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-interface {v2, p1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z

    move-result v2

    invoke-static {v2}, Lorg/webrtc/utils/AppRTCUtils;->assertIsTrue(Z)V

    .line 532
    sget-object v2, Lorg/webrtc/audio/AppRTCAudioManager$5;->$SwitchMap$org$webrtc$audio$AppRTCAudioManager$AudioDevice:[I

    invoke-virtual {p1}, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->ordinal()I

    move-result v3

    aget v2, v2, v3

    const/4 v3, 0x1

    if-eq v2, v3, :cond_4d

    const/4 v3, 0x2

    const/4 v4, 0x0

    if-eq v2, v3, :cond_49

    const/4 v3, 0x3

    if-eq v2, v3, :cond_45

    const/4 v3, 0x4

    if-eq v2, v3, :cond_40

    .line 547
    const-string v2, "Invalid audio device selection"

    invoke-static {v1, v2}, Lorg/webrtc/utils/AlivcLog;->e(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_51

    .line 543
    :cond_40
    invoke-direct {p0, v4}, Lorg/webrtc/audio/AppRTCAudioManager;->setSpeakerphoneOn(Z)V

    .line 544
    const/4 v0, 0x1

    .line 545
    goto :goto_51

    .line 540
    :cond_45
    invoke-direct {p0, v4}, Lorg/webrtc/audio/AppRTCAudioManager;->setSpeakerphoneOn(Z)V

    .line 541
    goto :goto_51

    .line 537
    :cond_49
    invoke-direct {p0, v4}, Lorg/webrtc/audio/AppRTCAudioManager;->setSpeakerphoneOn(Z)V

    .line 538
    goto :goto_51

    .line 534
    :cond_4d
    invoke-direct {p0, v3}, Lorg/webrtc/audio/AppRTCAudioManager;->setSpeakerphoneOn(Z)V

    .line 535
    nop

    .line 550
    :goto_51
    iput-object p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 551
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "setAudioDeviceInternal: CurrentPort type: "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-static {v1, v2}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 552
    return-void
.end method

.method private setMicrophoneMute(Z)V
    .registers 4
    .param p1, "on"    # Z

    .line 712
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v0}, Landroid/media/AudioManager;->isMicrophoneMute()Z

    move-result v0

    .line 713
    .local v0, "wasMuted":Z
    if-ne v0, p1, :cond_9

    .line 714
    return-void

    .line 716
    :cond_9
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v1, p1}, Landroid/media/AudioManager;->setMicrophoneMute(Z)V

    .line 717
    return-void
.end method

.method private setSpeakerphoneOn(Z)V
    .registers 10
    .param p1, "on"    # Z

    .line 661
    iput-boolean p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mSpeakerOnWhenRinging:Z

    .line 663
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v0}, Landroid/media/AudioManager;->isSpeakerphoneOn()Z

    move-result v0

    .line 664
    .local v0, "wasOn":Z
    iget-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mFromBackground:Z

    if-nez v1, :cond_f

    if-ne v0, p1, :cond_f

    .line 665
    return-void

    .line 669
    :cond_f
    iget-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mIsBasicMusicMode:Z

    const/4 v2, 0x3

    if-eqz v1, :cond_4d

    .line 670
    const/4 v1, 0x0

    if-eqz p1, :cond_3c

    .line 672
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v3, v1}, Landroid/media/AudioManager;->setMode(I)V

    .line 675
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v3, v2}, Landroid/media/AudioManager;->getStreamMaxVolume(I)I

    move-result v3

    .line 676
    .local v3, "maxVolume":I
    int-to-double v4, v3

    const-wide v6, 0x3fe6666666666666L    # 0.7

    invoke-static {v4, v5}, Ljava/lang/Double;->isNaN(D)Z

    mul-double v4, v4, v6

    double-to-int v4, v4

    .line 677
    .local v4, "protectVolume":I
    iget-object v5, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v5, v2}, Landroid/media/AudioManager;->getStreamVolume(I)I

    move-result v5

    .line 678
    .local v5, "currentVolume":I
    if-lt v5, v4, :cond_3b

    .line 681
    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v6, v2, v4, v1}, Landroid/media/AudioManager;->setStreamVolume(III)V

    .line 683
    .end local v3    # "maxVolume":I
    .end local v4    # "protectVolume":I
    .end local v5    # "currentVolume":I
    :cond_3b
    goto :goto_62

    .line 685
    :cond_3c
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v3, v2}, Landroid/media/AudioManager;->setMode(I)V

    .line 687
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v2, v1}, Landroid/media/AudioManager;->getStreamMaxVolume(I)I

    move-result v2

    .line 689
    .local v2, "maxVolume":I
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v3, v1, v2, v1}, Landroid/media/AudioManager;->setStreamVolume(III)V

    .line 690
    .end local v2    # "maxVolume":I
    goto :goto_62

    .line 693
    :cond_4d
    invoke-static {}, Lorg/webrtc/utils/DeviceConstants;->shouldSetMode()Z

    move-result v1

    if-eqz v1, :cond_62

    .line 694
    if-eqz p1, :cond_5d

    .line 695
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    sget v2, Lorg/webrtc/ali/voiceengine/WebRtcAudioManager;->sMode:I

    invoke-virtual {v1, v2}, Landroid/media/AudioManager;->setMode(I)V

    goto :goto_62

    .line 697
    :cond_5d
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v1, v2}, Landroid/media/AudioManager;->setMode(I)V

    .line 703
    :cond_62
    :goto_62
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v1, p1}, Landroid/media/AudioManager;->setSpeakerphoneOn(Z)V

    .line 704
    return-void
.end method

.method private unregisterReceiver(Landroid/content/BroadcastReceiver;)V
    .registers 3
    .param p1, "receiver"    # Landroid/content/BroadcastReceiver;

    .line 625
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Landroid/content/Context;

    .line 626
    .local v0, "context":Landroid/content/Context;
    if-eqz v0, :cond_d

    .line 627
    invoke-virtual {v0, p1}, Landroid/content/Context;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V

    .line 629
    :cond_d
    return-void
.end method


# virtual methods
.method public getAudioDevices()Ljava/util/Set;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "()",
            "Ljava/util/Set<",
            "Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;",
            ">;"
        }
    .end annotation

    .line 599
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 600
    new-instance v0, Ljava/util/HashSet;

    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-direct {v0, v1}, Ljava/util/HashSet;-><init>(Ljava/util/Collection;)V

    invoke-static {v0}, Ljava/util/Collections;->unmodifiableSet(Ljava/util/Set;)Ljava/util/Set;

    move-result-object v0

    return-object v0
.end method

.method public getSelectedAudioDevice()Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;
    .registers 2

    .line 607
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    return-object v0
.end method

.method public selectAudioDevice(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;)V
    .registers 4
    .param p1, "device"    # Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 585
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 586
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-interface {v0, p1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z

    move-result v0

    if-nez v0, :cond_2b

    .line 587
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "Can not select "

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    const-string v1, " from available "

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    const-string v1, "AppRTCAudioManager"

    invoke-static {v1, v0}, Lorg/webrtc/utils/AlivcLog;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 589
    :cond_2b
    iput-object p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 590
    invoke-virtual {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->updateAudioDeviceState()V

    .line 591
    return-void
.end method

.method public setBasicMusicMode(Z)V
    .registers 2
    .param p1, "basicMusicMode"    # Z

    .line 636
    iput-boolean p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mIsBasicMusicMode:Z

    .line 637
    return-void
.end method

.method public setBasicMusicModeVolume()V
    .registers 7

    .line 640
    iget-boolean v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mIsBasicMusicMode:Z

    if-eqz v0, :cond_25

    .line 643
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    const/4 v1, 0x3

    invoke-virtual {v0, v1}, Landroid/media/AudioManager;->getStreamMaxVolume(I)I

    move-result v0

    .line 644
    .local v0, "maxVolume":I
    int-to-double v2, v0

    const-wide v4, 0x3fe6666666666666L    # 0.7

    invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z

    mul-double v2, v2, v4

    double-to-int v2, v2

    .line 645
    .local v2, "protectVolume":I
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v3, v1}, Landroid/media/AudioManager;->getStreamVolume(I)I

    move-result v3

    .line 646
    .local v3, "currentVolume":I
    if-lt v3, v2, :cond_25

    .line 649
    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    const/4 v5, 0x0

    invoke-virtual {v4, v1, v2, v5}, Landroid/media/AudioManager;->setStreamVolume(III)V

    .line 652
    .end local v0    # "maxVolume":I
    .end local v2    # "protectVolume":I
    .end local v3    # "currentVolume":I
    :cond_25
    return-void
.end method

.method public setDefaultAudioDevice(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;)V
    .registers 5
    .param p1, "defaultDevice"    # Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 559
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 560
    sget-object v0, Lorg/webrtc/audio/AppRTCAudioManager$5;->$SwitchMap$org$webrtc$audio$AppRTCAudioManager$AudioDevice:[I

    invoke-virtual {p1}, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->ordinal()I

    move-result v1

    aget v0, v0, v1

    const/4 v1, 0x1

    const-string v2, "AppRTCAudioManager"

    if-eq v0, v1, :cond_27

    const/4 v1, 0x2

    if-eq v0, v1, :cond_19

    .line 572
    const-string v0, "Invalid default audio device selection"

    invoke-static {v2, v0}, Lorg/webrtc/utils/AlivcLog;->e(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_2a

    .line 565
    :cond_19
    invoke-direct {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->hasEarpiece()Z

    move-result v0

    if-eqz v0, :cond_22

    .line 566
    iput-object p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    goto :goto_2a

    .line 568
    :cond_22
    sget-object v0, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 570
    goto :goto_2a

    .line 562
    :cond_27
    iput-object p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 563
    nop

    .line 575
    :goto_2a
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "setDefaultAudioDevice(device="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    const-string v1, ")"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v2, v0}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 576
    invoke-virtual {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->updateAudioDeviceState()V

    .line 577
    return-void
.end method

.method public start(Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;)V
    .registers 8
    .param p1, "audioManagerEvents"    # Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;

    .line 392
    const-string v0, "AppRTCAudioManager"

    const-string v1, "start"

    invoke-static {v0, v1}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 393
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 394
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    sget-object v2, Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;->RUNNING:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    if-ne v1, v2, :cond_16

    .line 395
    const-string v1, "AudioManager is already active"

    invoke-static {v0, v1}, Lorg/webrtc/utils/AlivcLog;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 396
    return-void

    .line 401
    :cond_16
    const-string v1, "AudioManager starts..."

    invoke-static {v0, v1}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 402
    iput-object p1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManagerEvents:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;

    .line 403
    sget-object v1, Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;->RUNNING:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    iput-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    .line 407
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v1}, Landroid/media/AudioManager;->getMode()I

    move-result v1

    iput v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedAudioMode:I

    .line 408
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v1}, Landroid/media/AudioManager;->isSpeakerphoneOn()Z

    move-result v1

    iput-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedIsSpeakerPhoneOn:Z

    .line 409
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    invoke-virtual {v1}, Landroid/media/AudioManager;->isMicrophoneMute()Z

    move-result v1

    iput-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedIsMicrophoneMute:Z

    .line 410
    invoke-direct {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset()Z

    move-result v1

    iput-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    .line 413
    invoke-direct {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->requestAudioFocus()I

    move-result v1

    .line 414
    .local v1, "result":I
    const/4 v2, 0x1

    if-ne v1, v2, :cond_4c

    .line 416
    const-string v3, "Audio focus request granted for VOICE_CALL streams"

    invoke-static {v0, v3}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_51

    .line 418
    :cond_4c
    const-string v3, "Audio focus request failed"

    invoke-static {v0, v3}, Lorg/webrtc/utils/AlivcLog;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 427
    :goto_51
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    const/4 v4, 0x3

    invoke-virtual {v3, v4}, Landroid/media/AudioManager;->setMode(I)V

    .line 431
    const/4 v3, 0x0

    invoke-direct {p0, v3}, Lorg/webrtc/audio/AppRTCAudioManager;->setMicrophoneMute(Z)V

    .line 435
    sget-object v4, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->NONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 436
    sget-object v4, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->NONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 437
    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-interface {v4}, Ljava/util/Set;->clear()V

    .line 443
    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v4}, Lorg/webrtc/audio/AppRTCBluetoothManager;->start()V

    .line 452
    invoke-virtual {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->updateAudioDeviceState()V

    .line 457
    iget-boolean v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mReceiverTag:Z

    if-nez v4, :cond_82

    .line 458
    iput-boolean v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mReceiverTag:Z

    .line 459
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->wiredHeadsetReceiver:Landroid/content/BroadcastReceiver;

    new-instance v4, Landroid/content/IntentFilter;

    const-string v5, "android.intent.action.HEADSET_PLUG"

    invoke-direct {v4, v5}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V

    invoke-direct {p0, v2, v4}, Lorg/webrtc/audio/AppRTCAudioManager;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)V

    .line 463
    :cond_82
    iput-boolean v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mAudioFocusLost:Z

    .line 464
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    if-eqz v2, :cond_b1

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    if-eqz v2, :cond_b1

    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/content/Context;

    invoke-virtual {v2}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context;

    move-result-object v2

    instance-of v2, v2, Landroid/app/Application;

    if-eqz v2, :cond_b1

    .line 465
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/content/Context;

    invoke-virtual {v2}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context;

    move-result-object v2

    check-cast v2, Landroid/app/Application;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mActivityCallbacks:Landroid/app/Application$ActivityLifecycleCallbacks;

    invoke-virtual {v2, v3}, Landroid/app/Application;->registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V

    .line 468
    :cond_b1
    invoke-static {}, Lorg/webrtc/utils/DeviceConstants;->shouldListenerPhoneState()Z

    move-result v2

    if-eqz v2, :cond_c0

    .line 469
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->telephonyManager:Landroid/telephony/TelephonyManager;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mPhoneStateListener:Landroid/telephony/PhoneStateListener;

    const/16 v4, 0x20

    invoke-virtual {v2, v3, v4}, Landroid/telephony/TelephonyManager;->listen(Landroid/telephony/PhoneStateListener;I)V

    .line 472
    :cond_c0
    const-string v2, "AudioManager started"

    invoke-static {v0, v2}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 473
    return-void
.end method

.method public stop()V
    .registers 5

    .line 476
    const-string v0, "AppRTCAudioManager"

    const-string v1, "stop"

    invoke-static {v0, v1}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 477
    const/4 v1, 0x0

    iput-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mAudioFocusLost:Z

    .line 479
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    if-eqz v2, :cond_37

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    if-eqz v2, :cond_37

    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/content/Context;

    invoke-virtual {v2}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context;

    move-result-object v2

    instance-of v2, v2, Landroid/app/Application;

    if-eqz v2, :cond_37

    .line 480
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->apprtcContext:Ljava/lang/ref/WeakReference;

    invoke-virtual {v2}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/content/Context;

    invoke-virtual {v2}, Landroid/content/Context;->getApplicationContext()Landroid/content/Context;

    move-result-object v2

    check-cast v2, Landroid/app/Application;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mActivityCallbacks:Landroid/app/Application$ActivityLifecycleCallbacks;

    invoke-virtual {v2, v3}, Landroid/app/Application;->unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V

    .line 483
    :cond_37
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 484
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    sget-object v3, Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;->RUNNING:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    if-eq v2, v3, :cond_57

    .line 485
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Trying to stop AudioManager in incorrect state: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Lorg/webrtc/utils/AlivcLog;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 486
    return-void

    .line 488
    :cond_57
    sget-object v2, Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;->UNINITIALIZED:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->amState:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerState;

    .line 489
    iget-boolean v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mReceiverTag:Z

    if-eqz v2, :cond_66

    .line 490
    iput-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mReceiverTag:Z

    .line 491
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->wiredHeadsetReceiver:Landroid/content/BroadcastReceiver;

    invoke-direct {p0, v2}, Lorg/webrtc/audio/AppRTCAudioManager;->unregisterReceiver(Landroid/content/BroadcastReceiver;)V

    .line 495
    :cond_66
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v2}, Lorg/webrtc/audio/AppRTCBluetoothManager;->stop()V

    .line 499
    iget-boolean v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedIsSpeakerPhoneOn:Z

    invoke-direct {p0, v2}, Lorg/webrtc/audio/AppRTCAudioManager;->setSpeakerphoneOn(Z)V

    .line 500
    iget-boolean v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedIsMicrophoneMute:Z

    invoke-direct {p0, v2}, Lorg/webrtc/audio/AppRTCAudioManager;->setMicrophoneMute(Z)V

    .line 501
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    iget v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->savedAudioMode:I

    invoke-virtual {v2, v3}, Landroid/media/AudioManager;->setMode(I)V

    .line 505
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManager:Landroid/media/AudioManager;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioFocusChangeListener:Landroid/media/AudioManager$OnAudioFocusChangeListener;

    invoke-virtual {v2, v3}, Landroid/media/AudioManager;->abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I

    .line 506
    const/4 v2, 0x0

    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioFocusChangeListener:Landroid/media/AudioManager$OnAudioFocusChangeListener;

    .line 507
    const-string v3, "Abandoned audio focus for VOICE_CALL streams"

    invoke-static {v0, v3}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 509
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->proximitySensor:Lorg/webrtc/audio/AppRTCProximitySensor;

    if-eqz v3, :cond_94

    .line 510
    invoke-virtual {v3}, Lorg/webrtc/audio/AppRTCProximitySensor;->stop()V

    .line 511
    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->proximitySensor:Lorg/webrtc/audio/AppRTCProximitySensor;

    .line 514
    :cond_94
    iput-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManagerEvents:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;

    .line 517
    invoke-static {}, Lorg/webrtc/utils/DeviceConstants;->shouldListenerPhoneState()Z

    move-result v2

    if-eqz v2, :cond_a3

    .line 518
    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->telephonyManager:Landroid/telephony/TelephonyManager;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->mPhoneStateListener:Landroid/telephony/PhoneStateListener;

    invoke-virtual {v2, v3, v1}, Landroid/telephony/TelephonyManager;->listen(Landroid/telephony/PhoneStateListener;I)V

    .line 520
    :cond_a3
    const-string v1, "AudioManager stopped"

    invoke-static {v0, v1}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 521
    return-void
.end method

.method public updateAudioDeviceState()V
    .registers 2

    .line 755
    const/4 v0, 0x0

    invoke-virtual {p0, v0}, Lorg/webrtc/audio/AppRTCAudioManager;->updateAudioDeviceState(Z)V

    .line 756
    return-void
.end method

.method public updateAudioDeviceState(Z)V
    .registers 12
    .param p1, "audioFocusSetUpdated"    # Z

    .line 764
    invoke-static {}, Lorg/webrtc/ali/ThreadUtils;->checkIsOnMainThread()V

    .line 765
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "--- updateAudioDeviceState: wired headset="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-boolean v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;

    const-string v1, ", BT state="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v2, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 767
    invoke-virtual {v2}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v2

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    .line 765
    const-string v2, "AppRTCAudioManager"

    invoke-static {v2, v0}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 768
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v3, "Device status: available="

    invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    const-string v3, ", selected="

    invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    const-string v4, ", user selected="

    invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v2, v0}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 778
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v0}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v0

    sget-object v4, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->HEADSET_AVAILABLE:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v0, v4, :cond_71

    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 779
    invoke-virtual {v0}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v0

    sget-object v4, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->HEADSET_UNAVAILABLE:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v0, v4, :cond_71

    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 780
    invoke-virtual {v0}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v0

    sget-object v4, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_DISCONNECTING:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-ne v0, v4, :cond_76

    .line 781
    :cond_71
    iget-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v0}, Lorg/webrtc/audio/AppRTCBluetoothManager;->updateDevice()V

    .line 786
    :cond_76
    new-instance v0, Ljava/util/HashSet;

    invoke-direct {v0}, Ljava/util/HashSet;-><init>()V

    .line 788
    .local v0, "newAudioDevices":Ljava/util/Set;, "Ljava/util/Set<Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;>;"
    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v4}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v4

    sget-object v5, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTED:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v4, v5, :cond_99

    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 789
    invoke-virtual {v4}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v4

    sget-object v5, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTING:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v4, v5, :cond_99

    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 790
    invoke-virtual {v4}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v4

    sget-object v5, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->HEADSET_AVAILABLE:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-ne v4, v5, :cond_9e

    .line 791
    :cond_99
    sget-object v4, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->BLUETOOTH:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-interface {v0, v4}, Ljava/util/Set;->add(Ljava/lang/Object;)Z

    .line 794
    :cond_9e
    iget-boolean v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    if-eqz v4, :cond_a8

    .line 797
    sget-object v4, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->WIRED_HEADSET:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-interface {v0, v4}, Ljava/util/Set;->add(Ljava/lang/Object;)Z

    goto :goto_b8

    .line 803
    :cond_a8
    sget-object v4, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-interface {v0, v4}, Ljava/util/Set;->add(Ljava/lang/Object;)Z

    .line 804
    invoke-direct {p0}, Lorg/webrtc/audio/AppRTCAudioManager;->hasEarpiece()Z

    move-result v4

    if-eqz v4, :cond_b8

    .line 805
    sget-object v4, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->EARPIECE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-interface {v0, v4}, Ljava/util/Set;->add(Ljava/lang/Object;)Z

    .line 810
    :cond_b8
    :goto_b8
    iget-object v4, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-interface {v4, v0}, Ljava/util/Set;->equals(Ljava/lang/Object;)Z

    move-result v4

    const/4 v5, 0x1

    xor-int/2addr v4, v5

    .line 812
    .local v4, "audioDeviceSetUpdated":Z
    iput-object v0, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    .line 814
    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v6}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v6

    sget-object v7, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->HEADSET_UNAVAILABLE:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-ne v6, v7, :cond_d6

    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v7, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->BLUETOOTH:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-ne v6, v7, :cond_d6

    .line 817
    sget-object v6, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->NONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 819
    :cond_d6
    iget-boolean v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    if-eqz v6, :cond_e4

    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v7, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-ne v6, v7, :cond_e4

    .line 824
    sget-object v6, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->WIRED_HEADSET:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 826
    :cond_e4
    iget-boolean v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    if-nez v6, :cond_f2

    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v7, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->WIRED_HEADSET:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-ne v6, v7, :cond_f2

    .line 831
    sget-object v6, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->SPEAKER_PHONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iput-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 838
    :cond_f2
    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 839
    invoke-virtual {v6}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v6

    sget-object v7, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->HEADSET_AVAILABLE:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    const/4 v8, 0x0

    if-ne v6, v7, :cond_10b

    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v7, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->NONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-eq v6, v7, :cond_109

    iget-object v6, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v7, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->BLUETOOTH:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-ne v6, v7, :cond_10b

    :cond_109
    const/4 v6, 0x1

    goto :goto_10c

    :cond_10b
    const/4 v6, 0x0

    .line 847
    .local v6, "needBluetoothAudioStart":Z
    :goto_10c
    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 848
    invoke-virtual {v7}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v7

    sget-object v9, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTED:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v7, v9, :cond_120

    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 849
    invoke-virtual {v7}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v7

    sget-object v9, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTING:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-ne v7, v9, :cond_12d

    :cond_120
    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v9, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->NONE:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-eq v7, v9, :cond_12d

    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->userSelectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    sget-object v9, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->BLUETOOTH:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-eq v7, v9, :cond_12d

    goto :goto_12e

    :cond_12d
    const/4 v5, 0x0

    .line 853
    .local v5, "needBluetoothAudioStop":Z
    :goto_12e
    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v7}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v7

    sget-object v8, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->HEADSET_AVAILABLE:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v7, v8, :cond_14c

    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 854
    invoke-virtual {v7}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v7

    sget-object v8, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTING:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-eq v7, v8, :cond_14c

    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 855
    invoke-virtual {v7}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v7

    sget-object v8, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTED:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-ne v7, v8, :cond_174

    .line 856
    :cond_14c
    new-instance v7, Ljava/lang/StringBuilder;

    invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V

    const-string v8, "Need BT audio: start="

    invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;

    const-string v8, ", stop="

    invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;

    invoke-virtual {v7, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    .line 858
    invoke-virtual {v1}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v1

    invoke-virtual {v7, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    .line 856
    invoke-static {v2, v1}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 863
    :cond_174
    if-eqz v5, :cond_180

    .line 864
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v1}, Lorg/webrtc/audio/AppRTCBluetoothManager;->stopScoAudio()V

    .line 865
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v1}, Lorg/webrtc/audio/AppRTCBluetoothManager;->updateDevice()V

    .line 868
    :cond_180
    if-eqz v6, :cond_194

    if-nez v5, :cond_194

    .line 870
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v1}, Lorg/webrtc/audio/AppRTCBluetoothManager;->startScoAudio()Z

    move-result v1

    if-nez v1, :cond_194

    .line 872
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    sget-object v7, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->BLUETOOTH:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    invoke-interface {v1, v7}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z

    .line 873
    const/4 v4, 0x1

    .line 878
    :cond_194
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 880
    .local v1, "newAudioDevice":Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;
    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->bluetoothManager:Lorg/webrtc/audio/AppRTCBluetoothManager;

    invoke-virtual {v7}, Lorg/webrtc/audio/AppRTCBluetoothManager;->getState()Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    move-result-object v7

    sget-object v8, Lorg/webrtc/audio/AppRTCBluetoothManager$State;->SCO_CONNECTED:Lorg/webrtc/audio/AppRTCBluetoothManager$State;

    if-ne v7, v8, :cond_1a3

    .line 884
    sget-object v1, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->BLUETOOTH:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    goto :goto_1ac

    .line 885
    :cond_1a3
    iget-boolean v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->hasWiredHeadset:Z

    if-eqz v7, :cond_1aa

    .line 888
    sget-object v1, Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;->WIRED_HEADSET:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    goto :goto_1ac

    .line 894
    :cond_1aa
    iget-object v1, p0, Lorg/webrtc/audio/AppRTCAudioManager;->defaultAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    .line 897
    :goto_1ac
    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    if-ne v1, v7, :cond_1b4

    if-nez v4, :cond_1b4

    if-eqz p1, :cond_1de

    .line 899
    :cond_1b4
    invoke-direct {p0, v1}, Lorg/webrtc/audio/AppRTCAudioManager;->setAudioDeviceInternal(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;)V

    .line 900
    new-instance v7, Ljava/lang/StringBuilder;

    invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V

    const-string v8, "New device status: available="

    invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    iget-object v8, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v7, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v7, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    invoke-static {v2, v3}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 903
    iget-object v3, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioManagerEvents:Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;

    if-eqz v3, :cond_1de

    .line 905
    iget-object v7, p0, Lorg/webrtc/audio/AppRTCAudioManager;->selectedAudioDevice:Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;

    iget-object v8, p0, Lorg/webrtc/audio/AppRTCAudioManager;->audioDevices:Ljava/util/Set;

    invoke-interface {v3, v7, v8}, Lorg/webrtc/audio/AppRTCAudioManager$AudioManagerEvents;->onAudioDeviceChanged(Lorg/webrtc/audio/AppRTCAudioManager$AudioDevice;Ljava/util/Set;)V

    .line 908
    :cond_1de
    const-string v3, "--- updateAudioDeviceState done"

    invoke-static {v2, v3}, Lorg/webrtc/utils/AlivcLog;->i(Ljava/lang/String;Ljava/lang/String;)V

    .line 909
    return-void
.end method