Changement de statuts ok sauvée dans les sharedpreferences
authorPhilippe Lago <lago_p@epitech.net>
Wed, 22 Apr 2009 15:19:42 +0200
changeset 116 dded6cd76f8c
parent 115 59c052ee1c90
child 117 40a48262a670
child 140 f36049828552
Changement de statuts ok sauvée dans les sharedpreferences
res/values/strings.xml
src/com/beem/project/beem/ui/ChangeStatus.java
src/com/beem/project/beem/ui/ContactListSettings.java
--- a/res/values/strings.xml	Wed Apr 22 11:48:49 2009 +0200
+++ b/res/values/strings.xml	Wed Apr 22 15:19:42 2009 +0200
@@ -36,6 +36,8 @@
 	<string name="PreferenceProxyTypeHttp">HTTP</string>
 	<string name="PreferenceProxyTypeSocks4">SOCKS4</string>
 	<string name="PreferenceProxyTypeSocks5">SOCKS5</string>
+	<string name="PreferenceStatus">status</string>
+	<string name="PreferenceStatusText">status_text</string>
 
 	<!--  SendIM class -->
 
@@ -51,5 +53,7 @@
 	<!--  ChangeStatus class -->
 
 	<string name="ChangeStatusText">Type here your status message :</string>
+	<string name="ChangeStatusOk">Updating status</string>
+	<string name="ChangeStatusNoChange">Nothing to change</string>
 
 </resources>
--- a/src/com/beem/project/beem/ui/ChangeStatus.java	Wed Apr 22 11:48:49 2009 +0200
+++ b/src/com/beem/project/beem/ui/ChangeStatus.java	Wed Apr 22 15:19:42 2009 +0200
@@ -1,26 +1,37 @@
 package com.beem.project.beem.ui;
 
 import android.app.Activity;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
+import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.Spinner;
 import android.widget.TextView;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemSelectedListener;
 
 import com.beem.project.beem.R;
+import com.beem.project.beem.utils.Status;
 
 public class ChangeStatus extends Activity {
     
-    private TextView mTextStatus;
+    private TextView mStatusText;
     private Button mOk;
     private Button mClear;
     private Spinner mSpin;
+    private String mSelectedStatus;
+    private SharedPreferences mSettings;
     private ArrayAdapter<String> mAdapter;
-    private static final String[] mStatus = {"Available for chat", "Available", "Busy", "Away",
-	"Unavailable", "Disconnected"};
+    private Context mContext = this;
+    private Toast mToast;
+    private static final String[] mStatus = {"Available", "Available for chat",
+	"Busy", "Away", "Unavailable", "Disconnected"};
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -28,31 +39,115 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.changestatus);
         
-        mTextStatus = (TextView) findViewById(R.id.ChangeStatusText);
+        mStatusText = (TextView) findViewById(R.id.ChangeStatusText);
         mOk = (Button) findViewById(R.id.ChangeStatusOk);
         mClear = (Button) findViewById(R.id.ChangeStatusClear);
         mOk.setOnClickListener(mOnClickOk);
         mClear.setOnClickListener(mOnClickClear);
-        
+        mSettings = getSharedPreferences(getString(R.string.PreferenceFileName),
+        	MODE_PRIVATE);
         
         mSpin = (Spinner) findViewById(R.id.ChangeStatusSpinner);
         mAdapter = new ArrayAdapter<String>(this,
                 android.R.layout.simple_spinner_item, mStatus);
         mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         mSpin.setAdapter(mAdapter);
+        mSpin.setOnItemSelectedListener(mStatusItem);
+        showSettings();
     }
     
