OSDN Git Service

Merge "Moving HelpUtils to SettingsLib" into nyc-dev
[android-x86/packages-apps-Settings.git] / src / com / android / settings / fingerprint / FingerprintEnrollIntroduction.java
index 83d936f..d1bd3f7 100644 (file)
 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
@@ -44,14 +61,25 @@ public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
         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;
     }
 
@@ -107,7 +135,7 @@ public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
         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;
             }
@@ -124,24 +152,67 @@ public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
     }
 
     @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;
+        }
+    }
 }