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:
33
core/java/android/credentials/ui/Constants.java
Normal file
33
core/java/android/credentials/ui/Constants.java
Normal 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";
|
||||
|
||||
}
|
||||
68
core/java/android/credentials/ui/IntentFactory.java
Normal file
68
core/java/android/credentials/ui/IntentFactory.java
Normal 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() {}
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user