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"
|
||||
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 -->
|
||||
<activity android:name=".deviceinfo.Status"
|
||||
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 -->
|
||||
<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 -->
|
||||
<string name="device_admin_title">Device administration</string>
|
||||
|
||||
@@ -1875,12 +1881,8 @@
|
||||
<!-- ChooseLockPatternTutorial, tutorial screen title -->
|
||||
<string name="lock_title" product="default">Securing your phone</string>
|
||||
<!-- 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.
|
||||
\n<font height="17">\n</font><b>1</b>\u00A0 On the next screen, watch while an example pattern is drawn.
|
||||
\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 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\nReady to start? Touch \u201CNext\u201D.
|
||||
</string>
|
||||
<!-- 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.
|
||||
@@ -1891,14 +1893,6 @@
|
||||
\n<font height="3">\n</font>To leave your phone unprotected, touch \u201CCancel\u201D.</font>
|
||||
</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 screen, setting option name for the user to go to the screen to manage installed applications -->
|
||||
<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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.internal.widget.LockPatternView;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.Intent;
|
||||
@@ -45,6 +48,7 @@ public class ChooseLockPatternTutorial extends PreferenceActivity {
|
||||
implements View.OnClickListener {
|
||||
private View mNextButton;
|
||||
private View mSkipButton;
|
||||
private LockPatternView mPatternView;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
@@ -68,6 +72,17 @@ public class ChooseLockPatternTutorial extends PreferenceActivity {
|
||||
mNextButton.setOnClickListener(this);
|
||||
mSkipButton = view.findViewById(R.id.skip_button);
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -77,7 +92,7 @@ public class ChooseLockPatternTutorial extends PreferenceActivity {
|
||||
getActivity().setResult(ChooseLockPattern.RESULT_FINISHED);
|
||||
getActivity().finish();
|
||||
} 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);
|
||||
startActivity(intent);
|
||||
getActivity().finish();
|
||||
|
Reference in New Issue
Block a user