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

Commit 87c3c0d5 authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

Merge "Moved provisioning notification to Telephony" am: 064c0fd7

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1634523

Change-Id: Id819b7b35d128ef275eb49e99e43b4f338fe775e
parents 42b18ce6 064c0fd7
Loading
Loading
Loading
Loading
+60 −5
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
@@ -62,6 +64,7 @@ import android.os.PersistableBundle;
import android.os.RegistrantList;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
@@ -99,6 +102,7 @@ import android.util.Pair;
import android.util.SparseArray;
import android.view.WindowManager;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.EventLogTags;
@@ -118,6 +122,7 @@ import com.android.internal.telephony.dataconnection.DataEnabledSettings.DataEna
import com.android.internal.telephony.metrics.DataStallRecoveryStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.telephony.util.NotificationChannelController;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.AsyncChannel;
import com.android.telephony.Rlog;
@@ -149,6 +154,7 @@ public class DcTracker extends Handler {
    private static final boolean VDBG = false; // STOPSHIP if true
    private static final boolean VDBG_STALL = false; // STOPSHIP if true
    private static final boolean RADIO_TESTS = false;
    private static final String NOTIFICATION_TAG = DcTracker.class.getSimpleName();

    @IntDef(value = {
            REQUEST_TYPE_NORMAL,
@@ -2981,10 +2987,13 @@ public class DcTracker extends Handler {
                    mPhone.getContext().unregisterReceiver(mProvisionBroadcastReceiver);
                    mProvisionBroadcastReceiver = null;
                }

                if ((!isProvApn) || mIsProvisioning) {
                    // Hide any provisioning notification.
                    cm.setProvisioningNotificationVisible(false, ConnectivityManager.TYPE_MOBILE,
                            INTENT_PROVISION + ":" + mPhone.getPhoneId());
                    if (mIsProvisioning) {
                        // Hide any notification that was showing previously
                        hideProvisioningNotification();
                    }

                    // Complete the connection normally notifying the world we're connected.
                    // We do this if this isn't a special provisioning apn or if we've been
                    // told its time to provision.
@@ -3008,9 +3017,10 @@ public class DcTracker extends Handler {
                            mTelephonyManager.getNetworkOperatorName());
                    mPhone.getContext().registerReceiver(mProvisionBroadcastReceiver,
                            new IntentFilter(INTENT_PROVISION));

                    // Put up user notification that sign-in is required.
                    cm.setProvisioningNotificationVisible(true, ConnectivityManager.TYPE_MOBILE,
                            INTENT_PROVISION + ":" + mPhone.getPhoneId());
                    showProvisioningNotification();

                    // Turn off radio to save battery and avoid wasting carrier resources.
                    // The network isn't usable and network validation will just fail anyhow.
                    setRadio(false);
@@ -5392,4 +5402,49 @@ public class DcTracker extends Handler {
    public @NonNull DataThrottler getDataThrottler() {
        return mDataThrottler;
    }

    private void showProvisioningNotification() {
        final Intent intent = new Intent(DcTracker.INTENT_PROVISION);
        intent.putExtra(DcTracker.EXTRA_PROVISION_PHONE_ID, mPhone.getPhoneId());
        final PendingIntent pendingIntent = PendingIntent.getBroadcast(
                mPhone.getContext(), 0 /* requestCode */, intent, PendingIntent.FLAG_IMMUTABLE);

        final Resources r = mPhone.getContext().getResources();
        final String title = r.getString(R.string.network_available_sign_in, 0);
        final String details = mTelephonyManager.getNetworkOperator(mPhone.getSubId());
        final Notification.Builder builder = new Notification.Builder(mPhone.getContext())
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.stat_notify_rssi_in_range)
                .setChannelId(NotificationChannelController.CHANNEL_ID_MOBILE_DATA_STATUS)
                .setAutoCancel(true)
                .setTicker(title)
                .setColor(mPhone.getContext().getColor(
                        com.android.internal.R.color.system_notification_accent_color))
                .setContentTitle(title)
                .setContentText(details)
                .setContentIntent(pendingIntent)
                .setLocalOnly(true)
                .setOnlyAlertOnce(true);

        final Notification notification = builder.build();
        try {
            getNotificationManager().notify(NOTIFICATION_TAG, mPhone.getPhoneId(), notification);
        } catch (final NullPointerException npe) {
            Log.e(mLogTag, "showProvisioningNotification: error showing notification", npe);
        }
    }

    private void hideProvisioningNotification() {
        try {
            getNotificationManager().cancel(NOTIFICATION_TAG, mPhone.getPhoneId());
        } catch (final NullPointerException npe) {
            Log.e(mLogTag, "hideProvisioningNotification: error hiding notification", npe);
        }
    }

    private NotificationManager getNotificationManager() {
        return (NotificationManager) mPhone.getContext()
                .createContextAsUser(UserHandle.ALL, 0 /* flags */)
                .getSystemService(Context.NOTIFICATION_SERVICE);
    }
}