navigate to opened tweet in tweet view

This commit is contained in:
Mariotaku Lee 2015-10-16 19:53:03 +08:00
parent c245c05c56
commit ed80e534cc
5 changed files with 119 additions and 62 deletions

View File

@ -64,6 +64,7 @@ import android.text.style.URLSpan;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
@ -101,6 +102,7 @@ import org.mariotaku.twidere.util.LinkCreator;
import org.mariotaku.twidere.util.MathUtils;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MediaLoadingHandler;
import org.mariotaku.twidere.util.MenuUtils;
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
import org.mariotaku.twidere.util.RecyclerViewUtils;
import org.mariotaku.twidere.util.StatusActionModeCallback;
@ -272,6 +274,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
final View view = getView();
if (view == null) throw new AssertionError();
final Context context = view.getContext();
@ -577,6 +580,32 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
//TODO show errors
setState(STATE_ERROR);
}
invalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.current_status: {
if (mStatusAdapter.getStatus() != null) {
final int position = mStatusAdapter.getFirstPositionOfItem(StatusAdapter.ITEM_IDX_STATUS);
mRecyclerView.smoothScrollToPosition(position);
}
return true;
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuUtils.setMenuItemAvailability(menu, R.id.current_status, mStatusAdapter.getStatus() != null);
super.onPrepareOptionsMenu(menu);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_status, menu);
}
private void setConversation(List<ParcelableStatus> data) {
@ -923,7 +952,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
final StatusFragment fragment = adapter.getFragment();
final FragmentActivity activity = fragment.getActivity();
final MenuInflater inflater = activity.getMenuInflater();
inflater.inflate(R.menu.menu_status, menuBar.getMenu());
inflater.inflate(R.menu.menu_detail_status, menuBar.getMenu());
ThemeUtils.wrapMenuIcon(menuBar, MENU_GROUP_STATUS_SHARE);
mediaPreviewLoad.setOnClickListener(this);
profileContainer.setOnClickListener(this);

View File

@ -43,20 +43,20 @@ public class SquareImageView extends ImageView {
final int width = MeasureSpec.getSize(widthMeasureSpec), height = MeasureSpec.getSize(heightMeasureSpec);
final ViewGroup.LayoutParams lp = getLayoutParams();
if (lp.height == ViewGroup.LayoutParams.MATCH_PARENT && lp.width == ViewGroup.LayoutParams.WRAP_CONTENT) {
super.onMeasure(heightMeasureSpec, heightMeasureSpec);
setMeasuredDimension(height, height);
super.onMeasure(makeSpec(heightMeasureSpec, MeasureSpec.EXACTLY), makeSpec(heightMeasureSpec, MeasureSpec.EXACTLY));
} else if (lp.width == ViewGroup.LayoutParams.MATCH_PARENT && lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
setMeasuredDimension(width, width);
super.onMeasure(makeSpec(widthMeasureSpec, MeasureSpec.EXACTLY), makeSpec(widthMeasureSpec, MeasureSpec.EXACTLY));
} else {
if (width > height) {
super.onMeasure(heightMeasureSpec, heightMeasureSpec);
setMeasuredDimension(height, height);
super.onMeasure(makeSpec(heightMeasureSpec, MeasureSpec.EXACTLY), makeSpec(heightMeasureSpec, MeasureSpec.EXACTLY));
} else {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
setMeasuredDimension(width, width);
super.onMeasure(makeSpec(widthMeasureSpec, MeasureSpec.EXACTLY), makeSpec(widthMeasureSpec, MeasureSpec.EXACTLY));
}
}
}
private static int makeSpec(int spec, int mode) {
return MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(spec), mode);
}
}

View File

@ -0,0 +1,56 @@
<?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/reply"
android:icon="@drawable/ic_action_reply"
android:title="@string/reply"
app:showAsAction="always" />
<item
android:id="@id/retweet"
android:icon="@drawable/ic_action_retweet"
android:title="@string/retweet"
app:showAsAction="always" />
<item
android:id="@id/favorite"
android:icon="@drawable/ic_action_star"
android:title="@string/favorite"
app:showAsAction="always" />
<item
android:id="@id/share"
android:icon="@drawable/ic_action_share"
android:title="@string/share"
app:actionProviderClass="org.mariotaku.twidere.menu.SupportStatusShareProvider"
app:showAsAction="always" />
<item
android:id="@id/copy"
android:icon="@drawable/ic_action_copy"
android:title="@android:string/copy" />
<item
android:id="@id/translate"
android:icon="@drawable/ic_action_translate"
android:title="@string/translate" />
<item
android:id="@id/add_to_filter"
android:icon="@drawable/ic_action_speaker_muted"
android:title="@string/add_to_filter" />
<item
android:id="@id/set_color"
android:icon="@drawable/ic_action_color_palette"
android:title="@string/set_color" />
<item
android:id="@id/set_nickname"
android:icon="@drawable/ic_action_edit"
android:title="@string/set_nickname" />
<item
android:id="@id/delete"
android:icon="@drawable/ic_action_delete"
android:title="@string/delete"
android:visible="false" />
<item
android:id="@id/open_with_account"
android:icon="@drawable/ic_action_accounts"
android:title="@string/open_with_account" />
</menu>

View File

@ -1,56 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?><!--
~ Twidere - Twitter client for Android
~
~ Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@id/reply"
android:icon="@drawable/ic_action_reply"
android:title="@string/reply"
app:showAsAction="always"/>
<item
android:id="@id/retweet"
android:icon="@drawable/ic_action_retweet"
android:title="@string/retweet"
app:showAsAction="always"/>
<item
android:id="@id/favorite"
android:icon="@drawable/ic_action_star"
android:title="@string/favorite"
app:showAsAction="always"/>
<item
android:id="@id/share"
android:icon="@drawable/ic_action_share"
android:title="@string/share"
app:actionProviderClass="org.mariotaku.twidere.menu.SupportStatusShareProvider"
app:showAsAction="always"/>
<item
android:id="@id/copy"
android:icon="@drawable/ic_action_copy"
android:title="@android:string/copy"/>
<item
android:id="@id/translate"
android:icon="@drawable/ic_action_translate"
android:title="@string/translate"/>
<item
android:id="@id/add_to_filter"
android:icon="@drawable/ic_action_speaker_muted"
android:title="@string/add_to_filter"/>
<item
android:id="@id/set_color"
android:icon="@drawable/ic_action_color_palette"
android:title="@string/set_color"/>
<item
android:id="@id/set_nickname"
android:icon="@drawable/ic_action_edit"
android:title="@string/set_nickname"/>
<item
android:id="@id/delete"
android:icon="@drawable/ic_action_delete"
android:title="@string/delete"
android:visible="false"/>
<item
android:id="@id/open_with_account"
android:icon="@drawable/ic_action_accounts"
android:title="@string/open_with_account"/>
android:id="@+id/current_status"
android:icon="@drawable/ic_action_twitter"
android:title="@string/current_status"
app:showAsAction="always" />
</menu>

View File

@ -796,4 +796,5 @@
<string name="user_mentioned_you"><xliff:g id="name">%s</xliff:g> mentioned you</string>
<string name="cant_load_all_replies_message">Can\'t load all replies. &lt;a href=\"#dialog\";&gt;Why?&lt;/a&gt;</string>
<string name="cant_load_all_replies_explanation">Due to Twitter\'s limitation to third party twitter apps, Twidere has no access to replies to a tweet, there\'s no guarantee that Twidere can load all replies to a tweet.</string>
<string name="current_status">Current tweet</string>
</resources>