import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
import android.net.Uri;
+import android.text.TextUtils;
+import androidx.annotation.Nullable;
import androidx.lifecycle.MutableLiveData;
import com.ic.iclooger.ICLogger;
+import com.ic.launcher.R;
import com.ic.launcher.data.AppItem;
import com.ic.launcher.data.HardCodeAppListRepository;
import com.ic.launcher.data.IAppListRepository;
import com.ic.launcher.utils.SystemUtils;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import static com.ic.launcher.utils.Constants.SETTINGS;
+
/**
* 首页的业务类
*/
appListRepository = HardCodeAppListRepository.getInstance(context);
//去获取应用列表内容
initAppList();
+ //观察是否要禁止掉拨号
+ observerDisableList();
+ }
+
+ /**
+ * 目前有相机和拨号有可能禁止,禁止的话就干掉吧。
+ */
+ private void observerDisableList() {
+ mContext.getContentResolver().registerContentObserver(Uri.parse(SETTINGS + ".is_dial_enable"),
+ true, dialerObserver);
+ }
+
+ private final ContentObserver dialerObserver = new ContentObserver(null) {
+ @Override
+ public void onChange(boolean selfChange, @Nullable Uri uri) {
+ getDialerEnableState();
+ }
+ };
+
+ private void getDialerEnableState() {
+ executorService.execute(() -> {
+ updateDialerEnableState();
+ initAppList();
+ });
}
+ private final Map<String, String> disableAppList = new HashMap<>();
+
+ /**
+ * 子线程中执行
+ */
+ private void updateDialerEnableState() {
+ Cursor query = mContext.getContentResolver().query(Uri.parse(SETTINGS),
+ new String[]{"s_value"}, "s_key=?", new String[]{"is_dial_enable"}, null);
+ if (query != null) {
+ if (query.moveToNext()) {
+ String value = query.getString(0);
+ //1 : 表示设备可以拨号 0:表示设备不可拨号, 用于同步平台设置。
+ if ("1".equals(value)) {
+ disableAppList.remove(mContext.getString(R.string.app_package_name_phone));
+ } else {
+ disableAppList.put(mContext.getString(R.string.app_package_name_phone), "0");
+ }
+ }
+ query.close();
+ }
+ }
public void initAppList() {
executorService.execute(() -> {
+ updateDialerEnableState();
//获取应用列表
List<AppItem> appList = appListRepository.getAppList();
+ Iterator<AppItem> iterator = appList.iterator();
+ while (iterator.hasNext()) {
+ AppItem next = iterator.next();
+ String contains = disableAppList.get(mContext.getString(next.getPackageNameResId()));
+ //删除
+ if (!TextUtils.isEmpty(contains)) {
+ iterator.remove();
+ }
+ }
updateDbForAi(appList);
appListValues.postValue(appList);
});
}
-
//添加规则
public static final String AUTHORITY = "com.ic.ai.info";
public static final String PATH = "apps";
}
return sInstance;
}
+
+ @Override
+ public void onClean() {
+ mContext.getContentResolver().unregisterContentObserver(dialerObserver);
+ sInstance = null;
+ }
}