Android Open Source - pokerCCF Update User Details Activity






From Project

Back to project page pokerCCF.

License

The source code is released under:

Copyright (c) 2011-2014, Intel Corporation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redist...

If you think the Android project pokerCCF listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
Copyright (c) 2011-2013, Intel Corporation
/*from  ww w . j av  a  2  s .  c o m*/
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.

    * Neither the name of Intel Corporation nor the names of its contributors
      may be used to endorse or promote products derived from this software
      without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package com.intel.inproclib.user_details;

import java.io.InputStream;
import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.intel.inproclib.R;
import com.intel.inproclib.utility.ImageViewNoLayoutRefresh;
import com.intel.inproclib.utility.InProcConstants;
import com.intel.inproclib.utility.InProc_ListViewImageManager;
import com.intel.inproclib.utility.InProc_ListViewImageManager_FileSystem;
import com.intel.mw.PlatformHelper;
import com.intel.startup.CloudAuthorizationActivity;
import com.intel.stc.events.InviteRequestEvent;
import com.intel.stc.events.InviteResponseEvent;
import com.intel.stc.events.StcException;
import com.intel.stc.interfaces.StcConnectionListener;
import com.intel.stc.utility.StcConstants;
import com.intel.stc.utility.StcSession;
import com.intel.stc.utility.d;
import com.intel.stclibcc.StcLibCC;

public class UpdateUserDetailsActivity extends Activity implements StcConnectionListener, OnFocusChangeListener, OnItemClickListener, OnClickListener
{
  private static final String tag = UpdateUserDetailsActivity.class.getSimpleName();

  public final int      START_CLOUD    = 129031;
  public static final int    CLOUD_COMPLETED  = 1091902;

  private boolean        isPaused    = false;
  private StcLibCC      mLib;
  private StcSession        mLocalSession;

  private String[]      defaultAvatarFiles;

  /* Views */

  TextView          uUserName, uUserStatus;
  ImageView          uUserAvatar;
  Button            uRegisterButton;
  Gallery            uAvatarPicker;

  InProc_ListViewImageManager  mImageManager;

