/*
* Copyright (c) 2012 Socialize Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.socialize.ui;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import com.socialize.Socialize;
import com.socialize.SocializeSystem;
import com.socialize.UserUtils;
import com.socialize.android.ioc.IOCContainer;
import com.socialize.error.SocializeException;
import com.socialize.i18n.I18NConstants;
import com.socialize.i18n.LocalizationService;
import com.socialize.listener.SocializeInitListener;
import com.socialize.log.SocializeLogger;
import com.socialize.ui.comment.CommentActivity;
import com.socialize.util.Drawables;
import com.socialize.view.BaseView;
/**
* @author Jason Polites
*/
public abstract class SocializeBaseView extends BaseView {
protected IOCContainer container;
protected Drawables drawables;
protected LocalizationService localizationService;
protected Menu menu;
protected boolean viewLoaded = false;
public SocializeBaseView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SocializeBaseView(Context context) {
super(context);
}
@Override
public void onViewLoad() {
super.onViewLoad();
View loading = getLoadingView();
if(loading != null) {
addView(loading);
}
doSocializeInit(getContext(), getInitLoadListener());
}
@Override
public void onViewUpdate() {
super.onViewUpdate();
doSocializeInit(getContext(), getInitUpdateListener());
}
protected SocializeInitListener getInitLoadListener() {
return new SocializeInitListener() {
@Override
public void onError(SocializeException error) {
SocializeLogger.e("Error initializing Socialize", error);
onViewError(error);
}
@Override
public void onInit(Context context, IOCContainer c) {
container = c;
drawables = c.getBean("drawables");
localizationService = c.getBean("localizationService");
onViewLoad(container);
}
};
}
protected SocializeInitListener getInitUpdateListener() {
return new SocializeInitListener() {
@Override
public void onError(SocializeException error) {
SocializeLogger.e("Error initializing Socialize", error);
}
@Override
public void onInit(Context context, IOCContainer c) {
container = c;
drawables = c.getBean("drawables");
localizationService = c.getBean("localizationService");
onViewUpdate(container);
}
};
}
// Subclasses override
public void onViewLoad(IOCContainer container) {
// Create a menu if we have one.
if(menu != null) {
createOptionsMenuItem(getActivity(), menu);
}
viewLoaded = true;
}
// Subclasses override
public void onViewUpdate(IOCContainer container) {}
protected void doSocializeInit(Context context, SocializeInitListener listener) {
if(!isInEditMode()) {
onBeforeSocializeInit();
initSocialize(context, listener);
}
}
protected <E> E getBean(String name) {
return container.getBean(name);
}
public void setContainer(IOCContainer container) {
this.container = container;
}
protected void initSocialize(final Context context, final SocializeInitListener listener) {
SocializeSystem system = getSocialize().getSystem();
String[] config = system.getBeanConfig(context);
final SocializeInitListener systemListener = system.getSystemInitListener();
if(systemListener != null) {
SocializeInitListener overrideListener = new SocializeInitListener() {
@Override
public void onError(SocializeException error) {
systemListener.onError(error);
listener.onError(error);
}
@Override
public void onInit(Context context, IOCContainer container) {
systemListener.onInit(context, container);
listener.onInit(context, container);
}
};
getSocialize().initAsync(getContext(), overrideListener, config);
}
else {
getSocialize().initAsync(getContext(), listener, config);
}
}
public abstract View getLoadingView();
public View getLoadFailView() {
return null;
}
protected void createOptionsMenuItem(final Activity source, Menu menu) {
if(Socialize.getSocialize().isAuthenticated()) {
MenuItem add = menu.add(localizationService.getString(I18NConstants.SETTINGS_HEADER));
if(drawables != null) {
add.setIcon(drawables.getDrawable("ic_menu_preferences.png"));
}
add.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if(!onSettingsMenuItemClick(item)) {
UserUtils.showUserSettingsForResult(source, CommentActivity.PROFILE_UPDATE);
}
return true;
}
});
}
}
protected boolean onSettingsMenuItemClick(MenuItem item) {
return false;
}
public final boolean onCreateOptionsMenu(final Activity source, Menu menu) {
this.menu = menu;
if(viewLoaded) {
createOptionsMenuItem(source, menu);
}
return true;
}
// Subclasses override
protected void onBeforeSocializeInit() {}
}