fixed crashes when calling from malformed intent
This commit is contained in:
parent
86ec5e3f4f
commit
d8eb58d3a2
|
@ -233,6 +233,7 @@
|
|||
<activity
|
||||
android:name=".activity.FiltersActivity"
|
||||
android:label="@string/filters"
|
||||
android:exported="false"
|
||||
android:theme="@style/Theme.Twidere.Dark.DialogWhenLarge"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
|
|
|
@ -855,6 +855,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements TextWatch
|
|||
|
||||
private boolean handleIntent(final Intent intent) {
|
||||
final String action = intent.getAction();
|
||||
if (action == null) return false;
|
||||
mShouldSaveAccounts = false;
|
||||
mMentionUser = intent.getParcelableExtra(EXTRA_USER);
|
||||
mInReplyToStatus = intent.getParcelableExtra(EXTRA_STATUS);
|
||||
|
|
|
@ -156,7 +156,7 @@ public class LinkHandlerActivity extends BaseActionBarActivity implements System
|
|||
setStatusBarColor(linkId, data);
|
||||
setTaskInfo(linkId, data);
|
||||
setSupportProgressBarIndeterminateVisibility(false);
|
||||
if (data == null || !showFragment(linkId, data)) {
|
||||
if (!showFragment(linkId, data)) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -184,7 +184,8 @@ public class SignInActivity extends BaseActionBarActivity implements TwitterCons
|
|||
break;
|
||||
}
|
||||
case R.id.sign_in_method_introduction: {
|
||||
new SignInMethodIntroductionDialogFragment().show(getSupportFragmentManager(),
|
||||
final FragmentManager fm = getSupportFragmentManager();
|
||||
new SignInMethodIntroductionDialogFragment().show(fm.beginTransaction(),
|
||||
"sign_in_method_introduction");
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -45,9 +45,6 @@ import org.mariotaku.twidere.util.TwidereLinkify;
|
|||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.view.holder.MessageConversationViewHolder;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.findDirectMessageInDatabases;
|
||||
import static org.mariotaku.twidere.util.Utils.openMedia;
|
||||
|
||||
public class MessageConversationAdapter extends Adapter<ViewHolder>
|
||||
implements Constants, IDirectMessagesAdapter, OnClickListener {
|
||||
|
||||
|
@ -160,7 +157,7 @@ public class MessageConversationAdapter extends Adapter<ViewHolder>
|
|||
c.moveToPosition(position);
|
||||
final long account_id = c.getLong(mIndices.account_id);
|
||||
final long message_id = c.getLong(mIndices.message_id);
|
||||
return findDirectMessageInDatabases(mContext, account_id, message_id);
|
||||
return Utils.findDirectMessageInDatabases(mContext, account_id, message_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -175,7 +172,7 @@ public class MessageConversationAdapter extends Adapter<ViewHolder>
|
|||
if (message == null || message.media == null) return;
|
||||
//TODO open media animation
|
||||
Bundle options = null;
|
||||
openMedia(mContext, message, null, options);
|
||||
Utils.openMedia(mContext, message, null, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,11 +3,9 @@ package org.mariotaku.twidere.fragment.support;
|
|||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.ActivityOptionsCompat;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.Loader;
|
||||
|
@ -248,11 +246,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListFragment<A
|
|||
final AbsStatusesAdapter<Data> adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.getStatus(position);
|
||||
if (status == null) return;
|
||||
//TODO open media animation
|
||||
view.buildDrawingCache();
|
||||
final Bitmap drawingCache = Bitmap.createBitmap(view.getDrawingCache());
|
||||
final Bundle options = ActivityOptionsCompat.makeThumbnailScaleUpAnimation(view, drawingCache, 0, 0).toBundle();
|
||||
view.destroyDrawingCache();
|
||||
final Bundle options = Utils.createMediaViewerActivityOption(view);
|
||||
Utils.openMedia(getActivity(), status, media, options);
|
||||
//spice
|
||||
SpiceProfilingUtil.log(getActivity(),
|
||||
|
|
|
@ -26,7 +26,6 @@ import android.content.Context;
|
|||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
|
@ -38,7 +37,6 @@ import android.os.AsyncTask;
|
|||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.ActivityOptionsCompat;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
|
@ -297,10 +295,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
public void onMediaClick(StatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
final ParcelableStatus status = mStatusAdapter.getStatus(position);
|
||||
if (status == null) return;
|
||||
view.buildDrawingCache();
|
||||
final Bitmap drawingCache = Bitmap.createBitmap(view.getDrawingCache());
|
||||
final Bundle options = ActivityOptionsCompat.makeThumbnailScaleUpAnimation(view, drawingCache, 0, 0).toBundle();
|
||||
view.destroyDrawingCache();
|
||||
final Bundle options = Utils.createMediaViewerActivityOption(view);
|
||||
Utils.openMedia(getActivity(), status, media, options);
|
||||
SpiceProfilingUtil.log(getActivity(),
|
||||
status.id + ",Clicked," + status.account_id + "," + status.user_id + "," + status.text_plain.length()
|
||||
|
@ -384,10 +379,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
public void onMediaClick(View view, ParcelableMedia media, long accountId) {
|
||||
final ParcelableStatus status = mStatusAdapter.getStatus();
|
||||
if (status == null) return;
|
||||
view.buildDrawingCache();
|
||||
final Bitmap drawingCache = Bitmap.createBitmap(view.getDrawingCache());
|
||||
final Bundle options = ActivityOptionsCompat.makeThumbnailScaleUpAnimation(view, drawingCache, 0, 0).toBundle();
|
||||
view.destroyDrawingCache();
|
||||
final Bundle options = Utils.createMediaViewerActivityOption(view);
|
||||
Utils.openMediaDirectly(getActivity(), accountId, status, media, status.media, options);
|
||||
//spice
|
||||
SpiceProfilingUtil.log(getActivity(),
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.apache.commons.lang3.ArrayUtils;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class IntentActivitiesLoader extends AsyncTaskLoader<List<ResolveInfo>> implements Constants {
|
||||
|
@ -61,6 +62,7 @@ public class IntentActivitiesLoader extends AsyncTaskLoader<List<ResolveInfo>> i
|
|||
|
||||
@Override
|
||||
public List<ResolveInfo> loadInBackground() {
|
||||
if (mIntent == null) return Collections.emptyList();
|
||||
final List<ResolveInfo> activities = mPackageManager.queryIntentActivities(mIntent, mFlags);
|
||||
final List<ResolveInfo> result = new ArrayList<>();
|
||||
for (final ResolveInfo activity : activities) {
|
||||
|
|
|
@ -711,6 +711,18 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
}
|
||||
}
|
||||
|
||||
public static Bundle createMediaViewerActivityOption(View view) {
|
||||
view.buildDrawingCache();
|
||||
try {
|
||||
final Bitmap viewDrawingCache = view.getDrawingCache();
|
||||
if (viewDrawingCache == null) return null;
|
||||
final Bitmap drawingCache = Bitmap.createBitmap(viewDrawingCache);
|
||||
return ActivityOptionsCompat.makeThumbnailScaleUpAnimation(view, drawingCache, 0, 0).toBundle();
|
||||
} finally {
|
||||
view.destroyDrawingCache();
|
||||
}
|
||||
}
|
||||
|
||||
public static int[] getAccountColors(@Nullable final ParcelableAccount[] accounts) {
|
||||
if (accounts == null) return null;
|
||||
final int[] colors = new int[accounts.length];
|
||||
|
@ -2851,17 +2863,19 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static int matchLinkId(final Uri uri) {
|
||||
public static int matchLinkId(@Nullable final Uri uri) {
|
||||
if (uri == null) return UriMatcher.NO_MATCH;
|
||||
return LINK_HANDLER_URI_MATCHER.match(uri);
|
||||
}
|
||||
|
||||
|
||||
public static int matchTabCode(final Uri uri) {
|
||||
public static int matchTabCode(@Nullable final Uri uri) {
|
||||
if (uri == null) return UriMatcher.NO_MATCH;
|
||||
return HOME_TABS_URI_MATCHER.match(uri);
|
||||
}
|
||||
|
||||
|
||||
public static String matchTabType(final Uri uri) {
|
||||
public static String matchTabType(@Nullable final Uri uri) {
|
||||
return getTabType(matchTabCode(uri));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +1,14 @@
|
|||
package org.mariotaku.twidere.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.text.SpannableString;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import org.mariotaku.twidere.view.iface.IExtendedView;
|
||||
import org.mariotaku.twidere.view.themed.ThemedTextView;
|
||||
|
||||
public class StatusTextView extends ThemedTextView implements IExtendedView {
|
||||
public class StatusTextView extends ThemedTextView {
|
||||
|
||||
private TouchInterceptor mTouchInterceptor;
|
||||
private OnSizeChangedListener mOnSizeChangedListener;
|
||||
private OnSelectionChangeListener mOnSelectionChangeListener;
|
||||
private OnFitSystemWindowsListener mOnFitSystemWindowsListener;
|
||||
|
||||
public StatusTextView(final Context context) {
|
||||
super(context);
|
||||
|
@ -30,21 +23,6 @@ public class StatusTextView extends ThemedTextView implements IExtendedView {
|
|||
super(context, attrs, defStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {
|
||||
mOnFitSystemWindowsListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setOnSizeChangedListener(final OnSizeChangedListener listener) {
|
||||
mOnSizeChangedListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setTouchInterceptor(final TouchInterceptor listener) {
|
||||
mTouchInterceptor = listener;
|
||||
}
|
||||
|
||||
public void setOnSelectionChangeListener(final OnSelectionChangeListener l) {
|
||||
mOnSelectionChangeListener = l;
|
||||
}
|
||||
|
@ -66,40 +44,6 @@ public class StatusTextView extends ThemedTextView implements IExtendedView {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean onTouchEvent(@NonNull final MotionEvent event) {
|
||||
if (mTouchInterceptor != null) {
|
||||
final boolean ret = mTouchInterceptor.onTouchEvent(this, event);
|
||||
if (ret) return true;
|
||||
}
|
||||
return super.onTouchEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean fitSystemWindows(@NonNull Rect insets) {
|
||||
if (mOnFitSystemWindowsListener != null) {
|
||||
mOnFitSystemWindowsListener.onFitSystemWindows(insets);
|
||||
}
|
||||
return super.fitSystemWindows(insets);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean dispatchTouchEvent(@NonNull final MotionEvent event) {
|
||||
if (mTouchInterceptor != null) {
|
||||
final boolean ret = mTouchInterceptor.dispatchTouchEvent(this, event);
|
||||
if (ret) return true;
|
||||
}
|
||||
return super.dispatchTouchEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onSizeChanged(final int w, final int h, final int oldw, final int oldh) {
|
||||
super.onSizeChanged(w, h, oldw, oldh);
|
||||
if (mOnSizeChangedListener != null) {
|
||||
mOnSizeChangedListener.onSizeChanged(this, w, h, oldw, oldh);
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnSelectionChangeListener {
|
||||
void onSelectionChanged(int selStart, int selEnd);
|
||||
}
|
||||
|
|
|
@ -226,9 +226,9 @@
|
|||
<style name="Theme.Twidere.Viewer" parent="Theme.AppCompat">
|
||||
|
||||
<!-- Window attributes -->
|
||||
<item name="android:windowBackground">@color/bg_color_media_viewer</item>
|
||||
<item name="android:windowIsTranslucent">true</item>
|
||||
<item name="android:colorBackgroundCacheHint">@null</item>
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
<!--<item name="android:windowIsTranslucent">true</item>-->
|
||||
<!--<item name="android:colorBackgroundCacheHint">@null</item>-->
|
||||
<item name="windowActionBarOverlay">true</item>
|
||||
<item name="actionBarStyle">@style/Widget.Twidere.Viewer.ActionBar</item>
|
||||
<item name="actionModeShareDrawable">@drawable/ic_action_share</item>
|
||||
|
|
Loading…
Reference in New Issue