Add PendingIntent to SharedConnectivitySettingsState
Bug: 272521649 Test: atest SharedConnectivitySettingsStateTest Change-Id: I825435476b230d835455078aa3a58f50461eae88
This commit is contained in:
@@ -10141,16 +10141,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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -59,6 +68,20 @@ public final class SharedConnectivitySettingsState implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -95,6 +128,16 @@ public final class SharedConnectivitySettingsState implements Parcelable {
|
||||
return mInstantTetherEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ android_test {
|
||||
|
||||
static_libs: [
|
||||
"androidx.test.rules",
|
||||
"androidx.test.core",
|
||||
"frameworks-base-testutils",
|
||||
"guava",
|
||||
"mockito-target-minus-junit4",
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user