All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.WazaBe.HoloEverywhere.app.Activity Maven / Gradle / Ivy

The newest version!
package com.WazaBe.HoloEverywhere.app;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Build.VERSION;
import android.os.Bundle;
import android.support.v4.app._HoloActivity;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.view.ViewGroup.LayoutParams;

import com.WazaBe.HoloEverywhere.FontLoader;
import com.WazaBe.HoloEverywhere.LayoutInflater;
import com.WazaBe.HoloEverywhere.SystemServiceManager;
import com.WazaBe.HoloEverywhere.ThemeManager;
import com.WazaBe.HoloEverywhere.app.Application.Config;
import com.WazaBe.HoloEverywhere.app.Application.Config.PreferenceImpl;
import com.WazaBe.HoloEverywhere.preference.PreferenceManager;
import com.WazaBe.HoloEverywhere.preference.SharedPreferences;
import com.actionbarsherlock.internal.view.menu.ContextMenuBuilder;
import com.actionbarsherlock.internal.view.menu.ContextMenuDecorView;
import com.actionbarsherlock.internal.view.menu.ContextMenuListener;

public abstract class Activity extends _HoloActivity implements Base {
	@Retention(RetentionPolicy.RUNTIME)
	@Target(ElementType.TYPE)
	public static @interface Holo {
		public boolean addFactoryToInflater() default true;

		public boolean forceThemeApply() default false;

		public int layout() default -1;
	}

	private static final Holo DEFAULT_HOLO = new Holo() {
		@Override
		public boolean addFactoryToInflater() {
			return true;
		}

		@Override
		public Class annotationType() {
			return Holo.class;
		}

		@Override
		public boolean forceThemeApply() {
			return false;
		}

		@Override
		public int layout() {
			return 0;
		}
	};

	private boolean forceThemeApply = false;
	private int lastThemeResourceId = 0;

	@Override
	public void addContentView(View view, LayoutParams params) {
		super.addContentView(prepareDecorView(view), params);
	}

	@Override
	public void createContextMenu(ContextMenuBuilder contextMenuBuilder,
			View view, ContextMenuInfo menuInfo, ContextMenuListener listener) {
		listener.onCreateContextMenu(contextMenuBuilder, view, menuInfo);
	}

	@Override
	public Config getConfig() {
		return Application.getConfig();
	}

	@Override
	public SharedPreferences getDefaultSharedPreferences() {
		return PreferenceManager.getDefaultSharedPreferences(this);
	}

	public int getLastThemeResourceId() {
		return lastThemeResourceId;
	}

	@Override
	public LayoutInflater getLayoutInflater() {
		return LayoutInflater.from(this);
	}

	@Override
	public SharedPreferences getSharedPreferences(PreferenceImpl impl,
			String name, int mode) {
		return PreferenceManager.wrap(this, impl, name, mode);
	}

	@Override
	public SharedPreferences getSharedPreferences(String name, int mode) {
		return PreferenceManager.wrap(this, name, mode);
	}

	@Override
	public Object getSystemService(String name) {
		return SystemServiceManager.getSystemService(this, name);
	}

	@Override
	public boolean isABSSupport() {
		return false;
	}

	@Override
	public boolean isForceThemeApply() {
		return forceThemeApply;
	}

	@Override
	@SuppressLint("NewApi")
	public void onBackPressed() {
		if (!getSupportFragmentManager().popBackStackImmediate()) {
			finish();
		}
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		Holo holo = getClass().isAnnotationPresent(Holo.class) ? getClass()
				.getAnnotation(Holo.class) : Activity.DEFAULT_HOLO;
		if (holo.addFactoryToInflater()) {
			getLayoutInflater().addFactory(this, 0);
		}
		boolean forceThemeApply = isForceThemeApply();
		if (holo.forceThemeApply()) {
			setForceThemeApply(forceThemeApply = true);
		}
		if (forceThemeApply || getConfig().isUseThemeManager()) {
			ThemeManager.applyTheme(this, forceThemeApply);
		}
		super.onCreate(savedInstanceState);
		final int layout = holo.layout();
		if (layout > 0) {
			setContentView(layout);
		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		LayoutInflater.onDestroy(this);
	}

	@Override
	public View prepareDecorView(View v) {
		v = FontLoader.apply(v);
		if (!getConfig().isDisableContextMenu() && v != null) {
			v = new ContextMenuDecorView(this, v, this);
		}
		return v;
	}

	@Override
	public void setContentView(int layoutResID) {
		super.setContentView(prepareDecorView(getLayoutInflater().inflate(
				layoutResID)));
	}

	@Override
	public void setContentView(View view) {
		super.setContentView(prepareDecorView(view));
	}

	@Override
	public void setContentView(View view, LayoutParams params) {
		super.setContentView(prepareDecorView(view), params);
	}

	public void setForceThemeApply(boolean forceThemeApply) {
		this.forceThemeApply = forceThemeApply;
	}

	@Override
	public void setTheme(int resid) {
		lastThemeResourceId = resid;
		super.setTheme(resid);
	}

	@Override
	public void startActivities(Intent[] intents) {
		startActivities(intents, null);
	}

	@Override
	public void startActivities(Intent[] intents, Bundle options) {
		for (Intent intent : intents) {
			startActivity(intent, options);
		}
	}

	@Override
	public void startActivity(Intent intent) {
		startActivity(intent, null);
	}

	@Override
	public void startActivity(Intent intent, Bundle options) {
		startActivityForResult(intent, -1, options);
	}

	@Override
	public void startActivityForResult(Intent intent, int requestCode) {
		startActivityForResult(intent, requestCode, null);
	}

	@Override
	public void startActivityForResult(Intent intent, int requestCode,
			Bundle options) {
		if (getConfig().isAlwaysUseParentTheme()) {
			ThemeManager.startActivity(this, intent, requestCode, options);
		} else {
			superStartActivity(intent, requestCode, options);
		}
	}

	@Override
	public android.content.SharedPreferences superGetSharedPreferences(
			String name, int mode) {
		return super.getSharedPreferences(name, mode);
	}

	@Override
	@SuppressLint("NewApi")
	public void superStartActivity(Intent intent, int requestCode,
			Bundle options) {
		if (VERSION.SDK_INT >= 16) {
			super.startActivityForResult(intent, requestCode, options);
		} else {
			super.startActivityForResult(intent, requestCode);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy