/* * 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.profile; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.text.InputFilter; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.*; import com.socialize.Socialize; import com.socialize.android.ioc.IBeanFactory; import com.socialize.api.SocializeSession; import com.socialize.auth.AuthProviderType; import com.socialize.entity.User; import com.socialize.error.SocializeException; import com.socialize.i18n.I18NConstants; import com.socialize.i18n.LocalizationService; import com.socialize.listener.SocializeAuthListener; import com.socialize.networks.SocialNetworkCheckbox; import com.socialize.networks.SocialNetworkSignOutListener; import com.socialize.ui.user.UserService; import com.socialize.ui.util.CompatUtils; import com.socialize.ui.view.CustomCheckbox; import com.socialize.ui.view.SocializeButton; import com.socialize.ui.view.SocializeEditText; import com.socialize.util.AppUtils; import com.socialize.util.DisplayUtils; import com.socialize.util.Drawables; import com.socialize.util.SafeBitmapDrawable; import com.socialize.view.BaseView; /** * @author Jason Polites * */ public class ProfileContentView extends BaseView { private DisplayUtils displayUtils; private AppUtils appUtils; private Drawables drawables; private LocalizationService localizationService; private ProfilePictureEditView profilePictureEditView; private SocializeEditText firstNameEdit; private SocializeEditText lastNameEdit; private SocializeButton saveButton; private SocializeButton cancelButton; private User currentUser; private ProfileLayoutView parent; private Toast toaster; // Injected private IBeanFactory<SocializeEditText> socializeEditTextFactory; private IBeanFactory<ProfilePictureEditView> profilePictureEditViewFactory; private IBeanFactory<SocializeButton> profileCancelButtonFactory; private IBeanFactory<SocializeButton> profileSaveButtonFactory; private IBeanFactory<ProfileSaveButtonListener> profileSaveButtonListenerFactory; private UserService userService; private Activity context; private TextView userId; private CheckBox autoPostFacebook; private CheckBox autoPostTwitter; private CustomCheckbox notificationsEnabledCheckbox; private CustomCheckbox locationEnabledCheckbox; private SocialNetworkCheckbox facebookEnabledCheckbox; private SocialNetworkCheckbox twitterEnabledCheckbox; private IBeanFactory<CustomCheckbox> notificationsEnabledCheckboxFactory; private IBeanFactory<CustomCheckbox> locationEnabledCheckboxFactory; private IBeanFactory<SocialNetworkCheckbox> facebookEnabledCheckboxFactory; private IBeanFactory<SocialNetworkCheckbox> twitterEnabledCheckboxFactory; private LayoutParams commonParams; private int buttonLayoutViewId = 0; private SocializeAuthListener socialSignInListener; private SocialNetworkSignOutListener socialSignOutListener; public ProfileContentView(Activity context, ProfileLayoutView parent) { super(context); this.parent = parent; this.context = context; } public void init() { setOrientation(VERTICAL); CompatUtils.setBackgroundDrawable(this, drawables.getDrawable("slate.png", true, true, true)); LayoutParams viewParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); setLayoutParams(viewParams); ViewGroup master = makeMasterLayout(); ViewGroup buttons = makeButtonLayout(); int margin = displayUtils.getDIP(8); buttonLayoutViewId = getNextViewId(this); commonParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); commonParams.setMargins(0, margin, 0, margin); profilePictureEditView = profilePictureEditViewFactory.getBean(); userId = new TextView(getContext()); userId.setTextColor(Color.WHITE); userId.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); userId.setGravity(Gravity.RIGHT); LayoutParams userIdParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); userIdParams.gravity = Gravity.RIGHT; userId.setLayoutParams(userIdParams); firstNameEdit = socializeEditTextFactory.getBean(); lastNameEdit = socializeEditTextFactory.getBean(); firstNameEdit.setLabel(localizationService.getString(I18NConstants.SETTINGS_LABEL_FIRST_NAME)); lastNameEdit.setLabel(localizationService.getString(I18NConstants.SETTINGS_LABEL_LAST_NAME)); saveButton = profileSaveButtonFactory.getBean(); cancelButton = profileCancelButtonFactory.getBean(); InputFilter[] maxLength = new InputFilter[1]; maxLength[0] = new InputFilter.LengthFilter(128); firstNameEdit.setFilters(maxLength); lastNameEdit.setFilters(maxLength); profilePictureEditView.setLayoutParams(commonParams); firstNameEdit.setLayoutParams(commonParams); lastNameEdit.setLayoutParams(commonParams); master.addView(userId); master.addView(profilePictureEditView); master.addView(firstNameEdit); master.addView(lastNameEdit); if(appUtils.isLocationAvailable(getContext())) { locationEnabledCheckbox = locationEnabledCheckboxFactory.getBean(); locationEnabledCheckbox.setLayoutParams(commonParams); master.addView(locationEnabledCheckbox); } if(appUtils.isNotificationsAvailable(getContext())) { notificationsEnabledCheckbox = notificationsEnabledCheckboxFactory.getBean(); notificationsEnabledCheckbox.setLayoutParams(commonParams); master.addView(notificationsEnabledCheckbox); } setupSocialButtons(master); setupListeners(); buttons.addView(cancelButton); buttons.addView(saveButton); ViewGroup scrollView = makeScrollLayout(); LinearLayout.LayoutParams childViewLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); scrollView.addView(master, childViewLayout); addView(scrollView); addView(buttons); } protected void setupSocialButtons(ViewGroup group) { if(getSocialize().isSupported(context, AuthProviderType.FACEBOOK)) { facebookEnabledCheckbox = facebookEnabledCheckboxFactory.getBean(); autoPostFacebook = new CheckBox(getContext()); setupSocialButton(group, facebookEnabledCheckbox, autoPostFacebook, localizationService.getString(I18NConstants.AUTO_POST_FB)); } if(getSocialize().isSupported(context, AuthProviderType.TWITTER)) { twitterEnabledCheckbox = twitterEnabledCheckboxFactory.getBean(); autoPostTwitter = new CheckBox(getContext()); setupSocialButton(group, twitterEnabledCheckbox, autoPostTwitter, localizationService.getString(I18NConstants.AUTO_POST_TW)); } } protected void setupSocialButton(ViewGroup group, SocialNetworkCheckbox checkbox, CheckBox shareOption, String shareText) { checkbox.setLayoutParams(commonParams); shareOption.setText(shareText); shareOption.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); LayoutParams optionsParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); shareOption.setLayoutParams(optionsParams); checkbox.setVisibility(View.INVISIBLE); shareOption.setVisibility(View.INVISIBLE); group.addView(checkbox); ViewGroup fbLayout = makeSocialNetworkOptionsLayout(); fbLayout.addView(shareOption); group.addView(fbLayout); } protected SocializeAuthListener getSignInListener() { return new SocializeAuthListener() { @Override public void onError(SocializeException error) { error.printStackTrace(); ProfileContentView.this.showErrorToast(ProfileContentView.this.getContext(), error); } @Override public void onCancel() {} @Override public void onAuthSuccess(SocializeSession session) { // Reload profile view parent.setUserId(session.getUser().getId().toString()); parent.doGetUserProfile(); } @Override public void onAuthFail(SocializeException error) { error.printStackTrace(); ProfileContentView.this.showErrorToast(ProfileContentView.this.getContext(), error); } }; } protected SocialNetworkSignOutListener getSignOutListener() { return new SocialNetworkSignOutListener() { @Override public void onSignOut() { parent.setUserId(Socialize.getSocialize().getSession().getUser().getId().toString()); parent.doGetUserProfile(); } @Override public void onCancel() {} }; } protected void setupListeners() { socialSignInListener = getSignInListener(); socialSignOutListener = getSignOutListener(); cancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { context.finish(); } }); saveButton.setOnClickListener(profileSaveButtonListenerFactory.getBean(getContext(), this)); if(facebookEnabledCheckbox != null) { facebookEnabledCheckbox.setSignInListener(socialSignInListener); facebookEnabledCheckbox.setSignOutListener(socialSignOutListener); } if(twitterEnabledCheckbox != null) { twitterEnabledCheckbox.setSignInListener(socialSignInListener); twitterEnabledCheckbox.setSignOutListener(socialSignOutListener); } } protected ViewGroup makeScrollLayout() { LinearLayout.LayoutParams scrollViewLayout = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); scrollViewLayout.weight = 1.0f; ScrollView scrollView = new ScrollView(getContext()); scrollView.setFillViewport(true); scrollView.setLayoutParams(scrollViewLayout); return scrollView; } protected ViewGroup makeSocialNetworkOptionsLayout() { LinearLayout master = new LinearLayout(getContext()); int padding = displayUtils.getDIP(8); LinearLayout.LayoutParams masterParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); masterParams.setMargins(padding, 0, 0, 0); master.setLayoutParams(masterParams); master.setOrientation(LinearLayout.VERTICAL); master.setGravity(Gravity.TOP); return master; } protected ViewGroup makeMasterLayout() { LinearLayout master = new LinearLayout(getContext()); int padding = displayUtils.getDIP(8); LinearLayout.LayoutParams masterParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); masterParams.weight = 1.0f; master.setLayoutParams(masterParams); master.setOrientation(LinearLayout.VERTICAL); master.setPadding(padding, padding, padding, padding); master.setGravity(Gravity.TOP); return master; } protected ViewGroup makeButtonLayout() { LinearLayout buttons = new LinearLayout(getContext()); int padding = displayUtils.getDIP(8); LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); buttons.setId(buttonLayoutViewId); buttons.setLayoutParams(buttonParams); buttons.setOrientation(LinearLayout.HORIZONTAL); buttons.setPadding(padding, padding, padding, padding); buttons.setGravity(Gravity.BOTTOM | Gravity.RIGHT); ColorDrawable background = new ColorDrawable(Color.BLACK); background.setAlpha(64); CompatUtils.setBackgroundDrawable(buttons, background); return buttons; } public void setUserDetails(User user, UserSettings settings) { profilePictureEditView.setUserDetails(user); userId.setText("ID: " + String.valueOf(user.getId())); firstNameEdit.setText(settings.getFirstName()); lastNameEdit.setText(settings.getLastName()); User currentUser = userService.getCurrentUser(); setCurrentUser(currentUser); if(getSocialize().isSupported(context, AuthProviderType.FACEBOOK)) { if(Socialize.getSocialize().isAuthenticatedForRead(AuthProviderType.FACEBOOK)) { facebookEnabledCheckbox.setChecked(true); autoPostFacebook.setChecked(settings.isAutoPostFacebook()); } } if(getSocialize().isSupported(context, AuthProviderType.TWITTER)) { if(Socialize.getSocialize().isAuthenticatedForRead(AuthProviderType.TWITTER)) { twitterEnabledCheckbox.setChecked(true); autoPostTwitter.setChecked(settings.isAutoPostTwitter()); } else { twitterEnabledCheckbox.setChecked(false); } } if(notificationsEnabledCheckbox != null) { notificationsEnabledCheckbox.setChecked(settings.isNotificationsEnabled()); } if(locationEnabledCheckbox != null) { locationEnabledCheckbox.setChecked(settings.isLocationEnabled()); } onNetworksChanged(); } public void onNetworksChanged() { if(getSocialize().isSupported(context, AuthProviderType.FACEBOOK)) { if(facebookEnabledCheckbox != null) { facebookEnabledCheckbox.setVisibility(View.VISIBLE); } if(autoPostFacebook != null) { if(Socialize.getSocialize().isAuthenticatedForRead(AuthProviderType.FACEBOOK)) { autoPostFacebook.setVisibility(View.VISIBLE); } else { autoPostFacebook.setVisibility(View.GONE); } } } else { if(facebookEnabledCheckbox != null) facebookEnabledCheckbox.setVisibility(View.GONE); if(autoPostFacebook != null) autoPostFacebook.setVisibility(View.GONE); } if(getSocialize().isSupported(context, AuthProviderType.TWITTER)) { if(twitterEnabledCheckbox != null) { twitterEnabledCheckbox.setVisibility(View.VISIBLE); } if(autoPostTwitter != null) { if(Socialize.getSocialize().isAuthenticatedForRead(AuthProviderType.TWITTER)) { autoPostTwitter.setVisibility(View.VISIBLE); } else { autoPostTwitter.setVisibility(View.GONE); } } } else { if(twitterEnabledCheckbox != null) twitterEnabledCheckbox.setVisibility(View.GONE); if(autoPostTwitter != null) autoPostTwitter.setVisibility(View.GONE); } } @Override public void onViewLoad() { super.onViewLoad(); onNetworksChanged(); } public void onProfilePictureChange(Bitmap image) { profilePictureEditView.setProfileImage(new SafeBitmapDrawable(image)); } public User getCurrentUser() { return currentUser; } public void setCurrentUser(User currentUser) { this.currentUser = currentUser; } public void setUserService(UserService userService) { this.userService = userService; } public void setProfileCancelButtonFactory(IBeanFactory<SocializeButton> profileCancelButtonFactory) { this.profileCancelButtonFactory = profileCancelButtonFactory; } public void setProfileSaveButtonFactory(IBeanFactory<SocializeButton> profileSaveButtonFactory) { this.profileSaveButtonFactory = profileSaveButtonFactory; } public void setProfileSaveButtonListenerFactory(IBeanFactory<ProfileSaveButtonListener> profileSaveButtonListenerFactory) { this.profileSaveButtonListenerFactory = profileSaveButtonListenerFactory; } public void setProfilePictureEditViewFactory(IBeanFactory<ProfilePictureEditView> profilePictureEditViewFactory) { this.profilePictureEditViewFactory = profilePictureEditViewFactory; } public void setSocializeEditTextFactory(IBeanFactory<SocializeEditText> socializeEditTextFactory) { this.socializeEditTextFactory = socializeEditTextFactory; } public void setDisplayUtils(DisplayUtils deviceUtils) { this.displayUtils = deviceUtils; } public void setNotificationsEnabledCheckboxFactory(IBeanFactory<CustomCheckbox> notificationsEnabledCheckboxFactory) { this.notificationsEnabledCheckboxFactory = notificationsEnabledCheckboxFactory; } public void setAppUtils(AppUtils appUtils) { this.appUtils = appUtils; } protected ProfilePictureEditView getProfilePictureEditView() { return profilePictureEditView; } protected SocializeEditText getFirstNameEdit() { return firstNameEdit; } protected SocializeEditText getLastNameEdit() { return lastNameEdit; } protected CheckBox getAutoPostFacebook() { return autoPostFacebook; } protected CheckBox getAutoPostTwitter() { return autoPostTwitter; } protected CustomCheckbox getNotificationsEnabledCheckbox() { return notificationsEnabledCheckbox; } protected CustomCheckbox getLocationEnabledCheckbox() { return locationEnabledCheckbox; } protected SocialNetworkCheckbox getFacebookEnabledCheckbox() { return facebookEnabledCheckbox; } public void setFacebookEnabledCheckboxFactory(IBeanFactory<SocialNetworkCheckbox> facebookEnabledCheckboxFactory) { this.facebookEnabledCheckboxFactory = facebookEnabledCheckboxFactory; } public void setTwitterEnabledCheckboxFactory(IBeanFactory<SocialNetworkCheckbox> twitterEnabledCheckboxFactory) { this.twitterEnabledCheckboxFactory = twitterEnabledCheckboxFactory; } public void setLocationEnabledCheckboxFactory(IBeanFactory<CustomCheckbox> locationEnabledCheckboxFactory) { this.locationEnabledCheckboxFactory = locationEnabledCheckboxFactory; } public void setLocalizationService(LocalizationService localizationService) { this.localizationService = localizationService; } public void setDrawables(Drawables drawables) { this.drawables = drawables; } protected void toast(String text) { if(toaster != null) { toaster.cancel(); } toaster = Toast.makeText(getContext(), text, Toast.LENGTH_SHORT); toaster.show(); } }