package com.nagopy.android.xposed.utilities.preference; import java.util.HashSet; import java.util.Set; import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; import android.util.SparseBooleanArray; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.ToggleButton; import com.nagopy.android.common.helper.Preferences; import com.nagopy.android.xposed.utilities.setting.AlwaysUsePerAppsList; import com.nagopy.android.xposed.utilities.setting.AlwaysUsePerAppsList.PerAppsSetting; public class AlwaysUsePerAppsSettingActivity extends Activity implements OnClickListener { private static final int ID_BUTTON_CHECK_ALL = 1; private static final int ID_BUTTON_DELETE = 2; private Preferences preferences; private AlwaysUsePerAppsList mAlwaysUsePerAppsList; private ListView mListView; private PerAppsAdapter mAdapter; private PackageManager mPackageManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context context = getApplicationContext(); preferences = new Preferences(context); updateList(); LinearLayout ll = new LinearLayout(context); ll.setOrientation(LinearLayout.VERTICAL); mListView = new ListView(context); mAdapter = new PerAppsAdapter(); mListView.setAdapter(mAdapter); mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); ToggleButton checkAllButton = new ToggleButton(context); checkAllButton.setText("Check/Uncheck all"); checkAllButton.setTextOn("Check/Uncheck all"); checkAllButton.setTextOff("Check/Uncheck all"); checkAllButton.setOnClickListener(this); checkAllButton.setId(ID_BUTTON_CHECK_ALL); Button deleteButton = new Button(context); deleteButton.setText("Delete"); deleteButton.setOnClickListener(this); deleteButton.setId(ID_BUTTON_DELETE); LinearLayout buttonsLayout = new LinearLayout(context); buttonsLayout.addView(checkAllButton); buttonsLayout.addView(deleteButton); ll.addView(buttonsLayout); ll.addView(mListView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); updateList(); setContentView(ll); } private void updateList() { mAlwaysUsePerAppsList = preferences.getObject("always_use_per_apps", AlwaysUsePerAppsList.class); } private CharSequence getAppName(String packageName) { if (mPackageManager == null) { mPackageManager = getPackageManager(); } try { return mPackageManager.getApplicationInfo(packageName, PackageManager.GET_ACTIVITIES) .loadLabel(mPackageManager); } catch (NameNotFoundException e) { e.printStackTrace(); return ""; } } @Override public void onClick(View v) { switch (v.getId()) { case ID_BUTTON_CHECK_ALL: // 表示中のもののチェック状態を切り替え int count = mListView.getCount(); ToggleButton toggleButton = (ToggleButton) v; for (int i = 0; i < count; i++) { mListView.setItemChecked(i, toggleButton.isChecked()); } break; case ID_BUTTON_DELETE: SparseBooleanArray checked = mListView.getCheckedItemPositions(); Set<AlwaysUsePerAppsList.PerAppsSetting> set = new HashSet<AlwaysUsePerAppsList.PerAppsSetting>(); for (int i = 0; i < checked.size(); i++) { if (checked.valueAt(i)) { AlwaysUsePerAppsList.PerAppsSetting perAppsSetting = mAlwaysUsePerAppsList.list .get(checked.keyAt(i)); set.add(perAppsSetting); } } for (AlwaysUsePerAppsList.PerAppsSetting delete : set) { mAlwaysUsePerAppsList.list.remove(delete); } preferences.putObject("always_use_per_apps", mAlwaysUsePerAppsList); preferences.apply(); int c = mListView.getCount(); for (int i = 0; i < c; i++) { mListView.setItemChecked(i, false); } break; } updateList(); mAdapter.notifyDataSetChanged(); } private class PerAppsAdapter extends BaseAdapter { @Override public int getCount() { return mAlwaysUsePerAppsList.list.size(); } @Override public Object getItem(int position) { return mAlwaysUsePerAppsList.list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(getApplicationContext(), android.R.layout.simple_list_item_single_choice, null); } TextView textView = (TextView) convertView; AlwaysUsePerAppsList.PerAppsSetting item = (PerAppsSetting) getItem(position); textView.setText(getAppName(item.launchedFromPackageName) + " => " + getAppName(item.targetPackageName)); return textView; } } }