package com.forfan.bigbang.component.activity.share;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.view.ContextThemeWrapper;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import com.forfan.bigbang.BigBangApp;
import com.forfan.bigbang.R;
import com.forfan.bigbang.component.base.BaseActivity;
import com.forfan.bigbang.onestep.ResolveInfoWrap;
import com.forfan.bigbang.util.ConstantUtil;
import com.forfan.bigbang.util.SharedIntentHelper;
import com.shang.utils.StatusBarCompat;
import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;
import com.yanzhenjie.recyclerview.swipe.touch.OnItemMoveListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ShareAppManagerActivity extends BaseActivity implements SearchView.OnQueryTextListener {
public static final String SHARE_APPS = "shareapps";
private List<ShareAppInfo> mAllAppInfo = new ArrayList<>();
private List<ShareAppInfo> mResultAppInfo = new ArrayList<>();
private SwipeMenuRecyclerView mRV;
private Set<String> mDisAppSet = new HashSet<>();
private String mKeyWord = "";
private Toolbar toolbar;
private List<ResolveInfoWrap> resolveInfoWraps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_app_manager);
StatusBarCompat.setupStatusBarView(this, (ViewGroup) getWindow().getDecorView(), true, R.color.primary_dark);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mRV = (SwipeMenuRecyclerView) findViewById(R.id.rv);
mRV.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
Adapter.AppInfoAdapter appsAdapter = new Adapter.AppInfoAdapter(mResultAppInfo);
mRV.setAdapter(appsAdapter);
new LoadAppInfoClass().execute();
mRV.setHasFixedSize(true);// 如果Item够简单,高度是确定的,打开FixSize将提高性能。
mRV.setItemAnimator(new DefaultItemAnimator());// 设置Item默认动画,加也行,不加也行。
mRV.setLongPressDragEnabled(true);// 开启拖拽,就这么简单一句话。
mRV.setOnItemMoveListener(new OnItemMoveListener() {
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
// 当Item被拖拽的时候。
Collections.swap(mResultAppInfo, fromPosition, toPosition);
if (resolveInfoWraps != null) {
Collections.swap(resolveInfoWraps, fromPosition, toPosition);
}
appsAdapter.notifyItemMoved(fromPosition, toPosition);
return true;// 返回true表示处理了,返回false表示你没有处理。
}
@Override
public void onItemDismiss(int position) {
}
});
}
@Override
protected void onStop() {
if (resolveInfoWraps != null)
SharedIntentHelper.saveShareAppIndexs2Sp(resolveInfoWraps, BigBangApp.getInstance());
super.onStop();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.app_manger, menu);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(this);
final SearchView.SearchAutoComplete searchEditText = (SearchView.SearchAutoComplete) searchView.findViewById(R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
}
@Override
public void onViewDetachedFromWindow(View v) {
search(searchView.getQuery().toString());
}
});
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
private void search(String query) {
if (mKeyWord.equals(query)) {
return;
}
mKeyWord = query;
mResultAppInfo.clear();
if (TextUtils.isEmpty(query)) {
mResultAppInfo.addAll(mAllAppInfo);
} else {
for (ShareAppInfo appInfo : mAllAppInfo) {
if (appInfo.appName.contains(query)) {
mResultAppInfo.add(appInfo);
}
}
}
updateResultAppInfo();
}
@Override
public boolean onQueryTextChange(String newText) {
search(newText);
return false;
}
class LoadAppInfoClass extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mDisAppSet = getSharedPreferences(SHARE_APPS, ContextThemeWrapper.MODE_PRIVATE).getStringSet(ConstantUtil.SHARE_APPS_DIS, mDisAppSet);
}
@Override
protected Void doInBackground(Void... params) {
resolveInfoWraps = SharedIntentHelper.listIntents(ShareAppManagerActivity.this);
PackageManager packageManager = getPackageManager();
for (ResolveInfoWrap resolveInfoWrap : resolveInfoWraps) {
mAllAppInfo.add(new ShareAppInfo(resolveInfoWrap.resolveInfo,
resolveInfoWrap.resolveInfo.loadLabel(packageManager).toString(), resolveInfoWrap.resolveInfo.activityInfo.packageName,
!mDisAppSet.contains(resolveInfoWrap.resolveInfo.loadLabel(packageManager).toString())));
}
mResultAppInfo.addAll(mAllAppInfo);
Collections.sort(mResultAppInfo, new Comparator<ShareAppInfo>() {
@Override
public int compare(ShareAppInfo o1, ShareAppInfo o2) {
if (o1.enable != o2.enable) {
return o1.enable ? -1 : 1;
}
return 0;
}
});
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
updateResultAppInfo();
}
}
private void updateResultAppInfo() {
((Adapter.AppInfoAdapter) mRV.getAdapter()).loadData();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int i = item.getItemId();
if (i == android.R.id.home) {
finish();
return true;
} else if (i == R.id.search) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void finish() {
Set<String> disApps = new HashSet<>();
for (ShareAppInfo appInfo : mAllAppInfo) {
if (!appInfo.enable) {
disApps.add(appInfo.appName);
}
}
getSharedPreferences(SHARE_APPS, ContextThemeWrapper.MODE_PRIVATE).edit().putStringSet(ConstantUtil.SHARE_APPS_DIS, disApps).apply();
super.finish();
}
}