package com.zj.zmmkv; import android.app.ActivityManager; import android.content.ComponentName; import android.content.ContentProvider; import android.content.ContentValues; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ProviderInfo; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import com.bytedance.sdk.openadsdk.downloadnew.core.TTDownloadField; public class MMKVContentProvider extends ContentProvider { protected static final String FUNCTION_NAME = "mmkvFromAshmemID"; protected static final String KEY = "KEY"; protected static final String KEY_CRYPT = "KEY_CRYPT"; protected static final String KEY_MODE = "KEY_MODE"; protected static final String KEY_SIZE = "KEY_SIZE"; private static Uri gUri; public String getType(Uri uri) { return null; } protected static Uri contentUri(Context context) { String queryAuthority; Uri uri = gUri; if (uri != null) { return uri; } if (context == null || (queryAuthority = queryAuthority(context)) == null) { return null; } Uri parse = Uri.parse("content://" + queryAuthority); gUri = parse; return parse; } private Bundle mmkvFromAshmemID(String str, int i, int i2, String str2) throws RuntimeException { ZMMKV mmkvWithAshmemID = ZMMKV.mmkvWithAshmemID(getContext(), str, i, i2, str2); ParcelableMMKV parcelableMMKV = new ParcelableMMKV(mmkvWithAshmemID); Log.i("MMKV", str + " fd = " + mmkvWithAshmemID.ashmemFD() + ", meta fd = " + mmkvWithAshmemID.ashmemMetaFD()); Bundle bundle = new Bundle(); bundle.putParcelable(KEY, parcelableMMKV); return bundle; } private static String queryAuthority(Context context) { ProviderInfo providerInfo; try { ComponentName componentName = new ComponentName(context, MMKVContentProvider.class.getName()); PackageManager packageManager = context.getPackageManager(); if (packageManager == null || (providerInfo = packageManager.getProviderInfo(componentName, 0)) == null) { return null; } return providerInfo.authority; } catch (Exception e) { e.printStackTrace(); return null; } } public boolean onCreate() { String queryAuthority; Context context = getContext(); if (context == null || (queryAuthority = queryAuthority(context)) == null) { return false; } if (gUri != null) { return true; } gUri = Uri.parse("content://" + queryAuthority); return true; } protected static String getProcessNameByPID(Context context, int i) { ActivityManager activityManager = (ActivityManager) context.getSystemService(TTDownloadField.TT_ACTIVITY); if (activityManager == null) { return ""; } for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : activityManager.getRunningAppProcesses()) { if (runningAppProcessInfo.pid == i) { return runningAppProcessInfo.processName; } } return ""; } public Bundle call(String str, String str2, Bundle bundle) { if (str.equals(FUNCTION_NAME) && bundle != null) { try { return mmkvFromAshmemID(str2, bundle.getInt(KEY_SIZE), bundle.getInt(KEY_MODE), bundle.getString(KEY_CRYPT)); } catch (Exception e) { Log.e("MMKV", e.getMessage()); } } return null; } public Cursor query(Uri uri, String[] strArr, String str, String[] strArr2, String str2) { throw new UnsupportedOperationException("Not implement in MMKV"); } public int update(Uri uri, ContentValues contentValues, String str, String[] strArr) { throw new UnsupportedOperationException("Not implement in MMKV"); } public int delete(Uri uri, String str, String[] strArr) { throw new UnsupportedOperationException("Not implement in MMKV"); } public Uri insert(Uri uri, ContentValues contentValues) { throw new UnsupportedOperationException("Not implement in MMKV"); } }