Java tutorial
/* * This is the source code of Telegram for Android v. 1.3.2. * It is licensed under GNU GPL v. 2 or later. * You should have received a copy of the license in this archive (see LICENSE). * * Copyright Nikolai Kudashov, 2013. */ package com.yahala.ui; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v4.internal.view.SupportMenuItem; import android.support.v7.app.ActionBar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; import com.yahala.messenger.R; import com.yahala.messenger.FileLog; import com.yahala.android.LocaleController; import com.yahala.messenger.MessagesController; import com.yahala.messenger.NotificationCenter; import com.yahala.messenger.TLRPC; import com.yahala.ui.Rows.ChatOrUserCell; import com.yahala.ui.Views.AvatarUpdater; import com.yahala.ui.Views.BaseFragment; import com.yahala.ui.Views.CircleImageView.PictureImplCircleImageView; import com.yahala.ui.Views.PinnedHeaderListView; import com.yahala.ui.Views.SectionedBaseAdapter; import com.yahala.xmpp.ContactsController; import com.yahala.xmpp.MessagesStorage; import com.yahala.messenger.Utilities; import java.util.ArrayList; import java.util.concurrent.Semaphore; //import com.yahala.ui.Views.AvatarUpdater; public class GroupCreateFinalActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, AvatarUpdater.AvatarUpdaterDelegate { private PinnedHeaderListView listView; private EditText nameTextView; private TLRPC.FileLocation avatar; private TLRPC.InputFile uploadedAvatar; private ArrayList<String> selectedContacts; private PictureImplCircleImageView avatarImage; private boolean createAfterUpload; private boolean donePressed; private AvatarUpdater avatarUpdater = new AvatarUpdater(); private String nameToSet = null; private ProgressDialog progressDialog = null; @SuppressWarnings("unchecked") @Override public boolean onFragmentCreate() { NotificationCenter.getInstance().addObserver(this, MessagesController.updateInterfaces); NotificationCenter.getInstance().addObserver(this, MessagesController.chatDidCreated); NotificationCenter.getInstance().addObserver(this, MessagesController.chatDidFailCreate); avatarUpdater.parentFragment = this; avatarUpdater.delegate = this; selectedContacts = getArguments().getStringArrayList("result"); final ArrayList<String> usersToLoad = new ArrayList<String>(); for (String jid : selectedContacts) { TLRPC.User user = ContactsController.getInstance().friendsDict.get(jid); if (user == null) { usersToLoad.add(jid); } } if (!usersToLoad.isEmpty()) { final Semaphore semaphore = new Semaphore(0); final ArrayList<TLRPC.User> users = new ArrayList<TLRPC.User>(); final boolean[] error = new boolean[1]; MessagesStorage.getInstance().storageQueue.postRunnable(new Runnable() { @Override public void run() { users.addAll(MessagesStorage.getInstance().getUsers(usersToLoad, error)); semaphore.release(); } }); try { semaphore.acquire(); } catch (Exception e) { FileLog.e("tmessages", e); } //if (error[0]) { // return false; // } if (!users.isEmpty()) { for (TLRPC.User user : users) { ContactsController.getInstance().friendsDict.putIfAbsent(user.jid, user); } } else { return false; } } super.onFragmentCreate(); return true; } @Override public void onFragmentDestroy() { super.onFragmentDestroy(); NotificationCenter.getInstance().removeObserver(this, MessagesController.updateInterfaces); NotificationCenter.getInstance().removeObserver(this, MessagesController.chatDidCreated); NotificationCenter.getInstance().removeObserver(this, MessagesController.chatDidFailCreate); // avatarUpdater.clear(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (fragmentView == null) { fragmentView = inflater.inflate(R.layout.group_create_final_layout, container, false); final ImageButton button2 = (ImageButton) fragmentView.findViewById(R.id.settings_change_avatar_button); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity); CharSequence[] items; if (avatar != null) { items = new CharSequence[] { LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley), LocaleController.getString("DeletePhoto", R.string.DeletePhoto) }; } else { items = new CharSequence[] { LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley) }; } builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (i == 0) { // avatarUpdater.openCamera(); } else if (i == 1) { // avatarUpdater.openGallery(); } else if (i == 2) { avatar = null; uploadedAvatar = null; // avatarImage.setImage(avatar, "50_50", R.drawable.group_blue); } } }); builder.show().setCanceledOnTouchOutside(true); } }); avatarImage = (PictureImplCircleImageView) fragmentView.findViewById(R.id.settings_avatar_image); nameTextView = (EditText) fragmentView.findViewById(R.id.bubble_input_text); nameTextView.setHint( LocaleController.getString("EnterGroupNamePlaceholder", R.string.EnterGroupNamePlaceholder)); listView = (PinnedHeaderListView) fragmentView.findViewById(R.id.listView); listView.setAdapter(new ListAdapter(parentActivity)); } else { ViewGroup parent = (ViewGroup) fragmentView.getParent(); if (parent != null) { parent.removeView(fragmentView); } } return fragmentView; } @Override public void applySelfActionBar() { if (parentActivity == null) { return; } ActionBar actionBar = parentActivity.getSupportActionBar(); actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayUseLogoEnabled(false); actionBar.setDisplayShowCustomEnabled(false); actionBar.setCustomView(null); actionBar.setSubtitle(null); actionBar.setTitle(LocaleController.getString("NewGroup", R.string.NewGroup)); TextView title = (TextView) parentActivity.findViewById(R.id.action_bar_title); if (title == null) { final int subtitleId = parentActivity.getResources().getIdentifier("action_bar_title", "id", "android"); title = (TextView) parentActivity.findViewById(subtitleId); } if (title != null) { title.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); title.setCompoundDrawablePadding(0); } } @Override public void onResume() { super.onResume(); if (getActivity() == null) { return; } ((LaunchActivity) parentActivity).showActionBar(); ((LaunchActivity) parentActivity).updateActionBar(); } /* @Override public void didUploadedPhoto(final TLRPC.InputFile file, final TLRPC.PhotoSize small, final TLRPC.PhotoSize big) { Utilities.RunOnUIThread(new Runnable() { @Override public void run() { uploadedAvatar = file; avatar = small.location; //avatarImage.setImage(avatar, "50_50", R.drawable.group_blue); if (createAfterUpload) { FileLog.e("tmessages", "avatar did uploaded"); MessagesController.getInstance().createChat(nameTextView.getText().toString(), selectedContacts, uploadedAvatar); } } }); }*/ @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId) { case android.R.id.home: finishFragment(); break; } return true; } @Override public void didUploadedPhoto(final TLRPC.InputFile file, final TLRPC.PhotoSize small, final TLRPC.PhotoSize big) { Utilities.RunOnUIThread(new Runnable() { @Override public void run() { uploadedAvatar = file; avatar = small.location; //avatarImage.setImage(avatar, "50_50", R.drawable.group_blue); if (createAfterUpload) { FileLog.e("tmessages", "avatar did uploaded"); MessagesController.getInstance().createChat(nameTextView.getText().toString(), selectedContacts, uploadedAvatar); } } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // avatarUpdater.onActivityResult(requestCode, resultCode, data); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.group_create_menu, menu); SupportMenuItem doneItem = (SupportMenuItem) menu.findItem(R.id.done_menu_item); TextView doneTextView = (TextView) doneItem.getActionView().findViewById(R.id.done_button); doneTextView.setText(LocaleController.getString("Done", R.string.Done)); doneTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /* if (donePressed || parentActivity == null) { return; } if (nameTextView.getText().length() == 0) { return; } donePressed = true; if (avatarUpdater.uploadingAvatar != null) { createAfterUpload = true; } else { progressDialog = new ProgressDialog(parentActivity); progressDialog.setMessage(LocaleController.getString("Loading", R.string.Loading)); progressDialog.setCanceledOnTouchOutside(false); progressDialog.setCancelable(false); final long reqId = MessagesController.getInstance().createChat(nameTextView.getText().toString(), selectedContacts, uploadedAvatar); progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, LocaleController.getString("Cancel", R.string.Cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ConnectionsManager.getInstance().cancelRpc(reqId, true); donePressed = false; try { dialog.dismiss(); } catch (Exception e) { FileLog.e("tmessages", e); } } }); progressDialog.show(); }*/ } }); } @Override public void didReceivedNotification(int id, final Object... args) { if (id == MessagesController.updateInterfaces) { int mask = (Integer) args[0]; if ((mask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (mask & MessagesController.UPDATE_MASK_NAME) != 0 || (mask & MessagesController.UPDATE_MASK_STATUS) != 0) { updateVisibleRows(mask); } } else if (id == MessagesController.chatDidFailCreate) { if (progressDialog != null) { try { progressDialog.dismiss(); } catch (Exception e) { FileLog.e("tmessages", e); } } donePressed = false; FileLog.e("tmessages", "did fail create chat"); } else if (id == MessagesController.chatDidCreated) { Utilities.RunOnUIThread(new Runnable() { @Override public void run() { if (progressDialog != null) { try { progressDialog.dismiss(); } catch (Exception e) { FileLog.e("tmessages", e); } } ChatActivity fragment = new ChatActivity(); Bundle bundle = new Bundle(); bundle.putInt("chat_id", (Integer) args[0]); fragment.setArguments(bundle); ((LaunchActivity) parentActivity).presentFragment(fragment, "chat" + Math.random(), true, false); } }); } } private void updateVisibleRows(int mask) { if (listView == null) { return; } int count = listView.getChildCount(); for (int a = 0; a < count; a++) { View child = listView.getChildAt(a); if (child instanceof ChatOrUserCell) { ((ChatOrUserCell) child).update(mask); } } } private class ListAdapter extends SectionedBaseAdapter { private Context mContext; public ListAdapter(Context context) { mContext = context; } @Override public Object getItem(int section, int position) { return null; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return false; } @Override public long getItemId(int section, int position) { return 0; } @Override public int getSectionCount() { return 1; } @Override public int getCountForSection(int section) { if (selectedContacts == null) { return 0; } return selectedContacts.size(); } @Override public View getItemView(int section, int position, View convertView, ViewGroup parent) { TLRPC.User user = ContactsController.getInstance().friendsDict.get(selectedContacts.get(position)); if (convertView == null) { convertView = new ChatOrUserCell(mContext); ((ChatOrUserCell) convertView).usePadding = false; } ((ChatOrUserCell) convertView).setData(user, null, null, null, null); ((ChatOrUserCell) convertView).useSeparator = position != selectedContacts.size() - 1; return convertView; } @Override public int getItemViewType(int section, int position) { return 0; } @Override public int getItemViewTypeCount() { return 1; } @Override public int getSectionHeaderViewType(int section) { return 0; } @Override public int getSectionHeaderViewTypeCount() { return 1; } @Override public View getSectionHeaderView(int section, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = li.inflate(R.layout.settings_section_layout, parent, false); convertView.setBackgroundColor(0xffffffff); } TextView textView = (TextView) convertView.findViewById(R.id.settings_section_text); if (selectedContacts.size() == 1) { textView.setText( selectedContacts.size() + " " + LocaleController.getString("MEMBER", R.string.MEMBER)); } else { textView.setText( selectedContacts.size() + " " + LocaleController.getString("MEMBERS", R.string.MEMBERS)); } return convertView; } } }