package xyz.klinker.blur.addons.utils;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.Toast;
import xyz.klinker.blur.R;
import xyz.klinker.blur.addons.settings.IconPickerActivity;
import xyz.klinker.blur.launcher3.BubbleTextView;
import xyz.klinker.blur.launcher3.IconCache;
import xyz.klinker.blur.launcher3.InvariantDeviceProfile;
import xyz.klinker.blur.launcher3.ItemInfo;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ItemDropHelper {
private Context context;
private Intent originalIntent;
private String originalTitle;
private int originalX;
private int originalY;
public ItemDropHelper(Context context) {
this.context = context;
}
public void setItemBeingDragged(ItemInfo info) {
if (info == null) {
this.originalIntent = null;
this.originalTitle = "";
this.originalX = -1;
this.originalY = -1;
} else {
this.originalIntent = info.getIntent();
this.originalTitle = info.title + "";
this.originalX = info.cellX;
this.originalY = info.cellY;
}
}
public void displayPopupIfNoChange(ItemInfo newLocation, View currentDragView) {
if (newLocation == null) {
return;
}
View icon = currentDragView;
if (icon instanceof FrameLayout) {
icon = ((ViewGroup) icon).getChildAt(0);
}
if (originalX == newLocation.cellX &&
originalY == newLocation.cellY) {
//getPopupMenu(context, icon).show();
}
}
public void displayPopupIfNoChange(int newX, int newY, View currentDragView) {
View icon = currentDragView;
if (icon instanceof FrameLayout) {
icon = ((ViewGroup) icon).getChildAt(0);
}
Log.v("folder_drag", "orgX: " + originalX + ", orgY: " + originalY);
Log.v("folder_drag", "newX: " + newX + ", newY: " + newY);
if (originalX == newX && originalY == newY) {
//getPopupMenu(context, icon).show();
}
}
private PopupMenu getPopupMenu(final Context context, final View icon) {
final int CHANGE_NAME = 3;
final int CHANGE_ICON = 2;
final int REMOVE_CUSTOMS = 1;
PackageManager pm = context.getPackageManager();
final ActivityInfo info = originalIntent.resolveActivityInfo(pm, PackageManager.GET_ACTIVITIES);
final PopupMenu menu = new PopupMenu(context, icon);
menu.getMenu().add(Menu.NONE, REMOVE_CUSTOMS, Menu.NONE, context.getString(R.string.restore_defaults));
menu.getMenu().add(Menu.NONE, CHANGE_ICON, Menu.NONE, context.getString(R.string.custom_icon));
menu.getMenu().add(Menu.NONE, CHANGE_NAME, Menu.NONE, context.getString(R.string.custom_name));
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case CHANGE_NAME:
// Creating alert Dialog for editing the name
AlertDialog.Builder alertDialog = changeNameDialog(context, icon);
alertDialog.show();
break;
case CHANGE_ICON:
String pack = PreferenceManager.getDefaultSharedPreferences(context).getString("icon_pack", "");
if (pack.isEmpty()) {
// then they don't have a custom icon pack so they can't change the icon
Toast.makeText(context, R.string.no_icon_pack_set, Toast.LENGTH_SHORT).show();
} else {
// here we will start the activity to choose the icon from the pack.
Intent picker = new Intent(context, IconPickerActivity.class);
picker.putExtra("package", pack);
picker.putExtra("icon_name", info.name.toLowerCase());
context.startActivity(picker);
}
break;
case REMOVE_CUSTOMS:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor e = sharedPreferences.edit();
e.remove(info.name.toLowerCase());
e.remove(originalTitle);
String names = sharedPreferences.getString("launcher_custom_app_names", "");
names = names.replace(originalTitle + ":|:", "");
Set<String> icons = sharedPreferences.getStringSet("custom_icons", new HashSet<String>());
icons.remove(info.name.toLowerCase());
e.putString("launcher_custom_app_names", names);
e.putStringSet("custom_icons", icons);
e.commit();
IconCache cache = new IconCache(context, new InvariantDeviceProfile());
cache.updateDbIcons(new HashSet<String>());
// completely restart the Launcher
android.os.Process.killProcess(android.os.Process.myPid());
break;
}
return false;
}
});
return menu;
}
private AlertDialog.Builder changeNameDialog(final Context context, final View view) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
// Setting Dialog Message
alertDialog.setMessage(context.getString(R.string.custom_name) + ": " + originalTitle);
final EditText input = new EditText(context);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setHint(R.string.type_name);
input.requestFocus();
input.setLayoutParams(lp);
alertDialog.setView(input);
alertDialog.setPositiveButton(context.getString(R.string.change), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
String currentList = sharedPrefs.getString("launcher_custom_app_names", "");
SharedPreferences.Editor e = sharedPrefs.edit();
List<String> customNames = Arrays.asList(sharedPrefs.getString("launcher_custom_app_names", "").split(":|:"));
if (!customNames.contains(originalTitle)) {
e.putString("launcher_custom_app_names", currentList + originalTitle + ":|:");
}
e.putString(originalTitle, input.getText().toString());
e.commit();
if (view != null) {
if (view instanceof BubbleTextView) {
((BubbleTextView) view).setText(input.getText().toString());
} else {
// completely restart the Launcher
android.os.Process.killProcess(android.os.Process.myPid());
}
}
}
});
alertDialog.setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
return alertDialog;
}
}