package org.starfishrespect.myconsumption.android.util; import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.view.View; import static org.starfishrespect.myconsumption.android.util.LogUtils.LOGE; import static org.starfishrespect.myconsumption.android.util.LogUtils.makeLogTag; /** * An assortment of UI helpers. * S23Y (2015). Licensed under the Apache License, Version 2.0. * Adapted from Google I/O 2014 Android app by Thibaud Ledent */ public class UIUtils { private static final String TAG = makeLogTag(UIUtils.class); public static final String TARGET_FORM_FACTOR_ACTIVITY_METADATA = "org.starfishrespect.myconsumption.android.meta.TARGET_FORM_FACTOR"; public static final String TARGET_FORM_FACTOR_HANDSET = "handset"; public static final String TARGET_FORM_FACTOR_TABLET = "tablet"; public static boolean isTablet(Context context) { return context.getResources().getConfiguration().smallestScreenWidthDp >= 600; } public static void setAccessibilityIgnore(View view) { view.setClickable(false); view.setFocusable(false); view.setContentDescription(""); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO); } } /** * Enables and disables {@linkplain android.app.Activity activities} based on their * meta-data and the current device. * Values should be either "handset", "tablet", or not present (meaning universal). * <p> * <a href="http://stackoverflow.com/questions/13202805">Original code</a> by Dandre Allison. * @param context the current context of the device */ public static void enableDisableActivitiesByFormFactor(Context context) { final PackageManager pm = context.getPackageManager(); boolean isTablet = isTablet(context); try { PackageInfo pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA); if (pi == null) { LOGE(TAG, "No package info found for our own package."); return; } final ActivityInfo[] activityInfos = pi.activities; for (ActivityInfo info : activityInfos) { String targetDevice = null; if (info.metaData != null) { targetDevice = info.metaData.getString(TARGET_FORM_FACTOR_ACTIVITY_METADATA); } boolean tabletActivity = TARGET_FORM_FACTOR_TABLET.equals(targetDevice); boolean handsetActivity = TARGET_FORM_FACTOR_HANDSET.equals(targetDevice); boolean enable = !(handsetActivity && isTablet) && !(tabletActivity && !isTablet); String className = info.name; pm.setComponentEnabledSetting( new ComponentName(context, Class.forName(className)), enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } } catch (PackageManager.NameNotFoundException e) { LOGE(TAG, "No package info found for our own package.", e); } catch (ClassNotFoundException e) { LOGE(TAG, "Activity not found within package.", e); } } }