diff options
| author | 2023-03-13 06:52:10 +0000 | |
|---|---|---|
| committer | 2023-03-15 16:41:28 +0000 | |
| commit | f90e340576a209942f345a4964d47643b6850ae3 (patch) | |
| tree | 2e151aac329ee5a40250ea6906ff3e09c472a01d /wifi/java | |
| parent | 4e5d10b1d161e69a307eed3232fcccf46c05ac2c (diff) | |
Add PendingIntent to SharedConnectivitySettingsState
Bug: 272521649
Test: atest SharedConnectivitySettingsStateTest
Change-Id: I825435476b230d835455078aa3a58f50461eae88
Diffstat (limited to 'wifi/java')
2 files changed, 64 insertions, 10 deletions
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; } |