  /* Activity Stuff */

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.loading_spinner);
    findViewById(R.id.outer_layout).setVisibility(View.VISIBLE);
  }

  @Override
  public void onResume()
  {
    super.onResume();

    isPaused = false;

    mImageManager = new InProc_ListViewImageManager_FileSystem(this);

    CreateLib libTask = new CreateLib();
    libTask.execute();
  }

  @Override
  public void onBackPressed()
  {
    super.onBackPressed();
    tryUserUpdate();
  }

  @Override
  public void onPause()
  {
    super.onPause();
    tryUserUpdate();

    isPaused = true;

    if (mImageManager != null)
    {
      mImageManager.destroyManager();
      mImageManager = null;
    }

    if (mLib != null)
    {
      try
      {
        mLib.disconnectFromPlatform();
      }
      catch (Exception e)
      {
      }
    }
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == START_CLOUD)
    {
      if (resultCode == StcConstants.STC_RESULT_OK)
        setResult(CLOUD_COMPLETED);
    }
  }

  /* Interfaces */

  @Override
  public void onFocusChange(View v, boolean hasFocus)
  {
    if (!hasFocus)
    {
      if (uUserName != null && v.getId() == uUserName.getId())
        updateUserName(uUserName.getText().toString().trim());
      else if (uUserStatus != null && v.getId() == uUserStatus.getId())
        updateUserStatus(uUserStatus.getText().toString().trim());
    }
  }

  @Override
  public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id)
  {
    final AsyncTask<Void, Void, Void> onItemClickAsyncTask = new AsyncTask<Void, Void, Void>() {
      @Override
      protected Void doInBackground(Void... params)
      {
        byte[] avatarBytes = null;
        String path = "avatars/" + defaultAvatarFiles[position];
        try
        {
          AssetFileDescriptor afd = UpdateUserDetailsActivity.this.getAssets().openFd(path);
          InputStream is = afd.createInputStream();
          avatarBytes = new byte[(int) afd.getLength()];
          is.read(avatarBytes);
          // If we get an exception trying to read or
          // anything prior we shouldn't set the
          // avatar anyways.
          mLib.setAvatar(avatarBytes);
        }
        catch (Exception e)
        {
          d.error(InProcConstants.INPROC_TAG, tag, "onItemClick", e);
        }

        return null;
      }

      @Override
      protected void onPostExecute(Void result)
      {
        try
        {
          mLocalSession = mLib.queryLocalSession();
        }
        catch (StcException e)
        {
        }

        Bitmap b = mLocalSession.getAvatar();
        uUserAvatar.setImageBitmap(b);
      }
    };
    onItemClickAsyncTask.execute();
  }

  /* Update Details */

  AlertDialog  ad  = null;

  private synchronized void tryUserUpdate()
  {
    onFocusChange(uUserName, false);
    onFocusChange(uUserStatus, false);
  }

  private synchronized void updateUserName(final String newName)
  {
    if (newName.length() == 0 && ad == null)
    {
      ad = new AlertDialog.Builder(this).create();
      ad.setTitle(R.string.invalid_username);
      ad.setMessage(getString(R.string.invalid_username_text));
      ad.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.ok), new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
          dialog.cancel();
          ad = null;
        }
      });

      if (mLocalSession != null && uUserName != null)
      {
        uUserName.setText(mLocalSession.getUserName());
        ad.show();
      }

      return;
    }
    try
    {
      if (mLocalSession.getUserName().compareTo(newName) != 0)
      {
        // TODO - neither of these should be done on the UI thread.
        mLib.setUserName(newName);
        mLocalSession = mLib.queryLocalSession();
      }
    }
    catch (StcException e)
    {
      d.error(InProcConstants.INPROC_TAG, tag, "updateUserName", e);
    }
  }

  private synchronized void updateUserStatus(final String newStatus)
  {
    try
    {
      if (mLocalSession.getStatus().compareTo(newStatus) != 0)
      {
        // TODO - neither of these should be done on the UI thread.
        mLib.setStatusText(newStatus);
        mLocalSession = mLib.queryLocalSession();
      }
    }
    catch (StcException e)
    {
      d.error(InProcConstants.INPROC_TAG, tag, "updateUserStatus", e);
    }
  }

  /* Inner Classes */

  private class GalleryImageAdapter extends BaseAdapter
  {
    private Context        mContext;
    private String        filePrefix  = "";
    private ArrayList<String>  files;

    public GalleryImageAdapter(Context c, String filePrefix, String[] files) {
      mContext = c;
      this.filePrefix = filePrefix;
      this.files = new ArrayList<String>();
      for (String s : files)
      {
        this.files.add(s);
      }
    }

    public GalleryImageAdapter(Context c, String filePrefix, ArrayList<String> files) {
      mContext = c;
      this.filePrefix = filePrefix;
      this.files = files;
    }

    public void updateFiles(ArrayList<String> files)
    {
      this.files = files;
      notifyDataSetChanged();
    }

    public int getCount()
    {
      return files.size();
    }

    public Object getItem(int position)
    {
      if (files != null && position < files.size() && position >= 0)
        return files.get(position);
      else
        return null;
    }

    public long getItemId(int position)
    {
      return position;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent)
    {
      ImageViewNoLayoutRefresh imageView;

      // if it's not recycled, initialize some attributes
      if (convertView == null)
      {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = (LinearLayout) inflater.inflate(R.layout.inproc_profile_pic, null);
      }
      imageView = (ImageViewNoLayoutRefresh) convertView.findViewById(R.id.profile_picture);
      if (mImageManager != null)
      {
        mImageManager.resetImageView(imageView);

        mImageManager.requestImage(filePrefix + files.get(position), imageView);
      }
      else
      {
        imageView.setImageResource(R.drawable.generic_avatar);
      }

      return convertView;
    }
  }

  private class CreateLib extends AsyncTask<Void, Void, Void>
  {

    private StcLibCC  tempLib;
    private StcSession    localSession;

    GalleryImageAdapter  adapter;

    @Override
    protected Void doInBackground(Void... params)
    {
      try
      {
        tempLib = new StcLibCC(PlatformHelper.GetPath(), UpdateUserDetailsActivity.this);
        localSession = tempLib.queryLocalSession();

        defaultAvatarFiles = UpdateUserDetailsActivity.this.getAssets().list("avatars");
        adapter = new GalleryImageAdapter(UpdateUserDetailsActivity.this, "avatars/", defaultAvatarFiles);
      }
      catch (Exception e)
      {
        tempLib = null;
      }

      return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {
      final UpdateUserDetailsActivity ui = UpdateUserDetailsActivity.this;
      // We aren't paused yet.
      if (!isPaused)
      {
        // Failure
        if (tempLib == null)
        {
          Toast.makeText(ui, "FAIL", Toast.LENGTH_LONG).show();

          ui.finish();
        }
        // Success!
        else
        {
          mLib = tempLib;
          mLocalSession = localSession;

          UpdateUserDetailsActivity.this.setContentView(R.layout.inproc_user_details_view);

          uUserName = (TextView) ui.findViewById(R.id.p_userName);
          uUserStatus = (TextView) ui.findViewById(R.id.p_userStatus);
          uUserAvatar = (ImageView) ui.findViewById(R.id.p_userAvatar);
          uAvatarPicker = (Gallery) ui.findViewById(R.id.p_avatar_gallery);
          uRegisterButton = (Button) ui.findViewById(R.id.p_registerButton);

          uUserName.setText(mLocalSession.getUserName());
          uUserName.setOnFocusChangeListener(ui);
          uUserStatus.setText(mLocalSession.getStatus());
          uUserStatus.setOnFocusChangeListener(ui);
          uUserAvatar.setImageBitmap(mLocalSession.getAvatar());
          uAvatarPicker.setAdapter(adapter);
          uAvatarPicker.setOnItemClickListener(ui);
          if (mLocalSession.isRegisteredWithCloud())
            uRegisterButton.setVisibility(View.GONE);
          else
            uRegisterButton.setOnClickListener(UpdateUserDetailsActivity.this);
        }
      }
    }
  }

  @Override
  public void onClick(View v)
  {
    // Register Button was clicked.
    try
    {
      startActivityForResult(new Intent(getApplicationContext(), CloudAuthorizationActivity.class), START_CLOUD);
    }
    catch (Exception e)
    {
    }
  }

  /* Ignore All */

  @Override
  public void connectionRequest(InviteRequestEvent ire)
  {
  }

  @Override
  public void connectionCompleted(InviteResponseEvent ire)
  {
  }

}




