Initial commit
[mustard2:mustard2.git] / src / org / mustard2 / android / activity / setup / AccountSetupBasics.java
1 /**
2  * MUSTARD: Android's Client for StatusNet
3  * 
4  * Copyright (C) 2009-2010 macno.org, Michele Azzolari
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14  * for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program; if not, write to the Free Software Foundation, Inc.,
18  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  * 
20  */
21 package org.mustard2.android.activity.setup;
22
23 import java.net.MalformedURLException;
24 import java.net.URL;
25
26 import org.mustard2.android.Account;
27 import org.mustard2.android.MustardApp;
28 import org.mustard2.android.R;
29 import org.mustard2.provider.Provider;
30 import org.mustard2.util.AndroidUtil;
31 import org.mustard2.util.CryptUtil;
32 import org.mustard2.util.Utility;
33
34 import android.app.Activity;
35 import android.content.Intent;
36 import android.os.Bundle;
37 import android.util.Log;
38 import android.view.View;
39 import android.widget.Button;
40 import android.widget.EditText;
41
42 public class AccountSetupBasics extends AccountSetup {
43
44         protected final String TAG = "mustard/settings/Basic";
45         
46         private static final String EXTRA_INSTANCE = "extra_instance";
47     private EditText mNicknameView;
48     private EditText mPasswordView;
49     private EditText mInstanceView;
50
51     private Button mNextButton;
52     private Button mOAuthSetupButton;
53
54     public static void actionNewAccount(Activity fromActivity) {
55         Intent i = new Intent(fromActivity, AccountSetupBasics.class);
56         fromActivity.startActivity(i);
57     }
58     
59     public static void actionNewAccount(Activity fromActivity, String instance) {
60         Intent i = new Intent(fromActivity, AccountSetupBasics.class);
61         i.putExtra(EXTRA_INSTANCE, instance);
62         fromActivity.startActivity(i);
63     }
64
65     @Override
66     public void onCreate(Bundle savedInstanceState) {
67         super.onCreate(savedInstanceState);
68         setContentView(R.layout.account_setup_basics);
69
70         mNicknameView = (EditText)findViewById(R.id.account_nickname);
71         mPasswordView = (EditText)findViewById(R.id.account_password);
72         mInstanceView = (EditText)findViewById(R.id.account_instance);
73         
74         Intent i = getIntent();
75         String extraInstance = i.getStringExtra(EXTRA_INSTANCE);
76         
77         if (extraInstance!=null)
78                 mInstanceView.setText(extraInstance);
79         
80         mNextButton = (Button)findViewById(R.id.next);
81         mOAuthSetupButton = (Button)findViewById(R.id.oauth_setup);
82         
83         mNextButton.setOnClickListener(this);
84         mOAuthSetupButton.setOnClickListener(this);
85
86         mNicknameView.addTextChangedListener(this);
87         mPasswordView.addTextChangedListener(this);
88         mInstanceView.addTextChangedListener(this);
89         
90         if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_ACCOUNT)) {
91             mAccount = (Account)savedInstanceState.getSerializable(EXTRA_ACCOUNT);
92         }
93
94     }
95
96     @Override
97     public void onResume() {
98         super.onResume();
99         validateFields();
100     }
101
102     @Override
103     public void onSaveInstanceState(Bundle outState) {
104         super.onSaveInstanceState(outState);
105         outState.putSerializable(EXTRA_ACCOUNT, mAccount);
106     }
107
108     @Override
109         protected void validateFields() {
110         boolean valid = Utility.requiredFieldValid(mNicknameView)
111                 && Utility.requiredFieldValid(mPasswordView)
112                 && Utility.requiredFieldValid(mInstanceView);
113         
114         
115         mNextButton.setEnabled(valid);
116     }
117
118     private void finishAutoSetup() {
119         
120         String nickname = mNicknameView.getText().toString().trim();
121         String password = mPasswordView.getText().toString().trim();
122         // Check if instance if supported
123         String domain = mInstanceView.getText().toString().trim();
124         if (!domain.startsWith("http")) {
125                 domain = "http://" + domain;
126         }
127         if (domain.endsWith("/")) {
128                 domain= domain.substring(0, domain.length()-1);
129         }
130         URL url = null;
131         try {
132                 url = new URL (domain);
133         } catch (MalformedURLException e) {
134                 
135                 return;
136         }
137         mProvider = new Provider();
138         mProvider.url = url;
139         mAccount = new Account();
140         mAccount.setProvider(mProvider);
141         mAccount.setNickname(nickname);
142                 // Crypt it before storing.
143                 String seed = AndroidUtil.getIMSI(this);
144                 try {
145                         password = CryptUtil.encrypt(seed, password);
146                 } catch (Exception e) {
147                         Log.e(MustardApp.APPLICATION_NAME,"ERROR CRYPTING PASSWORD: " + e.getMessage());
148                 }
149         mAccount.setPassword(password);
150         mAccount.setAutomaticCheckIntervalMinutes(DEFAULT_ACCOUNT_CHECK_INTERVAL);
151         
152         AccountSetupCheckSettings.actionCheckSettings(this, mAccount, mProvider);
153         
154     }
155
156     private void onNext() {
157
158         finishAutoSetup();        
159     }
160
161     @Override
162     public void onActivityResult(int requestCode, int resultCode, Intent data) {
163         if (resultCode == RESULT_OK) {
164                 
165                 mAccount = (Account)data.getSerializableExtra(EXTRA_ACCOUNT);
166                 Log.e(TAG,"Returned : " + mAccount.getProvider().url );
167                 // TODO ENABLE TimelineNoticeList
168 //            TimelineNoticeList.actionHandleTimeline(this, mAccount);
169             finish();
170         }
171     }
172
173     private void onOAuthSetup() {
174         AccountSetupOAuth.actionNewAccount(this);
175         finish();
176     }
177
178     public void onClick(View v) {
179         switch (v.getId()) {
180             case R.id.next:
181                 onNext();
182                 break;
183             case R.id.oauth_setup:
184                 onOAuthSetup();
185                 break;
186         }
187     }
188
189 }