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

Commit 249f7900 authored by Alex Kershaw's avatar Alex Kershaw Committed by Android (Google) Code Review
Browse files

Merge "Fix NPE in UpdateInstaller."

parents a8b23abc 30eceeca
Loading
Loading
Loading
Loading
+31 −3
Original line number Diff line number Diff line
@@ -492,7 +492,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    final UsageStatsManagerInternal mUsageStatsManagerInternal;
    final TelephonyManager mTelephonyManager;
    private final LockPatternUtils mLockPatternUtils;
    private final DevicePolicyConstants mConstants;
    private final DeviceAdminServiceController mDeviceAdminServiceController;
    private final OverlayPackagesProvider mOverlayPackagesProvider;
@@ -539,6 +538,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    private final AtomicBoolean mRemoteBugreportSharingAccepted = new AtomicBoolean();
    private final SetupContentObserver mSetupContentObserver;
    private final DevicePolicyConstantsObserver mConstantsObserver;
    private DevicePolicyConstants mConstants;
    private static boolean ENABLE_LOCK_GUARD = Build.IS_ENG
            || true // STOPSHIP Remove it.
@@ -2169,8 +2171,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        mInjector = injector;
        mContext = Preconditions.checkNotNull(injector.mContext);
        mHandler = new Handler(Preconditions.checkNotNull(injector.getMyLooper()));
        mConstants = DevicePolicyConstants.loadFromString(
                mInjector.settingsGlobalGetString(Global.DEVICE_POLICY_CONSTANTS));
        mConstantsObserver = new DevicePolicyConstantsObserver(mHandler);
        mConstantsObserver.register();
        mConstants = loadConstants();
        mOwners = Preconditions.checkNotNull(injector.newOwners());
@@ -10954,6 +10958,25 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        }
    }
    private class DevicePolicyConstantsObserver extends ContentObserver {
        final Uri mConstantsUri =
                Settings.Global.getUriFor(Settings.Global.DEVICE_POLICY_CONSTANTS);
        DevicePolicyConstantsObserver(Handler handler) {
            super(handler);
        }
        void register() {
            mInjector.registerContentObserver(
                    mConstantsUri, /* notifyForDescendents= */ false, this, UserHandle.USER_ALL);
        }
        @Override
        public void onChange(boolean selfChange, Uri uri, int userId) {
            mConstants = loadConstants();
        }
    }
    @VisibleForTesting
    final class LocalService extends DevicePolicyManagerInternal {
        private List<OnCrossProfileWidgetProvidersChangeListener> mWidgetProviderListeners;
@@ -14167,4 +14190,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            return false;
        }
    }
    private DevicePolicyConstants loadConstants() {
        return DevicePolicyConstants.loadFromString(
                mInjector.settingsGlobalGetString(Global.DEVICE_POLICY_CONSTANTS));
    }
}
+23 −14
Original line number Diff line number Diff line
@@ -16,10 +16,13 @@

package com.android.server.devicepolicy;

import android.annotation.Nullable;
import android.app.admin.DevicePolicyEventLogger;
import android.app.admin.DevicePolicyManager;
import android.app.admin.StartInstallingUpdateCallback;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Environment;
import android.os.FileUtils;
@@ -41,7 +44,8 @@ abstract class UpdateInstaller {
    private ParcelFileDescriptor mUpdateFileDescriptor;
    private DevicePolicyConstants mConstants;
    protected Context mContext;
    protected File mCopiedUpdateFile;

    @Nullable protected File mCopiedUpdateFile;

    static final String TAG = "UpdateInstaller";
    private DevicePolicyManagerService.Injector mInjector;
@@ -59,7 +63,8 @@ abstract class UpdateInstaller {
    public abstract void installUpdateInThread();

    public void startInstallUpdate() {
        if (!checkIfBatteryIsSufficient()) {
        mCopiedUpdateFile = null;
        if (!isBatteryLevelSufficient()) {
            notifyCallbackOnError(
                    DevicePolicyManager.InstallUpdateCallback.UPDATE_ERROR_BATTERY_LOW,
                    "The battery level must be above "
@@ -81,17 +86,21 @@ abstract class UpdateInstaller {
        thread.start();
    }

    private boolean checkIfBatteryIsSufficient() {
        BatteryManager batteryManager =
                (BatteryManager) mContext.getSystemService(Context.BATTERY_SERVICE);
        if (batteryManager != null) {
            int chargePercentage = batteryManager
                    .getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
            return batteryManager.isCharging()
                    ? chargePercentage >= mConstants.BATTERY_THRESHOLD_CHARGING
                    : chargePercentage >= mConstants.BATTERY_THRESHOLD_NOT_CHARGING;
    private boolean isBatteryLevelSufficient() {
        Intent batteryStatus = mContext.registerReceiver(
                /* receiver= */ null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        float batteryPercentage = calculateBatteryPercentage(batteryStatus);
        boolean isBatteryPluggedIn =
                batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, /* defaultValue= */ -1) > 0;
        return isBatteryPluggedIn
                ? batteryPercentage >= mConstants.BATTERY_THRESHOLD_CHARGING
                : batteryPercentage >= mConstants.BATTERY_THRESHOLD_NOT_CHARGING;
    }
        return false;

    private float calculateBatteryPercentage(Intent batteryStatus) {
        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, /* defaultValue= */ -1);
        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, /* defaultValue= */ -1);
        return 100 * level / (float) scale;
    }

    private File copyUpdateFileToDataOtaPackageDir() {
@@ -127,7 +136,7 @@ abstract class UpdateInstaller {
    }

    void cleanupUpdateFile() {
        if (mCopiedUpdateFile.exists()) {
        if (mCopiedUpdateFile != null && mCopiedUpdateFile.exists()) {
            mCopiedUpdateFile.delete();
        }
    }