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

Commit 2188a004 authored by Hall Liu's avatar Hall Liu Committed by Gerrit Code Review
Browse files

Merge "Show the disclaimer for WFC emergency call limitation"

parents 6bb737c5 459180e7
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -10105,4 +10105,10 @@
    <!-- Warn the user that the phone may share its location with the service provider. [CHAR LIMIT=NONE] -->
    <string name="wfc_disclaimer_location_desc_text">Your service provider may collect your location in order to provide this service.\n\nPlease review your service provider\u2019s privacy policy.</string>
    <!-- Label for the title on wfc disclaimer location. [CHAR LIMIT=30] -->
    <string name="wfc_disclaimer_emergency_limitation_title_text">Emergency calls</string>
    <!-- Warn the user that the phone have emergency call limitation. [CHAR LIMIT=NONE] -->
    <string name="wfc_disclaimer_emergency_limitation_desc_text">Emergency calls over Wi\u2011Fi Calling are not supported by your carrier.\nThe device switches automatically to a cellular network to place an emergency call.\nEmergency calls are only possible in areas with cellular coverage.</string>
</resources>
+1 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ public final class DisclaimerItemFactory {
    private static List<DisclaimerItem> getDisclaimerItemList(Context context, int subId) {
        List<DisclaimerItem> itemList = new ArrayList<DisclaimerItem>();
        itemList.add(new LocationPolicyDisclaimer(context, subId));
        itemList.add(new EmergencyCallLimitationDisclaimer(context, subId));

        return itemList;
    }
+86 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.settings.wifi.calling;

import android.content.Context;
import android.telephony.CarrierConfigManager;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;

/**
 * Disclaimer item class for displaying emergency call limitation UI on
 * {@link WifiCallingDisclaimerFragment}.
 */
public class EmergencyCallLimitationDisclaimer extends DisclaimerItem {
    private static final String DISCLAIMER_ITEM_NAME = "EmergencyCallLimitationDisclaimer";
    @VisibleForTesting
    static final String KEY_HAS_AGREED_EMERGENCY_LIMITATION_DISCLAIMER =
            "key_has_agreed_emergency_limitation_disclaimer";
    private static final int UNINITIALIZED_DELAY_VALUE = -1;

    public EmergencyCallLimitationDisclaimer(Context context, int subId) {
        super(context, subId);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    boolean shouldShow() {
        final int notificationDelay = getCarrierConfig().getInt(
                CarrierConfigManager.KEY_EMERGENCY_NOTIFICATION_DELAY_INT);
        if (notificationDelay == UNINITIALIZED_DELAY_VALUE) {
            logd("shouldShow: false due to carrier config is default(-1).");
            return false;
        }

        return super.shouldShow();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected String getName() {
        return DISCLAIMER_ITEM_NAME;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected int getTitleId() {
        return R.string.wfc_disclaimer_emergency_limitation_title_text;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected int getMessageId() {
        return R.string.wfc_disclaimer_emergency_limitation_desc_text;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected String getPrefKey() {
        return KEY_HAS_AGREED_EMERGENCY_LIMITATION_DISCLAIMER;
    }
}
+118 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.settings.wifi.calling;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;

import com.android.settings.R;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

@RunWith(RobolectricTestRunner.class)
public class EmergencyCallLimitationDisclaimerTest {
    private static final String TEST_SHARED_PREFERENCE = "test_wfc_disclaimer_prefs";
    private static final int TEST_SUB_ID = 0;

    @Mock
    private CarrierConfigManager mCarrierConfigManager;

    private final PersistableBundle mBundle = new PersistableBundle();
    private Context mContext;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);

        doReturn(mCarrierConfigManager).when(mContext).getSystemService(
                Context.CARRIER_CONFIG_SERVICE);
        when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mBundle);

        doReturn(getSharedPreferences()).when(mContext).getSharedPreferences(anyString(), anyInt());
    }

    @Test
    public void sholdShow_delay1000msec_shouldShowEmergencyCallLimitationDisclaimer() {
        EmergencyCallLimitationDisclaimer disclaimerItem =
                spy(new EmergencyCallLimitationDisclaimer(mContext, TEST_SUB_ID));
        mBundle.putInt(CarrierConfigManager.KEY_EMERGENCY_NOTIFICATION_DELAY_INT, 1000);
        getSharedPreferences().edit().putBoolean(
                EmergencyCallLimitationDisclaimer.KEY_HAS_AGREED_EMERGENCY_LIMITATION_DISCLAIMER
                + TEST_SUB_ID, false).commit();

        // Check the WFC disclaimer item is should be shown.
        assertThat(disclaimerItem.shouldShow()).isTrue();
    }

    @Test
    public void sholdShow_delayDefault_shouldNotShowEmergencyCallLimitationDisclaimer() {
        EmergencyCallLimitationDisclaimer disclaimerItem = new EmergencyCallLimitationDisclaimer(
                mContext, TEST_SUB_ID);
        mBundle.putInt(CarrierConfigManager.KEY_EMERGENCY_NOTIFICATION_DELAY_INT, -1);

        // Check the WFC disclaimer item is should not be shown due to the
        // KEY_EMERGENCY_NOTIFICATION_DELAY_INT on carrier config is default(-1).
        assertThat(disclaimerItem.shouldShow()).isFalse();
    }

    @Test
    public void sholdShow_alreadyAgreed_shouldNotShowEmergencyCallLimitationDisclaimer() {
        EmergencyCallLimitationDisclaimer disclaimerItem =
                spy(new EmergencyCallLimitationDisclaimer(mContext, TEST_SUB_ID));
        mBundle.putInt(CarrierConfigManager.KEY_EMERGENCY_NOTIFICATION_DELAY_INT, 10);
        getSharedPreferences().edit().putBoolean(
                EmergencyCallLimitationDisclaimer.KEY_HAS_AGREED_EMERGENCY_LIMITATION_DISCLAIMER
                + TEST_SUB_ID, true).commit();

        // Check the WFC disclaimer item is should not be shown due to an item is already agreed.
        assertThat(disclaimerItem.shouldShow()).isFalse();
    }

    @Test
    public void onAgreed_shouldSetSharedPreferencesToAgreed() {
        EmergencyCallLimitationDisclaimer disclaimerItem =
                spy(new EmergencyCallLimitationDisclaimer(mContext, TEST_SUB_ID));

        disclaimerItem.onAgreed();

        // Check the SharedPreferences key is changed to agreed.
        assertThat(getSharedPreferences().getBoolean(
                EmergencyCallLimitationDisclaimer.KEY_HAS_AGREED_EMERGENCY_LIMITATION_DISCLAIMER
                + TEST_SUB_ID, false)).isTrue();
    }

    private SharedPreferences getSharedPreferences() {
        return mContext.getSharedPreferences(TEST_SHARED_PREFERENCE, Context.MODE_PRIVATE);
    }
}