More work on the Crypt Keeper.

* Use the DPM to determine if we are encrypted.
* Fix misspelling (Comfirm -> Confirm).
* Animate to black when enabling encryption.
* Add holo droid background.
* Change the progress bar to indterminate.
* Display the percentage complete in the status line.
* Fixed bug 3388097. You will no longer have to unplug your device to start encryption. This line is intentionally long. I could make it shorter but I am proving a point: <magic>overflow: auto;</magic>.
* Actually hold onto the wakelock to prvent the device from sleeping.
* Implement onStop() as a orientation change can happen at boot. This will start the activity twice and there will be multiple handlers with messages.

Change-Id: Ia752d106c39e0d81431e856f8f500182e8ec1abd
This commit is contained in:
Jason parks
2011-01-26 13:11:42 -06:00
parent f955eda877
commit f821730407
9 changed files with 196 additions and 121 deletions

View File

@@ -64,49 +64,20 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_PROGRESS:
String state = SystemProperties.get("vold.encrypt_progress");
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
progressBar.setProgress(0);
try {
int progress = Integer.parseInt(state);
progressBar.setProgress(progress);
} catch (Exception e) {
Log.w(TAG, "Error parsing progress: " + e.toString());
}
// Check the status every 5 second
sendEmptyMessageDelayed(UPDATE_PROGRESS, 5000);
updateProgress();
break;
case COOLDOWN:
TextView tv = (TextView) findViewById(R.id.status);
if (mCooldown <= 0) {
// Re-enable the password entry
EditText passwordEntry = (EditText) findViewById(R.id.passwordEntry);
passwordEntry.setEnabled(true);
tv.setText(R.string.try_again);
} else {
CharSequence tempalte = getText(R.string.crypt_keeper_cooldown);
tv.setText(TextUtils.expandTemplate(tempalte, Integer.toString(mCooldown)));
mCooldown--;
mHandler.sendEmptyMessageDelayed(COOLDOWN, 1000); // Tick every second
}
cooldown();
break;
}
}
};
private int mCooldown;
PowerManager.WakeLock mWakeLock;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -139,17 +110,71 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList
| StatusBarManager.DISABLE_SYSTEM_INFO | StatusBarManager.DISABLE_NAVIGATION);
}
@Override
public void onStop() {
super.onStop();
mHandler.removeMessages(COOLDOWN);
mHandler.removeMessages(UPDATE_PROGRESS);
if (mWakeLock != null) {
mWakeLock.release();
mWakeLock = null;
}
}
private void encryptionProgressInit() {
// Accquire a partial wakelock to prevent the device from sleeping. Note
// we never release this wakelock as we will be restarted after the device
// is encrypted.
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, TAG);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
wakeLock.acquire();
mWakeLock.acquire();
mHandler.sendEmptyMessage(UPDATE_PROGRESS);
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
progressBar.setIndeterminate(true);
updateProgress();
}
private void updateProgress() {
String state = SystemProperties.get("vold.encrypt_progress");
int progress = 0;
try {
progress = Integer.parseInt(state);
} catch (Exception e) {
Log.w(TAG, "Error parsing progress: " + e.toString());
}
CharSequence status = getText(R.string.crypt_keeper_setup_description);
TextView tv = (TextView) findViewById(R.id.status);
tv.setText(TextUtils.expandTemplate(status, Integer.toString(progress)));
// Check the progress every 5 seconds
mHandler.removeMessages(UPDATE_PROGRESS);
mHandler.sendEmptyMessageDelayed(UPDATE_PROGRESS, 5000);
}
private void cooldown() {
TextView tv = (TextView) findViewById(R.id.status);
if (mCooldown <= 0) {
// Re-enable the password entry
EditText passwordEntry = (EditText) findViewById(R.id.passwordEntry);
passwordEntry.setEnabled(true);
tv.setText(R.string.try_again);
} else {
CharSequence tempalte = getText(R.string.crypt_keeper_cooldown);
tv.setText(TextUtils.expandTemplate(tempalte, Integer.toString(mCooldown)));
mCooldown--;
mHandler.removeMessages(COOLDOWN);
mHandler.sendEmptyMessageDelayed(COOLDOWN, 1000); // Tick every second
}
}
private void passwordEntryInit() {
@@ -211,7 +236,7 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList
mCooldown = COOL_DOWN_INTERVAL;
EditText passwordEntry = (EditText) findViewById(R.id.passwordEntry);
passwordEntry.setEnabled(false);
mHandler.sendEmptyMessage(COOLDOWN);
cooldown();
} else {
TextView tv = (TextView) findViewById(R.id.status);
tv.setText(R.string.try_again);