+++ /dev/null
-/*
- * Copyright (C) 2010 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 android.hardware.usb;
-
-import android.annotation.SystemService;
-import android.content.Context;
-import android.hardware.usb.gadget.V1_0.GadgetFunction;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.StringJoiner;
-
-/**
- * Definitions that were added to UsbManager in P.
- *
- * Copied partially from frameworks/base/core/java/android/hardware/usb/UsbManager to
- * fix issues with roboelectric during test.
- */
-@SystemService(Context.USB_SERVICE)
-public class UsbManagerExtras {
- public static final long NONE = 0;
- public static final long MTP = GadgetFunction.MTP;
- public static final long PTP = GadgetFunction.PTP;
- public static final long RNDIS = GadgetFunction.RNDIS;
- public static final long MIDI = GadgetFunction.MIDI;
- public static final long ACCESSORY = GadgetFunction.ACCESSORY;
- public static final long AUDIO_SOURCE = GadgetFunction.AUDIO_SOURCE;
- public static final long ADB = GadgetFunction.ADB;
-
- private static final long SETTABLE_FUNCTIONS = MTP | PTP | RNDIS | MIDI;
-
- private static final Map<String, Long> STR_MAP = new HashMap<>();
-
- static {
- STR_MAP.put(UsbManager.USB_FUNCTION_MTP, MTP);
- STR_MAP.put(UsbManager.USB_FUNCTION_PTP, PTP);
- STR_MAP.put(UsbManager.USB_FUNCTION_RNDIS, RNDIS);
- STR_MAP.put(UsbManager.USB_FUNCTION_MIDI, MIDI);
- STR_MAP.put(UsbManager.USB_FUNCTION_ACCESSORY, ACCESSORY);
- STR_MAP.put(UsbManager.USB_FUNCTION_AUDIO_SOURCE, AUDIO_SOURCE);
- STR_MAP.put(UsbManager.USB_FUNCTION_ADB, ADB);
- }
-
- /**
- * Returns whether the given functions are valid inputs to UsbManager.
- * Currently the empty functions or any of MTP, PTP, RNDIS, MIDI are accepted.
- */
- public static boolean isSettableFunctions(long functions) {
- return (~SETTABLE_FUNCTIONS & functions) == 0;
- }
-
- /**
- * Returns the string representation of the given functions.
- */
- public static String usbFunctionsToString(long functions) {
- StringJoiner joiner = new StringJoiner(",");
- if ((functions | MTP) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_MTP);
- }
- if ((functions | PTP) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_PTP);
- }
- if ((functions | RNDIS) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_RNDIS);
- }
- if ((functions | MIDI) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_MIDI);
- }
- if ((functions | ACCESSORY) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_ACCESSORY);
- }
- if ((functions | AUDIO_SOURCE) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_AUDIO_SOURCE);
- }
- if ((functions | ADB) != 0) {
- joiner.add(UsbManager.USB_FUNCTION_ADB);
- }
- return joiner.toString();
- }
-
- /**
- * Parses a string of usb functions and returns a mask of the same functions.
- */
- public static long usbFunctionsFromString(String functions) {
- if (functions == null) {
- return 0;
- }
- long ret = 0;
- for (String function : functions.split(",")) {
- if (STR_MAP.containsKey(function)) {
- ret |= STR_MAP.get(function);
- }
- }
- return ret;
- }
-}
+++ /dev/null
-/*
- * 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 android.os;
-
-/**
- * Duplicate class for platform SystemUpdateManager to get around Robolectric sdk problem.
- */
-public class SystemUpdateManager {
-
- public static final String KEY_STATUS = "status";
- public static final String KEY_TITLE = "title";
-
- public static final int STATUS_UNKNOWN = 0;
- public static final int STATUS_IDLE = 1;
- public static final int STATUS_WAITING_DOWNLOAD = 2;
- public static final int STATUS_IN_PROGRESS = 3;
- public static final int STATUS_WAITING_INSTALL = 4;
- public static final int STATUS_WAITING_REBOOT = 5;
-
- public Bundle retrieveSystemUpdateInfo() {
- return null;
- }
-}
+++ /dev/null
-/*
- * 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 android.service.notification;
-
-import android.annotation.NonNull;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Objects;
-
-/**
- * Stub implementation of framework's NotifyingApp for Robolectric tests. Otherwise Robolectric
- * throws ClassNotFoundError.
- *
- * TODO: Remove this class when Robolectric supports P
- */
-public final class NotifyingApp implements Comparable<NotifyingApp> {
-
- private int mUid;
- private String mPkg;
- private long mLastNotified;
-
- public NotifyingApp() {}
-
- public int getUid() {
- return mUid;
- }
-
- /**
- * Sets the uid of the package that sent the notification. Returns self.
- */
- public NotifyingApp setUid(int mUid) {
- this.mUid = mUid;
- return this;
- }
-
- public String getPackage() {
- return mPkg;
- }
-
- /**
- * Sets the package that sent the notification. Returns self.
- */
- public NotifyingApp setPackage(@NonNull String mPkg) {
- this.mPkg = mPkg;
- return this;
- }
-
- public long getLastNotified() {
- return mLastNotified;
- }
-
- /**
- * Sets the time the notification was originally sent. Returns self.
- */
- public NotifyingApp setLastNotified(long mLastNotified) {
- this.mLastNotified = mLastNotified;
- return this;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- NotifyingApp that = (NotifyingApp) o;
- return getUid() == that.getUid()
- && getLastNotified() == that.getLastNotified()
- && Objects.equals(mPkg, that.mPkg);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(getUid(), mPkg, getLastNotified());
- }
-
- /**
- * Sorts notifying apps from newest last notified date to oldest.
- */
- @Override
- public int compareTo(NotifyingApp o) {
- if (getLastNotified() == o.getLastNotified()) {
- if (getUid() == o.getUid()) {
- return getPackage().compareTo(o.getPackage());
- }
- return Integer.compare(getUid(), o.getUid());
- }
-
- return -Long.compare(getLastNotified(), o.getLastNotified());
- }
-
- @Override
- public String toString() {
- return "NotifyingApp{"
- + "mUid=" + mUid
- + ", mPkg='" + mPkg + '\''
- + ", mLastNotified=" + mLastNotified
- + '}';
- }
-}
+++ /dev/null
-/*
- * Copyright (C) 2017 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 android.service.oemlock;
-
-/**
- * Make OemLockManager available to Robolectric.
- */
-public class OemLockManager {
- public void setOemUnlockAllowedByCarrier(boolean allowed, byte[] signature) {}
-
- public boolean isOemUnlockAllowedByCarrier() {
- return true;
- }
-
- public void setOemUnlockAllowedByUser(boolean allowed) {}
-
- public boolean isOemUnlockAllowedByUser() {
- return false;
- }
-
- public boolean isOemUnlockAllowed() {
- return false;
- }
-
- public boolean isDeviceOemUnlocked() {
- return false;
- }
-}
+++ /dev/null
-/*
- * Copyright (C) 2017 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 android.service.settings.suggestions;
-
-import java.util.List;
-
-public interface ISuggestionService {
- List<Suggestion> getSuggestions();
-}
+++ /dev/null
-/*
- * Copyright (C) 2017 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 android.service.settings.suggestions;
-
-import android.app.PendingIntent;
-import android.graphics.drawable.Icon;
-import android.text.TextUtils;
-
-public class Suggestion {
-
- public static final int FLAG_HAS_BUTTON = 1 << 0;
-
- private final String mId;
- private final CharSequence mTitle;
- private final CharSequence mSummary;
- private final Icon mIcon;
- private final int mFlags;
- private final PendingIntent mPendingIntent;
-
- /**
- * Gets the id for the suggestion object.
- */
- public String getId() {
- return mId;
- }
-
- /**
- * Title of the suggestion that is shown to the user.
- */
- public CharSequence getTitle() {
- return mTitle;
- }
-
- /**
- * Optional summary describing what this suggestion controls.
- */
- public CharSequence getSummary() {
- return mSummary;
- }
-
- /**
- * Optional icon for this suggestion.
- */
- public Icon getIcon() {
- return mIcon;
- }
-
- public int getFlags() {
- return mFlags;
- }
-
- /**
- * The Intent to launch when the suggestion is activated.
- */
- public PendingIntent getPendingIntent() {
- return mPendingIntent;
- }
-
- private Suggestion(Builder builder) {
- mTitle = builder.mTitle;
- mSummary = builder.mSummary;
- mIcon = builder.mIcon;
- mPendingIntent = builder.mPendingIntent;
- mId = builder.mId;
- mFlags = builder.mFlags;
- }
-
- /**
- * Builder class for {@link Suggestion}.
- */
- public static class Builder {
-
- private final String mId;
- private int mFlags;
- private CharSequence mTitle;
- private CharSequence mSummary;
- private Icon mIcon;
- private PendingIntent mPendingIntent;
-
- public Builder(String id) {
- if (TextUtils.isEmpty(id)) {
- throw new IllegalArgumentException("Suggestion id cannot be empty");
- }
- mId = id;
- }
-
- /**
- * Sets suggestion title
- */
-
- public Builder setTitle(CharSequence title) {
- mTitle = title;
- return this;
- }
-
- /**
- * Sets suggestion summary
- */
- public Builder setSummary(CharSequence summary) {
- mSummary = summary;
- return this;
- }
-
- /**
- * Sets icon for the suggestion.
- */
- public Builder setIcon(Icon icon) {
- mIcon = icon;
- return this;
- }
-
- public Builder setFlags(int flags) {
- mFlags = flags;
- return this;
- }
-
- /**
- * Sets suggestion intent
- */
- public Builder setPendingIntent(PendingIntent pendingIntent) {
- mPendingIntent = pendingIntent;
- return this;
- }
-
- /**
- * Builds an immutable {@link Suggestion} object.
- */
- public Suggestion build() {
- return new Suggestion(this /* builder */);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (C) 2017 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 android.util;
-
-import android.content.Context;
-import android.os.SystemProperties;
-import android.provider.Settings;
-import android.text.TextUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This class is only needed to get around Robolectric issue.
- */
-public class FeatureFlagUtils {
- public static final String FFLAG_PREFIX = "sys.fflag.";
- public static final String FFLAG_OVERRIDE_PREFIX = FFLAG_PREFIX + "override.";
-
- /**
- * Whether or not a flag is enabled.
- *
- * @param feature the flag name
- * @return true if the flag is enabled (either by default in system, or override by user)
- */
- public static boolean isEnabled(Context context, String feature) {
- // Override precedence:
- // Settings.Global -> sys.fflag.override.* -> sys.fflag.*
-
- // Step 1: check if feature flag is set in Settings.Global.
- String value;
- if (context != null) {
- value = Settings.Global.getString(context.getContentResolver(), feature);
- if (!TextUtils.isEmpty(value)) {
- return Boolean.parseBoolean(value);
- }
- }
-
- // Step 2: check if feature flag has any override. Flag name: sys.fflag.override.<feature>
- value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature);
- if (!TextUtils.isEmpty(value)) {
- return Boolean.parseBoolean(value);
- }
- // Step 3: check if feature flag has any default value. Flag name: sys.fflag.<feature>
- value = SystemProperties.get(FFLAG_PREFIX + feature);
- return Boolean.parseBoolean(value);
- }
-
- /**
- * Override feature flag to new state.
- */
- public static void setEnabled(Context context, String feature, boolean enabled) {
- SystemProperties.set(FFLAG_OVERRIDE_PREFIX + feature, enabled ? "true" : "false");
- }
-
- public static Map<String, String> getAllFeatureFlags() {
- final Map<String, String> features = new HashMap<>();
- features.put(FFLAG_PREFIX + "abc", "false");
- features.put(FFLAG_OVERRIDE_PREFIX + "abc", "true");
- return features;
- }
-}
+++ /dev/null
-/*
- * Copyright (C) 2017 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 android.util;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageItemInfo;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-
-/**
- * This class is only needed to get around Robolectric issue.
- */
-public class IconDrawableFactory {
-
- public static IconDrawableFactory newInstance(Context context) {
- return new IconDrawableFactory();
- }
-
- public Drawable getBadgedIcon(ApplicationInfo appInfo) {
- return getBadgedIcon(appInfo, 0);
- }
-
- public Drawable getBadgedIcon(ApplicationInfo appInfo, int userId) {
- return getBadgedIcon(appInfo, appInfo, userId);
- }
-
- public Drawable getBadgedIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo, int userId) {
- return new ColorDrawable(0);
- }
-}