OSDN Git Service

Settings: Animate pin/pattern fragment only if available
[android-x86/packages-apps-Settings.git] / src / com / android / settings / ConfirmDeviceCredentialBaseActivity.java
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16
17 package com.android.settings;
18
19 import android.app.Fragment;
20 import android.app.KeyguardManager;
21 import android.os.Bundle;
22 import android.os.Handler;
23 import android.view.MenuItem;
24 import android.view.WindowManager;
25
26 public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivity {
27
28     private boolean mRestoring;
29     private boolean mDark;
30     private boolean mEnterAnimationPending;
31     private boolean mFirstTimeVisible = true;
32     private final Handler mHandler = new Handler();
33
34     @Override
35     protected void onCreate(Bundle savedState) {
36         if (getIntent().getBooleanExtra(ConfirmDeviceCredentialBaseFragment.DARK_THEME, false)) {
37             setTheme(R.style.Theme_ConfirmDeviceCredentialsDark);
38             mDark = true;
39         }
40         super.onCreate(savedState);
41         boolean deviceLocked = getSystemService(KeyguardManager.class).isKeyguardLocked();
42         if (deviceLocked && getIntent().getBooleanExtra(
43                 ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false)) {
44             getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
45         }
46         CharSequence msg = getIntent().getStringExtra(
47                 ConfirmDeviceCredentialBaseFragment.TITLE_TEXT);
48         setTitle(msg);
49         if (getActionBar() != null) {
50             getActionBar().setDisplayHomeAsUpEnabled(true);
51             getActionBar().setHomeButtonEnabled(true);
52         }
53         mRestoring = savedState != null;
54     }
55
56     @Override
57     public boolean onOptionsItemSelected(MenuItem item) {
58         if (item.getItemId() == android.R.id.home) {
59             finish();
60             return true;
61         }
62         return super.onOptionsItemSelected(item);
63     }
64
65     @Override
66     public void onResume() {
67         super.onResume();
68         if (!isChangingConfigurations() && !mRestoring && mDark && mFirstTimeVisible) {
69             mFirstTimeVisible = false;
70             prepareEnterAnimation();
71             mEnterAnimationPending = true;
72             mHandler.postDelayed(mEnterAnimationCompleteTimeoutRunnable, 1000);
73         }
74     }
75
76     private ConfirmDeviceCredentialBaseFragment getFragment() {
77         Fragment fragment = getFragmentManager().findFragmentById(R.id.main_content);
78         if (fragment != null && fragment instanceof ConfirmDeviceCredentialBaseFragment) {
79             return (ConfirmDeviceCredentialBaseFragment) fragment;
80         }
81         return null;
82     }
83
84     @Override
85     public void onEnterAnimationComplete() {
86         super.onEnterAnimationComplete();
87         if (mEnterAnimationPending) {
88             mHandler.removeCallbacks(mEnterAnimationCompleteTimeoutRunnable);
89             startEnterAnimation();
90             mEnterAnimationPending = false;
91         }
92     }
93
94     public void prepareEnterAnimation() {
95         final ConfirmDeviceCredentialBaseFragment f = getFragment();
96         if (f != null) {
97             f.prepareEnterAnimation();
98         }
99     }
100
101     public void startEnterAnimation() {
102         final ConfirmDeviceCredentialBaseFragment f = getFragment();
103         if (f != null) {
104             f.startEnterAnimation();
105         }
106     }
107
108     /**
109      * Workaround for a bug in window manager which results that onEnterAnimationComplete doesn't
110      * get called in all cases.
111      */
112     private final Runnable mEnterAnimationCompleteTimeoutRunnable = new Runnable() {
113         @Override
114         public void run() {
115             onEnterAnimationComplete();
116         }
117     };
118 }