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

Commit 5782d5c0 authored by Roman Birg's avatar Roman Birg
Browse files

dBm signal text CDMA fix



* refactored calculations, instead of having another phone listener in the
  cmsignaltext class, it now broadcasts an intent with the dbm value
  using the same calculations as the Settings > About screen.

* moved calculations in updateSignalStrenght() to the top so if there's no
  sim card it will still show a proper dbm (otherwise it will show 0).
  Do we want to show the dBm AND a "no signal" bars icon in this case?

  patch 2: using intents to pass dbm value now
  patch 3: remove extra white space
  patch 4: using the same dbm calculations as Settings > About screen

Change-Id: Ief6d767f8255b7a3c6857f5581eb77e950e71598
Signed-off-by: default avatarRoman Birg <romanbirg@gmail.com>
parent 1cd811fa
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1918,6 +1918,12 @@ public class Intent implements Parcelable, Cloneable {
     */
    public static final String ACTION_APP_LAUNCH_FAILURE_RESET = "com.tmobile.intent.action.APP_LAUNCH_FAILURE_RESET";

    /**
     * Broadcast Action: Broadcast a new dBm value
     * @hide
     */
    public static final String ACTION_SIGNAL_DBM_CHANGED = "com.cyanogenmod.intent.action.DBM_SIGNAL_CHANGED";

    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // Standard intent categories (see addCategory()).
+20 −26
Original line number Diff line number Diff line
@@ -14,8 +14,11 @@

package com.android.systemui.statusbar;

import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.os.Handler;
import android.provider.Settings;
@@ -30,6 +33,9 @@ import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;

import java.util.Calendar;
import java.util.TimeZone;

public class CmSignalText extends TextView {

    int dBm = 0;
@@ -57,10 +63,6 @@ public class CmSignalText extends TextView {

    public CmSignalText(Context context, AttributeSet attrs) {
        super(context, attrs);
        ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).listen(
                mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
                        | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

        mHandler = new Handler();
        SettingsObserver settingsObserver = new SettingsObserver(mHandler);
        settingsObserver.observe();
@@ -74,7 +76,10 @@ public class CmSignalText extends TextView {

        if (!mAttached) {
            mAttached = true;
            IntentFilter filter = new IntentFilter();
            filter.addAction(Intent.ACTION_SIGNAL_DBM_CHANGED);

            getContext().registerReceiver(mIntentReceiver, filter, null, getHandler());
        }
    }

@@ -86,6 +91,17 @@ public class CmSignalText extends TextView {
        }
    }

    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_SIGNAL_DBM_CHANGED)) {
                dBm = intent.getIntExtra("dbm", 0);
            }
            updateSettings();
        }
    };

    class SettingsObserver extends ContentObserver {
        SettingsObserver(Handler handler) {
            super(handler);
@@ -135,26 +151,4 @@ public class CmSignalText extends TextView {
            this.setVisibility(View.GONE);
        }
    }

    /*
     * Phone listener to update signal information
     */
    private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            signal = signalStrength;

            if (signal != null) {
                ASU = signal.getGsmSignalStrength();
            }
            dBm = -113 + (2 * ASU);

            // update text if it's visible
            if (mAttached)
                updateSignalText();

        }

    };

}
+19 −0
Original line number Diff line number Diff line
@@ -1102,6 +1102,7 @@ public class StatusBarPolicy {
    }

    private final void updateSignalStrength() {
        updateSignalStrengthDbm();
        if (mShowCmSignal) {
            mService.setIconVisibility("phone_signal", false);
            return;
@@ -1216,6 +1217,24 @@ public class StatusBarPolicy {
        return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
    }

    public void updateSignalStrengthDbm() {
        int dBm = -1;

        if(!mSignalStrength.isGsm()) {
            dBm = mSignalStrength.getCdmaDbm();
        } else {
            int gsmSignalStrength = mSignalStrength.getGsmSignalStrength();
            int asu = (gsmSignalStrength == 99 ? -1 : gsmSignalStrength);
            if (asu != -1) {
                dBm = -113 + 2*asu;
            }
        }

        Intent dbmIntent = new Intent(Intent.ACTION_SIGNAL_DBM_CHANGED);
        dbmIntent.putExtra("dbm", dBm);
        mContext.sendBroadcast(dbmIntent);
    }

    private final void updateDataNetType(int net) {
        switch (net) {
        case TelephonyManager.NETWORK_TYPE_EDGE: