package com.guangli.applock;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethod;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.guangli.applock.BrowseApplicationInfoAdapter.OnClickBoxListener;
import com.guangli.applock.BrowseApplicationInfoAdapter.ViewHolder;
public class AppLockActivity extends Activity implements OnClickListener,OnClickBoxListener,OnItemClickListener{
/**
* @author lance.liang
* this activity is for pw setting ,app lock setting
* ��Ӧ�ɵ������棬�״ν���ʱ�������룻�Ժ���� �������뷽����ʾӦ���б���м�������
*/
Button btn_confirm,btn_ok;
EditText pw,confirmEditText,pwInput;//when init input twice pw,next time entry invalidate pw;
ListView appListView; //list apps;
private List<AppInfo> mListAppInfo;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
BrowseApplicationInfoAdapter adapter;
LinearLayout pwLayout; //the pw init layout
LinearLayout applocklLayout; // the app list layout
LinearLayout pwInputLayout; // the pw invalidate layout
Button btn_editPw;
String pw_stroed;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_lock_setting);
initRes();
sharedPreferences = getSharedPreferences(Meta.SP_FILE,MODE_WORLD_READABLE);
editor = sharedPreferences.edit();
mListAppInfo = new ArrayList<AppInfo>();
queryapps();
adapter = new BrowseApplicationInfoAdapter(this, mListAppInfo);
adapter.setOnClickBoxListener(this);
appListView.setAdapter(adapter);
appListView.setOnItemClickListener(this);
pw_stroed = sharedPreferences.getString(Meta.PW, "");
if(!pw_stroed.equals("")){
pwLayout.setVisibility(View.GONE);
applocklLayout.setVisibility(View.GONE);
pwInputLayout.setVisibility(View.VISIBLE);
btn_ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(pw_stroed.equals(pwInput.getText().toString())){
applocklLayout.setVisibility(View.VISIBLE);
pwInputLayout.setVisibility(View.GONE);
hideInputMethod();
} else {
Toast.makeText(AppLockActivity.this,getString(R.string.password_error),Toast.LENGTH_LONG).show();
}
}
});
}
}
/**
* ��ʼ��ui��Դ
*/
private void initRes() {
btn_confirm = (Button) findViewById(R.id.btn_confirm);
btn_confirm.setOnClickListener(this);
btn_editPw = (Button) findViewById(R.id.btn_editPw);
btn_editPw.setOnClickListener(this);
btn_ok = (Button) findViewById(R.id.btn_ok);
pw = (EditText) findViewById(R.id.password);
pwInput = (EditText) findViewById(R.id.pw);
confirmEditText = (EditText) findViewById(R.id.passwordComfirm);
pwLayout = (LinearLayout) findViewById(R.id.passwordlayout);
applocklLayout = (LinearLayout) findViewById(R.id.applistlayout);
pwInputLayout = (LinearLayout) findViewById(R.id.layoutPwInput);
appListView = (ListView) findViewById(R.id.applist);
}
public void onClick(View v) {
switch (v.getId()) {
default:
pwLayout.setVisibility(View.GONE);
applocklLayout.setVisibility(View.GONE);
pwInputLayout.setVisibility(View.VISIBLE);
pwInput.setText("");
btn_ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(pw_stroed.equals(pwInput.getText().toString())){
pwLayout.setVisibility(View.VISIBLE);
pwInputLayout.setVisibility(View.GONE);
hideInputMethod();
} else {
Toast.makeText(AppLockActivity.this,getString(R.string.password_error),Toast.LENGTH_LONG).show();
}
}
});
break;
case R.id.btn_confirm:
//data check of rihtful
invaldiateNewPassword();
break;
}
hideInputMethod();
}
/**
* ��������֤
*/
private void invaldiateNewPassword(){
String pwString = pw.getText().toString();
String confirmString = confirmEditText.getText().toString();
if(pwString.length()<1 && confirmString.length()<1){
Toast .makeText(this, getString(R.string.no_empty), 1000).show();
return ;
}
if(!pwString.equals(confirmString)){
Toast.makeText(this, getString(R.string.twice_diff), 1000).show();
return ;
}
pw_stroed = pwString;
editor.putString(Meta.PW,pwString);
pwLayout.setVisibility(View.GONE);
applocklLayout.setVisibility(View.VISIBLE);
}
//setupService
private void setupService(){
Intent intent = new Intent(AppStartListenerService.ACTION_FOREGROUND);
intent.setClass(this,AppStartListenerService.class);
editor.commit();
this.startService(intent);
}
/**
* ��ѯӦ��
* PackageManager��������������װ�����ǵ��豸�ϵ�Ӧ�ð��ĸ�����Ϣ��
* ����ͨ��getPackageManager()������ȡPackageManager��ʵ������
*/
private void queryapps(){
PackageManager pmManager = this.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN,null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
//��ѯ��ȡ����ResolveInfo����
List<ResolveInfo> resolveInfos = pmManager.queryIntentActivities(mainIntent, PackageManager.SIGNATURE_MATCH);
//����ϵͳ������name
Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(pmManager));
if(mListAppInfo!=null) {
mListAppInfo.clear();
for (ResolveInfo info:resolveInfos) {
String packagename = info.activityInfo.packageName;
if(packagename.equals("com.guangli.applock")) continue;
String activityname = info.activityInfo.name;
String lable = (String) info.loadLabel(pmManager);
Drawable iconDrawable = info.loadIcon(pmManager);
AppInfo appInfo = new AppInfo();
appInfo.setAppIcon(iconDrawable);
appInfo.setAppLabel(lable);
appInfo.setAppName(activityname);
appInfo.setPkgName(packagename);
boolean locked = sharedPreferences.getBoolean(packagename+Meta.LOKCED, false);
appInfo.setChecked(locked);
if(locked){
appInfo.setLockeIcon(getResources().getDrawable(R.drawable.lock));
} else {
appInfo.setLockeIcon(getResources().getDrawable(R.drawable.unlock));
}
Intent luanchIntent = new Intent();
luanchIntent.setComponent(new ComponentName(packagename,activityname));
appInfo.setIntent(luanchIntent);
mListAppInfo.add(appInfo);
}
}
}
//clicke the clickbox
public void OnClickBox(int position, boolean checked) {
// TODO Auto-generated method stub
AppInfo appInfo = (AppInfo) adapter.getItem(position);
appInfo.setChecked(checked);
if(checked){
appInfo.setLockeIcon(getResources().getDrawable(R.drawable.lock));
} else {
appInfo.setLockeIcon(getResources().getDrawable(R.drawable.unlock));
}
int count = appListView.getChildCount();
for(int i=0;i<count;i++){
View v = appListView.getChildAt(i);
BrowseApplicationInfoAdapter.ViewHolder holder = (ViewHolder) v.getTag();
if(holder.checkbox.isChecked()){
holder.lock.setImageResource(R.drawable.lock);
}else {
holder.lock.setImageResource(R.drawable.unlock);
}
}
editor.putBoolean(appInfo.getPkgName()+Meta.LOKCED,checked);
mListAppInfo.set(position, appInfo);
adapter.setDatas(mListAppInfo);
Log.e("OnClickBox", "--"+position);
}
private void hideInputMethod(){
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
}
@Override
protected void onStop() {
setupService();
super.onStop();
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
}
}