1f8217304073b5cd13823a0602568394be93bf310Jason parks/*
2f8217304073b5cd13823a0602568394be93bf310Jason parks * Copyright (C) 2011 The Android Open Source Project
3f8217304073b5cd13823a0602568394be93bf310Jason parks *
4f8217304073b5cd13823a0602568394be93bf310Jason parks * Licensed under the Apache License, Version 2.0 (the "License");
5f8217304073b5cd13823a0602568394be93bf310Jason parks * you may not use this file except in compliance with the License.
6f8217304073b5cd13823a0602568394be93bf310Jason parks * You may obtain a copy of the License at
7f8217304073b5cd13823a0602568394be93bf310Jason parks *
8f8217304073b5cd13823a0602568394be93bf310Jason parks *      http://www.apache.org/licenses/LICENSE-2.0
9f8217304073b5cd13823a0602568394be93bf310Jason parks *
10f8217304073b5cd13823a0602568394be93bf310Jason parks * Unless required by applicable law or agreed to in writing, software
11f8217304073b5cd13823a0602568394be93bf310Jason parks * distributed under the License is distributed on an "AS IS" BASIS,
12f8217304073b5cd13823a0602568394be93bf310Jason parks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f8217304073b5cd13823a0602568394be93bf310Jason parks * See the License for the specific language governing permissions and
14f8217304073b5cd13823a0602568394be93bf310Jason parks * limitations under the License.
15f8217304073b5cd13823a0602568394be93bf310Jason parks */
16f8217304073b5cd13823a0602568394be93bf310Jason parks
17f8217304073b5cd13823a0602568394be93bf310Jason parkspackage com.android.settings;
18f8217304073b5cd13823a0602568394be93bf310Jason parks
19f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.app.Activity;
20f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.app.Fragment;
21f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.app.StatusBarManager;
22f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.content.Context;
23f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.content.Intent;
24f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.os.Bundle;
25f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.os.Handler;
26f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.os.IBinder;
27f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.os.ServiceManager;
28f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.os.storage.IMountService;
29f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.util.Log;
30f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.view.LayoutInflater;
31f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.view.View;
32f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.view.ViewGroup;
33f8217304073b5cd13823a0602568394be93bf310Jason parksimport android.widget.Button;
34f8217304073b5cd13823a0602568394be93bf310Jason parks
35f8217304073b5cd13823a0602568394be93bf310Jason parkspublic class CryptKeeperConfirm extends Fragment {
36f8217304073b5cd13823a0602568394be93bf310Jason parks
37f8217304073b5cd13823a0602568394be93bf310Jason parks    public static class Blank extends Activity {
38f8217304073b5cd13823a0602568394be93bf310Jason parks        private Handler mHandler = new Handler();
39f8217304073b5cd13823a0602568394be93bf310Jason parks
40f8217304073b5cd13823a0602568394be93bf310Jason parks        @Override
41f8217304073b5cd13823a0602568394be93bf310Jason parks        public void onCreate(Bundle savedInstanceState) {
42f8217304073b5cd13823a0602568394be93bf310Jason parks            super.onCreate(savedInstanceState);
43f8217304073b5cd13823a0602568394be93bf310Jason parks
4413d62049f7c96c47356f23eaee7f0997612fdf9fAndy Stadler            setContentView(R.layout.crypt_keeper_blank);
4513d62049f7c96c47356f23eaee7f0997612fdf9fAndy Stadler
46f8217304073b5cd13823a0602568394be93bf310Jason parks            if (Utils.isMonkeyRunning()) {
47f8217304073b5cd13823a0602568394be93bf310Jason parks                finish();
48f8217304073b5cd13823a0602568394be93bf310Jason parks            }
49f8217304073b5cd13823a0602568394be93bf310Jason parks
50f8217304073b5cd13823a0602568394be93bf310Jason parks            StatusBarManager sbm = (StatusBarManager) getSystemService(Context.STATUS_BAR_SERVICE);
51f8217304073b5cd13823a0602568394be93bf310Jason parks            sbm.disable(StatusBarManager.DISABLE_EXPAND
52f8217304073b5cd13823a0602568394be93bf310Jason parks                    | StatusBarManager.DISABLE_NOTIFICATION_ICONS
53f8217304073b5cd13823a0602568394be93bf310Jason parks                    | StatusBarManager.DISABLE_NOTIFICATION_ALERTS
54f8217304073b5cd13823a0602568394be93bf310Jason parks                    | StatusBarManager.DISABLE_SYSTEM_INFO
554d2bfd149118c8b82827d76d1d110fd5c65294c8Daniel Sandler                    | StatusBarManager.DISABLE_HOME
564d2bfd149118c8b82827d76d1d110fd5c65294c8Daniel Sandler                    | StatusBarManager.DISABLE_RECENT
5713d62049f7c96c47356f23eaee7f0997612fdf9fAndy Stadler                    | StatusBarManager.DISABLE_BACK);
58f8217304073b5cd13823a0602568394be93bf310Jason parks
59f8217304073b5cd13823a0602568394be93bf310Jason parks            // Post a delayed message in 700 milliseconds to enable encryption.
60f8217304073b5cd13823a0602568394be93bf310Jason parks            // NOTE: The animation on this activity is set for 500 milliseconds
61f8217304073b5cd13823a0602568394be93bf310Jason parks            // I am giving it a little extra time to complete.
62f8217304073b5cd13823a0602568394be93bf310Jason parks            mHandler.postDelayed(new Runnable() {
63f8217304073b5cd13823a0602568394be93bf310Jason parks                public void run() {
64f8217304073b5cd13823a0602568394be93bf310Jason parks                    IBinder service = ServiceManager.getService("mount");
65f8217304073b5cd13823a0602568394be93bf310Jason parks                    if (service == null) {
6600046d6e176eb05c3e3b0d13d38a8da7491bba5eJason parks                        Log.e("CryptKeeper", "Failed to find the mount service");
6700046d6e176eb05c3e3b0d13d38a8da7491bba5eJason parks                        finish();
68f8217304073b5cd13823a0602568394be93bf310Jason parks                        return;
69f8217304073b5cd13823a0602568394be93bf310Jason parks                    }
70f8217304073b5cd13823a0602568394be93bf310Jason parks
71f8217304073b5cd13823a0602568394be93bf310Jason parks                    IMountService mountService = IMountService.Stub.asInterface(service);
72f8217304073b5cd13823a0602568394be93bf310Jason parks                    try {
73f8217304073b5cd13823a0602568394be93bf310Jason parks                        Bundle args = getIntent().getExtras();
74f8217304073b5cd13823a0602568394be93bf310Jason parks                        mountService.encryptStorage(args.getString("password"));
75f8217304073b5cd13823a0602568394be93bf310Jason parks                    } catch (Exception e) {
76f8217304073b5cd13823a0602568394be93bf310Jason parks                        Log.e("CryptKeeper", "Error while encrypting...", e);
77f8217304073b5cd13823a0602568394be93bf310Jason parks                    }
78f8217304073b5cd13823a0602568394be93bf310Jason parks                }
79f8217304073b5cd13823a0602568394be93bf310Jason parks            }, 700);
80f8217304073b5cd13823a0602568394be93bf310Jason parks        }
81f8217304073b5cd13823a0602568394be93bf310Jason parks    }
82f8217304073b5cd13823a0602568394be93bf310Jason parks
83f8217304073b5cd13823a0602568394be93bf310Jason parks    private View mContentView;
84f8217304073b5cd13823a0602568394be93bf310Jason parks    private Button mFinalButton;
85f8217304073b5cd13823a0602568394be93bf310Jason parks    private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() {
86f8217304073b5cd13823a0602568394be93bf310Jason parks
87f8217304073b5cd13823a0602568394be93bf310Jason parks        public void onClick(View v) {
88f8217304073b5cd13823a0602568394be93bf310Jason parks            if (Utils.isMonkeyRunning()) {
89f8217304073b5cd13823a0602568394be93bf310Jason parks                return;
90f8217304073b5cd13823a0602568394be93bf310Jason parks            }
91f8217304073b5cd13823a0602568394be93bf310Jason parks
92f8217304073b5cd13823a0602568394be93bf310Jason parks            Intent intent = new Intent(getActivity(), Blank.class);
93f8217304073b5cd13823a0602568394be93bf310Jason parks            intent.putExtras(getArguments());
94f8217304073b5cd13823a0602568394be93bf310Jason parks
95f8217304073b5cd13823a0602568394be93bf310Jason parks            startActivity(intent);
96f8217304073b5cd13823a0602568394be93bf310Jason parks        }
97f8217304073b5cd13823a0602568394be93bf310Jason parks    };
98f8217304073b5cd13823a0602568394be93bf310Jason parks
99f8217304073b5cd13823a0602568394be93bf310Jason parks    private void establishFinalConfirmationState() {
100f8217304073b5cd13823a0602568394be93bf310Jason parks        mFinalButton = (Button) mContentView.findViewById(R.id.execute_encrypt);
101f8217304073b5cd13823a0602568394be93bf310Jason parks        mFinalButton.setOnClickListener(mFinalClickListener);
102f8217304073b5cd13823a0602568394be93bf310Jason parks    }
103f8217304073b5cd13823a0602568394be93bf310Jason parks
104f8217304073b5cd13823a0602568394be93bf310Jason parks    @Override
105f8217304073b5cd13823a0602568394be93bf310Jason parks    public View onCreateView(LayoutInflater inflater, ViewGroup container,
106f8217304073b5cd13823a0602568394be93bf310Jason parks            Bundle savedInstanceState) {
107f8217304073b5cd13823a0602568394be93bf310Jason parks        mContentView = inflater.inflate(R.layout.crypt_keeper_confirm, null);
108f8217304073b5cd13823a0602568394be93bf310Jason parks        establishFinalConfirmationState();
109f8217304073b5cd13823a0602568394be93bf310Jason parks        return mContentView;
110f8217304073b5cd13823a0602568394be93bf310Jason parks    }
111f8217304073b5cd13823a0602568394be93bf310Jason parks}
112