Add popup menu to paged change details and offer abandon/restore
The paged change details fragment hides the default support action
bar. To offer additional actions, add a custom popup menu. For now
abandon/restore are available from this menu (more action will come
later).
Change-Id: I3528539efd8a501b3202dc8d7d345d6d2a8b54eb
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/app/src/main/java/com/google/reviewit/AbandonFragment.java b/app/src/main/java/com/google/reviewit/AbandonFragment.java
index 18fd229..ca99768 100644
--- a/app/src/main/java/com/google/reviewit/AbandonFragment.java
+++ b/app/src/main/java/com/google/reviewit/AbandonFragment.java
@@ -50,7 +50,7 @@
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- Change change = getApp().getSortActionHandler().getCurrentChange();
+ Change change = getApp().getCurrentChange();
setTitle(getString(R.string.abandon_change_title, change.info._number));
init(change);
}
diff --git a/app/src/main/java/com/google/reviewit/PagedChangeDetailsFragment.java b/app/src/main/java/com/google/reviewit/PagedChangeDetailsFragment.java
index 72f5de8..ee78ec5 100644
--- a/app/src/main/java/com/google/reviewit/PagedChangeDetailsFragment.java
+++ b/app/src/main/java/com/google/reviewit/PagedChangeDetailsFragment.java
@@ -19,7 +19,11 @@
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.PopupMenu;
+import com.google.gerrit.extensions.client.ChangeStatus;
import com.google.reviewit.app.Change;
import com.google.reviewit.widget.ChangeEntry;
import com.google.reviewit.widget.SlidingTabLayout;
@@ -47,7 +51,7 @@
}
private void init() {
- Change change = getApp().getQueryHandler().getCurrentChange();
+ final Change change = getApp().getQueryHandler().getCurrentChange();
checkArgument(change != null, "No change to display");
ChangeEntry changeEntry = new ChangeEntry(getContext());
@@ -97,5 +101,39 @@
tabs.setBottomBorderThickness(widgetUtil.dpToPx(1));
tabs.setSelectedIndicatorThickness(widgetUtil.dpToPx(5));
tabs.setViewPager(pager);
+
+ final View more = v(R.id.more);
+ more.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ PopupMenu popup = new PopupMenu(getContext(), more);
+ popup.getMenuInflater()
+ .inflate(R.menu.menu_paged_change_details, popup.getMenu());
+
+ popup.getMenu().findItem(R.id.action_abandon).setVisible(
+ change.info.status == ChangeStatus.NEW
+ || change.info.status == ChangeStatus.SUBMITTED);
+ popup.getMenu().findItem(R.id.action_restore).setVisible(
+ change.info.status == ChangeStatus.ABANDONED);
+
+ popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.action_abandon:
+ display(AbandonFragment.create(
+ PagedChangeDetailsFragment.class));
+ return true;
+ case R.id.action_restore:
+ display(RestoreFragment.create(
+ PagedChangeDetailsFragment.class));
+ return true;
+ default:
+ return true;
+ }
+ }
+ });
+ popup.show();
+ }
+ });
}
}
diff --git a/app/src/main/java/com/google/reviewit/RestoreFragment.java b/app/src/main/java/com/google/reviewit/RestoreFragment.java
index abd107b..e51ebfa 100644
--- a/app/src/main/java/com/google/reviewit/RestoreFragment.java
+++ b/app/src/main/java/com/google/reviewit/RestoreFragment.java
@@ -50,7 +50,7 @@
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- Change change = getApp().getSortActionHandler().getCurrentChange();
+ Change change = getApp().getCurrentChange();
setTitle(getString(R.string.restore_change_title, change.info._number));
init(change);
}
diff --git a/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png
new file mode 100755
index 0000000..67f07e4
--- /dev/null
+++ b/app/src/main/res/drawable-hdpi/ic_more_vert_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png
new file mode 100755
index 0000000..017e45e
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/ic_more_vert_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png
new file mode 100755
index 0000000..efab8a7
--- /dev/null
+++ b/app/src/main/res/drawable-xhdpi/ic_more_vert_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png
new file mode 100755
index 0000000..d322813
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/ic_more_vert_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png
new file mode 100755
index 0000000..2f2cb3d
--- /dev/null
+++ b/app/src/main/res/drawable-xxxhdpi/ic_more_vert_white_24dp.png
Binary files differ
diff --git a/app/src/main/res/layout/content_paged_change_details.xml b/app/src/main/res/layout/content_paged_change_details.xml
index fd707df..0178bba 100644
--- a/app/src/main/res/layout/content_paged_change_details.xml
+++ b/app/src/main/res/layout/content_paged_change_details.xml
@@ -30,11 +30,52 @@
android:layout_height="1dp"
android:layout_width="match_parent"/>
- <com.google.reviewit.widget.SlidingTabLayout
- android:id="@+id/tabs"
+ <LinearLayout
+ android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/tabBackground"/>
+ android:baselineAligned="false">
+
+ <com.google.reviewit.widget.SlidingTabLayout
+ android:id="@+id/tabs"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:background="@color/tabBackground"/>
+
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent">
+ <View
+ android:background="@color/tabBackground"
+ android:layout_height="0dp"
+ android:layout_width="match_parent"
+ android:layout_weight="1"/>
+
+ <ImageView
+ android:id="@+id/more"
+ android:layout_width="30dp"
+ android:layout_height="30dp"
+ android:src="@drawable/ic_more_vert_white_24dp"
+ android:tint="@color/tab"
+ android:paddingStart="3dp"
+ android:paddingEnd="3dp"
+ android:background="@color/tabBackground"
+ android:contentDescription="@string/more_description"/>
+
+ <View
+ android:background="@color/tabBackground"
+ android:layout_height="0dp"
+ android:layout_width="match_parent"
+ android:layout_weight="1"/>
+
+ <View
+ android:background="@color/tab"
+ android:layout_height="1dp"
+ android:layout_width="match_parent"/>
+ </LinearLayout>
+ </LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
diff --git a/app/src/main/res/menu/menu_paged_change_details.xml b/app/src/main/res/menu/menu_paged_change_details.xml
new file mode 100644
index 0000000..70267c8
--- /dev/null
+++ b/app/src/main/res/menu/menu_paged_change_details.xml
@@ -0,0 +1,27 @@
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ <item
+ android:id="@+id/action_abandon"
+ android:orderInCategory="100"
+ android:title="@string/action_abandon"
+ app:showAsAction="never"/>
+ <item
+ android:id="@+id/action_restore"
+ android:orderInCategory="100"
+ android:title="@string/action_restore"
+ app:showAsAction="never"/>
+</menu>
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 7a0cc62..dd38d9a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -76,6 +76,7 @@
<color name="nonMergable">#F5BC00</color>
<color name="noResults">#CEFFB8</color>
<color name="noState">#FFFFFF</color>
+ <color name="popupBackground">#d4e0ff</color>
<color name="postReview">#FFF</color>
<color name="progressBar">#4f91c9</color>
<color name="progressBarBackground">#08000000</color>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e79741b..9bf157e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -247,6 +247,9 @@
<string name="review_error">Posting review failed with %1$d %2$s</string>
<string name="submit_error">Submit failed with %1$d %2$s</string>
+ <!-- PagedChangeDetailsFragment -->
+ <string name="more_description">More Actions Menu</string>
+
<!-- CommitMessageFragment -->
<string name="commit_message_title">Commit Message</string>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 230b562..1a0e376 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -16,6 +16,11 @@
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">@drawable/preview_screen</item>
+ <item name="android:popupMenuStyle">@style/PopupMenu</item>
+ </style>
+
+ <style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
+ <item name="android:popupBackground">@color/popupBackground</item>
</style>
<style name="AppTheme.NoActionBar">