Fixed intermittent null pointer exceptions and disabled the light theme temporarily. This closes #21, closes #22, and closes #17.
This commit is contained in:
parent
64da1329b9
commit
b937a7bc9e
|
@ -1,35 +1,35 @@
|
|||
{
|
||||
"project_info": {
|
||||
"project_number": "1050186150447",
|
||||
"firebase_url": "https://tusky-fc880.firebaseio.com",
|
||||
"project_id": "tusky-fc880",
|
||||
"storage_bucket": "tusky-fc880.appspot.com"
|
||||
"project_number": "268851337880",
|
||||
"firebase_url": "https://tusky-62772.firebaseio.com",
|
||||
"project_id": "tusky-62772",
|
||||
"storage_bucket": "tusky-62772.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:1050186150447:android:fc4111b1d145a00e",
|
||||
"mobilesdk_app_id": "1:268851337880:android:fc4111b1d145a00e",
|
||||
"android_client_info": {
|
||||
"package_name": "com.keylesspalace.tusky"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "1050186150447-fg4nj4vlekpa9bcl8q8290hqln1s048e.apps.googleusercontent.com",
|
||||
"client_id": "268851337880-eie2ssto2d21bfihn9d1qupcrke8oebf.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "com.keylesspalace.tusky",
|
||||
"certificate_hash": "a3bb387437e149dd7763107e8da83ad6b421264f"
|
||||
"certificate_hash": "18d196307d6e928e99c2e0bb9818c01c38aff2f9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "1050186150447-4u9m96ub04cuppmnkfdk7ua51o9r7pf3.apps.googleusercontent.com",
|
||||
"client_id": "268851337880-n19d05m282nirs1fc9kdd5n4of6je4fk.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyBTWsu3Z5EjCnm3nUoWamuMLmGvM0nGq7o"
|
||||
"current_key": "AIzaSyD6erhkj_KOB7WrhdunV1uN29QOoLJHTaQ"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
|
@ -40,7 +40,7 @@
|
|||
"status": 2,
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "1050186150447-4u9m96ub04cuppmnkfdk7ua51o9r7pf3.apps.googleusercontent.com",
|
||||
"client_id": "268851337880-n19d05m282nirs1fc9kdd5n4of6je4fk.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
|
|
|
@ -160,7 +160,11 @@ public class AccountActivity extends BaseActivity {
|
|||
mastodonAPI.account(accountId).enqueue(new Callback<Account>() {
|
||||
@Override
|
||||
public void onResponse(Call<Account> call, retrofit2.Response<Account> response) {
|
||||
onObtainAccountSuccess(response.body());
|
||||
if (response.isSuccessful()) {
|
||||
onObtainAccountSuccess(response.body());
|
||||
} else {
|
||||
onObtainAccountFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -238,8 +242,12 @@ public class AccountActivity extends BaseActivity {
|
|||
mastodonAPI.relationships(ids).enqueue(new Callback<List<Relationship>>() {
|
||||
@Override
|
||||
public void onResponse(Call<List<Relationship>> call, retrofit2.Response<List<Relationship>> response) {
|
||||
Relationship relationship = response.body().get(0);
|
||||
onObtainRelationshipsSuccess(relationship.following, relationship.blocking, relationship.muting);
|
||||
if (response.isSuccessful()) {
|
||||
Relationship relationship = response.body().get(0);
|
||||
onObtainRelationshipsSuccess(relationship.following, relationship.blocking, relationship.muting);
|
||||
} else {
|
||||
onObtainRelationshipsFailure(new Exception(response.message()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -326,9 +334,13 @@ public class AccountActivity extends BaseActivity {
|
|||
Callback<Relationship> cb = new Callback<Relationship>() {
|
||||
@Override
|
||||
public void onResponse(Call<Relationship> call, retrofit2.Response<Relationship> response) {
|
||||
following = response.body().following;
|
||||
// TODO: display message/indicator when "requested" is true (i.e. when the follow is awaiting approval)
|
||||
updateButtons();
|
||||
if (response.isSuccessful()) {
|
||||
following = response.body().following;
|
||||
// TODO: display message/indicator when "requested" is true (i.e. when the follow is awaiting approval)
|
||||
updateButtons();
|
||||
} else {
|
||||
onFollowFailure(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -366,8 +378,12 @@ public class AccountActivity extends BaseActivity {
|
|||
Callback<Relationship> cb = new Callback<Relationship>() {
|
||||
@Override
|
||||
public void onResponse(Call<Relationship> call, retrofit2.Response<Relationship> response) {
|
||||
blocking = response.body().blocking;
|
||||
updateButtons();
|
||||
if (response.isSuccessful()) {
|
||||
blocking = response.body().blocking;
|
||||
updateButtons();
|
||||
} else {
|
||||
onBlockFailure(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -405,8 +421,12 @@ public class AccountActivity extends BaseActivity {
|
|||
Callback<Relationship> cb = new Callback<Relationship>() {
|
||||
@Override
|
||||
public void onResponse(Call<Relationship> call, Response<Relationship> response) {
|
||||
muting = response.body().muting;
|
||||
updateButtons();
|
||||
if (response.isSuccessful()) {
|
||||
muting = response.body().muting;
|
||||
updateButtons();
|
||||
} else {
|
||||
onMuteFailure(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -56,9 +56,12 @@ public class BaseActivity extends AppCompatActivity {
|
|||
createMastodonAPI();
|
||||
createTuskyAPI();
|
||||
|
||||
/* Note from Andrew March 13, 2017: Keep this and restore it when the light theme is no
|
||||
longer bugged.
|
||||
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("lightTheme", false)) {
|
||||
setTheme(R.style.AppTheme_Light);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -653,7 +653,7 @@ public class ComposeActivity extends BaseActivity {
|
|||
|
||||
private void sendStatus(String content, String visibility, boolean sensitive,
|
||||
String spoilerText) {
|
||||
ArrayList<String> mediaIds = new ArrayList<String>();
|
||||
ArrayList<String> mediaIds = new ArrayList<>();
|
||||
|
||||
for (QueuedMedia item : mediaQueued) {
|
||||
mediaIds.add(item.id);
|
||||
|
@ -662,7 +662,11 @@ public class ComposeActivity extends BaseActivity {
|
|||
mastodonAPI.createStatus(content, inReplyToId, spoilerText, visibility, sensitive, mediaIds).enqueue(new Callback<Status>() {
|
||||
@Override
|
||||
public void onResponse(Call<Status> call, retrofit2.Response<Status> response) {
|
||||
onSendSuccess();
|
||||
if (response.isSuccessful()) {
|
||||
onSendSuccess();
|
||||
} else {
|
||||
onSendFailure();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -970,8 +974,13 @@ public class ComposeActivity extends BaseActivity {
|
|||
item.uploadRequest.enqueue(new Callback<Media>() {
|
||||
@Override
|
||||
public void onResponse(Call<Media> call, retrofit2.Response<Media> response) {
|
||||
item.id = response.body().id;
|
||||
waitForMediaLatch.countDown();
|
||||
if (response.isSuccessful()) {
|
||||
item.id = response.body().id;
|
||||
waitForMediaLatch.countDown();
|
||||
} else {
|
||||
Log.d(TAG, "Upload request failed. " + response.message());
|
||||
onUploadFailure(item);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -31,9 +31,7 @@ import android.widget.TextView;
|
|||
import com.keylesspalace.tusky.entity.AccessToken;
|
||||
import com.keylesspalace.tusky.entity.AppCredentials;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import retrofit2.Call;
|
||||
|
@ -43,6 +41,7 @@ import retrofit2.Retrofit;
|
|||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
|
||||
public class LoginActivity extends BaseActivity {
|
||||
private static final String TAG = "LoginActivity"; // logging tag
|
||||
private static String OAUTH_SCOPES = "read write follow";
|
||||
|
||||
private SharedPreferences preferences;
|
||||
|
@ -126,6 +125,13 @@ public class LoginActivity extends BaseActivity {
|
|||
Callback<AppCredentials> callback = new Callback<AppCredentials>() {
|
||||
@Override
|
||||
public void onResponse(Call<AppCredentials> call, Response<AppCredentials> response) {
|
||||
if (!response.isSuccessful()) {
|
||||
editText.setError(
|
||||
"This app could not obtain authentication from that server " +
|
||||
"instance.");
|
||||
Log.e(TAG, "App authentication failed. " + response.message());
|
||||
return;
|
||||
}
|
||||
AppCredentials credentials = response.body();
|
||||
clientId = credentials.clientId;
|
||||
clientSecret = credentials.clientSecret;
|
||||
|
@ -246,7 +252,11 @@ public class LoginActivity extends BaseActivity {
|
|||
Callback<AccessToken> callback = new Callback<AccessToken>() {
|
||||
@Override
|
||||
public void onResponse(Call<AccessToken> call, Response<AccessToken> response) {
|
||||
onLoginSuccess(response.body().accessToken);
|
||||
if (response.isSuccessful()) {
|
||||
onLoginSuccess(response.body().accessToken);
|
||||
} else {
|
||||
editText.setError(response.message());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
|
@ -24,15 +22,11 @@ import android.graphics.PorterDuff;
|
|||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.SystemClock;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.TabLayout;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
|
@ -55,7 +49,6 @@ import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
|
|||
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
|
||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader;
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
@ -75,7 +68,7 @@ public class MainActivity extends BaseActivity {
|
|||
|
||||
private String loggedInAccountId;
|
||||
private String loggedInAccountUsername;
|
||||
Stack<Integer> pageHistory = new Stack<Integer>();
|
||||
Stack<Integer> pageHistory = new Stack<>();
|
||||
private AccountHeader headerResult;
|
||||
private Drawer drawer;
|
||||
|
||||
|
@ -296,8 +289,12 @@ public class MainActivity extends BaseActivity {
|
|||
mastodonAPI.searchAccounts(newQuery, false, 5).enqueue(new Callback<List<Account>>() {
|
||||
@Override
|
||||
public void onResponse(Call<List<Account>> call, Response<List<Account>> response) {
|
||||
searchView.swapSuggestions(response.body());
|
||||
searchView.hideProgress();
|
||||
if (response.isSuccessful()) {
|
||||
searchView.swapSuggestions(response.body());
|
||||
searchView.hideProgress();
|
||||
} else {
|
||||
searchView.hideProgress();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -359,6 +356,11 @@ public class MainActivity extends BaseActivity {
|
|||
mastodonAPI.accountVerifyCredentials().enqueue(new Callback<Account>() {
|
||||
@Override
|
||||
public void onResponse(Call<Account> call, retrofit2.Response<Account> response) {
|
||||
if (!response.isSuccessful()) {
|
||||
onFetchUserInfoFailure(new Exception(response.message()));
|
||||
return;
|
||||
}
|
||||
|
||||
Account me = response.body();
|
||||
ImageView background = headerResult.getHeaderBackgroundView();
|
||||
|
||||
|
|
|
@ -56,7 +56,9 @@ public class MyFirebaseMessagingService extends FirebaseMessagingService {
|
|||
mastodonAPI.notification(notificationId).enqueue(new Callback<Notification>() {
|
||||
@Override
|
||||
public void onResponse(Call<Notification> call, Response<Notification> response) {
|
||||
buildNotification(response.body());
|
||||
if (response.isSuccessful()) {
|
||||
buildNotification(response.body());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
package com.keylesspalace.tusky;
|
||||
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
@ -141,7 +140,11 @@ public class NotificationsFragment extends SFragment implements
|
|||
api.notifications(fromId, uptoId, null).enqueue(new Callback<List<Notification>>() {
|
||||
@Override
|
||||
public void onResponse(Call<List<Notification>> call, retrofit2.Response<List<Notification>> response) {
|
||||
onFetchNotificationsSuccess(response.body(), fromId);
|
||||
if (response.isSuccessful()) {
|
||||
onFetchNotificationsSuccess(response.body(), fromId);
|
||||
} else {
|
||||
onFetchNotificationsFailure(new Exception(response.message()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -17,7 +17,6 @@ package com.keylesspalace.tusky;
|
|||
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.Snackbar;
|
||||
|
@ -29,7 +28,6 @@ import android.support.v7.widget.Toolbar;
|
|||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.keylesspalace.tusky.entity.Status;
|
||||
|
@ -122,7 +120,11 @@ public class ReportActivity extends BaseActivity {
|
|||
mastodonAPI.report(accountId, Arrays.asList(statusIds), comment).enqueue(new Callback<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
|
||||
onSendSuccess();
|
||||
if (response.isSuccessful()) {
|
||||
onSendSuccess();
|
||||
} else {
|
||||
onSendFailure(accountId, statusIds, comment);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -155,6 +157,10 @@ public class ReportActivity extends BaseActivity {
|
|||
mastodonAPI.accountStatuses(accountId, null, null, null).enqueue(new Callback<List<Status>>() {
|
||||
@Override
|
||||
public void onResponse(Call<List<Status>> call, retrofit2.Response<List<Status>> response) {
|
||||
if (!response.isSuccessful()) {
|
||||
onFetchStatusesFailure(new Exception(response.message()));
|
||||
return;
|
||||
}
|
||||
List<Status> statusList = response.body();
|
||||
List<ReportAdapter.ReportStatus> itemList = new ArrayList<>();
|
||||
for (Status status : statusList) {
|
||||
|
|
|
@ -83,8 +83,10 @@ public class SFragment extends Fragment {
|
|||
Callback<Status> cb = new Callback<Status>() {
|
||||
@Override
|
||||
public void onResponse(Call<Status> call, retrofit2.Response<Status> response) {
|
||||
status.reblogged = reblog;
|
||||
adapter.notifyItemChanged(position);
|
||||
if (response.isSuccessful()) {
|
||||
status.reblogged = reblog;
|
||||
adapter.notifyItemChanged(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -107,8 +109,10 @@ public class SFragment extends Fragment {
|
|||
Callback<Status> cb = new Callback<Status>() {
|
||||
@Override
|
||||
public void onResponse(Call<Status> call, retrofit2.Response<Status> response) {
|
||||
status.favourited = favourite;
|
||||
adapter.notifyItemChanged(position);
|
||||
if (response.isSuccessful()) {
|
||||
status.favourited = favourite;
|
||||
adapter.notifyItemChanged(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -86,8 +86,10 @@ class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover
|
|||
|
||||
int update(List<Status> newStatuses) {
|
||||
int scrollToPosition;
|
||||
if (statuses == null || statuses.isEmpty()) {
|
||||
statuses = newStatuses;
|
||||
if (statuses.isEmpty()) {
|
||||
if (newStatuses != null) {
|
||||
statuses = newStatuses;
|
||||
}
|
||||
scrollToPosition = 0;
|
||||
} else {
|
||||
int index = newStatuses.indexOf(statuses.get(0));
|
||||
|
|
|
@ -168,7 +168,11 @@ public class TimelineFragment extends SFragment implements
|
|||
Callback<List<Status>> cb = new Callback<List<Status>>() {
|
||||
@Override
|
||||
public void onResponse(Call<List<Status>> call, retrofit2.Response<List<Status>> response) {
|
||||
onFetchTimelineSuccess(response.body(), fromId);
|
||||
if (response.isSuccessful()) {
|
||||
onFetchTimelineSuccess(response.body(), fromId);
|
||||
} else {
|
||||
onFetchTimelineFailure(new Exception(response.message()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -82,8 +82,12 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene
|
|||
api.status(id).enqueue(new Callback<Status>() {
|
||||
@Override
|
||||
public void onResponse(Call<Status> call, retrofit2.Response<Status> response) {
|
||||
int position = adapter.insertStatus(response.body());
|
||||
recyclerView.scrollToPosition(position);
|
||||
if (response.isSuccessful()) {
|
||||
int position = adapter.insertStatus(response.body());
|
||||
recyclerView.scrollToPosition(position);
|
||||
} else {
|
||||
onThreadRequestFailure(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -99,10 +103,14 @@ public class ViewThreadFragment extends SFragment implements StatusActionListene
|
|||
api.statusContext(id).enqueue(new Callback<StatusContext>() {
|
||||
@Override
|
||||
public void onResponse(Call<StatusContext> call, retrofit2.Response<StatusContext> response) {
|
||||
StatusContext context = response.body();
|
||||
if (response.isSuccessful()) {
|
||||
StatusContext context = response.body();
|
||||
|
||||
adapter.addAncestors(context.ancestors);
|
||||
adapter.addDescendants(context.descendants);
|
||||
adapter.addAncestors(context.ancestors);
|
||||
adapter.addDescendants(context.descendants);
|
||||
} else {
|
||||
onThreadRequestFailure(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -20,13 +20,4 @@
|
|||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:title="@string/pref_title_appearance_settings">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="lightTheme"
|
||||
android:title="@string/pref_title_light_theme"
|
||||
android:defaultValue="false" />
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
Loading…
Reference in New Issue