Adds a partial profile editor (non-working).
This commit is contained in:
parent
69c1b88ff4
commit
84741c1f1b
7 changed files with 213 additions and 26 deletions
|
@ -59,6 +59,7 @@
|
||||||
<activity android:name=".ViewThreadActivity" />
|
<activity android:name=".ViewThreadActivity" />
|
||||||
<activity android:name=".ViewTagActivity" />
|
<activity android:name=".ViewTagActivity" />
|
||||||
<activity android:name=".AccountActivity" />
|
<activity android:name=".AccountActivity" />
|
||||||
|
<activity android:name=".EditProfileActivity" />
|
||||||
<activity android:name=".PreferencesActivity" />
|
<activity android:name=".PreferencesActivity" />
|
||||||
<activity android:name=".FavouritesActivity" />
|
<activity android:name=".FavouritesActivity" />
|
||||||
<activity android:name=".BlocksActivity" />
|
<activity android:name=".BlocksActivity" />
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
package com.keylesspalace.tusky;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import com.keylesspalace.tusky.entity.Account;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
public class EditProfileActivity extends BaseActivity {
|
||||||
|
private static final String TAG = "EditProfileActivity";
|
||||||
|
|
||||||
|
@BindView(R.id.edit_profile_display_name) EditText displayNameEditText;
|
||||||
|
@BindView(R.id.edit_profile_note) EditText noteEditText;
|
||||||
|
@BindView(R.id.edit_profile_avatar) Button avatarButton;
|
||||||
|
@BindView(R.id.edit_profile_header) Button headerButton;
|
||||||
|
|
||||||
|
private String priorDisplayName;
|
||||||
|
private String priorNote;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_edit_profile);
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
ActionBar actionBar = getSupportActionBar();
|
||||||
|
if (actionBar != null) {
|
||||||
|
actionBar.setTitle(null);
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
actionBar.setDisplayShowHomeEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
priorDisplayName = savedInstanceState.getString("priorDisplayName");
|
||||||
|
priorNote = savedInstanceState.getString("priorNote");
|
||||||
|
} else {
|
||||||
|
priorDisplayName = null;
|
||||||
|
priorNote = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
mastodonAPI.accountVerifyCredentials().enqueue(new Callback<Account>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<Account> call, Response<Account> response) {
|
||||||
|
if (!response.isSuccessful()) {
|
||||||
|
onAccountVerifyCredentialsFailed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Account me = response.body();
|
||||||
|
priorDisplayName = me.getDisplayName();
|
||||||
|
priorNote = me.note.toString();
|
||||||
|
displayNameEditText.setText(priorDisplayName);
|
||||||
|
noteEditText.setText(HtmlUtils.fromHtml(priorNote));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<Account> call, Throwable t) {
|
||||||
|
onAccountVerifyCredentialsFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
outState.putString("priorDisplayName", priorDisplayName);
|
||||||
|
outState.putString("priorNote", priorNote);
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onAccountVerifyCredentialsFailed() {
|
||||||
|
Log.e(TAG, "The account failed to load.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.edit_profile_toolbar, menu);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home: {
|
||||||
|
onBackPressed();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case R.id.action_save: {
|
||||||
|
save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void save() {
|
||||||
|
String newDisplayName = displayNameEditText.getText().toString();
|
||||||
|
if (newDisplayName.isEmpty()) {
|
||||||
|
displayNameEditText.setError(getString(R.string.error_empty));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (priorDisplayName != null && priorDisplayName.equals(newDisplayName)) {
|
||||||
|
// If it's not any different, don't patch it.
|
||||||
|
newDisplayName = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String newNote = HtmlUtils.toHtml(noteEditText.getText());
|
||||||
|
if (newNote.isEmpty()) {
|
||||||
|
noteEditText.setError(getString(R.string.error_empty));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (priorNote != null && priorNote.equals(newNote)) {
|
||||||
|
// If it's not any different, don't patch it.
|
||||||
|
newNote = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
mastodonAPI.accountUpdateCredentials(newDisplayName, newNote, null, null);
|
||||||
|
}
|
||||||
|
}
|
|
@ -110,26 +110,6 @@ public class LoginActivity extends AppCompatActivity {
|
||||||
textView.setMovementMethod(LinkMovementMethod.getInstance());
|
textView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Apply any updates needed.
|
|
||||||
int versionCode = 1;
|
|
||||||
try {
|
|
||||||
versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
|
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
|
||||||
Log.e(TAG, "The app version was not found. " + e.getMessage());
|
|
||||||
}
|
|
||||||
if (preferences.getInt("lastUpdateVersion", 0) != versionCode) {
|
|
||||||
SharedPreferences.Editor editor = preferences.edit();
|
|
||||||
if (versionCode == 14) {
|
|
||||||
/* This version switches the order of scheme and host in the OAuth redirect URI.
|
|
||||||
* But to fix it requires forcing the app to re-authenticate with servers. So, clear
|
|
||||||
* out the stored client id/secret pairs. The only other things that are lost are
|
|
||||||
* "rememberedVisibility", "loggedInUsername", and "loggedInAccountId". */
|
|
||||||
editor.clear();
|
|
||||||
}
|
|
||||||
editor.putInt("lastUpdateVersion", versionCode);
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -261,7 +261,7 @@ public class MainActivity extends BaseActivity {
|
||||||
.withHasStableIds(true)
|
.withHasStableIds(true)
|
||||||
.withSelectedItem(-1)
|
.withSelectedItem(-1)
|
||||||
.addDrawerItems(
|
.addDrawerItems(
|
||||||
new PrimaryDrawerItem().withIdentifier(0).withName(R.string.action_view_profile).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_person),
|
new PrimaryDrawerItem().withIdentifier(0).withName(getString(R.string.action_edit_profile)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_person),
|
||||||
new PrimaryDrawerItem().withIdentifier(1).withName(getString(R.string.action_view_favourites)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_star),
|
new PrimaryDrawerItem().withIdentifier(1).withName(getString(R.string.action_view_favourites)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_star),
|
||||||
new PrimaryDrawerItem().withIdentifier(2).withName(getString(R.string.action_view_blocks)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_block),
|
new PrimaryDrawerItem().withIdentifier(2).withName(getString(R.string.action_view_blocks)).withSelectable(false).withIcon(GoogleMaterial.Icon.gmd_block),
|
||||||
new DividerDrawerItem(),
|
new DividerDrawerItem(),
|
||||||
|
@ -275,11 +275,8 @@ public class MainActivity extends BaseActivity {
|
||||||
long drawerItemIdentifier = drawerItem.getIdentifier();
|
long drawerItemIdentifier = drawerItem.getIdentifier();
|
||||||
|
|
||||||
if (drawerItemIdentifier == 0) {
|
if (drawerItemIdentifier == 0) {
|
||||||
if (loggedInAccountId != null) {
|
Intent intent = new Intent(MainActivity.this, EditProfileActivity.class);
|
||||||
Intent intent = new Intent(MainActivity.this, AccountActivity.class);
|
startActivity(intent);
|
||||||
intent.putExtra("id", loggedInAccountId);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
} else if (drawerItemIdentifier == 1) {
|
} else if (drawerItemIdentifier == 1) {
|
||||||
Intent intent = new Intent(MainActivity.this, FavouritesActivity.class);
|
Intent intent = new Intent(MainActivity.this, FavouritesActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
|
62
app/src/main/res/layout/activity_edit_profile.xml
Normal file
62
app/src/main/res/layout/activity_edit_profile.xml
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.CoordinatorLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context="com.keylesspalace.tusky.EditProfileActivity">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:elevation="4dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/edit_profile_display_name"
|
||||||
|
android:hint="@string/hint_display_name"
|
||||||
|
android:maxLength="30" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/edit_profile_note"
|
||||||
|
android:hint="@string/hint_note"
|
||||||
|
android:maxLength="160" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/label_avatar"
|
||||||
|
android:labelFor="@+id/edit_profile_avatar" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@id/edit_profile_avatar"
|
||||||
|
android:text="@string/action_photo_pick" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/label_header"
|
||||||
|
android:labelFor="@+id/edit_profile_header" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@id/edit_profile_header"
|
||||||
|
android:text="@string/action_photo_pick" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</android.support.design.widget.CoordinatorLayout>
|
9
app/src/main/res/menu/edit_profile_toolbar.xml
Normal file
9
app/src/main/res/menu/edit_profile_toolbar.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_save"
|
||||||
|
android:title="@string/action_save"
|
||||||
|
android:icon="@android:drawable/ic_menu_save"
|
||||||
|
app:showAsAction="always" />
|
||||||
|
</menu>
|
|
@ -15,6 +15,7 @@
|
||||||
<string name="error_media_upload_image_or_video">Images and videos cannot both be attached to the same status.</string>
|
<string name="error_media_upload_image_or_video">Images and videos cannot both be attached to the same status.</string>
|
||||||
<string name="error_media_upload_sending">The upload failed.</string>
|
<string name="error_media_upload_sending">The upload failed.</string>
|
||||||
<string name="error_report_too_few_statuses">At least one status must be reported.</string>
|
<string name="error_report_too_few_statuses">At least one status must be reported.</string>
|
||||||
|
<string name="error_empty">This cannot be empty.</string>
|
||||||
|
|
||||||
<string name="title_home">Home</string>
|
<string name="title_home">Home</string>
|
||||||
<string name="title_notifications">Notifications</string>
|
<string name="title_notifications">Notifications</string>
|
||||||
|
@ -85,6 +86,8 @@
|
||||||
<string name="action_compose_options">Options</string>
|
<string name="action_compose_options">Options</string>
|
||||||
<string name="action_open_drawer">Open drawer</string>
|
<string name="action_open_drawer">Open drawer</string>
|
||||||
<string name="action_clear">Clear</string>
|
<string name="action_clear">Clear</string>
|
||||||
|
<string name="action_save">Save</string>
|
||||||
|
<string name="action_edit_profile">Edit profile</string>
|
||||||
|
|
||||||
<string name="send_status_to">Share toot URL to…</string>
|
<string name="send_status_to">Share toot URL to…</string>
|
||||||
|
|
||||||
|
@ -96,6 +99,11 @@
|
||||||
<string name="hint_domain">Which instance?</string>
|
<string name="hint_domain">Which instance?</string>
|
||||||
<string name="hint_compose">What\'s happening?</string>
|
<string name="hint_compose">What\'s happening?</string>
|
||||||
<string name="hint_content_warning">Content warning</string>
|
<string name="hint_content_warning">Content warning</string>
|
||||||
|
<string name="hint_display_name">Display name</string>
|
||||||
|
<string name="hint_note">Bio</string>
|
||||||
|
|
||||||
|
<string name="label_avatar">Avatar</string>
|
||||||
|
<string name="label_header">Header</string>
|
||||||
|
|
||||||
<string name="link_whats_an_instance">What\'s an instance?</string>
|
<string name="link_whats_an_instance">What\'s an instance?</string>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue