/*
 * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
 *
 * 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 net.micode.notes.ui;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import net.micode.notes.R;
import net.micode.notes.tool.PasswordUtils;
import net.micode.notes.ui.NoteEditActivity;

/**
 * 密码输入Activity
 * 用于输入加密便签的密码
 * 
 * 功能说明：
 * 1. 接收Intent传递的便签ID
 * 2. 显示密码输入界面
 * 3. 验证用户输入的密码
 * 4. 密码正确后跳转到便签编辑界面
 */
public class PasswordInputActivity extends Activity {
    /** 日志标签，用于调试和日志输出 */
    private static final String TAG = "PasswordInputActivity";
    
    /** Intent Extra键名，用于传递便签ID */
    public static final String EXTRA_NOTE_ID = "note_id";
    
    /** 密码输入框控件 */
    private EditText mPasswordEditText;
    /** 返回按钮控件 */
    private Button mReturnButton;
    /** 确认按钮控件 */
    private Button mConfirmButton;
    /** 当前要访问的便签ID */
    private long mNoteId;

    /**
     * Activity创建时的回调方法
     * 初始化界面并获取Intent传递的便签ID
     * 
     * @param savedInstanceState 保存的实例状态，如果Activity被系统销毁后重建，此参数包含之前保存的数据
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置布局文件
        setContentView(R.layout.activity_password_input);
        
        // 从Intent中获取便签ID
        mNoteId = getIntent().getLongExtra(EXTRA_NOTE_ID, 0);
        // 验证便签ID是否有效
        if (mNoteId <= 0) {
            // 便签ID无效，显示错误提示并关闭Activity
            Toast.makeText(this, R.string.error_note_not_exist, Toast.LENGTH_SHORT).show();
            finish();
            return;
        }
        
        // 初始化界面控件
        initViews();
    }

    /**
     * 初始化界面控件
     * 绑定控件并设置点击事件监听器
     */
    private void initViews() {
        // 获取密码输入框控件
        mPasswordEditText = (EditText) findViewById(R.id.et_password);
        // 获取返回按钮控件
        mReturnButton = (Button) findViewById(R.id.btn_return);
        // 获取确认按钮控件
        mConfirmButton = (Button) findViewById(R.id.btn_confirm);
        
        // 设置返回按钮的点击事件监听器
        mReturnButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 返回主界面，关闭当前Activity
                finish();
            }
        });
        
        // 设置确认按钮的点击事件监听器
        mConfirmButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取用户输入的密码
                String password = mPasswordEditText.getText().toString();
                // 检查密码是否为空
                if (TextUtils.isEmpty(password)) {
                    // 密码为空，显示提示信息
                    Toast.makeText(PasswordInputActivity.this, 
                            R.string.password_empty, Toast.LENGTH_SHORT).show();
                    return;
                }
                
                // 验证密码是否正确
                if (PasswordUtils.verifyPassword(PasswordInputActivity.this, mNoteId, password)) {
                    // 密码正确，创建Intent跳转到便签编辑界面
                    Intent intent = new Intent(PasswordInputActivity.this, NoteEditActivity.class);
                    // 设置Intent动作为查看
                    intent.setAction(Intent.ACTION_VIEW);
                    // 传递便签ID
                    intent.putExtra(Intent.EXTRA_UID, mNoteId);
                    // 启动便签编辑Activity
                    startActivity(intent);
                    // 关闭当前Activity
                    finish();
                } else {
                    // 密码错误，显示错误提示
                    Toast.makeText(PasswordInputActivity.this, 
                            R.string.password_error, Toast.LENGTH_SHORT).show();
                    // 清空密码输入框，方便用户重新输入
                    mPasswordEditText.setText("");
                }
            }
        });
    }
}
