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

Commit 5bde972e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Restrict DataUsageList for guest user" into tm-qpr-dev

parents bee2aa0c 6e79778d
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.UserManager;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.util.EventLog;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
@@ -131,8 +132,14 @@ public class DataUsageList extends DataUsageBaseFragment
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Activity activity = getActivity();
        if (isGuestUser(getContext())) {
            Log.e(TAG, "This setting isn't available for guest user");
            EventLog.writeEvent(0x534e4554, "262741858", -1 /* UID */, "Guest user");
            finish();
            return;
        }

        final Activity activity = getActivity();
        if (!isBandwidthControlEnabled()) {
            Log.w(TAG, "No bandwidth control; leaving");
            activity.finish();
@@ -234,9 +241,10 @@ public class DataUsageList extends DataUsageBaseFragment

    @Override
    public void onDestroy() {
        if (mUidDetailProvider != null) {
            mUidDetailProvider.clearCache();
            mUidDetailProvider = null;

        }
        super.onDestroy();
    }

@@ -614,4 +622,11 @@ public class DataUsageList extends DataUsageBaseFragment
            }
        }
    };

    private static boolean isGuestUser(Context context) {
        if (context == null) return false;
        final UserManager userManager = context.getSystemService(UserManager.class);
        if (userManager == null) return false;
        return userManager.isGuestUser();
    }
}
+43 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -31,6 +32,7 @@ import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkTemplate;
import android.os.Bundle;
import android.os.UserManager;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
@@ -60,6 +62,9 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.util.ReflectionHelpers;

import java.util.ArrayList;
@@ -74,6 +79,8 @@ public class DataUsageListTest {
    private TemplatePreference.NetworkServices mNetworkServices;
    @Mock
    private LoaderManager mLoaderManager;
    @Mock
    private UserManager mUserManager;

    private Activity mActivity;
    private DataUsageList mDataUsageList;
@@ -90,6 +97,8 @@ public class DataUsageListTest {
        mDataUsageList.mDataStateListener = mMobileDataEnabledListener;

        doReturn(mActivity).when(mDataUsageList).getContext();
        doReturn(mUserManager).when(mActivity).getSystemService(UserManager.class);
        doReturn(false).when(mUserManager).isGuestUser();
        ReflectionHelpers.setField(mDataUsageList, "mDataStateListener",
                mMobileDataEnabledListener);
        ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices);
@@ -97,6 +106,27 @@ public class DataUsageListTest {
        mDataUsageList.mLoadingViewController = mock(LoadingViewController.class);
    }

    @Test
    @Config(shadows = ShadowDataUsageBaseFragment.class)
    public void onCreate_isNotGuestUser_shouldNotFinish() {
        doReturn(false).when(mUserManager).isGuestUser();
        doNothing().when(mDataUsageList).processArgument();

        mDataUsageList.onCreate(null);

        verify(mDataUsageList, never()).finish();
    }

    @Test
    @Config(shadows = ShadowDataUsageBaseFragment.class)
    public void onCreate_isGuestUser_shouldFinish() {
        doReturn(true).when(mUserManager).isGuestUser();

        mDataUsageList.onCreate(null);

        verify(mDataUsageList).finish();
    }

    @Test
    public void resume_shouldListenDataStateChange() {
        ReflectionHelpers.setField(
@@ -241,4 +271,17 @@ public class DataUsageListTest {
        final Spinner spinner = header.findViewById(R.id.filter_spinner);
        return spinner;
    }

    @Implements(DataUsageBaseFragment.class)
    public static class ShadowDataUsageBaseFragment {
        @Implementation
        public void onCreate(Bundle icicle) {
            // do nothing
        }

        @Implementation
        protected boolean isBandwidthControlEnabled() {
            return true;
        }
    }
}