Java Source Code List

com.intel.friend.invitation.FriendInvitationBase.java
com.intel.friend.invitation.FriendInvitationError.java
com.intel.friend.invitation.FriendInvitationMessage.java
com.intel.friend.invitation.FriendInvitationService.java
com.intel.friend.invitation.FriendReceiveInvitationActivity.java
com.intel.friend.invitation.FriendReceiveInvitationState.java
com.intel.friend.invitation.FriendSendInvitationActivity.java
com.intel.friend.invitation.FriendSendInvitationState.java
com.intel.friend.invitation.IDataStreamEventListener.java
com.intel.friend.invitation.IFriendInvitationEventListener.java
com.intel.friend.invitation.ReadEngine.java
com.intel.friend.invitation.SendInvitationDialogFragment.java
com.intel.friend.invitation.WriteEngine.java
com.intel.inproclib.user_details.UpdateUserDetailsActivity.java
com.intel.inproclib.user_details.UserSettingsFragment.java
com.intel.inproclib.utility.ImageViewNoLayoutRefresh.java
com.intel.inproclib.utility.InProcConstants.java
com.intel.inproclib.utility.InProc_ImageManager_Assets.java
com.intel.inproclib.utility.InProc_ListViewImageManager_FileSystem.java
com.intel.inproclib.utility.InProc_ListViewImageManager.java
com.intel.inproclib.utility.MaxLengthTextWatcher.java
com.intel.inproclib.utility.NoNewlineEditText.java
com.intel.startup.AvatarFragment.java
com.intel.startup.AvatarPickerFragment.java
com.intel.startup.CloudAuthorizationActivity.java
com.intel.startup.DeviceNameFragment.java
com.intel.startup.NewUnboxFragment.java
com.intel.startup.NewUnbox.java
com.intel.startup.StartupFragment.java
com.intel.startup.UserNameFragment.java
com.intel.ux.ImageUtilities.java
com.intel.ux.StcSessionListAdapter.java
lo.wolo.pokerccf.AbstractServiceUsingActivity.java
lo.wolo.pokerccf.CCFManager.java
lo.wolo.pokerccf.ChatAdapter.java
lo.wolo.pokerccf.Constants.java
lo.wolo.pokerccf.DiscoveryNodeActivity.java
lo.wolo.pokerccf.IServiceIOListener.java
lo.wolo.pokerccf.ISimpleDiscoveryListener.java
lo.wolo.pokerccf.MultiConnectRegisterApp.java
lo.wolo.pokerccf.NodeListAdapter.java
lo.wolo.pokerccf.NodeWrapper.java
lo.wolo.pokerccf.ReadEngine.java
lo.wolo.pokerccf.RemoteUser.java
lo.wolo.pokerccf.ServerController.java
lo.wolo.pokerccf.SessionAdapter.java
lo.wolo.pokerccf.WriteEngine.java
lo.wolo.pokerengine.Card.java
lo.wolo.pokerengine.ClientCCF.java
lo.wolo.pokerengine.Client.java
lo.wolo.pokerengine.Deck.java
lo.wolo.pokerengine.HandEvaluator.java
lo.wolo.pokerengine.HandValueType.java
lo.wolo.pokerengine.HandValue.java
lo.wolo.pokerengine.Hand.java
lo.wolo.pokerengine.Player.java
lo.wolo.pokerengine.Pot.java
lo.wolo.pokerengine.TableType.java
lo.wolo.pokerengine.Table.java
lo.wolo.pokerengine.actions.Action.java
lo.wolo.pokerengine.actions.AllInAction.java
lo.wolo.pokerengine.actions.BetAction.java
lo.wolo.pokerengine.actions.BigBlindAction.java
lo.wolo.pokerengine.actions.CallAction.java
lo.wolo.pokerengine.actions.CheckAction.java
lo.wolo.pokerengine.actions.ContinueAction.java
lo.wolo.pokerengine.actions.FoldAction.java
lo.wolo.pokerengine.actions.RaiseAction.java
lo.wolo.pokerengine.actions.SmallBlindAction.java
lo.wolo.pokerengine.bots.BasicBot.java
lo.wolo.pokerengine.bots.Bot.java
lo.wolo.pokerengine.bots.DummyBot.java
lo.wolo.pokerengine.util.PokerUtils.java