package com.android.settings.fingerprint;
import android.app.admin.DevicePolicyManager;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
import android.content.Intent;
+import android.graphics.Typeface;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
+import android.os.UserManager;
+import android.text.Annotation;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
+import android.text.TextPaint;
+import android.text.style.URLSpan;
+import android.util.Log;
import android.view.View;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.ChooseLockGeneric;
import com.android.settings.ChooseLockSettingsHelper;
-import com.android.settings.HelpUtils;
+import com.android.settingslib.HelpUtils;
import com.android.settings.R;
+import com.android.setupwizardlib.SetupWizardRecyclerLayout;
+import com.android.setupwizardlib.items.IItem;
+import com.android.setupwizardlib.items.Item;
+import com.android.setupwizardlib.items.RecyclerItemAdapter;
/**
* Onboarding activity for fingerprint enrollment.
*/
-public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
+public class FingerprintEnrollIntroduction extends FingerprintEnrollBase
+ implements RecyclerItemAdapter.OnItemSelectedListener {
- private static final int CHOOSE_LOCK_GENERIC_REQUEST = 1;
- private static final int FINGERPRINT_FIND_SENSOR_REQUEST = 2;
+ protected static final int CHOOSE_LOCK_GENERIC_REQUEST = 1;
+ protected static final int FINGERPRINT_FIND_SENSOR_REQUEST = 2;
+ protected static final int LEARN_MORE_REQUEST = 3;
+ private UserManager mUserManager;
private boolean mHasPassword;
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.fingerprint_enroll_introduction);
setHeaderText(R.string.security_settings_fingerprint_enroll_introduction_title);
- findViewById(R.id.cancel_button).setOnClickListener(this);
- findViewById(R.id.learn_more_button).setOnClickListener(this);
+ final SetupWizardRecyclerLayout layout =
+ (SetupWizardRecyclerLayout) findViewById(R.id.setup_wizard_layout);
+ mUserManager = UserManager.get(this);
+ final RecyclerItemAdapter adapter = (RecyclerItemAdapter) layout.getAdapter();
+ adapter.setOnItemSelectedListener(this);
+ Item item = (Item) adapter.findItemById(R.id.fingerprint_introduction_message);
+ item.setTitle(LearnMoreSpan.linkify(
+ getText(R.string.security_settings_fingerprint_enroll_introduction_message),
+ getString(R.string.help_url_fingerprint)));
+ // setupwizard library automatically sets the divider inset to
+ // R.dimen.suw_items_icon_divider_inset. We adjust this back to 0 as we do not want
+ // an inset within settings.
+ layout.setDividerInset(0);
updatePasswordQuality();
}
private void updatePasswordQuality() {
final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
- .getActivePasswordQuality(mUserId);
+ .getActivePasswordQuality(mUserManager.getCredentialOwnerProfile(mUserId));
mHasPassword = passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
}
if (requestCode == FINGERPRINT_FIND_SENSOR_REQUEST) {
if (isResultFinished || resultCode == RESULT_SKIP) {
final int result = isResultFinished ? RESULT_OK : RESULT_SKIP;
- setResult(result);
+ setResult(result, data);
finish();
return;
}
}
@Override
- public void onClick(View v) {
- if (v.getId() == R.id.cancel_button) {
- finish();
+ public void onItemSelected(IItem item) {
+ switch (((Item) item).getId()) {
+ case R.id.next_button:
+ onNextButtonClick();
+ break;
+ case R.id.cancel_button:
+ onCancelButtonClick();
+ break;
}
- if (v.getId() == R.id.learn_more_button) {
- launchFingerprintHelp();
- }
- super.onClick(v);
- }
-
- private void launchFingerprintHelp() {
- Intent helpIntent = HelpUtils.getHelpIntent(this,
- getString(R.string.help_url_fingerprint), getClass().getName());
- startActivity(helpIntent);
}
@Override
protected int getMetricsCategory() {
return MetricsEvent.FINGERPRINT_ENROLL_INTRO;
}
+
+ protected void onCancelButtonClick() {
+ finish();
+ }
+
+ private static class LearnMoreSpan extends URLSpan {
+ private static final String TAG = "LearnMoreSpan";
+ private static final Typeface TYPEFACE_MEDIUM =
+ Typeface.create("sans-serif-medium", Typeface.NORMAL);
+
+ private LearnMoreSpan(String url) {
+ super(url);
+ }
+
+ @Override
+ public void onClick(View widget) {
+ Context ctx = widget.getContext();
+ Intent intent = HelpUtils.getHelpIntent(ctx, getURL(), ctx.getClass().getName());
+ try {
+ // This needs to be startActivityForResult even though we do not care about the
+ // actual result because the help app needs to know about who invoked it.
+ widget.startActivityForResult(intent, LEARN_MORE_REQUEST);
+ } catch (ActivityNotFoundException e) {
+ Log.w(LearnMoreSpan.TAG,
+ "Actvity was not found for intent, " + intent.toString());
+ }
+ }
+
+ @Override
+ public void updateDrawState(TextPaint ds) {
+ super.updateDrawState(ds);
+ ds.setUnderlineText(false);
+ ds.setTypeface(TYPEFACE_MEDIUM);
+ }
+
+ public static CharSequence linkify(CharSequence rawText, String uri) {
+ SpannableString msg = new SpannableString(rawText);
+ Annotation[] spans = msg.getSpans(0, msg.length(), Annotation.class);
+ SpannableStringBuilder builder = new SpannableStringBuilder(msg);
+ for (Annotation annotation : spans) {
+ int start = msg.getSpanStart(annotation);
+ int end = msg.getSpanEnd(annotation);
+ LearnMoreSpan link = new LearnMoreSpan(uri);
+ builder.setSpan(link, start, end, msg.getSpanFlags(link));
+ }
+ return builder;
+ }
+ }
}