package eoc.studio.voicecard.mainmenu; import java.util.ArrayList; import java.util.Calendar; import java.util.Map; import org.json.JSONObject; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.InputType; import android.text.method.DigitsKeyListener; import android.text.method.NumberKeyListener; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; import com.facebook.Response; import com.facebook.Session; import com.facebook.model.GraphUser; import eoc.studio.voicecard.BaseActivity; import eoc.studio.voicecard.R; import eoc.studio.voicecard.calendarview.MainCalendarView; import eoc.studio.voicecard.calendarview.CalendarIntentHelper; import eoc.studio.voicecard.calendarview.DataProcess; import eoc.studio.voicecard.card.editor.CardCategorySelectorActivity; import eoc.studio.voicecard.facebook.FacebookManager; import eoc.studio.voicecard.facebook.enetities.UserInfo; import eoc.studio.voicecard.facebook.enetities.Publish; import eoc.studio.voicecard.mailbox.MailboxActivity; import eoc.studio.voicecard.mainloading.MainLoadingActivity; import eoc.studio.voicecard.manager.GetRecommendListener; import eoc.studio.voicecard.manager.GsonRecommend; import eoc.studio.voicecard.manager.HttpManager; import eoc.studio.voicecard.newspaper.NewspaperMainActivity; import eoc.studio.voicecard.polling.PollingService; import eoc.studio.voicecard.polling.PollingUtils; import eoc.studio.voicecard.recommend.RecommendActivity; import eoc.studio.voicecard.utils.NetworkUtility; public class MainMenuActivity extends BaseActivity implements OnClickListener { private static final String TAG = "MainMenu"; private MailboxIconView mailbox; private ImageView fbShare; private ImageView cardEditor; private ImageView newsEditor; private ImageView memorialDayEditor; private ImageView facebookLogin; private ImageView facebookLogout; private MemorialDayNotificationView memorialDayNotification; private AdvertisementView advertisement; private Context context; private String recommendBitmapUrl; private String recommendName; public String PREFS_FILENAME = "MAIN_MENU_SETTING"; public static final String PREFS_KEY_PHONE_NUMBER = "phoneNumber"; public static final String PREFS_KEY_FIRST_RUN_APP = "firstRun"; private SharedPreferences configPreferences; private FacebookManager facebookManager; private static boolean isFacebookLogin = false; private HttpManager httpManager; private static boolean exitApp = false; private EditText inputPhoneNumberEditText; private AlertDialog.Builder inputPhoneNumberAlertDialog ; @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate()"); context = getApplicationContext(); configPreferences = getSharedPreferences(PREFS_FILENAME, 0); facebookManager = FacebookManager.getInstance(context); httpManager = new HttpManager(); initLayout(); getRecommendInfo(); super.onCreate(savedInstanceState); } private void getRecommendInfo() { if (NetworkUtility.isOnline(context)) { httpManager.getRecommend(context, new GetRecommendListener() { @Override public void onResult(Boolean isSuccess, ArrayList<GsonRecommend> recommends) { // Log.e(TAG, "httpManager.getRecommend() isSuccess:" + // isSuccess + ",mails:" // + recommends.toString()); if (recommends != null && recommends.size() > 0) { // Log.e(TAG, "recommends.get(0).getImg():" + // recommends.get(0).getImg() // + "recommends.get(0).getName():" + // recommends.get(0).getName()); recommendBitmapUrl = recommends.get(0).getImg(); recommendName = recommends.get(0).getName(); if (recommendBitmapUrl != null && recommendName != null) { httpManager.getBitmapFromWeb(context, recommendBitmapUrl, new ImageLoader.ImageListener() { @Override public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) { Log.e(TAG, "httpManager.getBitmapFromWeb() isImmediate:" + isImmediate); if (response.getBitmap() != null) { Log.e(TAG, "response.getBitmap() != null"); advertisement.updateView( response.getBitmap().copy( Bitmap.Config.ARGB_8888, true), recommendName); } } @Override public void onErrorResponse(VolleyError e) { Log.e(TAG, "getBitmapFromWeb() error:" + e.getMessage()); } }); } } } }); } else { Log.d(TAG, "Cant getRecommendInfo (because network is not enable)"); } } private void updateNewMailBoxCount() { int mailboxUnReadCount = configPreferences.getInt("mailboxUnReadCount", 0); Log.d(TAG, "updateNewMailBoxCount mailboxUnReadCount:" + mailboxUnReadCount); mailbox.update(mailboxUnReadCount); } @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); Log.d(TAG, "onNewIntent()"); setIntent(intent); } @Override protected void onResume() { Log.d(TAG, "onResume()"); updateViewVisibility(); updateNewMailBoxCount(); setMemorialDayNotification(); PollingUtils.startPollingService(this, 1800, PollingService.class, PollingService.ACTION); Log.d(TAG, "PollingUtils.startPollingService()"); boolean isFirstRunApp = configPreferences.getBoolean(PREFS_KEY_FIRST_RUN_APP, true); if (isFirstRunApp) { configPreferences.edit().putBoolean(PREFS_KEY_FIRST_RUN_APP, false).commit(); showInputPhoneDialog(); } super.onResume(); } public void showInputPhoneDialog() { inputPhoneNumberAlertDialog = new AlertDialog.Builder(this); inputPhoneNumberAlertDialog.setTitle(getResources().getString(R.string.input_dialog_title)); inputPhoneNumberAlertDialog.setMessage(getResources().getString(R.string.input_dialog_message)); // Set an EditText view to get user input inputPhoneNumberEditText = new EditText(this); inputPhoneNumberEditText.setRawInputType(Configuration.KEYBOARD_12KEY); inputPhoneNumberEditText.setInputType(InputType.TYPE_CLASS_PHONE); inputPhoneNumberEditText.setKeyListener(new NumberKeyListener() { protected char[] getAcceptedChars() { char[] numberChars = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' }; return numberChars; } @Override public int getInputType() { return android.text.InputType.TYPE_CLASS_PHONE; } }); inputPhoneNumberAlertDialog.setView(inputPhoneNumberEditText); // inputPhoneNumberAlertDialog.setCancelable(false); // disable back button inputPhoneNumberAlertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String phoneNumberFromUserInput = inputPhoneNumberEditText.getText().toString(); Log.d(TAG, "phoneNumberFromUserInput is " + phoneNumberFromUserInput); if (phoneNumberFromUserInput.startsWith("0") || phoneNumberFromUserInput.length()<8) { Toast.makeText(context, getResources().getString(R.string.input_dialog_re_show), Toast.LENGTH_SHORT).show(); showInputPhoneDialog(); } else { phoneNumberFromUserInput = "+" + phoneNumberFromUserInput; Log.d(TAG, "After add plus char to phoneNumberFromUserInput is " + phoneNumberFromUserInput); configPreferences.edit().putString(PREFS_KEY_PHONE_NUMBER, phoneNumberFromUserInput).commit(); } } }); inputPhoneNumberAlertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); inputPhoneNumberAlertDialog.show(); } private void setMemorialDayNotification() { Calendar now = Calendar.getInstance(); // Calendar old = memorialDayNotification.getDate(); // if (old == null || (now.get(Calendar.DAY_OF_MONTH) != // old.get(Calendar.DAY_OF_MONTH))) // { memorialDayNotification.setDate(now); String event = getMemorialEvent(now); Log.d(TAG, "setMemorialDayNotification - event: " + event); memorialDayNotification.setEvent(event); // } } private String getMemorialEvent(Calendar calendar) { ArrayList<Map<String, String>> event = CalendarIntentHelper .readCalendarEvent(this, (DataProcess.formatDate(String.valueOf(System.currentTimeMillis()), "yyyyMMdd") + DataProcess.DEFAULT_EVENT_TIME)); if (event != null && !event.isEmpty()) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < event.size(); i++) { builder.append(event .get(i) .get(CalendarIntentHelper.EVENT_PROJECTION[CalendarIntentHelper.EVENT_TITLE_INDEX])); builder.append("\n"); } builder.deleteCharAt(builder.length() - 1); return builder.toString(); } else { // String title = "NO EVENT"; // System.out.println(title); return null; } } @Override protected void onPause() { Log.d(TAG, "onPause()"); super.onPause(); } @Override protected void onDestroy() { Log.d(TAG, "onDestroy()"); PollingUtils.stopPollingService(this, PollingService.class, PollingService.ACTION); Log.d(TAG, "PollingUtils.stopPollingService()"); super.onDestroy(); } private void initLayout() { setContentView(R.layout.activity_mainmenu); findViews(); setListeners(); } private void findViews() { fbShare = (ImageView) findViewById(R.id.act_mainmenu_iv_fb_share); mailbox = (MailboxIconView) findViewById(R.id.act_mainmenu_mbiv_mailbox); cardEditor = (ImageView) findViewById(R.id.act_mainmenu_iv_card_editor); newsEditor = (ImageView) findViewById(R.id.act_mainmenu_iv_news_editor); memorialDayEditor = (ImageView) findViewById(R.id.act_mainmenu_iv_memorial_day_editor); memorialDayNotification = (MemorialDayNotificationView) findViewById(R.id.act_mainmenu_mdnv_memorial_notification); advertisement = (AdvertisementView) findViewById(R.id.act_mainmenu_av_advertisement); facebookLogin = (ImageView) findViewById(R.id.act_mainmenu_iv_facebook_login); facebookLogout = (ImageView) findViewById(R.id.act_mainmenu_iv_facebook_logout); updateViewVisibility(); } private void updateViewVisibility() { isFacebookLogin = facebookManager.isLogin(); Log.d(TAG, "isFacebookLogin: " + isFacebookLogin + " ,httpManager.getFacebookID(): " + httpManager.getFacebookID()); if (isFacebookLogin && httpManager.getFacebookID() != null) { facebookLogin.setVisibility(View.INVISIBLE); facebookLogout.setVisibility(View.VISIBLE); fbShare.setVisibility(View.VISIBLE); mailbox.setVisibility(View.VISIBLE); cardEditor.setVisibility(View.VISIBLE); newsEditor.setVisibility(View.VISIBLE); memorialDayEditor.setVisibility(View.VISIBLE); } else { facebookLogin.setVisibility(View.VISIBLE); facebookLogout.setVisibility(View.INVISIBLE); fbShare.setVisibility(View.INVISIBLE); mailbox.setVisibility(View.INVISIBLE); cardEditor.setVisibility(View.GONE); newsEditor.setVisibility(View.GONE); memorialDayEditor.setVisibility(View.GONE); } facebookLogin.invalidate(); facebookLogout.invalidate(); fbShare.invalidate(); mailbox.invalidate(); cardEditor.invalidate(); newsEditor.invalidate(); memorialDayEditor.invalidate(); } private void setListeners() { fbShare.setOnClickListener(this); mailbox.setOnClickListener(this); cardEditor.setOnClickListener(this); newsEditor.setOnClickListener(this); memorialDayEditor.setOnClickListener(this); memorialDayNotification.setOnClickListener(this); advertisement.setOnClickListener(this); facebookLogin.setOnClickListener(this); facebookLogout.setOnClickListener(this); } @Override public void onClick(View v) { if (v == fbShare) { onFbShareClicked(); } else if (v == mailbox) { onMailboxClicked(); } else if (v == cardEditor) { onCardEditorClicked(); } else if (v == newsEditor) { onNewsEditorClicked(); } else if (v == memorialDayEditor) { onMemorialDayEditorClicked(); } else if (v == memorialDayNotification) { onMemorialDayNotificationClicked(); } else if (v == advertisement) { onAdvertisementClicked(); } else if (v == facebookLogin) { onFacebookLogInClicked(); } else if (v == facebookLogout) { onFacebookLogoutClicked(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.d(TAG, "onActivityResult() Result Code is - " + resultCode + ""); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } @Override public void onBackPressed() { if (exitApp) MainMenuActivity.this.finish(); else { Toast.makeText(this, getResources().getString(R.string.exit_app_to_home), Toast.LENGTH_SHORT).show(); exitApp = true; new Handler().postDelayed(new Runnable() { @Override public void run() { exitApp = false; } }, 3 * 1000); } } private void onFacebookLogoutClicked() { Log.d(TAG, "Facebook LogOut"); if (facebookManager != null) { httpManager.setFacebookID(null); facebookManager.logout(); if (Build.VERSION.SDK_INT >= 11) { recreate(); } else { Intent intent = getIntent(); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); overridePendingTransition(0, 0); startActivity(intent); overridePendingTransition(0, 0); finish(); } } } private void onFacebookLogInClicked() { Log.d(TAG, "Facebook LogIn"); facebookManager.getUserProfile(MainMenuActivity.this, facebookManager.new RequestGraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { JSONObject userJSON = user.getInnerJSONObject(); if (userJSON != null) { UserInfo userInfo = new UserInfo(userJSON); Log.d(TAG, "userInfo id is " + userInfo.getId()); Log.d(TAG, "Go to main loading"); Intent intent = new Intent(MainMenuActivity.this, MainLoadingActivity.class); startActivity(intent); finish(); } } else { Log.d(TAG, "userInfo id is null "); } } }); } private void onAdvertisementClicked() { if (NetworkUtility.isOnline(context)) { Log.d(TAG, "go to store"); Intent intent = new Intent(this, RecommendActivity.class); startActivity(intent); } else { Log.d(TAG, "Cant go to store (because network is not enable)"); Toast.makeText(MainMenuActivity.this, getString(R.string.network_connect_fail), Toast.LENGTH_LONG).show(); } } private void onMemorialDayNotificationClicked() { Log.d(TAG, "show event detail?"); } private void onMemorialDayEditorClicked() { Log.d(TAG, "go to memorial day editor"); Intent intent = new Intent(this, MainCalendarView.class); startActivity(intent); } private void onNewsEditorClicked() { Log.d(TAG, "go to news editor"); Intent intent = new Intent(this, NewspaperMainActivity.class); startActivity(intent); } private void onCardEditorClicked() { Intent intent = new Intent(this, CardCategorySelectorActivity.class); startActivity(intent); } private void onMailboxClicked() { Log.d(TAG, "go to mailbox"); Intent intent = new Intent(this, MailboxActivity.class); startActivity(intent); } private void onFbShareClicked() { Log.d(TAG, "share on facebook"); FacebookManager facebookManager = FacebookManager.getInstance(context); HttpManager httpManager = new HttpManager(); facebookManager .publishUserFeed( MainMenuActivity.this, new Publish(httpManager.getFacebookID(), getResources().getString( R.string.share_app_name), null, getResources().getString( R.string.share_caption), getResources().getString( R.string.share_description), getResources().getString( R.string.share_link))); } }