2 * Copyright (C) 2015 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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
17 package com.android.settings;
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;
26 public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivity {
28 private boolean mRestoring;
29 private boolean mDark;
30 private boolean mEnterAnimationPending;
31 private boolean mFirstTimeVisible = true;
32 private final Handler mHandler = new Handler();
35 protected void onCreate(Bundle savedState) {
36 if (getIntent().getBooleanExtra(ConfirmDeviceCredentialBaseFragment.DARK_THEME, false)) {
37 setTheme(R.style.Theme_ConfirmDeviceCredentialsDark);
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);
46 CharSequence msg = getIntent().getStringExtra(
47 ConfirmDeviceCredentialBaseFragment.TITLE_TEXT);
49 if (getActionBar() != null) {
50 getActionBar().setDisplayHomeAsUpEnabled(true);
51 getActionBar().setHomeButtonEnabled(true);
53 mRestoring = savedState != null;
57 public boolean onOptionsItemSelected(MenuItem item) {
58 if (item.getItemId() == android.R.id.home) {
62 return super.onOptionsItemSelected(item);
66 public void onResume() {
68 if (!isChangingConfigurations() && !mRestoring && mDark && mFirstTimeVisible) {
69 mFirstTimeVisible = false;
70 prepareEnterAnimation();
71 mEnterAnimationPending = true;
72 mHandler.postDelayed(mEnterAnimationCompleteTimeoutRunnable, 1000);
76 private ConfirmDeviceCredentialBaseFragment getFragment() {
77 Fragment fragment = getFragmentManager().findFragmentById(R.id.main_content);
78 if (fragment != null && fragment instanceof ConfirmDeviceCredentialBaseFragment) {
79 return (ConfirmDeviceCredentialBaseFragment) fragment;
85 public void onEnterAnimationComplete() {
86 super.onEnterAnimationComplete();
87 if (mEnterAnimationPending) {
88 mHandler.removeCallbacks(mEnterAnimationCompleteTimeoutRunnable);
89 startEnterAnimation();
90 mEnterAnimationPending = false;
94 public void prepareEnterAnimation() {
95 final ConfirmDeviceCredentialBaseFragment f = getFragment();
97 f.prepareEnterAnimation();
101 public void startEnterAnimation() {
102 final ConfirmDeviceCredentialBaseFragment f = getFragment();
104 f.startEnterAnimation();
109 * Workaround for a bug in window manager which results that onEnterAnimationComplete doesn't
110 * get called in all cases.
112 private final Runnable mEnterAnimationCompleteTimeoutRunnable = new Runnable() {
115 onEnterAnimationComplete();