package cn.itcast.mobilesafe.ui;
import cn.itcast.mobilesafe.R;
import cn.itcast.mobilesafe.adapter.MainUIAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnItemClickListener {
private static final String TAG = "MainActivity";
private GridView gv_main;
private MainUIAdapter adapter;
// 用来持久化一些配置信息
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainscreen);
sp = this.getSharedPreferences("config", Context.MODE_PRIVATE);
gv_main = (GridView) this.findViewById(R.id.gv_main);
//得到MainUIAdapter的adapter
adapter = new MainUIAdapter(this);
//设置adapter.
gv_main.setAdapter(adapter);
//设置每一项的点击事件.
gv_main.setOnItemClickListener(this);
gv_main.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, final View view,
int position, long id) {
if (position == 0) {
//得到AlertDialog.Builder
AlertDialog.Builder buider = new Builder(MainActivity.this);
buider.setTitle("设置");
buider.setMessage("请输入要更改的名称");
final EditText et = new EditText(MainActivity.this);
et.setHint("请输入文本");
buider.setView(et);
//
buider.setPositiveButton("确定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//得到输入的迷惑名字
String name = et.getText().toString().trim();
if ("".equals(name)) {
Toast.makeText(getApplicationContext(),
"内容不能为空", 0).show();
return;
} else {
Editor editor = sp.edit();
editor.putString("lost_name", name);
// 完成数据的提交
editor.commit();
TextView tv = (TextView) view.findViewById(R.id.tv_main_name);
//把名字更改,
tv.setText(name);
}
}
});
buider.setNegativeButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
buider.create().show();
}
return false;
}
});
}
/**
* 当gridview的条目被点击的时候 对应的回调 parent : girdview
* view : 当前被点击的条目 Linearlayout
* position : 点击条目对应的位置
* id : 代表的行号
*/
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.i(TAG, "点击的位置" + position);
switch (position) {
case 0: // 手机防盗
Log.i(TAG, "进入手机防盗");
//点击事件 ,进入LostProtectedActivity.
Intent lostIntent = new Intent(MainActivity.this, LostProtectedActivity.class);
startActivity(lostIntent);
break;
case 1: // 通讯卫士
Log.i(TAG, "进入通讯防盗");
Intent callsmsIntent = new Intent(MainActivity.this, CallSmsActivity.class);
startActivity(callsmsIntent);
break;
case 2: // 程序管理
Intent appmanagerIntent = new Intent(MainActivity.this, AppManagerActivity.class);
startActivity(appmanagerIntent);
break;
case 7: // 高级工具
Log.i(TAG, "进入高级工具");
Intent atoolsIntent = new Intent(MainActivity.this, AtoolsActivity.class);
startActivity(atoolsIntent);
break;
}
}
}
<pre class="java" name="code">package cn.itcast.mobilesafe.ui;
import cn.itcast.mobilesafe.R;
import cn.itcast.mobilesafe.util.MD5Encoder;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class LostProtectedActivity extends Activity implements OnClickListener {
private static final String TAG = "LostProtectedActivity";
private SharedPreferences sp;
private Dialog dialog;
private EditText et_pwd;
private EditText et_pwd_confirm;
private TextView tv_lost_protected_number;
private TextView tv_reentry_setup_guide;
private CheckBox cb_isprotecting;
//这里用到了自定义对话框dialog.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//得到sp.初始化.
sp = getSharedPreferences("config", Context.MODE_PRIVATE);
// 在进入后就立即进行判断,判断用户是否已经设置了密码
//如果设置了密码,也就是sp里面有值.就显示正常登陆的对话框
if(isPWDSteup()){
Log.i(TAG,"设置了密码,正常登陆的对话框");
showNormalEntryDialog();
}else{
//如果没有设置密码,就显示登陆注册的对话框.
Log.i(TAG,"没有设置密码,显示第一次对话框");
showFirstEntryDialog();
}
}
/**
* 正常登陆的对话框
*/
private void showNormalEntryDialog() {
dialog = new Dialog(this, R.style.MyDialog);
//点后退键不能取消.
dialog.setCancelable(false);
//dialog.setContentView(R.layout.first_entry_dialog);
//inflate方法二.内部实现一样.
View view = View.inflate(this, R.layout.normal_entry_dialog, null);
et_pwd = (EditText) view.findViewById(R.id.et_normal_entry_pwd);
Button bt_normal_ok = (Button) view.findViewById(R.id.bt_normal_dialog_ok);
Button bt_normal_cancle = (Button) view.findViewById(R.id.bt_normal_dialog_cancle);
bt_normal_ok.setOnClickListener(this);
bt_normal_cancle.setOnClickListener(this);
dialog.setContentView(view);
dialog.show();
}
/**
* 第一次进入程序时候的对话框
* android.jar sdk\platforms\android-10.所有的class和资源文件.xml
* 反编译android.jar. apktool可以反编译jar和class文件.所有的样式和主题都在value下.
*/
//自定义对话框.更改系统默认对话框的样式.
// <style name="MyDialog" parent="@android:style/Theme.Dialog">引用父类
// 更改父类的背景 <item name="android:windowBackground">@drawable/title_background</item>
// 添加的item <item name="android:windowNoTitle">true</item>
// </style>
// android:layout_marginLeft="5dip" 控件与控件之间
// padding_top ... 控件里面的东西 距离控件边框的距离
//layout_margaintop ... 控件与控件之间的距离
//图片可以使选择器
private void showFirstEntryDialog() {
//R.style.MyDialog.
dialog = new Dialog(this, R.style.MyDialog);
dialog.setCancelable(false);
//这种办法可以,但是我们没法用界面里面的控件.
//dialog.setContentView(R.layout.first_entry_dialog);
View view = View.inflate(this, R.layout.first_entry_dialog, null);
et_pwd = (EditText) view.findViewById(R.id.et_first_entry_pwd);
et_pwd_confirm = (EditText) view.findViewById(R.id.et_first_entry_pwd_confirm);
Button bt_ok = (Button) view.findViewById(R.id.bt_first_dialog_ok);
Button bt_cancle = (Button) view.findViewById(R.id.bt_first_dialog_cancle);
bt_ok.setOnClickListener(this);
bt_cancle.setOnClickListener(this);
dialog.setContentView(view);
dialog.show();
}
/**
* 检查sharedpreference里面是否有密码的设置
* @return
*/
private boolean isPWDSteup(){
//如果里面有数据,发挥为真,else返回为假.
String password = sp.getString("password",null);
if(password==null){
return false;
}else{
if("".equals(password)){
return false;
}else{
return true;
}
}
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_first_dialog_cancle:
dialog.dismiss();
finish();
break;
//得到pwd.
case R.id.bt_first_dialog_ok:
String pwd = et_pwd.getText().toString().trim();
String pwd_confirm = et_pwd_confirm.getText().toString().trim();
if("".equals(pwd)||"".equals(pwd_confirm)){
Toast.makeText(getApplicationContext(), "密码不能为空", 0).show();
return;
}else{
if(pwd.equals(pwd_confirm)){
//得到editor
Editor editor = sp.edit();
//写入加密后的pwd.
editor.putString("password", MD5Encoder.encode(pwd));
editor.commit();
}
else{
Toast.makeText(getApplicationContext(), "两次密码不同", 0).show();
return;
}
}
dialog.dismiss();
break;
case R.id.bt_normal_dialog_cancle:
dialog.dismiss();
finish();
break;
//普通登陆的时候.
case R.id.bt_normal_dialog_ok:
String password = et_pwd.getText().toString().trim();
if("".equals(password)){
Toast.makeText(getApplicationContext(), "请输入密码", 0).show();
return;
}else{
//realpwd为得到sp里面的密码.
//MD5Encoder.encode(password)为把新输入进的密码.
String realpwd = sp.getString("password", "");
if (realpwd.equals(MD5Encoder.encode(password))){
if(isSteup()){ // true
//在正常登陆的时候,也就是输入密码正确的时候.
Log.i(TAG,"加载手机防盗主界面");
//md5加密,是不可逆的.
setContentView(R.layout.lost_protected);
tv_lost_protected_number = (TextView) this.findViewById(R.id.tv_lost_protected_number);
tv_reentry_setup_guide = (TextView )this.findViewById(R.id.tv_reentry_setup_guide);
cb_isprotecting = (CheckBox )this.findViewById(R.id.cb_isprotecting);
// 初始化这些控件
String number = sp.getString("safenumber", "");
tv_lost_protected_number.setText("安全手机号码为:"+number);
//重新进入设置向导的点击事件
tv_reentry_setup_guide.setOnClickListener(this);
// 初始化checkbox的状态
boolean isprotecting = sp.getBoolean("isprotecting", false);
if(isprotecting){
cb_isprotecting.setText("手机防盗保护中");
cb_isprotecting.setChecked(true);
}
cb_isprotecting.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
cb_isprotecting.setText("手机防盗保护中");
Editor editor = sp.edit();
editor.putBoolean("isprotecting", true);
editor.commit();
}else {
cb_isprotecting.setText("没有开启防盗保护");
Editor editor = sp.edit();
editor.putBoolean("isprotecting", false);
editor.commit();
}
}
});
}else{
Log.i(TAG,"激活设置向导界面");
finish();
//激活设置向导界面.
Intent intent = new Intent(LostProtectedActivity.this,SetupGudie1Activity.class);
startActivity(intent);
}
}else{
Toast.makeText(getApplicationContext(), "密码错误", 0).show();
return;
}
}
dialog.dismiss();
break;
case R.id.tv_reentry_setup_guide:
finish();
Intent intent = new Intent(LostProtectedActivity.this,SetupGudie1Activity.class);
startActivity(intent);
}
}
/**
* 判断用户是否进行过设置向导
* @return
*/
//判断是否设置过设置向导,或者判断是否保存过密码,都是这种类型的boolean.
private boolean isSteup(){
return sp.getBoolean("issteupalready", false);
}
}