private Drawable getNavbarIconImage(String uri) { if (uri == null) uri = AwesomeConstant.ACTION_NULL.value(); if (uri.startsWith("**")) { return AwesomeConstants.getActionIcon(mContext, uri); } else { try { return mPackMan.getActivityIcon(Intent.parseUri(uri, 0)); } catch (NameNotFoundException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } } return mResources.getDrawable(R.drawable.ic_sysbar_null); }
private Drawable getCustomDrawable() { String mCustomURI = Settings.System.getString( mContext.getContentResolver(), Settings.System.QUICK_SETTINGS_CUSTOM); Drawable customIcon = null; try { customIcon = CustomIconUtil.getInstance(mContext).loadFromFile(); if (customIcon == null) { customIcon = mPm.getActivityIcon(Intent.parseUri(mCustomURI, 0)); } } catch (Exception e) { e.printStackTrace(); return getIconDrawable(""); } return customIcon; }
private Drawable setIcon(String uri, String action) { if (uri != null && uri.length() > 0) { File f = new File(Uri.parse(uri).getPath()); if (f.exists()) return resize(new BitmapDrawable(mResources, f.getAbsolutePath())); } if (uri != null && !uri.equals("") && uri.startsWith("file")) { // it's an icon the user chose from the gallery here File icon = new File(Uri.parse(uri).getPath()); if (icon.exists()) return resize(new BitmapDrawable(mResources, icon.getAbsolutePath())); } else if (uri != null && !uri.equals("")) { // here they chose another app icon try { return resize(mPackMan.getActivityIcon(Intent.parseUri(uri, 0))); } catch (NameNotFoundException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } // ok use default icons here } return resize(getNavbarIconImage(action)); }
/** * Pre-load an icon into the persistent cache. * * <p>Queries for a component that does not exist in the package manager will be answered by the * persistent cache. * * @param componentName the icon should be returned for this component * @param icon the icon to be persisted * @param dpi the native density of the icon */ public void preloadIcon( ComponentName componentName, Bitmap icon, int dpi, String label, long userSerial, InvariantDeviceProfile idp) { // TODO rescale to the correct native DPI try { PackageManager packageManager = mContext.getPackageManager(); packageManager.getActivityIcon(componentName); // component is present on the system already, do nothing return; } catch (PackageManager.NameNotFoundException e) { // pass } ContentValues values = newContentValues( Bitmap.createScaledBitmap(icon, idp.iconBitmapSize, idp.iconBitmapSize, true), label, Color.TRANSPARENT); values.put(IconDB.COLUMN_COMPONENT, componentName.flattenToString()); values.put(IconDB.COLUMN_USER, userSerial); mIconDb .getWritableDatabase() .insertWithOnConflict(IconDB.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); }
/** * Pre-load an icon into the persistent cache. * * <p>Queries for a component that does not exist in the package manager will be answered by the * persistent cache. * * @param context application context * @param componentName the icon should be returned for this component * @param icon the icon to be persisted * @param dpi the native density of the icon */ public static void preloadIcon( Context context, ComponentName componentName, Bitmap icon, int dpi) { // TODO rescale to the correct native DPI try { PackageManager packageManager = context.getPackageManager(); packageManager.getActivityIcon(componentName); // component is present on the system already, do nothing return; } catch (NameNotFoundException e) { // pass } final String key = componentName.flattenToString(); FileOutputStream resourceFile = null; try { resourceFile = context.openFileOutput(getResourceFilename(componentName), Context.MODE_PRIVATE); ByteArrayOutputStream os = new ByteArrayOutputStream(); if (icon.compress(Bitmap.CompressFormat.PNG, 75, os)) { byte[] buffer = os.toByteArray(); resourceFile.write(buffer, 0, buffer.length); } else { Log.w(TAG, "failed to encode cache for " + key); return; } } catch (FileNotFoundException e) { Log.w(TAG, "failed to pre-load cache for " + key, e); } catch (IOException e) { Log.w(TAG, "failed to pre-load cache for " + key, e); } finally { if (resourceFile != null) { try { resourceFile.close(); } catch (IOException e) { Log.d(TAG, "failed to save restored icon for: " + key, e); } } } }
public ActionBarView(Context context, AttributeSet attrs) { super(context, attrs); // Background is always provided by the container. setBackgroundResource(0); TypedArray a = context.obtainStyledAttributes( attrs, R.styleable.SherlockActionBar, R.attr.actionBarStyleABS, 0); ApplicationInfo appInfo = context.getApplicationInfo(); PackageManager pm = context.getPackageManager(); mNavigationMode = a.getInt( R.styleable.SherlockActionBar_navigationModeABS, ActionBar.NAVIGATION_MODE_STANDARD); mTitle = a.getText(R.styleable.SherlockActionBar_titleABS); mSubtitle = a.getText(R.styleable.SherlockActionBar_subtitleABS); mLogo = a.getDrawable(R.styleable.SherlockActionBar_logoABS); if (mLogo == null) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { if (context instanceof Activity) { // Even though native methods existed in API 9 and 10 they don't work // so just parse the manifest to look for the logo pre-Honeycomb final int resId = ResourcesCompat.loadLogoFromManifest((Activity) context); if (resId != 0) { mLogo = context.getResources().getDrawable(resId); } } } else { if (context instanceof Activity) { try { mLogo = pm.getActivityLogo(((Activity) context).getComponentName()); } catch (NameNotFoundException e) { Log.e(TAG, "Activity component name not found!", e); } } if (mLogo == null) { mLogo = appInfo.loadLogo(pm); } } } mIcon = a.getDrawable(R.styleable.SherlockActionBar_iconABS); if (mIcon == null) { if (context instanceof Activity) { try { mIcon = pm.getActivityIcon(((Activity) context).getComponentName()); } catch (NameNotFoundException e) { Log.e(TAG, "Activity component name not found!", e); } } if (mIcon == null) { mIcon = appInfo.loadIcon(pm); } } final LayoutInflater inflater = LayoutInflater.from(context); final int homeResId = a.getResourceId(R.styleable.SherlockActionBar_homeLayoutABS, R.layout.abs__action_bar_home); mHomeLayout = (HomeView) inflater.inflate(homeResId, this, false); mExpandedHomeLayout = (HomeView) inflater.inflate(homeResId, this, false); mExpandedHomeLayout.setUp(true); mExpandedHomeLayout.setOnClickListener(mExpandedActionViewUpListener); mExpandedHomeLayout.setContentDescription( getResources().getText(R.string.abs__action_bar_up_description)); mTitleStyleRes = a.getResourceId(R.styleable.SherlockActionBar_titleTextStyleABS, 0); mSubtitleStyleRes = a.getResourceId(R.styleable.SherlockActionBar_subtitleTextStyleABS, 0); mProgressStyle = a.getResourceId(R.styleable.SherlockActionBar_progressBarStyleABS, 0); mIndeterminateProgressStyle = a.getResourceId(R.styleable.SherlockActionBar_indeterminateProgressStyleABS, 0); mProgressBarPadding = a.getDimensionPixelOffset(R.styleable.SherlockActionBar_progressBarPaddingABS, 0); mItemPadding = a.getDimensionPixelOffset(R.styleable.SherlockActionBar_itemPaddingABS, 0); setDisplayOptions(a.getInt(R.styleable.SherlockActionBar_displayOptionsABS, DISPLAY_DEFAULT)); final int customNavId = a.getResourceId(R.styleable.SherlockActionBar_customNavigationLayoutABS, 0); if (customNavId != 0) { mCustomNavView = inflater.inflate(customNavId, this, false); mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD; setDisplayOptions(mDisplayOptions | ActionBar.DISPLAY_SHOW_CUSTOM); } mContentHeight = a.getLayoutDimension(R.styleable.SherlockActionBar_heightABS, 0); a.recycle(); mLogoNavItem = new ActionMenuItem(context, 0, android.R.id.home, 0, 0, mTitle); mHomeLayout.setOnClickListener(mUpClickListener); mHomeLayout.setClickable(true); mHomeLayout.setFocusable(true); }