unsigned int CFileAndroidApp::ReadIcon(unsigned char** lpBuf, unsigned int* width, unsigned int* height) { JNIEnv* env = xbmc_jnienv(); void *bitmapBuf = NULL; int densities[] = { CJNIDisplayMetrics::DENSITY_XXXHIGH, CJNIDisplayMetrics::DENSITY_XXHIGH, CJNIDisplayMetrics::DENSITY_XHIGH, -1 }; CJNIBitmap bmp; if (CJNIBuild::SDK_INT >= 15 && m_icon) { CJNIResources res = CJNIContext::GetPackageManager().getResourcesForApplication(m_packageName); if (res) { for (int i=0; densities[i] != -1 && !bmp; ++i) { int density = densities[i]; CJNIBitmapDrawable resbmp = res.getDrawableForDensity(m_icon, density); if (xbmc_jnienv()->ExceptionCheck()) xbmc_jnienv()->ExceptionClear(); else if (resbmp.getBitmap()) bmp = resbmp.getBitmap(); } } } if (!bmp) bmp = ((CJNIBitmapDrawable)(CJNIContext::GetPackageManager().getApplicationIcon(m_packageName))).getBitmap(); if (!bmp) return 0; AndroidBitmapInfo info; AndroidBitmap_getInfo(env, bmp.get_raw(), &info); if (!info.width || !info.height) return 0; *width = info.width; *height = info.height; int imgsize = *width * *height * 4; *lpBuf = new unsigned char[imgsize]; AndroidBitmap_lockPixels(env, bmp.get_raw(), &bitmapBuf); if (bitmapBuf) { memcpy(*lpBuf, bitmapBuf, imgsize); AndroidBitmap_unlockPixels(env, bmp.get_raw()); return imgsize; } return 0; }
unsigned int CFileAndroidApp::ReadIcon(unsigned char** lpBuf, unsigned int* width, unsigned int* height) { JNIEnv* env = xbmc_jnienv(); void *bitmapBuf = NULL; CJNIBitmapDrawable bmp; if (CJNIBuild::SDK_INT >= 15 && m_icon) { int density = CJNIDisplayMetrics::DENSITY_XHIGH; if (CJNIBuild::SDK_INT >= 18) density = CJNIDisplayMetrics::DENSITY_XXXHIGH; else if (CJNIBuild::SDK_INT >= 16) density = CJNIDisplayMetrics::DENSITY_XXHIGH; CJNIResources res = CJNIContext::GetPackageManager().getResourcesForApplication(m_packageName); if (res) bmp = res.getDrawableForDensity(m_icon, density); } else bmp = (CJNIBitmapDrawable)CJNIContext::GetPackageManager().getApplicationIcon(m_packageName); CJNIBitmap bitmap(bmp.getBitmap()); AndroidBitmapInfo info; AndroidBitmap_getInfo(env, bitmap.get_raw(), &info); if (!info.width || !info.height) return 0; *width = info.width; *height = info.height; int imgsize = *width * *height * 4; *lpBuf = new unsigned char[imgsize]; AndroidBitmap_lockPixels(env, bitmap.get_raw(), &bitmapBuf); if (bitmapBuf) { memcpy(*lpBuf, bitmapBuf, imgsize); AndroidBitmap_unlockPixels(env, bitmap.get_raw()); return imgsize; } return 0; }