mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-27 07:49:28 +00:00
Created account image settings
This commit is contained in:
parent
d12c4014fd
commit
aef18b085a
@ -57,6 +57,7 @@ dependencies {
|
||||
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
|
||||
implementation 'com.android.support:design:28.0.0-rc01'
|
||||
implementation 'com.android.support:preference-v7:28.0.0-rc01'
|
||||
implementation 'com.android.support:support-v4:28.0.0-rc01'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||
|
@ -49,6 +49,10 @@
|
||||
android:name=".ui.activities.PDFActivity"
|
||||
android:label="@string/activity_view_pdf_label" />
|
||||
|
||||
<!-- Account settings activity -->
|
||||
<activity android:name=".ui.activities.AccountSettingsActivity"
|
||||
android:label="@string/activity_account_settings_label"/>
|
||||
|
||||
<!-- Settings activity -->
|
||||
<activity
|
||||
android:name=".ui.activities.SettingsActivity"
|
||||
@ -57,7 +61,8 @@
|
||||
<!-- About activity -->
|
||||
<activity
|
||||
android:name=".ui.activities.AboutActivity"
|
||||
android:label="@string/activity_about_title"/>
|
||||
android:label="@string/activity_about_title" />
|
||||
|
||||
|
||||
</application>
|
||||
|
||||
|
@ -0,0 +1,12 @@
|
||||
package org.communiquons.android.comunic.client.data.enums;
|
||||
|
||||
/**
|
||||
* Account image visibility levels
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public enum AccountImageVisibility {
|
||||
OPEN,
|
||||
PUBLIC,
|
||||
FRIENDS
|
||||
}
|
@ -0,0 +1,130 @@
|
||||
package org.communiquons.android.comunic.client.data.helpers;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.enums.AccountImageVisibility;
|
||||
import org.communiquons.android.comunic.client.data.models.APIFileRequest;
|
||||
import org.communiquons.android.comunic.client.data.models.APIPostFile;
|
||||
import org.communiquons.android.comunic.client.data.models.APIRequest;
|
||||
import org.communiquons.android.comunic.client.data.models.APIResponse;
|
||||
import org.communiquons.android.comunic.client.data.models.AccountImageSettings;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/**
|
||||
* Account settings helper
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class AccountSettingsHelper extends BaseHelper {
|
||||
|
||||
public AccountSettingsHelper(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get account image settings
|
||||
*
|
||||
* @return The account image settings / null in case of failure
|
||||
*/
|
||||
@Nullable
|
||||
public AccountImageSettings getAccountImageSettings(){
|
||||
|
||||
APIRequest request = new APIRequest(getContext(), "settings/get_account_image");
|
||||
try {
|
||||
APIResponse response = new APIRequestHelper().exec(request);
|
||||
|
||||
if(response.getResponse_code() != 200)
|
||||
return null;
|
||||
|
||||
return APIToAccountImageSettings(response.getJSONObject());
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload a new account image
|
||||
*
|
||||
* @param bitmap The image bitmap to upload
|
||||
* @return The result of the operation
|
||||
*/
|
||||
public boolean uploadAccountImage(Bitmap bitmap){
|
||||
APIFileRequest request = new APIFileRequest(getContext(),
|
||||
"settings/upload_account_image");
|
||||
|
||||
APIPostFile file = new APIPostFile();
|
||||
file.setFileName("image.png");
|
||||
file.setBitmap(bitmap);
|
||||
file.setFieldName("picture");
|
||||
request.addFile(file);
|
||||
|
||||
try {
|
||||
return new APIRequestHelper().execPostFile(request).getResponse_code() == 200;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete user account image
|
||||
*
|
||||
* @return TRUE for a success / FALSE else
|
||||
*/
|
||||
public boolean deleteAccountImage(){
|
||||
APIRequest request = new APIRequest(getContext(), "settings/delete_account_image");
|
||||
request.setTryContinueOnError(true);
|
||||
|
||||
try {
|
||||
APIResponse response = new APIRequestHelper().exec(request);
|
||||
return response.getResponse_code() == 200;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse an API entry into an AccountImageSettings entry
|
||||
*
|
||||
* @param object JSON object to parse
|
||||
* @return Generated AccountImageSettings object
|
||||
* @throws JSONException In case of failure
|
||||
*/
|
||||
private static AccountImageSettings APIToAccountImageSettings(JSONObject object)
|
||||
throws JSONException {
|
||||
AccountImageSettings accountImageSettings = new AccountImageSettings();
|
||||
accountImageSettings.setHas_image(object.getBoolean("has_image"));
|
||||
accountImageSettings.setImageURL(object.getString("image_url"));
|
||||
accountImageSettings.setVisibility(StringToAccountImageVisibility(
|
||||
object.getString("visibility")));
|
||||
return accountImageSettings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn a string into an AccountImageVisibility level
|
||||
*
|
||||
* @param string The string to parse
|
||||
* @return Matching enum entry
|
||||
*/
|
||||
private static AccountImageVisibility StringToAccountImageVisibility(String string){
|
||||
switch (string){
|
||||
case "open":
|
||||
return AccountImageVisibility.OPEN;
|
||||
|
||||
case "public":
|
||||
return AccountImageVisibility.PUBLIC;
|
||||
|
||||
case "friends":
|
||||
return AccountImageVisibility.FRIENDS;
|
||||
|
||||
default:
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package org.communiquons.android.comunic.client.data.models;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.enums.AccountImageVisibility;
|
||||
|
||||
/**
|
||||
* Account image settings container
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class AccountImageSettings {
|
||||
|
||||
//Private fields
|
||||
private boolean has_image;
|
||||
private String imageURL;
|
||||
private AccountImageVisibility visibility;
|
||||
|
||||
public boolean isHas_image() {
|
||||
return has_image;
|
||||
}
|
||||
|
||||
public void setHas_image(boolean has_image) {
|
||||
this.has_image = has_image;
|
||||
}
|
||||
|
||||
public String getImageURL() {
|
||||
return imageURL;
|
||||
}
|
||||
|
||||
public void setImageURL(String imageURL) {
|
||||
this.imageURL = imageURL;
|
||||
}
|
||||
|
||||
|
||||
public AccountImageVisibility getVisibility() {
|
||||
return visibility;
|
||||
}
|
||||
|
||||
public void setVisibility(AccountImageVisibility visibility) {
|
||||
this.visibility = visibility;
|
||||
}
|
||||
}
|
@ -31,6 +31,11 @@ public final class Constants {
|
||||
* Intent code : search a user
|
||||
*/
|
||||
public static final int MAIN_ACTIVITY_SEARCH_USER_INTENT = 3;
|
||||
|
||||
/**
|
||||
* Pick image to update account image
|
||||
*/
|
||||
public static final int ACCOUNT_IMAGE_SETTINGS_PICK_NEW_INTENT = 4;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,44 @@
|
||||
package org.communiquons.android.comunic.client.ui.activities;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import org.communiquons.android.comunic.client.ui.fragments.accountsettings.AccountSettingsMainFragment;
|
||||
|
||||
/**
|
||||
* Account settings activity
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class AccountSettingsActivity extends BaseActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
//Open main fragment if required
|
||||
if(savedInstanceState == null){
|
||||
AccountSettingsMainFragment fragment = new AccountSettingsMainFragment();
|
||||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||||
transaction.replace(android.R.id.content, fragment);
|
||||
transaction.commit();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
|
||||
//To go back
|
||||
if(item.getItemId() == android.R.id.home){
|
||||
if(getSupportFragmentManager().getBackStackEntryCount() > 0)
|
||||
getSupportFragmentManager().popBackStack();
|
||||
else
|
||||
finish();
|
||||
}
|
||||
|
||||
return super.onContextItemSelected(item);
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package org.communiquons.android.comunic.client.ui.activities;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
||||
/**
|
||||
* Base application activity
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public abstract class BaseActivity extends AppCompatActivity {
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ActionBar getSupportActionBar() {
|
||||
assert super.getSupportActionBar() != null;
|
||||
return super.getSupportActionBar();
|
||||
}
|
||||
}
|
@ -57,7 +57,7 @@ import static org.communiquons.android.comunic.client.ui.Constants.IntentRequest
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class MainActivity extends AppCompatActivity implements
|
||||
public class MainActivity extends BaseActivity implements
|
||||
openConversationListener, updateConversationListener, onOpenUsersPageListener,
|
||||
onPostOpenListener, NavigationBar.OnNavigationItemSelectedListener {
|
||||
|
||||
@ -153,7 +153,6 @@ public class MainActivity extends AppCompatActivity implements
|
||||
conversationsListHelper = new ConversationsListHelper(this, dbHelper);
|
||||
|
||||
//Use navigation bar
|
||||
assert getSupportActionBar() != null;
|
||||
getSupportActionBar().hide();
|
||||
mNavBar = findViewById(R.id.nav_bar);
|
||||
mNavBar.setOnNavigationItemSelectedListener(this);
|
||||
@ -230,6 +229,11 @@ public class MainActivity extends AppCompatActivity implements
|
||||
return true;
|
||||
}
|
||||
|
||||
//To open account settings
|
||||
if(id == R.id.action_account_settings){
|
||||
openAccountSettings();
|
||||
return true;
|
||||
}
|
||||
|
||||
//To open settings fragment
|
||||
if (id == R.id.action_settings) {
|
||||
@ -430,6 +434,13 @@ public class MainActivity extends AppCompatActivity implements
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Open account settings
|
||||
*/
|
||||
void openAccountSettings(){
|
||||
startActivity(new Intent(this, AccountSettingsActivity.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Open settings activity
|
||||
*/
|
||||
|
@ -0,0 +1,22 @@
|
||||
package org.communiquons.android.comunic.client.ui.asynctasks;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.helpers.AccountSettingsHelper;
|
||||
|
||||
/**
|
||||
* Delete user account image AsyncTask
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class DeleteUserAccountImageTask extends SafeAsyncTask<Void, Void, Boolean> {
|
||||
|
||||
public DeleteUserAccountImageTask(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(Void... voids) {
|
||||
return new AccountSettingsHelper(getContext()).deleteAccountImage();
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package org.communiquons.android.comunic.client.ui.asynctasks;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.helpers.AccountSettingsHelper;
|
||||
import org.communiquons.android.comunic.client.data.models.AccountImageSettings;
|
||||
|
||||
/**
|
||||
* Get account image settings task
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class GetAccountImageSettingsTask extends SafeAsyncTask<Void, Void, AccountImageSettings> {
|
||||
|
||||
public GetAccountImageSettingsTask(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AccountImageSettings doInBackground(Void... voids) {
|
||||
return new AccountSettingsHelper(getContext()).getAccountImageSettings();
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package org.communiquons.android.comunic.client.ui.asynctasks;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.helpers.AccountSettingsHelper;
|
||||
|
||||
/**
|
||||
* Upload a new account image task
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class UploadNewAccountImageTask extends SafeAsyncTask<Bitmap, Void, Boolean> {
|
||||
|
||||
public UploadNewAccountImageTask(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(Bitmap... bitmaps) {
|
||||
|
||||
return bitmaps.length != 0 &&
|
||||
bitmaps[0] != null &&
|
||||
new AccountSettingsHelper(getContext()).uploadAccountImage(bitmaps[0]);
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,248 @@
|
||||
package org.communiquons.android.comunic.client.ui.fragments.accountsettings;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.models.AccountImageSettings;
|
||||
import org.communiquons.android.comunic.client.ui.asynctasks.DeleteUserAccountImageTask;
|
||||
import org.communiquons.android.comunic.client.ui.asynctasks.GetAccountImageSettingsTask;
|
||||
import org.communiquons.android.comunic.client.ui.asynctasks.SafeAsyncTask;
|
||||
import org.communiquons.android.comunic.client.ui.asynctasks.UploadNewAccountImageTask;
|
||||
import org.communiquons.android.comunic.client.ui.preference.AccountImagePreference;
|
||||
import org.communiquons.android.comunic.client.ui.utils.BitmapUtils;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
import static org.communiquons.android.comunic.client.ui.Constants.IntentRequestCode.ACCOUNT_IMAGE_SETTINGS_PICK_NEW_INTENT;
|
||||
|
||||
/**
|
||||
* Account image settings fragment
|
||||
*/
|
||||
public class AccountImageSettingsFragment extends BaseAccountSettingsFragment implements Preference.OnPreferenceClickListener {
|
||||
|
||||
private static final String TAG = AccountImageSettingsFragment.class.getSimpleName();
|
||||
|
||||
//Preferences
|
||||
private static final String PREFERENCE_UPDATE_ACCOUNT_IMAGE = "update_account_image";
|
||||
private static final String PREFERENCE_DELETE_ACCOUNT_IMAGE = "delete_account_image";
|
||||
|
||||
private AccountImageSettings mAccountImageSettings;
|
||||
|
||||
private GetAccountImageSettingsTask mGetAccountImageSettingsTask;
|
||||
private UploadNewAccountImageTask mUploadNewAccountImageTask;
|
||||
private DeleteUserAccountImageTask mDeleteUserAccountImageTask;
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle bundle, String s) {
|
||||
addPreferencesFromResource(R.xml.account_preference_image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
findPreference(PREFERENCE_UPDATE_ACCOUNT_IMAGE).setOnPreferenceClickListener(this);
|
||||
findPreference(PREFERENCE_DELETE_ACCOUNT_IMAGE).setOnPreferenceClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
getActivity().setTitle(R.string.preferences_account_image_title);
|
||||
|
||||
if(mAccountImageSettings == null)
|
||||
load_settings();
|
||||
else
|
||||
onGotAccountImageSettings(mAccountImageSettings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
unset_loading_tasks();
|
||||
removeLoadingDialog();
|
||||
}
|
||||
|
||||
private void unset_loading_tasks(){
|
||||
if(mGetAccountImageSettingsTask != null)
|
||||
mGetAccountImageSettingsTask.setOnPostExecuteListener(null);
|
||||
|
||||
if(mUploadNewAccountImageTask != null)
|
||||
mUploadNewAccountImageTask.setOnPostExecuteListener(null);
|
||||
|
||||
if(mDeleteUserAccountImageTask != null)
|
||||
mDeleteUserAccountImageTask.setOnPostExecuteListener(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Load account image settings. As soon as this method is called, cached information about
|
||||
* account image are cleared, so on pause and resume of the fragment it can be loaded again
|
||||
*/
|
||||
private void load_settings(){
|
||||
unset_loading_tasks();
|
||||
|
||||
showLoadingDialog();
|
||||
|
||||
mAccountImageSettings = null;
|
||||
mGetAccountImageSettingsTask = new GetAccountImageSettingsTask(getActivity());
|
||||
mGetAccountImageSettingsTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<AccountImageSettings>() {
|
||||
@Override
|
||||
public void OnPostExecute(AccountImageSettings accountImageSettings) {
|
||||
onGotAccountImageSettings(accountImageSettings);
|
||||
}
|
||||
});
|
||||
mGetAccountImageSettingsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
|
||||
private void onGotAccountImageSettings(@Nullable AccountImageSettings accountImageSettings){
|
||||
|
||||
removeLoadingDialog();
|
||||
|
||||
//Check for errors
|
||||
if(accountImageSettings == null){
|
||||
Toast.makeText(getActivity(), R.string.err_get_account_image_settings,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
mAccountImageSettings = accountImageSettings;
|
||||
|
||||
//Apply settings
|
||||
((AccountImagePreference)findPreference(PREFERENCE_UPDATE_ACCOUNT_IMAGE))
|
||||
.setImage_url(mAccountImageSettings.getImageURL());
|
||||
findPreference(PREFERENCE_DELETE_ACCOUNT_IMAGE).setEnabled(
|
||||
accountImageSettings.isHas_image());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
switch (preference.getKey()){
|
||||
|
||||
//Upload new account image
|
||||
case PREFERENCE_UPDATE_ACCOUNT_IMAGE:
|
||||
pickNewAccountImage();
|
||||
break;
|
||||
|
||||
//Delete account image
|
||||
case PREFERENCE_DELETE_ACCOUNT_IMAGE:
|
||||
confirmDeleteAccountImage();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
//Check if the request was to choose a new account image
|
||||
if(requestCode == ACCOUNT_IMAGE_SETTINGS_PICK_NEW_INTENT)
|
||||
pickNewAccountImageCallback(resultCode, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt the user to choose a new account image
|
||||
*/
|
||||
private void pickNewAccountImage(){
|
||||
Intent intent = new Intent(Intent.ACTION_PICK);
|
||||
intent.setType("image/*");
|
||||
startActivityForResult(intent, ACCOUNT_IMAGE_SETTINGS_PICK_NEW_INTENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick new account image callback
|
||||
*
|
||||
* @param resultCode Result code of the operation
|
||||
* @param data Associated data
|
||||
*/
|
||||
private void pickNewAccountImageCallback(int resultCode, Intent data){
|
||||
if(resultCode != Activity.RESULT_OK)
|
||||
return;
|
||||
|
||||
try {
|
||||
uploadNewAccountImage(BitmapUtils.IntentResultToBitmap(getActivity(), data));
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform the upload of new account image
|
||||
*
|
||||
* @param bitmap The new account image, as bitmap
|
||||
*/
|
||||
private void uploadNewAccountImage(Bitmap bitmap){
|
||||
showLoadingDialog();
|
||||
unset_loading_tasks();
|
||||
|
||||
mUploadNewAccountImageTask = new UploadNewAccountImageTask(getContext());
|
||||
mUploadNewAccountImageTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<Boolean>() {
|
||||
@Override
|
||||
public void OnPostExecute(Boolean result) {
|
||||
if(!result)
|
||||
Toast.makeText(getActivity(), R.string.err_upload_account_image,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
|
||||
load_settings();
|
||||
}
|
||||
});
|
||||
mUploadNewAccountImageTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, bitmap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prompt user confirmation to delete account image
|
||||
*/
|
||||
private void confirmDeleteAccountImage(){
|
||||
new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.dialog_delete_accountimage_title)
|
||||
.setMessage(R.string.dialog_delete_accountimage_message)
|
||||
.setNegativeButton(R.string.dialog_delete_accountimage_cancel, null)
|
||||
|
||||
.setPositiveButton(R.string.dialog_delete_accountimage_confirm, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
deleteAccountImage();
|
||||
}
|
||||
})
|
||||
|
||||
.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform account image deletion
|
||||
*/
|
||||
private void deleteAccountImage(){
|
||||
showLoadingDialog();
|
||||
unset_loading_tasks();
|
||||
|
||||
mDeleteUserAccountImageTask = new DeleteUserAccountImageTask(getActivity());
|
||||
mDeleteUserAccountImageTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<Boolean>() {
|
||||
@Override
|
||||
public void OnPostExecute(Boolean result) {
|
||||
|
||||
if(!result)
|
||||
Toast.makeText(getActivity(), R.string.err_delete_account_image,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
|
||||
load_settings();
|
||||
}
|
||||
});
|
||||
mDeleteUserAccountImageTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package org.communiquons.android.comunic.client.ui.fragments.accountsettings;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceFragmentCompat;
|
||||
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
|
||||
/**
|
||||
* Main account preference fragment
|
||||
*/
|
||||
public class AccountSettingsMainFragment extends PreferenceFragmentCompat
|
||||
implements Preference.OnPreferenceClickListener {
|
||||
|
||||
private static final String PREFERENCE_CATEGORY_ACCOUNT_IMAGE = "preference_category_account_image";
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle bundle, String s) {
|
||||
addPreferencesFromResource(R.xml.account_preference_main);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
this.findPreference(PREFERENCE_CATEGORY_ACCOUNT_IMAGE).setOnPreferenceClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
getActivity().setTitle(R.string.activity_account_settings_label);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
Fragment fragment;
|
||||
|
||||
switch (preference.getKey()){
|
||||
|
||||
case PREFERENCE_CATEGORY_ACCOUNT_IMAGE:
|
||||
fragment = new AccountImageSettingsFragment();
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
if(getActivity() == null) return false;
|
||||
|
||||
FragmentTransaction transaction = getActivity()
|
||||
.getSupportFragmentManager().beginTransaction();
|
||||
transaction.replace(android.R.id.content, fragment);
|
||||
transaction.addToBackStack(null);
|
||||
transaction.commit();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package org.communiquons.android.comunic.client.ui.fragments.accountsettings;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.support.v7.preference.PreferenceFragmentCompat;
|
||||
|
||||
import org.communiquons.android.comunic.client.ui.utils.UiUtils;
|
||||
|
||||
/**
|
||||
* Base account settings fragment
|
||||
*/
|
||||
public abstract class BaseAccountSettingsFragment extends PreferenceFragmentCompat {
|
||||
|
||||
//Loading dialog
|
||||
private AlertDialog mLoadingDialog;
|
||||
|
||||
/**
|
||||
* Remove any currently visible loading dialog
|
||||
*/
|
||||
protected void removeLoadingDialog(){
|
||||
if(mLoadingDialog != null)
|
||||
mLoadingDialog.dismiss();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show (display) a new loading dialog
|
||||
*/
|
||||
protected void showLoadingDialog(){
|
||||
removeLoadingDialog();
|
||||
mLoadingDialog = UiUtils.create_loading_dialog(getActivity());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package org.communiquons.android.comunic.client.ui.preference;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceViewHolder;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.ui.views.WebUserAccountImage;
|
||||
|
||||
/**
|
||||
* Account image preference
|
||||
*/
|
||||
public class AccountImagePreference extends Preference {
|
||||
|
||||
private String image_url;
|
||||
private WebUserAccountImage mWebUserAccountImage;
|
||||
|
||||
public AccountImagePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
initialize();
|
||||
}
|
||||
|
||||
public AccountImagePreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
initialize();
|
||||
}
|
||||
|
||||
public AccountImagePreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
initialize();
|
||||
}
|
||||
|
||||
public AccountImagePreference(Context context) {
|
||||
super(context);
|
||||
initialize();
|
||||
}
|
||||
|
||||
private void initialize(){
|
||||
setLayoutResource(R.layout.preference_account_image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(PreferenceViewHolder holder) {
|
||||
super.onBindViewHolder(holder);
|
||||
|
||||
mWebUserAccountImage = (WebUserAccountImage) holder.findViewById(R.id.account_image);
|
||||
refresh();
|
||||
}
|
||||
|
||||
public void setImage_url(String image_url) {
|
||||
this.image_url = image_url;
|
||||
refresh();
|
||||
}
|
||||
|
||||
public void refresh(){
|
||||
if(mWebUserAccountImage != null && image_url != null)
|
||||
mWebUserAccountImage.loadURL(image_url);
|
||||
}
|
||||
}
|
9
app/src/main/res/drawable/ic_account_circle.xml
Normal file
9
app/src/main/res/drawable/ic_account_circle.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/default_drawable_color"
|
||||
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
|
||||
</vector>
|
37
app/src/main/res/layout/preference_account_image.xml
Normal file
37
app/src/main/res/layout/preference_account_image.xml
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<org.communiquons.android.comunic.client.ui.views.WebUserAccountImage
|
||||
android:id="@+id/account_image"
|
||||
android:layout_width="@dimen/account_image_default_width"
|
||||
android:layout_height="@dimen/account_image_default_height"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/default_account_image" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView7"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/prefence_update_account_image_title"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toEndOf="@+id/account_image"
|
||||
app:layout_constraintTop_toTopOf="@+id/account_image" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView8"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/prefence_update_account_image_description"
|
||||
app:layout_constraintStart_toStartOf="@+id/textView7"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView7" />
|
||||
</android.support.constraint.ConstraintLayout>
|
@ -5,23 +5,28 @@
|
||||
<!-- Search user -->
|
||||
<item
|
||||
android:id="@+id/action_search_user"
|
||||
android:title="@string/main_menu_search_user"/>
|
||||
android:title="@string/main_menu_search_user" />
|
||||
|
||||
<!-- Account settings -->
|
||||
<item
|
||||
android:id="@+id/action_account_settings"
|
||||
android:title="@string/action_account_settings" />
|
||||
|
||||
<!-- Settings -->
|
||||
<item
|
||||
android:id="@+id/action_settings"
|
||||
android:title="@string/action_settings"/>
|
||||
android:title="@string/action_settings" />
|
||||
|
||||
<!-- About activity -->
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:title="@string/action_about"/>
|
||||
android:title="@string/action_about" />
|
||||
|
||||
<!-- Sign out -->
|
||||
<item
|
||||
android:id="@+id/action_logout"
|
||||
android:title="@string/main_menu_logout"
|
||||
android:orderInCategory="101"
|
||||
app:showAsAction="never"/>
|
||||
android:title="@string/main_menu_logout"
|
||||
app:showAsAction="never" />
|
||||
|
||||
</menu>
|
@ -270,4 +270,18 @@
|
||||
<string name="notice_no_post_yet">Il n\'y a aucun post à afficher ici pour le moment.</string>
|
||||
<string name="post_visibility_icon">Visiblité du post</string>
|
||||
<string name="err_get_related_groups_info">Une erreur a survenue lors de la récupération d\'information sur les groupes liés !</string>
|
||||
<string name="action_account_settings">Paramètres du compte</string>
|
||||
<string name="activity_account_settings_label">Paramètres du compte</string>
|
||||
<string name="preferences_account_image_title">Image du compte</string>
|
||||
<string name="preference_account_image_summary">Mettre à jour votre image de compte et sa visibilité</string>
|
||||
<string name="prefence_update_account_image_title">Mettre à jour votre image de compte</string>
|
||||
<string name="prefence_update_account_image_description">Touchez ici pour mettre une nouvelle image de compte en ligne</string>
|
||||
<string name="err_get_account_image_settings">Une erreur a survenue lors de la récupération des paramètres d\'image de compte !</string>
|
||||
<string name="action_delete_account_image">Supprimer votre image de compte</string>
|
||||
<string name="dialog_delete_accountimage_title">Suppression de l\'image de compte</string>
|
||||
<string name="dialog_delete_accountimage_message">Voulez vous vraiment supprimer votre image de compte ? Cette opération est irréversible !</string>
|
||||
<string name="dialog_delete_accountimage_cancel">Annuler</string>
|
||||
<string name="dialog_delete_accountimage_confirm">Supprimer</string>
|
||||
<string name="err_delete_account_image">Une erreur a survenu lors de la suppression de votre image de compte !</string>
|
||||
<string name="err_upload_account_image">Une erreur a survenu lors de la mise en ligne de votre nouvelle image de compte !</string>
|
||||
</resources>
|
@ -269,4 +269,18 @@
|
||||
<string name="notice_no_post_yet">There is no post to display here yet.</string>
|
||||
<string name="post_visibility_icon">Post visibility</string>
|
||||
<string name="err_get_related_groups_info">Could not get information about related groups!</string>
|
||||
<string name="action_account_settings">Account Settings</string>
|
||||
<string name="activity_account_settings_label">Account settings</string>
|
||||
<string name="preferences_account_image_title">Account image</string>
|
||||
<string name="preference_account_image_summary">Update your account image and its visibility</string>
|
||||
<string name="prefence_update_account_image_title">Update account image</string>
|
||||
<string name="prefence_update_account_image_description">Click here to upload a new account image</string>
|
||||
<string name="err_get_account_image_settings">Could not get account image settings!</string>
|
||||
<string name="action_delete_account_image">Delete account image</string>
|
||||
<string name="dialog_delete_accountimage_title">Delete account image</string>
|
||||
<string name="dialog_delete_accountimage_message">Are you sure to do this? This operation can not be recovered!</string>
|
||||
<string name="dialog_delete_accountimage_cancel">Cancel</string>
|
||||
<string name="dialog_delete_accountimage_confirm">Delete</string>
|
||||
<string name="err_delete_account_image">Could not delete your account image!</string>
|
||||
<string name="err_upload_account_image">Could not upload new account image!</string>
|
||||
</resources>
|
||||
|
12
app/src/main/res/xml/account_preference_image.xml
Normal file
12
app/src/main/res/xml/account_preference_image.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<org.communiquons.android.comunic.client.ui.preference.AccountImagePreference
|
||||
android:key="update_account_image" />
|
||||
|
||||
<Preference
|
||||
android:key="delete_account_image"
|
||||
android:title="@string/action_delete_account_image" />
|
||||
|
||||
|
||||
</PreferenceScreen>
|
10
app/src/main/res/xml/account_preference_main.xml
Normal file
10
app/src/main/res/xml/account_preference_main.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<Preference
|
||||
android:key="preference_category_account_image"
|
||||
android:title="@string/preferences_account_image_title"
|
||||
android:icon="@drawable/ic_account_circle"
|
||||
android:summary="@string/preference_account_image_summary"/>
|
||||
|
||||
</PreferenceScreen>
|
Loading…
Reference in New Issue
Block a user