aboutsummaryrefslogtreecommitdiff
path: root/input
diff options
context:
space:
mode:
authorDouglas Sigelbaum <sigelbaum@google.com>2017-11-27 13:08:34 -0500
committerDouglas Sigelbaum <sigelbaum@google.com>2017-12-12 11:34:19 -0800
commitc6d490dccbd465c91ca4280ad96ece1cd7720cdb (patch)
tree74b17fce1a856174ab7542dd8a7582d277ec39cc /input
parent25c564de28bb0e50797e3dd1160394b209fdeea2 (diff)
downloadandroid-c6d490dccbd465c91ca4280ad96ece1cd7720cdb.tar.gz
Autofill sample: Add DAL check req levels to settings.
Bug: 66900717 Test: manual Change-Id: Ib3d740c6a6ead33a79bf6278a790643831d419d9
Diffstat (limited to 'input')
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java5
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/DigitalAssetLinksDataSource.java5
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/local/DigitalAssetLinksRepository.java56
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/MyPreferences.java12
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/SettingsActivity.java63
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/util/Util.java10
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/res/layout/multidataset_service_settings_activity.xml38
-rw-r--r--input/autofill/AutofillFramework/afservice/src/main/res/values/strings.xml8
8 files changed, 151 insertions, 46 deletions
diff --git a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java
index 9e887496..956b5217 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java
+++ b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/MyAutofillService.java
@@ -51,7 +51,7 @@ import com.example.android.autofill.service.model.DatasetWithFilledAutofillField
import com.example.android.autofill.service.settings.MyPreferences;
import com.example.android.autofill.service.util.AppExecutors;
import com.example.android.autofill.service.util.Util;
-
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement;
import java.util.List;
import static com.example.android.autofill.service.data.adapter.ResponseAdapter.CLIENT_STATE_PARTIAL_ID_TEMPLATE;
@@ -210,7 +210,8 @@ public class MyAutofillService extends AutofillService {
return;
}
if (webDomain != null && webDomain.length() > 0) {
- mDalRepository.checkValid(new DalInfo(webDomain, packageName),
+ DalCheckRequirement req = MyPreferences.getInstance(this).getDalCheckRequirement();
+ mDalRepository.checkValid(req, new DalInfo(webDomain, packageName),
new DataCallback<DalCheck>() {
@Override
public void onLoaded(DalCheck dalCheck) {
diff --git a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/DigitalAssetLinksDataSource.java b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/DigitalAssetLinksDataSource.java
index c01573b0..00661a7f 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/DigitalAssetLinksDataSource.java
+++ b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/DigitalAssetLinksDataSource.java
@@ -19,6 +19,8 @@ import com.example.android.autofill.service.data.DataCallback;
import com.example.android.autofill.service.model.DalCheck;
import com.example.android.autofill.service.model.DalInfo;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement;
+
/**
* Data source for
* <a href="https://developers.google.com/digital-asset-links/">Digital Asset Links</a>.
@@ -28,7 +30,8 @@ public interface DigitalAssetLinksDataSource {
/**
* Checks if the association between a web domain and a package is valid.
*/
- void checkValid(DalInfo dalInfo, DataCallback<DalCheck> dalCheckCallback);
+ void checkValid(DalCheckRequirement dalCheckRequirement, DalInfo dalInfo,
+ DataCallback<DalCheck> dalCheckCallback);
/**
* Clears all cached data.
diff --git a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/local/DigitalAssetLinksRepository.java b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/local/DigitalAssetLinksRepository.java
index dfcecab4..6303a1e7 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/local/DigitalAssetLinksRepository.java
+++ b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/data/source/local/DigitalAssetLinksRepository.java
@@ -19,12 +19,12 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
-import com.example.android.autofill.service.util.SecurityHelper;
-import com.example.android.autofill.service.data.source.DalService;
import com.example.android.autofill.service.data.DataCallback;
+import com.example.android.autofill.service.data.source.DalService;
import com.example.android.autofill.service.data.source.DigitalAssetLinksDataSource;
import com.example.android.autofill.service.model.DalCheck;
import com.example.android.autofill.service.model.DalInfo;
+import com.example.android.autofill.service.util.SecurityHelper;
import com.google.common.net.InternetDomainName;
import java.util.HashMap;
@@ -34,6 +34,10 @@ import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement.AllUrls;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement.Disabled;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement.LoginOnly;
import static com.example.android.autofill.service.util.Util.logd;
@@ -41,7 +45,6 @@ import static com.example.android.autofill.service.util.Util.logd;
* Singleton repository that caches the result of Digital Asset Links checks.
*/
public class DigitalAssetLinksRepository implements DigitalAssetLinksDataSource {
-
private static final String DAL_BASE_URL = "https://digitalassetlinks.googleapis.com";
private static final String PERMISSION_GET_LOGIN_CREDS = "common.get_login_creds";
private static final String PERMISSION_HANDLE_ALL_URLS = "common.handle_all_urls";
@@ -80,7 +83,15 @@ public class DigitalAssetLinksRepository implements DigitalAssetLinksDataSource
mCache.clear();
}
- public void checkValid(DalInfo dalInfo, DataCallback<DalCheck> dalCheckDataCallback) {
+ public void checkValid(DalCheckRequirement dalCheckRequirement, DalInfo dalInfo,
+ DataCallback<DalCheck> dalCheckDataCallback) {
+ if (dalCheckRequirement.equals(Disabled)) {
+ DalCheck dalCheck = new DalCheck();
+ dalCheck.linked = true;
+ dalCheckDataCallback.onLoaded(dalCheck);
+ return;
+ }
+
DalCheck dalCheck = mCache.get(dalInfo);
if (dalCheck != null) {
dalCheckDataCallback.onLoaded(dalCheck);
@@ -109,22 +120,27 @@ public class DigitalAssetLinksRepository implements DigitalAssetLinksDataSource
DalCheck dalCheck = response.body();
if (dalCheck == null || !dalCheck.linked) {
// get_login_creds check failed, so try handle_all_urls check
- mDalService.check(webDomain, PERMISSION_HANDLE_ALL_URLS, packageName,
- fingerprint).enqueue(new Callback<DalCheck>() {
- @Override
- public void onResponse(@NonNull Call<DalCheck> call,
- @NonNull Response<DalCheck> response) {
- DalCheck dalCheck = response.body();
- mCache.put(dalInfo, dalCheck);
- dalCheckDataCallback.onLoaded(dalCheck);
- }
-
- @Override
- public void onFailure(@NonNull Call<DalCheck> call,
- @NonNull Throwable t) {
- dalCheckDataCallback.onDataNotAvailable(t.getMessage());
- }
- });
+ if (dalCheckRequirement.equals(LoginOnly)) {
+ dalCheckDataCallback.onDataNotAvailable(
+ "DAL: Login creds check failed.");
+ } else if (dalCheckRequirement.equals(AllUrls)) {
+ mDalService.check(webDomain, PERMISSION_HANDLE_ALL_URLS,
+ packageName, fingerprint).enqueue(new Callback<DalCheck>() {
+ @Override
+ public void onResponse(@NonNull Call<DalCheck> call,
+ @NonNull Response<DalCheck> response) {
+ DalCheck dalCheck = response.body();
+ mCache.put(dalInfo, dalCheck);
+ dalCheckDataCallback.onLoaded(dalCheck);
+ }
+
+ @Override
+ public void onFailure(@NonNull Call<DalCheck> call,
+ @NonNull Throwable t) {
+ dalCheckDataCallback.onDataNotAvailable(t.getMessage());
+ }
+ });
+ }
} else {
// get_login_creds check succeeded, so we're finished.
mCache.put(dalInfo, dalCheck);
diff --git a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/MyPreferences.java b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/MyPreferences.java
index 73fa3acf..8770ef83 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/MyPreferences.java
+++ b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/MyPreferences.java
@@ -28,6 +28,7 @@ public class MyPreferences {
private static final String DATASET_AUTH_KEY = "dataset_auth";
private static final String MASTER_PASSWORD_KEY = "master_password";
private static final String LOGGING_LEVEL = "logging_level";
+ private static final String DAL_CHECK_REQUIRED = "dal_check_required";
private static MyPreferences sInstance;
private final SharedPreferences mPrefs;
@@ -90,11 +91,20 @@ public class MyPreferences {
}
public Util.LogLevel getLoggingLevel() {
- return Util.LogLevel.values()[mPrefs.getInt(LOGGING_LEVEL, Util.LogLevel.OFF.ordinal())];
+ return Util.LogLevel.values()[mPrefs.getInt(LOGGING_LEVEL, Util.LogLevel.Off.ordinal())];
}
public void setLoggingLevel(Util.LogLevel level) {
mPrefs.edit().putInt(LOGGING_LEVEL, level.ordinal()).apply();
Util.setLoggingLevel(level);
}
+
+ public Util.DalCheckRequirement getDalCheckRequirement() {
+ return Util.DalCheckRequirement.values()[mPrefs.getInt(DAL_CHECK_REQUIRED,
+ Util.DalCheckRequirement.AllUrls.ordinal())];
+ }
+
+ public void setDalCheckRequired(Util.DalCheckRequirement level) {
+ mPrefs.edit().putInt(DAL_CHECK_REQUIRED, level.ordinal()).apply();
+ }
}
diff --git a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/SettingsActivity.java b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/SettingsActivity.java
index 5ccc13ae..82222a80 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/SettingsActivity.java
+++ b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/settings/SettingsActivity.java
@@ -51,6 +51,9 @@ import com.example.android.autofill.service.util.Util;
import java.util.List;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement.AllUrls;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement.Disabled;
+import static com.example.android.autofill.service.util.Util.DalCheckRequirement.LoginOnly;
import static com.example.android.autofill.service.util.Util.logd;
import static com.example.android.autofill.service.util.Util.logw;
@@ -60,6 +63,7 @@ public class SettingsActivity extends AppCompatActivity {
private AutofillManager mAutofillManager;
private LocalAutofillDataSource mLocalAutofillDataSource;
private PackageVerificationDataSource mPackageVerificationDataSource;
+ private MyPreferences mPreferences;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -72,18 +76,17 @@ public class SettingsActivity extends AppCompatActivity {
autofillDao, new AppExecutors());
mAutofillManager = getSystemService(AutofillManager.class);
mPackageVerificationDataSource = SharedPrefsPackageVerificationRepository.getInstance(this);
-
- final MyPreferences preferences = MyPreferences.getInstance(this);
+ mPreferences = MyPreferences.getInstance(this);
setupSettingsSwitch(R.id.settings_auth_responses_container,
R.id.settings_auth_responses_label,
R.id.settings_auth_responses_switch,
- preferences.isResponseAuth(),
- (compoundButton, isResponseAuth) -> preferences.setResponseAuth(isResponseAuth));
+ mPreferences.isResponseAuth(),
+ (compoundButton, isResponseAuth) -> mPreferences.setResponseAuth(isResponseAuth));
setupSettingsSwitch(R.id.settings_auth_datasets_container,
R.id.settings_auth_datasets_label,
R.id.settings_auth_datasets_switch,
- preferences.isDatasetAuth(),
- (compoundButton, isDatasetAuth) -> preferences.setDatasetAuth(isDatasetAuth));
+ mPreferences.isDatasetAuth(),
+ (compoundButton, isDatasetAuth) -> mPreferences.setDatasetAuth(isDatasetAuth));
setupSettingsButton(R.id.settings_add_data_container,
R.id.settings_add_data_label,
R.id.settings_add_data_icon,
@@ -96,7 +99,7 @@ public class SettingsActivity extends AppCompatActivity {
R.id.settings_auth_credentials_label,
R.id.settings_auth_credentials_icon,
(view) -> {
- if (preferences.getMasterPassword() != null) {
+ if (mPreferences.getMasterPassword() != null) {
buildCurrentCredentialsDialog().show();
} else {
buildNewCredentialsDialog().show();
@@ -108,29 +111,55 @@ public class SettingsActivity extends AppCompatActivity {
mAutofillManager.hasEnabledAutofillServices(),
(compoundButton, serviceSet) -> setService(serviceSet));
RadioGroup loggingLevelContainer = findViewById(R.id.loggingLevelContainer);
- Util.LogLevel loggingLevel = preferences.getLoggingLevel();
+ Util.LogLevel loggingLevel = mPreferences.getLoggingLevel();
Util.setLoggingLevel(loggingLevel);
switch (loggingLevel) {
- case OFF:
+ case Off:
loggingLevelContainer.check(R.id.loggingOff);
break;
- case DEBUG:
+ case Debug:
loggingLevelContainer.check(R.id.loggingDebug);
break;
- case VERBOSE:
+ case Verbose:
loggingLevelContainer.check(R.id.loggingVerbose);
break;
}
loggingLevelContainer.setOnCheckedChangeListener((group, checkedId) -> {
switch (checkedId) {
case R.id.loggingOff:
- preferences.setLoggingLevel(Util.LogLevel.OFF);
+ mPreferences.setLoggingLevel(Util.LogLevel.Off);
break;
case R.id.loggingDebug:
- preferences.setLoggingLevel(Util.LogLevel.DEBUG);
+ mPreferences.setLoggingLevel(Util.LogLevel.Debug);
break;
case R.id.loggingVerbose:
- preferences.setLoggingLevel(Util.LogLevel.VERBOSE);
+ mPreferences.setLoggingLevel(Util.LogLevel.Verbose);
+ break;
+ }
+ });
+ RadioGroup dalCheckRequirementContainer = findViewById(R.id.dalCheckRequirementContainer);
+ Util.DalCheckRequirement dalCheckRequirement = mPreferences.getDalCheckRequirement();
+ switch (dalCheckRequirement) {
+ case Disabled:
+ dalCheckRequirementContainer.check(R.id.dalDisabled);
+ break;
+ case LoginOnly:
+ dalCheckRequirementContainer.check(R.id.dalLoginOnly);
+ break;
+ case AllUrls:
+ dalCheckRequirementContainer.check(R.id.dalAllUrls);
+ break;
+ }
+ dalCheckRequirementContainer.setOnCheckedChangeListener((group, checkedId) -> {
+ switch (checkedId) {
+ case R.id.dalDisabled:
+ mPreferences.setDalCheckRequired(Disabled);
+ break;
+ case R.id.dalLoginOnly:
+ mPreferences.setDalCheckRequired(LoginOnly);
+ break;
+ case R.id.dalAllUrls:
+ mPreferences.setDalCheckRequired(AllUrls);
break;
}
});
@@ -144,7 +173,7 @@ public class SettingsActivity extends AppCompatActivity {
.setPositiveButton(R.string.settings_ok, (dialog, which) -> {
mLocalAutofillDataSource.clear();
mPackageVerificationDataSource.clear();
- MyPreferences.getInstance(SettingsActivity.this).clearCredentials();
+ mPreferences.clearCredentials();
dialog.dismiss();
})
.create();
@@ -212,7 +241,7 @@ public class SettingsActivity extends AppCompatActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = currentPasswordField.getText().toString();
- if (MyPreferences.getInstance(SettingsActivity.this).getMasterPassword()
+ if (mPreferences.getMasterPassword()
.equals(password)) {
buildNewCredentialsDialog().show();
dialog.dismiss();
@@ -232,7 +261,7 @@ public class SettingsActivity extends AppCompatActivity {
.setView(newPasswordField)
.setPositiveButton(R.string.settings_ok, (dialog, which) -> {
String password = newPasswordField.getText().toString();
- MyPreferences.getInstance(SettingsActivity.this).setMasterPassword(password);
+ mPreferences.setMasterPassword(password);
dialog.dismiss();
})
.create();
diff --git a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/util/Util.java b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/util/Util.java
index d7b5b45b..53943138 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/util/Util.java
+++ b/input/autofill/AutofillFramework/afservice/src/main/java/com/example/android/autofill/service/util/Util.java
@@ -42,7 +42,7 @@ public final class Util {
public static final NodeFilter AUTOFILL_ID_FILTER = (node, id) ->
id.equals(node.getAutofillId());
private static final String TAG = "AutofillSample";
- public static LogLevel sLoggingLevel = LogLevel.OFF;
+ public static LogLevel sLoggingLevel = LogLevel.Off;
private static void bundleToString(StringBuilder builder, Bundle data) {
final Set<String> keySet = data.keySet();
@@ -252,11 +252,11 @@ public final class Util {
}
public static boolean logDebugEnabled() {
- return sLoggingLevel.ordinal() >= LogLevel.DEBUG.ordinal();
+ return sLoggingLevel.ordinal() >= LogLevel.Debug.ordinal();
}
public static boolean logVerboseEnabled() {
- return sLoggingLevel.ordinal() >= LogLevel.VERBOSE.ordinal();
+ return sLoggingLevel.ordinal() >= LogLevel.Verbose.ordinal();
}
public static void logw(String message, Object... params) {
@@ -279,7 +279,9 @@ public final class Util {
sLoggingLevel = level;
}
- public enum LogLevel {OFF, DEBUG, VERBOSE}
+ public enum LogLevel {Off, Debug, Verbose}
+
+ public enum DalCheckRequirement {Disabled, LoginOnly, AllUrls}
/**
* Helper interface used to filter Assist nodes.
diff --git a/input/autofill/AutofillFramework/afservice/src/main/res/layout/multidataset_service_settings_activity.xml b/input/autofill/AutofillFramework/afservice/src/main/res/layout/multidataset_service_settings_activity.xml
index bfbf5f81..ce77e27a 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/res/layout/multidataset_service_settings_activity.xml
+++ b/input/autofill/AutofillFramework/afservice/src/main/res/layout/multidataset_service_settings_activity.xml
@@ -163,6 +163,44 @@
style="@style/Settings.Header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:text="@string/settings_dal_header" />
+
+ <RadioGroup
+ android:id="@+id/dalCheckRequirementContainer"
+ style="@style/Settings.Container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <RadioButton
+ android:id="@+id/dalDisabled"
+ style="@style/Settings.Label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/a11y_min_touch_target_dimen"
+ android:text="@string/settings_dal_disabled" />
+
+ <RadioButton
+ android:id="@+id/dalLoginOnly"
+ style="@style/Settings.Label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/a11y_min_touch_target_dimen"
+ android:text="@string/settings_dal_login_only" />
+
+ <RadioButton
+ android:id="@+id/dalAllUrls"
+ style="@style/Settings.Label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/a11y_min_touch_target_dimen"
+ android:text="@string/settings_dal_all_urls" />
+ </RadioGroup>
+
+ <TextView
+ style="@style/Settings.Header"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:text="@string/settings_logging_header" />
<RadioGroup
diff --git a/input/autofill/AutofillFramework/afservice/src/main/res/values/strings.xml b/input/autofill/AutofillFramework/afservice/src/main/res/values/strings.xml
index c6c646d7..da0e0a8c 100644
--- a/input/autofill/AutofillFramework/afservice/src/main/res/values/strings.xml
+++ b/input/autofill/AutofillFramework/afservice/src/main/res/values/strings.xml
@@ -7,7 +7,7 @@
<string name="settings_name">Autofill Settings</string>
<string name="settings_cancel">Cancel</string>
<string name="settings_save">Save</string>
- <string name="settings_authenticate_responses">Authenticate responses</string>
+ <string name="settings_authenticate_responses">Authenticate Responses</string>
<string name="settings_authenticate_datasets">Authenticate Datasets</string>
<string name="settings_add_data_label">Add fake Autofill data</string>
<string name="settings_add_data_title">Add Autofill Datasets</string>
@@ -27,6 +27,12 @@
<string name="settings_logging_off">Off</string>
<string name="settings_logging_debug">Debug</string>
<string name="settings_logging_verbose">Verbose</string>
+
+ <string name="settings_dal_header">DAL Check Requirement</string>
+ <string name="settings_dal_disabled">Disabled</string>
+ <string name="settings_dal_login_only">Login Credentials Only</string>
+ <string name="settings_dal_all_urls">Handle All URLs</string>
+
<string name="settings_enable_header">Enable/Disable</string>
<string name="settings_set_service">Set default Autofill service</string>
<string name="settings_disable_service">Disable Autofill services</string>