1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-07 12:03:28 +01:00
fixed crashes after sending dm
This commit is contained in:
Mariotaku Lee 2016-03-17 15:19:43 +08:00
parent b76189e985
commit 933232e3f4
17 changed files with 84 additions and 65 deletions

View File

@ -382,7 +382,7 @@
<activity
android:name=".activity.SettingsWizardActivity"
android:label="@string/settings_wizard"
android:theme="@style/Theme.Twidere"/>
android:theme="@style/Theme.Twidere.NoActionBar"/>
<activity
android:name=".activity.DataExportActivity"
android:label="@string/export_settings"

View File

@ -1461,8 +1461,9 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
itemView.setAlpha(isSelected ? 1 : 0.33f);
((CheckableLinearLayout) itemView).setChecked(isSelected);
final MediaLoaderWrapper loader = adapter.getImageLoader();
if (ObjectUtils.notEqual(account.profile_image_url, iconView.getTag()) || iconView.getDrawable() == null) {
loader.displayProfileImage(iconView, account.profile_image_url);
if (ObjectUtils.notEqual(account, iconView.getTag()) || iconView.getDrawable() == null) {
iconView.setTag(account);
loader.displayProfileImage(iconView, account);
}
iconView.setBorderColor(account.color);
iconView.setTag(account.profile_image_url);

View File

@ -54,8 +54,6 @@ import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams;
import android.view.Window;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import com.squareup.otto.Subscribe;
@ -92,7 +90,7 @@ import org.mariotaku.twidere.util.ReadStateManager;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereMathUtils;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.view.ExtendedFrameLayout;
import org.mariotaku.twidere.view.ExtendedRelativeLayout;
import org.mariotaku.twidere.view.ExtendedViewPager;
import org.mariotaku.twidere.view.TabPagerIndicator;
@ -114,11 +112,12 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
private ExtendedViewPager mViewPager;
private Toolbar mActionBar;
private View mWindowOverlay;
private TabPagerIndicator mTabIndicator;
private DrawerLayout mDrawerLayout;
private View mEmptyTabHint;
private FloatingActionButton mActionsButton;
private ExtendedFrameLayout mHomeContent;
private ExtendedRelativeLayout mHomeContent;
private UpdateUnreadCountTask mUpdateUnreadCountTask;
@ -335,6 +334,8 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
setSupportActionBar(mActionBar);
ThemeUtils.setCompatContentViewOverlay(this, new EmptyDrawable());
final boolean refreshOnStart = mPreferences.getBoolean(KEY_REFRESH_ON_START, false);
int tabDisplayOptionInt = Utils.getTabDisplayOptionInt(this);
@ -411,7 +412,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
protected void onResume() {
super.onResume();
invalidateOptionsMenu();
updateActionsButtonStyle();
updateActionsButton();
}
@ -575,7 +575,9 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
public void setControlBarOffset(float offset) {
final ActionBar actionBar = getSupportActionBar();
if (actionBar == null) return;
mActionBar.setTranslationY(mTabColumns > 1 ? 0 : (int) (getControlBarHeight() * (offset - 1)));
final int translationY = mTabColumns > 1 ? 0 : (int) (getControlBarHeight() * (offset - 1));
mActionBar.setTranslationY(translationY);
mWindowOverlay.setTranslationY(translationY);
final ViewGroup.LayoutParams lp = mActionsButton.getLayoutParams();
if (lp instanceof MarginLayoutParams) {
mActionsButton.setTranslationY((((MarginLayoutParams) lp).bottomMargin + mActionsButton.getHeight()) * (1 - offset));
@ -594,7 +596,8 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
mViewPager = (ExtendedViewPager) findViewById(R.id.main_pager);
mEmptyTabHint = findViewById(R.id.empty_tab_hint);
mActionsButton = (FloatingActionButton) findViewById(R.id.actions_button);
mHomeContent = (ExtendedFrameLayout) findViewById(R.id.home_content);
mHomeContent = (ExtendedRelativeLayout) findViewById(R.id.home_content);
mWindowOverlay = findViewById(R.id.window_overlay);
}
private Fragment getKeyboardShortcutRecipient() {
@ -797,13 +800,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
mActionsButton.setContentDescription(getString(title));
}
private void updateActionsButtonStyle() {
final boolean leftsideComposeButton = mPreferences.getBoolean(KEY_LEFTSIDE_COMPOSE_BUTTON, false);
final FrameLayout.LayoutParams lp = (LayoutParams) mActionsButton.getLayoutParams();
lp.gravity = Gravity.BOTTOM | (leftsideComposeButton ? Gravity.LEFT : Gravity.RIGHT);
mActionsButton.setLayoutParams(lp);
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {

View File

@ -41,6 +41,7 @@ import org.mariotaku.twidere.fragment.iface.IBaseFragment;
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
import org.mariotaku.twidere.fragment.iface.IToolBarSupportFragment;
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
import org.mariotaku.twidere.graphic.EmptyDrawable;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
import org.mariotaku.twidere.util.MultiSelectEventHandler;
@ -185,8 +186,12 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(android.R.id.content, fragment);
ft.commit();
showFragment(linkId, uri);
setTitle(linkId, uri);
mFinishOnly = Boolean.parseBoolean(uri.getQueryParameter(QUERY_PARAM_FINISH_ONLY));
if (fragment instanceof IToolBarSupportFragment) {
ThemeUtils.setCompatContentViewOverlay(this, new EmptyDrawable());
}
}
@Override
@ -264,7 +269,7 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
return mActionBarHeight = ThemeUtils.getActionBarHeight(this);
}
private boolean showFragment(final int linkId, final Uri uri) {
private boolean setTitle(final int linkId, final Uri uri) {
setSubtitle(null);
switch (linkId) {
case LINK_ID_STATUS: {

View File

@ -21,10 +21,7 @@ package org.mariotaku.twidere.activity;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@ -35,6 +32,8 @@ import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@ -43,6 +42,8 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.SupportTabsAdapter;
@ -480,9 +481,10 @@ public class SettingsWizardActivity extends BaseAppCompatActivity implements Con
gotoNextPage();
}
@NonNull
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final AlertDialogWrapper.Builder builder = new AlertDialogWrapper.Builder(getActivity());
builder.setMessage(R.string.wizard_page_tabs_unchanged_message);
builder.setPositiveButton(android.R.string.ok, this);
return builder.create();
@ -632,7 +634,7 @@ public class SettingsWizardActivity extends BaseAppCompatActivity implements Con
@Override
protected void onPostExecute(final Boolean result) {
final FragmentManager fm = mActivity.getFragmentManager();
final FragmentManager fm = mActivity.getSupportFragmentManager();
final DialogFragment f = (DialogFragment) fm.findFragmentByTag(FRAGMENT_TAG);
if (f != null) {
f.dismiss();

View File

@ -97,7 +97,7 @@ public class AccountsSpinnerAdapter extends ArrayAdapter<ParcelableCredentials>
if (icon != null) {
icon.setVisibility(View.VISIBLE);
if (mDisplayProfileImage) {
mImageLoader.displayProfileImage(icon, item.profile_image_url);
mImageLoader.displayProfileImage(icon, item);
} else {
mImageLoader.cancelDisplayTask(icon);
// icon.setImageResource(R.drawable.ic_profile_image_default);

View File

@ -76,7 +76,7 @@ public class SimpleParcelableUsersAdapter extends BaseArrayAdapter<ParcelableUse
holder.text2.setText(String.format("@%s", user.screen_name));
holder.icon.setVisibility(isProfileImageDisplayed() ? View.VISIBLE : View.GONE);
if (isProfileImageDisplayed()) {
mImageLoader.displayProfileImage(holder.icon, user.profile_image_url);
mImageLoader.displayProfileImage(holder.icon, user);
} else {
mImageLoader.cancelDisplayTask(holder.icon);
}

View File

@ -103,7 +103,7 @@ public class StaggeredGridParcelableStatusesAdapter extends ParcelableStatusesAd
mediaImageContainer.requestLayout();
mediaImageView.setHasPlayIcon(ParcelableMediaUtils.hasPlayIcon(firstMedia.type));
loader.displayProfileImage(mediaProfileImageView, status.user_profile_image_url);
loader.displayProfileImage(mediaProfileImageView, status);
loader.displayPreviewImageWithCredentials(mediaImageView, firstMedia.preview_url,
status.account_key, adapter.getMediaLoadingHandler());
}

View File

@ -44,7 +44,7 @@ public abstract class AbsToolbarTabPagesFragment extends BaseSupportFragment imp
private SupportTabsAdapter mPagerAdapter;
private TabPagerIndicator mPagerIndicator;
private ViewPager mViewPager;
private View mPagerOverlay;
private View mWindowOverlay;
private Toolbar mToolbar;
private int mControlBarHeight;
private ExtendedLinearLayout mToolbarContainer;
@ -117,7 +117,7 @@ public abstract class AbsToolbarTabPagesFragment extends BaseSupportFragment imp
mViewPager = (ViewPager) view.findViewById(R.id.view_pager);
mToolbarContainer = (ExtendedLinearLayout) view.findViewById(R.id.toolbar_container);
mPagerIndicator = (TabPagerIndicator) view.findViewById(R.id.toolbar_tabs);
mPagerOverlay = view.findViewById(R.id.pager_window_overlay);
mWindowOverlay = view.findViewById(R.id.window_overlay);
mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
final Object host = getHost();
@ -213,7 +213,9 @@ public abstract class AbsToolbarTabPagesFragment extends BaseSupportFragment imp
@Override
public void setControlBarOffset(float offset) {
if (mToolbarContainer == null) return;
mToolbarContainer.setTranslationY((offset - 1) * getControlBarHeight());
final float translationY = (offset - 1) * getControlBarHeight();
mToolbarContainer.setTranslationY(translationY);
mWindowOverlay.setTranslationY(translationY);
}
@Override

View File

@ -1522,7 +1522,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
}
public void displayUser(ParcelableUser item) {
adapter.getMediaLoader().displayProfileImage(profileImageView, item.profile_image_url);
adapter.getMediaLoader().displayProfileImage(profileImageView, item);
}
@Override

View File

@ -314,11 +314,13 @@ public class BackgroundOperationService extends IntentService implements Constan
recipientId, text, imageUri);
final ContentResolver resolver = getContentResolver();
if (result.getData() != null && result.getData().id != null) {
final ContentValues values = ContentValuesCreator.createDirectMessage(result.getData());
final String delete_where = DirectMessages.ACCOUNT_KEY + " = " + accountId + " AND "
+ DirectMessages.MESSAGE_ID + " = " + result.getData().id;
resolver.delete(DirectMessages.Outbox.CONTENT_URI, delete_where, null);
if (result.hasData()) {
final ParcelableDirectMessage message = result.getData();
final ContentValues values = ContentValuesCreator.createDirectMessage(message);
final String deleteWhere = Expression.and(Expression.equalsArgs(DirectMessages.ACCOUNT_KEY),
Expression.equalsArgs(DirectMessages.MESSAGE_ID)).getSQL();
String[] deleteWhereArgs = {message.account_key.toString(), message.id};
resolver.delete(DirectMessages.Outbox.CONTENT_URI, deleteWhere, deleteWhereArgs);
resolver.insert(DirectMessages.Outbox.CONTENT_URI, values);
showOkMessage(R.string.direct_message_sent, false);
} else {

View File

@ -323,11 +323,12 @@ public class StreamingService extends Service implements Constants {
@Override
public void onScrubGeo(final long userId, final long upToStatusId) {
final String where = Statuses.USER_ID + " = " + userId + " AND " + Statuses.STATUS_ID + " >= "
+ upToStatusId;
final String where = Expression.and(Expression.equalsArgs(Statuses.USER_ID),
Expression.greaterEqualsArgs(Statuses.SORT_ID)).getSQL();
final String[] whereArgs = {String.valueOf(userId), String.valueOf(upToStatusId)};
final ContentValues values = new ContentValues();
values.putNull(Statuses.LOCATION);
resolver.update(Statuses.CONTENT_URI, values, where, null);
resolver.update(Statuses.CONTENT_URI, values, where, whereArgs);
}
@Override

View File

@ -62,8 +62,6 @@ import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.iface.IThemedActivity;
import org.mariotaku.twidere.graphic.ActionBarColorDrawable;
import org.mariotaku.twidere.graphic.ActionIconDrawable;
import org.mariotaku.twidere.graphic.iface.DoNotWrapDrawable;
import org.mariotaku.twidere.preference.ThemeBackgroundPreference;
import org.mariotaku.twidere.util.menu.TwidereMenuInfo;
import org.mariotaku.twidere.util.support.ViewSupport;
@ -617,7 +615,7 @@ public class ThemeUtils implements Constants {
final Window window = activity.getWindow();
View contentLayout = window.findViewById(android.support.v7.appcompat.R.id.action_bar_activity_content);
if (contentLayout == null) {
contentLayout = window.findViewById(android.R.id.content);
contentLayout = window.findViewById(R.id.content);
}
if (contentLayout instanceof FrameLayout) {
ViewSupport.setForeground(contentLayout, overlay);
@ -699,18 +697,18 @@ public class ThemeUtils implements Constants {
public static void wrapMenuItemIcon(@NonNull MenuItem item, int itemColor, int... excludeGroups) {
if (ArrayUtils.contains(excludeGroups, item.getGroupId())) return;
final Drawable icon = item.getIcon();
if (icon == null || icon instanceof DoNotWrapDrawable) return;
if (icon instanceof ActionIconDrawable) {
((ActionIconDrawable) icon).setDefaultColor(itemColor);
item.setIcon(icon);
return;
}
icon.mutate();
final Drawable.Callback callback = icon.getCallback();
final ActionIconDrawable newIcon = new ActionIconDrawable(icon, itemColor);
newIcon.setCallback(callback);
item.setIcon(newIcon);
// final Drawable icon = item.getIcon();
// if (icon == null || icon instanceof DoNotWrapDrawable) return;
// if (icon instanceof ActionIconDrawable) {
// ((ActionIconDrawable) icon).setDefaultColor(itemColor);
// item.setIcon(icon);
// return;
// }
// icon.mutate();
// final Drawable.Callback callback = icon.getCallback();
// final ActionIconDrawable newIcon = new ActionIconDrawable(icon, itemColor);
// newIcon.setCallback(callback);
// item.setIcon(newIcon);
}
public static void wrapToolbarMenuIcon(@Nullable ActionMenuView view, int itemColor, int popupItemColor, int... excludeGroups) {

View File

@ -144,7 +144,7 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
view.setImageDrawable(null);
if (i < length) {
view.setVisibility(View.VISIBLE);
imageLoader.displayProfileImage(view, statuses[i].profile_image_url);
imageLoader.displayProfileImage(view, statuses[i]);
} else {
imageLoader.cancelDisplayTask(view);
view.setVisibility(View.GONE);

View File

@ -17,7 +17,7 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<org.mariotaku.twidere.view.ExtendedFrameLayout
<org.mariotaku.twidere.view.ExtendedRelativeLayout
android:id="@+id/home_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
@ -37,6 +37,7 @@
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:layout_alignParentTop="true"
android:elevation="@dimen/toolbar_elevation"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp">
@ -51,11 +52,20 @@
tools:listitem="@layout/layout_tab_item"/>
</android.support.v7.widget.Toolbar>
<View
android:id="@+id/window_overlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/action_bar"
android:background="?android:windowContentOverlay"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/actions_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/element_spacing_large"
android:clickable="true"
android:src="@drawable/ic_action_status_compose"
@ -63,4 +73,4 @@
app:elevation="6dp"
app:pressedTranslationZ="12dp"/>
</org.mariotaku.twidere.view.ExtendedFrameLayout>
</org.mariotaku.twidere.view.ExtendedRelativeLayout>

View File

@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<FrameLayout
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
@ -55,4 +55,11 @@
tools:listitem="@layout/layout_tab_item"/>
</org.mariotaku.twidere.view.ExtendedLinearLayout>
</FrameLayout>
<View
android:id="@+id/window_overlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/toolbar_container"
android:background="?android:windowContentOverlay"/>
</RelativeLayout>

View File

@ -55,9 +55,4 @@
android:key="tab_display_option"
android:title="@string/tab_display_option"/>
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="leftside_compose_button"
android:summary="@string/leftside_compose_button_summary"
android:title="@string/leftside_compose_button"/>
</PreferenceScreen>