improved settings screen

fixed crashes
This commit is contained in:
Mariotaku Lee 2016-06-27 08:24:47 +08:00
parent 1a0843f17c
commit b20f0431fb
3 changed files with 33 additions and 22 deletions

View File

@ -27,7 +27,6 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@ -51,6 +50,7 @@ import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatDelegate; import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.TintTypedArray;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.util.SparseIntArray; import android.util.SparseIntArray;
import android.view.Gravity; import android.view.Gravity;
@ -111,6 +111,8 @@ import java.util.List;
public class HomeActivity extends BaseActivity implements OnClickListener, OnPageChangeListener, public class HomeActivity extends BaseActivity implements OnClickListener, OnPageChangeListener,
SupportFragmentCallback, OnLongClickListener, DrawerLayout.DrawerListener { SupportFragmentCallback, OnLongClickListener, DrawerLayout.DrawerListener {
private static final int[] HOME_AS_UP_ATTRS = {android.support.v7.appcompat.R.attr.homeAsUpIndicator};
private final Handler mHandler = new Handler(); private final Handler mHandler = new Handler();
private final ContentObserver mAccountChangeObserver = new AccountChangeObserver(this, mHandler); private final ContentObserver mAccountChangeObserver = new AccountChangeObserver(this, mHandler);
@ -156,8 +158,8 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
@Override @Override
public Drawable getThemeUpIndicator() { public Drawable getThemeUpIndicator() {
final int[] attrs = {android.support.v7.appcompat.R.attr.homeAsUpIndicator}; final TintTypedArray a = TintTypedArray.obtainStyledAttributes(
final TypedArray a = obtainStyledAttributes(attrs); getActionBarThemedContext(), null, HOME_AS_UP_ATTRS);
final Drawable result = a.getDrawable(0); final Drawable result = a.getDrawable(0);
a.recycle(); a.recycle();
return result; return result;

View File

@ -227,14 +227,17 @@ public class SettingsActivity extends BaseActivity implements OnItemClickListene
return mShouldNotifyChange; return mShouldNotifyChange;
} }
@Override
public boolean onSupportNavigateUp() {
if (notifyUnsavedChange()) {
return true;
}
return super.onSupportNavigateUp();
}
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (isTopSettings() && shouldNotifyChange()) { if (notifyUnsavedChange()) return;
final RestartConfirmDialogFragment df = new RestartConfirmDialogFragment();
df.show(getSupportFragmentManager(), "restart_confirm");
return;
}
super.onBackPressed(); super.onBackPressed();
} }
@ -277,6 +280,15 @@ public class SettingsActivity extends BaseActivity implements OnItemClickListene
mSlidingPaneLayout.closePane(); mSlidingPaneLayout.closePane();
} }
private boolean notifyUnsavedChange() {
if (isTopSettings() && shouldNotifyChange()) {
final RestartConfirmDialogFragment df = new RestartConfirmDialogFragment();
df.show(getSupportFragmentManager(), "restart_confirm");
return true;
}
return false;
}
static class EntriesAdapter extends BaseAdapter { static class EntriesAdapter extends BaseAdapter {
static final int VIEW_TYPE_PREFERENCE_ENTRY = 0; static final int VIEW_TYPE_PREFERENCE_ENTRY = 0;

View File

@ -22,7 +22,6 @@ package org.mariotaku.twidere.fragment;
import android.animation.ArgbEvaluator; import android.animation.ArgbEvaluator;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -61,7 +60,6 @@ import android.support.v7.widget.Toolbar;
import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.util.Linkify; import android.text.util.Linkify;
import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -969,6 +967,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
@Override @Override
public boolean onOptionsItemSelected(final MenuItem item) { public boolean onOptionsItemSelected(final MenuItem item) {
final Context context = getContext();
final AsyncTwitterWrapper twitter = mTwitterWrapper; final AsyncTwitterWrapper twitter = mTwitterWrapper;
final ParcelableUser user = getUser(); final ParcelableUser user = getUser();
final UserRelationship userRelationship = mRelationship; final UserRelationship userRelationship = mRelationship;
@ -1099,33 +1098,31 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
return true; return true;
} }
case R.id.user_mentions: { case R.id.user_mentions: {
IntentUtils.openUserMentions(getActivity(), user.account_key, user.screen_name); IntentUtils.openUserMentions(context, user.account_key, user.screen_name);
return true; return true;
} }
case R.id.saved_searches: { case R.id.saved_searches: {
IntentUtils.openSavedSearches(getActivity(), user.account_key); IntentUtils.openSavedSearches(context, user.account_key);
return true; return true;
} }
case R.id.scheduled_statuses: { case R.id.scheduled_statuses: {
IntentUtils.openScheduledStatuses(getActivity(), user.account_key); IntentUtils.openScheduledStatuses(context, user.account_key);
return true; return true;
} }
case R.id.open_in_browser: { case R.id.open_in_browser: {
final Uri uri = LinkCreator.getUserWebLink(user); final Uri uri = LinkCreator.getUserWebLink(user);
final Intent intent = new Intent(Intent.ACTION_VIEW, uri); final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setPackage(IntentUtils.getDefaultBrowserPackage(getContext(), uri, true)); intent.setPackage(IntentUtils.getDefaultBrowserPackage(context, uri, true));
startActivity(intent); if (intent.resolveActivity(context.getPackageManager()) != null) {
startActivity(intent);
}
return true; return true;
} }
default: { default: {
if (item.getIntent() != null) { final Intent intent = item.getIntent();
try { if (intent != null && intent.resolveActivity(context.getPackageManager()) != null) {
startActivity(item.getIntent()); startActivity(intent);
} catch (final ActivityNotFoundException e) {
Log.w(LOGTAG, e);
return false;
}
} }
break; break;
} }