You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CustoMIUIzer/app/src/main/java/name/mikanoshi/customiuizer/subs/SortableList.java

220 lines
9.0 KiB
Java

package name.mikanoshi.customiuizer.subs;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SortableListView;
import android.widget.Toast;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.UUID;
import miui.app.ActionBar;
import miui.util.AttributeResolver;
import name.mikanoshi.customiuizer.R;
import name.mikanoshi.customiuizer.SubFragment;
import name.mikanoshi.customiuizer.utils.Helpers;
import name.mikanoshi.customiuizer.utils.PreferenceAdapter;
@SuppressWarnings("ConstantConditions")
public class SortableList extends SubFragment {
String key;
int titleResId;
boolean activities;
SortableListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
this.padded = false;
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
supressMenu = true;
super.onActivityCreated(savedInstanceState);
ActionBar actionBar = getActionBar();
if (actionBar != null) try { actionBar.showSplitActionBar(true, true); } catch (Throwable ignore) {}
Bundle args = getArguments();
key = args.getString("key");
titleResId = args.getInt("titleResId");
activities = args.getBoolean("activities", false);
if (getView() == null) return;
listView = getView().findViewById(android.R.id.list);
if (!activities) try {
Field ssField = SortableListView.class.getDeclaredField("mSnapshotShadow");
ssField.setAccessible(true);
int lightShadow = getResources().getIdentifier("dynamic_listview_dragging_item_shadow_light", "drawable", "miui");
int darkShadow = getResources().getIdentifier("dynamic_listview_dragging_item_shadow_dark", "drawable", "miui");
ssField.set(listView, getResources().getDrawable(Helpers.isNightMode(getContext()) ? darkShadow : lightShadow, getContext().getTheme()));
} catch (Throwable e) {
e.printStackTrace();
}
listView.setAdapter(new PreferenceAdapter(getContext(), key, activities));
if (activities) listView.setOnOrderChangedListener(null); else
listView.setOnOrderChangedListener(new SortableListView.OnOrderChangedListener() {
@Override
public void OnOrderChanged(int oldPos, int newPos) {
if (oldPos == newPos) return;
String itemStr = Helpers.prefs.getString(key, "");
if (itemStr.isEmpty()) return;
String[] itemArr = itemStr.trim().split("\\|");
ArrayList<String> itemList = new ArrayList<String>(Arrays.asList(itemArr));
String uuid = itemList.get(oldPos);
itemList.remove(oldPos);
itemList.add(newPos, uuid);
Helpers.prefs.edit().putString(key, TextUtils.join("|", itemList)).apply();
((PreferenceAdapter)listView.getAdapter()).updateItems();
((PreferenceAdapter)listView.getAdapter()).notifyDataSetChanged();
}
});
if (!activities)
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String uuid = ((PreferenceAdapter)parent.getAdapter()).getItem(position);
Bundle args = new Bundle();
args.putString("key", key + "_" + uuid);
args.putInt("actions", MultiAction.Actions.LOCKSCREEN.ordinal());
openSubFragment(new MultiAction(), args, Helpers.SettingsType.Edit, Helpers.ActionBarType.Edit, titleResId, R.layout.prefs_multiaction);
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
deleteItem(position);
// PopupMenu popup = new PopupMenu(getContext(), view);
// popup.inflate(R.menu.menu_itemoptions);
// popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
// @Override
// public boolean onMenuItemClick(MenuItem menuItem) {
// switch (menuItem.getItemId()) {
// case R.id.changeicon:
// float density = getContext().getResources().getDisplayMetrics().density;
// GuidePopup iconsPopup = new GuidePopup(getContext());
// GridView grid = new GridView(getContext());
// grid.setNumColumns(4);
// grid.setAdapter(new IconGridAdapter(getContext()));
// grid.setBackgroundColor(Color.rgb(108, 108, 111));
// grid.setPadding(Math.round(7 * density), Math.round(5 * density), 0, Math.round(5 * density));
// grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// @Override
// public void onItemClick(AdapterView parent2, View view2, int position2, long id2) {
// String uuid = ((PreferenceAdapter)parent.getAdapter()).getItem(position);
// Helpers.prefs.edit().putString(key + "_" + uuid + "_icon", ((IconGridAdapter)parent2.getAdapter()).getItem(position2)).apply();
// iconsPopup.dismiss(true);
// ((PreferenceAdapter)parent.getAdapter()).notifyDataSetChanged();
// }
// });
// iconsPopup.setContentView(grid);
// iconsPopup.setArrowMode(parent.getChildAt(0) == view ? 1 : 0);
// iconsPopup.setWidth(Math.round(200 * density));
// iconsPopup.setContentWidth(Math.round(200 * density));
// iconsPopup.showAsDropDown(view);
// break;
// case R.id.deleteitem:
// PreferenceAdapter adapter = (PreferenceAdapter)listView.getAdapter();
// String uuid = adapter.getItem(position);
// String items = Helpers.prefs.getString(key, "");
// Helpers.prefs.edit().putString(key, items == null || items.isEmpty() ? "" : items.replace(uuid, "").replace("||", "|").replaceAll("^\\|", "").replaceAll("\\|$", "")).apply();
// adapter.updateItems();
// adapter.notifyDataSetChanged();
// invalidateOptionsMenu();
// break;
// }
// return true;
// }
// });
// popup.show();
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_itemactions, menu);
//menu.getItem(0).setEnabled(listView.getChildCount() < 10);
menu.getItem(0).setIcon(AttributeResolver.resolveDrawable(getActivity(), getResources().getIdentifier("actionBarNewIcon", "attr", "miui")));
menu.getItem(1).setIcon(AttributeResolver.resolveDrawable(getActivity(), getResources().getIdentifier("actionBarDeleteIcon", "attr", "miui")));
return true;
}
private String createNewUUID() {
return UUID.randomUUID().toString().replaceAll("-", "").toLowerCase();
}
private void createNewItem(String uuid) {
String items = Helpers.prefs.getString(key, "");
Helpers.prefs.edit().putString(key, items.isEmpty() ? uuid : items + "|" + uuid).apply();
PreferenceAdapter adapter = (PreferenceAdapter)listView.getAdapter();
adapter.updateItems();
adapter.notifyDataSetChanged();
invalidateOptionsMenu();
}
private void deleteItem(int position) {
PreferenceAdapter adapter = (PreferenceAdapter)listView.getAdapter();
String items = Helpers.prefs.getString(key, "");
Helpers.prefs.edit().putString(key, items.isEmpty() ? "" : items.replace(adapter.getItem(position), "").replace("||", "|").replaceAll("^\\|", "").replaceAll("\\|$", "")).apply();
adapter.updateItems();
adapter.notifyDataSetChanged();
invalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.deleteitem) {
Toast.makeText(getContext(), R.string.delete_item_info, Toast.LENGTH_SHORT).show();
return true;
} else if (item.getItemId() == R.id.additem) {
if (activities) {
Bundle args = new Bundle();
args.putBoolean("activity", true);
args.putString("key", key);
AppSelector activitySelect = new AppSelector();
activitySelect.setTargetFragment(SortableList.this, 2);
openSubFragment(activitySelect, args, Helpers.SettingsType.Edit, Helpers.ActionBarType.HomeUp, R.string.select_app, R.layout.prefs_app_selector);
} else {
//if (listView.getChildCount() >= 10) return true;
createNewItem(createNewUUID());
}
return true;
}
return super.onOptionsItemSelected(item);
}
public void onPrepareOptionsMenu(Menu menu) {}
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 2) {
String activityValue = data.getStringExtra("activity");
int activityUser = data.getIntExtra("user", 0);
if (activityValue == null || activityUser < 0) return;
String uuid = createNewUUID();
Helpers.prefs.edit().putInt(key + "_" + uuid + "_action", 20).putString(key + "_" + uuid + "_activity", activityValue).putInt(key + "_" + uuid + "_activity_user", activityUser).apply();
createNewItem(uuid);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}