• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.password;
18 
19 import android.app.Fragment;
20 import android.app.KeyguardManager;
21 import android.os.Bundle;
22 import android.os.UserManager;
23 import android.view.MenuItem;
24 import android.view.WindowManager;
25 import android.widget.LinearLayout;
26 
27 import com.android.settings.R;
28 import com.android.settings.SettingsActivity;
29 import com.android.settings.SetupWizardUtils;
30 import com.android.settings.Utils;
31 
32 public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivity {
33 
34     private static final String STATE_IS_KEYGUARD_LOCKED = "STATE_IS_KEYGUARD_LOCKED";
35 
36     enum ConfirmCredentialTheme {
37         NORMAL,
38         DARK,  // TODO(yukl): Clean up DARK theme, as it should no longer be used
39         WORK
40     }
41 
42     private boolean mRestoring;
43     private boolean mEnterAnimationPending;
44     private boolean mFirstTimeVisible = true;
45     private boolean mIsKeyguardLocked = false;
46     private ConfirmCredentialTheme mConfirmCredentialTheme;
47 
isInternalActivity()48     private boolean isInternalActivity() {
49         return (this instanceof ConfirmLockPassword.InternalActivity)
50                 || (this instanceof ConfirmLockPattern.InternalActivity);
51     }
52 
53     @Override
onCreate(Bundle savedState)54     protected void onCreate(Bundle savedState) {
55         int credentialOwnerUserId = Utils.getCredentialOwnerUserId(this,
56                 Utils.getUserIdFromBundle(this, getIntent().getExtras(), isInternalActivity()));
57         if (UserManager.get(this).isManagedProfile(credentialOwnerUserId)) {
58             setTheme(R.style.Theme_ConfirmDeviceCredentialsWork);
59             mConfirmCredentialTheme = ConfirmCredentialTheme.WORK;
60         } else if (getIntent().getBooleanExtra(
61                 ConfirmDeviceCredentialBaseFragment.DARK_THEME, false)) {
62             setTheme(R.style.Theme_ConfirmDeviceCredentialsDark);
63             mConfirmCredentialTheme = ConfirmCredentialTheme.DARK;
64         } else {
65             setTheme(SetupWizardUtils.getTheme(getIntent()));
66             mConfirmCredentialTheme = ConfirmCredentialTheme.NORMAL;
67         }
68         super.onCreate(savedState);
69 
70         if (mConfirmCredentialTheme == ConfirmCredentialTheme.NORMAL) {
71             // Prevent the content parent from consuming the window insets because GlifLayout uses
72             // it to show the status bar background.
73             LinearLayout layout = (LinearLayout) findViewById(R.id.content_parent);
74             layout.setFitsSystemWindows(false);
75         }
76         getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
77         mIsKeyguardLocked = savedState == null
78                 ? getSystemService(KeyguardManager.class).isKeyguardLocked()
79                 : savedState.getBoolean(STATE_IS_KEYGUARD_LOCKED, false);
80         // If the activity is launched, not due to config change, when keyguard is locked and the
81         // flag is set, assume it's launched on top of keyguard on purpose.
82         // TODO: Don't abuse SHOW_WHEN_LOCKED and don't check isKeyguardLocked.
83         // Set extra SHOW_WHEN_LOCKED and WindowManager FLAG_SHOW_WHEN_LOCKED only if it's
84         // truly on top of keyguard on purpose
85         if (mIsKeyguardLocked && getIntent().getBooleanExtra(
86                 ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false)) {
87             getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
88         }
89         CharSequence msg = getIntent().getStringExtra(
90                 ConfirmDeviceCredentialBaseFragment.TITLE_TEXT);
91         setTitle(msg);
92         if (getActionBar() != null) {
93             getActionBar().setDisplayHomeAsUpEnabled(true);
94             getActionBar().setHomeButtonEnabled(true);
95         }
96         mRestoring = savedState != null;
97     }
98 
99     @Override
onSaveInstanceState(Bundle outState)100     public void onSaveInstanceState(Bundle outState) {
101         super.onSaveInstanceState(outState);
102         outState.putBoolean(STATE_IS_KEYGUARD_LOCKED, mIsKeyguardLocked);
103     }
104 
105     @Override
onOptionsItemSelected(MenuItem item)106     public boolean onOptionsItemSelected(MenuItem item) {
107         if (item.getItemId() == android.R.id.home) {
108             finish();
109             return true;
110         }
111         return super.onOptionsItemSelected(item);
112     }
113 
114     @Override
onResume()115     public void onResume() {
116         super.onResume();
117         if (!isChangingConfigurations() && !mRestoring
118                 && mConfirmCredentialTheme == ConfirmCredentialTheme.DARK && mFirstTimeVisible) {
119             mFirstTimeVisible = false;
120             prepareEnterAnimation();
121             mEnterAnimationPending = true;
122         }
123     }
124 
getFragment()125     private ConfirmDeviceCredentialBaseFragment getFragment() {
126         Fragment fragment = getFragmentManager().findFragmentById(R.id.main_content);
127         if (fragment != null && fragment instanceof ConfirmDeviceCredentialBaseFragment) {
128             return (ConfirmDeviceCredentialBaseFragment) fragment;
129         }
130         return null;
131     }
132 
133     @Override
onEnterAnimationComplete()134     public void onEnterAnimationComplete() {
135         super.onEnterAnimationComplete();
136         if (mEnterAnimationPending) {
137             startEnterAnimation();
138             mEnterAnimationPending = false;
139         }
140     }
141 
142     @Override
isLaunchableInTaskModePinned()143     public boolean isLaunchableInTaskModePinned() {
144         return true;
145     }
146 
prepareEnterAnimation()147     public void prepareEnterAnimation() {
148         getFragment().prepareEnterAnimation();
149     }
150 
startEnterAnimation()151     public void startEnterAnimation() {
152         getFragment().startEnterAnimation();
153     }
154 
getConfirmCredentialTheme()155     public ConfirmCredentialTheme getConfirmCredentialTheme() {
156         return mConfirmCredentialTheme;
157     }
158 }
159