From 8fd5bc9e6ff0d02012df670a6bf4bcdaf903c09d Mon Sep 17 00:00:00 2001 From: Jason parks Date: Wed, 12 Jan 2011 16:03:31 -0600 Subject: [PATCH] Move the CryptKeeper to Settings. Change-Id: I59e46366e1911ae7fd37f07719f1e7ba0825733c --- AndroidManifest.xml | 13 +++ res/layout-xlarge-land/crypt_keeper.xml | 27 +++++ res/layout-xlarge/crypt_keeper.xml | 27 +++++ res/layout/crypt_keeper_content.xml | 65 ++++++++++++ res/layout/crypt_keeper_status.xml | 102 +++++++++++++++++++ res/values/colors.xml | 4 + res/values/strings.xml | 5 + src/com/android/settings/CryptKeeper.java | 116 ++++++++++++++++++++++ 8 files changed, 359 insertions(+) create mode 100644 res/layout-xlarge-land/crypt_keeper.xml create mode 100644 res/layout-xlarge/crypt_keeper.xml create mode 100644 res/layout/crypt_keeper_content.xml create mode 100644 res/layout/crypt_keeper_status.xml create mode 100644 src/com/android/settings/CryptKeeper.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 17c2fcd3018..66bb1e4b66b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -48,6 +48,7 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout-xlarge/crypt_keeper.xml b/res/layout-xlarge/crypt_keeper.xml new file mode 100644 index 00000000000..7cd82c5cdd2 --- /dev/null +++ b/res/layout-xlarge/crypt_keeper.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/res/layout/crypt_keeper_content.xml b/res/layout/crypt_keeper_content.xml new file mode 100644 index 00000000000..fa337e87414 --- /dev/null +++ b/res/layout/crypt_keeper_content.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/crypt_keeper_status.xml b/res/layout/crypt_keeper_status.xml new file mode 100644 index 00000000000..ba2584f5b61 --- /dev/null +++ b/res/layout/crypt_keeper_status.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/res/values/colors.xml b/res/values/colors.xml index 8a2b68c30bf..0b8beb63bb4 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -22,5 +22,9 @@ #F33 #3F3 #FFF + + #ff9a9a9a + #ff666666 + #ff9a9a9a diff --git a/res/values/strings.xml b/res/values/strings.xml index 70124402afb..86f4e8508e5 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3112,4 +3112,9 @@ found in the list of installed applications. Sync for this item is currently disabled. To change your preference, temporarily turn on background data and automatic sync. + + Enter password to decrypt storage + + Sorry, try again + diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java new file mode 100644 index 00000000000..7b07c644474 --- /dev/null +++ b/src/com/android/settings/CryptKeeper.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2011 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 com.android.internal.widget.PasswordEntryKeyboardHelper; +import com.android.internal.widget.PasswordEntryKeyboardView; + +import android.app.Activity; +import android.app.StatusBarManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; +import android.inputmethodservice.KeyboardView; +import android.os.Bundle; +import android.os.IBinder; +import android.os.ServiceManager; +import android.os.SystemProperties; +import android.os.storage.IMountService; +import android.text.format.DateFormat; +import android.util.Log; +import android.view.KeyEvent; +import android.view.inputmethod.EditorInfo; +import android.widget.TextView; + +import java.util.Date; + +public class CryptKeeper extends Activity implements TextView.OnEditorActionListener { + private static final String DECRYPT_STATE = "trigger_restart_framework"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.crypt_keeper); + + String state = SystemProperties.get("vold.decrypt"); + if ("".equals(state) || DECRYPT_STATE.equals(state)) { + PackageManager pm = getPackageManager(); + ComponentName name = new ComponentName(this, CryptKeeper.class); + pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + return; + } + + TextView passwordEntry = (TextView) findViewById(R.id.passwordEntry); + passwordEntry.setOnEditorActionListener(this); + + KeyboardView keyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard); + + PasswordEntryKeyboardHelper keyboardHelper = new PasswordEntryKeyboardHelper(this, + keyboardView, passwordEntry, false); + keyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA); + + + passwordEntry.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_lock_idle_lock, + 0, 0, 0); + + String dateFormatString = getString(com.android.internal.R.string.full_wday_month_day_no_year); + TextView date = (TextView) findViewById(R.id.date); + date.setText(DateFormat.format(dateFormatString, new Date())); + + // Disable the status bar + StatusBarManager sbm = (StatusBarManager) getSystemService(Context.STATUS_BAR_SERVICE); + sbm.disable(StatusBarManager.DISABLE_EXPAND | StatusBarManager.DISABLE_NOTIFICATION_ICONS + | StatusBarManager.DISABLE_NOTIFICATION_ALERTS + | StatusBarManager.DISABLE_SYSTEM_INFO | StatusBarManager.DISABLE_NAVIGATION); + } + + private IMountService getMountService() { + IBinder service = ServiceManager.getService("mount"); + if (service != null) { + return IMountService.Stub.asInterface(service); + } + return null; + } + + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_NULL) { + // Get the password + String password = v.getText().toString(); + + // Now that we have the password clear the password field. + v.setText(null); + + IMountService service = getMountService(); + try { + service.decryptStorage(password); + + // For now the only way to get here is for the password to be + // wrong. + + TextView tv = (TextView) findViewById(R.id.status); + tv.setText(R.string.try_again); + + } catch (Exception e) { + Log.e("CryptKeeper", "Error while decrypting...", e); + } + + return true; + } + return false; + } +} \ No newline at end of file