package de.theknut.xposedgelsettings.ui;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme;
import net.margaritov.preference.colorpicker.ColorPickerDialog;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import de.theknut.xposedgelsettings.R;
import de.theknut.xposedgelsettings.hooks.Common;
import de.theknut.xposedgelsettings.hooks.appdrawer.tabsandfolders.Tab;
public class SaveActivity extends ListActivity {
int mode, itemId;
public static final int MODE_MANAGE_TAB = 3;
public static final int MODE_MANAGE_FOLDER = 7;
public static final int CONVERT_APPSWIDGETS = 4;
public static final int MODE_PICK_COLOR = 5;
public static final int MODE_PICK_GESTURE = 6;
public static final int GESTURE_CALL = 20;
ColorPickerDialog colorPickerDialog;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
mode = intent.getIntExtra("mode", 1);
itemId = intent.getIntExtra("itemid", -1);
SharedPreferences prefs = getSharedPreferences(Common.PREFERENCES_NAME, MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
if (mode == MODE_MANAGE_TAB || mode == MODE_MANAGE_FOLDER) {
String key = mode == MODE_MANAGE_TAB ? "appdrawertabdata" : "appdrawerfolderdata";
ArrayList<String> order = intent.getStringArrayListExtra(mode == MODE_MANAGE_TAB ? "tabsdata" : "folderdata");
editor.remove(key)
.putStringSet(key, new LinkedHashSet<String>(order))
.commit();
} else if (mode == CONVERT_APPSWIDGETS) {
String key = "hiddenwidgets";
Set<String> items = prefs.getStringSet(key, new HashSet<String>());
Set<String> tmp = new HashSet<String>();
if (items.size() != 0 && items.iterator().next().contains("#")) {
Iterator<String> it = items.iterator();
while (it.hasNext()) {
String[] item = it.next().split("#");
if (item.length > 1) {
tmp.add(item[0] + "/" + item[0] + item[1]);
}
}
prefs.edit().remove(key).commit();
prefs.edit().putStringSet(key, tmp).commit();
}
key = "hiddenapps";
items = prefs.getStringSet(key, new HashSet<String>());
tmp = new HashSet<String>();
if (items.size() != 0 && items.iterator().next().contains("#")) {
PackageManager pm = getPackageManager();
Iterator<String> it = items.iterator();
while (it.hasNext()) {
String[] item = it.next().split("#");
if (item.length > 1) {
try {
tmp.add(pm.getLaunchIntentForPackage(item[0]).getComponent().flattenToString());
} catch (Exception e) { }
}
}
prefs.edit().remove(key).commit();
prefs.edit().putStringSet(key, tmp).commit();
}
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo process : am.getRunningAppProcesses()) {
if (Common.PACKAGE_NAMES.contains(process.processName)) {
am.killBackgroundProcesses(process.processName);
}
}
}
if (!(getIntent().hasExtra("initcolor") || mode == MODE_PICK_GESTURE)) {
sendBroadcast(new Intent(Common.XGELS_ACTION_RELOAD_SETTINGS));
finish();
}
}
@Override
protected void onResume() {
super.onResume();
if (getIntent().hasExtra("initcolor")) {
colorPickerDialog = new ColorPickerDialog(this, getIntent().getIntExtra("initcolor", Color.WHITE));
colorPickerDialog.setDefaultColor(Tab.DEFAULT_COLOR);
colorPickerDialog.setOnColorChangedListener(new ColorPickerDialog.OnColorChangedListener() {
@Override
public void onColorChanged(int color) {
Intent intent = new Intent(Common.XGELS_ACTION_MODIFY_TAB);
intent.putExtra("color", color);
sendBroadcast(intent);
finish();
}
});
colorPickerDialog.show();
} else if (mode == MODE_PICK_GESTURE) {
new MaterialDialog.Builder(this)
.theme(Theme.DARK)
.title("Pick gesture action")
.items(getResources().getStringArray(R.array.icongestures_entries))
.itemsCallback(new MaterialDialog.ListCallback() {
@Override
public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
switch (which) {
case 0: // call contact
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, GESTURE_CALL);
}
dialog.dismiss();
}
})
.build()
.show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && data != null) {
return;
}
if (requestCode == GESTURE_CALL) {
Uri uri = data.getData();
if (uri == null) return;
Cursor c = null;
try {
c = getContentResolver().query(uri, new String[]{
ContactsContract.CommonDataKinds.Phone.NUMBER},
null, null, null);
if (c != null && c.moveToFirst()) {
String key = "icongestures";
SharedPreferences prefs = getSharedPreferences(Common.PREFERENCES_NAME, CONTEXT_IGNORE_SECURITY);
Set<String> iconGestures = prefs.getStringSet(key, new HashSet<String>());
Iterator<String> it = iconGestures.iterator();
while (it.hasNext()) {
String[] split = it.next().split("#");
if (Integer.parseInt(split[0]) == itemId) {
it.remove();
break;
}
}
iconGestures.add(itemId + "#call#" + c.getString(0));
prefs.edit().remove(key)
.putStringSet(key, iconGestures)
.commit();
sendBroadcast(new Intent(Common.XGELS_ACTION_RELOAD_SETTINGS));
finish();
}
} finally {
if (c != null) {
c.close();
}
}
}
}
}