+    private OnItemSelectedListener mStatusItem = new OnItemSelectedListener () {
+	@Override
+	public void onNothingSelected(AdapterView<?> arg0) {
+	}
+
+	@Override
+	public void onItemSelected(AdapterView<?> sp, View v, int i,
+		long arg3) {
+	    mSelectedStatus = (String) sp.getSelectedItem();
+	}
+    };
+    
     private OnClickListener mOnClickOk = new OnClickListener() {
 	public void onClick(View v) {
-	    CharSequence text = mTextStatus.getText();
-	    String status = mAdapter.getItem(0);
-	    Log.i("Selected item --->", status);
+	    if (textHasChanged() || statusHasChanged()) {
+		Editor edit = mSettings.edit();
+		edit.putString(getString(R.string.PreferenceStatusText),
+			mStatusText.getText().toString());
+		edit.putInt(getString(R.string.PreferenceStatus),
+			getStatusId(mSelectedStatus));
+		Log.i("Selected item --->", mSelectedStatus);
+		edit.commit();
+		mToast = Toast.makeText(mContext, R.string.ChangeStatusOk,
+			Toast.LENGTH_LONG);
+		mToast.show();
+	    }
+	    else {
+		mToast = Toast.makeText(mContext, R.string.ChangeStatusNoChange,
+			Toast.LENGTH_LONG);
+		mToast.show();
+	    }
 	}
     };
     
     private OnClickListener mOnClickClear = new OnClickListener() {
 	public void onClick(View v) {
-	    mTextStatus.setText(null);
-	};
+	    mStatusText.setText(null);
+	}
     };
+    
+    private boolean textHasChanged() {
+	return (!mStatusText.getText().toString().equals(
+		getPreferenceString(R.string.PreferenceStatusText)));
+    }
+    
+    private boolean statusHasChanged() {
+	return (mSettings.getInt(getString(R.string.PreferenceStatus),
+		Status.CONTACT_STATUS_AVAILABLE) != getStatusId(mSelectedStatus));
+    }
+    
+    private void showSettings() {
+	mStatusText.setText(getPreferenceString(R.string.PreferenceStatusText));
+	mSpin.setSelection(getPreferenceStatusId());
+    }
+    
+    private String getPreferenceString(int id) {
+	return mSettings.getString(getString(id), "");
+    }
+    
+    private int getStatusId(String status) {
+	if (status.equals(mStatus[0]))
+	    return Status.CONTACT_STATUS_AVAILABLE; // 500
+	if (status.equals(mStatus[1]))
+	    return Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT; // 600
+	if (status.equals(mStatus[2]))
+	    return Status.CONTACT_STATUS_BUSY; // 400
+	if (status.equals(mStatus[3]))
+	    return Status.CONTACT_STATUS_AWAY; // 300
+	if (status.equals(mStatus[4]))
+	    return Status.CONTACT_STATUS_UNAVAILABLE; // 200
+	if (status.equals(mStatus[5]))
+	    return Status.CONTACT_STATUS_DISCONNECT; // 100
+	return Status.CONTACT_STATUS_AVAILABLE;
+    }
+    
+    private int getPreferenceStatusId() {
+	switch (mSettings.getInt(getString(R.string.PreferenceStatus),
+		Status.CONTACT_STATUS_AVAILABLE)) {
+	    case Status.CONTACT_STATUS_DISCONNECT:
+		return 5;
+	    case Status.CONTACT_STATUS_UNAVAILABLE:
+		return 4;
+	    case Status.CONTACT_STATUS_AWAY:
+		return 3;
+	    case Status.CONTACT_STATUS_BUSY:
+		return 2;
+	    case Status.CONTACT_STATUS_AVAILABLE:
+		return 0;
+	    case Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT:
+		return 1;
+	    default:
+		return 0;
+	}
+    }
 }
--- a/src/com/beem/project/beem/ui/ContactListSettings.java	Wed Apr 22 11:48:49 2009 +0200
+++ b/src/com/beem/project/beem/ui/ContactListSettings.java	Wed Apr 22 15:19:42 2009 +0200
@@ -84,7 +84,7 @@
     private OnClickListener mOkListener = new OnClickListener() {
 	public void onClick(View v) {
 	    SharedPreferences.Editor editor = mSettings.edit();
-
+	    
 	    if (isChanged(R.id.host, R.string.PreferenceHostKey)) {
 		editor.putString(getString(R.string.PreferenceHostKey), getWidgetText(R.id.host));
 		mIsChanged = true;