package com.yaerin.xposed.hider.ui; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.SparseBooleanArray; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.ListView; import android.widget.SearchView; import com.yaerin.xposed.hider.R; import com.yaerin.xposed.hider.adapter.AppsAdapter; import com.yaerin.xposed.hider.bean.AppInfo; import com.yaerin.xposed.hider.util.ConfigUtils; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import static com.yaerin.xposed.hider.C.PREF_SHOW_SYSTEM_APP; import static com.yaerin.xposed.hider.util.Utilities.getAppList; public class MainActivity extends Activity { private ListView mAppsView; private AppsAdapter mAdapter; private SharedPreferences mPreferences; private List<AppInfo> mApps = new ArrayList<>(); private List<AppInfo> mMatches = new ArrayList<>(); private ExecutorService mExecutor = Executors.newSingleThreadExecutor(); private Set<String> mConfig = ConfigUtils.get() != null ? ConfigUtils.get() : new HashSet<>(); private boolean mShowSystemApp = false; public static boolean isEnabled() { return false; } private void setCheckedItems() { List<AppInfo> apps = mAdapter.getAppList(); for (int i = 0; i < apps.size(); i++) { mAppsView.setItemChecked(i, mConfig.contains(apps.get(i).getPackageName())); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAppsView = findViewById(R.id.apps); if (isEnabled()) { findViewById(R.id.tip_reboot).setVisibility(View.GONE); } mPreferences = PreferenceManager.getDefaultSharedPreferences(this); mShowSystemApp = mPreferences.getBoolean(PREF_SHOW_SYSTEM_APP, false); mAppsView.setOnItemClickListener((parent, view, position, id) -> { if (mAppsView.isItemChecked(position)) { mConfig.add(mAdapter.getAppList().get(position).getPackageName()); } else { mConfig.remove(mAdapter.getAppList().get(position).getPackageName()); } }); mAppsView.setAdapter(mAdapter = new AppsAdapter(this, mApps)); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView(); sv.setInputType(EditorInfo.TYPE_CLASS_TEXT); sv.setImeOptions(EditorInfo.IME_ACTION_SEARCH); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { mMatches.clear(); newText = newText.toLowerCase(); for (AppInfo app : mApps) { if (app.getLabel().toLowerCase().contains(newText) || app.getPackageName().contains(newText)) { mMatches.add(app); } } if (mAdapter.getAppList().equals(mApps)) { mAdapter.setAppList(mMatches); } mAdapter.notifyDataSetChanged(); setCheckedItems(); return true; } }); sv.setOnCloseListener(() -> { mAdapter.setAppList(mApps); mAdapter.notifyDataSetChanged(); setCheckedItems(); return false; }); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: { startActivity(new Intent(this, SettingsActivity.class)); return true; } default: break; } return false; } @Override protected void onResume() { super.onResume(); boolean b = mPreferences.getBoolean(PREF_SHOW_SYSTEM_APP, false); if (mShowSystemApp != b || mApps.isEmpty()) { mShowSystemApp = b; mApps.clear(); mAdapter.notifyDataSetChanged(); findViewById(R.id.progress).setVisibility(View.VISIBLE); mExecutor.submit(() -> { mApps.addAll(getAppList(this, mShowSystemApp)); runOnUiThread(() -> { mAdapter.notifyDataSetChanged(); setCheckedItems(); findViewById(R.id.progress).setVisibility(View.GONE); }); }); } } @Override protected void onPause() { SparseBooleanArray arr = mAppsView.getCheckedItemPositions(); List<AppInfo> apps = mAdapter.getAppList(); for (int i = 0; i < arr.size(); i++) { if (i >= apps.size()) { continue; } String name = apps.get(i).getPackageName(); if (arr.get(i)) { mConfig.add(name); } else { mConfig.remove(name); } } ConfigUtils.put(this, mConfig); super.onPause(); } }