Add utils for launching the ux.

This abstracts the understanding of the extra key mapping and result
recever parcelling.

Test: deployed locally
Bug: 247855226
Change-Id: Idc671f2f8118d098463f006e7d05d20e1e65cf77
This commit is contained in:
Helen Qin
2022-10-19 00:08:31 +00:00
parent 1f0e116d1d
commit b9243d392b
4 changed files with 103 additions and 7 deletions

View File

@@ -0,0 +1,33 @@
/*
* Copyright 2022 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.credentials.ui;
/**
* Constants for the ui protocol that doesn't fit into other individual data structures.
*
* @hide
*/
public class Constants {
/**
* The intent extra key for the {@code ResultReceiver} object when launching the UX
* activities.
*/
public static final String EXTRA_RESULT_RECEIVER =
"android.credentials.ui.extra.RESULT_RECEIVER";
}

View File

@@ -0,0 +1,68 @@
/*
* Copyright 2022 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.credentials.ui;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Parcel;
import android.os.ResultReceiver;
import java.util.ArrayList;
/**
* Helpers for generating the intents and related extras parameters to launch the UI activities.
*
* @hide
*/
public class IntentFactory {
/** Generate a new launch intent to the . */
public static Intent newIntent(RequestInfo requestInfo,
ArrayList<ProviderData> providerDataList, ResultReceiver resultReceiver) {
Intent intent = new Intent();
// TODO: define these as proper config strings.
String activityName = "com.androidauth.tatiaccountselector/.CredentialSelectorActivity";
// String activityName = "com.android.credentialmanager/.CredentialSelectorActivity";
intent.setComponent(ComponentName.unflattenFromString(activityName));
intent.putParcelableArrayListExtra(
ProviderData.EXTRA_PROVIDER_DATA_LIST, providerDataList);
intent.putExtra(RequestInfo.EXTRA_REQUEST_INFO, requestInfo);
intent.putExtra(Constants.EXTRA_RESULT_RECEIVER,
toIpcFriendlyResultReceiver(resultReceiver));
return intent;
}
/**
* Convert an instance of a "locally-defined" ResultReceiver to an instance of
* {@link android.os.ResultReceiver} itself, which the receiving process will be able to
* unmarshall.
*/
private static <T extends ResultReceiver> ResultReceiver toIpcFriendlyResultReceiver(
T resultReceiver) {
final Parcel parcel = Parcel.obtain();
resultReceiver.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
final ResultReceiver ipcFriendly = ResultReceiver.CREATOR.createFromParcel(parcel);
parcel.recycle();
return ipcFriendly;
}
private IntentFactory() {}
}

View File

@@ -36,12 +36,6 @@ public class RequestInfo implements Parcelable {
*/
public static final @NonNull String EXTRA_REQUEST_INFO =
"android.credentials.ui.extra.REQUEST_INFO";
/**
* The intent extra key for the {@code ResultReceiver} object when launching the UX
* activities.
*/
public static final @NonNull String EXTRA_RESULT_RECEIVER =
"android.credentials.ui.extra.RESULT_RECEIVER";
/** Type value for an executeGetCredential request. */
public static final @NonNull String TYPE_GET = "android.credentials.ui.TYPE_GET";

View File

@@ -21,6 +21,7 @@ import android.app.slice.Slice
import android.app.slice.SliceSpec
import android.content.Context
import android.content.Intent
import android.credentials.ui.Constants
import android.credentials.ui.Entry
import android.credentials.ui.ProviderData
import android.credentials.ui.RequestInfo
@@ -60,7 +61,7 @@ class CredentialManagerRepo(
) ?: testProviderList()
resultReceiver = intent.getParcelableExtra(
RequestInfo.EXTRA_RESULT_RECEIVER,
Constants.EXTRA_RESULT_RECEIVER,
ResultReceiver::class.java
)
}