Fix 3148496: Update LockPatternTutorial to be one screen.
This combines the two activities ChooseLockPatternExample and ChooseLockPatternTutorial into one activity and makes use of the built-in LockPatternView animation to show an example view. Change-Id: If3a4b236a15a6d99b1c0b5c11e5e923267fa30d3
This commit is contained in:
@@ -735,9 +735,6 @@
|
|||||||
<activity android:name="ChooseLockPatternTutorial"
|
<activity android:name="ChooseLockPatternTutorial"
|
||||||
android:label="@string/lockpassword_choose_your_pattern_header"/>
|
android:label="@string/lockpassword_choose_your_pattern_header"/>
|
||||||
|
|
||||||
<activity android:name="ChooseLockPatternExample"
|
|
||||||
android:label="@string/lockpassword_choose_your_pattern_header"/>
|
|
||||||
|
|
||||||
<!-- Runs in the phone process since it needs access to the Phone object -->
|
<!-- Runs in the phone process since it needs access to the Phone object -->
|
||||||
<activity android:name=".deviceinfo.Status"
|
<activity android:name=".deviceinfo.Status"
|
||||||
android:label="@string/device_status_activity_title"
|
android:label="@string/device_status_activity_title"
|
||||||
|
78
res/layout-xlarge-land/choose_lock_pattern_tutorial.xml
Normal file
78
res/layout-xlarge-land/choose_lock_pattern_tutorial.xml
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2008 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/topLayout"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="0dip"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1">
|
||||||
|
|
||||||
|
<!-- left side: lock pattern -->
|
||||||
|
<com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
|
||||||
|
android:layout_width="354dip"
|
||||||
|
android:layout_height="354dip"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="72dip"
|
||||||
|
android:layout_marginLeft="111dip"
|
||||||
|
aspect="square"/>
|
||||||
|
|
||||||
|
<!-- right side: instructions and buttons -->
|
||||||
|
<!-- header message -->
|
||||||
|
<TextView android:id="@+id/headerText"
|
||||||
|
android:layout_width="542dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="88dip"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_toRightOf="@id/lockPattern"
|
||||||
|
android:layout_marginLeft="100dip"
|
||||||
|
android:text="@string/lock_intro_message"
|
||||||
|
android:textSize="22sp"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<!-- left / top button: skip, or re-try -->
|
||||||
|
<Button android:id="@+id/skip_button"
|
||||||
|
android:layout_width="140dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@string/lockpattern_tutorial_cancel_label"/>
|
||||||
|
|
||||||
|
<!-- right / bottom button: confirm or ok -->
|
||||||
|
<Button android:id="@+id/next_button"
|
||||||
|
android:layout_width="140dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@string/lockpattern_tutorial_continue_label"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
|
||||||
|
|
75
res/layout-xlarge/choose_lock_pattern_tutorial.xml
Normal file
75
res/layout-xlarge/choose_lock_pattern_tutorial.xml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2008 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.
|
||||||
|
-->
|
||||||
|
<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/topLayout"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_horizontal">
|
||||||
|
|
||||||
|
<!-- top: instructions and buttons -->
|
||||||
|
<!-- header message -->
|
||||||
|
<TextView android:id="@+id/headerText"
|
||||||
|
android:layout_width="542dip"
|
||||||
|
android:layout_height="78dip"
|
||||||
|
android:layout_marginTop="96dip"
|
||||||
|
android:textSize="22sp"
|
||||||
|
android:text="@string/lock_intro_message"/>
|
||||||
|
|
||||||
|
<!-- bottom: lock pattern -->
|
||||||
|
<com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
|
||||||
|
android:layout_width="354dip"
|
||||||
|
android:layout_height="354dip"
|
||||||
|
android:layout_marginTop="80dip"
|
||||||
|
aspect="square"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dip"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<!-- left / top button: skip, or re-try -->
|
||||||
|
<Button android:id="@+id/skip_button"
|
||||||
|
android:layout_width="140dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@string/lockpattern_tutorial_cancel_label"/>
|
||||||
|
|
||||||
|
<!-- right / bottom button: confirm or ok -->
|
||||||
|
<Button android:id="@+id/next_button"
|
||||||
|
android:layout_width="140dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:text="@string/lockpattern_tutorial_continue_label"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
|
@@ -720,6 +720,12 @@
|
|||||||
<!-- Label for ChoosePassword/PIN OK button -->
|
<!-- Label for ChoosePassword/PIN OK button -->
|
||||||
<string name="lockpassword_cancel_label">Cancel</string>
|
<string name="lockpassword_cancel_label">Cancel</string>
|
||||||
|
|
||||||
|
<!-- Label for LockPatternTutorial Cancel button -->
|
||||||
|
<string name="lockpattern_tutorial_cancel_label">Cancel</string>
|
||||||
|
|
||||||
|
<!-- Label for LockPatternTutorial Continue button -->
|
||||||
|
<string name="lockpattern_tutorial_continue_label">Next</string>
|
||||||
|
|
||||||
<!-- In the security screen, the header title for settings related to device admins -->
|
<!-- In the security screen, the header title for settings related to device admins -->
|
||||||
<string name="device_admin_title">Device administration</string>
|
<string name="device_admin_title">Device administration</string>
|
||||||
|
|
||||||
@@ -1875,12 +1881,8 @@
|
|||||||
<!-- ChooseLockPatternTutorial, tutorial screen title -->
|
<!-- ChooseLockPatternTutorial, tutorial screen title -->
|
||||||
<string name="lock_title" product="default">Securing your phone</string>
|
<string name="lock_title" product="default">Securing your phone</string>
|
||||||
<!-- ChooseLockPatternTutorial, tutorial screen text -->
|
<!-- ChooseLockPatternTutorial, tutorial screen text -->
|
||||||
<string name="lock_intro_message" product="tablet"><font size="17">Protect your tablet from unauthorized use by creating a personal screen unlock pattern.
|
<string name="lock_intro_message" product="tablet">Protect your tablet from unauthorized use by creating a personal screen unlock pattern. Use your finger to connect the dots in any order on the next screen. You must connect at least four dots.
|
||||||
\n<font height="17">\n</font><b>1</b>\u00A0 On the next screen, watch while an example pattern is drawn.
|
\n\nReady to start? Touch \u201CNext\u201D.
|
||||||
\n<font height="17">\n</font><b>2</b>\u00A0 When ready, draw your own personal unlock pattern. Experiment with different patterns but connect at least four dots.
|
|
||||||
\n<font height="17">\n</font><b>3</b>\u00A0 Redraw your pattern to confirm.
|
|
||||||
\n<font height="17">\n</font><b>Ready to start? Touch \u201CNext\u201D</b>.
|
|
||||||
\n<font height="3">\n</font>To leave your tablet unprotected, touch \u201CCancel\u201D.</font>
|
|
||||||
</string>
|
</string>
|
||||||
<!-- ChooseLockPatternTutorial, tutorial screen text -->
|
<!-- ChooseLockPatternTutorial, tutorial screen text -->
|
||||||
<string name="lock_intro_message" product="default"><font size="17">Protect your phone from unauthorized use by creating a personal screen unlock pattern.
|
<string name="lock_intro_message" product="default"><font size="17">Protect your phone from unauthorized use by creating a personal screen unlock pattern.
|
||||||
@@ -1891,14 +1893,6 @@
|
|||||||
\n<font height="3">\n</font>To leave your phone unprotected, touch \u201CCancel\u201D.</font>
|
\n<font height="3">\n</font>To leave your phone unprotected, touch \u201CCancel\u201D.</font>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!-- ChooseLockPatternExample --> <skip />
|
|
||||||
<!-- ChooseLockPatternExample, screen title that shows an example pattern -->
|
|
||||||
<string name="lock_example_title">Example pattern</string>
|
|
||||||
<!-- ChooseLockPatternExample, screen hint text at bottom of screen. These are instructions and rules for drawing a good patttern -->
|
|
||||||
<string name="lock_example_message">Connect at least four dots.\n
|
|
||||||
\nTouch \u201CNext\u201D when you\u2019re ready to draw your own pattern.
|
|
||||||
</string>
|
|
||||||
|
|
||||||
<!-- Applications Settings --> <skip />
|
<!-- Applications Settings --> <skip />
|
||||||
<!-- Applications settings screen, setting option name for the user to go to the screen to manage installed applications -->
|
<!-- Applications settings screen, setting option name for the user to go to the screen to manage installed applications -->
|
||||||
<string name="manageapplications_settings_title">Manage applications</string>
|
<string name="manageapplications_settings_title">Manage applications</string>
|
||||||
|
@@ -1,115 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008 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 com.android.settings;
|
|
||||||
|
|
||||||
import android.app.Fragment;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.drawable.AnimationDrawable;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.preference.PreferenceActivity;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
|
|
||||||
public class ChooseLockPatternExample extends PreferenceActivity {
|
|
||||||
|
|
||||||
// required constructor for fragments
|
|
||||||
public ChooseLockPatternExample() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Intent getIntent() {
|
|
||||||
Intent modIntent = new Intent(super.getIntent());
|
|
||||||
modIntent.putExtra(EXTRA_SHOW_FRAGMENT, ChooseLockPatternExampleFragment.class.getName());
|
|
||||||
modIntent.putExtra(EXTRA_NO_HEADERS, true);
|
|
||||||
return modIntent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ChooseLockPatternExampleFragment extends Fragment
|
|
||||||
implements View.OnClickListener {
|
|
||||||
private static final long START_DELAY = 1000;
|
|
||||||
protected static final String TAG = "Settings";
|
|
||||||
private View mNextButton;
|
|
||||||
private View mSkipButton;
|
|
||||||
private View mImageView;
|
|
||||||
private AnimationDrawable mAnimation;
|
|
||||||
private Handler mHandler = new Handler();
|
|
||||||
private Runnable mRunnable = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
startAnimation(mAnimation);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
||||||
Bundle savedInstanceState) {
|
|
||||||
View view = inflater.inflate(R.layout.choose_lock_pattern_example, null);
|
|
||||||
mNextButton = view.findViewById(R.id.next_button);
|
|
||||||
mNextButton.setOnClickListener(this);
|
|
||||||
|
|
||||||
mSkipButton = view.findViewById(R.id.skip_button);
|
|
||||||
mSkipButton.setOnClickListener(this);
|
|
||||||
|
|
||||||
mImageView = (ImageView) view.findViewById(R.id.lock_anim);
|
|
||||||
mImageView.setBackgroundResource(R.drawable.lock_anim);
|
|
||||||
mImageView.setOnClickListener(this);
|
|
||||||
mAnimation = (AnimationDrawable) mImageView.getBackground();
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
mHandler.postDelayed(mRunnable, START_DELAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
stopAnimation(mAnimation);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (v == mSkipButton) {
|
|
||||||
// Canceling, so finish all
|
|
||||||
getActivity().setResult(ChooseLockPattern.RESULT_FINISHED);
|
|
||||||
getActivity().finish();
|
|
||||||
} else if (v == mNextButton) {
|
|
||||||
stopAnimation(mAnimation);
|
|
||||||
Intent intent = new Intent(getActivity(), ChooseLockPattern.class);
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
|
||||||
intent.putExtra("confirm_credentials", false);
|
|
||||||
startActivity(intent);
|
|
||||||
getActivity().finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void startAnimation(final AnimationDrawable animation) {
|
|
||||||
if (animation != null && !animation.isRunning()) {
|
|
||||||
animation.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void stopAnimation(final AnimationDrawable animation) {
|
|
||||||
if (animation != null && animation.isRunning()) animation.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
|
import com.android.internal.widget.LockPatternView;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -45,6 +48,7 @@ public class ChooseLockPatternTutorial extends PreferenceActivity {
|
|||||||
implements View.OnClickListener {
|
implements View.OnClickListener {
|
||||||
private View mNextButton;
|
private View mNextButton;
|
||||||
private View mSkipButton;
|
private View mSkipButton;
|
||||||
|
private LockPatternView mPatternView;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -68,6 +72,17 @@ public class ChooseLockPatternTutorial extends PreferenceActivity {
|
|||||||
mNextButton.setOnClickListener(this);
|
mNextButton.setOnClickListener(this);
|
||||||
mSkipButton = view.findViewById(R.id.skip_button);
|
mSkipButton = view.findViewById(R.id.skip_button);
|
||||||
mSkipButton.setOnClickListener(this);
|
mSkipButton.setOnClickListener(this);
|
||||||
|
|
||||||
|
// Set up LockPatternView to be a non-interactive demo animation
|
||||||
|
mPatternView = (LockPatternView) view.findViewById(R.id.lockPattern);
|
||||||
|
ArrayList<LockPatternView.Cell> demoPattern = new ArrayList<LockPatternView.Cell>();
|
||||||
|
demoPattern.add(LockPatternView.Cell.of(0,0));
|
||||||
|
demoPattern.add(LockPatternView.Cell.of(0,1));
|
||||||
|
demoPattern.add(LockPatternView.Cell.of(1,1));
|
||||||
|
demoPattern.add(LockPatternView.Cell.of(2,1));
|
||||||
|
mPatternView.setPattern(LockPatternView.DisplayMode.Animate, demoPattern);
|
||||||
|
mPatternView.disableInput();
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +92,7 @@ public class ChooseLockPatternTutorial extends PreferenceActivity {
|
|||||||
getActivity().setResult(ChooseLockPattern.RESULT_FINISHED);
|
getActivity().setResult(ChooseLockPattern.RESULT_FINISHED);
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
} else if (v == mNextButton) {
|
} else if (v == mNextButton) {
|
||||||
Intent intent = new Intent(getActivity(), ChooseLockPatternExample.class);
|
Intent intent = new Intent(getActivity(), ChooseLockPattern.class);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
|
Reference in New Issue
Block a user