diff options
| author | 2023-03-15 21:09:33 +0000 | |
|---|---|---|
| committer | 2023-03-15 21:09:33 +0000 | |
| commit | 56954d1746d0c1ab7d9f077d10a45c3200640e67 (patch) | |
| tree | f2e7462d31a41ac9938e4886e3680c4d747b82e4 | |
| parent | b32ec0e049214ef6ac88aca9cf0ba933784490f3 (diff) | |
| parent | f90e340576a209942f345a4964d47643b6850ae3 (diff) | |
Merge "Add PendingIntent to SharedConnectivitySettingsState" into udc-dev
7 files changed, 98 insertions, 29 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 0352c07f1525..0a893f05e91c 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10134,16 +10134,18 @@ package android.net.wifi.sharedconnectivity.app { public final class SharedConnectivitySettingsState implements android.os.Parcelable { method public int describeContents(); method @NonNull public android.os.Bundle getExtras(); + method @Nullable public android.app.PendingIntent getInstantTetherSettingsPendingIntent(); method public boolean isInstantTetherEnabled(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState> CREATOR; } public static final class SharedConnectivitySettingsState.Builder { - ctor public SharedConnectivitySettingsState.Builder(); + ctor public SharedConnectivitySettingsState.Builder(@NonNull android.content.Context); method @NonNull public android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState build(); method @NonNull public android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState.Builder setExtras(@NonNull android.os.Bundle); method @NonNull public android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState.Builder setInstantTetherEnabled(boolean); + method @NonNull public android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState.Builder setInstantTetherSettingsPendingIntent(@NonNull android.content.Intent); } } diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java index 4809befb8d20..63e471b25ffb 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsState.java @@ -17,7 +17,11 @@ package android.net.wifi.sharedconnectivity.app; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -37,6 +41,7 @@ import java.util.Objects; public final class SharedConnectivitySettingsState implements Parcelable { private final boolean mInstantTetherEnabled; + private final PendingIntent mInstantTetherSettingsPendingIntent; private final Bundle mExtras; /** @@ -44,9 +49,13 @@ public final class SharedConnectivitySettingsState implements Parcelable { */ public static final class Builder { private boolean mInstantTetherEnabled; + private Intent mInstantTetherSettingsIntent; + private final Context mContext; private Bundle mExtras; - public Builder() {} + public Builder(@NonNull Context context) { + mContext = context; + } /** * Sets the state of Instant Tether in settings @@ -60,6 +69,20 @@ public final class SharedConnectivitySettingsState implements Parcelable { } /** + * Sets the intent that will open the Instant Tether settings page. + * The intent will be stored as a {@link PendingIntent} in the settings object. The pending + * intent will be set as {@link PendingIntent#FLAG_IMMUTABLE} and + * {@link PendingIntent#FLAG_ONE_SHOT}. + * + * @return Returns the Builder object. + */ + @NonNull + public Builder setInstantTetherSettingsPendingIntent(@NonNull Intent intent) { + mInstantTetherSettingsIntent = intent; + return this; + } + + /** * Sets the extras bundle * * @return Returns the Builder object. @@ -77,12 +100,22 @@ public final class SharedConnectivitySettingsState implements Parcelable { */ @NonNull public SharedConnectivitySettingsState build() { - return new SharedConnectivitySettingsState(mInstantTetherEnabled, mExtras); + if (mInstantTetherSettingsIntent != null) { + PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, + mInstantTetherSettingsIntent, + PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_ONE_SHOT); + return new SharedConnectivitySettingsState(mInstantTetherEnabled, + pendingIntent, mExtras); + } + return new SharedConnectivitySettingsState(mInstantTetherEnabled, null, mExtras); } } - private SharedConnectivitySettingsState(boolean instantTetherEnabled, Bundle extras) { + private SharedConnectivitySettingsState(boolean instantTetherEnabled, + PendingIntent pendingIntent, Bundle extras) { + mInstantTetherEnabled = instantTetherEnabled; + mInstantTetherSettingsPendingIntent = pendingIntent; mExtras = extras; } @@ -96,6 +129,16 @@ public final class SharedConnectivitySettingsState implements Parcelable { } /** + * Gets the pending intent to open Instant Tether settings page. + * + * @return Returns the pending intent that opens the settings page, null if none. + */ + @Nullable + public PendingIntent getInstantTetherSettingsPendingIntent() { + return mInstantTetherSettingsPendingIntent; + } + + /** * Gets the extras Bundle. * * @return Returns a Bundle object. @@ -109,12 +152,14 @@ public final class SharedConnectivitySettingsState implements Parcelable { public boolean equals(Object obj) { if (!(obj instanceof SharedConnectivitySettingsState)) return false; SharedConnectivitySettingsState other = (SharedConnectivitySettingsState) obj; - return mInstantTetherEnabled == other.isInstantTetherEnabled(); + return mInstantTetherEnabled == other.isInstantTetherEnabled() + && Objects.equals(mInstantTetherSettingsPendingIntent, + other.getInstantTetherSettingsPendingIntent()); } @Override public int hashCode() { - return Objects.hash(mInstantTetherEnabled); + return Objects.hash(mInstantTetherEnabled, mInstantTetherSettingsPendingIntent); } @Override @@ -124,6 +169,7 @@ public final class SharedConnectivitySettingsState implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { + mInstantTetherSettingsPendingIntent.writeToParcel(dest, 0); dest.writeBoolean(mInstantTetherEnabled); dest.writeBundle(mExtras); } @@ -135,8 +181,10 @@ public final class SharedConnectivitySettingsState implements Parcelable { */ @NonNull public static SharedConnectivitySettingsState readFromParcel(@NonNull Parcel in) { - return new SharedConnectivitySettingsState(in.readBoolean(), - in.readBundle()); + PendingIntent pendingIntent = PendingIntent.CREATOR.createFromParcel(in); + boolean instantTetherEnabled = in.readBoolean(); + Bundle extras = in.readBundle(); + return new SharedConnectivitySettingsState(instantTetherEnabled, pendingIntent, extras); } @NonNull @@ -156,6 +204,7 @@ public final class SharedConnectivitySettingsState implements Parcelable { public String toString() { return new StringBuilder("SharedConnectivitySettingsState[") .append("instantTetherEnabled=").append(mInstantTetherEnabled) + .append("PendingIntent=").append(mInstantTetherSettingsPendingIntent.toString()) .append("extras=").append(mExtras.toString()) .append("]").toString(); } diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java b/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java index 57108e4aa227..87ca99fd3e03 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java @@ -68,9 +68,7 @@ public abstract class SharedConnectivityService extends Service { new RemoteCallbackList<>(); private List<HotspotNetwork> mHotspotNetworks = Collections.emptyList(); private List<KnownNetwork> mKnownNetworks = Collections.emptyList(); - private SharedConnectivitySettingsState mSettingsState = - new SharedConnectivitySettingsState.Builder().setInstantTetherEnabled(false) - .setExtras(Bundle.EMPTY).build(); + private SharedConnectivitySettingsState mSettingsState = null; private HotspotNetworkConnectionStatus mHotspotNetworkConnectionStatus = new HotspotNetworkConnectionStatus.Builder() .setStatus(HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN) @@ -202,6 +200,13 @@ public abstract class SharedConnectivityService extends Service { @Override public SharedConnectivitySettingsState getSettingsState() { checkPermissions(); + // Done lazily since creating it needs a context. + if (mSettingsState == null) { + mSettingsState = new SharedConnectivitySettingsState + .Builder(getApplicationContext()) + .setInstantTetherEnabled(false) + .setExtras(Bundle.EMPTY).build(); + } return mSettingsState; } diff --git a/wifi/tests/Android.bp b/wifi/tests/Android.bp index c9105f7454e4..7a299694741a 100644 --- a/wifi/tests/Android.bp +++ b/wifi/tests/Android.bp @@ -36,6 +36,7 @@ android_test { static_libs: [ "androidx.test.rules", + "androidx.test.core", "frameworks-base-testutils", "guava", "mockito-target-minus-junit4", diff --git a/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java b/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java index 7578dfd11225..71239087b2bd 100644 --- a/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java +++ b/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManagerTest.java @@ -497,8 +497,9 @@ public class SharedConnectivityManagerTest { @Test public void getSettingsState_serviceConnected_shouldReturnState() throws RemoteException { SharedConnectivityManager manager = SharedConnectivityManager.create(mContext); - SharedConnectivitySettingsState state = new SharedConnectivitySettingsState.Builder() - .setInstantTetherEnabled(true).setExtras(new Bundle()).build(); + SharedConnectivitySettingsState state = + new SharedConnectivitySettingsState.Builder(mContext).setInstantTetherEnabled(true) + .setExtras(new Bundle()).build(); manager.setService(mService); when(mService.getSettingsState()).thenReturn(state); diff --git a/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsStateTest.java b/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsStateTest.java index 752b74905c97..5e17dfba9790 100644 --- a/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsStateTest.java +++ b/wifi/tests/src/android/net/wifi/sharedconnectivity/app/SharedConnectivitySettingsStateTest.java @@ -18,8 +18,10 @@ package android.net.wifi.sharedconnectivity.app; import static com.google.common.truth.Truth.assertThat; +import android.content.Intent; import android.os.Parcel; +import androidx.test.core.app.ApplicationProvider; import androidx.test.filters.SmallTest; import org.junit.Test; @@ -30,8 +32,12 @@ import org.junit.Test; @SmallTest public class SharedConnectivitySettingsStateTest { private static final boolean INSTANT_TETHER_STATE = true; + private static final String INTENT_ACTION = "instant.tether.settings"; private static final boolean INSTANT_TETHER_STATE_1 = false; + private static final String INTENT_ACTION_1 = "instant.tether.settings1"; + + /** * Verifies parcel serialization/deserialization. */ @@ -39,16 +45,11 @@ public class SharedConnectivitySettingsStateTest { public void testParcelOperation() { SharedConnectivitySettingsState state = buildSettingsStateBuilder().build(); - Parcel parcelW = Parcel.obtain(); - state.writeToParcel(parcelW, 0); - byte[] bytes = parcelW.marshall(); - parcelW.recycle(); - - Parcel parcelR = Parcel.obtain(); - parcelR.unmarshall(bytes, 0, bytes.length); - parcelR.setDataPosition(0); + Parcel parcel = Parcel.obtain(); + state.writeToParcel(parcel, 0); + parcel.setDataPosition(0); SharedConnectivitySettingsState fromParcel = - SharedConnectivitySettingsState.CREATOR.createFromParcel(parcelR); + SharedConnectivitySettingsState.CREATOR.createFromParcel(parcel); assertThat(fromParcel).isEqualTo(state); assertThat(fromParcel.hashCode()).isEqualTo(state.hashCode()); @@ -66,6 +67,10 @@ public class SharedConnectivitySettingsStateTest { SharedConnectivitySettingsState.Builder builder = buildSettingsStateBuilder() .setInstantTetherEnabled(INSTANT_TETHER_STATE_1); assertThat(builder.build()).isNotEqualTo(state1); + + builder = buildSettingsStateBuilder() + .setInstantTetherSettingsPendingIntent(new Intent(INTENT_ACTION_1)); + assertThat(builder.build()).isNotEqualTo(state1); } /** @@ -86,7 +91,9 @@ public class SharedConnectivitySettingsStateTest { } private SharedConnectivitySettingsState.Builder buildSettingsStateBuilder() { - return new SharedConnectivitySettingsState.Builder() - .setInstantTetherEnabled(INSTANT_TETHER_STATE); + return new SharedConnectivitySettingsState.Builder( + ApplicationProvider.getApplicationContext()) + .setInstantTetherEnabled(INSTANT_TETHER_STATE) + .setInstantTetherSettingsPendingIntent(new Intent(INTENT_ACTION)); } } diff --git a/wifi/tests/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityServiceTest.java b/wifi/tests/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityServiceTest.java index b8b6b767eed3..514ba3c0472e 100644 --- a/wifi/tests/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityServiceTest.java +++ b/wifi/tests/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityServiceTest.java @@ -75,9 +75,6 @@ public class SharedConnectivityServiceTest { .addSecurityType(SECURITY_TYPE_EAP).setNetworkProviderInfo( NETWORK_PROVIDER_INFO).build(); private static final List<KnownNetwork> KNOWN_NETWORKS = List.of(KNOWN_NETWORK); - private static final SharedConnectivitySettingsState SETTINGS_STATE = - new SharedConnectivitySettingsState.Builder().setInstantTetherEnabled(true) - .setExtras(Bundle.EMPTY).build(); private static final HotspotNetworkConnectionStatus TETHER_NETWORK_CONNECTION_STATUS = new HotspotNetworkConnectionStatus.Builder().setStatus(CONNECTION_STATUS_UNKNOWN) .setHotspotNetwork(HOTSPOT_NETWORK).setExtras(Bundle.EMPTY).build(); @@ -155,10 +152,11 @@ public class SharedConnectivityServiceTest { SharedConnectivityService service = createService(); ISharedConnectivityService.Stub binder = (ISharedConnectivityService.Stub) service.onBind(new Intent()); + when(mContext.getPackageName()).thenReturn("android.net.wifi.nonupdatable.test"); - service.setSettingsState(SETTINGS_STATE); + service.setSettingsState(buildSettingsState()); - assertThat(binder.getSettingsState()).isEqualTo(SETTINGS_STATE); + assertThat(binder.getSettingsState()).isEqualTo(buildSettingsState()); } @Test @@ -232,4 +230,10 @@ public class SharedConnectivityServiceTest { service.attachBaseContext(mContext); return service; } + + private SharedConnectivitySettingsState buildSettingsState() { + return new SharedConnectivitySettingsState.Builder(mContext).setInstantTetherEnabled(true) + .setInstantTetherSettingsPendingIntent(new Intent()) + .setExtras(Bundle.EMPTY).build(); + } } |