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

Commit f8d5aca7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix TetherSettings crash issue" into udc-dev am: f65da39f am: 9f831a60 am: 60de9941

parents b4758db2 60de9941
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -145,19 +145,13 @@ public class TetherSettings extends RestrictedSettingsFragment
        super(UserManager.DISALLOW_CONFIG_TETHERING);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        TetheringManagerModel model = new ViewModelProvider(this).get(TetheringManagerModel.class);
        mWifiTetherPreferenceController =
                new WifiTetherPreferenceController(context, getSettingsLifecycle(), model);
        mTm = model.getTetheringManager();
        model.getTetheredInterfaces().observe(this, this::onTetheredInterfacesChanged);
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setIfOnlyAvailableForAdmins(true);
        if (isUiRestricted()) {
            return;
        }

        addPreferencesFromResource(R.xml.tether_prefs);
        mContext = getContext();
@@ -165,13 +159,8 @@ public class TetherSettings extends RestrictedSettingsFragment
        mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled();
        mDataSaverFooter = findPreference(KEY_DATA_SAVER_FOOTER);

        setIfOnlyAvailableForAdmins(true);
        if (isUiRestricted()) {
            getPreferenceScreen().removeAll();
            return;
        }

        setupTetherPreference();
        setupViewModel();

        final Activity activity = getActivity();
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
@@ -223,8 +212,22 @@ public class TetherSettings extends RestrictedSettingsFragment
        onDataSaverChanged(mDataSaverBackend.isDataSaverEnabled());
    }

    @VisibleForTesting
    void setupViewModel() {
        TetheringManagerModel model = new ViewModelProvider(this).get(TetheringManagerModel.class);
        mWifiTetherPreferenceController =
                new WifiTetherPreferenceController(getContext(), getSettingsLifecycle(), model);
        mTm = model.getTetheringManager();
        model.getTetheredInterfaces().observe(this, this::onTetheredInterfacesChanged);
    }

    @Override
    public void onDestroy() {
        if (isUiRestricted()) {
            super.onDestroy();
            return;
        }

        mDataSaverBackend.remListener(this);

        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+32 −2
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.TetheringManager;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.FeatureFlagUtils;
@@ -54,6 +55,7 @@ import androidx.preference.Preference;
import androidx.preference.SwitchPreference;

import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.core.FeatureFlags;
import com.android.settings.wifi.tether.WifiTetherPreferenceController;
import com.android.settingslib.RestrictedSwitchPreference;
@@ -66,6 +68,9 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;

import java.util.ArrayList;
import java.util.List;
@@ -92,7 +97,7 @@ public class TetherSettingsTest {
    @Mock
    private Preference mDataSaverFooter;

    TetherSettings mTetherSettings;
    private MockTetherSettings mTetherSettings;

    @Before
    public void setUp() throws Exception {
@@ -114,7 +119,7 @@ public class TetherSettingsTest {
        when(mTetheringManager.getTetherableUsbRegexs()).thenReturn(new String[0]);
        when(mTetheringManager.getTetherableBluetoothRegexs()).thenReturn(new String[0]);

        mTetherSettings = spy(new TetherSettings());
        mTetherSettings = spy(new MockTetherSettings());
        mTetherSettings.mContext = mContext;
        mTetherSettings.mWifiTetherPreferenceController = mWifiTetherPreferenceController;
        mTetherSettings.mUsbTether = mUsbTether;
@@ -123,6 +128,16 @@ public class TetherSettingsTest {
        mTetherSettings.mDataSaverFooter = mDataSaverFooter;
    }

    @Test
    @Config(shadows = ShadowRestrictedSettingsFragment.class)
    public void onCreate_isUiRestricted_doNotSetupViewModel() {
        when(mTetherSettings.isUiRestricted()).thenReturn(true);

        mTetherSettings.onCreate(null);

        verify(mTetherSettings, never()).setupViewModel();
    }

    @Test
    public void testTetherNonIndexableKeys_tetherAvailable_keysNotReturned() {
        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.TETHER_ALL_IN_ONE, false);
@@ -431,4 +446,19 @@ public class TetherSettingsTest {
        mTetherSettings.registerReceiver();
        updateOnlyBluetoothState(mTetherSettings);
    }

    private static class MockTetherSettings extends TetherSettings {
        @Override
        public boolean isUiRestricted() {
            return false;
        }
    }

    @Implements(RestrictedSettingsFragment.class)
    public static final class ShadowRestrictedSettingsFragment {
        @Implementation
        public void onCreate(Bundle icicle) {
            // do nothing
        }
    }
}