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

Commit 69614c66 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Refactored no data due to roaming notification"

parents 39eda215 b8fa5c70
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ import com.android.ims.ImsCall;
import com.android.ims.ImsConfig;
import com.android.ims.ImsManager;
import com.android.internal.R;
import com.android.internal.telephony.dataconnection.DataConnectionReasons;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
import com.android.internal.telephony.test.SimulatedRadioControl;
@@ -2733,11 +2734,24 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {

    /**
     * Report on whether data connectivity is allowed.
     *
     * @return True if data is allowed to be established.
     */
    public boolean isDataAllowed() {
        return ((mDcTracker != null) && (mDcTracker.isDataAllowed(null)));
    }

    /**
     * Report on whether data connectivity is allowed.
     *
     * @param reasons The reasons that data can/can't be established. This is an output param.
     * @return True if data is allowed to be established
     */
    public boolean isDataAllowed(DataConnectionReasons reasons) {
        return ((mDcTracker != null) && (mDcTracker.isDataAllowed(reasons)));
    }


    /**
     * Action set from carrier signalling broadcast receivers to enable/disable metered apns.
     */
+78 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony;

import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.telephony.Rlog;

import java.util.HashMap;
import java.util.Map;

/**
 * The class to describe settings observer
 */
public class SettingsObserver extends ContentObserver {
    private final Map<Uri, Integer> mUriEventMap;
    private final Context mContext;
    private final Handler mHandler;
    private static final String TAG = "SettingsObserver";

    public SettingsObserver(Context context, Handler handler) {
        super(null);
        mUriEventMap = new HashMap<>();
        mContext = context;
        mHandler = handler;
    }

    /**
     * Start observing a content.
     * @param uri Content URI
     * @param what The event to fire if the content changes
     */
    public void observe(Uri uri, int what) {
        mUriEventMap.put(uri, what);
        final ContentResolver resolver = mContext.getContentResolver();
        resolver.registerContentObserver(uri, false, this);
    }

    /**
     * Stop observing a content.
     */
    public void unobserve() {
        final ContentResolver resolver = mContext.getContentResolver();
        resolver.unregisterContentObserver(this);
    }

    @Override
    public void onChange(boolean selfChange) {
        Rlog.e(TAG, "Should never be reached.");
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {
        final Integer what = mUriEventMap.get(uri);
        if (what != null) {
            mHandler.obtainMessage(what.intValue()).sendToTarget();
        } else {
            Rlog.e(TAG, "No matching event to send for URI=" + uri);
        }
    }
}
+11 −1
Original line number Diff line number Diff line
@@ -74,6 +74,16 @@ public class DataConnectionReasons {
        return mDataDisallowedReasonSet.contains(reason);
    }

    /**
     * Check if only one disallowed reason prevent data connection.
     *
     * @param reason The given reason to check
     * @return True if the given reason is the only one that prevents data connection
     */
    public boolean containsOnly(DataDisallowedReasonType reason) {
        return mDataDisallowedReasonSet.size() == 1 && contains(reason);
    }

    boolean contains(DataAllowedReasonType reason) {
        return reason == mDataAllowedReason;
    }
@@ -88,7 +98,7 @@ public class DataConnectionReasons {
    }

    // Disallowed reasons. There could be multiple reasons if data connection is not allowed.
    enum DataDisallowedReasonType {
    public enum DataDisallowedReasonType {
        // Soft failure reasons. Normally the reasons from users or policy settings.
        DATA_DISABLED(false),                   // Data is disabled by the user or policy.
        ROAMING_DISABLED(false),                // Data roaming is disabled by the user.
+1 −40
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.SettingsObserver;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.dataconnection.DataConnectionReasons.DataAllowedReasonType;
import com.android.internal.telephony.dataconnection.DataConnectionReasons.DataDisallowedReasonType;
@@ -321,46 +322,6 @@ public class DcTracker extends Handler {
                }
            };

    private static class SettingsObserver extends ContentObserver {
        final private HashMap<Uri, Integer> mUriEventMap;
        final private Context mContext;
        final private Handler mHandler;
        final private static String TAG = "DcTracker.SettingsObserver";

        SettingsObserver(Context context, Handler handler) {
            super(null);
            mUriEventMap = new HashMap<Uri, Integer>();
            mContext = context;
            mHandler = handler;
        }

        void observe(Uri uri, int what) {
            mUriEventMap.put(uri, what);
            final ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(uri, false, this);
        }

        void unobserve() {
            final ContentResolver resolver = mContext.getContentResolver();
            resolver.unregisterContentObserver(this);
        }

        @Override
        public void onChange(boolean selfChange) {
            Rlog.e(TAG, "Should never be reached.");
        }

        @Override
        public void onChange(boolean selfChange, Uri uri) {
            final Integer what = mUriEventMap.get(uri);
            if (what != null) {
                mHandler.obtainMessage(what.intValue()).sendToTarget();
            } else {
                Rlog.e(TAG, "No matching event to send for URI=" + uri);
            }
        }
    }

    private final SettingsObserver mSettingsObserver;

    private void registerSettingsObserver() {