package com.forfan.bigbang.component.activity.setting;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Environment;
import android.os.Handler;
import android.os.Process;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.forfan.bigbang.R;
import com.forfan.bigbang.baseCard.AbsCard;
import com.forfan.bigbang.component.activity.SettingFloatViewActivity;
import com.forfan.bigbang.component.activity.whitelist.SelectionDbHelper;
import com.forfan.bigbang.component.service.BigBangMonitorService;
import com.forfan.bigbang.util.AESUtils;
import com.forfan.bigbang.util.ConstantUtil;
import com.forfan.bigbang.util.IOUtil;
import com.forfan.bigbang.util.LogUtil;
import com.forfan.bigbang.util.NativeHelper;
import com.forfan.bigbang.util.ToastUtil;
import com.forfan.bigbang.view.Dialog;
import com.forfan.bigbang.view.DialogFragment;
import com.forfan.bigbang.view.SimpleDialog;
import com.shang.commonjar.contentProvider.SPHelper;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.LinkedList;
import static com.forfan.bigbang.util.ConstantUtil.BROADCAST_BIGBANG_MONITOR_SERVICE_MODIFIED;
import static com.forfan.bigbang.util.ConstantUtil.BROADCAST_CLIPBOARD_LISTEN_SERVICE_MODIFIED;
import static com.shang.commonjar.contentProvider.SPHelperImpl.MAINSPNAME;
/**
* Created by penglu on 2015/11/23.
*/
public class SLSettingCard extends AbsCard {
public SLSettingCard(Context context) {
super(context);
initView(context);
}
private void initView(Context context) {
mContext = context;
LayoutInflater.from(context).inflate(R.layout.card_sl_setting, this);
findViewById(R.id.default_setting_rl).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDefaultDialog();
}
});
findViewById(R.id.save_setting_rl).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showSaveDialog();
}
});
findViewById(R.id.load_setting_rl).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showLoadDialog();
}
});
}
private void showLoadDialog() {
SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) {
@Override
protected void onBuildDone(Dialog dialog) {
dialog.layoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
super.onBuildDone(dialog);
}
@Override
public void onPositiveActionClicked(DialogFragment fragment) {
// 这里是保持开启
super.onPositiveActionClicked(fragment);
loadSettings();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onCancel(dialog);
}
};
builder.message(mContext.getString(R.string.load_setting_tips))
.positiveAction(mContext.getString(R.string.confirm))
.negativeAction(mContext.getString(R.string.cancel));
DialogFragment fragment = DialogFragment.newInstance(builder);
fragment.show(((AppCompatActivity) mContext).getSupportFragmentManager(), null);
}
private void showSaveDialog() {
SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) {
@Override
protected void onBuildDone(Dialog dialog) {
dialog.layoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
super.onBuildDone(dialog);
}
@Override
public void onPositiveActionClicked(DialogFragment fragment) {
// 这里是保持开启
super.onPositiveActionClicked(fragment);
saveSettings();
}
@Override
public void onNegativeActionClicked(DialogFragment fragment) {
super.onNegativeActionClicked(fragment);
saveOCR();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onCancel(dialog);
}
};
builder.message(mContext.getString(R.string.save_setting_tips))
.positiveAction(mContext.getString(R.string.save_other))
.negativeAction(mContext.getString(R.string.only_save_ocr))
.neutralAction(mContext.getString(R.string.cancel));
DialogFragment fragment = DialogFragment.newInstance(builder);
fragment.show(((AppCompatActivity) mContext).getSupportFragmentManager(), null);
}
private void showDefaultDialog() {
SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) {
@Override
protected void onBuildDone(Dialog dialog) {
dialog.layoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
super.onBuildDone(dialog);
}
@Override
public void onPositiveActionClicked(DialogFragment fragment) {
// 这里是保持开启
defaultSettings();
super.onPositiveActionClicked(fragment);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onCancel(dialog);
}
};
builder.message(mContext.getString(R.string.default_setting_tips))
.positiveAction(mContext.getString(R.string.confirm))
.negativeAction(mContext.getString(R.string.cancel));
DialogFragment fragment = DialogFragment.newInstance(builder);
fragment.show(((AppCompatActivity) mContext).getSupportFragmentManager(), null);
}
private void defaultSettings() {
String ocr = SPHelper.getString(ConstantUtil.DIY_OCR_KEY, "");
SPHelper.clear();
SPHelper.save(ConstantUtil.DIY_OCR_KEY, ocr);
IOUtil.delete(SettingFloatViewActivity.FLOATVIEW_IMAGE_PATH);
SelectionDbHelper helper=new SelectionDbHelper(mContext);
helper.deleteAll();
File spDir=new File(mContext.getFilesDir().getParentFile()+File.separator+"shared_prefs","sp_name.xml");
if (spDir.exists()) {
spDir.delete();
}
mContext.sendBroadcast(new Intent(ConstantUtil.EFFECT_AFTER_REBOOT_BROADCAST));
ToastUtil.show(R.string.effect_after_reboot);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Process.killProcess(Process.myPid());
}
},1500);
}
private void saveSettings(){
String ocr = SPHelper.getString(ConstantUtil.DIY_OCR_KEY, "");
SPHelper.save(ConstantUtil.DIY_OCR_KEY, "");
File file = mContext.getFilesDir();
File dbDir=new File(file.getParentFile(),"databases");
File spDir=new File(file.getParentFile(),"shared_prefs");
File desDir= new File(Environment.getExternalStorageDirectory()+File.separator+"quannengfenci/backup");
try {
IOUtil.copyFile(dbDir.getAbsolutePath(),new File(desDir,"databases").getAbsolutePath());
IOUtil.copyFile(SettingFloatViewActivity.FLOATVIEW_IMAGE_PATH,new File(desDir,"floatview.png").getAbsolutePath());
IOUtil.copyFile(spDir.getAbsolutePath(),new File(desDir,"shared_prefs").getAbsolutePath());
ToastUtil.show(R.string.save_success);
} catch (IOException e) {
ToastUtil.show(R.string.save_fail);
}
SPHelper.save(ConstantUtil.DIY_OCR_KEY, ocr);
}
private void saveOCR(){
String ocr = SPHelper.getString(ConstantUtil.DIY_OCR_KEY, "");
String imei= NativeHelper.getImei(mContext);
String cpu=NativeHelper.getCpuAbi();
LogUtil.d("ocr="+ocr);
LogUtil.d("imei="+imei);
LogUtil.d("cpu="+cpu);
File desOCRFile= new File(Environment.getExternalStorageDirectory()+File.separator+"quannengfenci/backup/OCR/ocr.txt");
desOCRFile.getParentFile().mkdirs();
String ocrEncrypt = AESUtils.encrypt(imei+cpu,ocr);
InputStream inputStream=new ByteArrayInputStream(ocrEncrypt.getBytes());
try {
IOUtil.saveToFile(inputStream,desOCRFile);
ToastUtil.show(R.string.save_success);
} catch (IOException e) {
ToastUtil.show(R.string.save_fail);
}finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void loadSettings(){
boolean dbRestore=true;
boolean spRestore=true;
String toast="";
String toastEnd=mContext.getString(R.string.effect_after_reboot);
File file = mContext.getFilesDir();
File dbDir=new File(file.getParentFile(),"databases");
File spDir=new File(file.getParentFile().getAbsolutePath()+"/shared_prefs");
File desDbDir= new File(Environment.getExternalStorageDirectory()+File.separator+"quannengfenci/backup/databases");
File desSpFile= new File(Environment.getExternalStorageDirectory()+File.separator+"quannengfenci/backup/shared_prefs");
File floatViewFile = new File(Environment.getExternalStorageDirectory()+File.separator+"quannengfenci/backup/","floatview.png");
if (floatViewFile.exists()){
try {
IOUtil.copyFile(floatViewFile.getAbsolutePath(),SettingFloatViewActivity.FLOATVIEW_IMAGE_PATH);
} catch (IOException e) {
}
}
if (desDbDir.exists()) {
IOUtil.deleteDirs(dbDir.getAbsolutePath());
try {
IOUtil.copyFile(desDbDir.getAbsolutePath(),dbDir.getAbsolutePath());
dbRestore=true;
} catch (IOException e) {
dbRestore=false;
}
}
String ocrOrigin = SPHelper.getString(ConstantUtil.DIY_OCR_KEY, "");
if (desSpFile.exists()) {
SPHelper.clear();
IOUtil.deleteDirs(spDir.getAbsolutePath());
try {
IOUtil.copyFile(desSpFile.getAbsolutePath(),spDir.getAbsolutePath());
spRestore=true;
} catch (IOException e) {
spRestore=false;
}
}
String imei= NativeHelper.getImei(mContext);
String cpu=NativeHelper.getCpuAbi();
LogUtil.d("imei="+imei);
LogUtil.d("cpu="+cpu);
File desOCRFile= new File(Environment.getExternalStorageDirectory()+File.separator+"quannengfenci/backup/OCR/ocr.txt");
if (!desOCRFile.exists()){
return;
}
String ocrBackup=null;
try {
String ocrEncrypt = IOUtil.readString(desOCRFile);
ocrBackup = AESUtils.decrypt(imei+cpu,ocrEncrypt);
} catch (IOException e) {
e.printStackTrace();
}
String ocr="";
if (!dbRestore||!spRestore){
toast=mContext.getString(R.string.restore_failed);
}else {
toast=mContext.getString(R.string.restore_success);
}
if (!TextUtils.isEmpty(ocrOrigin)){
ocr=ocrOrigin;
toast+=mContext.getString(R.string.restore_ocr_origin);
}else if (!TextUtils.isEmpty(ocrBackup)){
ocr=ocrBackup;
toast+=mContext.getString(R.string.restore_ocr_back);
}
saveOcrKeyWithSP(ocr);
mContext.sendBroadcast(new Intent(ConstantUtil.EFFECT_AFTER_REBOOT_BROADCAST));
ToastUtil.show(toast+toastEnd);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Process.killProcess(Process.myPid());
}
},1500);
}
private void saveOcrKeyWithSP(String ocrKey){
SharedPreferences sp = mContext.getSharedPreferences(MAINSPNAME, Context.MODE_PRIVATE);
sp.edit().putString(ConstantUtil.DIY_OCR_KEY,ocrKey).commit();
}
}