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.
220 lines
9.0 KiB
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);
|
|
}
|
|
|
|
} |