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

Commit 29022867 authored by Mark Chien's avatar Mark Chien Committed by Automerger Merge Worker
Browse files

Merge "Fix TetheringServiceTest test WRITE_SETTINGS permission failure" am:...

Merge "Fix TetheringServiceTest test WRITE_SETTINGS permission failure" am: 7e8b14ab am: a79c963f am: c610143d

Change-Id: I7485ea109e0b8b4af4f21074b4a9d633c8a6596a
parents 192074f3 c610143d
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -264,10 +264,11 @@ public class TetheringService extends Service {
            if (onlyAllowPrivileged || mTethering.isTetherProvisioningRequired()) return false;

            int uid = Binder.getCallingUid();

            // If callerPkg's uid is not same as Binder.getCallingUid(),
            // checkAndNoteWriteSettingsOperation will return false and the operation will be
            // denied.
            return TetheringService.checkAndNoteWriteSettingsOperation(mService, uid, callerPkg,
            return mService.checkAndNoteWriteSettingsOperation(mService, uid, callerPkg,
                    callingAttributionTag, false /* throwException */);
        }

@@ -285,8 +286,8 @@ public class TetheringService extends Service {
     *
     * @return {@code true} iff the package is allowed to write settings.
     */
    // TODO: Remove method and replace with direct call once R code is pushed to AOSP
    private static boolean checkAndNoteWriteSettingsOperation(@NonNull Context context, int uid,
    @VisibleForTesting
    boolean checkAndNoteWriteSettingsOperation(@NonNull Context context, int uid,
            @NonNull String callingPackage, @Nullable String callingAttributionTag,
            boolean throwException) {
        return Settings.checkAndNoteWriteSettingsOperation(context, uid, callingPackage,
+16 −0
Original line number Diff line number Diff line
@@ -15,13 +15,20 @@
 */
package com.android.networkstack.tethering;

import static android.Manifest.permission.WRITE_SETTINGS;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;

import static org.mockito.Mockito.mock;

import android.content.Context;
import android.content.Intent;
import android.net.ITetheringConnector;
import android.os.Binder;
import android.os.IBinder;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class MockTetheringService extends TetheringService {
    private final Tethering mTethering = mock(Tethering.class);

@@ -35,6 +42,15 @@ public class MockTetheringService extends TetheringService {
        return mTethering;
    }

    @Override
    boolean checkAndNoteWriteSettingsOperation(@NonNull Context context, int uid,
            @NonNull String callingPackage, @Nullable String callingAttributionTag,
            boolean throwException) {
        // Test this does not verify the calling package / UID, as calling package could be shell
        // and not match the UID.
        return context.checkCallingOrSelfPermission(WRITE_SETTINGS) == PERMISSION_GRANTED;
    }

    public Tethering getTethering() {
        return mTethering;
    }