106 lines
4.1 KiB
Java
106 lines
4.1 KiB
Java
package net.simonvt.menudrawer.compat;
|
|
|
|
import android.app.Activity;
|
|
import android.graphics.drawable.Drawable;
|
|
import timber.log.Timber;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
final class ActionBarHelperCompat {
|
|
|
|
private ActionBarHelperCompat() {
|
|
}
|
|
|
|
public static void setActionBarUpIndicator(Object info, Activity activity, Drawable drawable, int contentDescRes) {
|
|
final SetIndicatorInfo sii = (SetIndicatorInfo) info;
|
|
if (sii.mUpIndicatorView != null) {
|
|
sii.mUpIndicatorView.setImageDrawable(drawable);
|
|
final String contentDescription = contentDescRes == 0 ? null : activity.getString(contentDescRes);
|
|
sii.mUpIndicatorView.setContentDescription(contentDescription);
|
|
}
|
|
}
|
|
|
|
public static void setActionBarDescription(Object info, Activity activity, int contentDescRes) {
|
|
final SetIndicatorInfo sii = (SetIndicatorInfo) info;
|
|
if (sii.mUpIndicatorView != null) {
|
|
final String contentDescription = contentDescRes == 0 ? null : activity.getString(contentDescRes);
|
|
sii.mUpIndicatorView.setContentDescription(contentDescription);
|
|
}
|
|
}
|
|
|
|
public static Drawable getThemeUpIndicator(Object info) {
|
|
final SetIndicatorInfo sii = (SetIndicatorInfo) info;
|
|
if (sii.mUpIndicatorView != null) {
|
|
return sii.mUpIndicatorView.getDrawable();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static Object getIndicatorInfo(Activity activity) {
|
|
return new SetIndicatorInfo(activity);
|
|
}
|
|
|
|
public static void setDisplayHomeAsUpEnabled(Object info, boolean enabled) {
|
|
final SetIndicatorInfo sii = (SetIndicatorInfo) info;
|
|
if (sii.mHomeAsUpEnabled != null) {
|
|
try {
|
|
sii.mHomeAsUpEnabled.invoke(sii.mActionBar, enabled);
|
|
} catch (Throwable t) {
|
|
if (ActionBarHelper.DEBUG) {
|
|
Timber.e(t, "Unable to call setHomeAsUpEnabled");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static class SetIndicatorInfo {
|
|
|
|
public ImageView mUpIndicatorView;
|
|
public Object mActionBar;
|
|
public Method mHomeAsUpEnabled;
|
|
|
|
SetIndicatorInfo(Activity activity) {
|
|
try {
|
|
String appPackage = activity.getPackageName();
|
|
|
|
try {
|
|
// Attempt to find ActionBarSherlock up indicator
|
|
final int homeId = activity.getResources().getIdentifier("abs__home", "id", appPackage);
|
|
View v = activity.findViewById(homeId);
|
|
ViewGroup parent = (ViewGroup) v.getParent();
|
|
final int upId = activity.getResources().getIdentifier("abs__up", "id", appPackage);
|
|
mUpIndicatorView = (ImageView) parent.findViewById(upId);
|
|
} catch (Throwable t) {
|
|
if (ActionBarHelper.DEBUG) {
|
|
Timber.e(t,"ABS action bar not found");
|
|
}
|
|
}
|
|
|
|
if (mUpIndicatorView == null) {
|
|
// Attempt to find AppCompat up indicator
|
|
final int homeId = activity.getResources().getIdentifier("home", "id", appPackage);
|
|
View v = activity.findViewById(homeId);
|
|
ViewGroup parent = (ViewGroup) v.getParent();
|
|
final int upId = activity.getResources().getIdentifier("up", "id", appPackage);
|
|
mUpIndicatorView = (ImageView) parent.findViewById(upId);
|
|
}
|
|
|
|
Class supportActivity = activity.getClass();
|
|
Method getActionBar = supportActivity.getMethod("getSupportActionBar");
|
|
|
|
mActionBar = getActionBar.invoke(activity, (Object)null);
|
|
Class supportActionBar = mActionBar.getClass();
|
|
mHomeAsUpEnabled = supportActionBar.getMethod("setDisplayHomeAsUpEnabled", Boolean.TYPE);
|
|
|
|
} catch (Throwable t) {
|
|
if (ActionBarHelper.DEBUG) {
|
|
Timber.e(t, "Unable to init SetIndicatorInfo for ABS");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|